@@ -66,53 +66,96 @@ function safeVar(data, path)
6666 return res ;
6767}
6868
69- function parseOutput ( data , o , oTitle )
69+ var backends = {
70+ dpaste : {
71+ url : "https://dpaste.dzfl.pl/request/" ,
72+ contentType : "application/x-www-form-urlencoded; charset=UTF-8" ,
73+ requestTransform : function ( data ) {
74+ return data ;
75+ } ,
76+ parseOutput : function ( data , opts ) {
77+ var r = { } ;
78+ if ( data . compilation === "undefined" )
79+ return null ;
80+ r . cout = safeVar ( data , "compilation.stdout" ) ;
81+ r . stdout = safeVar ( data , "runtime.stdout" ) ;
82+ r . stderr = safeVar ( data , "runtime.stderr" ) ;
83+ r . ctime = parseInt ( safeVar ( data , "compilation.time" ) ) ;
84+ r . rtime = parseInt ( safeVar ( data , "runtime.time" ) ) ;
85+ r . cstatus = parseInt ( safeVar ( data , "compilation.status" ) ) ;
86+ r . rstatus = parseInt ( safeVar ( data , "runtime.status" ) ) ;
87+ r . cerr = safeVar ( data , "compilation.err" ) ;
88+ r . rerr = safeVar ( data , "runtime.err" ) ;
89+ r . defaultOutput = data . output || opts . defaultOutput ;
90+ return r ;
91+ }
92+ } ,
93+ tour : {
94+ url : "https://tour.dlang.org/api/v1/run" ,
95+ contentType : "application/json; charset=utf-8" ,
96+ requestTransform : function ( data ) {
97+ return JSON . stringify ( {
98+ source : data . code
99+ } ) ;
100+ } ,
101+ parseOutput : function ( data , opts ) {
102+ var r = { } ;
103+ if ( data . success === "undefined" ) {
104+ return null ;
105+ }
106+ r . cout = data . success === false ? data . output : "" ;
107+ r . stdout = data . success === true ? data . output : "" ;
108+ r . stderr = "" ;
109+ r . ctime = "" ;
110+ r . rtime = "" ;
111+ r . cstatus = data . errors . length === 0 ? 0 : 1 ;
112+ r . rstatus = data . success === true ? 0 : 1 ;
113+ r . cerr = "" ;
114+ r . rerr = "" ;
115+ r . defaultOutput = data . output || opts . defaultOutput ;
116+ return r ;
117+ }
118+ }
119+ } ;
120+
121+ function parseOutput ( res , o , oTitle )
70122{
71- if ( typeof data . compilation == "undefined" )
123+ if ( ! res )
72124 {
73125 o . text ( "Temporarily unavailable" ) ;
74126 return ;
75127 }
76128
77129 var output = "" ;
78- var cout = safeVar ( data , "compilation.stdout" ) ;
79- var stdout = safeVar ( data , "runtime.stdout" ) ;
80- var stderr = safeVar ( data , "runtime.stderr" ) ;
81- var ctime = parseInt ( safeVar ( data , "compilation.time" ) ) ;
82- var rtime = parseInt ( safeVar ( data , "runtime.time" ) ) ;
83- var cstatus = parseInt ( safeVar ( data , "compilation.status" ) ) ;
84- var rstatus = parseInt ( safeVar ( data , "runtime.status" ) ) ;
85- var cerr = safeVar ( data , "compilation.err" ) ;
86- var rerr = safeVar ( data , "runtime.err" ) ;
87- var defaultOutput = data . defaultOutput || '-- No output --' ;
88-
89- if ( cstatus != 0 )
130+ var defaultOutput = res . defaultOutput || '-- No output --' ;
131+
132+ if ( res . cstatus != 0 )
90133 {
91- oTitle . text ( "Compilation output (" + cstatus + ": " + cerr + ")" ) ;
134+ oTitle . text ( "Compilation output (" + res . cstatus + ": " + res . cerr + ")" ) ;
92135 if ( $ . browser . msie )
93- o . html ( nl2br ( cout ) ) ;
136+ o . html ( nl2br ( res . cout ) ) ;
94137 else
95- o . text ( cout ) ;
138+ o . text ( res . cout ) ;
96139
97140 return ;
98141 }
99142 else
100143 {
101144 oTitle . text ( "Application output" ) ; // (compile "+ctime+"ms, run "+rtime+"ms)");
102- if ( cout != "" )
103- output = 'Compilation output: \n' + cout + "\n" ;
145+ if ( res . cout != "" )
146+ output = 'Compilation output: \n' + res . cout + "\n" ;
104147
105- output += ( stdout == "" && stderr == "" ? defaultOutput : stdout ) ;
148+ output += ( res . stdout == "" && res . stderr == "" ? res . defaultOutput : res . stdout ) ;
106149
107- if ( stderr != "" )
108- output += stderr ;
150+ if ( res . stderr != "" )
151+ output += res . stderr ;
109152
110- if ( rstatus != 0 )
111- oTitle . text ( "Application output (" + rstatus + ": " + rerr + ")" ) ;
153+ if ( res . rstatus != 0 )
154+ oTitle . text ( "Application output (" + res . rstatus + ": " + res . rerr + ")" ) ;
112155 }
113156
114157 if ( $ . browser . msie )
115- o . html ( nl2br ( cout ) ) ;
158+ o . html ( nl2br ( res . cout ) ) ;
116159 else
117160 o . text ( output ) ;
118161}
@@ -179,6 +222,8 @@ function setupTextarea(el, opts)
179222 transformOutput : function ( out ) { return out }
180223 } , opts ) ;
181224
225+ var backend = backends [ opts . backend || "dpaste" ] ;
226+
182227 if ( ! ! opts . parent )
183228 var parent = opts . parent ;
184229 else
@@ -328,8 +373,8 @@ function setupTextarea(el, opts)
328373 output . focus ( ) ;
329374
330375 var data = {
331- ' code' : opts . transformOutput ( editor . getValue ( ) ) ,
332- }
376+ code : opts . transformOutput ( editor . getValue ( ) )
377+ } ;
333378 if ( opts . stdin ) {
334379 data . stdin = stdin . val ( ) ;
335380 }
@@ -338,13 +383,13 @@ function setupTextarea(el, opts)
338383 }
339384 $ . ajax ( {
340385 type : 'POST' ,
341- url : "https://dpaste.dzfl.pl/request/" ,
386+ url : backend . url ,
387+ contentType : backend . contentType ,
342388 dataType : "json" ,
343- data : data ,
389+ data : backend . requestTransform ( data ) ,
344390 success : function ( data )
345391 {
346- data . defaultOutput = opts . defaultOutput ;
347- parseOutput ( data , output , outputTitle ) ;
392+ parseOutput ( backend . parseOutput ( data , opts ) , output , outputTitle ) ;
348393 runBtn . attr ( "disabled" , false ) ;
349394 } ,
350395 error : function ( jqXHR , textStatus , errorThrown )
0 commit comments