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,260 +1,183 @@
1
1
  /*!
2
- * Bootstrap popover.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 popover.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('./tooltip.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', './tooltip.js'], factory) :
9
- (global = global || self, global.Popover = factory(global.jQuery, global.Tooltip));
10
- }(this, function ($, Tooltip) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;
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);
22
- }
23
- }
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./tooltip.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./tooltip'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Tooltip));
10
+ }(this, (function (Tooltip) { 'use strict';
24
11
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
30
13
 
31
- function _defineProperty(obj, key, value) {
32
- if (key in obj) {
33
- Object.defineProperty(obj, key, {
34
- value: value,
35
- enumerable: true,
36
- configurable: true,
37
- writable: true
38
- });
39
- } else {
40
- obj[key] = value;
14
+ var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
15
+
16
+ /**
17
+ * --------------------------------------------------------------------------
18
+ * Bootstrap (v5.1.0): util/index.js
19
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
20
+ * --------------------------------------------------------------------------
21
+ */
22
+
23
+ const getjQuery = () => {
24
+ const {
25
+ jQuery
26
+ } = window;
27
+
28
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
29
+ return jQuery;
41
30
  }
42
31
 
43
- return obj;
44
- }
32
+ return null;
33
+ };
45
34
 
46
- function _objectSpread(target) {
47
- for (var i = 1; i < arguments.length; i++) {
48
- var source = arguments[i] != null ? arguments[i] : {};
49
- var ownKeys = Object.keys(source);
35
+ const DOMContentLoadedCallbacks = [];
50
36
 
51
- if (typeof Object.getOwnPropertySymbols === 'function') {
52
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
53
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
54
- }));
37
+ const onDOMContentLoaded = callback => {
38
+ if (document.readyState === 'loading') {
39
+ // add listener on the first call when the document is in loading state
40
+ if (!DOMContentLoadedCallbacks.length) {
41
+ document.addEventListener('DOMContentLoaded', () => {
42
+ DOMContentLoadedCallbacks.forEach(callback => callback());
43
+ });
55
44
  }
56
45
 
57
- ownKeys.forEach(function (key) {
58
- _defineProperty(target, key, source[key]);
59
- });
46
+ DOMContentLoadedCallbacks.push(callback);
47
+ } else {
48
+ callback();
60
49
  }
50
+ };
61
51
 
62
- return target;
63
- }
64
-
65
- function _inheritsLoose(subClass, superClass) {
66
- subClass.prototype = Object.create(superClass.prototype);
67
- subClass.prototype.constructor = subClass;
68
- subClass.__proto__ = superClass;
69
- }
52
+ const defineJQueryPlugin = plugin => {
53
+ onDOMContentLoaded(() => {
54
+ const $ = getjQuery();
55
+ /* istanbul ignore if */
56
+
57
+ if ($) {
58
+ const name = plugin.NAME;
59
+ const JQUERY_NO_CONFLICT = $.fn[name];
60
+ $.fn[name] = plugin.jQueryInterface;
61
+ $.fn[name].Constructor = plugin;
62
+
63
+ $.fn[name].noConflict = () => {
64
+ $.fn[name] = JQUERY_NO_CONFLICT;
65
+ return plugin.jQueryInterface;
66
+ };
67
+ }
68
+ });
69
+ };
70
70
 
71
+ /**
72
+ * --------------------------------------------------------------------------
73
+ * Bootstrap (v5.1.0): popover.js
74
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
75
+ * --------------------------------------------------------------------------
76
+ */
71
77
  /**
72
78
  * ------------------------------------------------------------------------
73
79
  * Constants
74
80
  * ------------------------------------------------------------------------
75
81
  */
76
82
 
77
- var NAME = 'popover';
78
- var VERSION = '4.3.0';
79
- var DATA_KEY = 'bs.popover';
80
- var EVENT_KEY = "." + DATA_KEY;
81
- var JQUERY_NO_CONFLICT = $.fn[NAME];
82
- var CLASS_PREFIX = 'bs-popover';
83
- var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
84
-
85
- var Default = _objectSpread({}, Tooltip.Default, {
83
+ const NAME = 'popover';
84
+ const DATA_KEY = 'bs.popover';
85
+ const EVENT_KEY = `.${DATA_KEY}`;
86
+ const CLASS_PREFIX = 'bs-popover';
87
+ const Default = { ...Tooltip__default['default'].Default,
86
88
  placement: 'right',
89
+ offset: [0, 8],
87
90
  trigger: 'click',
88
91
  content: '',
89
- template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
90
- });
91
-
92
- var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
93
- content: '(string|element|function)'
94
- });
95
-
96
- var ClassName = {
97
- FADE: 'fade',
98
- SHOW: 'show'
92
+ template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
99
93
  };
