bootstrap 5.0.0.alpha2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +7 -4
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +10 -7
- data/assets/javascripts/bootstrap.js +2554 -2564
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/javascripts/bootstrap/alert.js +119 -115
- data/assets/javascripts/bootstrap/base-component.js +63 -0
- data/assets/javascripts/bootstrap/button.js +67 -69
- data/assets/javascripts/bootstrap/carousel.js +340 -331
- data/assets/javascripts/bootstrap/collapse.js +214 -209
- data/assets/javascripts/bootstrap/dom/data.js +35 -48
- data/assets/javascripts/bootstrap/dom/event-handler.js +105 -98
- data/assets/javascripts/bootstrap/dom/manipulator.js +26 -34
- data/assets/javascripts/bootstrap/dom/selector-engine.js +28 -41
- data/assets/javascripts/bootstrap/dropdown.js +392 -325
- data/assets/javascripts/bootstrap/modal.js +492 -434
- data/assets/javascripts/bootstrap/offcanvas.js +671 -0
- data/assets/javascripts/bootstrap/popover.js +114 -132
- data/assets/javascripts/bootstrap/scrollspy.js +172 -180
- data/assets/javascripts/bootstrap/tab.js +168 -144
- data/assets/javascripts/bootstrap/toast.js +141 -150
- data/assets/javascripts/bootstrap/tooltip.js +466 -452
- data/assets/stylesheets/_bootstrap-grid.scss +9 -9
- data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
- data/assets/stylesheets/_bootstrap.scss +5 -3
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +10 -3
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +2 -4
- data/assets/stylesheets/bootstrap/_button-group.scss +5 -7
- data/assets/stylesheets/bootstrap/_buttons.scss +2 -15
- data/assets/stylesheets/bootstrap/_card.scss +2 -29
- data/assets/stylesheets/bootstrap/_carousel.scss +35 -18
- data/assets/stylesheets/bootstrap/_close.scss +2 -3
- data/assets/stylesheets/bootstrap/_dropdown.scss +33 -29
- data/assets/stylesheets/bootstrap/_forms.scss +1 -1
- data/assets/stylesheets/bootstrap/_functions.scss +11 -12
- data/assets/stylesheets/bootstrap/_list-group.scss +23 -6
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +2 -9
- data/assets/stylesheets/bootstrap/_nav.scss +12 -0
- data/assets/stylesheets/bootstrap/_navbar.scss +15 -2
- data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +3 -3
- data/assets/stylesheets/bootstrap/_popover.scss +10 -22
- data/assets/stylesheets/bootstrap/_progress.scss +4 -1
- data/assets/stylesheets/bootstrap/_reboot.scss +48 -44
- data/assets/stylesheets/bootstrap/_root.scss +5 -5
- data/assets/stylesheets/bootstrap/_spinners.scss +18 -5
- data/assets/stylesheets/bootstrap/_tables.scss +15 -16
- data/assets/stylesheets/bootstrap/_toasts.scss +15 -12
- data/assets/stylesheets/bootstrap/_tooltip.scss +12 -12
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +133 -70
- data/assets/stylesheets/bootstrap/_variables.scss +363 -207
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +5 -5
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +21 -11
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +112 -9
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -46
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -16
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +21 -40
- data/assets/stylesheets/bootstrap/forms/_validation.scss +1 -1
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -1
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -6
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +10 -5
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -6
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +2 -4
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +26 -22
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +5 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -13
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +5 -3
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +7 -7
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +19 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +3 -2
- data/assets/stylesheets/bootstrap/utilities/_api.scss +1 -1
- data/bootstrap.gemspec +1 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +20 -5
- data/tasks/updater/network.rb +7 -1
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
- data/test/dummy_rails/app/views/pages/root.html +89 -0
- data/test/dummy_rails/config/application.rb +0 -3
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- metadata +20 -40
- data/assets/javascripts/bootstrap/dom/polyfill.js +0 -110
- data/assets/stylesheets/bootstrap/forms/_form-file.scss +0 -91
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap popover.js v5.0.0
|
|
3
|
-
* Copyright 2011-
|
|
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
|
|
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
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
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
|
-
|
|
50
|
+
if ($) {
|
|
51
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
52
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
53
|
+
$.fn[name].Constructor = plugin;
|
|
39
54
|
|
|
40
|
-
|
|
55
|
+
$.fn[name].noConflict = () => {
|
|
56
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
57
|
+
return plugin.jQueryInterface;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
};
|
|
41
62
|
|
|
42
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
93
|
-
return
|
|
130
|
+
static get EVENT_KEY() {
|
|
131
|
+
return EVENT_KEY;
|
|
94
132
|
}
|
|
95
133
|
|
|
96
|
-
|
|
134
|
+
static get DefaultType() {
|
|
135
|
+
return DefaultType;
|
|
136
|
+
} // Overrides
|
|
97
137
|
|
|
98
|
-
|
|
99
|
-
|
|
138
|
+
|
|
139
|
+
isWithContent() {
|
|
100
140
|
return this.getTitle() || this._getContent();
|
|
101
|
-
}
|
|
141
|
+
}
|
|
102
142
|
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
148
|
+
let content = this._getContent();
|
|
109
149
|
|
|
110
150
|
if (typeof content === 'function') {
|
|
111
|
-
content = content.call(this.
|
|
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
|
-
|
|
124
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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(
|
|
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
|
-
|
|
176
|
+
|
|
177
|
+
static jQueryInterface(config) {
|
|
142
178
|
return this.each(function () {
|
|
143
|
-
|
|
179
|
+
let data = Data__default['default'].get(this, DATA_KEY);
|
|
144
180
|
|
|
145
|
-
|
|
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'].
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
3
|
-
* Copyright 2011-
|
|
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/
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['./dom/
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.
|
|
10
|
-
}(this, (function (
|
|
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
|
|
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
|
-
|
|
25
|
+
const MAX_UID = 1000000;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
const toType = obj => {
|
|
28
28
|
if (obj === null || obj === undefined) {
|
|
29
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
50
|
-
|
|
49
|
+
const getSelector = element => {
|
|
50
|
+
let selector = element.getAttribute('data-bs-target');
|
|
51
51
|
|
|
52
52
|
if (!selector || selector === '#') {
|
|
53
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
71
|
-
return (obj[0] || obj).nodeType;
|
|
72
|
-
};
|
|
83
|
+
const isElement = obj => (obj[0] || obj).nodeType;
|
|
73
84
|
|
|
74
|
-
|
|
75
|
-
Object.keys(configTypes).forEach(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
|
92
|
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
82
93
|
}
|
|
83
94
|
});
|
|
84
95
|
};
|
|
85
96
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
156
|
+
const DefaultType = {
|
|
119
157
|
offset: 'number',
|
|
120
158
|
method: 'string',
|
|
121
159
|
target: '(string|element)'
|
|
122
160
|
};
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
|
|
179
|
-
targets.map(
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
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(
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
|
|
204
|
-
|
|
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
|
-
|
|
218
|
-
|
|
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
|
-
|
|
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 =
|
|
264
|
+
config.target = `#${id}`;
|
|
229
265
|
}
|
|
230
266
|
|
|
231
267
|
typeCheckConfig(NAME, config, DefaultType);
|
|
232
268
|
return config;
|
|
233
|
-
}
|
|
269
|
+
}
|
|
234
270
|
|
|
235
|
-
|
|
271
|
+
_getScrollTop() {
|
|
236
272
|
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
|
|
237
|
-
}
|
|
273
|
+
}
|
|
238
274
|
|
|
239
|
-
|
|
275
|
+
_getScrollHeight() {
|
|
240
276
|
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
|
241
|
-
}
|
|
277
|
+
}
|
|
242
278
|
|
|
243
|
-
|
|
279
|
+
_getOffsetHeight() {
|
|
244
280
|
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
|
|
245
|
-
}
|
|
281
|
+
}
|
|
246
282
|
|
|
247
|
-
|
|
248
|
-
|
|
283
|
+
_process() {
|
|
284
|
+
const scrollTop = this._getScrollTop() + this._config.offset;
|
|
249
285
|
|
|
250
|
-
|
|
286
|
+
const scrollHeight = this._getScrollHeight();
|
|
251
287
|
|
|
252
|
-
|
|
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
|
-
|
|
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 (
|
|
277
|
-
|
|
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
|
-
|
|
321
|
+
_activate(target) {
|
|
286
322
|
this._activeTarget = target;
|
|
287
323
|
|
|
288
324
|
this._clear();
|
|
289
325
|
|
|
290
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
|
|
323
|
-
SelectorEngine__default['default'].find(this._selector).filter(
|
|
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
|
-
|
|
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 (
|
|
338
|
-
|
|
361
|
+
if (typeof config !== 'string') {
|
|
362
|
+
return;
|
|
339
363
|
}
|
|
340
364
|
|
|
341
|
-
if (typeof config === '
|
|
342
|
-
|
|
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
|
-
|
|
356
|
-
|
|
357
|
-
|
|
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
|
-
|
|
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,
|
|
377
|
-
SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(
|
|
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
|
-
|
|
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
|
|