Skip to content

Commit 0c1af99

Browse files
authored
Merge pull request #1647 from wilzbach/use-tour-dlang-org
Test tour.dlang.org as alternative backend merged-on-behalf-of: Vladimir Panteleev <github@thecybershadow.net>
2 parents 6ff5545 + 58e80ca commit 0c1af99

File tree

2 files changed

+78
-32
lines changed

2 files changed

+78
-32
lines changed

js/run.js

Lines changed: 76 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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 )

js/run_examples.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ $(document).ready(function()
100100
transformOutput: wrapIntoMain,
101101
defaultOutput: "All tests passed",
102102
keepCode: true,
103-
outputHeight: "auto"
103+
outputHeight: "auto",
104+
backend: "tour"
104105
});
105106
});
106107
});

0 commit comments

Comments
 (0)