100
- var Selector = {
101
- TITLE: '.popover-header',
102
- CONTENT: '.popover-body'
94
+ const DefaultType = { ...Tooltip__default['default'].DefaultType,
95
+ content: '(string|element|function)'
103
96
  };
104
- var Event = {
105
- HIDE: "hide" + EVENT_KEY,
106
- HIDDEN: "hidden" + EVENT_KEY,
107
- SHOW: "show" + EVENT_KEY,
108
- SHOWN: "shown" + EVENT_KEY,
109
- INSERTED: "inserted" + EVENT_KEY,
110
- CLICK: "click" + EVENT_KEY,
111
- FOCUSIN: "focusin" + EVENT_KEY,
112
- FOCUSOUT: "focusout" + EVENT_KEY,
113
- MOUSEENTER: "mouseenter" + EVENT_KEY,
114
- MOUSELEAVE: "mouseleave" + EVENT_KEY
115
- /**
116
- * ------------------------------------------------------------------------
117
- * Class Definition
118
- * ------------------------------------------------------------------------
119
- */
120
-
97
+ const Event = {
98
+ HIDE: `hide${EVENT_KEY}`,
99
+ HIDDEN: `hidden${EVENT_KEY}`,
100
+ SHOW: `show${EVENT_KEY}`,
101
+ SHOWN: `shown${EVENT_KEY}`,
102
+ INSERTED: `inserted${EVENT_KEY}`,
103
+ CLICK: `click${EVENT_KEY}`,
104
+ FOCUSIN: `focusin${EVENT_KEY}`,
105
+ FOCUSOUT: `focusout${EVENT_KEY}`,
106
+ MOUSEENTER: `mouseenter${EVENT_KEY}`,
107
+ MOUSELEAVE: `mouseleave${EVENT_KEY}`
121
108
  };
109
+ const SELECTOR_TITLE = '.popover-header';
110
+ const SELECTOR_CONTENT = '.popover-body';
111
+ /**
112
+ * ------------------------------------------------------------------------
113
+ * Class Definition
114
+ * ------------------------------------------------------------------------
115
+ */
122
116
 
123
- var Popover =
124
- /*#__PURE__*/
125
- function (_Tooltip) {
126
- _inheritsLoose(Popover, _Tooltip);
127
-
128
- function Popover() {
129
- return _Tooltip.apply(this, arguments) || this;
117
+ class Popover extends Tooltip__default['default'] {
118
+ // Getters
119
+ static get Default() {
120
+ return Default;
130
121
  }
131
122
 
132
- var _proto = Popover.prototype;
133
-
134
- // Overrides
135
- _proto.isWithContent = function isWithContent() {
136
- return this.getTitle() || this._getContent();
137
- };
138
-
139
- _proto.addAttachmentClass = function addAttachmentClass(attachment) {
140
- $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
141
- };
123
+ static get NAME() {
124
+ return NAME;
125
+ }
142
126
 
143
- _proto.getTipElement = function getTipElement() {
144
- this.tip = this.tip || $(this.config.template)[0];
145
- return this.tip;
146
- };
127
+ static get Event() {
128
+ return Event;
129
+ }
147
130
 
148
- _proto.setContent = function setContent() {
149
- var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
131
+ static get DefaultType() {
132
+ return DefaultType;
133
+ } // Overrides
150
134
 
151
- this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
152
135
 
153
- var content = this._getContent();
136
+ isWithContent() {
137
+ return this.getTitle() || this._getContent();
138
+ }
154
139
 
155
- if (typeof content === 'function') {
156
- content = content.call(this.element);
157
- }
140
+ setContent(tip) {
141
+ this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
158
142
 
159
- this.setElementContent($tip.find(Selector.CONTENT), content);
160
- $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
143
+ this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
161
144
  } // Private
162
- ;
163
145
 
164
- _proto._getContent = function _getContent() {
165
- return this.element.getAttribute('data-content') || this.config.content;
166
- };
167
146
 
168
- _proto._cleanTipClass = function _cleanTipClass() {
169
- var $tip = $(this.getTipElement());
170
- var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
147
+ _getContent() {
148
+ return this._resolvePossibleFunction(this._config.content);
149
+ }
171
150
 
172
- if (tabClass !== null && tabClass.length > 0) {
173
- $tip.removeClass(tabClass.join(''));
174
- }
151
+ _getBasicClassPrefix() {
152
+ return CLASS_PREFIX;
175
153
  } // Static
176
- ;
177
-
178
- Popover._jQueryInterface = function _jQueryInterface(config) {
179
- return this.each(function () {
180
- var data = $(this).data(DATA_KEY);
181
-
182
- var _config = typeof config === 'object' ? config : null;
183
154
 
184
- if (!data && /dispose|hide/.test(config)) {
185
- return;
186
- }
187
155
 
188
- if (!data) {
189
- data = new Popover(this, _config);
190
- $(this).data(DATA_KEY, data);
191
- }
156
+ static jQueryInterface(config) {
157
+ return this.each(function () {
158
+ const data = Popover.getOrCreateInstance(this, config);
192
159
 
193
160
  if (typeof config === 'string') {
194
161
  if (typeof data[config] === 'undefined') {
195
- throw new TypeError("No method named \"" + config + "\"");
162
+ throw new TypeError(`No method named "${config}"`);
196
163
  }
197
164
 
198
165
  data[config]();
199
166
  }
200
167
  });
201
- };
202
-
203
- _createClass(Popover, null, [{
204
- key: "VERSION",
205
- // Getters
206
- get: function get() {
207
- return VERSION;
208
- }
209
- }, {
210
- key: "Default",
211
- get: function get() {
212
- return Default;
213
- }
214
- }, {
215
- key: "NAME",
216
- get: function get() {
217
- return NAME;
218
- }
219
- }, {
220
- key: "DATA_KEY",
221
- get: function get() {
222
- return DATA_KEY;
223
- }
224
- }, {
225
- key: "Event",
226
- get: function get() {
227
- return Event;
228
- }
229
- }, {
230
- key: "EVENT_KEY",
231
- get: function get() {
232
- return EVENT_KEY;
233
- }
234
- }, {
235
- key: "DefaultType",
236
- get: function get() {
237
- return DefaultType;
238
- }
239
- }]);
168
+ }
240
169
 
241
- return Popover;
242
- }(Tooltip);
170
+ }
243
171
  /**
244
172
  * ------------------------------------------------------------------------
245
173
  * jQuery
246
174
  * ------------------------------------------------------------------------
175
+ * add .Popover to jQuery only if jQuery is present
247
176
  */
248
177
 
249
178
 
250
- $.fn[NAME] = Popover._jQueryInterface;
251
- $.fn[NAME].Constructor = Popover;
252
-
253
- $.fn[NAME].noConflict = function () {
254
- $.fn[NAME] = JQUERY_NO_CONFLICT;
255
- return Popover._jQueryInterface;
256
- };
179
+ defineJQueryPlugin(Popover);
257
180
 
258
181
  return Popover;
259
182
 
260
- }));
183
+ })));
@@ -1,243 +1,296 @@
1
1
  /*!
2
- * Bootstrap scrollspy.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 scrollspy.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.ScrollSpy = 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/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ }(this, (function (EventHandler, Manipulator, 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 Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
16
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
+
19
+ /**
20
+ * --------------------------------------------------------------------------
21
+ * Bootstrap (v5.1.0): util/index.js
22
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23
+ * --------------------------------------------------------------------------
24
+ */
25
+
26
+ const toType = obj => {
27
+ if (obj === null || obj === undefined) {
28
+ return `${obj}`;
22
29
  }
23
- }
24
30
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
31
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
32
+ };
30
33
 
