bootstrap 4.3.0 → 5.1.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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +17 -2
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +7 -4
  5. data/assets/javascripts/bootstrap/alert.js +173 -137
  6. data/assets/javascripts/bootstrap/base-component.js +182 -0
  7. data/assets/javascripts/bootstrap/button.js +102 -143
  8. data/assets/javascripts/bootstrap/carousel.js +481 -410
  9. data/assets/javascripts/bootstrap/collapse.js +340 -274
  10. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  11. data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
  12. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  13. data/assets/javascripts/bootstrap/dom/selector-engine.js +127 -0
  14. data/assets/javascripts/bootstrap/dropdown.js +494 -400
  15. data/assets/javascripts/bootstrap/modal.js +834 -450
  16. data/assets/javascripts/bootstrap/offcanvas.js +866 -0
  17. data/assets/javascripts/bootstrap/popover.js +122 -199
  18. data/assets/javascripts/bootstrap/scrollspy.js +257 -241
  19. data/assets/javascripts/bootstrap/tab.js +219 -155
  20. data/assets/javascripts/bootstrap/toast.js +330 -190
  21. data/assets/javascripts/bootstrap/tooltip.js +710 -472
  22. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  23. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  24. data/assets/javascripts/bootstrap-sprockets.js +8 -1
  25. data/assets/javascripts/bootstrap.js +3547 -2809
  26. data/assets/javascripts/bootstrap.min.js +4 -4
  27. data/assets/stylesheets/_bootstrap-grid.scss +54 -18
  28. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  29. data/assets/stylesheets/_bootstrap.scss +20 -11
  30. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  31. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  32. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  33. data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
  34. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  35. data/assets/stylesheets/bootstrap/_buttons.scss +28 -54
  36. data/assets/stylesheets/bootstrap/_card.scss +52 -125
  37. data/assets/stylesheets/bootstrap/_carousel.scss +70 -38
  38. data/assets/stylesheets/bootstrap/_close.scss +30 -31
  39. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  40. data/assets/stylesheets/bootstrap/_dropdown.scss +88 -39
  41. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  42. data/assets/stylesheets/bootstrap/_functions.scss +237 -27
  43. data/assets/stylesheets/bootstrap/_grid.scss +14 -33
  44. data/assets/stylesheets/bootstrap/_helpers.scss +9 -0
  45. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  46. data/assets/stylesheets/bootstrap/_list-group.scss +61 -36
  47. data/assets/stylesheets/bootstrap/_mixins.scss +12 -16
  48. data/assets/stylesheets/bootstrap/_modal.scss +64 -84
  49. data/assets/stylesheets/bootstrap/_nav.scss +29 -10
  50. data/assets/stylesheets/bootstrap/_navbar.scss +93 -52
  51. data/assets/stylesheets/bootstrap/_offcanvas.scss +83 -0
  52. data/assets/stylesheets/bootstrap/_pagination.scss +13 -22
  53. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  54. data/assets/stylesheets/bootstrap/_popover.scss +29 -42
  55. data/assets/stylesheets/bootstrap/_progress.scss +10 -5
  56. data/assets/stylesheets/bootstrap/_reboot.scss +350 -208
  57. data/assets/stylesheets/bootstrap/_root.scss +42 -8
  58. data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
  59. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  60. data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +21 -21
  62. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  63. data/assets/stylesheets/bootstrap/_type.scss +40 -61
  64. data/assets/stylesheets/bootstrap/_utilities.scss +630 -17
  65. data/assets/stylesheets/bootstrap/_variables.scss +993 -487
  66. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  67. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +63 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  70. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  71. data/assets/stylesheets/bootstrap/forms/_form-select.scss +70 -0
  72. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  74. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  75. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  76. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  77. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  78. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  79. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  80. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  81. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  82. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  83. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  84. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  85. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  86. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  87. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  88. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  89. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  90. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -51
  91. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  92. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  93. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  94. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  95. data/assets/stylesheets/bootstrap/mixins/_forms.scss +67 -115
  96. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  97. data/assets/stylesheets/bootstrap/mixins/_grid.scss +131 -32
  98. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  99. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  100. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  101. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  102. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  103. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  104. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +89 -0
  105. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  106. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  107. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +274 -132
  108. data/bootstrap.gemspec +4 -6
  109. data/lib/bootstrap/version.rb +2 -2
  110. data/tasks/updater/js.rb +25 -6
  111. data/tasks/updater/network.rb +8 -2
  112. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  113. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  114. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  115. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  116. data/test/dummy_rails/app/views/pages/root.html +89 -0
  117. data/test/dummy_rails/config/application.rb +0 -3
  118. data/test/gemfiles/rails_6_0.gemfile +7 -0
  119. data/test/gemfiles/rails_6_1.gemfile +7 -0
  120. data/test/support/dummy_rails_integration.rb +3 -1
  121. data/test/test_helper.rb +18 -13
  122. metadata +61 -79
  123. data/assets/javascripts/bootstrap/util.js +0 -171
  124. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  125. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  126. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  127. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  128. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  129. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  130. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  131. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  132. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  133. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  134. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  135. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  136. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
  137. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  138. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  139. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  140. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  141. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  142. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  143. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  144. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  145. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  146. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  147. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  148. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  149. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  150. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  151. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  152. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  153. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  154. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  155. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  156. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  157. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  158. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,136 +1,215 @@
