diff options
Diffstat (limited to 'static')
-rw-r--r-- | static/js/fouc.js | 2 | ||||
-rw-r--r-- | static/js/jams.js | 92 |
2 files changed, 93 insertions, 1 deletions
diff --git a/static/js/fouc.js b/static/js/fouc.js index c1414d9b..c3270bf8 100644 --- a/static/js/fouc.js +++ b/static/js/fouc.js @@ -31,6 +31,6 @@ document.onreadystatechange = function () { 'https://pro.fontawesome.com/releases/v5.0.13/js/all.js', // URL 'sha384-d84LGg2pm9KhR4mCAs3N29GQ4OYNy+K+FBHX8WhimHpPm86c839++MDABegrZ3gn', // Integrity 'anonymous' // Cross-origin - ) + ); } }
\ No newline at end of file diff --git a/static/js/jams.js b/static/js/jams.js new file mode 100644 index 00000000..bdce1060 --- /dev/null +++ b/static/js/jams.js @@ -0,0 +1,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 + ); + } +}
\ No newline at end of file |