]>
Commit | Line | Data |
---|---|---|
91e44d91 S |
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 |