bootstrap 5.0.2 → 5.1.3
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/README.md +1 -1
- data/assets/javascripts/bootstrap/alert.js +78 -48
- data/assets/javascripts/bootstrap/base-component.js +22 -17
- data/assets/javascripts/bootstrap/button.js +19 -12
- data/assets/javascripts/bootstrap/carousel.js +66 -44
- data/assets/javascripts/bootstrap/collapse.js +114 -131
- data/assets/javascripts/bootstrap/dom/data.js +5 -5
- data/assets/javascripts/bootstrap/dom/event-handler.js +11 -5
- data/assets/javascripts/bootstrap/dom/manipulator.js +6 -6
- data/assets/javascripts/bootstrap/dom/selector-engine.js +49 -7
- data/assets/javascripts/bootstrap/dropdown.js +96 -106
- data/assets/javascripts/bootstrap/modal.js +241 -87
- data/assets/javascripts/bootstrap/offcanvas.js +203 -57
- data/assets/javascripts/bootstrap/popover.js +25 -58
- data/assets/javascripts/bootstrap/scrollspy.js +47 -66
- data/assets/javascripts/bootstrap/tab.js +41 -22
- data/assets/javascripts/bootstrap/toast.js +124 -29
- data/assets/javascripts/bootstrap/tooltip.js +122 -104
- data/assets/javascripts/bootstrap-sprockets.js +7 -7
- data/assets/javascripts/bootstrap.js +660 -630
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/stylesheets/_bootstrap-grid.scss +3 -1
- data/assets/stylesheets/_bootstrap-reboot.scss +2 -4
- data/assets/stylesheets/_bootstrap.scss +2 -1
- data/assets/stylesheets/bootstrap/_card.scss +2 -1
- data/assets/stylesheets/bootstrap/_functions.scss +51 -12
- data/assets/stylesheets/bootstrap/_grid.scss +11 -0
- data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +1 -11
- data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
- data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -0
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
- data/assets/stylesheets/bootstrap/_root.scss +40 -2
- data/assets/stylesheets/bootstrap/_tables.scss +8 -4
- data/assets/stylesheets/bootstrap/_toasts.scss +2 -2
- data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
- data/assets/stylesheets/bootstrap/_variables.scss +184 -11
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +2 -0
- data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +29 -10
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +1 -1
- data/bootstrap.gemspec +3 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +6 -2
- metadata +12 -8
@@ -1,30 +1,28 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap scrollspy.js v5.
|
2
|
+
* Bootstrap scrollspy.js v5.1.3 (https://getbootstrap.com/)
|
3
3
|
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4
4
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5
5
|
*/
|
6
6
|
(function (global, factory) {
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/
|
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
|
+
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
15
|
+
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
16
|
+
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
17
|
+
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
18
18
|
|
19
19
|
/**
|
20
20
|
* --------------------------------------------------------------------------
|
21
|
-
* Bootstrap (v5.
|
21
|
+
* Bootstrap (v5.1.3): util/index.js
|
22
22
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
23
23
|
* --------------------------------------------------------------------------
|
24
24
|
*/
|
25
25
|
|
26
|
-
const MAX_UID = 1000000;
|
27
|
-
|
28
26
|
const toType = obj => {
|
29
27
|
if (obj === null || obj === undefined) {
|
30
28
|
return `${obj}`;
|
@@ -32,20 +30,6 @@
|
|
32
30
|
|
33
31
|
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
34
32
|
};
|
35
|
-
/**
|
36
|
-
* --------------------------------------------------------------------------
|
37
|
-
* Public Util Api
|
38
|
-
* --------------------------------------------------------------------------
|
39
|
-
*/
|
40
|
-
|
41
|
-
|
42
|
-
const getUID = prefix => {
|
43
|
-
do {
|
44
|
-
prefix += Math.floor(Math.random() * MAX_UID);
|
45
|
-
} while (document.getElementById(prefix));
|
46
|
-
|
47
|
-
return prefix;
|
48
|
-
};
|
49
33
|
|
50
34
|
const getSelector = element => {
|
51
35
|
let selector = element.getAttribute('data-bs-target');
|
@@ -93,6 +77,19 @@
|
|
93
77
|
return typeof obj.nodeType !== 'undefined';
|
94
78
|
};
|
95
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
|
+
|
96
93
|
const typeCheckConfig = (componentName, config, configTypes) => {
|
97
94
|
Object.keys(configTypes).forEach(property => {
|
98
95
|
const expectedTypes = configTypes[property];
|
@@ -155,7 +152,7 @@
|
|
155
152
|
|
156
153
|
/**
|
157
154
|
* --------------------------------------------------------------------------
|
158
|
-
* Bootstrap (v5.
|
155
|
+
* Bootstrap (v5.1.3): scrollspy.js
|
159
156
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
160
157
|
* --------------------------------------------------------------------------
|
161
158
|
*/
|
@@ -189,6 +186,7 @@
|
|
189
186
|
const SELECTOR_NAV_LINKS = '.nav-link';
|
190
187
|
const SELECTOR_NAV_ITEMS = '.nav-item';
|
191
188
|
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
189
|
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
|
192
190
|
const SELECTOR_DROPDOWN = '.dropdown';
|
193
191
|
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
194
192
|
const METHOD_OFFSET = 'offset';
|
@@ -199,17 +197,16 @@
|
|
199
197
|
* ------------------------------------------------------------------------
|
200
198
|
*/
|
201
199
|
|
202
|
-
class ScrollSpy extends BaseComponent__default
|
200
|
+
class ScrollSpy extends BaseComponent__default.default {
|
203
201
|
constructor(element, config) {
|
204
202
|
super(element);
|
205
203
|
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
|
206
204
|
this._config = this._getConfig(config);
|
207
|
-
this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
|
208
205
|
this._offsets = [];
|
209
206
|
this._targets = [];
|
210
207
|
this._activeTarget = null;
|
211
208
|
this._scrollHeight = 0;
|
212
|
-
EventHandler__default
|
209
|
+
EventHandler__default.default.on(this._scrollElement, EVENT_SCROLL, () => this._process());
|
213
210
|
this.refresh();
|
214
211
|
|
215
212
|
this._process();
|
@@ -232,16 +229,16 @@
|
|
232
229
|
this._offsets = [];
|
233
230
|
this._targets = [];
|
234
231
|
this._scrollHeight = this._getScrollHeight();
|
235
|
-
const targets = SelectorEngine__default
|
232
|
+
const targets = SelectorEngine__default.default.find(SELECTOR_LINK_ITEMS, this._config.target);
|
236
233
|
targets.map(element => {
|
237
234
|
const targetSelector = getSelectorFromElement(element);
|
238
|
-
const target = targetSelector ? SelectorEngine__default
|
235
|
+
const target = targetSelector ? SelectorEngine__default.default.findOne(targetSelector) : null;
|
239
236
|
|
240
237
|
if (target) {
|
241
238
|
const targetBCR = target.getBoundingClientRect();
|
242
239
|
|
243
240
|
if (targetBCR.width || targetBCR.height) {
|
244
|
-
return [Manipulator__default
|
241
|
+
return [Manipulator__default.default[offsetMethod](target).top + offsetBase, targetSelector];
|
245
242
|
}
|
246
243
|
}
|
247
244
|
|
@@ -254,30 +251,17 @@
|
|
254
251
|
}
|
255
252
|
|
256
253
|
dispose() {
|
257
|
-
EventHandler__default
|
254
|
+
EventHandler__default.default.off(this._scrollElement, EVENT_KEY);
|
258
255
|
super.dispose();
|
259
256
|
} // Private
|
260
257
|
|
261
258
|
|
262
259
|
_getConfig(config) {
|
263
260
|
config = { ...Default,
|
264
|
-
...Manipulator__default
|
261
|
+
...Manipulator__default.default.getDataAttributes(this._element),
|
265
262
|
...(typeof config === 'object' && config ? config : {})
|
266
263
|
};
|
267
|
-
|
268
|
-
if (typeof config.target !== 'string' && isElement(config.target)) {
|
269
|
-
let {
|
270
|
-
id
|
271
|
-
} = config.target;
|
272
|
-
|
273
|
-
if (!id) {
|
274
|
-
id = getUID(NAME);
|
275
|
-
config.target.id = id;
|
276
|
-
}
|
277
|
-
|
278
|
-
config.target = `#${id}`;
|
279
|
-
}
|
280
|
-
|
264
|
+
config.target = getElement(config.target) || document.documentElement;
|
281
265
|
typeCheckConfig(NAME, config, DefaultType);
|
282
266
|
return config;
|
283
267
|
}
|
@@ -337,34 +321,31 @@
|
|
337
321
|
|
338
322
|
this._clear();
|
339
323
|
|
340
|
-
const queries =
|
341
|
-
|
342
|
-
|
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);
|
343
327
|
|
344
328
|
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
345
|
-
SelectorEngine__default
|
346
|
-
link.classList.add(CLASS_NAME_ACTIVE);
|
329
|
+
SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
|
347
330
|
} else {
|
348
|
-
|
349
|
-
link.classList.add(CLASS_NAME_ACTIVE);
|
350
|
-
SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
|
331
|
+
SelectorEngine__default.default.parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
|
351
332
|
// Set triggered links parents as active
|
352
333
|
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
353
|
-
SelectorEngine__default
|
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
|
354
335
|
|
355
|
-
SelectorEngine__default
|
356
|
-
SelectorEngine__default
|
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));
|
357
338
|
});
|
358
339
|
});
|
359
340
|
}
|
360
341
|
|
361
|
-
EventHandler__default
|
342
|
+
EventHandler__default.default.trigger(this._scrollElement, EVENT_ACTIVATE, {
|
362
343
|
relatedTarget: target
|
363
344
|
});
|
364
345
|
}
|
365
346
|
|
366
347
|
_clear() {
|
367
|
-
SelectorEngine__default
|
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));
|
368
349
|
} // Static
|
369
350
|
|
370
351
|
|
@@ -392,8 +373,8 @@
|
|
392
373
|
*/
|
393
374
|
|
394
375
|
|
395
|
-
EventHandler__default
|
396
|
-
SelectorEngine__default
|
376
|
+
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
|
377
|
+
SelectorEngine__default.default.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
|
397
378
|
});
|
398
379
|
/**
|
399
380
|
* ------------------------------------------------------------------------
|
@@ -406,4 +387,4 @@
|
|
406
387
|
|
407
388
|
return ScrollSpy;
|
408
389
|
|
409
|
-
}))
|
390
|
+
}));
|
@@ -1,19 +1,26 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap tab.js v5.
|
2
|
+
* Bootstrap tab.js v5.1.3 (https://getbootstrap.com/)
|
3
3
|
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4
4
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5
5
|
*/
|
6
6
|
(function (global, factory) {
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/
|
8
|
-
typeof define === 'function' && define.amd ? define(['./dom/
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.
|
10
|
-
}(this, (function (
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.EventHandler, global.SelectorEngine, global.Base));
|
10
|
+
})(this, (function (EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
11
11
|
|
12
|
-
|
12
|
+
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
15
|
+
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
16
|
+
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
17
|
+
|
18
|
+
/**
|
19
|
+
* --------------------------------------------------------------------------
|
20
|
+
* Bootstrap (v5.1.3): util/index.js
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
22
|
+
* --------------------------------------------------------------------------
|
23
|
+
*/
|
17
24
|
|
18
25
|
const getSelector = element => {
|
19
26
|
let selector = element.getAttribute('data-bs-target');
|
@@ -59,8 +66,20 @@
|
|
59
66
|
|
60
67
|
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
61
68
|
};
|
69
|
+
/**
|
70
|
+
* Trick to restart an element's animation
|
71
|
+
*
|
72
|
+
* @param {HTMLElement} element
|
73
|
+
* @return void
|
74
|
+
*
|
75
|
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
76
|
+
*/
|
62
77
|
|
63
|
-
|
78
|
+
|
79
|
+
const reflow = element => {
|
80
|
+
// eslint-disable-next-line no-unused-expressions
|
81
|
+
element.offsetHeight;
|
82
|
+
};
|
64
83
|
|
65
84
|
const getjQuery = () => {
|
66
85
|
const {
|
@@ -112,7 +131,7 @@
|
|
112
131
|
|
113
132
|
/**
|
114
133
|
* --------------------------------------------------------------------------
|
115
|
-
* Bootstrap (v5.
|
134
|
+
* Bootstrap (v5.1.3): tab.js
|
116
135
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
117
136
|
* --------------------------------------------------------------------------
|
118
137
|
*/
|
@@ -148,7 +167,7 @@
|
|
148
167
|
* ------------------------------------------------------------------------
|
149
168
|
*/
|
150
169
|
|
151
|
-
class Tab extends BaseComponent__default
|
170
|
+
class Tab extends BaseComponent__default.default {
|
152
171
|
// Getters
|
153
172
|
static get NAME() {
|
154
173
|
return NAME;
|
@@ -167,14 +186,14 @@
|
|
167
186
|
|
168
187
|
if (listElement) {
|
169
188
|
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
|
170
|
-
previous = SelectorEngine__default
|
189
|
+
previous = SelectorEngine__default.default.find(itemSelector, listElement);
|
171
190
|
previous = previous[previous.length - 1];
|
172
191
|
}
|
173
192
|
|
174
|
-
const hideEvent = previous ? EventHandler__default
|
193
|
+
const hideEvent = previous ? EventHandler__default.default.trigger(previous, EVENT_HIDE, {
|
175
194
|
relatedTarget: this._element
|
176
195
|
}) : null;
|
177
|
-
const showEvent = EventHandler__default
|
196
|
+
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
|
178
197
|
relatedTarget: previous
|
179
198
|
});
|
180
199
|
|
@@ -185,10 +204,10 @@
|
|
185
204
|
this._activate(this._element, listElement);
|
186
205
|
|
187
206
|
const complete = () => {
|
188
|
-
EventHandler__default
|
207
|
+
EventHandler__default.default.trigger(previous, EVENT_HIDDEN, {
|
189
208
|
relatedTarget: this._element
|
190
209
|
});
|
191
|
-
EventHandler__default
|
210
|
+
EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
|
192
211
|
relatedTarget: previous
|
193
212
|
});
|
194
213
|
};
|
@@ -202,7 +221,7 @@
|
|
202
221
|
|
203
222
|
|
204
223
|
_activate(element, container, callback) {
|
205
|
-
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default
|
224
|
+
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default.default.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default.default.children(container, SELECTOR_ACTIVE);
|
206
225
|
const active = activeElements[0];
|
207
226
|
const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
|
208
227
|
|
@@ -220,7 +239,7 @@
|
|
220
239
|
_transitionComplete(element, active, callback) {
|
221
240
|
if (active) {
|
222
241
|
active.classList.remove(CLASS_NAME_ACTIVE);
|
223
|
-
const dropdownChild = SelectorEngine__default
|
242
|
+
const dropdownChild = SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
|
224
243
|
|
225
244
|
if (dropdownChild) {
|
226
245
|
dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
|
@@ -253,7 +272,7 @@
|
|
253
272
|
const dropdownElement = element.closest(SELECTOR_DROPDOWN);
|
254
273
|
|
255
274
|
if (dropdownElement) {
|
256
|
-
SelectorEngine__default
|
275
|
+
SelectorEngine__default.default.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
|
257
276
|
}
|
258
277
|
|
259
278
|
element.setAttribute('aria-expanded', true);
|
@@ -287,7 +306,7 @@
|
|
287
306
|
*/
|
288
307
|
|
289
308
|
|
290
|
-
EventHandler__default
|
309
|
+
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
291
310
|
if (['A', 'AREA'].includes(this.tagName)) {
|
292
311
|
event.preventDefault();
|
293
312
|
}
|
@@ -310,4 +329,4 @@
|
|
310
329
|
|
311
330
|
return Tab;
|
312
331
|
|
313
|
-
}))
|
332
|
+
}));
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap toast.js v5.
|
2
|
+
* Bootstrap toast.js v5.1.3 (https://getbootstrap.com/)
|
3
3
|
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4
4
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5
5
|
*/
|
@@ -7,13 +7,20 @@
|
|
7
7
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
|
8
8
|
typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/manipulator', './base-component'], factory) :
|
9
9
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.EventHandler, global.Manipulator, global.Base));
|
10
|
-
}(this, (function (EventHandler, Manipulator, BaseComponent) { 'use strict';
|
10
|
+
})(this, (function (EventHandler, Manipulator, BaseComponent) { 'use strict';
|
11
11
|
|
12
|
-
|
12
|
+
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
15
|
+
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
16
|
+
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
17
|
+
|
18
|
+
/**
|
19
|
+
* --------------------------------------------------------------------------
|
20
|
+
* Bootstrap (v5.1.3): util/index.js
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
22
|
+
* --------------------------------------------------------------------------
|
23
|
+
*/
|
17
24
|
|
18
25
|
const toType = obj => {
|
19
26
|
if (obj === null || obj === undefined) {
|
@@ -23,6 +30,35 @@
|
|
23
30
|
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
24
31
|
};
|
25
32
|
|
33
|
+
const getSelector = element => {
|
34
|
+
let selector = element.getAttribute('data-bs-target');
|
35
|
+
|
36
|
+
if (!selector || selector === '#') {
|
37
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
38
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
39
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
40
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
41
|
+
|
42
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
43
|
+
return null;
|
44
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
45
|
+
|
46
|
+
|
47
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
48
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
49
|
+
}
|
50
|
+
|
51
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
52
|
+
}
|
53
|
+
|
54
|
+
return selector;
|
55
|
+
};
|
56
|
+
|
57
|
+
const getElementFromSelector = element => {
|
58
|
+
const selector = getSelector(element);
|
59
|
+
return selector ? document.querySelector(selector) : null;
|
60
|
+
};
|
61
|
+
|
26
62
|
const isElement = obj => {
|
27
63
|
if (!obj || typeof obj !== 'object') {
|
28
64
|
return false;
|
@@ -47,7 +83,35 @@
|
|
47
83
|
});
|
48
84
|
};
|
49
85
|
|
50
|
-
const
|
86
|
+
const isDisabled = element => {
|
87
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
88
|
+
return true;
|
89
|
+
}
|
90
|
+
|
91
|
+
if (element.classList.contains('disabled')) {
|
92
|
+
return true;
|
93
|
+
}
|
94
|
+
|
95
|
+
if (typeof element.disabled !== 'undefined') {
|
96
|
+
return element.disabled;
|
97
|
+
}
|
98
|
+
|
99
|
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
100
|
+
};
|
101
|
+
/**
|
102
|
+
* Trick to restart an element's animation
|
103
|
+
*
|
104
|
+
* @param {HTMLElement} element
|
105
|
+
* @return void
|
106
|
+
*
|
107
|
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
108
|
+
*/
|
109
|
+
|
110
|
+
|
111
|
+
const reflow = element => {
|
112
|
+
// eslint-disable-next-line no-unused-expressions
|
113
|
+
element.offsetHeight;
|
114
|
+
};
|
51
115
|
|
52
116
|
const getjQuery = () => {
|
53
117
|
const {
|
@@ -99,7 +163,33 @@
|
|
99
163
|
|
100
164
|
/**
|
101
165
|
* --------------------------------------------------------------------------
|
102
|
-
* Bootstrap (v5.
|
166
|
+
* Bootstrap (v5.1.3): util/component-functions.js
|
167
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
168
|
+
* --------------------------------------------------------------------------
|
169
|
+
*/
|
170
|
+
|
171
|
+
const enableDismissTrigger = (component, method = 'hide') => {
|
172
|
+
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
|
173
|
+
const name = component.NAME;
|
174
|
+
EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
|
175
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
176
|
+
event.preventDefault();
|
177
|
+
}
|
178
|
+
|
179
|
+
if (isDisabled(this)) {
|
180
|
+
return;
|
181
|
+
}
|
182
|
+
|
183
|
+
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
184
|
+
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
185
|
+
|
186
|
+
instance[method]();
|
187
|
+
});
|
188
|
+
};
|
189
|
+
|
190
|
+
/**
|
191
|
+
* --------------------------------------------------------------------------
|
192
|
+
* Bootstrap (v5.1.3): toast.js
|
103
193
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
104
194
|
* --------------------------------------------------------------------------
|
105
195
|
*/
|
@@ -112,7 +202,6 @@
|
|
112
202
|
const NAME = 'toast';
|
113
203
|
const DATA_KEY = 'bs.toast';
|
114
204
|
const EVENT_KEY = `.${DATA_KEY}`;
|
115
|
-
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
116
205
|
const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
|
117
206
|
const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
|
118
207
|
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
|
@@ -122,7 +211,8 @@
|
|
122
211
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
123
212
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
124
213
|
const CLASS_NAME_FADE = 'fade';
|
125
|
-
const CLASS_NAME_HIDE = 'hide';
|
214
|
+
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
|
215
|
+
|
126
216
|
const CLASS_NAME_SHOW = 'show';
|
127
217
|
const CLASS_NAME_SHOWING = 'showing';
|
128
218
|
const DefaultType = {
|
@@ -135,14 +225,13 @@
|
|
135
225
|
autohide: true,
|
136
226
|
delay: 5000
|
137
227
|
};
|
138
|
-
const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="toast"]';
|
139
228
|
/**
|
140
229
|
* ------------------------------------------------------------------------
|
141
230
|
* Class Definition
|
142
231
|
* ------------------------------------------------------------------------
|
143
232
|
*/
|
144
233
|
|
145
|
-
class Toast extends BaseComponent__default
|
234
|
+
class Toast extends BaseComponent__default.default {
|
146
235
|
constructor(element, config) {
|
147
236
|
super(element);
|
148
237
|
this._config = this._getConfig(config);
|
@@ -168,7 +257,7 @@
|
|
168
257
|
|
169
258
|
|
170
259
|
show() {
|
171
|
-
const showEvent = EventHandler__default
|
260
|
+
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
|
172
261
|
|
173
262
|
if (showEvent.defaultPrevented) {
|
174
263
|
return;
|
@@ -183,17 +272,18 @@
|
|
183
272
|
const complete = () => {
|
184
273
|
this._element.classList.remove(CLASS_NAME_SHOWING);
|
185
274
|
|
186
|
-
this._element
|
187
|
-
|
188
|
-
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
|
275
|
+
EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
|
189
276
|
|
190
277
|
this._maybeScheduleHide();
|
191
278
|
};
|
192
279
|
|
193
|
-
this._element.classList.remove(CLASS_NAME_HIDE);
|
280
|
+
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
|
281
|
+
|
194
282
|
|
195
283
|
reflow(this._element);
|
196
284
|
|
285
|
+
this._element.classList.add(CLASS_NAME_SHOW);
|
286
|
+
|
197
287
|
this._element.classList.add(CLASS_NAME_SHOWING);
|
198
288
|
|
199
289
|
this._queueCallback(complete, this._element, this._config.animation);
|
@@ -204,19 +294,24 @@
|
|
204
294
|
return;
|
205
295
|
}
|
206
296
|
|
207
|
-
const hideEvent = EventHandler__default
|
297
|
+
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
|
208
298
|
|
209
299
|
if (hideEvent.defaultPrevented) {
|
210
300
|
return;
|
211
301
|
}
|
212
302
|
|
213
303
|
const complete = () => {
|
214
|
-
this._element.classList.add(CLASS_NAME_HIDE);
|
304
|
+
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
|
305
|
+
|
215
306
|
|
216
|
-
|
307
|
+
this._element.classList.remove(CLASS_NAME_SHOWING);
|
308
|
+
|
309
|
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
310
|
+
|
311
|
+
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
|
217
312
|
};
|
218
313
|
|
219
|
-
this._element.classList.
|
314
|
+
this._element.classList.add(CLASS_NAME_SHOWING);
|
220
315
|
|
221
316
|
this._queueCallback(complete, this._element, this._config.animation);
|
222
317
|
}
|
@@ -234,7 +329,7 @@
|
|
234
329
|
|
235
330
|
_getConfig(config) {
|
236
331
|
config = { ...Default,
|
237
|
-
...Manipulator__default
|
332
|
+
...Manipulator__default.default.getDataAttributes(this._element),
|
238
333
|
...(typeof config === 'object' && config ? config : {})
|
239
334
|
};
|
240
335
|
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
@@ -284,11 +379,10 @@
|
|
284
379
|
}
|
285
380
|
|
286
381
|
_setListeners() {
|
287
|
-
EventHandler__default
|
288
|
-
EventHandler__default
|
289
|
-
EventHandler__default
|
290
|
-
EventHandler__default
|
291
|
-
EventHandler__default['default'].on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
|
382
|
+
EventHandler__default.default.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
|
383
|
+
EventHandler__default.default.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
|
384
|
+
EventHandler__default.default.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
|
385
|
+
EventHandler__default.default.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
|
292
386
|
}
|
293
387
|
|
294
388
|
_clearTimeout() {
|
@@ -312,6 +406,8 @@
|
|
312
406
|
}
|
313
407
|
|
314
408
|
}
|
409
|
+
|
410
|
+
enableDismissTrigger(Toast);
|
315
411
|
/**
|
316
412
|
* ------------------------------------------------------------------------
|
317
413
|
* jQuery
|
@@ -319,9 +415,8 @@
|
|
319
415
|
* add .Toast to jQuery only if jQuery is present
|
320
416
|
*/
|
321
417
|
|
322
|
-
|
323
418
|
defineJQueryPlugin(Toast);
|
324
419
|
|
325
420
|
return Toast;
|
326
421
|
|
327
|
-
}))
|
422
|
+
}));
|