1
1
  /*!
2
- * Bootstrap tab.js v4.3.0 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2
+ * Bootstrap tab.js v5.1.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
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('jquery'), require('./util.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
9
- (global = global || self, global.Tab = factory(global.jQuery, global.Util));
10
- }(this, function ($, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
14
-
15
- function _defineProperties(target, props) {
16
- for (var i = 0; i < props.length; i++) {
17
- var descriptor = props[i];
18
- descriptor.enumerable = descriptor.enumerable || false;
19
- descriptor.configurable = true;
20
- if ("value" in descriptor) descriptor.writable = true;
21
- Object.defineProperty(target, descriptor.key, descriptor);
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.EventHandler, global.SelectorEngine, global.Base));
10
+ }(this, (function (EventHandler, SelectorEngine, BaseComponent) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
16
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
17
+
18
+ /**
19
+ * --------------------------------------------------------------------------
20
+ * Bootstrap (v5.1.0): util/index.js
21
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
22
+ * --------------------------------------------------------------------------
23
+ */
24
+
25
+ const getSelector = element => {
26
+ let selector = element.getAttribute('data-bs-target');
27
+
28
+ if (!selector || selector === '#') {
29
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
30
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
31
+ // `document.querySelector` will rightfully complain it is invalid.
32
+ // See https://github.com/twbs/bootstrap/issues/32273
33
+
34
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
35
+ return null;
36
+ } // Just in case some CMS puts out a full URL with the anchor appended
37
+
38
+
39
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
40
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
41
+ }
42
+
43
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
22
44
  }
23
- }
24
45
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
46
+ return selector;
47
+ };
30
48
 
49
+ const getElementFromSelector = element => {
50
+ const selector = getSelector(element);
51
+ return selector ? document.querySelector(selector) : null;
52
+ };
53
+
54
+ const isDisabled = element => {
55
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
56
+ return true;
57
+ }
58
+
59
+ if (element.classList.contains('disabled')) {
60
+ return true;
61
+ }
62
+
63
+ if (typeof element.disabled !== 'undefined') {
64
+ return element.disabled;
65
+ }
66
+
67
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
68
+ };
31
69
  /**
32
- * ------------------------------------------------------------------------
33
- * Constants
34
- * ------------------------------------------------------------------------
70
+ * Trick to restart an element's animation
71
+ *
72
+ * @param {HTMLElement} element
73
+ * @return void
74
+ *
75
+ * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
35
76
  */
36
77
 
