summaryrefslogtreecommitdiffstats
path: root/theme/javascript/core/progress.js
blob: a409a111cc4361b61ad59ef785960ee24f4aeacb (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
67
68
69
70
71
72
73
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) {
        var progress = getProgress();

        if (state == null) {
            state = true;
        }

        progress[level] = state
            ? Date.now()
            : 0;

        storage.set("progress", progress);
    };

    // 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);
        });

        // Mark current progress if we have not already
        if (!progress[getCurrentLevel()]) {
            markProgress(getCurrentLevel(), true);
        }
    };

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