home · contact · privacy
Improve todo accounting script.
[misc] / todo_templates / watch_form.html
index 979c1da38417fa68c899788aedca2ef6d320dd43..62fee481a6300995cae94527b70262bb096cc927 100644 (file)
@@ -1,19 +1,29 @@
 <script>
-    var formHasChanged = false;
-    var submitted = false;
-    var form_to_watch = document.getElementById('form_to_watch');
-    form_to_watch.addEventListener('input', function() {
-        formHasChanged = true;
-    });
-    form_to_watch.addEventListener('submit', function() {
-        submitted = true;
-    });
-    window.addEventListener('beforeunload', function(event) {
-        if (formHasChanged && !submitted) {
-            var confirmationMessage = 'You have unsaved changes. Are you sure you want to leave?';
-            event.returnValue = confirmationMessage;
-            return confirmationMessage;
-        }
-    });
+var mere_filter_inputs = ['t_and', 't_not', 'filter'];
+var sending_commits = false;
+var changes_to_commit = false;
+var form_to_watch = document.getElementById('form_to_watch');
+for (let i = 0; i < form_to_watch.elements.length; i++) {
+    let el = form_to_watch.elements[i];
+    if (['INPUT', 'TEXTAREA', 'SELECT'].includes(el.tagName)) {
+        el.addEventListener('change', function(event) {
+            if (!mere_filter_inputs.includes(event.target.name)) { 
+              changes_to_commit = true; 
+           };
+       });
+    };
+};
+form_to_watch.addEventListener('submit', function(event) {
+    if ('update' == event.submitter.name) {
+       sending_commits = true; 
+    };
+});
+window.addEventListener('beforeunload', function(event) {
+    if (changes_to_commit && !sending_commits) {
+        var warning = 'about to lose unsaved changes, continue?';
+        event.returnValue = warning;
+        return warning;
+    }
+});
 </script>