+ // Submit-once
+ var submitted = [],
+ submitButton;
+ function submitOnceForm(e) {
+ if (e.isDefaultPrevented()) {
+ return;
+ }
+ if (_.contains(submitted, e.target)) {
+ return false;
+ }
+ submitted.push(e.target);
+ // Spin submit button icon
+ if (submitButton && $(submitButton, e.target).length) {
+ // Dialog button
+ if ($(e.target).closest('.ui-dialog .crm-ajax-container')) {
+ var identifier = $(submitButton).attr('name') || $(submitButton).attr('href');
+ if (identifier) {
+ submitButton = $(e.target).closest('.ui-dialog').find('button[data-identifier="' + identifier + '"]')[0] || submitButton;
+ }
+ }
+ var $icon = $(submitButton).siblings('.crm-i').add('.crm-i, .ui-icon', submitButton);
+ $icon.data('origClass', $icon.attr('class')).removeClass().addClass('crm-i crm-submit-icon fa-spinner fa-pulse');
+ }
+ }
+
+ // If form fails validation, restore button icon and reset the submitted array
+ function submitFormInvalid(form) {
+ submitted = [];
+ $('.crm-i.crm-submit-icon').each(function() {
+ if ($(this).data('origClass')) {
+ $(this).removeClass().addClass($(this).data('origClass'));
+ }
+ });
+ }
+