37
- var NAME = 'tab';
38
- var VERSION = '4.3.0';
39
- var DATA_KEY = 'bs.tab';
40
- var EVENT_KEY = "." + DATA_KEY;
41
- var DATA_API_KEY = '.data-api';
42
- var JQUERY_NO_CONFLICT = $.fn[NAME];
43
- var Event = {
44
- HIDE: "hide" + EVENT_KEY,
45
- HIDDEN: "hidden" + EVENT_KEY,
46
- SHOW: "show" + EVENT_KEY,
47
- SHOWN: "shown" + EVENT_KEY,
48
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
78
+
79
+ const reflow = element => {
80
+ // eslint-disable-next-line no-unused-expressions
81
+ element.offsetHeight;
49
82
  };
50
- var ClassName = {
51
- DROPDOWN_MENU: 'dropdown-menu',
52
- ACTIVE: 'active',
53
- DISABLED: 'disabled',
54
- FADE: 'fade',
55
- SHOW: 'show'
83
+
84
+ const getjQuery = () => {
85
+ const {
86
+ jQuery
87
+ } = window;
88
+
89
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
90
+ return jQuery;
91
+ }
92
+
93
+ return null;
56
94
  };
57
- var Selector = {
58
- DROPDOWN: '.dropdown',
59
- NAV_LIST_GROUP: '.nav, .list-group',
60
- ACTIVE: '.active',
61
- ACTIVE_UL: '> li > .active',
62
- DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
63
- DROPDOWN_TOGGLE: '.dropdown-toggle',
64
- DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
65
- /**
66
- * ------------------------------------------------------------------------
67
- * Class Definition
68
- * ------------------------------------------------------------------------
69
- */
70
95
 
96
+ const DOMContentLoadedCallbacks = [];
97
+
98
+ const onDOMContentLoaded = callback => {
99
+ if (document.readyState === 'loading') {
100
+ // add listener on the first call when the document is in loading state
101
+ if (!DOMContentLoadedCallbacks.length) {
102
+ document.addEventListener('DOMContentLoaded', () => {
103
+ DOMContentLoadedCallbacks.forEach(callback => callback());
104
+ });
105
+ }
106
+
107
+ DOMContentLoadedCallbacks.push(callback);
108
+ } else {
109
+ callback();
110
+ }
71
111
  };
72
112
 
73
- var Tab =
74
- /*#__PURE__*/
75
- function () {
76
- function Tab(element) {
77
- this._element = element;
78
- } // Getters
113
+ const defineJQueryPlugin = plugin => {
114
+ onDOMContentLoaded(() => {
115
+ const $ = getjQuery();
116
+ /* istanbul ignore if */
117
+
118
+ if ($) {
119
+ const name = plugin.NAME;
120
+ const JQUERY_NO_CONFLICT = $.fn[name];
121
+ $.fn[name] = plugin.jQueryInterface;
122
+ $.fn[name].Constructor = plugin;
123
+
124
+ $.fn[name].noConflict = () => {
125
+ $.fn[name] = JQUERY_NO_CONFLICT;
126
+ return plugin.jQueryInterface;
127
+ };
128
+ }
129
+ });
130
+ };
79
131
 
132
+ /**
133
+ * --------------------------------------------------------------------------
134
+ * Bootstrap (v5.1.0): tab.js
135
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
136
+ * --------------------------------------------------------------------------
137
+ */
138
+ /**
139
+ * ------------------------------------------------------------------------
140
+ * Constants
141
+ * ------------------------------------------------------------------------
142
+ */
80
143
 
81
- var _proto = Tab.prototype;
144
+ const NAME = 'tab';
145
+ const DATA_KEY = 'bs.tab';
146
+ const EVENT_KEY = `.${DATA_KEY}`;
147
+ const DATA_API_KEY = '.data-api';
148
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
149
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
150
+ const EVENT_SHOW = `show${EVENT_KEY}`;
151
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
152
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
153
+ const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
154
+ const CLASS_NAME_ACTIVE = 'active';
155
+ const CLASS_NAME_FADE = 'fade';
156
+ const CLASS_NAME_SHOW = 'show';
157
+ const SELECTOR_DROPDOWN = '.dropdown';
158
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
159
+ const SELECTOR_ACTIVE = '.active';
160
+ const SELECTOR_ACTIVE_UL = ':scope > li > .active';
161
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
162
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
163
+ const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
164
+ /**
165
+ * ------------------------------------------------------------------------
166
+ * Class Definition
167
+ * ------------------------------------------------------------------------
168
+ */
169
+
170
+ class Tab extends BaseComponent__default['default'] {
171
+ // Getters
172
+ static get NAME() {
173
+ return NAME;
174
+ } // Public
82
175
 
83
- // Public
84
- _proto.show = function show() {
85
- var _this = this;
86
176
 
87
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
177
+ show() {
178
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
88
179
  return;
89
180
  }
90
181
 
91
- var target;
92
- var previous;
93
- var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];
94
- var selector = Util.getSelectorFromElement(this._element);
182
+ let previous;
183
+ const target = getElementFromSelector(this._element);
184
+
185
+ const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
95
186
 
96
187
  if (listElement) {
97
- var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE;
98
- previous = $.makeArray($(listElement).find(itemSelector));
188
+ const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
189
+ previous = SelectorEngine__default['default'].find(itemSelector, listElement);
99
190
  previous = previous[previous.length - 1];
100
191
  }
101
192
 
102
- var hideEvent = $.Event(Event.HIDE, {
193
+ const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
103
194
  relatedTarget: this._element
104
- });
105
- var showEvent = $.Event(Event.SHOW, {
195
+ }) : null;
196
+ const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
106
197
  relatedTarget: previous
107
198
  });
108
199
 
109
- if (previous) {
110
- $(previous).trigger(hideEvent);
111
- }
112
-
113
- $(this._element).trigger(showEvent);
114
-
115
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
200
+ if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
116
201
  return;
117
202
  }
118
203
 
119
- if (selector) {
120
- target = document.querySelector(selector);
121
- }
122
-
123
204
  this._activate(this._element, listElement);
124
205
 
125
- var complete = function complete() {
126
- var hiddenEvent = $.Event(Event.HIDDEN, {
127
- relatedTarget: _this._element
206
+ const complete = () => {
207
+ EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
208
+ relatedTarget: this._element
128
209
  });
129
- var shownEvent = $.Event(Event.SHOWN, {
210
+ EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
130
211
  relatedTarget: previous
131
212
  });
132
- $(previous).trigger(hiddenEvent);
133
- $(_this._element).trigger(shownEvent);
134
213
  };
135
214
 
136
215
  if (target) {
@@ -138,40 +217,32 @@
138
217
  } else {
139
218
  complete();
140
219
  }
141
- };
142
-
143
- _proto.dispose = function dispose() {
144
- $.removeData(this._element, DATA_KEY);
145
- this._element = null;
146
220
  } // Private
147
- ;
148
221
 
149
- _proto._activate = function _activate(element, container, callback) {
150
- var _this2 = this;
151
222
 
152
- var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector.ACTIVE_UL) : $(container).children(Selector.ACTIVE);
153
- var active = activeElements[0];
154
- var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);
223
+ _activate(element, container, callback) {
224
+ const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
225
+ const active = activeElements[0];
226
+ const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
155
227
 
156
- var complete = function complete() {
157
- return _this2._transitionComplete(element, active, callback);
158
- };
228
+ const complete = () => this._transitionComplete(element, active, callback);
159
229
 
160
230
  if (active && isTransitioning) {
161
- var transitionDuration = Util.getTransitionDurationFromElement(active);
162
- $(active).removeClass(ClassName.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
231
+ active.classList.remove(CLASS_NAME_SHOW);
232
+
233
+ this._queueCallback(complete, element, true);
163
234
  } else {
164
235
  complete();
165
236
  }
166
- };
237
+ }
167
238
 