31
- function _defineProperty(obj, key, value) {
32
- if (key in obj) {
33
- Object.defineProperty(obj, key, {
34
- value: value,
35
- enumerable: true,
36
- configurable: true,
37
- writable: true
38
- });
39
- } else {
40
- obj[key] = value;
34
+ const getSelector = element => {
35
+ let selector = element.getAttribute('data-bs-target');
36
+
37
+ if (!selector || selector === '#') {
38
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
39
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
40
+ // `document.querySelector` will rightfully complain it is invalid.
41
+ // See https://github.com/twbs/bootstrap/issues/32273
42
+
43
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
44
+ return null;
45
+ } // Just in case some CMS puts out a full URL with the anchor appended
46
+
47
+
48
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
49
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
50
+ }
51
+
52
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
41
53
  }
42
54
 
43
- return obj;
44
- }
55
+ return selector;
56
+ };
45
57
 
46
- function _objectSpread(target) {
47
- for (var i = 1; i < arguments.length; i++) {
48
- var source = arguments[i] != null ? arguments[i] : {};
49
- var ownKeys = Object.keys(source);
58
+ const getSelectorFromElement = element => {
59
+ const selector = getSelector(element);
50
60
 
51
- if (typeof Object.getOwnPropertySymbols === 'function') {
52
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
53
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
54
- }));
61
+ if (selector) {
62
+ return document.querySelector(selector) ? selector : null;
63
+ }
64
+
65
+ return null;
66
+ };
67
+
68
+ const isElement = obj => {
69
+ if (!obj || typeof obj !== 'object') {
70
+ return false;
71
+ }
72
+
73
+ if (typeof obj.jquery !== 'undefined') {
74
+ obj = obj[0];
75
+ }
76
+
77
+ return typeof obj.nodeType !== 'undefined';
78
+ };
79
+
80
+ const getElement = obj => {
81
+ if (isElement(obj)) {
82
+ // it's a jQuery object or a node element
83
+ return obj.jquery ? obj[0] : obj;
84
+ }
85
+
86
+ if (typeof obj === 'string' && obj.length > 0) {
87
+ return document.querySelector(obj);
88
+ }
89
+
90
+ return null;
91
+ };
92
+
93
+ const typeCheckConfig = (componentName, config, configTypes) => {
94
+ Object.keys(configTypes).forEach(property => {
95
+ const expectedTypes = configTypes[property];
96
+ const value = config[property];
97
+ const valueType = value && isElement(value) ? 'element' : toType(value);
98
+
99
+ if (!new RegExp(expectedTypes).test(valueType)) {
100
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
55
101
  }
102
+ });
103
+ };
56
104
 
