Remove exercises execution

This commit is contained in:
Samy Pessé
2014-08-10 14:44:06 -07:00
parent bcfcf3d979
commit 6c62d75eae
14 changed files with 6 additions and 300 deletions
-63
View File
@@ -1,63 +0,0 @@
define([
"jQuery",
"ace/ace",
"ace/theme-tomorrow",
"ace/mode-javascript",
"utils/execute",
"core/events",
"core/state"
], function($, _ace, _aceTheme, _aceMode, execute, events, state){
// Bind an exercise
var prepareExercise = function($exercise) {
var codeSolution = $exercise.find(".code-solution").text();
var codeValidation = $exercise.find(".code-validation").text();
var codeContext = $exercise.find(".code-context").text();
var editor = ace.edit($exercise.find(".editor").get(0));
editor.setTheme("ace/theme/tomorrow");
editor.getSession().setUseWorker(false);
editor.getSession().setMode("ace/mode/javascript");
editor.commands.addCommand({
name: "submit",
bindKey: "Ctrl-Return|Cmd-Return",
exec: function() {
$exercise.find(".action-submit").click();
}
});
// Submit: test code
$exercise.find(".action-submit").click(function(e) {
e.preventDefault();
events.trigger("exercise.submit", {type: "code"});
execute("javascript", editor.getValue(), codeValidation, codeContext, function(err, result) {
$exercise.toggleClass("return-error", err != null);
$exercise.toggleClass("return-success", err == null);
if (err) $exercise.find(".alert-danger").text(err.message || err);
});
});
// Set solution
$exercise.find(".action-solution").click(function(e) {
e.preventDefault();
editor.setValue(codeSolution);
editor.gotoLine(0);
});
};
// Prepare all exercise
var init = function() {
state.$book.find("section.exercise").each(function() {
prepareExercise($(this));
});
};
return {
init: init,
prepare: prepareExercise
};
});
+2 -4
View File
@@ -4,11 +4,10 @@ define([
"core/events",
"core/state",
"core/progress",
"core/exercise",
"core/quiz",
"core/loading",
"core/search"
], function($, URL, events, state, progress, exercises, quiz, loading, search) {
], function($, URL, events, state, progress, quiz, loading, search) {
var prev, next;
var usePushState = (typeof history.pushState !== "undefined");
@@ -76,8 +75,7 @@ define([
var preparePage = function() {
var $pageWrapper = $(".book-body .page-wrapper");
// Bind exercises/quiz
exercises.init();
// Bind quiz
quiz.init();
// Show progress
+1 -2
View File
@@ -1,9 +1,8 @@
define([
"jQuery",
"utils/execute",
"core/events",
"core/state"
], function($, execute, events, state){
], function($, events, state){
// Bind an exercise
var prepareQuiz = function($quiz) {
-8
View File
@@ -1,8 +0,0 @@
define(function() {
return {
id: "javascript",
assertCode: "function assert(condition, message) { \nif (!condition) { \n throw message || \"Assertion failed\"; \n } \n }\n",
REPL: JSREPL,
sep: ";\n",
};
});
+2 -1
View File
@@ -48,6 +48,7 @@ define([
return {
start: start,
events: events
events: events,
state: state
};
});
-97
View File
@@ -1,97 +0,0 @@
define([
"execute/javascript"
], function(javascript) {
var LANGUAGES = {
"javascript": javascript
};
var evalJS = function(lang, code, callback) {
var ready = false;
var finished = false;
var finish = function() {
if(finished) {
return console.error('Already finished');
}
finished = true;
return callback.apply(null, arguments);
};
var repl;
// Handles all our events
var eventHandler = function(data, eventType) {
console.log([eventType, data]);
switch(eventType) {
case 'progress':
// Update UI loading bar
break;
case 'timeout':
finish(new Error(data));
break;
case 'result':
finish(null, {
value: data,
type: 'result'
});
break;
case 'error':
if(ready) {
return finish(null, {
value: data,
type: 'error'
});
}
return finish(new Error(data));
break
case 'ready':
// We're good to get results and stuff back now
ready = true;
// Eval our code now that the runtime is ready
repl.eval(code);
break;
default:
console.log('Unhandled event =', eventType, 'data =', data);
}
};
repl = new lang.REPL({
input: eventHandler,
output: eventHandler,
result: eventHandler,
error: eventHandler,
progress: eventHandler,
timeout: {
time: 30000,
callback: eventHandler
}
});
repl.loadLanguage(lang.id, eventHandler);
};
var execute = function(lang, solution, validation, context, callback) {
// Language data
var langd = LANGUAGES[lang];
// Check language is supported
if (!langd) return callback(new Error("Language '"+lang+"' not available for execution"));
// Validate with validation code
var code = [
context,
solution,
langd.assertCode,
validation,
].join(langd.sep);
evalJS(langd, code, function(err, res) {
if(err) return callback(err);
if (res.type == "error") callback(new Error(res.value));
else callback(null, res.value);
});
};
return execute;
});