bootstrap 5.0.2 → 5.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
}));
|