57
- ownKeys.forEach(function (key) {
58
- _defineProperty(target, key, source[key]);
59
- });
105
+ const getjQuery = () => {
106
+ const {
107
+ jQuery
108
+ } = window;
109
+
110
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
111
+ return jQuery;
60
112
  }
61
113
 
62
- return target;
63
- }
114
+ return null;
115
+ };
116
+
117
+ const DOMContentLoadedCallbacks = [];
118
+
119
+ const onDOMContentLoaded = callback => {
120
+ if (document.readyState === 'loading') {
121
+ // add listener on the first call when the document is in loading state
122
+ if (!DOMContentLoadedCallbacks.length) {
123
+ document.addEventListener('DOMContentLoaded', () => {
124
+ DOMContentLoadedCallbacks.forEach(callback => callback());
125
+ });
126
+ }
127
+
128
+ DOMContentLoadedCallbacks.push(callback);
129
+ } else {
130
+ callback();
131
+ }
132
+ };
133
+
134
+ const defineJQueryPlugin = plugin => {
135
+ onDOMContentLoaded(() => {
136
+ const $ = getjQuery();
137
+ /* istanbul ignore if */
138
+
139
+ if ($) {
140
+ const name = plugin.NAME;
141
+ const JQUERY_NO_CONFLICT = $.fn[name];
142
+ $.fn[name] = plugin.jQueryInterface;
143
+ $.fn[name].Constructor = plugin;
144
+
145
+ $.fn[name].noConflict = () => {
146
+ $.fn[name] = JQUERY_NO_CONFLICT;
147
+ return plugin.jQueryInterface;
148
+ };
149
+ }
150
+ });
151
+ };
64
152
 
153
+ /**
154
+ * --------------------------------------------------------------------------
155
+ * Bootstrap (v5.1.0): scrollspy.js
156
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
157
+ * --------------------------------------------------------------------------
158
+ */
65
159
  /**
66
160
  * ------------------------------------------------------------------------
67
161
  * Constants
68
162
  * ------------------------------------------------------------------------
69
163
  */
70
164
 
