summaryrefslogtreecommitdiffstats
path: root/assets/javascript/core
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2014-03-31 22:27:25 -0700
committerSamy Pessé <samypesse@gmail.com>2014-03-31 22:27:25 -0700
commit8edd5e4b3bcef7c84bf0b557a80e3e93e8f47e23 (patch)
tree4b461eb0fd079105c6e30843ea913765b3a53950 /assets/javascript/core
parent642a338cb062f39628407c136892fe5f328366f9 (diff)
downloadgitbook-8edd5e4b3bcef7c84bf0b557a80e3e93e8f47e23.zip
gitbook-8edd5e4b3bcef7c84bf0b557a80e3e93e8f47e23.tar.gz
gitbook-8edd5e4b3bcef7c84bf0b557a80e3e93e8f47e23.tar.bz2
Signal and mark progress
Diffstat (limited to 'assets/javascript/core')
-rw-r--r--assets/javascript/core/progress.js66
-rw-r--r--assets/javascript/core/state.js14
2 files changed, 80 insertions, 0 deletions
diff --git a/assets/javascript/core/progress.js b/assets/javascript/core/progress.js
new file mode 100644
index 0000000..bd657a1
--- /dev/null
+++ b/assets/javascript/core/progress.js
@@ -0,0 +1,66 @@
+define([
+ "lodash",
+ "jQuery",
+ "utils/storage",
+ "core/state"
+], function(_, $, storage, state) {
+ // Get current level
+ var getCurrentLevel = function() {
+ return state().level;
+ };
+
+ // Return all levels
+ var getLevels = function() {
+ var levels = $(".book-summary li[data-level]");
+ return _.map(levels, function(level) {
+ return $(level).data("level").toString();
+ });
+ };
+
+ // Return a map chapter -> number (timestamp)
+ var getProgress = function() {
+ // Current level
+ var progress = storage.get("progress", {});
+
+ // Levels
+ var levels = getLevels();
+
+ _.each(levels, function(level) {
+ progress[level] = progress[level] || 0;
+ });
+
+ return progress;
+ };
+
+ // Change value of progress for a level
+ var markProgress = function(level, state) {
+ if (state == null) state = true;
+
+ var progress = getProgress();
+ progress[level] = state? Date.now() : 0;
+
+ storage.set("progress", progress);
+ };
+
+ // Show progress
+ var showProgress = function() {
+ // Mark current progress
+ markProgress(getCurrentLevel(), true);
+
+ // Update progress
+ var progress = getProgress();
+ var $summary = $(".book-summary");
+
+ _.each(progress, function(value, level) {
+ $summary.find("li[data-level='"+level+"']").toggleClass("done", value > 0);
+ });
+ };
+
+ return {
+ 'current': getCurrentLevel,
+ 'levels': getLevels,
+ 'get': getProgress,
+ 'mark': markProgress,
+ 'show': showProgress
+ };
+}); \ No newline at end of file
diff --git a/assets/javascript/core/state.js b/assets/javascript/core/state.js
new file mode 100644
index 0000000..fc67d7b
--- /dev/null
+++ b/assets/javascript/core/state.js
@@ -0,0 +1,14 @@
+define([
+ "jQuery"
+], function() {
+ return function() {
+ var $book = $(".book");
+
+ return {
+ '$book': $book,
+
+ 'githubId': $book.data("github"),
+ 'level': $book.data("level")
+ };
+ };
+}); \ No newline at end of file