aboutsummaryrefslogtreecommitdiffstats
path: root/static/js/jams.js
blob: bdce1060ca793b1636426fde94b15dc8cc69c6a8 (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"use strict";

function refreshLock() {
    console.log("Refreshing lock");
    let oReq = new XMLHttpRequest();
    oReq.addEventListener("load", function() {
        let response = JSON.parse(this.responseText);

        if (response.error !== undefined) {
            document.getElementById("submit").disabled = true;

            if (response.error_lines !== undefined) {
                editor.session.setAnnotations(response.error_lines);
                document.getElementById("preview-div").innerHTML ="<h3>Error - see editor margin</h3>";
            } else {
                console.log("Error: " + response.error);
                document.getElementById("preview-div").innerHTML ="<h3>Error</h3><p>" + response.error + "<p>";
            }
        } else {
            document.getElementById("submit").disabled = false;
            document.getElementById("preview-div").innerHTML = response.data;

            editor.session.setAnnotations([]);
        }
    });

    let data = editor.getValue();

    if (data.replace("\s", "").length < 1 || document.getElementById("title").value.length < 1) {
        document.getElementById("submit").disabled = true;
        return false;
    }

    oReq.open("POST", "/render");

    oReq.setRequestHeader("Content-type", "application/json");
    oReq.setRequestHeader("X-CSRFToken", csrf_token);

    oReq.send(JSON.stringify({"data": editor.getValue()}));
}

class Actions {
    constructor(url, csrf_token) {
        this.url = url;
        this.csrf_token = csrf_token;
    }

    send(action, method, data, callback) {
        let oReq = new XMLHttpRequest();

        oReq.addEventListener("load", function() {
            try {
                data = JSON.parse(this.responseText);
            } catch (e) {
                return callback(false);
            }

            if ("error_code" in data) {
                return callback(false, data);
            }

            return callback(true, data);
        });

        data["action"] = action;

        let params = this.get_params(data);
        let url = this.url + "?" + params;

        oReq.open(method, url);
        oReq.setRequestHeader("X-CSRFToken", this.csrf_token);
        oReq.send();
    }

    get_params(data) {  // https://stackoverflow.com/a/12040639
        return Object.keys(data).map(function(key) {
            return [key, data[key]].map(encodeURIComponent).join("=");
        }).join("&");
    }

    set_state(jam, state, callback) {
        this.send(
            "state",
            "POST",
            {
                "jam": jam,
                "state": state
            },
            callback
        );
    }
}