]> git.ipfire.org Git - ipfire.org.git/blob - src/scss/bootstrap-4.0.0-alpha.6/js/dist/tab.js
.gitignore: Add .vscode
[ipfire.org.git] / src / scss / bootstrap-4.0.0-alpha.6 / js / dist / tab.js
1 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
2
3 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4
5 /**
6 * --------------------------------------------------------------------------
7 * Bootstrap (v4.0.0-alpha.6): tab.js
8 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
9 * --------------------------------------------------------------------------
10 */
11
12 var Tab = function ($) {
13
14 /**
15 * ------------------------------------------------------------------------
16 * Constants
17 * ------------------------------------------------------------------------
18 */
19
20 var NAME = 'tab';
21 var VERSION = '4.0.0-alpha.6';
22 var DATA_KEY = 'bs.tab';
23 var EVENT_KEY = '.' + DATA_KEY;
24 var DATA_API_KEY = '.data-api';
25 var JQUERY_NO_CONFLICT = $.fn[NAME];
26 var TRANSITION_DURATION = 150;
27
28 var Event = {
29 HIDE: 'hide' + EVENT_KEY,
30 HIDDEN: 'hidden' + EVENT_KEY,
31 SHOW: 'show' + EVENT_KEY,
32 SHOWN: 'shown' + EVENT_KEY,
33 CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
34 };
35
36 var ClassName = {
37 DROPDOWN_MENU: 'dropdown-menu',
38 ACTIVE: 'active',
39 DISABLED: 'disabled',
40 FADE: 'fade',
41 SHOW: 'show'
42 };
43
44 var Selector = {
45 A: 'a',
46 LI: 'li',
47 DROPDOWN: '.dropdown',
48 LIST: 'ul:not(.dropdown-menu), ol:not(.dropdown-menu), nav:not(.dropdown-menu)',
49 FADE_CHILD: '> .nav-item .fade, > .fade',
50 ACTIVE: '.active',
51 ACTIVE_CHILD: '> .nav-item > .active, > .active',
52 DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]',
53 DROPDOWN_TOGGLE: '.dropdown-toggle',
54 DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
55 };
56
57 /**
58 * ------------------------------------------------------------------------
59 * Class Definition
60 * ------------------------------------------------------------------------
61 */
62
63 var Tab = function () {
64 function Tab(element) {
65 _classCallCheck(this, Tab);
66
67 this._element = element;
68 }
69
70 // getters
71
72 // public
73
74 Tab.prototype.show = function show() {
75 var _this = this;
76
77 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
78 return;
79 }
80
81 var target = void 0;
82 var previous = void 0;
83 var listElement = $(this._element).closest(Selector.LIST)[0];
84 var selector = Util.getSelectorFromElement(this._element);
85
86 if (listElement) {
87 previous = $.makeArray($(listElement).find(Selector.ACTIVE));
88 previous = previous[previous.length - 1];
89 }
90
91 var hideEvent = $.Event(Event.HIDE, {
92 relatedTarget: this._element
93 });
94
95 var showEvent = $.Event(Event.SHOW, {
96 relatedTarget: previous
97 });
98
99 if (previous) {
100 $(previous).trigger(hideEvent);
101 }
102
103 $(this._element).trigger(showEvent);
104
105 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
106 return;
107 }
108
109 if (selector) {
110 target = $(selector)[0];
111 }
112
113 this._activate(this._element, listElement);
114
115 var complete = function complete() {
116 var hiddenEvent = $.Event(Event.HIDDEN, {
117 relatedTarget: _this._element
118 });
119
120 var shownEvent = $.Event(Event.SHOWN, {
121 relatedTarget: previous
122 });
123
124 $(previous).trigger(hiddenEvent);
125 $(_this._element).trigger(shownEvent);
126 };
127
128 if (target) {
129 this._activate(target, target.parentNode, complete);
130 } else {
131 complete();
132 }
133 };
134
135 Tab.prototype.dispose = function dispose() {
136 $.removeClass(this._element, DATA_KEY);
137 this._element = null;
138 };
139
140 // private
141
142 Tab.prototype._activate = function _activate(element, container, callback) {
143 var _this2 = this;
144
145 var active = $(container).find(Selector.ACTIVE_CHILD)[0];
146 var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0]));
147
148 var complete = function complete() {
149 return _this2._transitionComplete(element, active, isTransitioning, callback);
150 };
151
152 if (active && isTransitioning) {
153 $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
154 } else {
155 complete();
156 }
157
158 if (active) {
159 $(active).removeClass(ClassName.SHOW);
160 }
161 };
162
163 Tab.prototype._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) {
164 if (active) {
165 $(active).removeClass(ClassName.ACTIVE);
166
167 var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
168
169 if (dropdownChild) {
170 $(dropdownChild).removeClass(ClassName.ACTIVE);
171 }
172
173 active.setAttribute('aria-expanded', false);
174 }
175
176 $(element).addClass(ClassName.ACTIVE);
177 element.setAttribute('aria-expanded', true);
178
179 if (isTransitioning) {
180 Util.reflow(element);
181 $(element).addClass(ClassName.SHOW);
182 } else {
183 $(element).removeClass(ClassName.FADE);
184 }
185
186 if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
187
188 var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
189 if (dropdownElement) {
190 $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
191 }
192
193 element.setAttribute('aria-expanded', true);
194 }
195
196 if (callback) {
197 callback();
198 }
199 };
200
201 // static
202
203 Tab._jQueryInterface = function _jQueryInterface(config) {
204 return this.each(function () {
205 var $this = $(this);
206 var data = $this.data(DATA_KEY);
207
208 if (!data) {
209 data = new Tab(this);
210 $this.data(DATA_KEY, data);
211 }
212
213 if (typeof config === 'string') {
214 if (data[config] === undefined) {
215 throw new Error('No method named "' + config + '"');
216 }
217 data[config]();
218 }
219 });
220 };
221
222 _createClass(Tab, null, [{
223 key: 'VERSION',
224 get: function get() {
225 return VERSION;
226 }
227 }]);
228
229 return Tab;
230 }();
231
232 /**
233 * ------------------------------------------------------------------------
234 * Data Api implementation
235 * ------------------------------------------------------------------------
236 */
237
238 $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
239 event.preventDefault();
240 Tab._jQueryInterface.call($(this), 'show');
241 });
242
243 /**
244 * ------------------------------------------------------------------------
245 * jQuery
246 * ------------------------------------------------------------------------
247 */
248
249 $.fn[NAME] = Tab._jQueryInterface;
250 $.fn[NAME].Constructor = Tab;
251 $.fn[NAME].noConflict = function () {
252 $.fn[NAME] = JQUERY_NO_CONFLICT;
253 return Tab._jQueryInterface;
254 };
255
256 return Tab;
257 }(jQuery);
258 //# sourceMappingURL=tab.js.map