diff options
author | n-peugnet <n.peugnet@free.fr> | 2019-10-21 19:44:52 +0200 |
---|---|---|
committer | n-peugnet <n.peugnet@free.fr> | 2019-10-21 21:49:12 +0200 |
commit | 9250000af69b5c0ddc73537ec40573df68283dcc (patch) | |
tree | b844ef3625f0d1f00177f701289865016a1c8539 /src/edit.js | |
parent | 01355d4e0173036fefe513ddf51f4d81ec66d90a (diff) | |
download | wcms-9250000af69b5c0ddc73537ec40573df68283dcc.tar.gz wcms-9250000af69b5c0ddc73537ec40573df68283dcc.zip |
move js sources to /src/ & remove old worker stuff
Diffstat (limited to 'src/edit.js')
-rw-r--r-- | src/edit.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/edit.js b/src/edit.js new file mode 100644 index 0000000..ac2fe58 --- /dev/null +++ b/src/edit.js @@ -0,0 +1,92 @@ +import CodeMirror from "codemirror"; +import "codemirror/lib/codemirror.css"; +import "codemirror/mode/markdown/markdown.js"; + +let form; +let unsavedChanges = false; + +let myCodeMirror = CodeMirror.fromTextArea(document.getElementById('main'), { + mode: 'markdown', + lineNumbers: true, +}); + +window.onload = () => { + form = document.getElementById('update'); + let inputs = form.elements; + for (let i = 0; i < inputs.length; i++) { + inputs[i].oninput = changeHandler; + } + + form.addEventListener("submit", function (event) { + event.preventDefault(); + submitHandler(this); + }); + window.onkeydown = keyboardHandler; + window.onbeforeunload = confirmExit; +}; + +/** + * Manage a keyboardEvent + * @param {KeyboardEvent} e + */ +function keyboardHandler(e) { + if (e.composed) { + if (e.ctrlKey) { + switch (e.key) { + // ctrl + s + case 's': + submitHandler(form); + break; + // ctrl + d + case 'd': + url = document.getElementById('update').getAttribute('href'); + window.open(url); + break; + default: + return true; + } + e.preventDefault(); + return false; + } + } +} + +/** + * Manage change event + * @param {InputEvent} e + */ +function changeHandler(e) { + if(e.target.classList.contains("toggle")||e.target.classList.contains("checkboxtab")) { + return; + } + unsavedChanges = true; +} + +/** + * Manage submit event + * @param {HTMLFormElement} form + */ +function submitHandler(form) { + var xhr = new XMLHttpRequest(); + var fd = new FormData(form); + + xhr.addEventListener("load", function(event) { + unsavedChanges = false; + alert("updated"); + }); + xhr.addEventListener("error", function(event) { + alert('Error while trying to update.'); + }); + xhr.open(form.method, form.action); + xhr.send(fd); +} + +/** + * Manage a beforeUnloadEvent + * @param {BeforeUnloadEvent} e + */ +function confirmExit(e) { + if (unsavedChanges) { + return 'You have unsaved changes, do you really want to leave this page?'; + } +} |