bootstrap 5.0.0.alpha2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +7 -4
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +10 -7
- data/assets/javascripts/bootstrap.js +2554 -2564
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/javascripts/bootstrap/alert.js +119 -115
- data/assets/javascripts/bootstrap/base-component.js +63 -0
- data/assets/javascripts/bootstrap/button.js +67 -69
- data/assets/javascripts/bootstrap/carousel.js +340 -331
- data/assets/javascripts/bootstrap/collapse.js +214 -209
- data/assets/javascripts/bootstrap/dom/data.js +35 -48
- data/assets/javascripts/bootstrap/dom/event-handler.js +105 -98
- data/assets/javascripts/bootstrap/dom/manipulator.js +26 -34
- data/assets/javascripts/bootstrap/dom/selector-engine.js +28 -41
- data/assets/javascripts/bootstrap/dropdown.js +392 -325
- data/assets/javascripts/bootstrap/modal.js +492 -434
- data/assets/javascripts/bootstrap/offcanvas.js +671 -0
- data/assets/javascripts/bootstrap/popover.js +114 -132
- data/assets/javascripts/bootstrap/scrollspy.js +172 -180
- data/assets/javascripts/bootstrap/tab.js +168 -144
- data/assets/javascripts/bootstrap/toast.js +141 -150
- data/assets/javascripts/bootstrap/tooltip.js +466 -452
- data/assets/stylesheets/_bootstrap-grid.scss +9 -9
- data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
- data/assets/stylesheets/_bootstrap.scss +5 -3
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +10 -3
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +2 -4
- data/assets/stylesheets/bootstrap/_button-group.scss +5 -7
- data/assets/stylesheets/bootstrap/_buttons.scss +2 -15
- data/assets/stylesheets/bootstrap/_card.scss +2 -29
- data/assets/stylesheets/bootstrap/_carousel.scss +35 -18
- data/assets/stylesheets/bootstrap/_close.scss +2 -3
- data/assets/stylesheets/bootstrap/_dropdown.scss +33 -29
- data/assets/stylesheets/bootstrap/_forms.scss +1 -1
- data/assets/stylesheets/bootstrap/_functions.scss +11 -12
- data/assets/stylesheets/bootstrap/_list-group.scss +23 -6
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +2 -9
- data/assets/stylesheets/bootstrap/_nav.scss +12 -0
- data/assets/stylesheets/bootstrap/_navbar.scss +15 -2
- data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +3 -3
- data/assets/stylesheets/bootstrap/_popover.scss +10 -22
- data/assets/stylesheets/bootstrap/_progress.scss +4 -1
- data/assets/stylesheets/bootstrap/_reboot.scss +48 -44
- data/assets/stylesheets/bootstrap/_root.scss +5 -5
- data/assets/stylesheets/bootstrap/_spinners.scss +18 -5
- data/assets/stylesheets/bootstrap/_tables.scss +15 -16
- data/assets/stylesheets/bootstrap/_toasts.scss +15 -12
- data/assets/stylesheets/bootstrap/_tooltip.scss +12 -12
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +133 -70
- data/assets/stylesheets/bootstrap/_variables.scss +363 -207
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +5 -5
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +21 -11
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +112 -9
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -46
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -16
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +21 -40
- data/assets/stylesheets/bootstrap/forms/_validation.scss +1 -1
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -1
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -6
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +10 -5
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -6
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +2 -4
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +26 -22
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +5 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -13
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +5 -3
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +7 -7
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +19 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +3 -2
- data/assets/stylesheets/bootstrap/utilities/_api.scss +1 -1
- data/bootstrap.gemspec +1 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +20 -5
- data/tasks/updater/network.rb +7 -1
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
- data/test/dummy_rails/app/views/pages/root.html +89 -0
- data/test/dummy_rails/config/application.rb +0 -3
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- metadata +20 -40
- data/assets/javascripts/bootstrap/dom/polyfill.js +0 -110
- data/assets/stylesheets/bootstrap/forms/_form-file.scss +0 -91
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
|
@@ -1,57 +1,71 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap tab.js v5.0.0
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap tab.js v5.0.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
|
4
4
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js')) :
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['./dom/data
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Data, global.EventHandler, global.SelectorEngine));
|
|
10
|
-
}(this, (function (Data, EventHandler, SelectorEngine) { 'use strict';
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Data, global.EventHandler, global.SelectorEngine, global.Base));
|
|
10
|
+
}(this, (function (Data, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
11
11
|
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
13
|
|
|
14
14
|
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
|
15
15
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
16
16
|
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
17
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* --------------------------------------------------------------------------
|
|
20
|
-
* Bootstrap (v5.0.0
|
|
21
|
+
* Bootstrap (v5.0.0): util/index.js
|
|
21
22
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
22
23
|
* --------------------------------------------------------------------------
|
|
23
24
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
const MILLISECONDS_MULTIPLIER = 1000;
|
|
26
|
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
const getSelector = element => {
|
|
29
|
+
let selector = element.getAttribute('data-bs-target');
|
|
29
30
|
|
|
30
31
|
if (!selector || selector === '#') {
|
|
31
|
-
|
|
32
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
33
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
34
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
35
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
36
|
+
|
|
37
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
38
|
+
return null;
|
|
39
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
43
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
32
46
|
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
33
47
|
}
|
|
34
48
|
|
|
35
49
|
return selector;
|
|
36
50
|
};
|
|
37
51
|
|
|
38
|
-
|
|
39
|
-
|
|
52
|
+
const getElementFromSelector = element => {
|
|
53
|
+
const selector = getSelector(element);
|
|
40
54
|
return selector ? document.querySelector(selector) : null;
|
|
41
55
|
};
|
|
42
56
|
|
|
43
|
-
|
|
57
|
+
const getTransitionDurationFromElement = element => {
|
|
44
58
|
if (!element) {
|
|
45
59
|
return 0;
|
|
46
60
|
} // Get transition-duration of the element
|
|
47
61
|
|
|
48
62
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
let {
|
|
64
|
+
transitionDuration,
|
|
65
|
+
transitionDelay
|
|
66
|
+
} = window.getComputedStyle(element);
|
|
67
|
+
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
68
|
+
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
|
|
55
69
|
|
|
56
70
|
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
57
71
|
return 0;
|
|
@@ -60,17 +74,17 @@
|
|
|
60
74
|
|
|
61
75
|
transitionDuration = transitionDuration.split(',')[0];
|
|
62
76
|
transitionDelay = transitionDelay.split(',')[0];
|
|
63
|
-
return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
77
|
+
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
64
78
|
};
|
|
65
79
|
|
|
66
|
-
|
|
80
|
+
const triggerTransitionEnd = element => {
|
|
67
81
|
element.dispatchEvent(new Event(TRANSITION_END));
|
|
68
82
|
};
|
|
69
83
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
84
|
+
const emulateTransitionEnd = (element, duration) => {
|
|
85
|
+
let called = false;
|
|
86
|
+
const durationPadding = 5;
|
|
87
|
+
const emulatedDuration = duration + durationPadding;
|
|
74
88
|
|
|
75
89
|
function listener() {
|
|
76
90
|
called = true;
|
|
@@ -78,102 +92,134 @@
|
|
|
78
92
|
}
|
|
79
93
|
|
|
80
94
|
element.addEventListener(TRANSITION_END, listener);
|
|
81
|
-
setTimeout(
|
|
95
|
+
setTimeout(() => {
|
|
82
96
|
if (!called) {
|
|
83
97
|
triggerTransitionEnd(element);
|
|
84
98
|
}
|
|
85
99
|
}, emulatedDuration);
|
|
86
100
|
};
|
|
87
101
|
|
|
88
|
-
|
|
89
|
-
|
|
102
|
+
const isDisabled = element => {
|
|
103
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (element.classList.contains('disabled')) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (typeof element.disabled !== 'undefined') {
|
|
112
|
+
return element.disabled;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
90
116
|
};
|
|
91
117
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
118
|
+
const reflow = element => element.offsetHeight;
|
|
119
|
+
|
|
120
|
+
const getjQuery = () => {
|
|
121
|
+
const {
|
|
122
|
+
jQuery
|
|
123
|
+
} = window;
|
|
95
124
|
|
|
96
|
-
if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
|
|
125
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
97
126
|
return jQuery;
|
|
98
127
|
}
|
|
99
128
|
|
|
100
129
|
return null;
|
|
101
130
|
};
|
|
102
131
|
|
|
103
|
-
|
|
132
|
+
const onDOMContentLoaded = callback => {
|
|
133
|
+
if (document.readyState === 'loading') {
|
|
134
|
+
document.addEventListener('DOMContentLoaded', callback);
|
|
135
|
+
} else {
|
|
136
|
+
callback();
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const defineJQueryPlugin = (name, plugin) => {
|
|
141
|
+
onDOMContentLoaded(() => {
|
|
142
|
+
const $ = getjQuery();
|
|
143
|
+
/* istanbul ignore if */
|
|
144
|
+
|
|
145
|
+
if ($) {
|
|
146
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
147
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
148
|
+
$.fn[name].Constructor = plugin;
|
|
149
|
+
|
|
150
|
+
$.fn[name].noConflict = () => {
|
|
151
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
152
|
+
return plugin.jQueryInterface;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
};
|
|
104
157
|
|
|
105
|
-
|
|
158
|
+
/**
|
|
159
|
+
* --------------------------------------------------------------------------
|
|
160
|
+
* Bootstrap (v5.0.0): tab.js
|
|
161
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
162
|
+
* --------------------------------------------------------------------------
|
|
163
|
+
*/
|
|
106
164
|
/**
|
|
107
165
|
* ------------------------------------------------------------------------
|
|
108
166
|
* Constants
|
|
109
167
|
* ------------------------------------------------------------------------
|
|
110
168
|
*/
|
|
111
169
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
133
|
-
var SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
|
|
170
|
+
const NAME = 'tab';
|
|
171
|
+
const DATA_KEY = 'bs.tab';
|
|
172
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
173
|
+
const DATA_API_KEY = '.data-api';
|
|
174
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
175
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
176
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
177
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
178
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
179
|
+
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
|
|
180
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
181
|
+
const CLASS_NAME_FADE = 'fade';
|
|
182
|
+
const CLASS_NAME_SHOW = 'show';
|
|
183
|
+
const SELECTOR_DROPDOWN = '.dropdown';
|
|
184
|
+
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
185
|
+
const SELECTOR_ACTIVE = '.active';
|
|
186
|
+
const SELECTOR_ACTIVE_UL = ':scope > li > .active';
|
|
187
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
|
|
188
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
189
|
+
const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
|
|
134
190
|
/**
|
|
135
191
|
* ------------------------------------------------------------------------
|
|
136
192
|
* Class Definition
|
|
137
193
|
* ------------------------------------------------------------------------
|
|
138
194
|
*/
|
|
139
195
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
} //
|
|
145
|
-
|
|
196
|
+
class Tab extends BaseComponent__default['default'] {
|
|
197
|
+
// Getters
|
|
198
|
+
static get DATA_KEY() {
|
|
199
|
+
return DATA_KEY;
|
|
200
|
+
} // Public
|
|
146
201
|
|
|
147
|
-
var _proto = Tab.prototype;
|
|
148
202
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
var _this = this;
|
|
152
|
-
|
|
153
|
-
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE) || this._element.classList.contains(CLASS_NAME_DISABLED)) {
|
|
203
|
+
show() {
|
|
204
|
+
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
|
|
154
205
|
return;
|
|
155
206
|
}
|
|
156
207
|
|
|
157
|
-
|
|
158
|
-
|
|
208
|
+
let previous;
|
|
209
|
+
const target = getElementFromSelector(this._element);
|
|
159
210
|
|
|
160
|
-
|
|
211
|
+
const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
|
|
161
212
|
|
|
162
213
|
if (listElement) {
|
|
163
|
-
|
|
214
|
+
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
|
|
164
215
|
previous = SelectorEngine__default['default'].find(itemSelector, listElement);
|
|
165
216
|
previous = previous[previous.length - 1];
|
|
166
217
|
}
|
|
167
218
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
relatedTarget: this._element
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
|
|
219
|
+
const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
|
|
220
|
+
relatedTarget: this._element
|
|
221
|
+
}) : null;
|
|
222
|
+
const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
|
|
177
223
|
relatedTarget: previous
|
|
178
224
|
});
|
|
179
225
|
|
|
@@ -183,11 +229,11 @@
|
|
|
183
229
|
|
|
184
230
|
this._activate(this._element, listElement);
|
|
185
231
|
|
|
186
|
-
|
|
232
|
+
const complete = () => {
|
|
187
233
|
EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
|
|
188
|
-
relatedTarget:
|
|
234
|
+
relatedTarget: this._element
|
|
189
235
|
});
|
|
190
|
-
EventHandler__default['default'].trigger(
|
|
236
|
+
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
|
|
191
237
|
relatedTarget: previous
|
|
192
238
|
});
|
|
193
239
|
};
|
|
@@ -197,39 +243,30 @@
|
|
|
197
243
|
} else {
|
|
198
244
|
complete();
|
|
199
245
|
}
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
_proto.dispose = function dispose() {
|
|
203
|
-
Data__default['default'].removeData(this._element, DATA_KEY);
|
|
204
|
-
this._element = null;
|
|
205
246
|
} // Private
|
|
206
|
-
;
|
|
207
247
|
|
|
208
|
-
_proto._activate = function _activate(element, container, callback) {
|
|
209
|
-
var _this2 = this;
|
|
210
248
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
249
|
+
_activate(element, container, callback) {
|
|
250
|
+
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
|
|
251
|
+
const active = activeElements[0];
|
|
252
|
+
const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
|
|
214
253
|
|
|
215
|
-
|
|
216
|
-
return _this2._transitionComplete(element, active, callback);
|
|
217
|
-
};
|
|
254
|
+
const complete = () => this._transitionComplete(element, active, callback);
|
|
218
255
|
|
|
219
256
|
if (active && isTransitioning) {
|
|
220
|
-
|
|
257
|
+
const transitionDuration = getTransitionDurationFromElement(active);
|
|
221
258
|
active.classList.remove(CLASS_NAME_SHOW);
|
|
222
|
-
EventHandler__default['default'].one(active,
|
|
259
|
+
EventHandler__default['default'].one(active, 'transitionend', complete);
|
|
223
260
|
emulateTransitionEnd(active, transitionDuration);
|
|
224
261
|
} else {
|
|
225
262
|
complete();
|
|
226
263
|
}
|
|
227
|
-
}
|
|
264
|
+
}
|
|
228
265
|
|
|
229
|
-
|
|
266
|
+
_transitionComplete(element, active, callback) {
|
|
230
267
|
if (active) {
|
|
231
268
|
active.classList.remove(CLASS_NAME_ACTIVE);
|
|
232
|
-
|
|
269
|
+
const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
|
|
233
270
|
|
|
234
271
|
if (dropdownChild) {
|
|
235
272
|
dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
|
|
@@ -252,13 +289,17 @@
|
|
|
252
289
|
element.classList.add(CLASS_NAME_SHOW);
|
|
253
290
|
}
|
|
254
291
|
|
|
255
|
-
|
|
256
|
-
|
|
292
|
+
let parent = element.parentNode;
|
|
293
|
+
|
|
294
|
+
if (parent && parent.nodeName === 'LI') {
|
|
295
|
+
parent = parent.parentNode;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
|
|
299
|
+
const dropdownElement = element.closest(SELECTOR_DROPDOWN);
|
|
257
300
|
|
|
258
301
|
if (dropdownElement) {
|
|
259
|
-
SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE).forEach(
|
|
260
|
-
return dropdown.classList.add(CLASS_NAME_ACTIVE);
|
|
261
|
-
});
|
|
302
|
+
SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
|
|
262
303
|
}
|
|
263
304
|
|
|
264
305
|
element.setAttribute('aria-expanded', true);
|
|
@@ -268,35 +309,23 @@
|
|
|
268
309
|
callback();
|
|
269
310
|
}
|
|
270
311
|
} // Static
|
|
271
|
-
;
|
|
272
312
|
|
|
273
|
-
|
|
313
|
+
|
|
314
|
+
static jQueryInterface(config) {
|
|
274
315
|
return this.each(function () {
|
|
275
|
-
|
|
316
|
+
const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
|
|
276
317
|
|
|
277
318
|
if (typeof config === 'string') {
|
|
278
319
|
if (typeof data[config] === 'undefined') {
|
|
279
|
-
throw new TypeError(
|
|
320
|
+
throw new TypeError(`No method named "${config}"`);
|
|
280
321
|
}
|
|
281
322
|
|
|
282
323
|
data[config]();
|
|
283
324
|
}
|
|
284
325
|
});
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
Tab.getInstance = function getInstance(element) {
|
|
288
|
-
return Data__default['default'].getData(element, DATA_KEY);
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
_createClass(Tab, null, [{
|
|
292
|
-
key: "VERSION",
|
|
293
|
-
get: function get() {
|
|
294
|
-
return VERSION;
|
|
295
|
-
}
|
|
296
|
-
}]);
|
|
326
|
+
}
|
|
297
327
|
|
|
298
|
-
|
|
299
|
-
}();
|
|
328
|
+
}
|
|
300
329
|
/**
|
|
301
330
|
* ------------------------------------------------------------------------
|
|
302
331
|
* Data Api implementation
|
|
@@ -305,30 +334,25 @@
|
|
|
305
334
|
|
|
306
335
|
|
|
307
336
|
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
308
|
-
|
|
309
|
-
|
|
337
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
|
338
|
+
event.preventDefault();
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (isDisabled(this)) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
|
|
310
346
|
data.show();
|
|
311
347
|
});
|
|
312
|
-
var $ = getjQuery();
|
|
313
348
|
/**
|
|
314
349
|
* ------------------------------------------------------------------------
|
|
315
350
|
* jQuery
|
|
316
351
|
* ------------------------------------------------------------------------
|
|
317
|
-
* add .
|
|
352
|
+
* add .Tab to jQuery only if jQuery is present
|
|
318
353
|
*/
|
|
319
354
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
if ($) {
|
|
323
|
-
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
|
324
|
-
$.fn[NAME] = Tab.jQueryInterface;
|
|
325
|
-
$.fn[NAME].Constructor = Tab;
|
|
326
|
-
|
|
327
|
-
$.fn[NAME].noConflict = function () {
|
|
328
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
329
|
-
return Tab.jQueryInterface;
|
|
330
|
-
};
|
|
331
|
-
}
|
|
355
|
+
defineJQueryPlugin(NAME, Tab);
|
|
332
356
|
|
|
333
357
|
return Tab;
|
|
334
358
|
|