From 28ddfd38fa88a866b576656157e9c1308b146426 Mon Sep 17 00:00:00 2001 From: Alejandro Frias Date: Thu, 24 Aug 2017 15:23:40 -0700 Subject: [PATCH 1/4] prevent overriding empty string original values --- jquery.are-you-sure.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jquery.are-you-sure.js b/jquery.are-you-sure.js index 3c41e2f..d115e79 100644 --- a/jquery.are-you-sure.js +++ b/jquery.are-you-sure.js @@ -140,7 +140,7 @@ var fields = $form.find(settings.fieldSelector); $(fields).each(function() { var $field = $(this); - if (!$field.data('ays-orig')) { + if (!$field.data('ays-orig') && $field.data('ays-orig') !== "") { storeOrigValue($field); $field.bind(settings.fieldEvents, checkForm); } From 10c8e753d15905c017651f97f9e40856ef926025 Mon Sep 17 00:00:00 2001 From: Alejandro Frias Date: Thu, 24 Aug 2017 15:24:10 -0700 Subject: [PATCH 2/4] remove trailing whitespace (nitpicking) --- jquery.are-you-sure.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jquery.are-you-sure.js b/jquery.are-you-sure.js index d115e79..8919d7d 100644 --- a/jquery.are-you-sure.js +++ b/jquery.are-you-sure.js @@ -11,9 +11,9 @@ * Date: 13th August 2014 */ (function($) { - + $.fn.areYouSure = function(options) { - + var settings = $.extend( { 'message' : 'You have unsaved changes!', @@ -78,7 +78,7 @@ return (getValue($field) != origValue); }; - var $form = ($(this).is('form')) + var $form = ($(this).is('form')) ? $(this) : $(this).parents('form'); @@ -90,7 +90,7 @@ $fields = $form.find(settings.fieldSelector); - if (settings.addRemoveFieldsMarksDirty) { + if (settings.addRemoveFieldsMarksDirty) { // Check if field count has changed var origCount = $form.data("ays-orig-field-count"); if (origCount != $fields.length) { @@ -108,7 +108,7 @@ return false; // break } }); - + setDirtyStatus($form, isDirty); }; @@ -124,7 +124,7 @@ var setDirtyStatus = function($form, isDirty) { var changed = isDirty != $form.hasClass(settings.dirtyClass); $form.toggleClass(settings.dirtyClass, isDirty); - + // Fire change event if required if (changed) { if (settings.change) settings.change.call($form, $form); @@ -177,7 +177,7 @@ return; } var $form = $(this); - + $form.submit(function() { $form.removeClass(settings.dirtyClass); }); From aa5083006e25757fa22ce595b50a941da153a2cd Mon Sep 17 00:00:00 2001 From: Alejandro Frias Date: Thu, 24 Aug 2017 16:01:23 -0700 Subject: [PATCH 3/4] expose getDirtyFields and isDirtyField --- jquery.are-you-sure.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/jquery.are-you-sure.js b/jquery.are-you-sure.js index 8919d7d..d18e6f3 100644 --- a/jquery.are-you-sure.js +++ b/jquery.are-you-sure.js @@ -153,6 +153,12 @@ initForm($(this)); } + var getDirtyFields = function() { + var $form = $(this); + var fields = $form.find(settings.fieldSelector); + return fields.filter(function(field) {return isFieldDirty(field);}) + } + if (!settings.silent && !window.aysUnloadSet) { window.aysUnloadSet = true; $(window).bind('beforeunload', function() { @@ -183,6 +189,8 @@ }); $form.bind('reset', function() { setDirtyStatus($form, false); }); // Add a custom events + $form.bind('isFieldDirty.areYouSure', isFieldDirty); + $form.bind('getDirtyFields.areYouSure', getDirtyFields); $form.bind('rescan.areYouSure', rescan); $form.bind('reinitialize.areYouSure', reinitialize); $form.bind('checkform.areYouSure', checkForm); From db0c1a65ea90a3911a22ce4947c48712e0618f22 Mon Sep 17 00:00:00 2001 From: Alejandro Frias Date: Thu, 24 Aug 2017 16:57:29 -0700 Subject: [PATCH 4/4] fix copy paste error --- jquery.are-you-sure.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/jquery.are-you-sure.js b/jquery.are-you-sure.js index d18e6f3..f6377bb 100644 --- a/jquery.are-you-sure.js +++ b/jquery.are-you-sure.js @@ -68,15 +68,15 @@ $field.data('ays-orig', getValue($field)); }; - var checkForm = function(evt) { + var isFieldDirty = function($field) { + var origValue = $field.data('ays-orig'); + if (undefined === origValue) { + return false; + } + return (getValue($field) != origValue); + }; - var isFieldDirty = function($field) { - var origValue = $field.data('ays-orig'); - if (undefined === origValue) { - return false; - } - return (getValue($field) != origValue); - }; + var checkForm = function(evt) { var $form = ($(this).is('form')) ? $(this) @@ -156,7 +156,14 @@ var getDirtyFields = function() { var $form = $(this); var fields = $form.find(settings.fieldSelector); - return fields.filter(function(field) {return isFieldDirty(field);}) + var dirtyFields = []; + fields.each(function() { + if (isFieldDirty($(this))) { + dirtyFields.push($(this)); + } + }); + $(this).data("dirtyFields", dirtyFields); + return dirtyFields } if (!settings.silent && !window.aysUnloadSet) { @@ -189,7 +196,6 @@ }); $form.bind('reset', function() { setDirtyStatus($form, false); }); // Add a custom events - $form.bind('isFieldDirty.areYouSure', isFieldDirty); $form.bind('getDirtyFields.areYouSure', getDirtyFields); $form.bind('rescan.areYouSure', rescan); $form.bind('reinitialize.areYouSure', reinitialize);