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