Add base for handling and storing progress

This commit is contained in:
Samy Pessé
2014-03-31 19:34:48 -07:00
parent 0ad6533f12
commit 07c10da91f
6 changed files with 6872 additions and 3 deletions
+4
View File
@@ -31,11 +31,15 @@ module.exports = function (grunt) {
include: ["requireLib"],
paths: {
"jQuery": 'vendors/jquery',
"lodash": 'vendors/lodash',
"requireLib": 'vendors/require',
},
shim: {
'jQuery': {
exports: '$'
},
'lodash': {
exports: '_'
}
}
}
+3 -2
View File
@@ -1,6 +1,7 @@
require([
"jQuery"
], function($){
"jQuery",
"progress"
], function($, progress){
$(document).ready(function() {
var $book = $(".book");
var githubId = $book.data("github");
+59
View File
@@ -0,0 +1,59 @@
define([
"lodash",
"jQuery",
"utils/storage"
], function(_, $, storage) {
// Get current level
var getCurrentLevel = function() {
return $(".book").data("level");
};
// Return all levels
var getLevels = function() {
var levels = $(".book-summary li[data-level]");
return _.map(levels, function(level) {
return $(level).data("level");
});
};
// 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;
};
// Show progress
var showProgress = function() {
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
};
});
+20
View File
@@ -0,0 +1,20 @@
define(function(){
/*
* Simple module for storing data in the browser's local storage
*/
return {
set: function(key, value) {
localStorage[key] = JSON.stringify(value);
},
get: function(key, def) {
try {
return JSON.parse(localStorage[key]) || def;
} catch(err) {
return localStorage[key] || def;
}
},
remove: function(key) {
localStorage.removeItem(key);
}
};
});
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long