bootstrap 5.0.0.alpha2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  5. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  6. data/assets/javascripts/bootstrap-sprockets.js +10 -7
  7. data/assets/javascripts/bootstrap.js +2554 -2564
  8. data/assets/javascripts/bootstrap.min.js +3 -3
  9. data/assets/javascripts/bootstrap/alert.js +119 -115
  10. data/assets/javascripts/bootstrap/base-component.js +63 -0
  11. data/assets/javascripts/bootstrap/button.js +67 -69
  12. data/assets/javascripts/bootstrap/carousel.js +340 -331
  13. data/assets/javascripts/bootstrap/collapse.js +214 -209
  14. data/assets/javascripts/bootstrap/dom/data.js +35 -48
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +105 -98
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +26 -34
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +28 -41
  18. data/assets/javascripts/bootstrap/dropdown.js +392 -325
  19. data/assets/javascripts/bootstrap/modal.js +492 -434
  20. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  21. data/assets/javascripts/bootstrap/popover.js +114 -132
  22. data/assets/javascripts/bootstrap/scrollspy.js +172 -180
  23. data/assets/javascripts/bootstrap/tab.js +168 -144
  24. data/assets/javascripts/bootstrap/toast.js +141 -150
  25. data/assets/javascripts/bootstrap/tooltip.js +466 -452
  26. data/assets/stylesheets/_bootstrap-grid.scss +9 -9
  27. data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
  28. data/assets/stylesheets/_bootstrap.scss +5 -3
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +10 -3
  31. data/assets/stylesheets/bootstrap/_breadcrumb.scss +2 -4
  32. data/assets/stylesheets/bootstrap/_button-group.scss +5 -7
  33. data/assets/stylesheets/bootstrap/_buttons.scss +2 -15
  34. data/assets/stylesheets/bootstrap/_card.scss +2 -29
  35. data/assets/stylesheets/bootstrap/_carousel.scss +35 -18
  36. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  37. data/assets/stylesheets/bootstrap/_dropdown.scss +33 -29
  38. data/assets/stylesheets/bootstrap/_forms.scss +1 -1
  39. data/assets/stylesheets/bootstrap/_functions.scss +11 -12
  40. data/assets/stylesheets/bootstrap/_list-group.scss +23 -6
  41. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  42. data/assets/stylesheets/bootstrap/_modal.scss +2 -9
  43. data/assets/stylesheets/bootstrap/_nav.scss +12 -0
  44. data/assets/stylesheets/bootstrap/_navbar.scss +15 -2
  45. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  46. data/assets/stylesheets/bootstrap/_pagination.scss +3 -3
  47. data/assets/stylesheets/bootstrap/_popover.scss +10 -22
  48. data/assets/stylesheets/bootstrap/_progress.scss +4 -1
  49. data/assets/stylesheets/bootstrap/_reboot.scss +48 -44
  50. data/assets/stylesheets/bootstrap/_root.scss +5 -5
  51. data/assets/stylesheets/bootstrap/_spinners.scss +18 -5
  52. data/assets/stylesheets/bootstrap/_tables.scss +15 -16
  53. data/assets/stylesheets/bootstrap/_toasts.scss +15 -12
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +12 -12
  55. data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
  56. data/assets/stylesheets/bootstrap/_utilities.scss +133 -70
  57. data/assets/stylesheets/bootstrap/_variables.scss +363 -207
  58. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +5 -5
  59. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-check.scss +21 -11
  61. data/assets/stylesheets/bootstrap/forms/_form-control.scss +112 -9
  62. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -46
  63. data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -16
  64. data/assets/stylesheets/bootstrap/forms/_input-group.scss +21 -40
  65. data/assets/stylesheets/bootstrap/forms/_validation.scss +1 -1
  66. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
  67. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
  68. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +1 -1
  69. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -1
  70. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -6
  71. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +10 -5
  72. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -6
  73. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  74. data/assets/stylesheets/bootstrap/mixins/_container.scss +2 -4
  75. data/assets/stylesheets/bootstrap/mixins/_forms.scss +26 -22
  76. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +5 -1
  77. data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -13
  78. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -1
  79. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +5 -3
  80. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +7 -7
  81. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +19 -0
  82. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +3 -2
  83. data/assets/stylesheets/bootstrap/utilities/_api.scss +1 -1
  84. data/bootstrap.gemspec +1 -3
  85. data/lib/bootstrap/version.rb +2 -2
  86. data/tasks/updater/js.rb +20 -5
  87. data/tasks/updater/network.rb +7 -1
  88. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  89. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  90. data/test/dummy_rails/app/views/pages/root.html +89 -0
  91. data/test/dummy_rails/config/application.rb +0 -3
  92. data/test/gemfiles/rails_6_1.gemfile +7 -0
  93. metadata +20 -40
  94. data/assets/javascripts/bootstrap/dom/polyfill.js +0 -110
  95. data/assets/stylesheets/bootstrap/forms/_form-file.scss +0 -91
  96. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Bootstrap popover.js v5.0.0-alpha2 (https://getbootstrap.com/)
3
- * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap popover.js v5.0.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/selector-engine.js'), require('./tooltip.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/selector-engine.js', './tooltip.js'], factory) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data', './dom/selector-engine', './tooltip'], factory) :
9
9
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Data, global.SelectorEngine, global.Tooltip));
10
10
  }(this, (function (Data, SelectorEngine, Tooltip) { 'use strict';
11
11
 
@@ -17,132 +17,168 @@
17
17
 
18
18
  /**
19
19
  * --------------------------------------------------------------------------
20
- * Bootstrap (v5.0.0-alpha2): util/index.js
20
+ * Bootstrap (v5.0.0): util/index.js
21
21
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
22
22
  * --------------------------------------------------------------------------
23
23
  */
24
24
 
25
- var getjQuery = function getjQuery() {
26
- var _window = window,
27
- jQuery = _window.jQuery;
25
+ const getjQuery = () => {
26
+ const {
27
+ jQuery
28
+ } = window;
28
29
 
29
- if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
30
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
30
31
  return jQuery;
31
32
  }
32
33
 
33
34
  return null;
34
35
  };
35
36
 
36
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
37
+ const onDOMContentLoaded = callback => {
38
+ if (document.readyState === 'loading') {
39
+ document.addEventListener('DOMContentLoaded', callback);
40
+ } else {
41
+ callback();
42
+ }
43
+ };
44
+
45
+ const defineJQueryPlugin = (name, plugin) => {
46
+ onDOMContentLoaded(() => {
47
+ const $ = getjQuery();
48
+ /* istanbul ignore if */
37
49
 
38
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
50
+ if ($) {
51
+ const JQUERY_NO_CONFLICT = $.fn[name];
52
+ $.fn[name] = plugin.jQueryInterface;
53
+ $.fn[name].Constructor = plugin;
39
54
 
40
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
55
+ $.fn[name].noConflict = () => {
56
+ $.fn[name] = JQUERY_NO_CONFLICT;
57
+ return plugin.jQueryInterface;
58
+ };
59
+ }
60
+ });
61
+ };
41
62
 
42
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
63
+ /**
64
+ * --------------------------------------------------------------------------
65
+ * Bootstrap (v5.0.0): popover.js
66
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
67
+ * --------------------------------------------------------------------------
68
+ */
43
69
  /**
44
70
  * ------------------------------------------------------------------------
45
71
  * Constants
46
72
  * ------------------------------------------------------------------------
47
73
  */
48
74
 
49
- var NAME = 'popover';
50
- var VERSION = '5.0.0-alpha2';
51
- var DATA_KEY = 'bs.popover';
52
- var EVENT_KEY = "." + DATA_KEY;
53
- var CLASS_PREFIX = 'bs-popover';
54
- var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
55
-
56
- var Default = _extends({}, Tooltip__default['default'].Default, {
75
+ const NAME = 'popover';
76
+ const DATA_KEY = 'bs.popover';
77
+ const EVENT_KEY = `.${DATA_KEY}`;
78
+ const CLASS_PREFIX = 'bs-popover';
79
+ const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
80
+ const Default = { ...Tooltip__default['default'].Default,
57
81
  placement: 'right',
82
+ offset: [0, 8],
58
83
  trigger: 'click',
59
84
  content: '',
60
- template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
61
- });
62
-
63
- var DefaultType = _extends({}, Tooltip__default['default'].DefaultType, {
85
+ template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
86
+ };
87
+ const DefaultType = { ...Tooltip__default['default'].DefaultType,
64
88
  content: '(string|element|function)'
65
- });
66
-
67
- var Event = {
68
- HIDE: "hide" + EVENT_KEY,
69
- HIDDEN: "hidden" + EVENT_KEY,
70
- SHOW: "show" + EVENT_KEY,
71
- SHOWN: "shown" + EVENT_KEY,
72
- INSERTED: "inserted" + EVENT_KEY,
73
- CLICK: "click" + EVENT_KEY,
74
- FOCUSIN: "focusin" + EVENT_KEY,
75
- FOCUSOUT: "focusout" + EVENT_KEY,
76
- MOUSEENTER: "mouseenter" + EVENT_KEY,
77
- MOUSELEAVE: "mouseleave" + EVENT_KEY
78
89
  };
79
- var CLASS_NAME_FADE = 'fade';
80
- var CLASS_NAME_SHOW = 'show';
81
- var SELECTOR_TITLE = '.popover-header';
82
- var SELECTOR_CONTENT = '.popover-body';
90
+ const Event = {
91
+ HIDE: `hide${EVENT_KEY}`,
92
+ HIDDEN: `hidden${EVENT_KEY}`,
93
+ SHOW: `show${EVENT_KEY}`,
94
+ SHOWN: `shown${EVENT_KEY}`,
95
+ INSERTED: `inserted${EVENT_KEY}`,
96
+ CLICK: `click${EVENT_KEY}`,
97
+ FOCUSIN: `focusin${EVENT_KEY}`,
98
+ FOCUSOUT: `focusout${EVENT_KEY}`,
99
+ MOUSEENTER: `mouseenter${EVENT_KEY}`,
100
+ MOUSELEAVE: `mouseleave${EVENT_KEY}`
101
+ };
102
+ const CLASS_NAME_FADE = 'fade';
103
+ const CLASS_NAME_SHOW = 'show';
104
+ const SELECTOR_TITLE = '.popover-header';
105
+ const SELECTOR_CONTENT = '.popover-body';
83
106
  /**
84
107
  * ------------------------------------------------------------------------
85
108
  * Class Definition
86
109
  * ------------------------------------------------------------------------
87
110
  */
88
111
 
89
- var Popover = /*#__PURE__*/function (_Tooltip) {
90
- _inheritsLoose(Popover, _Tooltip);
112
+ class Popover extends Tooltip__default['default'] {
113
+ // Getters
114
+ static get Default() {
115
+ return Default;
116
+ }
117
+
118
+ static get NAME() {
119
+ return NAME;
120
+ }
121
+
122
+ static get DATA_KEY() {
123
+ return DATA_KEY;
124
+ }
125
+
126
+ static get Event() {
127
+ return Event;
128
+ }
91
129
 
92
- function Popover() {
93
- return _Tooltip.apply(this, arguments) || this;
130
+ static get EVENT_KEY() {
131
+ return EVENT_KEY;
94
132
  }
95
133
 
96
- var _proto = Popover.prototype;
134
+ static get DefaultType() {
135
+ return DefaultType;
136
+ } // Overrides
97
137
 
98
- // Overrides
99
- _proto.isWithContent = function isWithContent() {
138
+
139
+ isWithContent() {
100
140
  return this.getTitle() || this._getContent();
101
- };
141
+ }
102
142
 
103
- _proto.setContent = function setContent() {
104
- var tip = this.getTipElement(); // we use append for html objects to maintain js events
143
+ setContent() {
144
+ const tip = this.getTipElement(); // we use append for html objects to maintain js events
105
145
 
106
146
  this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TITLE, tip), this.getTitle());
107
147
 
108
- var content = this._getContent();
148
+ let content = this._getContent();
109
149
 
110
150
  if (typeof content === 'function') {
111
- content = content.call(this.element);
151
+ content = content.call(this._element);
112
152
  }
113
153
 
114
154
  this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_CONTENT, tip), content);
115
155
  tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
116
156
  } // Private
117
- ;
118
157
 
119
- _proto._addAttachmentClass = function _addAttachmentClass(attachment) {
120
- this.getTipElement().classList.add(CLASS_PREFIX + "-" + attachment);
121
- };
122
158
 
123
- _proto._getContent = function _getContent() {
124
- return this.element.getAttribute('data-content') || this.config.content;
125
- };
159
+ _addAttachmentClass(attachment) {
160
+ this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
161
+ }
162
+
163
+ _getContent() {
164
+ return this._element.getAttribute('data-bs-content') || this.config.content;
165
+ }
126
166
 
127
- _proto._cleanTipClass = function _cleanTipClass() {
128
- var tip = this.getTipElement();
129
- var tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
167
+ _cleanTipClass() {
168
+ const tip = this.getTipElement();
169
+ const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
130
170
 
131
171
  if (tabClass !== null && tabClass.length > 0) {
132
- tabClass.map(function (token) {
133
- return token.trim();
134
- }).forEach(function (tClass) {
135
- return tip.classList.remove(tClass);
136
- });
172
+ tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
137
173
  }
138
174
  } // Static
139
- ;
140
175
 
141
- Popover.jQueryInterface = function jQueryInterface(config) {
176
+
177
+ static jQueryInterface(config) {
142
178
  return this.each(function () {
143
- var data = Data__default['default'].getData(this, DATA_KEY);
179
+ let data = Data__default['default'].get(this, DATA_KEY);
144
180
 
145
- var _config = typeof config === 'object' ? config : null;
181
+ const _config = typeof config === 'object' ? config : null;
146
182
 
147
183
  if (!data && /dispose|hide/.test(config)) {
148
184
  return;
@@ -150,83 +186,29 @@
150
186
 
151
187
  if (!data) {
152
188
  data = new Popover(this, _config);
153
- Data__default['default'].setData(this, DATA_KEY, data);
189
+ Data__default['default'].set(this, DATA_KEY, data);
154
190
  }
155
191
 
156
192
  if (typeof config === 'string') {
157
193
  if (typeof data[config] === 'undefined') {
158
- throw new TypeError("No method named \"" + config + "\"");
194
+ throw new TypeError(`No method named "${config}"`);
159
195
  }
160
196
 
161
197
  data[config]();
162
198
  }
163
199
  });
164
- };
165
-
166
- Popover.getInstance = function getInstance(element) {
167
- return Data__default['default'].getData(element, DATA_KEY);
168
- };
169
-
170
- _createClass(Popover, null, [{
171
- key: "VERSION",
172
- // Getters
173
- get: function get() {
174
- return VERSION;
175
- }
176
- }, {
177
- key: "Default",
178
- get: function get() {
179
- return Default;
180
- }
181
- }, {
182
- key: "NAME",
183
- get: function get() {
184
- return NAME;
185
- }
186
- }, {
187
- key: "DATA_KEY",
188
- get: function get() {
189
- return DATA_KEY;
190
- }
191
- }, {
192
- key: "Event",
193
- get: function get() {
194
- return Event;
195
- }
196
- }, {
197
- key: "EVENT_KEY",
198
- get: function get() {
199
- return EVENT_KEY;
200
- }
201
- }, {
202
- key: "DefaultType",
203
- get: function get() {
204
- return DefaultType;
205
- }
206
- }]);
207
-
208
- return Popover;
209
- }(Tooltip__default['default']);
200
+ }
210
201
 
211
- var $ = getjQuery();
202
+ }
212
203
  /**
213
204
  * ------------------------------------------------------------------------
214
205
  * jQuery
215
206
  * ------------------------------------------------------------------------
207
+ * add .Popover to jQuery only if jQuery is present
216
208
  */
217
209
 
218
- /* istanbul ignore if */
219
210
 
220
- if ($) {
221
- var JQUERY_NO_CONFLICT = $.fn[NAME];
222
- $.fn[NAME] = Popover.jQueryInterface;
223
- $.fn[NAME].Constructor = Popover;
224
-
225
- $.fn[NAME].noConflict = function () {
226
- $.fn[NAME] = JQUERY_NO_CONFLICT;
227
- return Popover.jQueryInterface;
228
- };
229
- }
211
+ defineJQueryPlugin(NAME, Popover);
230
212
 
231
213
  return Popover;
232
214
 
@@ -1,32 +1,32 @@
1
1
  /*!
2
- * Bootstrap scrollspy.js v5.0.0-alpha2 (https://getbootstrap.com/)
3
- * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap scrollspy.js v5.0.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js')) :
8
- typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/manipulator.js', './dom/selector-engine.js'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine));
10
- }(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict';
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
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
14
  var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
15
  var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
16
  var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
17
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
18
 
19
19
  /**
20
20
  * --------------------------------------------------------------------------
21
- * Bootstrap (v5.0.0-alpha2): util/index.js
21
+ * Bootstrap (v5.0.0): util/index.js
22
22
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
23
23
  * --------------------------------------------------------------------------
24
24
  */
25
- var MAX_UID = 1000000;
25
+ const MAX_UID = 1000000;
26
26
 
27
- var toType = function toType(obj) {
27
+ const toType = obj => {
28
28
  if (obj === null || obj === undefined) {
29
- return "" + obj;
29
+ return `${obj}`;
30
30
  }
31
31
 
32
32
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
@@ -38,7 +38,7 @@
38
38
  */
39
39
 
40
40
 
41
- var getUID = function getUID(prefix) {
41
+ const getUID = prefix => {
42
42
  do {
43
43
  prefix += Math.floor(Math.random() * MAX_UID);
44
44
  } while (document.getElementById(prefix));
@@ -46,19 +46,32 @@
46
46
  return prefix;
47
47
  };
48
48
 
49
- var getSelector = function getSelector(element) {
50
- var selector = element.getAttribute('data-target');
49
+ const getSelector = element => {
50
+ let selector = element.getAttribute('data-bs-target');
51
51
 
52
52
  if (!selector || selector === '#') {
53
- var hrefAttr = element.getAttribute('href');
53
+ let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
54
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
55
+ // `document.querySelector` will rightfully complain it is invalid.
56
+ // See https://github.com/twbs/bootstrap/issues/32273
57
+
58
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
59
+ return null;
60
+ } // Just in case some CMS puts out a full URL with the anchor appended
61
+
62
+
63
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
64
+ hrefAttr = `#${hrefAttr.split('#')[1]}`;
65
+ }
66
+
54
67
  selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
55
68
  }
56
69
 
57
70
  return selector;
58
71
  };
59
72
 
60
- var getSelectorFromElement = function getSelectorFromElement(element) {
61
- var selector = getSelector(element);
73
+ const getSelectorFromElement = element => {
74
+ const selector = getSelector(element);
62
75
 
63
76
  if (selector) {
64
77
  return document.querySelector(selector) ? selector : null;
@@ -67,121 +80,144 @@
67
80
  return null;
68
81
  };
69
82
 
70
- var isElement = function isElement(obj) {
71
- return (obj[0] || obj).nodeType;
72
- };
83
+ const isElement = obj => (obj[0] || obj).nodeType;
73
84
 
74
- var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
75
- Object.keys(configTypes).forEach(function (property) {
76
- var expectedTypes = configTypes[property];
77
- var value = config[property];
78
- var valueType = value && isElement(value) ? 'element' : toType(value);
85
+ const typeCheckConfig = (componentName, config, configTypes) => {
86
+ Object.keys(configTypes).forEach(property => {
87
+ const expectedTypes = configTypes[property];
88
+ const value = config[property];
89
+ const valueType = value && isElement(value) ? 'element' : toType(value);
79
90
 
80
91
  if (!new RegExp(expectedTypes).test(valueType)) {
81
- throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
92
+ throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
82
93
  }
83
94
  });
84
95
  };
85
96
 
86
- var getjQuery = function getjQuery() {
87
- var _window = window,
88
- jQuery = _window.jQuery;
97
+ const getjQuery = () => {
98
+ const {
99
+ jQuery
100
+ } = window;
89
101
 
90
- if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
102
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
91
103
  return jQuery;
92
104
  }
93
105
 
94
106
  return null;
95
107
  };
96
108
 
97
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
109
+ const onDOMContentLoaded = callback => {
110
+ if (document.readyState === 'loading') {
111
+ document.addEventListener('DOMContentLoaded', callback);
112
+ } else {
113
+ callback();
114
+ }
115
+ };
116
+
117
+ const defineJQueryPlugin = (name, plugin) => {
118
+ onDOMContentLoaded(() => {
119
+ const $ = getjQuery();
120
+ /* istanbul ignore if */
98
121
 
99
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
122
+ if ($) {
123
+ const JQUERY_NO_CONFLICT = $.fn[name];
124
+ $.fn[name] = plugin.jQueryInterface;
125
+ $.fn[name].Constructor = plugin;
126
+
127
+ $.fn[name].noConflict = () => {
128
+ $.fn[name] = JQUERY_NO_CONFLICT;
129
+ return plugin.jQueryInterface;
130
+ };
131
+ }
132
+ });
133
+ };
100
134
 
101
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
135
+ /**
136
+ * --------------------------------------------------------------------------
137
+ * Bootstrap (v5.0.0): scrollspy.js
138
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
139
+ * --------------------------------------------------------------------------
140
+ */
102
141
  /**
103
142
  * ------------------------------------------------------------------------
104
143
  * Constants
105
144
  * ------------------------------------------------------------------------
106
145
  */
107
146
 
108
- var NAME = 'scrollspy';
109
- var VERSION = '5.0.0-alpha2';
110
- var DATA_KEY = 'bs.scrollspy';
111
- var EVENT_KEY = "." + DATA_KEY;
112
- var DATA_API_KEY = '.data-api';
113
- var Default = {
147
+ const NAME = 'scrollspy';
148
+ const DATA_KEY = 'bs.scrollspy';
149
+ const EVENT_KEY = `.${DATA_KEY}`;
150
+ const DATA_API_KEY = '.data-api';
151
+ const Default = {
114
152
  offset: 10,
115
153
  method: 'auto',
116
154
  target: ''
117
155
  };
118
- var DefaultType = {
156
+ const DefaultType = {
119
157
  offset: 'number',
120
158
  method: 'string',
121
159
  target: '(string|element)'
122
160
  };
123
- var EVENT_ACTIVATE = "activate" + EVENT_KEY;
124
- var EVENT_SCROLL = "scroll" + EVENT_KEY;
125
- var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
126
- var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
127
- var CLASS_NAME_ACTIVE = 'active';
128
- var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
129
- var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
130
- var SELECTOR_NAV_LINKS = '.nav-link';
131
- var SELECTOR_NAV_ITEMS = '.nav-item';
132
- var SELECTOR_LIST_ITEMS = '.list-group-item';
133
- var SELECTOR_DROPDOWN = '.dropdown';
134
- var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
135
- var METHOD_OFFSET = 'offset';
136
- var METHOD_POSITION = 'position';
161
+ const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
162
+ const EVENT_SCROLL = `scroll${EVENT_KEY}`;
163
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
164
+ const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
165
+ const CLASS_NAME_ACTIVE = 'active';
166
+ const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
167
+ const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
168
+ const SELECTOR_NAV_LINKS = '.nav-link';
169
+ const SELECTOR_NAV_ITEMS = '.nav-item';
170
+ const SELECTOR_LIST_ITEMS = '.list-group-item';
171
+ const SELECTOR_DROPDOWN = '.dropdown';
172
+ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
173
+ const METHOD_OFFSET = 'offset';
174
+ const METHOD_POSITION = 'position';
137
175
  /**
138
176
  * ------------------------------------------------------------------------
139
177
  * Class Definition
140
178
  * ------------------------------------------------------------------------
141
179
  */
142
180
 
143
- var ScrollSpy = /*#__PURE__*/function () {
144
- function ScrollSpy(element, config) {
145
- var _this = this;
146
-
147
- this._element = element;
148
- this._scrollElement = element.tagName === 'BODY' ? window : element;
181
+ class ScrollSpy extends BaseComponent__default['default'] {
182
+ constructor(element, config) {
183
+ super(element);
184
+ this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
149
185
  this._config = this._getConfig(config);
150
- this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + ", " + this._config.target + " " + SELECTOR_LIST_ITEMS + ", " + this._config.target + " ." + CLASS_NAME_DROPDOWN_ITEM;
186
+ this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
151
187
  this._offsets = [];
152
188
  this._targets = [];
153
189
  this._activeTarget = null;
154
190
  this._scrollHeight = 0;
155
- EventHandler__default['default'].on(this._scrollElement, EVENT_SCROLL, function (event) {
156
- return _this._process(event);
157
- });
191
+ EventHandler__default['default'].on(this._scrollElement, EVENT_SCROLL, () => this._process());
158
192
  this.refresh();
159
193
 
160
194
  this._process();
161
-
162
- Data__default['default'].setData(element, DATA_KEY, this);
163
195
  } // Getters
164
196
 
165
197
 
166
- var _proto = ScrollSpy.prototype;
198
+ static get Default() {
199
+ return Default;
200
+ }
201
+
202
+ static get DATA_KEY() {
203
+ return DATA_KEY;
204
+ } // Public
167
205
 
168
- // Public
169
- _proto.refresh = function refresh() {
170
- var _this2 = this;
171
206
 
172
- var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
173
- var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
174
- var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
207
+ refresh() {
208
+ const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
209
+ const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
210
+ const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
175
211
  this._offsets = [];
176
212
  this._targets = [];
177
213
  this._scrollHeight = this._getScrollHeight();
178
- var targets = SelectorEngine__default['default'].find(this._selector);
179
- targets.map(function (element) {
180
- var targetSelector = getSelectorFromElement(element);
181
- var target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
214
+ const targets = SelectorEngine__default['default'].find(this._selector);
215
+ targets.map(element => {
216
+ const targetSelector = getSelectorFromElement(element);
217
+ const target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
182
218
 
183
219
  if (target) {
184
- var targetBCR = target.getBoundingClientRect();
220
+ const targetBCR = target.getBoundingClientRect();
185
221
 
186
222
  if (targetBCR.width || targetBCR.height) {
187
223
  return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector];
@@ -189,21 +225,16 @@
189
225
  }
190
226
 
191
227
  return null;
192
- }).filter(function (item) {
193
- return item;
194
- }).sort(function (a, b) {
195
- return a[0] - b[0];
196
- }).forEach(function (item) {
197
- _this2._offsets.push(item[0]);
198
-
199
- _this2._targets.push(item[1]);
228
+ }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
229
+ this._offsets.push(item[0]);
230
+
231
+ this._targets.push(item[1]);
200
232
  });
201
- };
233
+ }
202
234
 
203
- _proto.dispose = function dispose() {
204
- Data__default['default'].removeData(this._element, DATA_KEY);
235
+ dispose() {
236
+ super.dispose();
205
237
  EventHandler__default['default'].off(this._scrollElement, EVENT_KEY);
206
- this._element = null;
207
238
  this._scrollElement = null;
208
239
  this._config = null;
209
240
  this._selector = null;
@@ -212,51 +243,56 @@
212
243
  this._activeTarget = null;
213
244
  this._scrollHeight = null;
214
245
  } // Private
215
- ;
216
246
 
217
- _proto._getConfig = function _getConfig(config) {
218
- config = _extends({}, Default, typeof config === 'object' && config ? config : {});
247
+
248
+ _getConfig(config) {
249
+ config = { ...Default,
250
+ ...Manipulator__default['default'].getDataAttributes(this._element),
251
+ ...(typeof config === 'object' && config ? config : {})
252
+ };
219
253
 
220
254
  if (typeof config.target !== 'string' && isElement(config.target)) {
221
- var id = config.target.id;
255
+ let {
256
+ id
257
+ } = config.target;
222
258
 
223
259
  if (!id) {
224
260
  id = getUID(NAME);
225
261
  config.target.id = id;
226
262
  }
227
263
 
228
- config.target = "#" + id;
264
+ config.target = `#${id}`;
229
265
  }
230
266
 
231
267
  typeCheckConfig(NAME, config, DefaultType);
232
268
  return config;
233
- };
269
+ }
234
270
 
235
- _proto._getScrollTop = function _getScrollTop() {
271
+ _getScrollTop() {
236
272
  return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
237
- };
273
+ }
238
274
 
239
- _proto._getScrollHeight = function _getScrollHeight() {
275
+ _getScrollHeight() {
240
276
  return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
241
- };
277
+ }
242
278
 
243
- _proto._getOffsetHeight = function _getOffsetHeight() {
279
+ _getOffsetHeight() {
244
280
  return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
245
- };
281
+ }
246
282
 
247
- _proto._process = function _process() {
248
- var scrollTop = this._getScrollTop() + this._config.offset;
283
+ _process() {
284
+ const scrollTop = this._getScrollTop() + this._config.offset;
249
285
 
250
- var scrollHeight = this._getScrollHeight();
286
+ const scrollHeight = this._getScrollHeight();
251
287
 
252
- var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
288
+ const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
253
289
 
254
290
  if (this._scrollHeight !== scrollHeight) {
255
291
  this.refresh();
256
292
  }
257
293
 
258
294
  if (scrollTop >= maxScroll) {
259
- var target = this._targets[this._targets.length - 1];
295
+ const target = this._targets[this._targets.length - 1];
260
296
 
261
297
  if (this._activeTarget !== target) {
262
298
  this._activate(target);
@@ -273,25 +309,23 @@
273
309
  return;
274
310
  }
275
311
 
276
- for (var i = this._offsets.length; i--;) {
277
- var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
312
+ for (let i = this._offsets.length; i--;) {
313
+ const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
278
314
 
279
315
  if (isActiveTarget) {
280
316
  this._activate(this._targets[i]);
281
317
  }
282
318
  }
283
- };
319
+ }
284
320
 
285
- _proto._activate = function _activate(target) {
321
+ _activate(target) {
286
322
  this._activeTarget = target;
287
323
 
288
324
  this._clear();
289
325
 
290
- var queries = this._selector.split(',').map(function (selector) {
291
- return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
292
- });
326
+ const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
293
327
 
294
- var link = SelectorEngine__default['default'].findOne(queries.join(','));
328
+ const link = SelectorEngine__default['default'].findOne(queries.join(','));
295
329
 
296
330
  if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
297
331
  SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
@@ -299,17 +333,13 @@
299
333
  } else {
300
334
  // Set triggered link as active
301
335
  link.classList.add(CLASS_NAME_ACTIVE);
302
- SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(function (listGroup) {
336
+ SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
303
337
  // Set triggered links parents as active
304
338
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
305
- SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).forEach(function (item) {
306
- return item.classList.add(CLASS_NAME_ACTIVE);
307
- }); // Handle special case when .nav-link is inside .nav-item
308
-
309
- SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(function (navItem) {
310
- SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(function (item) {
311
- return item.classList.add(CLASS_NAME_ACTIVE);
312
- });
339
+ 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
340
+
341
+ SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
342
+ SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
313
343
  });
314
344
  });
315
345
  }
@@ -317,55 +347,30 @@
317
347
  EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, {
318
348
  relatedTarget: target
319
349
  });
320
- };
350
+ }
321
351
 
322
- _proto._clear = function _clear() {
323
- SelectorEngine__default['default'].find(this._selector).filter(function (node) {
324
- return node.classList.contains(CLASS_NAME_ACTIVE);
325
- }).forEach(function (node) {
326
- return node.classList.remove(CLASS_NAME_ACTIVE);
327
- });
352
+ _clear() {
353
+ SelectorEngine__default['default'].find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
328
354
  } // Static
329
- ;
330
355
 
331
- ScrollSpy.jQueryInterface = function jQueryInterface(config) {
332
- return this.each(function () {
333
- var data = Data__default['default'].getData(this, DATA_KEY);
334
356
 
335
- var _config = typeof config === 'object' && config;
357
+ static jQueryInterface(config) {
358
+ return this.each(function () {
359
+ const data = ScrollSpy.getInstance(this) || new ScrollSpy(this, typeof config === 'object' ? config : {});
336
360
 
337
- if (!data) {
338
- data = new ScrollSpy(this, _config);
361
+ if (typeof config !== 'string') {
362
+ return;
339
363
  }
340
364
 
341
- if (typeof config === 'string') {
342
- if (typeof data[config] === 'undefined') {
343
- throw new TypeError("No method named \"" + config + "\"");
344
- }
345
-
346
- data[config]();
365
+ if (typeof data[config] === 'undefined') {
366
+ throw new TypeError(`No method named "${config}"`);
347
367
  }
348
- });
349
- };
350
-
351
- ScrollSpy.getInstance = function getInstance(element) {
352
- return Data__default['default'].getData(element, DATA_KEY);
353
- };
354
368
 
355
- _createClass(ScrollSpy, null, [{
356
- key: "VERSION",
357
- get: function get() {
358
- return VERSION;
359
- }
360
- }, {
361
- key: "Default",
362
- get: function get() {
363
- return Default;
364
- }
365
- }]);
369
+ data[config]();
370
+ });
371
+ }
366
372
 
367
- return ScrollSpy;
368
- }();
373
+ }
369
374
  /**
370
375
  * ------------------------------------------------------------------------
371
376
  * Data Api implementation
@@ -373,30 +378,17 @@
373
378
  */
374
379
 
375
380
 
376
- EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, function () {
377
- SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(function (spy) {
378
- return new ScrollSpy(spy, Manipulator__default['default'].getDataAttributes(spy));
379
- });
381
+ EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
382
+ SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
380
383
  });
381
- var $ = getjQuery();
382
384
  /**
383
385
  * ------------------------------------------------------------------------
384
386
  * jQuery
385
387
  * ------------------------------------------------------------------------
388
+ * add .ScrollSpy to jQuery only if jQuery is present
386
389
  */
387
390
 
388
- /* istanbul ignore if */
389
-
390
- if ($) {
391
- var JQUERY_NO_CONFLICT = $.fn[NAME];
392
- $.fn[NAME] = ScrollSpy.jQueryInterface;
393
- $.fn[NAME].Constructor = ScrollSpy;
394
-
395
- $.fn[NAME].noConflict = function () {
396
- $.fn[NAME] = JQUERY_NO_CONFLICT;
397
- return ScrollSpy.jQueryInterface;
398
- };
399
- }
391
+ defineJQueryPlugin(NAME, ScrollSpy);
400
392
 
401
393
  return ScrollSpy;
402
394