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