summaryrefslogtreecommitdiffstats
path: root/theme/javascript/core/font-settings.js
blob: 4ea1646a1786a69e63d4068a47b94e18c58b9039 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
define([
    "jQuery",
    "utils/storage"
], function($, storage) {
    var fontState;

    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){
        var $bookBody = $(".book-body");

        if (fontState.size < 4){
            $bookBody.toggleClass("font-size-"+fontState.size, false);
            fontState.size++;

            $bookBody.toggleClass("font-size-"+fontState.size, true);
            fontState.save();
        }
    };
    
    var reduceFontSize = function(e){
        var $bookBody = $(".book-body");

        if (fontState.size > 0){
            $bookBody.toggleClass("font-size-"+fontState.size);
            fontState.size--;

            $bookBody.toggleClass("font-size-"+fontState.size);
            fontState.save();
        }
    };

    var changeFontFamily = function(){
        var $bookBody = $(".book-body");
        var index = $(this).data("font");

        $bookBody.toggleClass("font-family-"+fontState.family);
        $(".font-settings .font-family-list li:nth-child("+(fontState.family+1)+")")
            .removeClass("active");

        fontState.family = index;
        $bookBody.toggleClass("font-family-"+fontState.family);
        $(this).addClass("active");
        fontState.save();
    };

    var changeColorTheme = function(){
        var $book = $(".book");
        var index = $(this).data("theme");

        if (fontState.theme !== 0)
            $book.removeClass("color-theme-"+fontState.theme);

        fontState.theme = index;
        if (fontState.theme !== 0)
            $book.addClass("color-theme-"+fontState.theme);

        fontState.save();
    };

    var init = function() {
        var $toggle, $bookBody, $dropdown, $book;

        //Find DOM elements.
        $book = $(".book");
        $toggle = $(".book-header .toggle-font-settings");
        $dropdown = $("#font-settings-wrapper .dropdown-menu");
        $bookBody = $(".book-body");

        //Instantiate font state object 
        fontState = storage.get("fontState", {
            size:1,
            family:0,
            theme:0
        });
        fontState.save = function(){
            storage.set("fontState",fontState);
        };

        $bookBody.addClass("font-size-"+fontState.size);
        $bookBody.addClass("font-family-"+fontState.family);

        $(".font-settings .font-family-list li:nth-child("+(fontState.family+1)+")").addClass("active");

        if(fontState.theme !== 0)
            $book.addClass("color-theme-"+fontState.theme);

        //Add event listeners
        $(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);
    };
    
    return {
        init: init
    }
});