summaryrefslogtreecommitdiffstats
path: root/theme/javascript/core
diff options
context:
space:
mode:
authorJames Phillpotts <jphillpotts@scottlogic.co.uk>2014-04-08 09:51:11 +0100
committerAaron O'Mullan <aaron.omullan@friendco.de>2014-04-12 01:25:07 -0700
commitf6595f51119baca04bf91e619f64518d400e5cae (patch)
tree765ad8ab0f40d3bb68c03e8df1d5246664556e9c /theme/javascript/core
parentab27725b9935b185a58b725e75aedeb579e87d8f (diff)
downloadgitbook-f6595f51119baca04bf91e619f64518d400e5cae.zip
gitbook-f6595f51119baca04bf91e619f64518d400e5cae.tar.gz
gitbook-f6595f51119baca04bf91e619f64518d400e5cae.tar.bz2
Tabular quiz
Diffstat (limited to 'theme/javascript/core')
-rw-r--r--theme/javascript/core/quiz.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/theme/javascript/core/quiz.js b/theme/javascript/core/quiz.js
new file mode 100644
index 0000000..2e900e8
--- /dev/null
+++ b/theme/javascript/core/quiz.js
@@ -0,0 +1,50 @@
+define([
+ "jQuery",
+ "utils/execute",
+ "utils/analytic",
+ "core/state"
+], function($, execute, analytic, state){
+ // Bind an exercise
+ var prepareExercise = function($exercise) {
+ var $answers = $exercise.find(".quiz-answers").find("input[type=radio], input[type=checkbox]");
+
+ $answers.click(function(e) {
+ e.preventDefault();
+ });
+
+ // Submit: test code
+ $exercise.find(".action-submit").click(function(e) {
+ e.preventDefault();
+ analytic.track("exercise.submit");
+ $exercise.find("tr.alert-danger").removeClass("alert-danger");
+ $exercise.find(".alert-success,.alert-danger").addClass("hidden");
+
+ var result = true;
+ $exercise.find(".quiz input[type=radio],.quiz input[type=checkbox]").each(function(i) {
+ var correct = $(this).is(":checked") === $answers.slice(i).first().is(":checked");
+ result = result && correct;
+ if (!correct) {
+ $(this).closest("tr").addClass("alert-danger");
+ }
+ });
+
+ $exercise.find(result ? "div.alert-success" : "div.alert-danger").toggleClass("hidden");
+ });
+
+ $exercise.find(".action-solution").click(function(e) {
+ $exercise.find(".quiz, .quiz-answers").toggleClass("hidden");
+ });
+ };
+
+ // Prepare all exercise
+ var init = function() {
+ state.$book.find("section.quiz").each(function() {
+ prepareExercise($(this));
+ });
+ };
+
+ return {
+ init: init,
+ prepare: prepareExercise
+ };
+});