From 750f3d5f51056a228b8fa4945ecbb65c4fe81600 Mon Sep 17 00:00:00 2001 From: Shivam Dixit Date: Sun, 1 Jun 2014 17:22:24 +0530 Subject: [PATCH 1/3] Fixed #4415 Show a prompt when user navigates away from insert page without saving Signed-off-by: Shivam Dixit --- js/tbl_change.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/js/tbl_change.js b/js/tbl_change.js index b95efc48ef..177c9e5ddf 100644 --- a/js/tbl_change.js +++ b/js/tbl_change.js @@ -237,6 +237,8 @@ function verificationsAfterFieldChange(urlField, multi_edit, theType) * Unbind all event handlers before tearing down a page */ AJAX.registerTeardown('tbl_change.js', function () { + $("a").die('click'); + $("form#insertForm :input:not([type=hidden])").unbind('change'); $('span.open_gis_editor').die('click'); $("input[name='gis_data[save]']").die('click'); $('input.checkbox_null').die('click'); @@ -245,6 +247,7 @@ AJAX.registerTeardown('tbl_change.js', function () { $("select[name*='funcs']").die('click'); }); + /** * Ajax handlers for Change Table page * @@ -255,6 +258,24 @@ AJAX.registerTeardown('tbl_change.js', function () { AJAX.registerOnload('tbl_change.js', function () { $.datepicker.initialized = false; + var $unsavedForm = false; + + $(document).on('click', 'a', function(e){ + + if ($unsavedForm) { + var is_confirmed = confirm(PMA_messages.strConfirmNavigation); + if (! is_confirmed) { + e.preventDefault(); + } else { + unsavedForm = false; + } + } + }); + + $("form#insertForm :input:not([type=hidden])").change(function(){ + $unsavedForm = true; + }); + $('span.open_gis_editor').live('click', function (event) { event.preventDefault(); @@ -303,7 +324,6 @@ AJAX.registerOnload('tbl_change.js', function () { ); }); - /** * Reset the auto_increment column to 0 when selecting any of the * insert options in submit_type-dropdown. Only perform the reset From 48153344f4db20119e4b7fbae0d724930750deed Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Sun, 1 Jun 2014 09:19:42 -0400 Subject: [PATCH 2/3] Complete the bugfix Signed-off-by: Marc Delisle --- js/tbl_change.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/js/tbl_change.js b/js/tbl_change.js index 177c9e5ddf..d3646c9990 100644 --- a/js/tbl_change.js +++ b/js/tbl_change.js @@ -260,14 +260,16 @@ AJAX.registerOnload('tbl_change.js', function () { var $unsavedForm = false; - $(document).on('click', 'a', function(e){ + $('a').on('click', function(e){ + e.preventDefault(); if ($unsavedForm) { var is_confirmed = confirm(PMA_messages.strConfirmNavigation); if (! is_confirmed) { - e.preventDefault(); + return false; } else { unsavedForm = false; + return true; } } }); From db2c3ef25ab6d177ddeac92bdec2a6d129df13c8 Mon Sep 17 00:00:00 2001 From: Shivam Dixit Date: Sun, 1 Jun 2014 22:10:18 +0530 Subject: [PATCH 3/3] Added comments to bug fix #4415 Signed-off-by: Shivam Dixit --- js/tbl_change.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/js/tbl_change.js b/js/tbl_change.js index d3646c9990..af6ef5f665 100644 --- a/js/tbl_change.js +++ b/js/tbl_change.js @@ -258,8 +258,14 @@ AJAX.registerTeardown('tbl_change.js', function () { AJAX.registerOnload('tbl_change.js', function () { $.datepicker.initialized = false; + // State of the form var $unsavedForm = false; + /** + * If user navigates away from the page + * without saving the changes, a prompt + * will be displayed to confirm navigation + */ $('a').on('click', function(e){ e.preventDefault(); @@ -274,6 +280,9 @@ AJAX.registerOnload('tbl_change.js', function () { } }); + /** + * If any form elements are changed, set $unsavedForm to true + */ $("form#insertForm :input:not([type=hidden])").change(function(){ $unsavedForm = true; });