summaryrefslogtreecommitdiffstats
path: root/theme/javascript/core/progress.js
blob: 755f111575d3bee2240784f7282374b7441ae224 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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() {        
        // Update progress
        var progress = getProgress();
        var $summary = $(".book-summary");

        _.each(progress, function(value, level) {
            $summary.find("li[data-level='"+level+"']").toggleClass("done", value > 0);
        });

        // Mark current progress
        markProgress(getCurrentLevel(), true);
    };

    return {
        'current': getCurrentLevel,
        'levels': getLevels,
        'get': getProgress,
        'mark': markProgress,
        'show': showProgress
    };
});