1 |
87dbc3bf
|
Benjamin Luce
|
|
2 |
|
|
(function ($) {
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
|
10 |
|
|
|
11 |
|
|
|
12 |
|
|
|
13 |
|
|
|
14 |
|
|
|
15 |
|
|
Drupal.behaviors.verticalTabs = {
|
16 |
|
|
attach: function (context) {
|
17 |
|
|
$('.vertical-tabs-panes', context).once('vertical-tabs', function () {
|
18 |
|
|
$(this).addClass('tab-content');
|
19 |
|
|
var focusID = $(':hidden.vertical-tabs-active-tab', this).val();
|
20 |
caf16a48
|
Assos Assos
|
if (typeof focusID === 'undefined' || !focusID.length) {
|
21 |
|
|
focusID = false;
|
22 |
|
|
}
|
23 |
87dbc3bf
|
Benjamin Luce
|
var tab_focus;
|
24 |
|
|
|
25 |
|
|
|
26 |
|
|
var $fieldsets = $('> fieldset', this);
|
27 |
|
|
if ($fieldsets.length == 0) {
|
28 |
|
|
return;
|
29 |
|
|
}
|
30 |
|
|
|
31 |
|
|
|
32 |
|
|
var tab_list = $('<ul class="nav nav-tabs vertical-tabs-list"></ul>');
|
33 |
|
|
$(this).wrap('<div class="tabbable tabs-left vertical-tabs clearfix"></div>').before(tab_list);
|
34 |
|
|
|
35 |
|
|
|
36 |
|
|
$fieldsets.each(function () {
|
37 |
|
|
var vertical_tab = new Drupal.verticalTab({
|
38 |
|
|
title: $('> legend', this).text(),
|
39 |
|
|
fieldset: $(this)
|
40 |
|
|
});
|
41 |
|
|
tab_list.append(vertical_tab.item);
|
42 |
|
|
$(this)
|
43 |
|
|
.removeClass('collapsible collapsed panel panel-default')
|
44 |
|
|
.addClass('tab-pane vertical-tabs-pane')
|
45 |
|
|
.data('verticalTab', vertical_tab)
|
46 |
|
|
.find('> legend').remove();
|
47 |
caf16a48
|
Assos Assos
|
$(this).find('> div').removeClass('panel-collapse collapse').addClass('fade');
|
48 |
|
|
if (this.id === focusID) {
|
49 |
87dbc3bf
|
Benjamin Luce
|
tab_focus = $(this);
|
50 |
|
|
}
|
51 |
|
|
});
|
52 |
|
|
|
53 |
|
|
$('> li:first', tab_list).addClass('first');
|
54 |
|
|
$('> li:last', tab_list).addClass('last');
|
55 |
|
|
|
56 |
|
|
if (!tab_focus) {
|
57 |
|
|
|
58 |
|
|
|
59 |
|
|
if (window.location.hash && $(this).find(window.location.hash).length) {
|
60 |
|
|
tab_focus = $(this).find(window.location.hash).closest('.vertical-tabs-pane');
|
61 |
|
|
}
|
62 |
|
|
else {
|
63 |
|
|
tab_focus = $('> .vertical-tabs-pane:first', this);
|
64 |
|
|
}
|
65 |
|
|
}
|
66 |
|
|
if (tab_focus.length) {
|
67 |
|
|
tab_focus.data('verticalTab').focus();
|
68 |
|
|
}
|
69 |
|
|
});
|
70 |
|
|
}
|
71 |
|
|
};
|
72 |
|
|
|
73 |
|
|
|
74 |
|
|
|
75 |
|
|
|
76 |
|
|
|
77 |
|
|
|
78 |
|
|
|
79 |
|
|
|
80 |
|
|
|
81 |
|
|
Drupal.verticalTab = function (settings) {
|
82 |
|
|
var self = this;
|
83 |
|
|
$.extend(this, settings, Drupal.theme('verticalTab', settings));
|
84 |
|
|
|
85 |
|
|
this.link.click(function () {
|
86 |
|
|
self.focus();
|
87 |
|
|
});
|
88 |
|
|
|
89 |
|
|
|
90 |
|
|
|
91 |
|
|
this.link.keydown(function(event) {
|
92 |
|
|
if (event.keyCode == 13) {
|
93 |
|
|
self.focus();
|
94 |
|
|
|
95 |
|
|
$("fieldset.vertical-tabs-pane :input:visible:enabled:first").focus();
|
96 |
|
|
return false;
|
97 |
|
|
}
|
98 |
|
|
});
|
99 |
|
|
|
100 |
|
|
this.fieldset
|
101 |
|
|
.bind('summaryUpdated', function () {
|
102 |
|
|
self.updateSummary();
|
103 |
|
|
})
|
104 |
|
|
.trigger('summaryUpdated');
|
105 |
|
|
};
|
106 |
|
|
|
107 |
|
|
Drupal.verticalTab.prototype = {
|
108 |
|
|
|
109 |
|
|
|
110 |
|
|
|
111 |
|
|
focus: function () {
|
112 |
|
|
this.fieldset
|
113 |
|
|
.siblings('fieldset.vertical-tabs-pane')
|
114 |
|
|
.each(function () {
|
115 |
caf16a48
|
Assos Assos
|
$(this).removeClass('active').find('> div').removeClass('in');
|
116 |
87dbc3bf
|
Benjamin Luce
|
var tab = $(this).data('verticalTab');
|
117 |
|
|
tab.item.removeClass('selected');
|
118 |
|
|
})
|
119 |
|
|
.end()
|
120 |
caf16a48
|
Assos Assos
|
.addClass('active')
|
121 |
87dbc3bf
|
Benjamin Luce
|
.siblings(':hidden.vertical-tabs-active-tab')
|
122 |
|
|
.val(this.fieldset.attr('id'));
|
123 |
caf16a48
|
Assos Assos
|
this.fieldset.find('> div').addClass('in');
|
124 |
87dbc3bf
|
Benjamin Luce
|
this.fieldset.data('verticalTab').item.find('a').tab('show');
|
125 |
|
|
this.item.addClass('selected');
|
126 |
|
|
|
127 |
|
|
$('#active-vertical-tab').remove();
|
128 |
|
|
this.link.append('<span id="active-vertical-tab" class="element-invisible">' + Drupal.t('(active tab)') + '</span>');
|
129 |
|
|
},
|
130 |
|
|
|
131 |
|
|
|
132 |
|
|
|
133 |
|
|
|
134 |
|
|
updateSummary: function () {
|
135 |
|
|
this.summary.html(this.fieldset.drupalGetSummary());
|
136 |
|
|
},
|
137 |
|
|
|
138 |
|
|
|
139 |
|
|
|
140 |
|
|
|
141 |
|
|
tabShow: function () {
|
142 |
|
|
|
143 |
|
|
this.item.show();
|
144 |
|
|
|
145 |
|
|
|
146 |
|
|
|
147 |
|
|
this.item.parent().children('.vertical-tab-button').removeClass('first')
|
148 |
|
|
.filter(':visible:first').addClass('first');
|
149 |
|
|
|
150 |
|
|
this.fieldset.removeClass('vertical-tab-hidden');
|
151 |
|
|
|
152 |
|
|
this.focus();
|
153 |
|
|
return this;
|
154 |
|
|
},
|
155 |
|
|
|
156 |
|
|
|
157 |
|
|
|
158 |
|
|
|
159 |
|
|
tabHide: function () {
|
160 |
|
|
|
161 |
|
|
this.item.hide();
|
162 |
|
|
|
163 |
|
|
|
164 |
|
|
|
165 |
|
|
this.item.parent().children('.vertical-tab-button').removeClass('first')
|
166 |
|
|
.filter(':visible:first').addClass('first');
|
167 |
|
|
|
168 |
|
|
this.fieldset.addClass('vertical-tab-hidden');
|
169 |
|
|
|
170 |
|
|
var $firstTab = this.fieldset.siblings('.vertical-tabs-pane:not(.vertical-tab-hidden):first');
|
171 |
|
|
if ($firstTab.length) {
|
172 |
|
|
$firstTab.data('verticalTab').focus();
|
173 |
|
|
}
|
174 |
|
|
return this;
|
175 |
|
|
}
|
176 |
|
|
};
|
177 |
|
|
|
178 |
|
|
|
179 |
|
|
|
180 |
|
|
|
181 |
|
|
|
182 |
|
|
|
183 |
|
|
|
184 |
|
|
|
185 |
|
|
|
186 |
|
|
|
187 |
|
|
|
188 |
|
|
|
189 |
|
|
|
190 |
|
|
|
191 |
|
|
Drupal.theme.prototype.verticalTab = function (settings) {
|
192 |
|
|
var tab = {};
|
193 |
|
|
tab.item = $('<li class="vertical-tab-button" tabindex="-1"></li>')
|
194 |
|
|
.append(tab.link = $('<a href="#' + settings.fieldset[0].id + '" data-toggle="tab"></a>')
|
195 |
|
|
.append(tab.title = $('<span></span>').text(settings.title))
|
196 |
|
|
.append(tab.summary = $('<div class="summary"></div>')
|
197 |
|
|
)
|
198 |
|
|
);
|
199 |
|
|
return tab;
|
200 |
|
|
};
|
201 |
|
|
|
202 |
|
|
})(jQuery); |