168
- _proto._transitionComplete = function _transitionComplete(element, active, callback) {
239
+ _transitionComplete(element, active, callback) {
169
240
  if (active) {
170
- $(active).removeClass(ClassName.ACTIVE);
171
- var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
241
+ active.classList.remove(CLASS_NAME_ACTIVE);
242
+ const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
172
243
 
173
244
  if (dropdownChild) {
174
- $(dropdownChild).removeClass(ClassName.ACTIVE);
245
+ dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
175
246
  }
176
247
 
177
248
  if (active.getAttribute('role') === 'tab') {
@@ -179,24 +250,29 @@
179
250
  }
180
251
  }
181
252
 
182
- $(element).addClass(ClassName.ACTIVE);
253
+ element.classList.add(CLASS_NAME_ACTIVE);
183
254
 
184
255
  if (element.getAttribute('role') === 'tab') {
185
256
  element.setAttribute('aria-selected', true);
186
257
  }
187
258
 
188
- Util.reflow(element);
259
+ reflow(element);
260
+
261
+ if (element.classList.contains(CLASS_NAME_FADE)) {
262
+ element.classList.add(CLASS_NAME_SHOW);
263
+ }
264
+
265
+ let parent = element.parentNode;
189
266
 
190
- if (element.classList.contains(ClassName.FADE)) {
191
- element.classList.add(ClassName.SHOW);
267
+ if (parent && parent.nodeName === 'LI') {
268
+ parent = parent.parentNode;
192
269
  }
193
270
 
194
- if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
195
- var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
271
+ if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
272
+ const dropdownElement = element.closest(SELECTOR_DROPDOWN);
196
273
 
197
274
  if (dropdownElement) {
198
- var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));
199
- $(dropdownToggleList).addClass(ClassName.ACTIVE);
275
+ SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
200
276
  }
201
277
 
202
278
  element.setAttribute('aria-expanded', true);
@@ -206,37 +282,23 @@
206
282
  callback();
207
283
  }
