home · contact · privacy
Add foreign key restraints, expand and fix tests, add deletion and forking.
[misc] / todo_templates / watch_form.html
index 979c1da38417fa68c899788aedca2ef6d320dd43..c7f396d6356a7dc7c811518a1bfc9a18ca7b3dc7 100644 (file)
@@ -1,19 +1,43 @@
 <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 inputs_to_ignore = ['and_tag', 'not_tag', 'filter'];
+var update_button_names = ['update'];
+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 (!inputs_to_ignore.includes(event.target.name)) { 
+              changes_to_commit = true; 
+           };
+       });
+    };
+};
+form_to_watch.addEventListener('keydown', function(event) {
+    let el = document.activeElement; 
+    if ('Enter' === event.key
+           && ['INPUT', 'SELECT'].includes(el.tagName)
+           && (el.tagName !== 'INPUT' || el.type !== 'submit')) {
+        event.preventDefault();
+       if (inputs_to_ignore.includes(el.name)) {
+            document.getElementById('filter_button').click(); 
+       } else {
+            document.getElementById('update_button').click(); 
+       };
+    };
+});
+form_to_watch.addEventListener('submit', function(event) {
+    if (update_button_names.includes(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>