X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2FCommon.js;h=25e228b594c3d41cda2825aa5d98fef43099e178;hb=a2b21ae3962a1d7f78f0b2bcfdf42cf42e6a7969;hp=d53f2c1a54bba8e33fc55fb236e20c546e87c48b;hpb=0943a2d8616d28e46f6874f79eb26aef4d11141a;p=civicrm-core.git diff --git a/js/Common.js b/js/Common.js index d53f2c1a54..25e228b594 100644 --- a/js/Common.js +++ b/js/Common.js @@ -144,17 +144,11 @@ function showHideByValue(trigger_field_id, trigger_value, target_element_id, tar } } +var submitcount = 0; /** - * Function to change button text and disable one it is clicked + * Old submit-once function. Will be removed soon. * @deprecated - * @param obj object - the button clicked - * @param formID string - the id of the form being submitted - * @param string procText - button text after user clicks it - * @return bool */ -var submitcount = 0; -/* Changes button label on submit, and disables button after submit for newer browsers. - Puts up alert for older browsers. */ function submitOnce(obj, formId, procText) { // if named button clicked, change text if (obj.value != null) { @@ -238,9 +232,13 @@ if (!CRM.vars) CRM.vars = {}; }; var scriptsLoaded = {}; - CRM.loadScript = function(url) { + CRM.loadScript = function(url, appendCacheCode) { if (!scriptsLoaded[url]) { - var script = document.createElement('script'); + var script = document.createElement('script'), + src = url; + if (appendCacheCode !== false) { + src += (_.includes(url, '?') ? '&r=' : '?r=') + CRM.config.resourceCacheCode; + } scriptsLoaded[url] = $.Deferred(); script.onload = function () { // Give the script time to execute @@ -256,7 +254,7 @@ if (!CRM.vars) CRM.vars = {}; CRM.CMSjQuery = window.jQuery; window.jQuery = CRM.$; } - script.src = url + (_.includes(url, '?') ? '&r=' : '?r=') + CRM.config.resourceCacheCode; + script.src = src; document.getElementsByTagName("head")[0].appendChild(script); } return scriptsLoaded[url]; @@ -856,6 +854,41 @@ if (!CRM.vars) CRM.vars = {}; }); }; + // 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')); + } + }); + } + // Initialize widgets $(document) .on('crmLoad', function(e) { @@ -875,6 +908,7 @@ if (!CRM.vars) CRM.vars = {}; } }) .find('input.select-row:checked').parents('tr').addClass('crm-row-selected'); + $('.crm-sortable-list', e.target).sortable(); $('table.crm-sortable', e.target).DataTable(); $('table.crm-ajax-table', e.target).each(function() { var @@ -920,9 +954,17 @@ if (!CRM.vars) CRM.vars = {}; CRM.wysiwyg.create(this); } }); + // Submit once handlers + $('form[data-submit-once]', e.target) + .submit(submitOnceForm) + .on('invalid-form', submitFormInvalid); + $('form[data-submit-once] input[type=submit]', e.target).click(function(e) { + submitButton = e.target; + }); }) .on('dialogopen', function(e) { var $el = $(e.target); + $('body').addClass('ui-dialog-open'); // Modal dialogs should disable scrollbars if ($el.dialog('option', 'modal')) { $el.addClass('modal-dialog'); @@ -939,6 +981,9 @@ if (!CRM.vars) CRM.vars = {}; $(this).button('option', 'icons', {primary: 'fa-expand'}); } else { var menuHeight = $('#civicrm-menu').outerHeight(); + if ($('body').hasClass('crm-menubar-below-cms-menu')) { + menuHeight += $('#civicrm-menu').offset().top; + } $el.data('origSize', { position: {my: 'center', at: 'center center+' + (menuHeight / 2), of: window}, width: $el.dialog('option', 'width'), @@ -957,6 +1002,9 @@ if (!CRM.vars) CRM.vars = {}; if ($('.ui-dialog .modal-dialog:visible').not(e.target).length < 1) { $('body').css({overflow: ''}); } + if ($('.ui-dialog-content:visible').not(e.target).length < 1) { + $('body').removeClass('ui-dialog-open'); + } }) .on('submit', function(e) { // CRM-14353 - disable changes warn when submitting a form