71
- var NAME = 'scrollspy';
72
- var VERSION = '4.3.0';
73
- var DATA_KEY = 'bs.scrollspy';
74
- var EVENT_KEY = "." + DATA_KEY;
75
- var DATA_API_KEY = '.data-api';
76
- var JQUERY_NO_CONFLICT = $.fn[NAME];
77
- var Default = {
165
+ const NAME = 'scrollspy';
166
+ const DATA_KEY = 'bs.scrollspy';
167
+ const EVENT_KEY = `.${DATA_KEY}`;
168
+ const DATA_API_KEY = '.data-api';
169
+ const Default = {
78
170
  offset: 10,
79
171
  method: 'auto',
80
172
  target: ''
81
173
  };
82
- var DefaultType = {
174
+ const DefaultType = {
83
175
  offset: 'number',
84
176
  method: 'string',
85
177
  target: '(string|element)'
86
178
  };
87
- var Event = {
88
- ACTIVATE: "activate" + EVENT_KEY,
89
- SCROLL: "scroll" + EVENT_KEY,
90
- LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
91
- };
92
- var ClassName = {
93
- DROPDOWN_ITEM: 'dropdown-item',
94
- DROPDOWN_MENU: 'dropdown-menu',
95
- ACTIVE: 'active'
96
- };
97
- var Selector = {
98
- DATA_SPY: '[data-spy="scroll"]',
99
- ACTIVE: '.active',
100
- NAV_LIST_GROUP: '.nav, .list-group',
101
- NAV_LINKS: '.nav-link',
102
- NAV_ITEMS: '.nav-item',
103
- LIST_ITEMS: '.list-group-item',
104
- DROPDOWN: '.dropdown',
105
- DROPDOWN_ITEMS: '.dropdown-item',
106
- DROPDOWN_TOGGLE: '.dropdown-toggle'
107
- };
108
- var OffsetMethod = {
109
- OFFSET: 'offset',
110
- POSITION: 'position'
111
- /**
112
- * ------------------------------------------------------------------------
113
- * Class Definition
114
- * ------------------------------------------------------------------------
115
- */
116
-
117
- };
118
-
119
- var ScrollSpy =
120
- /*#__PURE__*/
121
- function () {
122
- function ScrollSpy(element, config) {
123
- var _this = this;
179
+ const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
180
+ const EVENT_SCROLL = `scroll${EVENT_KEY}`;
181
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
182
+ const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
183
+ const CLASS_NAME_ACTIVE = 'active';
184
+ const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
185
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
186
+ const SELECTOR_NAV_LINKS = '.nav-link';
187
+ const SELECTOR_NAV_ITEMS = '.nav-item';
188
+ const SELECTOR_LIST_ITEMS = '.list-group-item';
189
+ const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
190
+ const SELECTOR_DROPDOWN = '.dropdown';
191
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
192
+ const METHOD_OFFSET = 'offset';
193
+ const METHOD_POSITION = 'position';
194
+ /**
195
+ * ------------------------------------------------------------------------
196
+ * Class Definition
197
+ * ------------------------------------------------------------------------
198
+ */
124
199
 
125
- this._element = element;
126
- this._scrollElement = element.tagName === 'BODY' ? window : element;
200
+ class ScrollSpy extends BaseComponent__default['default'] {
201
+ constructor(element, config) {
202
+ super(element);
203
+ this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
127
204
  this._config = this._getConfig(config);
128
- this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS);
129
205
  this._offsets = [];
130
206
  this._targets = [];
131
207
  this._activeTarget = null;
132
208
  this._scrollHeight = 0;
133
- $(this._scrollElement).on(Event.SCROLL, function (event) {
134
- return _this._process(event);
135
- });
209
+ EventHandler__default['default'].on(this._scrollElement, EVENT_SCROLL, () => this._process());
136
210
  this.refresh();
137
211
 
138
212
  this._process();
139
213
  } // Getters
140
214
 
141
215
 
142
- var _proto = ScrollSpy.prototype;
216
+ static get Default() {
217
+ return Default;
218
+ }
219
+
220
+ static get NAME() {
221
+ return NAME;
222
+ } // Public
143
223
 
144
- // Public
145
- _proto.refresh = function refresh() {
146
- var _this2 = this;
147
224
 
148
- var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
149
- var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
150
- var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
225
+ refresh() {
226
+ const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
227
+ const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
228
+ const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
151
229
  this._offsets = [];
152
230
  this._targets = [];
153
231
  this._scrollHeight = this._getScrollHeight();
154
- var targets = [].slice.call(document.querySelectorAll(this._selector));
155
- targets.map(function (element) {
156
- var target;
157
- var targetSelector = Util.getSelectorFromElement(element);
158
-
159
- if (targetSelector) {
160
- target = document.querySelector(targetSelector);
161
- }
232
+ const targets = SelectorEngine__default['default'].find(SELECTOR_LINK_ITEMS, this._config.target);
233
+ targets.map(element => {
234
+ const targetSelector = getSelectorFromElement(element);
235
+ const target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
162
236
 
163
237
  if (target) {
164
- var targetBCR = target.getBoundingClientRect();
238
+ const targetBCR = target.getBoundingClientRect();
165
239
 
166
240
  if (targetBCR.width || targetBCR.height) {
167
- // TODO (fat): remove sketch reliance on jQuery position/offset
168
- return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
241
+ return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector];
169
242
  }
170
243
  }
171
244
 
172
245
  return null;
173
- }).filter(function (item) {
174
- return item;
175
- }).sort(function (a, b) {
176
- return a[0] - b[0];
177
- }).forEach(function (item) {
178
- _this2._offsets.push(item[0]);
179
-
180
- _this2._targets.push(item[1]);
181
- });
182
- };
183
-
184
- _proto.dispose = function dispose() {
185
- $.removeData(this._element, DATA_KEY);
186
- $(this._scrollElement).off(EVENT_KEY);
187
- this._element = null;
188
- this._scrollElement = null;
189
- this._config = null;
190
- this._selector = null;
191
- this._offsets = null;
192
- this._targets = null;
193
- this._activeTarget = null;
194
- this._scrollHeight = null;
195
- } // Private
196
- ;
197
-
198
- _proto._getConfig = function _getConfig(config) {
199
- config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});
246
+ }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
247
+ this._offsets.push(item[0]);
200
248
 
201
- if (typeof config.target !== 'string') {
202
- var id = $(config.target).attr('id');
249
+ this._targets.push(item[1]);
250
+ });
251
+ }
203
252
 
204
- if (!id) {
205
- id = Util.getUID(NAME);
206
- $(config.target).attr('id', id);
207
- }
253
+ dispose() {
254
+ EventHandler__default['default'].off(this._scrollElement, EVENT_KEY);
255
+ super.dispose();
256
+ } // Private
208
257
 
209
- config.target = "#" + id;
210
- }
211
258
 
212
- Util.typeCheckConfig(NAME, config, DefaultType);
259
+ _getConfig(config) {
260
+ config = { ...Default,
261
+ ...Manipulator__default['default'].getDataAttributes(this._element),
262
+ ...(typeof config === 'object' && config ? config : {})
263
+ };
264
+ config.target = getElement(config.target) || document.documentElement;
265
+ typeCheckConfig(NAME, config, DefaultType);
213
266
  return config;
214
- };
267
+ }
215
268
 
