mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-16 15:45:13 +00:00
51 lines
1.6 KiB
JavaScript
Executable File
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
|
|
};
|
|
}); |