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);