danielebarchiesi@2: (function ($) { danielebarchiesi@2: Drupal.settings.views = Drupal.settings.views || {'ajax_path': '/views/ajax'}; danielebarchiesi@2: danielebarchiesi@2: Drupal.quicktabs = Drupal.quicktabs || {}; danielebarchiesi@2: danielebarchiesi@2: Drupal.quicktabs.getQTName = function (el) { danielebarchiesi@2: return el.id.substring(el.id.indexOf('-') +1); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: Drupal.behaviors.quicktabs = { danielebarchiesi@2: attach: function (context, settings) { danielebarchiesi@2: $.extend(true, Drupal.settings, settings); danielebarchiesi@2: $('.quicktabs-wrapper', context).once(function(){ danielebarchiesi@2: Drupal.quicktabs.prepare(this); danielebarchiesi@2: }); danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: // Setting up the inital behaviours danielebarchiesi@2: Drupal.quicktabs.prepare = function(el) { danielebarchiesi@2: // el.id format: "quicktabs-$name" danielebarchiesi@2: var qt_name = Drupal.quicktabs.getQTName(el); danielebarchiesi@2: var $ul = $(el).find('ul.quicktabs-tabs:first'); danielebarchiesi@2: $ul.find('li a').each(function(i, element){ danielebarchiesi@2: element.myTabIndex = i; danielebarchiesi@2: element.qt_name = qt_name; danielebarchiesi@2: var tab = new Drupal.quicktabs.tab(element); danielebarchiesi@2: var parent_li = $(element).parents('li').get(0); danielebarchiesi@2: if ($(parent_li).hasClass('active')) { danielebarchiesi@2: $(element).addClass('quicktabs-loaded'); danielebarchiesi@2: } danielebarchiesi@2: $(element).once(function() {$(this).bind('click', {tab: tab}, Drupal.quicktabs.clickHandler);}); danielebarchiesi@2: }); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: Drupal.quicktabs.clickHandler = function(event) { danielebarchiesi@2: var tab = event.data.tab; danielebarchiesi@2: var element = this; danielebarchiesi@2: // Set clicked tab to active. danielebarchiesi@2: $(this).parents('li').siblings().removeClass('active'); danielebarchiesi@2: $(this).parents('li').addClass('active'); danielebarchiesi@2: danielebarchiesi@2: // Hide all tabpages. danielebarchiesi@2: tab.container.children().addClass('quicktabs-hide'); danielebarchiesi@2: danielebarchiesi@2: if (!tab.tabpage.hasClass("quicktabs-tabpage")) { danielebarchiesi@2: tab = new Drupal.quicktabs.tab(element); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: tab.tabpage.removeClass('quicktabs-hide'); danielebarchiesi@2: return false; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: // Constructor for an individual tab danielebarchiesi@2: Drupal.quicktabs.tab = function (el) { danielebarchiesi@2: this.element = el; danielebarchiesi@2: this.tabIndex = el.myTabIndex; danielebarchiesi@2: var qtKey = 'qt_' + el.qt_name; danielebarchiesi@2: var i = 0; danielebarchiesi@2: for (var key in Drupal.settings.quicktabs[qtKey].tabs) { danielebarchiesi@2: if (i == this.tabIndex) { danielebarchiesi@2: this.tabObj = Drupal.settings.quicktabs[qtKey].tabs[key]; danielebarchiesi@2: this.tabKey = key; danielebarchiesi@2: } danielebarchiesi@2: i++; danielebarchiesi@2: } danielebarchiesi@2: this.tabpage_id = 'quicktabs-tabpage-' + el.qt_name + '-' + this.tabKey; danielebarchiesi@2: this.container = $('#quicktabs-container-' + el.qt_name); danielebarchiesi@2: this.tabpage = this.container.find('#' + this.tabpage_id); danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: if (Drupal.ajax) { danielebarchiesi@2: /** danielebarchiesi@2: * Handle an event that triggers an AJAX response. danielebarchiesi@2: * danielebarchiesi@2: * We unfortunately need to override this function, which originally comes from danielebarchiesi@2: * misc/ajax.js, in order to be able to cache loaded tabs, i.e. once a tab danielebarchiesi@2: * content has loaded it should not need to be loaded again. danielebarchiesi@2: * danielebarchiesi@2: * I have removed all comments that were in the original core function, so that danielebarchiesi@2: * the only comments inside this function relate to the Quicktabs modification danielebarchiesi@2: * of it. danielebarchiesi@2: */ danielebarchiesi@2: Drupal.ajax.prototype.eventResponse = function (element, event) { danielebarchiesi@2: var ajax = this; danielebarchiesi@2: danielebarchiesi@2: if (ajax.ajaxing) { danielebarchiesi@2: return false; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: try { danielebarchiesi@2: if (ajax.form) { danielebarchiesi@2: if (ajax.setClick) { danielebarchiesi@2: element.form.clk = element; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: ajax.form.ajaxSubmit(ajax.options); danielebarchiesi@2: } danielebarchiesi@2: else { danielebarchiesi@2: // Do not perform an ajax request for already loaded Quicktabs content. danielebarchiesi@2: if (!$(element).hasClass('quicktabs-loaded')) { danielebarchiesi@2: ajax.beforeSerialize(ajax.element, ajax.options); danielebarchiesi@2: $.ajax(ajax.options); danielebarchiesi@2: if ($(element).parents('ul').hasClass('quicktabs-tabs')) { danielebarchiesi@2: $(element).addClass('quicktabs-loaded'); danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: catch (e) { danielebarchiesi@2: ajax.ajaxing = false; danielebarchiesi@2: alert("An error occurred while attempting to process " + ajax.options.url + ": " + e.message); danielebarchiesi@2: } danielebarchiesi@2: return false; danielebarchiesi@2: }; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: danielebarchiesi@2: })(jQuery);