From ac6e87975d8df67b79cef07326c3aacb4a0ccb42 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 27 Oct 2021 09:10:07 +0200 Subject: [PATCH 1/5] js: prevent autosave while user is active (#58276) --- wcs/qommon/static/js/qommon.forms.js | 29 ++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/wcs/qommon/static/js/qommon.forms.js b/wcs/qommon/static/js/qommon.forms.js index e4366e17..fe50dbd9 100644 --- a/wcs/qommon/static/js/qommon.forms.js +++ b/wcs/qommon/static/js/qommon.forms.js @@ -123,6 +123,7 @@ Responsive_table_widget.prototype.init = function () { $(function() { var autosave_timeout_id = null; + var autosave_is_running = false; if ($('form[data-has-draft]:not([data-autosave=false])').length == 1) { var last_auto_save = $('form[data-has-draft]').serialize(); function autosave() { @@ -130,9 +131,10 @@ $(function() { if ($form.hasClass('disabled-during-submit')) return; var new_auto_save = $form.serialize(); if (last_auto_save == new_auto_save) { - autosave_timeout_id = window.setTimeout(autosave, 5000); + install_autosave(); return; } + autosave_is_running = true; $.ajax({ type: 'POST', url: window.location.pathname + 'autosave', @@ -143,11 +145,28 @@ $(function() { } }, complete: function() { - autosave_timeout_id = window.setTimeout(autosave, 5000); + autosave_is_running = false; + if (autosave_timeout_id !== null) { + install_autosave(); + } } }); } - autosave_timeout_id = window.setTimeout(autosave, 5000); + + function install_autosave() { + // debounce + window.clearTimeout(autosave_timeout_id); + autosave_timeout_id = window.setTimeout(autosave, 5000); + } + + $(document).on('mouseover scroll keydown', function() { + if (autosave_timeout_id !== null && ! autosave_is_running) { + install_autosave(); + } + }); + + install_autosave(); + $('#tracking-code a').on('click', autosave); $(document).on('wcs:set-last-auto-save', function() { last_auto_save = $('form[data-has-draft]').serialize(); @@ -360,8 +379,10 @@ $(function() { }); $('form').on('submit', function(event) { var $form = $(this); - if (autosave_timeout_id) { + /* prevent more autosave */ + if (autosave_timeout_id !== null) { window.clearTimeout(autosave_timeout_id); + autosave_timeout_id = null; } $form.addClass('disabled-during-submit'); if ($form.hasClass('download-button-clicked')) { -- 2.33.0