diff options
author | Vincent Peugnet <33429034+vincent-peugnet@users.noreply.github.com> | 2019-11-15 18:38:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-15 18:38:20 +0100 |
commit | dc041bbd71d1b9d6cfe189f2449a9ee0e9063708 (patch) | |
tree | cd0131b0764cb14354e0ef67948ad3102664b354 | |
parent | 1add9049bedd3ac381e42ea5c177c5e0b871a50a (diff) | |
parent | 19803db70f2a5a4162d1be2ca0f72eb08e25d544 (diff) | |
download | wcms-dc041bbd71d1b9d6cfe189f2449a9ee0e9063708.tar.gz wcms-dc041bbd71d1b9d6cfe189f2449a9ee0e9063708.zip |
Merge pull request #23 from n-peugnet/asterix-unsaved-changes
feat: add unsaved changes' asterix indicator
-rw-r--r-- | app/view/templates/edit.php | 1 | ||||
-rw-r--r-- | src/edit.js | 29 |
2 files changed, 27 insertions, 3 deletions
diff --git a/app/view/templates/edit.php b/app/view/templates/edit.php index 2de0c9b..5507583 100644 --- a/app/view/templates/edit.php +++ b/app/view/templates/edit.php @@ -29,6 +29,7 @@ <script> const pageid = '<?= $page->id() ?>'; + let pagetitle = '<?= $page->title() ?>'; </script> <script src="<?= Wcms\Model::jspath() ?>edit.bundle.js"></script> </body> diff --git a/src/edit.js b/src/edit.js index 062a0de..c1018d7 100644 --- a/src/edit.js +++ b/src/edit.js @@ -10,9 +10,16 @@ import 'codemirror/addon/search/jump-to-line'; import 'codemirror/addon/dialog/dialog'; import 'codemirror/addon/dialog/dialog.css'; +/** @type {HTMLFormElement} */ let form; + +/** @type {CodeMirror.EditorFromTextArea[]} */ let editors = []; + +/** @type {boolean} */ let unsavedChanges = false; + +/** @type {InputEvent} */ const inputEvent = new InputEvent('input'); window.addEventListener('load', () => { @@ -27,6 +34,7 @@ window.addEventListener('load', () => { submitHandler(this); }); + // disable CodeMirror's default ctrl+D shortcut (delete line) delete CodeMirror.keyMap['default']['Ctrl-D']; editors = [ @@ -84,6 +92,10 @@ window.addEventListener('load', () => { fontSizeInput.addEventListener('change', fontSizeChangeHandler); fontSizeInput.dispatchEvent(new Event('change')); + document.getElementById('title').addEventListener('input', e => { + pagetitle = e.target.value; + }); + window.onkeydown = keyboardHandler; window.onbeforeunload = confirmExit; }); @@ -127,7 +139,7 @@ function changeHandler(e) { ) { return; } - unsavedChanges = true; + changed(); } /** @@ -157,8 +169,7 @@ function submitHandler(form) { var fd = new FormData(form); xhr.addEventListener('load', function(event) { - unsavedChanges = false; - // Add "last update" timestamp here + saved(); }); xhr.addEventListener('error', function(event) { alert('Error while trying to update.'); @@ -176,3 +187,15 @@ function confirmExit(e) { return 'You have unsaved changes, do you really want to leave this page?'; } } + +function changed() { + unsavedChanges = true; + document.title = '✏ *' + pagetitle; + document.getElementById('headid').innerHTML = '*' + pageid; +} + +function saved() { + unsavedChanges = false; + document.title = '✏ ' + pagetitle; + document.getElementById('headid').innerHTML = pageid; +} |