annotate 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
rev   line source
danielebarchiesi@2 1 (function ($) {
danielebarchiesi@2 2 Drupal.settings.views = Drupal.settings.views || {'ajax_path': '/views/ajax'};
danielebarchiesi@2 3
danielebarchiesi@2 4 Drupal.quicktabs = Drupal.quicktabs || {};
danielebarchiesi@2 5
danielebarchiesi@2 6 Drupal.quicktabs.getQTName = function (el) {
danielebarchiesi@2 7 return el.id.substring(el.id.indexOf('-') +1);
danielebarchiesi@2 8 }
danielebarchiesi@2 9
danielebarchiesi@2 10 Drupal.behaviors.quicktabs = {
danielebarchiesi@2 11 attach: function (context, settings) {
danielebarchiesi@2 12 $.extend(true, Drupal.settings, settings);
danielebarchiesi@2 13 $('.quicktabs-wrapper', context).once(function(){
danielebarchiesi@2 14 Drupal.quicktabs.prepare(this);
danielebarchiesi@2 15 });
danielebarchiesi@2 16 }
danielebarchiesi@2 17 }
danielebarchiesi@2 18
danielebarchiesi@2 19 // Setting up the inital behaviours
danielebarchiesi@2 20 Drupal.quicktabs.prepare = function(el) {
danielebarchiesi@2 21 // el.id format: "quicktabs-$name"
danielebarchiesi@2 22 var qt_name = Drupal.quicktabs.getQTName(el);
danielebarchiesi@2 23 var $ul = $(el).find('ul.quicktabs-tabs:first');
danielebarchiesi@2 24 $ul.find('li a').each(function(i, element){
danielebarchiesi@2 25 element.myTabIndex = i;
danielebarchiesi@2 26 element.qt_name = qt_name;
danielebarchiesi@2 27 var tab = new Drupal.quicktabs.tab(element);
danielebarchiesi@2 28 var parent_li = $(element).parents('li').get(0);
danielebarchiesi@2 29 if ($(parent_li).hasClass('active')) {
danielebarchiesi@2 30 $(element).addClass('quicktabs-loaded');
danielebarchiesi@2 31 }
danielebarchiesi@2 32 $(element).once(function() {$(this).bind('click', {tab: tab}, Drupal.quicktabs.clickHandler);});
danielebarchiesi@2 33 });
danielebarchiesi@2 34 }
danielebarchiesi@2 35
danielebarchiesi@2 36 Drupal.quicktabs.clickHandler = function(event) {
danielebarchiesi@2 37 var tab = event.data.tab;
danielebarchiesi@2 38 var element = this;
danielebarchiesi@2 39 // Set clicked tab to active.
danielebarchiesi@2 40 $(this).parents('li').siblings().removeClass('active');
danielebarchiesi@2 41 $(this).parents('li').addClass('active');
danielebarchiesi@2 42
danielebarchiesi@2 43 // Hide all tabpages.
danielebarchiesi@2 44 tab.container.children().addClass('quicktabs-hide');
danielebarchiesi@2 45
danielebarchiesi@2 46 if (!tab.tabpage.hasClass("quicktabs-tabpage")) {
danielebarchiesi@2 47 tab = new Drupal.quicktabs.tab(element);
danielebarchiesi@2 48 }
danielebarchiesi@2 49
danielebarchiesi@2 50 tab.tabpage.removeClass('quicktabs-hide');
danielebarchiesi@2 51 return false;
danielebarchiesi@2 52 }
danielebarchiesi@2 53
danielebarchiesi@2 54 // Constructor for an individual tab
danielebarchiesi@2 55 Drupal.quicktabs.tab = function (el) {
danielebarchiesi@2 56 this.element = el;
danielebarchiesi@2 57 this.tabIndex = el.myTabIndex;
danielebarchiesi@2 58 var qtKey = 'qt_' + el.qt_name;
danielebarchiesi@2 59 var i = 0;
danielebarchiesi@2 60 for (var key in Drupal.settings.quicktabs[qtKey].tabs) {
danielebarchiesi@2 61 if (i == this.tabIndex) {
danielebarchiesi@2 62 this.tabObj = Drupal.settings.quicktabs[qtKey].tabs[key];
danielebarchiesi@2 63 this.tabKey = key;
danielebarchiesi@2 64 }
danielebarchiesi@2 65 i++;
danielebarchiesi@2 66 }
danielebarchiesi@2 67 this.tabpage_id = 'quicktabs-tabpage-' + el.qt_name + '-' + this.tabKey;
danielebarchiesi@2 68 this.container = $('#quicktabs-container-' + el.qt_name);
danielebarchiesi@2 69 this.tabpage = this.container.find('#' + this.tabpage_id);
danielebarchiesi@2 70 }
danielebarchiesi@2 71
danielebarchiesi@2 72 if (Drupal.ajax) {
danielebarchiesi@2 73 /**
danielebarchiesi@2 74 * Handle an event that triggers an AJAX response.
danielebarchiesi@2 75 *
danielebarchiesi@2 76 * We unfortunately need to override this function, which originally comes from
danielebarchiesi@2 77 * misc/ajax.js, in order to be able to cache loaded tabs, i.e. once a tab
danielebarchiesi@2 78 * content has loaded it should not need to be loaded again.
danielebarchiesi@2 79 *
danielebarchiesi@2 80 * I have removed all comments that were in the original core function, so that
danielebarchiesi@2 81 * the only comments inside this function relate to the Quicktabs modification
danielebarchiesi@2 82 * of it.
danielebarchiesi@2 83 */
danielebarchiesi@2 84 Drupal.ajax.prototype.eventResponse = function (element, event) {
danielebarchiesi@2 85 var ajax = this;
danielebarchiesi@2 86
danielebarchiesi@2 87 if (ajax.ajaxing) {
danielebarchiesi@2 88 return false;
danielebarchiesi@2 89 }
danielebarchiesi@2 90
danielebarchiesi@2 91 try {
danielebarchiesi@2 92 if (ajax.form) {
danielebarchiesi@2 93 if (ajax.setClick) {
danielebarchiesi@2 94 element.form.clk = element;
danielebarchiesi@2 95 }
danielebarchiesi@2 96
danielebarchiesi@2 97 ajax.form.ajaxSubmit(ajax.options);
danielebarchiesi@2 98 }
danielebarchiesi@2 99 else {
danielebarchiesi@2 100 // Do not perform an ajax request for already loaded Quicktabs content.
danielebarchiesi@2 101 if (!$(element).hasClass('quicktabs-loaded')) {
danielebarchiesi@2 102 ajax.beforeSerialize(ajax.element, ajax.options);
danielebarchiesi@2 103 $.ajax(ajax.options);
danielebarchiesi@2 104 if ($(element).parents('ul').hasClass('quicktabs-tabs')) {
danielebarchiesi@2 105 $(element).addClass('quicktabs-loaded');
danielebarchiesi@2 106 }
danielebarchiesi@2 107 }
danielebarchiesi@2 108 }
danielebarchiesi@2 109 }
danielebarchiesi@2 110 catch (e) {
danielebarchiesi@2 111 ajax.ajaxing = false;
danielebarchiesi@2 112 alert("An error occurred while attempting to process " + ajax.options.url + ": " + e.message);
danielebarchiesi@2 113 }
danielebarchiesi@2 114 return false;
danielebarchiesi@2 115 };
danielebarchiesi@2 116 }
danielebarchiesi@2 117
danielebarchiesi@2 118
danielebarchiesi@2 119 })(jQuery);