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