summaryrefslogtreecommitdiff
path: root/example/todo/resources/todo/app.js
blob: b7b8437736fa0961b6a60ff4a516e01c69f1ea30 (plain) (blame)
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
var state = "all";

var todoApp = document.getElementsByClassName("todoapp")[0];
function postFetchUpdate(url){
    fetch(url, {
        method: "POST",
    })
    .then(function(response){ return response.text()})
    .then(function (text) {
        todoApp.innerHTML = text;
        initListeners()
    })
}

function bindEvent(cls, url, endState){

    document.getElementsByClassName(cls)[0].addEventListener(
        "mousedown",
        function(evt){
            postFetchUpdate(url)
            if (endState) state = endState
        }
    );
}

function bindIndexedEvent(cls, func){
    Array.from(document.getElementsByClassName(cls)).forEach( function(elem) {
        elem.addEventListener(
            "mousedown",
            function(evt){
                postFetchUpdate(func(elem.getAttribute("data-todo-index")))
            }
        )
    });
}

function initListeners(){
    bindIndexedEvent(
        "destroy",
        function(index){return "/delete/" + state + "/" + index}
    );
    bindIndexedEvent(
        "toggle",
        function(index){return "/toggle/" + state + "/" + index}
    );
    bindEvent("toggle-all", "/toggle-all/" + state);
    bindEvent("todo-all", "/list/all", "all");
    bindEvent("todo-active",  "/list/active", "active");
    bindEvent("todo-completed", "/list/completed", "completed");
    bindEvent("clear-completed", "/clear-completed/" + state);
    var newTodoInput = document.getElementsByClassName("new-todo")[0];
    newTodoInput.addEventListener(
        "keydown",
        function(evt){
            if (evt.keyCode === 13) {
                fetch("/add/" + state, {
                    method: "POST",
                    body: newTodoInput.value
                })
                .then(function(response){ return response.text()})
                .then(function (text) {
                    newTodoInput.value = "";
                    todoApp.innerHTML = text;
                    initListeners()
                })
            }
        }
    );
}
initListeners()