From 81b1549d11b4a0fa787212dde9f41e640fa9abac Mon Sep 17 00:00:00 2001 From: David Gil Date: Thu, 10 Sep 2015 16:56:04 +0200 Subject: [PATCH 1/4] prevents double submit for form buttons --- app/assets/javascripts/application.js | 1 + .../prevent_double_submission.js.coffee | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 app/assets/javascripts/prevent_double_submission.js.coffee diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 2a7676be9..7f00e0f02 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -33,6 +33,7 @@ var initialize_modules = function() { App.Dropdown.initialize(); App.LocationChanger.initialize(); App.CheckAllNone.initialize(); + App.PreventDoubleSubmission.initialize(); }; $(function(){ diff --git a/app/assets/javascripts/prevent_double_submission.js.coffee b/app/assets/javascripts/prevent_double_submission.js.coffee new file mode 100644 index 000000000..933ed9e97 --- /dev/null +++ b/app/assets/javascripts/prevent_double_submission.js.coffee @@ -0,0 +1,28 @@ +App.PreventDoubleSubmission = + disable_button: (button) -> + unless button.hasClass('disabled') + loading = button.data('loading') ? 'Sending ...' + button.addClass('disabled').attr('disabled', 'disabled') + button.data('text', button.val()) + button.val(loading) + + reset_button: (button) -> + if button.hasClass('disabled') + button_text = button.data('text') + button.removeClass('disabled').attr('disabled', null) + if button_text + button.val(button_text) + button.data('text', null) + + initialize: -> + $('form').on('submit', event, -> + $form = $(this) + button = $form.find('.button') + App.PreventDoubleSubmission.disable_button(button) + ).on('ajax:success', -> + $form = $(this) + button = $form.find('.button') + App.PreventDoubleSubmission.reset_button(button) + ) + + false From a742afff9b12ebe62524cc821646d74ac0d37a13 Mon Sep 17 00:00:00 2001 From: David Gil Date: Thu, 10 Sep 2015 18:00:48 +0200 Subject: [PATCH 2/4] clean code --- app/assets/javascripts/prevent_double_submission.js.coffee | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/prevent_double_submission.js.coffee b/app/assets/javascripts/prevent_double_submission.js.coffee index 933ed9e97..c474f6248 100644 --- a/app/assets/javascripts/prevent_double_submission.js.coffee +++ b/app/assets/javascripts/prevent_double_submission.js.coffee @@ -16,12 +16,10 @@ App.PreventDoubleSubmission = initialize: -> $('form').on('submit', event, -> - $form = $(this) - button = $form.find('.button') + button = $(this).find('.button') App.PreventDoubleSubmission.disable_button(button) ).on('ajax:success', -> - $form = $(this) - button = $form.find('.button') + button = $(this).find('.button') App.PreventDoubleSubmission.reset_button(button) ) From 2f5168a2bf8633c01bdd0b15ae84861816acdc38 Mon Sep 17 00:00:00 2001 From: David Gil Date: Thu, 10 Sep 2015 18:35:48 +0200 Subject: [PATCH 3/4] changes default loading text to "..." --- app/assets/javascripts/prevent_double_submission.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/prevent_double_submission.js.coffee b/app/assets/javascripts/prevent_double_submission.js.coffee index c474f6248..713706717 100644 --- a/app/assets/javascripts/prevent_double_submission.js.coffee +++ b/app/assets/javascripts/prevent_double_submission.js.coffee @@ -1,7 +1,7 @@ App.PreventDoubleSubmission = disable_button: (button) -> unless button.hasClass('disabled') - loading = button.data('loading') ? 'Sending ...' + loading = button.data('loading') ? '...' button.addClass('disabled').attr('disabled', 'disabled') button.data('text', button.val()) button.val(loading) From a5f05455c4cb66e574a91d3e2b84336fad24b5ad Mon Sep 17 00:00:00 2001 From: David Gil Date: Thu, 10 Sep 2015 18:42:53 +0200 Subject: [PATCH 4/4] prefers :button and :submit selector to css class in selector --- app/assets/javascripts/prevent_double_submission.js.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/prevent_double_submission.js.coffee b/app/assets/javascripts/prevent_double_submission.js.coffee index 713706717..867e6fa43 100644 --- a/app/assets/javascripts/prevent_double_submission.js.coffee +++ b/app/assets/javascripts/prevent_double_submission.js.coffee @@ -16,10 +16,10 @@ App.PreventDoubleSubmission = initialize: -> $('form').on('submit', event, -> - button = $(this).find('.button') + button = $(this).find(':button, :submit') App.PreventDoubleSubmission.disable_button(button) ).on('ajax:success', -> - button = $(this).find('.button') + button = $(this).find(':button, :submit') App.PreventDoubleSubmission.reset_button(button) )