diff options
Diffstat (limited to 'theme/javascript')
-rwxr-xr-x | theme/javascript/core/exercise.js | 63 | ||||
-rw-r--r-- | theme/javascript/core/font-settings.js | 22 | ||||
-rwxr-xr-x | theme/javascript/core/navigation.js | 8 | ||||
-rw-r--r-- | theme/javascript/core/quiz.js | 56 | ||||
-rwxr-xr-x | theme/javascript/execute/javascript.js | 8 | ||||
-rwxr-xr-x | theme/javascript/gitbook.js | 13 | ||||
-rw-r--r-- | theme/javascript/utils/appcache.js | 15 | ||||
-rw-r--r-- | theme/javascript/utils/dropdown.js | 27 | ||||
-rwxr-xr-x | theme/javascript/utils/execute.js | 97 | ||||
-rwxr-xr-x | theme/javascript/utils/sharing.js | 5 | ||||
-rw-r--r-- | theme/javascript/utils/url.js | 2 |
11 files changed, 42 insertions, 274 deletions
diff --git a/theme/javascript/core/exercise.js b/theme/javascript/core/exercise.js deleted file mode 100755 index 52791a4..0000000 --- a/theme/javascript/core/exercise.js +++ /dev/null @@ -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 - }; -}); diff --git a/theme/javascript/core/font-settings.js b/theme/javascript/core/font-settings.js index dbc0879..63177ee 100644 --- a/theme/javascript/core/font-settings.js +++ b/theme/javascript/core/font-settings.js @@ -15,20 +15,6 @@ define([ "sans": 1 }; - var togglePopover = function(e) { - var $dropdown = $("#font-settings-wrapper .dropdown-menu"); - - $dropdown.toggleClass("open"); - e.stopPropagation(); - e.preventDefault(); - }; - - var closePopover = function(e) { - var $dropdown = $("#font-settings-wrapper .dropdown-menu"); - - $dropdown.removeClass("open"); - }; - var enlargeFontSize = function(e){ if (fontState.size < 4){ fontState.size++; @@ -106,12 +92,8 @@ define([ $(document).on('click', "#enlarge-font-size", enlargeFontSize); $(document).on('click', "#reduce-font-size", reduceFontSize); - $(document).on('click', "#font-settings-wrapper .font-family-list li", changeFontFamily); - $(document).on('click', "#font-settings-wrapper .color-theme-list button", changeColorTheme); - - $(document).on('click', ".book-header .toggle-font-settings", togglePopover); - $(document).on('click', "#font-settings-wrapper .dropdown-menu", function(e){ e.stopPropagation(); }); - $(document).on("click", closePopover); + $(document).on('click', "#font-settings-wrapper .font-family-list .button", changeFontFamily); + $(document).on('click', "#font-settings-wrapper .color-theme-list .button", changeColorTheme); }; return { diff --git a/theme/javascript/core/navigation.js b/theme/javascript/core/navigation.js index bcf7e65..3749419 100755 --- a/theme/javascript/core/navigation.js +++ b/theme/javascript/core/navigation.js @@ -4,11 +4,9 @@ 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, loading, search) { var prev, next; var usePushState = (typeof history.pushState !== "undefined"); @@ -76,10 +74,6 @@ define([ var preparePage = function() { var $pageWrapper = $(".book-body .page-wrapper"); - // Bind exercises/quiz - exercises.init(); - quiz.init(); - // Show progress progress.show(); diff --git a/theme/javascript/core/quiz.js b/theme/javascript/core/quiz.js deleted file mode 100644 index d34af48..0000000 --- a/theme/javascript/core/quiz.js +++ /dev/null @@ -1,56 +0,0 @@ -define([ - "jQuery", - "utils/execute", - "core/events", - "core/state" -], function($, execute, events, state){ - // Bind an exercise - var prepareQuiz = function($quiz) { - - $quiz.find(".quiz-answers input").click(function(e) { - e.preventDefault(); - }); - - // Submit: test code - $quiz.find(".action-submit").click(function(e) { - e.preventDefault(); - events.trigger("exercise.submit", {type: "quiz"}); - $quiz.find("tr.alert-danger,li.alert-danger").removeClass("alert-danger"); - $quiz.find(".alert-success,.alert-danger").addClass("hidden"); - - $quiz.find(".question").each(function(q) { - var result = true; - - var $questions = $(this).find(".question-content").find("input[type=radio], input[type=checkbox]"); - var $answers = $(this).find(".question-answers").find("input[type=radio], input[type=checkbox]"); - - $questions.each(function(i) { - var correct = $(this).is(":checked") === $answers.slice(i).first().is(":checked"); - result = result && correct; - if (!correct) { - $(this).closest("tr, li").addClass("alert-danger"); - } - }); - $(this).find(result ? "div.alert-success" : "div.alert-danger").toggleClass("hidden"); - }); - - }); - - $quiz.find(".action-solution").click(function(e) { - e.preventDefault(); - $quiz.find(".question-content, .question-answers").toggleClass("hidden"); - }); - }; - - // Prepare all exercise - var init = function() { - state.$book.find("section.quiz").each(function() { - prepareQuiz($(this)); - }); - }; - - return { - init: init, - prepare: prepareQuiz - }; -});
\ No newline at end of file diff --git a/theme/javascript/execute/javascript.js b/theme/javascript/execute/javascript.js deleted file mode 100755 index ddbc2c1..0000000 --- a/theme/javascript/execute/javascript.js +++ /dev/null @@ -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", - }; -}); diff --git a/theme/javascript/gitbook.js b/theme/javascript/gitbook.js index 579977c..5798dfa 100755 --- a/theme/javascript/gitbook.js +++ b/theme/javascript/gitbook.js @@ -2,7 +2,7 @@ define([ "jQuery", "utils/storage", "utils/sharing", - "utils/appcache", + "utils/dropdown", "core/events", "core/font-settings", @@ -12,7 +12,7 @@ define([ "core/progress", "core/sidebar", "core/search" -], function($, storage, appCache, sharing, events, fontSettings, state, keyboard, navigation, progress, sidebar, search){ +], function($, storage, sharing, dropdown, events, fontSettings, state, keyboard, navigation, progress, sidebar, search){ var start = function(config) { var $book; $book = state.$book; @@ -31,12 +31,12 @@ define([ // Init keyboard keyboard.init(); - // Init appcache - appCache.init(); - // Bind sharing button sharing.init(); + // Bind dropdown + dropdown.init(); + // Init navigation navigation.init(); @@ -48,6 +48,7 @@ define([ return { start: start, - events: events + events: events, + state: state }; }); diff --git a/theme/javascript/utils/appcache.js b/theme/javascript/utils/appcache.js deleted file mode 100644 index e813ab0..0000000 --- a/theme/javascript/utils/appcache.js +++ /dev/null @@ -1,15 +0,0 @@ -define([], function() { - var isAvailable = (typeof applicationCache !== "undefined"); - - var init = function() { - if (!isAvailable) return; - - window.applicationCache.addEventListener('updateready', function() { - window.location.reload(); - }, false); - }; - - return { - init: init - }; -});
\ No newline at end of file diff --git a/theme/javascript/utils/dropdown.js b/theme/javascript/utils/dropdown.js new file mode 100644 index 0000000..fe4e1f4 --- /dev/null +++ b/theme/javascript/utils/dropdown.js @@ -0,0 +1,27 @@ +define([ + "jQuery" +], function($) { + + var toggleDropdown = function(e) { + var $dropdown = $(e.currentTarget).parent().find(".dropdown-menu"); + + $dropdown.toggleClass("open"); + e.stopPropagation(); + e.preventDefault(); + }; + + var closeDropdown = function(e) { + $(".dropdown-menu").removeClass("open"); + }; + + // Bind all dropdown + var init = function() { + $(document).on('click', ".toggle-dropdown", toggleDropdown); + $(document).on('click', ".dropdown-menu", function(e){ e.stopPropagation(); }); + $(document).on("click", closeDropdown); + }; + + return { + init: init + }; +}); diff --git a/theme/javascript/utils/execute.js b/theme/javascript/utils/execute.js deleted file mode 100755 index eb2a19b..0000000 --- a/theme/javascript/utils/execute.js +++ /dev/null @@ -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; -}); diff --git a/theme/javascript/utils/sharing.js b/theme/javascript/utils/sharing.js index 4889b40..3599b27 100755 --- a/theme/javascript/utils/sharing.js +++ b/theme/javascript/utils/sharing.js @@ -16,13 +16,16 @@ define([ }, "weibo": function($el) { window.open("http://service.weibo.com/share/share.php?content=utf-8&url="+encodeURIComponent(url)+"&title="+encodeURIComponent(title)) + }, + "instapaper": function($el) { + window.open("http://www.instapaper.com/text?u="+encodeURIComponent(url)); } }; // Bind all sharing button var init = function() { - $(document).on("click", "a[data-sharing]", function(e) { + $(document).on("click", "a[data-sharing],button[data-sharing]", function(e) { if (e) e.preventDefault(); var type = $(this).data("sharing"); diff --git a/theme/javascript/utils/url.js b/theme/javascript/utils/url.js index dbb1570..0254299 100644 --- a/theme/javascript/utils/url.js +++ b/theme/javascript/utils/url.js @@ -1,5 +1,5 @@ define([ - "vendors/URIjs/src/URI" + "URIjs/URI" ], function(URI) { // Joins path segments. Preserves initial "/" and resolves ".." and "." // Does not support using ".." to go above/outside the root. |