From 1a62cf90111b5e8b48a8810048ccd4cef0355f5f Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sat, 15 Mar 2014 12:05:37 -0400 Subject: [PATCH] CRM-13863 - Add more sugar to CRM popup helper --- js/Common.js | 64 +++++++++++++------------ js/crm.livePage.js | 13 ++--- templates/CRM/Admin/Page/Navigation.tpl | 14 +++--- templates/CRM/Group/Form/Search.tpl | 8 ++-- templates/CRM/common/TabHeader.js | 11 ++--- 5 files changed, 51 insertions(+), 59 deletions(-) diff --git a/js/Common.js b/js/Common.js index 479eb80992..d0d39419ac 100644 --- a/js/Common.js +++ b/js/Common.js @@ -1005,32 +1005,36 @@ CRM.validate = CRM.validate || { /** * @see https://wiki.civicrm.org/confluence/display/CRMDOC/Ajax+Pages+and+Forms */ - $.fn.crmPopup = function(listeners) { - var $el = this.first(), + CRM.popup = function() { + var $el = $(this).first(), url = $el.attr('href'), popup = $el.data('popup-type') === 'page' ? CRM.loadPage : CRM.loadForm, - settings = $el.data('popup-settings') || {}; + settings = $el.data('popup-settings') || {}, + triggers = {dialogclose: 'crmPopupClose', crmLoad: 'crmPopupLoad', crmFormSuccess: 'crmPopupFormSuccess'}; settings.dialog = settings.dialog || {}; - if (!CRM.ajax_popups_enabled || !url || url.charAt(0) === '#' || $el.attr('onclick') || $el.hasClass('no-popup')) { - return false; + if (!CRM.config.ajax_popups_enabled || !url || url.charAt(0) === '#' || $el.attr('onclick') || $el.hasClass('no-popup')) { + return; } - // Hack to make delete dialogs smaller + // Sized based on css class with hack to make delete dialogs smaller if ($el.hasClass('small-popup') || url.indexOf('/delete') > 0 || url.indexOf('action=delete') > 0) { settings.dialog.width = 400; settings.dialog.height = 300; } else if ($el.hasClass('medium-popup')) { - settings.dialog.width = '50%'; - settings.dialog.height = '50%'; + settings.dialog.width = settings.dialog.height = '50%'; } else if ($el.hasClass('huge-popup')) { settings.dialog.height = '95%'; } var dialog = popup(url, settings); - $.each(listeners || {}, function(k, v) { - dialog.on(k, v); + // Trigger events from the dialog on the original link element + $el.trigger('crmPopupOpen', [dialog]); + $.each(triggers, function(event, target) { + dialog.on(event, function(e, data) { + $el.trigger(target, [dialog, data]); + }); }); - return dialog; + return false; }; // Preprocess all cj ajax calls to display messages @@ -1056,6 +1060,7 @@ CRM.validate = CRM.validate || { $.widget('civi.crmAutocomplete', $.ui.autocomplete, {}); $(function () { + var optionsChanged; // Trigger crmLoad on initial content for consistency. It will also be triggered for ajax-loaded content. $('.crm-container').trigger('crmLoad'); @@ -1087,28 +1092,24 @@ CRM.validate = CRM.validate || { } }) - .on('click', 'a.crm-option-edit-link', function() { - var - link = $(this), - optionsChanged = false; - return !link.crmPopup({ - crmFormSuccess: function() { - optionsChanged = true; - }, - dialogclose: function() { - if (optionsChanged) { - link.trigger('crmOptionsEdited'); - var $elects = $('select[data-option-edit-path="' + link.data('option-edit-path') + '"]'); - if ($elects.data('api-entity') && $elects.data('api-field')) { - CRM.api3($elects.data('api-entity'), 'getoptions', {sequential: 1, field: $elects.data('api-field')}) - .done(function (data) { - CRM.utils.setOptions($elects, data.values); - }); - } - } + // Edit option lists + .on('click', 'a.crm-option-edit-link', CRM.popup) + .on('crmPopupOpen crmPopupFormSuccess', 'a.crm-option-edit-link', function(e) { + optionsChanged = e.type === 'crmPopupFormSuccess'; + }) + .on('crmPopupClose', 'a.crm-option-edit-link', function() { + if (optionsChanged) { + link.trigger('crmOptionsEdited'); + var $elects = $('select[data-option-edit-path="' + link.data('option-edit-path') + '"]'); + if ($elects.data('api-entity') && $elects.data('api-field')) { + CRM.api3($elects.data('api-entity'), 'getoptions', {sequential: 1, field: $elects.data('api-field')}) + .done(function (data) { + CRM.utils.setOptions($elects, data.values); + }); } - }); + } }) + // Handle clear button for form elements .on('click', 'a.crm-clear-link', function() { $(this).css({visibility: 'hidden'}).siblings('.crm-form-radio:checked').prop('checked', false).change(); @@ -1118,6 +1119,7 @@ CRM.validate = CRM.validate || { .on('change', 'input.crm-form-radio:checked', function() { $(this).siblings('.crm-clear-link').css({visibility: ''}); }); + $().crmtooltip(); }); diff --git a/js/crm.livePage.js b/js/crm.livePage.js index a47145cb41..ca31558509 100644 --- a/js/crm.livePage.js +++ b/js/crm.livePage.js @@ -5,13 +5,10 @@ cj(function($) { // Widgetize the content area .crmSnippet() // Open action links in a popup - .off('click.crmLivePage') - .on('click.crmLivePage', 'a.button, a.action-item', function() { - return !$(this).crmPopup({ - crmFormSuccess: function() { - // Refresh page when form completes - $('#crm-main-content-wrapper').crmSnippet('refresh'); - } - }); + .off('.crmLivePage') + .on('click.crmLivePage', 'a.button, a.action-item', CRM.popup) + .on('crmPopupFormSuccess.crmLivePage', 'a.button, a.action-item', function() { + // Refresh page when form completes + $('#crm-main-content-wrapper').crmSnippet('refresh'); }); }); diff --git a/templates/CRM/Admin/Page/Navigation.tpl b/templates/CRM/Admin/Page/Navigation.tpl index dd55bdcd66..a5131dd30d 100644 --- a/templates/CRM/Admin/Page/Navigation.tpl +++ b/templates/CRM/Admin/Page/Navigation.tpl @@ -52,7 +52,7 @@ } {/literal} diff --git a/templates/CRM/Group/Form/Search.tpl b/templates/CRM/Group/Form/Search.tpl index 44f857e24e..58b2dd81d8 100644 --- a/templates/CRM/Group/Form/Search.tpl +++ b/templates/CRM/Group/Form/Search.tpl @@ -101,14 +101,12 @@ cj(function($) { buildGroupSelector( true ); }); // Add livePage functionality - $('#crm-container').on('click', 'a.button, a.action-item[href*="action=update"], a.action-item[href*="action=delete"]', function() { - return !$(this).crmPopup({ - crmFormSuccess: function() { + $('#crm-container') + .on('click', 'a.button, a.action-item[href*="action=update"], a.action-item[href*="action=delete"]', CRM.popup) + .on('crmPopupFormSuccess', 'a.button, a.action-item[href*="action=update"], a.action-item[href*="action=delete"]', function() { // Refresh datatable when form completes $('#crm-group-selector').dataTable().fnDraw(); - } }); - }); }); function buildGroupSelector( filterSearch, parentsOnlyArg ) { diff --git a/templates/CRM/common/TabHeader.js b/templates/CRM/common/TabHeader.js index 104ead9a0f..c28fbb716f 100644 --- a/templates/CRM/common/TabHeader.js +++ b/templates/CRM/common/TabHeader.js @@ -32,13 +32,10 @@ cj(function($) { if (ui.tab.hasClass('livePage') && CRM.config.ajax_popups_enabled) { ui.panel .off('click.crmLivePage') - .on('click.crmLivePage', 'a.button, a.action-item', function() { - return !$(this).crmPopup({ - crmFormSuccess: function() { - // Refresh panel when form completes - ui.panel.crmSnippet('refresh'); - } - }); + .on('click.crmLivePage', 'a.button, a.action-item', CRM.popup) + .on('crmPopupFormSuccess.crmLivePage', 'a.button, a.action-item', function() { + // Refresh panel when form completes + ui.panel.crmSnippet('refresh'); }); } ui.panel -- 2.25.1