* Tabs with class 'ajaxForm' will use CRM.loadForm instead, suitable for most forms
* Tabs with class 'livePage' will get popup action links, suitable for crud tables
*/
-cj(function($) {
+CRM.$(function($) {
var tabSettings = CRM.tabSettings || {};
tabSettings.active = tabSettings.active ? $('#tab_' + tabSettings.active).prevAll().length : 0;
$("#mainTabContainer")
})
});
}
- if (ui.tab.hasClass('livePage')) {
+ if (ui.tab.hasClass('livePage') && CRM.config.ajaxPopupsEnabled) {
ui.panel
.off('click.crmLivePage')
- .on('click.crmLivePage', 'a.button, a.action-item', function() {
- // only follow real links not javascript buttons
- if ($(this).attr('href') === '#' || $(this).attr('onclick') || $(this).hasClass('no-popup')) {
- return;
- }
- CRM.loadForm($(this).attr('href'), {
- openInline: 'a:not("[href=#], .no-popup")'
- }).on('crmFormSuccess', function(e, data) {
- // Refresh when form completes
- ui.panel.crmSnippet('refresh');
- });
- return false;
- });
+ .on('click.crmLivePage', 'a.button, a.action-item', CRM.popup)
+ .on('crmPopupFormSuccess.crmLivePage', 'a.button, a.action-item', CRM.refreshParent);
}
ui.panel
.off('.tabInfo')
.on('crmLoad.tabInfo crmFormSuccess.tabInfo', function(e, data) {
- if (typeof(data.tabCount) !== 'undefined') {
- CRM.tabHeader.updateCount(ui.tab, data.tabCount);
- }
- if (typeof(data.tabValid) !== 'undefined') {
- var method = data.tabValid ? 'removeClass' : 'addClass';
- ui.tab[method]('disabled');
+ if (data) {
+ if (typeof(data.tabCount) !== 'undefined') {
+ CRM.tabHeader.updateCount(ui.tab, data.tabCount);
+ }
+ if (typeof(data.tabValid) !== 'undefined') {
+ var method = data.tabValid ? 'removeClass' : 'addClass';
+ ui.tab[method]('disabled');
+ }
}
});
CRM[method]($('a', ui.tab).attr('href'), params);
e.preventDefault();
})
.tabs(tabSettings);
+ // Any load/submit event could potentially call for tabs to refresh.
+ $(document).on('crmLoad.tabInfo crmFormSuccess.tabInfo', function(e, data) {
+ if (data && $.isPlainObject(data.updateTabs)) {
+ $.each(data.updateTabs, CRM.tabHeader.updateCount);
+ $.each(data.updateTabs, CRM.tabHeader.resetTab);
+ }
+ });
});
(function($) {
// Utility functions
CRM.tabHeader = CRM.tabHeader || {};
+
+ /**
+ * Return active tab
+ */
+ CRM.tabHeader.getActiveTab = function() {
+ return $('.ui-tabs-active', '#mainTabContainer');
+ }
+
+ /**
+ * Make a given tab the active one
+ * @param tab jQuery selector
+ */
+ CRM.tabHeader.focus = function(tab) {
+ $('#mainTabContainer').tabs('option', 'active', $(tab).prevAll().length);
+ };
+
+ /**
+ * @param tab jQuery selector
+ * @returns panel jQuery object
+ */
+ CRM.tabHeader.getTabPanel = function(tab) {
+ return $('#' + $(tab).attr('aria-controls'));
+ };
+
+ CRM.tabHeader.getCount = function(tab) {
+ return parseInt($(tab).find('a em').text(), 10);
+ }
+
+ /**
+ * Update the counter in a tab
+ * @param tab jQuery selector
+ * @param count number
+ */
CRM.tabHeader.updateCount = function(tab, count) {
var oldClass = $(tab).attr('class').match(/(crm-count-\d+)/);
if (oldClass) {
$(tab)
.addClass('crm-count-' + count)
.find('a em').html('' + count);
- }
-})(cj);
+ };
+
+ /**
+ * Clears tab content so that it will be refreshed next time the user clicks on it
+ * @param tab
+ */
+ CRM.tabHeader.resetTab = function(tab) {
+ var $panel = CRM.tabHeader.getTabPanel(tab);
+ if ($(tab).hasClass('ui-tabs-active')) {
+ $panel.crmSnippet('refresh');
+ } else {
+ $panel.data("civiCrmSnippet") && $panel.crmSnippet('destroy');
+ }
+ };
+})(CRM.$);