bootstrap 5.0.0.beta2 → 5.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/assets/javascripts/bootstrap-sprockets.js +8 -7
  4. data/assets/javascripts/bootstrap.js +2525 -2460
  5. data/assets/javascripts/bootstrap.min.js +2 -2
  6. data/assets/javascripts/bootstrap/alert.js +77 -179
  7. data/assets/javascripts/bootstrap/base-component.js +140 -38
  8. data/assets/javascripts/bootstrap/button.js +54 -100
  9. data/assets/javascripts/bootstrap/carousel.js +335 -451
  10. data/assets/javascripts/bootstrap/collapse.js +195 -303
  11. data/assets/javascripts/bootstrap/dom/data.js +34 -47
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +95 -90
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +23 -21
  14. data/assets/javascripts/bootstrap/dom/selector-engine.js +20 -28
  15. data/assets/javascripts/bootstrap/dropdown.js +323 -358
  16. data/assets/javascripts/bootstrap/modal.js +537 -489
  17. data/assets/javascripts/bootstrap/offcanvas.js +720 -0
  18. data/assets/javascripts/bootstrap/popover.js +112 -180
  19. data/assets/javascripts/bootstrap/scrollspy.js +167 -235
  20. data/assets/javascripts/bootstrap/tab.js +121 -188
  21. data/assets/javascripts/bootstrap/toast.js +166 -243
  22. data/assets/javascripts/bootstrap/tooltip.js +333 -495
  23. data/assets/stylesheets/_bootstrap-grid.scss +1 -1
  24. data/assets/stylesheets/_bootstrap-reboot.scss +1 -1
  25. data/assets/stylesheets/_bootstrap.scss +2 -1
  26. data/assets/stylesheets/bootstrap/_accordion.scss +24 -32
  27. data/assets/stylesheets/bootstrap/_buttons.scss +2 -0
  28. data/assets/stylesheets/bootstrap/_card.scss +6 -6
  29. data/assets/stylesheets/bootstrap/_carousel.scss +2 -2
  30. data/assets/stylesheets/bootstrap/_dropdown.scss +14 -23
  31. data/assets/stylesheets/bootstrap/_functions.scss +61 -3
  32. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  33. data/assets/stylesheets/bootstrap/_list-group.scss +16 -5
  34. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  35. data/assets/stylesheets/bootstrap/_modal.scss +8 -24
  36. data/assets/stylesheets/bootstrap/_nav.scss +7 -0
  37. data/assets/stylesheets/bootstrap/_navbar.scss +2 -0
  38. data/assets/stylesheets/bootstrap/_offcanvas.scss +79 -0
  39. data/assets/stylesheets/bootstrap/_popover.scss +10 -10
  40. data/assets/stylesheets/bootstrap/_progress.scss +3 -0
  41. data/assets/stylesheets/bootstrap/_reboot.scss +7 -21
  42. data/assets/stylesheets/bootstrap/_spinners.scss +6 -2
  43. data/assets/stylesheets/bootstrap/_tables.scss +1 -0
  44. data/assets/stylesheets/bootstrap/_toasts.scss +1 -1
  45. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
  46. data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
  47. data/assets/stylesheets/bootstrap/_utilities.scss +65 -37
  48. data/assets/stylesheets/bootstrap/_variables.scss +162 -50
  49. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
  50. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +3 -1
  51. data/assets/stylesheets/bootstrap/forms/_form-check.scss +1 -1
  52. data/assets/stylesheets/bootstrap/forms/_form-control.scss +0 -4
  53. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -1
  54. data/assets/stylesheets/bootstrap/forms/_form-select.scss +3 -0
  55. data/assets/stylesheets/bootstrap/mixins/_alert.scss +2 -0
  56. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +2 -0
  57. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +7 -2
  58. data/assets/stylesheets/bootstrap/mixins/_caret.scss +2 -0
  59. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  60. data/assets/stylesheets/bootstrap/mixins/_forms.scss +25 -5
  61. data/assets/stylesheets/bootstrap/mixins/_grid.scss +23 -11
  62. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
  63. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +2 -0
  64. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +55 -13
  65. data/bootstrap.gemspec +1 -1
  66. data/lib/bootstrap/version.rb +2 -2
  67. data/tasks/updater/js.rb +1 -1
  68. data/tasks/updater/network.rb +7 -1
  69. metadata +9 -6