216
- _proto._getScrollTop = function _getScrollTop() {
269
+ _getScrollTop() {
217
270
  return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
218
- };
271
+ }
219
272
 
220
- _proto._getScrollHeight = function _getScrollHeight() {
273
+ _getScrollHeight() {
221
274
  return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
222
- };
275
+ }
223
276
 
224
- _proto._getOffsetHeight = function _getOffsetHeight() {
277
+ _getOffsetHeight() {
225
278
  return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
226
- };
279
+ }
227
280
 
228
- _proto._process = function _process() {
229
- var scrollTop = this._getScrollTop() + this._config.offset;
281
+ _process() {
282
+ const scrollTop = this._getScrollTop() + this._config.offset;
230
283
 
231
- var scrollHeight = this._getScrollHeight();
284
+ const scrollHeight = this._getScrollHeight();
232
285
 
233
- var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
286
+ const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
234
287
 
235
288
  if (this._scrollHeight !== scrollHeight) {
236
289
  this.refresh();
237
290
  }
238
291
 
239
292
  if (scrollTop >= maxScroll) {
240
- var target = this._targets[this._targets.length - 1];
293
+ const target = this._targets[this._targets.length - 1];
241
294
 
242
295
  if (this._activeTarget !== target) {
243
296
  this._activate(target);
@@ -254,90 +307,65 @@
254
307
  return;
255
308
  }
256
309
 
257
- var offsetLength = this._offsets.length;
258
-
259
- for (var i = offsetLength; i--;) {
260
- var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
310
+ for (let i = this._offsets.length; i--;) {
311
+ const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
261
312
 
262
313
  if (isActiveTarget) {
263
314
  this._activate(this._targets[i]);
264
315
  }
265
316
  }
266
- };
317
+ }
267
318
 
268
- _proto._activate = function _activate(target) {
319
+ _activate(target) {
269
320
  this._activeTarget = target;
270
321
 
271
322
  this._clear();
272
323
 
273
- var queries = this._selector.split(',').map(function (selector) {
274
- return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
275
- });
276
-
277
- var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
324
+ const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
325
+ const link = SelectorEngine__default['default'].findOne(queries.join(','), this._config.target);
326
+ link.classList.add(CLASS_NAME_ACTIVE);
278
327
 
279
- if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
280
- $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
281
- $link.addClass(ClassName.ACTIVE);
328
+ if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
329
+ SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
282
330
  } else {
283
- // Set triggered link as active
284
- $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active
285
- // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
286
-
287
- $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item
288
-
289
- $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
331
+ SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
332
+ // Set triggered links parents as active
333
+ // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
334
+ SelectorEngine__default['default'].prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE)); // Handle special case when .nav-link is inside .nav-item
335
+
336
+ SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
337
+ SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
338
+ });
339
+ });
290
340
  }
