Files
gitbook/theme/javascript/core/exercise.js
T
2014-04-21 22:20:41 +02:00

51 lines
1.6 KiB
JavaScript
Executable File

define([
"jQuery",
"utils/execute",
"core/events",
"core/state"
], function($, 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");
// 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
};
});