From 43fb32e332f84d2ac9f6b5ea8b13cb014a697fbc Mon Sep 17 00:00:00 2001 From: Antonio Golfari Date: Fri, 21 May 2021 11:44:04 +0200 Subject: [PATCH] added a warning when leaving comp, task or airspace admin page without saving changes. --- airscore/static/js/airspace_check_admin.js | 23 +++++++++++++++++++--- airscore/static/js/comp_settings.js | 22 +++++++++++++++++++-- airscore/static/js/task_admin.js | 23 +++++++++++++++++++--- 3 files changed, 60 insertions(+), 8 deletions(-) diff --git a/airscore/static/js/airspace_check_admin.js b/airscore/static/js/airspace_check_admin.js index 58bdb17f..64eb9910 100644 --- a/airscore/static/js/airspace_check_admin.js +++ b/airscore/static/js/airspace_check_admin.js @@ -234,8 +234,10 @@ var charts = { object: new Object() } }; +var isSubmitting = false; $(document).ready(function() { + $('#airspace_check_form').data('initial-state', $('#airspace_check_form').serialize()); show_boundary(); show_v_limit(); update_parameters(); @@ -262,10 +264,25 @@ $(document).ready(function() { // inform when saving changings is needed $('#airspace_check_form :input').change(function(){ - console.log('form changed'); - $('#airspace_check_save_button').removeClass( "btn-outline-secondary" ).addClass( "btn-warning" ); - $('#save_button_warning_text').addClass('bg-warning').html('Parameters are changed and need to be saved'); + if (!isSubmitting && $('#airspace_check_form').serialize() != $('#airspace_check_form').data('initial-state')) { + $('#airspace_check_save_button').removeClass( "btn-outline-secondary" ).addClass( "btn-warning" ); + $('#save_button_warning_text').addClass('bg-warning').html('Parameters are changed and need to be saved'); + } + else { + $('#airspace_check_save_button').removeClass( "btn-warning" ).addClass( "btn-outline-secondary" ); + $('#save_button_warning_text').removeClass('bg-warning').html(''); + } update_charts(); }); + $('#airspace_check_form').submit( function() { + isSubmitting = true + }); + + $(window).on('beforeunload', function() { + if (!isSubmitting && $('#airspace_check_form').serialize() != $('#airspace_check_form').data('initial-state')) { + return 'You have unsaved changes which will not be saved.' + } + }); + }); \ No newline at end of file diff --git a/airscore/static/js/comp_settings.js b/airscore/static/js/comp_settings.js index 35a1f992..af0181e6 100644 --- a/airscore/static/js/comp_settings.js +++ b/airscore/static/js/comp_settings.js @@ -9,8 +9,10 @@ var dropdown = { }; var comp_class = dropdown.category.val(); +var isSubmitting = false; $(document).ready(function() { + $('#main_comp_settings_form').data('initial-state', $('#main_comp_settings_form').serialize()); populate_tasks( tasks_info ); get_scorekeepers( compid ); @@ -87,8 +89,24 @@ $(document).ready(function() { }); $('#main_comp_settings_form :input').change(function(){ - $('#main_comp_save_button').removeClass( "btn-outline-secondary" ).addClass( "btn-warning" ); - $('#save_button_warning_text').addClass('bg-warning').html('Competition needs to be saved'); + if (!isSubmitting && $('#main_comp_settings_form').serialize() != $('#main_comp_settings_form').data('initial-state')) { + $('#main_comp_save_button').removeClass( "btn-outline-secondary" ).addClass( "btn-warning" ); + $('#save_button_warning_text').addClass('bg-warning').html('Competition needs to be saved'); + } + else { + $('#main_comp_save_button').removeClass( "btn-warning" ).addClass( "btn-outline-secondary" ); + $('#save_button_warning_text').removeClass('bg-warning').html(''); + } + }); + + $('#main_comp_settings_form').submit( function() { + isSubmitting = true + }) + + $(window).on('beforeunload', function() { + if (!isSubmitting && $('#main_comp_settings_form').serialize() != $('#main_comp_settings_form').data('initial-state')) { + return 'You have unsaved changes which will not be saved.' + } }); // external event conversion diff --git a/airscore/static/js/task_admin.js b/airscore/static/js/task_admin.js index 7afd52fd..ae45047b 100644 --- a/airscore/static/js/task_admin.js +++ b/airscore/static/js/task_admin.js @@ -1,4 +1,5 @@ var turnpoints; +var isSubmitting = false; var task = { isset: null, ready_to_score: null @@ -6,12 +7,28 @@ var task = { $(document).ready(function() { + $('#main_task_settings_form').data('initial-state', $('#main_task_settings_form').serialize()); get_turnpoints(); $('#main_task_settings_form :input').change(function(){ - console.log('form changed'); - $('#main_task_save_button').removeClass( "btn-outline-secondary" ).addClass( "btn-warning" ); - $('#save_button_warning_text').addClass('bg-warning').html('Task needs to be saved'); + if (!isSubmitting && $('form').serialize() != $('form').data('initial-state')) { + $('#main_task_save_button').removeClass( "btn-outline-secondary" ).addClass( "btn-warning" ); + $('#save_button_warning_text').addClass('bg-warning').html('Task needs to be saved'); + } + else { + $('#main_task_save_button').removeClass( "btn-warning" ).addClass( "btn-outline-secondary" ); + $('#save_button_warning_text').removeClass('bg-warning').html(''); + } + }); + + $('#main_task_settings_form').submit( function() { + isSubmitting = true + }) + + $(window).on('beforeunload', function() { + if (!isSubmitting && $('#main_task_settings_form').serialize() != $('#main_task_settings_form').data('initial-state')) { + return 'You have unsaved changes which will not be saved.' + } }); let stopped = $('#stopped_time').val();