diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index a60aeb221..94579b490 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..867e6fa43 --- /dev/null +++ b/app/assets/javascripts/prevent_double_submission.js.coffee @@ -0,0 +1,26 @@ +App.PreventDoubleSubmission = + disable_button: (button) -> + unless button.hasClass('disabled') + loading = button.data('loading') ? '...' + 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, -> + button = $(this).find(':button, :submit') + App.PreventDoubleSubmission.disable_button(button) + ).on('ajax:success', -> + button = $(this).find(':button, :submit') + App.PreventDoubleSubmission.reset_button(button) + ) + + false