291
341
 
292
- $(this._scrollElement).trigger(Event.ACTIVATE, {
342
+ EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, {
293
343
  relatedTarget: target
294
344
  });
295
- };
345
+ }
296
346
 
297
- _proto._clear = function _clear() {
298
- [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
299
- return node.classList.contains(ClassName.ACTIVE);
300
- }).forEach(function (node) {
301
- return node.classList.remove(ClassName.ACTIVE);
302
- });
347
+ _clear() {
348
+ SelectorEngine__default['default'].find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
303
349
  } // Static
304
- ;
305
350
 
306
- ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
307
- return this.each(function () {
308
- var data = $(this).data(DATA_KEY);
309
351
 
310
- var _config = typeof config === 'object' && config;
352
+ static jQueryInterface(config) {
353
+ return this.each(function () {
354
+ const data = ScrollSpy.getOrCreateInstance(this, config);
311
355
 
312
- if (!data) {
313
- data = new ScrollSpy(this, _config);
314
- $(this).data(DATA_KEY, data);
356
+ if (typeof config !== 'string') {
357
+ return;
315
358
  }
316
359
 
317
- if (typeof config === 'string') {
318
- if (typeof data[config] === 'undefined') {
319
- throw new TypeError("No method named \"" + config + "\"");
320
- }
321
-
322
- data[config]();
360
+ if (typeof data[config] === 'undefined') {
361
+ throw new TypeError(`No method named "${config}"`);
323
362
  }
324
- });
325
- };
326
363
 
327
- _createClass(ScrollSpy, null, [{
328
- key: "VERSION",
329
- get: function get() {
330
- return VERSION;
331
- }
332
- }, {
333
- key: "Default",
334
- get: function get() {
335
- return Default;
336
- }
337
- }]);
364
+ data[config]();
365
+ });
366
+ }
338
367
 
339
- return ScrollSpy;
340
- }();
368
+ }
341
369
  /**
342
370
  * ------------------------------------------------------------------------
343
371
  * Data Api implementation
@@ -345,30 +373,18 @@
345
373
  */
346
374
 
347
375
 
348
- $(window).on(Event.LOAD_DATA_API, function () {
349
- var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));
350
- var scrollSpysLength = scrollSpys.length;
351
-
352
- for (var i = scrollSpysLength; i--;) {
353
- var $spy = $(scrollSpys[i]);
354
-
355
- ScrollSpy._jQueryInterface.call($spy, $spy.data());
356
- }
376
+ EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
377
+ SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
357
378
  });
358
379
  /**
359
380
  * ------------------------------------------------------------------------
360
381
  * jQuery
361
382
  * ------------------------------------------------------------------------
383
+ * add .ScrollSpy to jQuery only if jQuery is present
362
384
  */
363
385
 
364
- $.fn[NAME] = ScrollSpy._jQueryInterface;
365
- $.fn[NAME].Constructor = ScrollSpy;
366
-
367
- $.fn[NAME].noConflict = function () {
368
- $.fn[NAME] = JQUERY_NO_CONFLICT;
369
- return ScrollSpy._jQueryInterface;
370
- };
386
+ defineJQueryPlugin(ScrollSpy);
371
387
 
372
388
  return ScrollSpy;
373
389
 
374
- }));
390
+ })));