<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>