208
284
  } // Static
209
- ;
210
285
 
211
- Tab._jQueryInterface = function _jQueryInterface(config) {
212
- return this.each(function () {
213
- var $this = $(this);
214
- var data = $this.data(DATA_KEY);
215
286
 
216
- if (!data) {
217
- data = new Tab(this);
218
- $this.data(DATA_KEY, data);
219
- }
287
+ static jQueryInterface(config) {
288
+ return this.each(function () {
289
+ const data = Tab.getOrCreateInstance(this);
220
290
 
221
291
  if (typeof config === 'string') {
222
292
  if (typeof data[config] === 'undefined') {
223
- throw new TypeError("No method named \"" + config + "\"");
293
+ throw new TypeError(`No method named "${config}"`);
224
294
  }
225
295
 
226
296
  data[config]();
227
297
  }
228
298
  });
229
- };
230
-
231
- _createClass(Tab, null, [{
232
- key: "VERSION",
233
- get: function get() {
234
- return VERSION;
235
- }
236
- }]);
299
+ }
237
300
 
238
- return Tab;
239
- }();
301
+ }
240
302
  /**
241
303
  * ------------------------------------------------------------------------
242
304
  * Data Api implementation
@@ -244,25 +306,27 @@
244
306
  */
245
307
 
246
308
 
247
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
248
- event.preventDefault();
309
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
310
+ if (['A', 'AREA'].includes(this.tagName)) {
311
+ event.preventDefault();
312
+ }
249
313
 
250
- Tab._jQueryInterface.call($(this), 'show');
314
+ if (isDisabled(this)) {
315
+ return;
316
+ }
317
+
318
+ const data = Tab.getOrCreateInstance(this);
319
+ data.show();
251
320
  });
252
321
  /**
253
322
  * ------------------------------------------------------------------------
254
323
  * jQuery
255
324
  * ------------------------------------------------------------------------
325
+ * add .Tab to jQuery only if jQuery is present
256
326
  */
257
327
 
258
- $.fn[NAME] = Tab._jQueryInterface;
259
- $.fn[NAME].Constructor = Tab;
260
-
261
- $.fn[NAME].noConflict = function () {
262
- $.fn[NAME] = JQUERY_NO_CONFLICT;
263
- return Tab._jQueryInterface;
264
- };
328
+ defineJQueryPlugin(Tab);
265
329
 
266
330
  return Tab;
267
331
 
268
- }));
332
+ })));