@@ -1,67 +1,25 @@
1
1
  /*!
2
- * Bootstrap tab.js v5.0.0-beta2 (https://getbootstrap.com/)
2
+ * Bootstrap tab.js v5.0.2 (https://getbootstrap.com/)
3
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'), 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';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/event-handler', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.SelectorEngine, global.EventHandler, global.Base));
10
+ }(this, (function (SelectorEngine, EventHandler, BaseComponent) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
14
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
- var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
14
  var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
17
16
  var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
17
 
19
- function _defineProperties(target, props) {
20
- for (var i = 0; i < props.length; i++) {
21
- var descriptor = props[i];
22
- descriptor.enumerable = descriptor.enumerable || false;
23
- descriptor.configurable = true;
24
- if ("value" in descriptor) descriptor.writable = true;
25
- Object.defineProperty(target, descriptor.key, descriptor);
26
- }
27
- }
28
-
29
- function _createClass(Constructor, protoProps, staticProps) {
30
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
31
- if (staticProps) _defineProperties(Constructor, staticProps);
32
- return Constructor;
33
- }
34
-
35
- function _inheritsLoose(subClass, superClass) {
36
- subClass.prototype = Object.create(superClass.prototype);
37
- subClass.prototype.constructor = subClass;
38
-
39
- _setPrototypeOf(subClass, superClass);
40
- }
41
-
42
- function _setPrototypeOf(o, p) {
43
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
44
- o.__proto__ = p;
45
- return o;
46
- };
47
-
48
- return _setPrototypeOf(o, p);
49
- }
50
-
51
- /**
52
- * --------------------------------------------------------------------------
53
- * Bootstrap (v5.0.0-beta2): util/index.js
54
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
55
- * --------------------------------------------------------------------------
56
- */
57
- var MILLISECONDS_MULTIPLIER = 1000;
58
- var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
59
-
60
- var getSelector = function getSelector(element) {
61
- var selector = element.getAttribute('data-bs-target');
18
+ const getSelector = element => {
19
+ let selector = element.getAttribute('data-bs-target');
62
20
 
63
21
  if (!selector || selector === '#') {
64
- var hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
22
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
65
23
  // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
66
24
  // `document.querySelector` will rightfully complain it is invalid.
67
25
  // See https://github.com/twbs/bootstrap/issues/32273
@@ -72,7 +30,7 @@
72
30
 
73
31
 
74
32
  if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
75
- hrefAttr = '#' + hrefAttr.split('#')[1];
33
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
76
34
  }
77
35
 
78
36
  selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
@@ -81,63 +39,33 @@
81
39
  return selector;
82
40
  };
83
41
 
84
- var getElementFromSelector = function getElementFromSelector(element) {
85
- var selector = getSelector(element);
42
+ const getElementFromSelector = element => {
43
+ const selector = getSelector(element);
86
44
  return selector ? document.querySelector(selector) : null;
87
45
  };
88
46
 
89
- var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
90
- if (!element) {
91
- return 0;
92
- } // Get transition-duration of the element
93
-
94
-
95
- var _window$getComputedSt = window.getComputedStyle(element),
96
- transitionDuration = _window$getComputedSt.transitionDuration,
97
- transitionDelay = _window$getComputedSt.transitionDelay;
98
-
99
- var floatTransitionDuration = Number.parseFloat(transitionDuration);
100
- var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
101
-
102
- if (!floatTransitionDuration && !floatTransitionDelay) {
103
- return 0;
104
- } // If multiple durations are defined, take the first
105
-
106
-
107
- transitionDuration = transitionDuration.split(',')[0];
108
- transitionDelay = transitionDelay.split(',')[0];
109
- return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
110
- };
111
-
112
- var triggerTransitionEnd = function triggerTransitionEnd(element) {
113
- element.dispatchEvent(new Event(TRANSITION_END));
114
- };
47
+ const isDisabled = element => {
48
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
49
+ return true;
50
+ }
115
51
 
116
- var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
117
- var called = false;
118
- var durationPadding = 5;
119
- var emulatedDuration = duration + durationPadding;
52
+ if (element.classList.contains('disabled')) {
53
+ return true;
54
+ }
120
55
 
121
- function listener() {
122
- called = true;
123
- element.removeEventListener(TRANSITION_END, listener);
56
+ if (typeof element.disabled !== 'undefined') {
57
+ return element.disabled;
124
58
  }
125
59
 
126
- element.addEventListener(TRANSITION_END, listener);
127
- setTimeout(function () {
128
- if (!called) {
129
- triggerTransitionEnd(element);
130
- }
131
- }, emulatedDuration);
60
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
132
61
  };
133
62
 
134
- var reflow = function reflow(element) {
135
- return element.offsetHeight;
136
- };
63
+ const reflow = element => element.offsetHeight;
137
64
 
138
- var getjQuery = function getjQuery() {
139
- var _window = window,
140
- jQuery = _window.jQuery;
65
+ const getjQuery = () => {
66
+ const {
67
+ jQuery
68
+ } = window;
141
69
 
142
70
  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
143
71
  return jQuery;
@@ -146,27 +74,35 @@
146
74
  return null;
147
75
  };
148
76
 
149
- var onDOMContentLoaded = function onDOMContentLoaded(callback) {
77
+ const DOMContentLoadedCallbacks = [];
78
+
79
+ const onDOMContentLoaded = callback => {
150
80
  if (document.readyState === 'loading') {
151
- document.addEventListener('DOMContentLoaded', callback);
81
+ // add listener on the first call when the document is in loading state
82
+ if (!DOMContentLoadedCallbacks.length) {
83
+ document.addEventListener('DOMContentLoaded', () => {
84
+ DOMContentLoadedCallbacks.forEach(callback => callback());
85
+ });
86
+ }
87
+
88
+ DOMContentLoadedCallbacks.push(callback);
152
89
  } else {
153
90
  callback();
154
91
  }
155
92
  };
156
93
 
157
- document.documentElement.dir === 'rtl';
158
-
159
- var defineJQueryPlugin = function defineJQueryPlugin(name, plugin) {
160
- onDOMContentLoaded(function () {
161
- var $ = getjQuery();
94
+ const defineJQueryPlugin = plugin => {
95
+ onDOMContentLoaded(() => {
96
+ const $ = getjQuery();
162
97
  /* istanbul ignore if */
163
98
 
164
99
  if ($) {
165
- var JQUERY_NO_CONFLICT = $.fn[name];
100
+ const name = plugin.NAME;
101
+ const JQUERY_NO_CONFLICT = $.fn[name];
166
102
  $.fn[name] = plugin.jQueryInterface;
167
103
  $.fn[name].Constructor = plugin;
168
104
 
169
- $.fn[name].noConflict = function () {
105
+ $.fn[name].noConflict = () => {
170
106
  $.fn[name] = JQUERY_NO_CONFLICT;
171
107
  return plugin.jQueryInterface;
172
108
  };
@@ -174,71 +110,71 @@
174
110
  });
175
111
  };
176
112
 
113
+ /**
114
+ * --------------------------------------------------------------------------
115
+ * Bootstrap (v5.0.2): tab.js
116
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
117
+ * --------------------------------------------------------------------------
118
+ */
177
119
  /**
178
120
  * ------------------------------------------------------------------------
179
121
  * Constants
180
122
  * ------------------------------------------------------------------------
181
123
  */
182
124
 
183
- var NAME = 'tab';
184
- var DATA_KEY = 'bs.tab';
185
- var EVENT_KEY = "." + DATA_KEY;
186
- var DATA_API_KEY = '.data-api';
187
- var EVENT_HIDE = "hide" + EVENT_KEY;
188
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
189
- var EVENT_SHOW = "show" + EVENT_KEY;
190
- var EVENT_SHOWN = "shown" + EVENT_KEY;
191
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
192
- var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
193
- var CLASS_NAME_ACTIVE = 'active';
194
- var CLASS_NAME_DISABLED = 'disabled';
195
- var CLASS_NAME_FADE = 'fade';
196
- var CLASS_NAME_SHOW = 'show';
197
- var SELECTOR_DROPDOWN = '.dropdown';
198
- var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
199
- var SELECTOR_ACTIVE = '.active';
200
- var SELECTOR_ACTIVE_UL = ':scope > li > .active';
201
- var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
202
- var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
203
- var SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
125
+ const NAME = 'tab';
126
+ const DATA_KEY = 'bs.tab';
127
+ const EVENT_KEY = `.${DATA_KEY}`;
128
+ const DATA_API_KEY = '.data-api';
129
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
130
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
131
+ const EVENT_SHOW = `show${EVENT_KEY}`;
132
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
133
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
134
+ const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
135
+ const CLASS_NAME_ACTIVE = 'active';
136
+ const CLASS_NAME_FADE = 'fade';
137
+ const CLASS_NAME_SHOW = 'show';
138
+ const SELECTOR_DROPDOWN = '.dropdown';
139
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
140
+ const SELECTOR_ACTIVE = '.active';
141
+ const SELECTOR_ACTIVE_UL = ':scope > li > .active';
142
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
143
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
144
+ const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
204
145
  /**
205
146
  * ------------------------------------------------------------------------
206
147
  * Class Definition
207
148
  * ------------------------------------------------------------------------
208
149
  */
209
150
 
210
- var Tab = /*#__PURE__*/function (_BaseComponent) {
211
- _inheritsLoose(Tab, _BaseComponent);
212
-
213
- function Tab() {
214
- return _BaseComponent.apply(this, arguments) || this;
215
- }
216
-
217
- var _proto = Tab.prototype;
151
+ class Tab extends BaseComponent__default['default'] {
152
+ // Getters
153
+ static get NAME() {
154
+ return NAME;
155
+ } // Public
218
156
 
219
- // Public
220
- _proto.show = function show() {
221
- var _this = this;
222
157
 
223
- 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)) {
158
+ show() {
159
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
224
160
  return;
225
161
  }
226
162
 
227
- var previous;
228
- var target = getElementFromSelector(this._element);
163
+ let previous;
164
+ const target = getElementFromSelector(this._element);
229
165
 
230
- var listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
166
+ const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
231
167
 
232
168
  if (listElement) {
233
- var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
169
+ const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
234
170
  previous = SelectorEngine__default['default'].find(itemSelector, listElement);
235
171
  previous = previous[previous.length - 1];
236
172
  }
237
173
 
238
- var hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
174
+ const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
239
175
  relatedTarget: this._element
240
176
  }) : null;
241
- var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
177
+ const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
242
178
  relatedTarget: previous
243
179
  });
244
180
 
@@ -248,11 +184,11 @@
248
184
 
249
185
  this._activate(this._element, listElement);
250
186
 
251
- var complete = function complete() {
187
+ const complete = () => {
252
188
  EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
253
- relatedTarget: _this._element
189
+ relatedTarget: this._element
254
190
  });
255
- EventHandler__default['default'].trigger(_this._element, EVENT_SHOWN, {
191
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
256
192
  relatedTarget: previous
257
193
  });
258
194
  };
@@ -263,33 +199,28 @@
263
199
  complete();
264
200
  }
265
201
  } // Private
266
- ;
267
202
 
268
- _proto._activate = function _activate(element, container, callback) {
269
- var _this2 = this;
270
203
 
271
- var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
272
- var active = activeElements[0];
273
- var isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
204
+ _activate(element, container, callback) {
205
+ const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
206
+ const active = activeElements[0];
207
+ const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
274
208
 
275
- var complete = function complete() {
276
- return _this2._transitionComplete(element, active, callback);
277
- };
209
+ const complete = () => this._transitionComplete(element, active, callback);
278
210
 
279
211
  if (active && isTransitioning) {
280
- var transitionDuration = getTransitionDurationFromElement(active);
281
212
  active.classList.remove(CLASS_NAME_SHOW);
282
- EventHandler__default['default'].one(active, 'transitionend', complete);
283
- emulateTransitionEnd(active, transitionDuration);
213
+
214
+ this._queueCallback(complete, element, true);
284
215
  } else {
285
216
  complete();
286
217
  }
287
- };
218
+ }
288
219
 
289
- _proto._transitionComplete = function _transitionComplete(element, active, callback) {
220
+ _transitionComplete(element, active, callback) {
290
221
  if (active) {
291
222
  active.classList.remove(CLASS_NAME_ACTIVE);
292
- var dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
223
+ const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
293
224
 
294
225
  if (dropdownChild) {
295
226
  dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
@@ -312,13 +243,17 @@
312
243
  element.classList.add(CLASS_NAME_SHOW);
313
244
  }
314
245
 
315
- if (element.parentNode && element.parentNode.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
316
- var dropdownElement = element.closest(SELECTOR_DROPDOWN);
246
+ let parent = element.parentNode;
247
+
248
+ if (parent && parent.nodeName === 'LI') {
249
+ parent = parent.parentNode;
250
+ }
251
+
252
+ if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
253
+ const dropdownElement = element.closest(SELECTOR_DROPDOWN);
317
254
 
318
255
  if (dropdownElement) {
319
- SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE).forEach(function (dropdown) {
320
- return dropdown.classList.add(CLASS_NAME_ACTIVE);
321
- });
256
+ SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
322
257
  }
323
258
 
324
259
  element.setAttribute('aria-expanded', true);
@@ -328,32 +263,23 @@
328
263
  callback();
329
264
  }
330
265
  } // Static
331
- ;
332
266
 
333
- Tab.jQueryInterface = function jQueryInterface(config) {
267
+
268
+ static jQueryInterface(config) {
334
269
  return this.each(function () {
335
- var data = Data__default['default'].getData(this, DATA_KEY) || new Tab(this);
270
+ const data = Tab.getOrCreateInstance(this);
336
271
 
337
272
  if (typeof config === 'string') {
338
273
  if (typeof data[config] === 'undefined') {
339
- throw new TypeError("No method named \"" + config + "\"");
274
+ throw new TypeError(`No method named "${config}"`);
340
275
  }
341
276
 
342
277
  data[config]();
343
278
  }
344
279
  });
345
- };
346
-
347
- _createClass(Tab, null, [{
348
- key: "DATA_KEY",
349
- get: // Getters
350
- function get() {
351
- return DATA_KEY;
352
- }
353
- }]);
280
+ }
354
281
 
355
- return Tab;
356
- }(BaseComponent__default['default']);
282
+ }
357
283
  /**
358
284
  * ------------------------------------------------------------------------
359
285
  * Data Api implementation
@@ -362,8 +288,15 @@
362
288
 
363
289
 
364
290
  EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
365
- event.preventDefault();
366
- var data = Data__default['default'].getData(this, DATA_KEY) || new Tab(this);
291
+ if (['A', 'AREA'].includes(this.tagName)) {
292
+ event.preventDefault();
293
+ }
294
+
295
+ if (isDisabled(this)) {
296
+ return;
297
+ }
298
+
299
+ const data = Tab.getOrCreateInstance(this);
367
300
  data.show();
368
301
  });
369
302
  /**
@@ -373,7 +306,7 @@
373
306
  * add .Tab to jQuery only if jQuery is present
374
307
  */
375
308
 
376
- defineJQueryPlugin(NAME, Tab);
309
+ defineJQueryPlugin(Tab);
377
310
 
378
311
  return Tab;
379
312