@openeuropa/bcl-theme-default 1.9.0 → 1.9.2
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.
- package/css/color-scheme.min.css +1 -1
- package/css/color-scheme.min.css.map +1 -1
- package/css/oe-bcl-ckeditor5.min.css +1 -1
- package/css/oe-bcl-ckeditor5.min.css.map +1 -1
- package/css/oe-bcl-default.css +2312 -680
- package/css/oe-bcl-default.css.map +1 -1
- package/css/oe-bcl-default.min.css +1 -1
- package/css/oe-bcl-default.min.css.map +1 -1
- package/icons/bcl-default-icons.svg +1 -1
- package/icons/bootstrap-icons.svg +1 -1
- package/js/oe-bcl-default.bundle.js +842 -699
- package/js/oe-bcl-default.bundle.js.map +1 -1
- package/js/oe-bcl-default.bundle.min.js +1 -1
- package/js/oe-bcl-default.bundle.min.js.map +1 -1
- package/js/oe-bcl-default.esm.js +830 -688
- package/js/oe-bcl-default.esm.js.map +1 -1
- package/js/oe-bcl-default.esm.min.js +1 -1
- package/js/oe-bcl-default.esm.min.js.map +1 -1
- package/js/oe-bcl-default.umd.js +842 -699
- package/js/oe-bcl-default.umd.js.map +1 -1
- package/js/oe-bcl-default.umd.min.js +1 -1
- package/js/oe-bcl-default.umd.min.js.map +1 -1
- package/package.json +5 -5
- package/src/js/accordion-toggle/accordion-toggle.js +51 -0
- package/src/js/index.esm.js +6 -4
- package/src/js/index.umd.js +6 -4
- package/src/scss/_inpage-navigation.scss +69 -4
- package/src/scss/base/_colors.scss +31 -3
- package/src/scss/color_scheme/_alert.scss +14 -10
- package/src/scss/color_scheme/_background.scss +1 -0
- package/src/scss/color_scheme/_list_group.scss +15 -10
- package/src/scss/oe-bcl-default.scss +4 -2
- package/templates/bcl-accordion/accordion.html.twig +85 -46
- package/templates/bcl-inpage-navigation/inpage-navigation.html.twig +9 -1
- package/templates/bcl-mega-menu/mega-menu.html.twig +0 -123
package/js/oe-bcl-default.umd.js
CHANGED
|
@@ -6,7 +6,55 @@
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* --------------------------------------------------------------------------
|
|
9
|
-
* Bootstrap
|
|
9
|
+
* Bootstrap dom/data.js
|
|
10
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
11
|
+
* --------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Constants
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const elementMap = new Map();
|
|
19
|
+
var Data = {
|
|
20
|
+
set(element, key, instance) {
|
|
21
|
+
if (!elementMap.has(element)) {
|
|
22
|
+
elementMap.set(element, new Map());
|
|
23
|
+
}
|
|
24
|
+
const instanceMap = elementMap.get(element);
|
|
25
|
+
|
|
26
|
+
// make it clear we only want one instance per element
|
|
27
|
+
// can be removed later when multiple key/instances are fine to be used
|
|
28
|
+
if (!instanceMap.has(key) && instanceMap.size !== 0) {
|
|
29
|
+
// eslint-disable-next-line no-console
|
|
30
|
+
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
instanceMap.set(key, instance);
|
|
34
|
+
},
|
|
35
|
+
get(element, key) {
|
|
36
|
+
if (elementMap.has(element)) {
|
|
37
|
+
return elementMap.get(element).get(key) || null;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
},
|
|
41
|
+
remove(element, key) {
|
|
42
|
+
if (!elementMap.has(element)) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const instanceMap = elementMap.get(element);
|
|
46
|
+
instanceMap.delete(key);
|
|
47
|
+
|
|
48
|
+
// free up element references if there are no instances left for an element
|
|
49
|
+
if (instanceMap.size === 0) {
|
|
50
|
+
elementMap.delete(element);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* --------------------------------------------------------------------------
|
|
57
|
+
* Bootstrap util/index.js
|
|
10
58
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
11
59
|
* --------------------------------------------------------------------------
|
|
12
60
|
*/
|
|
@@ -15,6 +63,19 @@
|
|
|
15
63
|
const MILLISECONDS_MULTIPLIER = 1000;
|
|
16
64
|
const TRANSITION_END = 'transitionend';
|
|
17
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Properly escape IDs selectors to handle weird IDs
|
|
68
|
+
* @param {string} selector
|
|
69
|
+
* @returns {string}
|
|
70
|
+
*/
|
|
71
|
+
const parseSelector = selector => {
|
|
72
|
+
if (selector && window.CSS && window.CSS.escape) {
|
|
73
|
+
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
|
|
74
|
+
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
|
|
75
|
+
}
|
|
76
|
+
return selector;
|
|
77
|
+
};
|
|
78
|
+
|
|
18
79
|
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
|
|
19
80
|
const toType = object => {
|
|
20
81
|
if (object === null || object === undefined) {
|
|
@@ -33,38 +94,6 @@
|
|
|
33
94
|
} while (document.getElementById(prefix));
|
|
34
95
|
return prefix;
|
|
35
96
|
};
|
|
36
|
-
const getSelector = element => {
|
|
37
|
-
let selector = element.getAttribute('data-bs-target');
|
|
38
|
-
if (!selector || selector === '#') {
|
|
39
|
-
let hrefAttribute = element.getAttribute('href');
|
|
40
|
-
|
|
41
|
-
// The only valid content that could double as a selector are IDs or classes,
|
|
42
|
-
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
43
|
-
// `document.querySelector` will rightfully complain it is invalid.
|
|
44
|
-
// See https://github.com/twbs/bootstrap/issues/32273
|
|
45
|
-
if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Just in case some CMS puts out a full URL with the anchor appended
|
|
50
|
-
if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
|
|
51
|
-
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
|
|
52
|
-
}
|
|
53
|
-
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
|
|
54
|
-
}
|
|
55
|
-
return selector;
|
|
56
|
-
};
|
|
57
|
-
const getSelectorFromElement = element => {
|
|
58
|
-
const selector = getSelector(element);
|
|
59
|
-
if (selector) {
|
|
60
|
-
return document.querySelector(selector) ? selector : null;
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
};
|
|
64
|
-
const getElementFromSelector = element => {
|
|
65
|
-
const selector = getSelector(element);
|
|
66
|
-
return selector ? document.querySelector(selector) : null;
|
|
67
|
-
};
|
|
68
97
|
const getTransitionDurationFromElement = element => {
|
|
69
98
|
if (!element) {
|
|
70
99
|
return 0;
|
|
@@ -91,7 +120,7 @@
|
|
|
91
120
|
const triggerTransitionEnd = element => {
|
|
92
121
|
element.dispatchEvent(new Event(TRANSITION_END));
|
|
93
122
|
};
|
|
94
|
-
const isElement$
|
|
123
|
+
const isElement$2 = object => {
|
|
95
124
|
if (!object || typeof object !== 'object') {
|
|
96
125
|
return false;
|
|
97
126
|
}
|
|
@@ -100,18 +129,18 @@
|
|
|
100
129
|
}
|
|
101
130
|
return typeof object.nodeType !== 'undefined';
|
|
102
131
|
};
|
|
103
|
-
const getElement = object => {
|
|
132
|
+
const getElement$1 = object => {
|
|
104
133
|
// it's a jQuery object or a node element
|
|
105
|
-
if (isElement$
|
|
134
|
+
if (isElement$2(object)) {
|
|
106
135
|
return object.jquery ? object[0] : object;
|
|
107
136
|
}
|
|
108
137
|
if (typeof object === 'string' && object.length > 0) {
|
|
109
|
-
return document.querySelector(object);
|
|
138
|
+
return document.querySelector(parseSelector(object));
|
|
110
139
|
}
|
|
111
140
|
return null;
|
|
112
141
|
};
|
|
113
142
|
const isVisible = element => {
|
|
114
|
-
if (!isElement$
|
|
143
|
+
if (!isElement$2(element) || element.getClientRects().length === 0) {
|
|
115
144
|
return false;
|
|
116
145
|
}
|
|
117
146
|
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
|
@@ -176,32 +205,32 @@
|
|
|
176
205
|
const reflow = element => {
|
|
177
206
|
element.offsetHeight; // eslint-disable-line no-unused-expressions
|
|
178
207
|
};
|
|
179
|
-
const getjQuery = () => {
|
|
208
|
+
const getjQuery$1 = () => {
|
|
180
209
|
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
181
210
|
return window.jQuery;
|
|
182
211
|
}
|
|
183
212
|
return null;
|
|
184
213
|
};
|
|
185
|
-
const DOMContentLoadedCallbacks = [];
|
|
186
|
-
const onDOMContentLoaded = callback => {
|
|
214
|
+
const DOMContentLoadedCallbacks$1 = [];
|
|
215
|
+
const onDOMContentLoaded$1 = callback => {
|
|
187
216
|
if (document.readyState === 'loading') {
|
|
188
217
|
// add listener on the first call when the document is in loading state
|
|
189
|
-
if (!DOMContentLoadedCallbacks.length) {
|
|
218
|
+
if (!DOMContentLoadedCallbacks$1.length) {
|
|
190
219
|
document.addEventListener('DOMContentLoaded', () => {
|
|
191
|
-
for (const callback of DOMContentLoadedCallbacks) {
|
|
220
|
+
for (const callback of DOMContentLoadedCallbacks$1) {
|
|
192
221
|
callback();
|
|
193
222
|
}
|
|
194
223
|
});
|
|
195
224
|
}
|
|
196
|
-
DOMContentLoadedCallbacks.push(callback);
|
|
225
|
+
DOMContentLoadedCallbacks$1.push(callback);
|
|
197
226
|
} else {
|
|
198
227
|
callback();
|
|
199
228
|
}
|
|
200
229
|
};
|
|
201
230
|
const isRTL = () => document.documentElement.dir === 'rtl';
|
|
202
|
-
const defineJQueryPlugin = plugin => {
|
|
203
|
-
onDOMContentLoaded(() => {
|
|
204
|
-
const $ = getjQuery();
|
|
231
|
+
const defineJQueryPlugin$1 = plugin => {
|
|
232
|
+
onDOMContentLoaded$1(() => {
|
|
233
|
+
const $ = getjQuery$1();
|
|
205
234
|
/* istanbul ignore if */
|
|
206
235
|
if ($) {
|
|
207
236
|
const name = plugin.NAME;
|
|
@@ -215,10 +244,8 @@
|
|
|
215
244
|
}
|
|
216
245
|
});
|
|
217
246
|
};
|
|
218
|
-
const execute =
|
|
219
|
-
|
|
220
|
-
callback();
|
|
221
|
-
}
|
|
247
|
+
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
|
248
|
+
return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
|
|
222
249
|
};
|
|
223
250
|
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
|
224
251
|
if (!waitForTransition) {
|
|
@@ -273,7 +300,7 @@
|
|
|
273
300
|
|
|
274
301
|
/**
|
|
275
302
|
* --------------------------------------------------------------------------
|
|
276
|
-
* Bootstrap
|
|
303
|
+
* Bootstrap dom/event-handler.js
|
|
277
304
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
278
305
|
* --------------------------------------------------------------------------
|
|
279
306
|
*/
|
|
@@ -344,7 +371,7 @@
|
|
|
344
371
|
}
|
|
345
372
|
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
|
|
346
373
|
const isDelegated = typeof handler === 'string';
|
|
347
|
-
//
|
|
374
|
+
// TODO: tooltip passes `false` instead of selector, so we need to check
|
|
348
375
|
const callable = isDelegated ? delegationFunction : handler || delegationFunction;
|
|
349
376
|
let typeEvent = getTypeEvent(originalTypeEvent);
|
|
350
377
|
if (!nativeEvents.has(typeEvent)) {
|
|
@@ -396,9 +423,8 @@
|
|
|
396
423
|
}
|
|
397
424
|
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
|
|
398
425
|
const storeElementEvent = events[typeEvent] || {};
|
|
399
|
-
for (const handlerKey of Object.
|
|
426
|
+
for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
|
|
400
427
|
if (handlerKey.includes(namespace)) {
|
|
401
|
-
const event = storeElementEvent[handlerKey];
|
|
402
428
|
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
|
|
403
429
|
}
|
|
404
430
|
}
|
|
@@ -437,10 +463,9 @@
|
|
|
437
463
|
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
|
|
438
464
|
}
|
|
439
465
|
}
|
|
440
|
-
for (const keyHandlers of Object.
|
|
466
|
+
for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
|
|
441
467
|
const handlerKey = keyHandlers.replace(stripUidRegex, '');
|
|
442
468
|
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
|
|
443
|
-
const event = storeElementEvent[keyHandlers];
|
|
444
469
|
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
|
|
445
470
|
}
|
|
446
471
|
}
|
|
@@ -449,7 +474,7 @@
|
|
|
449
474
|
if (typeof event !== 'string' || !element) {
|
|
450
475
|
return null;
|
|
451
476
|
}
|
|
452
|
-
const $ = getjQuery();
|
|
477
|
+
const $ = getjQuery$1();
|
|
453
478
|
const typeEvent = getTypeEvent(event);
|
|
454
479
|
const inNamespace = event !== typeEvent;
|
|
455
480
|
let jQueryEvent = null;
|
|
@@ -463,11 +488,10 @@
|
|
|
463
488
|
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
|
464
489
|
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
|
465
490
|
}
|
|
466
|
-
|
|
491
|
+
const evt = hydrateObj(new Event(event, {
|
|
467
492
|
bubbles,
|
|
468
493
|
cancelable: true
|
|
469
|
-
});
|
|
470
|
-
evt = hydrateObj(evt, args);
|
|
494
|
+
}), args);
|
|
471
495
|
if (defaultPrevented) {
|
|
472
496
|
evt.preventDefault();
|
|
473
497
|
}
|
|
@@ -480,8 +504,8 @@
|
|
|
480
504
|
return evt;
|
|
481
505
|
}
|
|
482
506
|
};
|
|
483
|
-
function hydrateObj(obj, meta) {
|
|
484
|
-
for (const [key, value] of Object.entries(meta
|
|
507
|
+
function hydrateObj(obj, meta = {}) {
|
|
508
|
+
for (const [key, value] of Object.entries(meta)) {
|
|
485
509
|
try {
|
|
486
510
|
obj[key] = value;
|
|
487
511
|
} catch {
|
|
@@ -498,55 +522,7 @@
|
|
|
498
522
|
|
|
499
523
|
/**
|
|
500
524
|
* --------------------------------------------------------------------------
|
|
501
|
-
* Bootstrap
|
|
502
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
503
|
-
* --------------------------------------------------------------------------
|
|
504
|
-
*/
|
|
505
|
-
|
|
506
|
-
/**
|
|
507
|
-
* Constants
|
|
508
|
-
*/
|
|
509
|
-
|
|
510
|
-
const elementMap = new Map();
|
|
511
|
-
var Data = {
|
|
512
|
-
set(element, key, instance) {
|
|
513
|
-
if (!elementMap.has(element)) {
|
|
514
|
-
elementMap.set(element, new Map());
|
|
515
|
-
}
|
|
516
|
-
const instanceMap = elementMap.get(element);
|
|
517
|
-
|
|
518
|
-
// make it clear we only want one instance per element
|
|
519
|
-
// can be removed later when multiple key/instances are fine to be used
|
|
520
|
-
if (!instanceMap.has(key) && instanceMap.size !== 0) {
|
|
521
|
-
// eslint-disable-next-line no-console
|
|
522
|
-
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
|
|
523
|
-
return;
|
|
524
|
-
}
|
|
525
|
-
instanceMap.set(key, instance);
|
|
526
|
-
},
|
|
527
|
-
get(element, key) {
|
|
528
|
-
if (elementMap.has(element)) {
|
|
529
|
-
return elementMap.get(element).get(key) || null;
|
|
530
|
-
}
|
|
531
|
-
return null;
|
|
532
|
-
},
|
|
533
|
-
remove(element, key) {
|
|
534
|
-
if (!elementMap.has(element)) {
|
|
535
|
-
return;
|
|
536
|
-
}
|
|
537
|
-
const instanceMap = elementMap.get(element);
|
|
538
|
-
instanceMap.delete(key);
|
|
539
|
-
|
|
540
|
-
// free up element references if there are no instances left for an element
|
|
541
|
-
if (instanceMap.size === 0) {
|
|
542
|
-
elementMap.delete(element);
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
};
|
|
546
|
-
|
|
547
|
-
/**
|
|
548
|
-
* --------------------------------------------------------------------------
|
|
549
|
-
* Bootstrap (v5.2.3): dom/manipulator.js
|
|
525
|
+
* Bootstrap dom/manipulator.js
|
|
550
526
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
551
527
|
* --------------------------------------------------------------------------
|
|
552
528
|
*/
|
|
@@ -603,7 +579,7 @@
|
|
|
603
579
|
|
|
604
580
|
/**
|
|
605
581
|
* --------------------------------------------------------------------------
|
|
606
|
-
* Bootstrap
|
|
582
|
+
* Bootstrap util/config.js
|
|
607
583
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
608
584
|
* --------------------------------------------------------------------------
|
|
609
585
|
*/
|
|
@@ -634,20 +610,19 @@
|
|
|
634
610
|
return config;
|
|
635
611
|
}
|
|
636
612
|
_mergeConfigObj(config, element) {
|
|
637
|
-
const jsonConfig = isElement$
|
|
613
|
+
const jsonConfig = isElement$2(element) ? Manipulator$1.getDataAttribute(element, 'config') : {}; // try to parse
|
|
638
614
|
|
|
639
615
|
return {
|
|
640
616
|
...this.constructor.Default,
|
|
641
617
|
...(typeof jsonConfig === 'object' ? jsonConfig : {}),
|
|
642
|
-
...(isElement$
|
|
618
|
+
...(isElement$2(element) ? Manipulator$1.getDataAttributes(element) : {}),
|
|
643
619
|
...(typeof config === 'object' ? config : {})
|
|
644
620
|
};
|
|
645
621
|
}
|
|
646
622
|
_typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
|
|
647
|
-
for (const property of Object.
|
|
648
|
-
const expectedTypes = configTypes[property];
|
|
623
|
+
for (const [property, expectedTypes] of Object.entries(configTypes)) {
|
|
649
624
|
const value = config[property];
|
|
650
|
-
const valueType = isElement$
|
|
625
|
+
const valueType = isElement$2(value) ? 'element' : toType(value);
|
|
651
626
|
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
652
627
|
throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
653
628
|
}
|
|
@@ -657,7 +632,7 @@
|
|
|
657
632
|
|
|
658
633
|
/**
|
|
659
634
|
* --------------------------------------------------------------------------
|
|
660
|
-
* Bootstrap
|
|
635
|
+
* Bootstrap base-component.js
|
|
661
636
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
662
637
|
* --------------------------------------------------------------------------
|
|
663
638
|
*/
|
|
@@ -667,7 +642,7 @@
|
|
|
667
642
|
* Constants
|
|
668
643
|
*/
|
|
669
644
|
|
|
670
|
-
const VERSION = '5.
|
|
645
|
+
const VERSION = '5.3.3';
|
|
671
646
|
|
|
672
647
|
/**
|
|
673
648
|
* Class definition
|
|
@@ -676,7 +651,7 @@
|
|
|
676
651
|
class BaseComponent extends Config {
|
|
677
652
|
constructor(element, config) {
|
|
678
653
|
super();
|
|
679
|
-
element = getElement(element);
|
|
654
|
+
element = getElement$1(element);
|
|
680
655
|
if (!element) {
|
|
681
656
|
return;
|
|
682
657
|
}
|
|
@@ -705,7 +680,7 @@
|
|
|
705
680
|
|
|
706
681
|
// Static
|
|
707
682
|
static getInstance(element) {
|
|
708
|
-
return Data.get(getElement(element), this.DATA_KEY);
|
|
683
|
+
return Data.get(getElement$1(element), this.DATA_KEY);
|
|
709
684
|
}
|
|
710
685
|
static getOrCreateInstance(element, config = {}) {
|
|
711
686
|
return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
|
|
@@ -726,7 +701,96 @@
|
|
|
726
701
|
|
|
727
702
|
/**
|
|
728
703
|
* --------------------------------------------------------------------------
|
|
729
|
-
* Bootstrap
|
|
704
|
+
* Bootstrap dom/selector-engine.js
|
|
705
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
706
|
+
* --------------------------------------------------------------------------
|
|
707
|
+
*/
|
|
708
|
+
|
|
709
|
+
const getSelector$1 = element => {
|
|
710
|
+
let selector = element.getAttribute('data-bs-target');
|
|
711
|
+
if (!selector || selector === '#') {
|
|
712
|
+
let hrefAttribute = element.getAttribute('href');
|
|
713
|
+
|
|
714
|
+
// The only valid content that could double as a selector are IDs or classes,
|
|
715
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
716
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
717
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
718
|
+
if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
|
|
719
|
+
return null;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
// Just in case some CMS puts out a full URL with the anchor appended
|
|
723
|
+
if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
|
|
724
|
+
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
|
|
725
|
+
}
|
|
726
|
+
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
|
|
727
|
+
}
|
|
728
|
+
return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;
|
|
729
|
+
};
|
|
730
|
+
const SelectorEngine = {
|
|
731
|
+
find(selector, element = document.documentElement) {
|
|
732
|
+
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
|
|
733
|
+
},
|
|
734
|
+
findOne(selector, element = document.documentElement) {
|
|
735
|
+
return Element.prototype.querySelector.call(element, selector);
|
|
736
|
+
},
|
|
737
|
+
children(element, selector) {
|
|
738
|
+
return [].concat(...element.children).filter(child => child.matches(selector));
|
|
739
|
+
},
|
|
740
|
+
parents(element, selector) {
|
|
741
|
+
const parents = [];
|
|
742
|
+
let ancestor = element.parentNode.closest(selector);
|
|
743
|
+
while (ancestor) {
|
|
744
|
+
parents.push(ancestor);
|
|
745
|
+
ancestor = ancestor.parentNode.closest(selector);
|
|
746
|
+
}
|
|
747
|
+
return parents;
|
|
748
|
+
},
|
|
749
|
+
prev(element, selector) {
|
|
750
|
+
let previous = element.previousElementSibling;
|
|
751
|
+
while (previous) {
|
|
752
|
+
if (previous.matches(selector)) {
|
|
753
|
+
return [previous];
|
|
754
|
+
}
|
|
755
|
+
previous = previous.previousElementSibling;
|
|
756
|
+
}
|
|
757
|
+
return [];
|
|
758
|
+
},
|
|
759
|
+
// TODO: this is now unused; remove later along with prev()
|
|
760
|
+
next(element, selector) {
|
|
761
|
+
let next = element.nextElementSibling;
|
|
762
|
+
while (next) {
|
|
763
|
+
if (next.matches(selector)) {
|
|
764
|
+
return [next];
|
|
765
|
+
}
|
|
766
|
+
next = next.nextElementSibling;
|
|
767
|
+
}
|
|
768
|
+
return [];
|
|
769
|
+
},
|
|
770
|
+
focusableChildren(element) {
|
|
771
|
+
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
|
|
772
|
+
return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
|
|
773
|
+
},
|
|
774
|
+
getSelectorFromElement(element) {
|
|
775
|
+
const selector = getSelector$1(element);
|
|
776
|
+
if (selector) {
|
|
777
|
+
return SelectorEngine.findOne(selector) ? selector : null;
|
|
778
|
+
}
|
|
779
|
+
return null;
|
|
780
|
+
},
|
|
781
|
+
getElementFromSelector(element) {
|
|
782
|
+
const selector = getSelector$1(element);
|
|
783
|
+
return selector ? SelectorEngine.findOne(selector) : null;
|
|
784
|
+
},
|
|
785
|
+
getMultipleElementsFromSelector(element) {
|
|
786
|
+
const selector = getSelector$1(element);
|
|
787
|
+
return selector ? SelectorEngine.find(selector) : [];
|
|
788
|
+
}
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* --------------------------------------------------------------------------
|
|
793
|
+
* Bootstrap util/component-functions.js
|
|
730
794
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
731
795
|
* --------------------------------------------------------------------------
|
|
732
796
|
*/
|
|
@@ -741,7 +805,7 @@
|
|
|
741
805
|
if (isDisabled(this)) {
|
|
742
806
|
return;
|
|
743
807
|
}
|
|
744
|
-
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
|
808
|
+
const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
|
|
745
809
|
const instance = component.getOrCreateInstance(target);
|
|
746
810
|
|
|
747
811
|
// Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
|
@@ -751,7 +815,7 @@
|
|
|
751
815
|
|
|
752
816
|
/**
|
|
753
817
|
* --------------------------------------------------------------------------
|
|
754
|
-
* Bootstrap
|
|
818
|
+
* Bootstrap alert.js
|
|
755
819
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
756
820
|
* --------------------------------------------------------------------------
|
|
757
821
|
*/
|
|
@@ -822,11 +886,11 @@
|
|
|
822
886
|
* jQuery
|
|
823
887
|
*/
|
|
824
888
|
|
|
825
|
-
defineJQueryPlugin(Alert);
|
|
889
|
+
defineJQueryPlugin$1(Alert);
|
|
826
890
|
|
|
827
891
|
/**
|
|
828
892
|
* --------------------------------------------------------------------------
|
|
829
|
-
* Bootstrap
|
|
893
|
+
* Bootstrap button.js
|
|
830
894
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
831
895
|
* --------------------------------------------------------------------------
|
|
832
896
|
*/
|
|
@@ -886,69 +950,11 @@
|
|
|
886
950
|
* jQuery
|
|
887
951
|
*/
|
|
888
952
|
|
|
889
|
-
defineJQueryPlugin(Button);
|
|
953
|
+
defineJQueryPlugin$1(Button);
|
|
890
954
|
|
|
891
955
|
/**
|
|
892
956
|
* --------------------------------------------------------------------------
|
|
893
|
-
* Bootstrap
|
|
894
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
895
|
-
* --------------------------------------------------------------------------
|
|
896
|
-
*/
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
/**
|
|
900
|
-
* Constants
|
|
901
|
-
*/
|
|
902
|
-
|
|
903
|
-
const SelectorEngine = {
|
|
904
|
-
find(selector, element = document.documentElement) {
|
|
905
|
-
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
|
|
906
|
-
},
|
|
907
|
-
findOne(selector, element = document.documentElement) {
|
|
908
|
-
return Element.prototype.querySelector.call(element, selector);
|
|
909
|
-
},
|
|
910
|
-
children(element, selector) {
|
|
911
|
-
return [].concat(...element.children).filter(child => child.matches(selector));
|
|
912
|
-
},
|
|
913
|
-
parents(element, selector) {
|
|
914
|
-
const parents = [];
|
|
915
|
-
let ancestor = element.parentNode.closest(selector);
|
|
916
|
-
while (ancestor) {
|
|
917
|
-
parents.push(ancestor);
|
|
918
|
-
ancestor = ancestor.parentNode.closest(selector);
|
|
919
|
-
}
|
|
920
|
-
return parents;
|
|
921
|
-
},
|
|
922
|
-
prev(element, selector) {
|
|
923
|
-
let previous = element.previousElementSibling;
|
|
924
|
-
while (previous) {
|
|
925
|
-
if (previous.matches(selector)) {
|
|
926
|
-
return [previous];
|
|
927
|
-
}
|
|
928
|
-
previous = previous.previousElementSibling;
|
|
929
|
-
}
|
|
930
|
-
return [];
|
|
931
|
-
},
|
|
932
|
-
// TODO: this is now unused; remove later along with prev()
|
|
933
|
-
next(element, selector) {
|
|
934
|
-
let next = element.nextElementSibling;
|
|
935
|
-
while (next) {
|
|
936
|
-
if (next.matches(selector)) {
|
|
937
|
-
return [next];
|
|
938
|
-
}
|
|
939
|
-
next = next.nextElementSibling;
|
|
940
|
-
}
|
|
941
|
-
return [];
|
|
942
|
-
},
|
|
943
|
-
focusableChildren(element) {
|
|
944
|
-
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
|
|
945
|
-
return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
|
|
946
|
-
}
|
|
947
|
-
};
|
|
948
|
-
|
|
949
|
-
/**
|
|
950
|
-
* --------------------------------------------------------------------------
|
|
951
|
-
* Bootstrap (v5.2.3): util/swipe.js
|
|
957
|
+
* Bootstrap util/swipe.js
|
|
952
958
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
953
959
|
* --------------------------------------------------------------------------
|
|
954
960
|
*/
|
|
@@ -1068,7 +1074,7 @@
|
|
|
1068
1074
|
|
|
1069
1075
|
/**
|
|
1070
1076
|
* --------------------------------------------------------------------------
|
|
1071
|
-
* Bootstrap
|
|
1077
|
+
* Bootstrap carousel.js
|
|
1072
1078
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
1073
1079
|
* --------------------------------------------------------------------------
|
|
1074
1080
|
*/
|
|
@@ -1329,7 +1335,7 @@
|
|
|
1329
1335
|
}
|
|
1330
1336
|
if (!activeElement || !nextElement) {
|
|
1331
1337
|
// Some weirdness is happening, so we bail
|
|
1332
|
-
//
|
|
1338
|
+
// TODO: change tests that use empty divs to avoid this check
|
|
1333
1339
|
return;
|
|
1334
1340
|
}
|
|
1335
1341
|
const isCycling = Boolean(this._interval);
|
|
@@ -1406,7 +1412,7 @@
|
|
|
1406
1412
|
*/
|
|
1407
1413
|
|
|
1408
1414
|
EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_SLIDE, function (event) {
|
|
1409
|
-
const target = getElementFromSelector(this);
|
|
1415
|
+
const target = SelectorEngine.getElementFromSelector(this);
|
|
1410
1416
|
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
|
|
1411
1417
|
return;
|
|
1412
1418
|
}
|
|
@@ -1437,11 +1443,11 @@
|
|
|
1437
1443
|
* jQuery
|
|
1438
1444
|
*/
|
|
1439
1445
|
|
|
1440
|
-
defineJQueryPlugin(Carousel);
|
|
1446
|
+
defineJQueryPlugin$1(Carousel);
|
|
1441
1447
|
|
|
1442
1448
|
/**
|
|
1443
1449
|
* --------------------------------------------------------------------------
|
|
1444
|
-
* Bootstrap
|
|
1450
|
+
* Bootstrap collapse.js
|
|
1445
1451
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
1446
1452
|
* --------------------------------------------------------------------------
|
|
1447
1453
|
*/
|
|
@@ -1490,7 +1496,7 @@
|
|
|
1490
1496
|
this._triggerArray = [];
|
|
1491
1497
|
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
|
|
1492
1498
|
for (const elem of toggleList) {
|
|
1493
|
-
const selector = getSelectorFromElement(elem);
|
|
1499
|
+
const selector = SelectorEngine.getSelectorFromElement(elem);
|
|
1494
1500
|
const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
|
|
1495
1501
|
if (selector !== null && filterElement.length) {
|
|
1496
1502
|
this._triggerArray.push(elem);
|
|
@@ -1578,7 +1584,7 @@
|
|
|
1578
1584
|
this._element.classList.add(CLASS_NAME_COLLAPSING);
|
|
1579
1585
|
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
|
|
1580
1586
|
for (const trigger of this._triggerArray) {
|
|
1581
|
-
const element = getElementFromSelector(trigger);
|
|
1587
|
+
const element = SelectorEngine.getElementFromSelector(trigger);
|
|
1582
1588
|
if (element && !this._isShown(element)) {
|
|
1583
1589
|
this._addAriaAndCollapsedClass([trigger], false);
|
|
1584
1590
|
}
|
|
@@ -1600,7 +1606,7 @@
|
|
|
1600
1606
|
// Private
|
|
1601
1607
|
_configAfterMerge(config) {
|
|
1602
1608
|
config.toggle = Boolean(config.toggle); // Coerce string values
|
|
1603
|
-
config.parent = getElement(config.parent);
|
|
1609
|
+
config.parent = getElement$1(config.parent);
|
|
1604
1610
|
return config;
|
|
1605
1611
|
}
|
|
1606
1612
|
_getDimension() {
|
|
@@ -1612,7 +1618,7 @@
|
|
|
1612
1618
|
}
|
|
1613
1619
|
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
|
|
1614
1620
|
for (const element of children) {
|
|
1615
|
-
const selected = getElementFromSelector(element);
|
|
1621
|
+
const selected = SelectorEngine.getElementFromSelector(element);
|
|
1616
1622
|
if (selected) {
|
|
1617
1623
|
this._addAriaAndCollapsedClass([element], this._isShown(selected));
|
|
1618
1624
|
}
|
|
@@ -1660,9 +1666,7 @@
|
|
|
1660
1666
|
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
|
|
1661
1667
|
event.preventDefault();
|
|
1662
1668
|
}
|
|
1663
|
-
const
|
|
1664
|
-
const selectorElements = SelectorEngine.find(selector);
|
|
1665
|
-
for (const element of selectorElements) {
|
|
1669
|
+
for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
|
|
1666
1670
|
Collapse.getOrCreateInstance(element, {
|
|
1667
1671
|
toggle: false
|
|
1668
1672
|
}).toggle();
|
|
@@ -1673,7 +1677,7 @@
|
|
|
1673
1677
|
* jQuery
|
|
1674
1678
|
*/
|
|
1675
1679
|
|
|
1676
|
-
defineJQueryPlugin(Collapse);
|
|
1680
|
+
defineJQueryPlugin$1(Collapse);
|
|
1677
1681
|
|
|
1678
1682
|
var top = 'top';
|
|
1679
1683
|
var bottom = 'bottom';
|
|
@@ -1722,7 +1726,7 @@
|
|
|
1722
1726
|
return node;
|
|
1723
1727
|
}
|
|
1724
1728
|
|
|
1725
|
-
function isElement(node) {
|
|
1729
|
+
function isElement$1(node) {
|
|
1726
1730
|
var OwnElement = getWindow(node).Element;
|
|
1727
1731
|
return node instanceof OwnElement || node instanceof Element;
|
|
1728
1732
|
}
|
|
@@ -1851,7 +1855,7 @@
|
|
|
1851
1855
|
scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
|
|
1852
1856
|
scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
|
|
1853
1857
|
}
|
|
1854
|
-
var _ref = isElement(element) ? getWindow(element) : window,
|
|
1858
|
+
var _ref = isElement$1(element) ? getWindow(element) : window,
|
|
1855
1859
|
visualViewport = _ref.visualViewport;
|
|
1856
1860
|
var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
|
|
1857
1861
|
var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
|
|
@@ -1922,7 +1926,7 @@
|
|
|
1922
1926
|
|
|
1923
1927
|
function getDocumentElement(element) {
|
|
1924
1928
|
// $FlowFixMe[incompatible-return]: assume body is always available
|
|
1925
|
-
return ((isElement(element) ? element.ownerDocument :
|
|
1929
|
+
return ((isElement$1(element) ? element.ownerDocument :
|
|
1926
1930
|
// $FlowFixMe[prop-missing]
|
|
1927
1931
|
element.document) || window.document).documentElement;
|
|
1928
1932
|
}
|
|
@@ -2441,7 +2445,7 @@
|
|
|
2441
2445
|
return rect;
|
|
2442
2446
|
}
|
|
2443
2447
|
function getClientRectFromMixedType(element, clippingParent, strategy) {
|
|
2444
|
-
return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
|
|
2448
|
+
return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement$1(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
|
|
2445
2449
|
} // A "clipping parent" is an overflowable container with the characteristic of
|
|
2446
2450
|
// clipping (or hiding) overflowing elements with a position different from
|
|
2447
2451
|
// `initial`
|
|
@@ -2450,12 +2454,12 @@
|
|
|
2450
2454
|
var clippingParents = listScrollParents(getParentNode(element));
|
|
2451
2455
|
var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
|
|
2452
2456
|
var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
|
|
2453
|
-
if (!isElement(clipperElement)) {
|
|
2457
|
+
if (!isElement$1(clipperElement)) {
|
|
2454
2458
|
return [];
|
|
2455
2459
|
} // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
|
|
2456
2460
|
|
|
2457
2461
|
return clippingParents.filter(function (clippingParent) {
|
|
2458
|
-
return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
|
|
2462
|
+
return isElement$1(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
|
|
2459
2463
|
});
|
|
2460
2464
|
} // Gets the maximum area that the element is visible in due to any number of
|
|
2461
2465
|
// clipping parents
|
|
@@ -2557,7 +2561,7 @@
|
|
|
2557
2561
|
var altContext = elementContext === popper ? reference : popper;
|
|
2558
2562
|
var popperRect = state.rects.popper;
|
|
2559
2563
|
var element = state.elements[altBoundary ? altContext : elementContext];
|
|
2560
|
-
var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
|
|
2564
|
+
var clippingClientRect = getClippingRect(isElement$1(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
|
|
2561
2565
|
var referenceClientRect = getBoundingClientRect(state.elements.reference);
|
|
2562
2566
|
var popperOffsets = computeOffsets({
|
|
2563
2567
|
reference: referenceClientRect,
|
|
@@ -3161,7 +3165,7 @@
|
|
|
3161
3165
|
cleanupModifierEffects();
|
|
3162
3166
|
state.options = Object.assign({}, defaultOptions, state.options, options);
|
|
3163
3167
|
state.scrollParents = {
|
|
3164
|
-
reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
|
|
3168
|
+
reference: isElement$1(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
|
|
3165
3169
|
popper: listScrollParents(popper)
|
|
3166
3170
|
}; // Orders the modifiers based on their dependencies and `phase`
|
|
3167
3171
|
// properties
|
|
@@ -3340,7 +3344,7 @@
|
|
|
3340
3344
|
|
|
3341
3345
|
/**
|
|
3342
3346
|
* --------------------------------------------------------------------------
|
|
3343
|
-
* Bootstrap
|
|
3347
|
+
* Bootstrap dropdown.js
|
|
3344
3348
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
3345
3349
|
* --------------------------------------------------------------------------
|
|
3346
3350
|
*/
|
|
@@ -3413,7 +3417,7 @@
|
|
|
3413
3417
|
super(element, config);
|
|
3414
3418
|
this._popper = null;
|
|
3415
3419
|
this._parent = this._element.parentNode; // dropdown wrapper
|
|
3416
|
-
//
|
|
3420
|
+
// TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
|
|
3417
3421
|
this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
|
|
3418
3422
|
this._inNavbar = this._detectNavbar();
|
|
3419
3423
|
}
|
|
@@ -3508,7 +3512,7 @@
|
|
|
3508
3512
|
}
|
|
3509
3513
|
_getConfig(config) {
|
|
3510
3514
|
config = super._getConfig(config);
|
|
3511
|
-
if (typeof config.reference === 'object' && !isElement$
|
|
3515
|
+
if (typeof config.reference === 'object' && !isElement$2(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
|
|
3512
3516
|
// Popper virtual elements require a getBoundingClientRect method
|
|
3513
3517
|
throw new TypeError(`${NAME$c.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
|
|
3514
3518
|
}
|
|
@@ -3521,8 +3525,8 @@
|
|
|
3521
3525
|
let referenceElement = this._element;
|
|
3522
3526
|
if (this._config.reference === 'parent') {
|
|
3523
3527
|
referenceElement = this._parent;
|
|
3524
|
-
} else if (isElement$
|
|
3525
|
-
referenceElement = getElement(this._config.reference);
|
|
3528
|
+
} else if (isElement$2(this._config.reference)) {
|
|
3529
|
+
referenceElement = getElement$1(this._config.reference);
|
|
3526
3530
|
} else if (typeof this._config.reference === 'object') {
|
|
3527
3531
|
referenceElement = this._config.reference;
|
|
3528
3532
|
}
|
|
@@ -3587,7 +3591,7 @@
|
|
|
3587
3591
|
|
|
3588
3592
|
// Disable Popper if we have a static display or Dropdown is in Navbar
|
|
3589
3593
|
if (this._inNavbar || this._config.display === 'static') {
|
|
3590
|
-
Manipulator$1.setDataAttribute(this._menu, 'popper', 'static'); //
|
|
3594
|
+
Manipulator$1.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
|
|
3591
3595
|
defaultBsPopperConfig.modifiers = [{
|
|
3592
3596
|
name: 'applyStyles',
|
|
3593
3597
|
enabled: false
|
|
@@ -3595,7 +3599,7 @@
|
|
|
3595
3599
|
}
|
|
3596
3600
|
return {
|
|
3597
3601
|
...defaultBsPopperConfig,
|
|
3598
|
-
...(
|
|
3602
|
+
...execute(this._config.popperConfig, [defaultBsPopperConfig])
|
|
3599
3603
|
};
|
|
3600
3604
|
}
|
|
3601
3605
|
_selectMenuItem({
|
|
@@ -3669,7 +3673,7 @@
|
|
|
3669
3673
|
}
|
|
3670
3674
|
event.preventDefault();
|
|
3671
3675
|
|
|
3672
|
-
//
|
|
3676
|
+
// TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
|
|
3673
3677
|
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
|
|
3674
3678
|
const instance = Dropdown.getOrCreateInstance(getToggleButton);
|
|
3675
3679
|
if (isUpOrDownEvent) {
|
|
@@ -3704,237 +3708,11 @@
|
|
|
3704
3708
|
* jQuery
|
|
3705
3709
|
*/
|
|
3706
3710
|
|
|
3707
|
-
defineJQueryPlugin(Dropdown);
|
|
3708
|
-
|
|
3709
|
-
/**
|
|
3710
|
-
* --------------------------------------------------------------------------
|
|
3711
|
-
* Bootstrap (v5.1.3): gallery.js
|
|
3712
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
3713
|
-
* --------------------------------------------------------------------------
|
|
3714
|
-
*/
|
|
3715
|
-
|
|
3716
|
-
|
|
3717
|
-
/**
|
|
3718
|
-
* ------------------------------------------------------------------------
|
|
3719
|
-
* Constants
|
|
3720
|
-
* ------------------------------------------------------------------------
|
|
3721
|
-
*/
|
|
3722
|
-
|
|
3723
|
-
const Default$a = {};
|
|
3724
|
-
const NAME$b = 'gallery';
|
|
3725
|
-
const DATA_KEY$7 = 'bs.gallery';
|
|
3726
|
-
const EVENT_KEY$7 = `.${DATA_KEY$7}`;
|
|
3727
|
-
const DATA_API_KEY$4 = '.data-api';
|
|
3728
|
-
const CAROUSEL_SELECTOR = '.carousel';
|
|
3729
|
-
const CAROUSEL_PAGER_SELECTOR = '.carousel-pager span';
|
|
3730
|
-
const CAROUSEL_ACTIVE_SELECTOR = '.carousel-item.active';
|
|
3731
|
-
const CAROUSEL_ITEM_SELECTOR = '.carousel-item';
|
|
3732
|
-
const THUMBNAIL_SELECTOR = '.bcl-gallery__grid a, .bcl-gallery__mobile-view-more';
|
|
3733
|
-
const MODAL_SELECTOR = '.modal';
|
|
3734
|
-
const EVENT_MODAL_HIDE$1 = 'hide.bs.modal';
|
|
3735
|
-
const CAROUSEL_EVENT = 'slide.bs.carousel';
|
|
3736
|
-
const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
|
|
3737
|
-
|
|
3738
|
-
/**
|
|
3739
|
-
* ------------------------------------------------------------------------
|
|
3740
|
-
* Class Definition
|
|
3741
|
-
* ------------------------------------------------------------------------
|
|
3742
|
-
*/
|
|
3743
|
-
|
|
3744
|
-
class Gallery extends BaseComponent {
|
|
3745
|
-
constructor(element, config) {
|
|
3746
|
-
super(element, config);
|
|
3747
|
-
/* eslint no-underscore-dangle: ["error", { "allow": ["_element"] }] */
|
|
3748
|
-
this.carousel = SelectorEngine.findOne(CAROUSEL_SELECTOR, this._element);
|
|
3749
|
-
this.carouselPager = SelectorEngine.findOne(CAROUSEL_PAGER_SELECTOR, this._element);
|
|
3750
|
-
this.carouselStartIndex = element.getAttribute('data-gallery-start');
|
|
3751
|
-
this.carouselActiveItem = SelectorEngine.find(CAROUSEL_ITEM_SELECTOR, this.carousel)[this.carouselStartIndex];
|
|
3752
|
-
this.carouselPager.textContent = Number(this.carouselStartIndex) + 1;
|
|
3753
|
-
this.modal = SelectorEngine.findOne(MODAL_SELECTOR, this._element);
|
|
3754
|
-
this.addEventListeners();
|
|
3755
|
-
this.carouselLazyLoad(this.carouselActiveItem);
|
|
3756
|
-
}
|
|
3757
|
-
|
|
3758
|
-
// Getters
|
|
3759
|
-
static get NAME() {
|
|
3760
|
-
return NAME$b;
|
|
3761
|
-
}
|
|
3762
|
-
|
|
3763
|
-
// Public
|
|
3764
|
-
setSlide(event) {
|
|
3765
|
-
const slideFrom = SelectorEngine.findOne(CAROUSEL_ACTIVE_SELECTOR, this.carousel);
|
|
3766
|
-
const slideTo = event.relatedTarget;
|
|
3767
|
-
this.carouselLazyLoad(slideTo);
|
|
3768
|
-
this.carouselPager.textContent = event.to + 1;
|
|
3769
|
-
this.stopVideo(slideFrom);
|
|
3770
|
-
}
|
|
3771
|
-
stopSlide() {
|
|
3772
|
-
const currentSlide = SelectorEngine.findOne(CAROUSEL_ACTIVE_SELECTOR, this.carousel);
|
|
3773
|
-
this.stopVideo(currentSlide);
|
|
3774
|
-
}
|
|
3775
|
-
stopVideo(slide) {
|
|
3776
|
-
const iframe = SelectorEngine.findOne('iframe', slide);
|
|
3777
|
-
const video = SelectorEngine.findOne('video', slide);
|
|
3778
|
-
if (iframe) {
|
|
3779
|
-
iframe.src = iframe.dataset.src;
|
|
3780
|
-
} else if (video) {
|
|
3781
|
-
video.pause();
|
|
3782
|
-
}
|
|
3783
|
-
}
|
|
3784
|
-
|
|
3785
|
-
// Private
|
|
3786
|
-
carouselLazyLoad(slide) {
|
|
3787
|
-
const media = SelectorEngine.findOne('[data-src]', slide);
|
|
3788
|
-
if (media && !media.src) {
|
|
3789
|
-
media.src = media.dataset.src;
|
|
3790
|
-
}
|
|
3791
|
-
}
|
|
3792
|
-
addEventListeners() {
|
|
3793
|
-
EventHandler.on(this.carousel, CAROUSEL_EVENT, event => this.setSlide(event));
|
|
3794
|
-
EventHandler.on(this.modal, EVENT_MODAL_HIDE$1, event => this.stopSlide(event));
|
|
3795
|
-
}
|
|
3796
|
-
|
|
3797
|
-
// Static
|
|
3798
|
-
static get Default() {
|
|
3799
|
-
return Default$a;
|
|
3800
|
-
}
|
|
3801
|
-
static jQueryInterface(config) {
|
|
3802
|
-
return this.each(function jInterface() {
|
|
3803
|
-
const data = Gallery.getOrCreateInstance(this);
|
|
3804
|
-
if (typeof config !== 'string') {
|
|
3805
|
-
return;
|
|
3806
|
-
}
|
|
3807
|
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
3808
|
-
throw new TypeError(`No method named "${config}"`);
|
|
3809
|
-
}
|
|
3810
|
-
data[config](this);
|
|
3811
|
-
});
|
|
3812
|
-
}
|
|
3813
|
-
}
|
|
3814
|
-
|
|
3815
|
-
/**
|
|
3816
|
-
* ------------------------------------------------------------------------
|
|
3817
|
-
* Data Api implementation
|
|
3818
|
-
* ------------------------------------------------------------------------
|
|
3819
|
-
*/
|
|
3820
|
-
|
|
3821
|
-
EventHandler.on(document, EVENT_CLICK_DATA_API$3, THUMBNAIL_SELECTOR, event => {
|
|
3822
|
-
const gallery = event.target.closest('div.bcl-gallery');
|
|
3823
|
-
const firstSlide = event.target.parentNode.getAttribute('data-bs-slide-to');
|
|
3824
|
-
gallery.dataset.galleryStart = firstSlide;
|
|
3825
|
-
Gallery.getOrCreateInstance(gallery);
|
|
3826
|
-
});
|
|
3827
|
-
|
|
3828
|
-
/**
|
|
3829
|
-
* ------------------------------------------------------------------------
|
|
3830
|
-
* jQuery
|
|
3831
|
-
* ------------------------------------------------------------------------
|
|
3832
|
-
* add .gallery to jQuery only if jQuery is present
|
|
3833
|
-
*/
|
|
3834
|
-
|
|
3835
|
-
defineJQueryPlugin(Gallery);
|
|
3836
|
-
|
|
3837
|
-
/**
|
|
3838
|
-
* --------------------------------------------------------------------------
|
|
3839
|
-
* Bootstrap (v5.2.3): util/scrollBar.js
|
|
3840
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
3841
|
-
* --------------------------------------------------------------------------
|
|
3842
|
-
*/
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
/**
|
|
3846
|
-
* Constants
|
|
3847
|
-
*/
|
|
3848
|
-
|
|
3849
|
-
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
|
3850
|
-
const SELECTOR_STICKY_CONTENT = '.sticky-top';
|
|
3851
|
-
const PROPERTY_PADDING = 'padding-right';
|
|
3852
|
-
const PROPERTY_MARGIN = 'margin-right';
|
|
3853
|
-
|
|
3854
|
-
/**
|
|
3855
|
-
* Class definition
|
|
3856
|
-
*/
|
|
3857
|
-
|
|
3858
|
-
class ScrollBarHelper {
|
|
3859
|
-
constructor() {
|
|
3860
|
-
this._element = document.body;
|
|
3861
|
-
}
|
|
3862
|
-
|
|
3863
|
-
// Public
|
|
3864
|
-
getWidth() {
|
|
3865
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
|
|
3866
|
-
const documentWidth = document.documentElement.clientWidth;
|
|
3867
|
-
return Math.abs(window.innerWidth - documentWidth);
|
|
3868
|
-
}
|
|
3869
|
-
hide() {
|
|
3870
|
-
const width = this.getWidth();
|
|
3871
|
-
this._disableOverFlow();
|
|
3872
|
-
// give padding to element to balance the hidden scrollbar width
|
|
3873
|
-
this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
|
|
3874
|
-
// trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
|
|
3875
|
-
this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
|
|
3876
|
-
this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
|
|
3877
|
-
}
|
|
3878
|
-
reset() {
|
|
3879
|
-
this._resetElementAttributes(this._element, 'overflow');
|
|
3880
|
-
this._resetElementAttributes(this._element, PROPERTY_PADDING);
|
|
3881
|
-
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
|
|
3882
|
-
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
|
|
3883
|
-
}
|
|
3884
|
-
isOverflowing() {
|
|
3885
|
-
return this.getWidth() > 0;
|
|
3886
|
-
}
|
|
3887
|
-
|
|
3888
|
-
// Private
|
|
3889
|
-
_disableOverFlow() {
|
|
3890
|
-
this._saveInitialAttribute(this._element, 'overflow');
|
|
3891
|
-
this._element.style.overflow = 'hidden';
|
|
3892
|
-
}
|
|
3893
|
-
_setElementAttributes(selector, styleProperty, callback) {
|
|
3894
|
-
const scrollbarWidth = this.getWidth();
|
|
3895
|
-
const manipulationCallBack = element => {
|
|
3896
|
-
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
|
|
3897
|
-
return;
|
|
3898
|
-
}
|
|
3899
|
-
this._saveInitialAttribute(element, styleProperty);
|
|
3900
|
-
const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
|
|
3901
|
-
element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
|
|
3902
|
-
};
|
|
3903
|
-
this._applyManipulationCallback(selector, manipulationCallBack);
|
|
3904
|
-
}
|
|
3905
|
-
_saveInitialAttribute(element, styleProperty) {
|
|
3906
|
-
const actualValue = element.style.getPropertyValue(styleProperty);
|
|
3907
|
-
if (actualValue) {
|
|
3908
|
-
Manipulator$1.setDataAttribute(element, styleProperty, actualValue);
|
|
3909
|
-
}
|
|
3910
|
-
}
|
|
3911
|
-
_resetElementAttributes(selector, styleProperty) {
|
|
3912
|
-
const manipulationCallBack = element => {
|
|
3913
|
-
const value = Manipulator$1.getDataAttribute(element, styleProperty);
|
|
3914
|
-
// We only want to remove the property if the value is `null`; the value can also be zero
|
|
3915
|
-
if (value === null) {
|
|
3916
|
-
element.style.removeProperty(styleProperty);
|
|
3917
|
-
return;
|
|
3918
|
-
}
|
|
3919
|
-
Manipulator$1.removeDataAttribute(element, styleProperty);
|
|
3920
|
-
element.style.setProperty(styleProperty, value);
|
|
3921
|
-
};
|
|
3922
|
-
this._applyManipulationCallback(selector, manipulationCallBack);
|
|
3923
|
-
}
|
|
3924
|
-
_applyManipulationCallback(selector, callBack) {
|
|
3925
|
-
if (isElement$1(selector)) {
|
|
3926
|
-
callBack(selector);
|
|
3927
|
-
return;
|
|
3928
|
-
}
|
|
3929
|
-
for (const sel of SelectorEngine.find(selector, this._element)) {
|
|
3930
|
-
callBack(sel);
|
|
3931
|
-
}
|
|
3932
|
-
}
|
|
3933
|
-
}
|
|
3711
|
+
defineJQueryPlugin$1(Dropdown);
|
|
3934
3712
|
|
|
3935
3713
|
/**
|
|
3936
3714
|
* --------------------------------------------------------------------------
|
|
3937
|
-
* Bootstrap
|
|
3715
|
+
* Bootstrap util/backdrop.js
|
|
3938
3716
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
3939
3717
|
* --------------------------------------------------------------------------
|
|
3940
3718
|
*/
|
|
@@ -3944,11 +3722,11 @@
|
|
|
3944
3722
|
* Constants
|
|
3945
3723
|
*/
|
|
3946
3724
|
|
|
3947
|
-
const NAME$
|
|
3725
|
+
const NAME$b = 'backdrop';
|
|
3948
3726
|
const CLASS_NAME_FADE$4 = 'fade';
|
|
3949
3727
|
const CLASS_NAME_SHOW$5 = 'show';
|
|
3950
|
-
const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$
|
|
3951
|
-
const Default$
|
|
3728
|
+
const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$b}`;
|
|
3729
|
+
const Default$a = {
|
|
3952
3730
|
className: 'modal-backdrop',
|
|
3953
3731
|
clickCallback: null,
|
|
3954
3732
|
isAnimated: false,
|
|
@@ -3978,13 +3756,13 @@
|
|
|
3978
3756
|
|
|
3979
3757
|
// Getters
|
|
3980
3758
|
static get Default() {
|
|
3981
|
-
return Default$
|
|
3759
|
+
return Default$a;
|
|
3982
3760
|
}
|
|
3983
3761
|
static get DefaultType() {
|
|
3984
3762
|
return DefaultType$8;
|
|
3985
3763
|
}
|
|
3986
3764
|
static get NAME() {
|
|
3987
|
-
return NAME$
|
|
3765
|
+
return NAME$b;
|
|
3988
3766
|
}
|
|
3989
3767
|
|
|
3990
3768
|
// Public
|
|
@@ -4037,7 +3815,7 @@
|
|
|
4037
3815
|
}
|
|
4038
3816
|
_configAfterMerge(config) {
|
|
4039
3817
|
// use getElement() with the default "body" to get a fresh Element on each instantiation
|
|
4040
|
-
config.rootElement = getElement(config.rootElement);
|
|
3818
|
+
config.rootElement = getElement$1(config.rootElement);
|
|
4041
3819
|
return config;
|
|
4042
3820
|
}
|
|
4043
3821
|
_append() {
|
|
@@ -4058,7 +3836,7 @@
|
|
|
4058
3836
|
|
|
4059
3837
|
/**
|
|
4060
3838
|
* --------------------------------------------------------------------------
|
|
4061
|
-
* Bootstrap
|
|
3839
|
+
* Bootstrap util/focustrap.js
|
|
4062
3840
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
4063
3841
|
* --------------------------------------------------------------------------
|
|
4064
3842
|
*/
|
|
@@ -4068,15 +3846,15 @@
|
|
|
4068
3846
|
* Constants
|
|
4069
3847
|
*/
|
|
4070
3848
|
|
|
4071
|
-
const NAME$
|
|
4072
|
-
const DATA_KEY$
|
|
4073
|
-
const EVENT_KEY$
|
|
4074
|
-
const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$
|
|
4075
|
-
const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$
|
|
3849
|
+
const NAME$a = 'focustrap';
|
|
3850
|
+
const DATA_KEY$7 = 'bs.focustrap';
|
|
3851
|
+
const EVENT_KEY$7 = `.${DATA_KEY$7}`;
|
|
3852
|
+
const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$7}`;
|
|
3853
|
+
const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
|
|
4076
3854
|
const TAB_KEY = 'Tab';
|
|
4077
3855
|
const TAB_NAV_FORWARD = 'forward';
|
|
4078
3856
|
const TAB_NAV_BACKWARD = 'backward';
|
|
4079
|
-
const Default$
|
|
3857
|
+
const Default$9 = {
|
|
4080
3858
|
autofocus: true,
|
|
4081
3859
|
trapElement: null // The element to trap focus inside of
|
|
4082
3860
|
};
|
|
@@ -4099,13 +3877,13 @@
|
|
|
4099
3877
|
|
|
4100
3878
|
// Getters
|
|
4101
3879
|
static get Default() {
|
|
4102
|
-
return Default$
|
|
3880
|
+
return Default$9;
|
|
4103
3881
|
}
|
|
4104
3882
|
static get DefaultType() {
|
|
4105
3883
|
return DefaultType$7;
|
|
4106
3884
|
}
|
|
4107
3885
|
static get NAME() {
|
|
4108
|
-
return NAME$
|
|
3886
|
+
return NAME$a;
|
|
4109
3887
|
}
|
|
4110
3888
|
|
|
4111
3889
|
// Public
|
|
@@ -4116,7 +3894,7 @@
|
|
|
4116
3894
|
if (this._config.autofocus) {
|
|
4117
3895
|
this._config.trapElement.focus();
|
|
4118
3896
|
}
|
|
4119
|
-
EventHandler.off(document, EVENT_KEY$
|
|
3897
|
+
EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop
|
|
4120
3898
|
EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
|
|
4121
3899
|
EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
|
|
4122
3900
|
this._isActive = true;
|
|
@@ -4126,7 +3904,7 @@
|
|
|
4126
3904
|
return;
|
|
4127
3905
|
}
|
|
4128
3906
|
this._isActive = false;
|
|
4129
|
-
EventHandler.off(document, EVENT_KEY$
|
|
3907
|
+
EventHandler.off(document, EVENT_KEY$7);
|
|
4130
3908
|
}
|
|
4131
3909
|
|
|
4132
3910
|
// Private
|
|
@@ -4156,7 +3934,7 @@
|
|
|
4156
3934
|
|
|
4157
3935
|
/**
|
|
4158
3936
|
* --------------------------------------------------------------------------
|
|
4159
|
-
* Bootstrap
|
|
3937
|
+
* Bootstrap util/scrollBar.js
|
|
4160
3938
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
4161
3939
|
* --------------------------------------------------------------------------
|
|
4162
3940
|
*/
|
|
@@ -4166,21 +3944,119 @@
|
|
|
4166
3944
|
* Constants
|
|
4167
3945
|
*/
|
|
4168
3946
|
|
|
4169
|
-
const
|
|
4170
|
-
const
|
|
4171
|
-
const
|
|
4172
|
-
const
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4179
|
-
|
|
4180
|
-
|
|
4181
|
-
|
|
4182
|
-
|
|
4183
|
-
|
|
3947
|
+
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
|
3948
|
+
const SELECTOR_STICKY_CONTENT = '.sticky-top';
|
|
3949
|
+
const PROPERTY_PADDING = 'padding-right';
|
|
3950
|
+
const PROPERTY_MARGIN = 'margin-right';
|
|
3951
|
+
|
|
3952
|
+
/**
|
|
3953
|
+
* Class definition
|
|
3954
|
+
*/
|
|
3955
|
+
|
|
3956
|
+
class ScrollBarHelper {
|
|
3957
|
+
constructor() {
|
|
3958
|
+
this._element = document.body;
|
|
3959
|
+
}
|
|
3960
|
+
|
|
3961
|
+
// Public
|
|
3962
|
+
getWidth() {
|
|
3963
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
|
|
3964
|
+
const documentWidth = document.documentElement.clientWidth;
|
|
3965
|
+
return Math.abs(window.innerWidth - documentWidth);
|
|
3966
|
+
}
|
|
3967
|
+
hide() {
|
|
3968
|
+
const width = this.getWidth();
|
|
3969
|
+
this._disableOverFlow();
|
|
3970
|
+
// give padding to element to balance the hidden scrollbar width
|
|
3971
|
+
this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
|
|
3972
|
+
// trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
|
|
3973
|
+
this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
|
|
3974
|
+
this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
|
|
3975
|
+
}
|
|
3976
|
+
reset() {
|
|
3977
|
+
this._resetElementAttributes(this._element, 'overflow');
|
|
3978
|
+
this._resetElementAttributes(this._element, PROPERTY_PADDING);
|
|
3979
|
+
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
|
|
3980
|
+
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
|
|
3981
|
+
}
|
|
3982
|
+
isOverflowing() {
|
|
3983
|
+
return this.getWidth() > 0;
|
|
3984
|
+
}
|
|
3985
|
+
|
|
3986
|
+
// Private
|
|
3987
|
+
_disableOverFlow() {
|
|
3988
|
+
this._saveInitialAttribute(this._element, 'overflow');
|
|
3989
|
+
this._element.style.overflow = 'hidden';
|
|
3990
|
+
}
|
|
3991
|
+
_setElementAttributes(selector, styleProperty, callback) {
|
|
3992
|
+
const scrollbarWidth = this.getWidth();
|
|
3993
|
+
const manipulationCallBack = element => {
|
|
3994
|
+
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
|
|
3995
|
+
return;
|
|
3996
|
+
}
|
|
3997
|
+
this._saveInitialAttribute(element, styleProperty);
|
|
3998
|
+
const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
|
|
3999
|
+
element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
|
|
4000
|
+
};
|
|
4001
|
+
this._applyManipulationCallback(selector, manipulationCallBack);
|
|
4002
|
+
}
|
|
4003
|
+
_saveInitialAttribute(element, styleProperty) {
|
|
4004
|
+
const actualValue = element.style.getPropertyValue(styleProperty);
|
|
4005
|
+
if (actualValue) {
|
|
4006
|
+
Manipulator$1.setDataAttribute(element, styleProperty, actualValue);
|
|
4007
|
+
}
|
|
4008
|
+
}
|
|
4009
|
+
_resetElementAttributes(selector, styleProperty) {
|
|
4010
|
+
const manipulationCallBack = element => {
|
|
4011
|
+
const value = Manipulator$1.getDataAttribute(element, styleProperty);
|
|
4012
|
+
// We only want to remove the property if the value is `null`; the value can also be zero
|
|
4013
|
+
if (value === null) {
|
|
4014
|
+
element.style.removeProperty(styleProperty);
|
|
4015
|
+
return;
|
|
4016
|
+
}
|
|
4017
|
+
Manipulator$1.removeDataAttribute(element, styleProperty);
|
|
4018
|
+
element.style.setProperty(styleProperty, value);
|
|
4019
|
+
};
|
|
4020
|
+
this._applyManipulationCallback(selector, manipulationCallBack);
|
|
4021
|
+
}
|
|
4022
|
+
_applyManipulationCallback(selector, callBack) {
|
|
4023
|
+
if (isElement$2(selector)) {
|
|
4024
|
+
callBack(selector);
|
|
4025
|
+
return;
|
|
4026
|
+
}
|
|
4027
|
+
for (const sel of SelectorEngine.find(selector, this._element)) {
|
|
4028
|
+
callBack(sel);
|
|
4029
|
+
}
|
|
4030
|
+
}
|
|
4031
|
+
}
|
|
4032
|
+
|
|
4033
|
+
/**
|
|
4034
|
+
* --------------------------------------------------------------------------
|
|
4035
|
+
* Bootstrap modal.js
|
|
4036
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
4037
|
+
* --------------------------------------------------------------------------
|
|
4038
|
+
*/
|
|
4039
|
+
|
|
4040
|
+
|
|
4041
|
+
/**
|
|
4042
|
+
* Constants
|
|
4043
|
+
*/
|
|
4044
|
+
|
|
4045
|
+
const NAME$9 = 'modal';
|
|
4046
|
+
const DATA_KEY$6 = 'bs.modal';
|
|
4047
|
+
const EVENT_KEY$6 = `.${DATA_KEY$6}`;
|
|
4048
|
+
const DATA_API_KEY$4 = '.data-api';
|
|
4049
|
+
const ESCAPE_KEY$1 = 'Escape';
|
|
4050
|
+
const EVENT_HIDE$4 = `hide${EVENT_KEY$6}`;
|
|
4051
|
+
const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$6}`;
|
|
4052
|
+
const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$6}`;
|
|
4053
|
+
const EVENT_SHOW$4 = `show${EVENT_KEY$6}`;
|
|
4054
|
+
const EVENT_SHOWN$4 = `shown${EVENT_KEY$6}`;
|
|
4055
|
+
const EVENT_RESIZE$1 = `resize${EVENT_KEY$6}`;
|
|
4056
|
+
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
|
|
4057
|
+
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
|
|
4058
|
+
const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;
|
|
4059
|
+
const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$4}`;
|
|
4184
4060
|
const CLASS_NAME_OPEN = 'modal-open';
|
|
4185
4061
|
const CLASS_NAME_FADE$3 = 'fade';
|
|
4186
4062
|
const CLASS_NAME_SHOW$4 = 'show';
|
|
@@ -4189,7 +4065,7 @@
|
|
|
4189
4065
|
const SELECTOR_DIALOG = '.modal-dialog';
|
|
4190
4066
|
const SELECTOR_MODAL_BODY = '.modal-body';
|
|
4191
4067
|
const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
|
|
4192
|
-
const Default$
|
|
4068
|
+
const Default$8 = {
|
|
4193
4069
|
backdrop: true,
|
|
4194
4070
|
focus: true,
|
|
4195
4071
|
keyboard: true
|
|
@@ -4218,13 +4094,13 @@
|
|
|
4218
4094
|
|
|
4219
4095
|
// Getters
|
|
4220
4096
|
static get Default() {
|
|
4221
|
-
return Default$
|
|
4097
|
+
return Default$8;
|
|
4222
4098
|
}
|
|
4223
4099
|
static get DefaultType() {
|
|
4224
4100
|
return DefaultType$6;
|
|
4225
4101
|
}
|
|
4226
4102
|
static get NAME() {
|
|
4227
|
-
return NAME$
|
|
4103
|
+
return NAME$9;
|
|
4228
4104
|
}
|
|
4229
4105
|
|
|
4230
4106
|
// Public
|
|
@@ -4263,9 +4139,8 @@
|
|
|
4263
4139
|
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
|
|
4264
4140
|
}
|
|
4265
4141
|
dispose() {
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
}
|
|
4142
|
+
EventHandler.off(window, EVENT_KEY$6);
|
|
4143
|
+
EventHandler.off(this._dialog, EVENT_KEY$6);
|
|
4269
4144
|
this._backdrop.dispose();
|
|
4270
4145
|
this._focustrap.deactivate();
|
|
4271
4146
|
super.dispose();
|
|
@@ -4320,7 +4195,6 @@
|
|
|
4320
4195
|
return;
|
|
4321
4196
|
}
|
|
4322
4197
|
if (this._config.keyboard) {
|
|
4323
|
-
event.preventDefault();
|
|
4324
4198
|
this.hide();
|
|
4325
4199
|
return;
|
|
4326
4200
|
}
|
|
@@ -4428,8 +4302,8 @@
|
|
|
4428
4302
|
* Data API implementation
|
|
4429
4303
|
*/
|
|
4430
4304
|
|
|
4431
|
-
EventHandler.on(document, EVENT_CLICK_DATA_API$
|
|
4432
|
-
const target = getElementFromSelector(this);
|
|
4305
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$2, function (event) {
|
|
4306
|
+
const target = SelectorEngine.getElementFromSelector(this);
|
|
4433
4307
|
if (['A', 'AREA'].includes(this.tagName)) {
|
|
4434
4308
|
event.preventDefault();
|
|
4435
4309
|
}
|
|
@@ -4459,11 +4333,11 @@
|
|
|
4459
4333
|
* jQuery
|
|
4460
4334
|
*/
|
|
4461
4335
|
|
|
4462
|
-
defineJQueryPlugin(Modal);
|
|
4336
|
+
defineJQueryPlugin$1(Modal);
|
|
4463
4337
|
|
|
4464
4338
|
/**
|
|
4465
4339
|
* --------------------------------------------------------------------------
|
|
4466
|
-
* Bootstrap
|
|
4340
|
+
* Bootstrap offcanvas.js
|
|
4467
4341
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
4468
4342
|
* --------------------------------------------------------------------------
|
|
4469
4343
|
*/
|
|
@@ -4473,27 +4347,27 @@
|
|
|
4473
4347
|
* Constants
|
|
4474
4348
|
*/
|
|
4475
4349
|
|
|
4476
|
-
const NAME$
|
|
4477
|
-
const DATA_KEY$
|
|
4478
|
-
const EVENT_KEY$
|
|
4479
|
-
const DATA_API_KEY$
|
|
4480
|
-
const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$
|
|
4350
|
+
const NAME$8 = 'offcanvas';
|
|
4351
|
+
const DATA_KEY$5 = 'bs.offcanvas';
|
|
4352
|
+
const EVENT_KEY$5 = `.${DATA_KEY$5}`;
|
|
4353
|
+
const DATA_API_KEY$3 = '.data-api';
|
|
4354
|
+
const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$5}${DATA_API_KEY$3}`;
|
|
4481
4355
|
const ESCAPE_KEY = 'Escape';
|
|
4482
4356
|
const CLASS_NAME_SHOW$3 = 'show';
|
|
4483
4357
|
const CLASS_NAME_SHOWING$1 = 'showing';
|
|
4484
4358
|
const CLASS_NAME_HIDING = 'hiding';
|
|
4485
4359
|
const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
|
|
4486
4360
|
const OPEN_SELECTOR = '.offcanvas.show';
|
|
4487
|
-
const EVENT_SHOW$3 = `show${EVENT_KEY$
|
|
4488
|
-
const EVENT_SHOWN$3 = `shown${EVENT_KEY$
|
|
4489
|
-
const EVENT_HIDE$3 = `hide${EVENT_KEY$
|
|
4490
|
-
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$
|
|
4491
|
-
const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$
|
|
4492
|
-
const EVENT_RESIZE = `resize${EVENT_KEY$
|
|
4493
|
-
const EVENT_CLICK_DATA_API$
|
|
4494
|
-
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$
|
|
4361
|
+
const EVENT_SHOW$3 = `show${EVENT_KEY$5}`;
|
|
4362
|
+
const EVENT_SHOWN$3 = `shown${EVENT_KEY$5}`;
|
|
4363
|
+
const EVENT_HIDE$3 = `hide${EVENT_KEY$5}`;
|
|
4364
|
+
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$5}`;
|
|
4365
|
+
const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$5}`;
|
|
4366
|
+
const EVENT_RESIZE = `resize${EVENT_KEY$5}`;
|
|
4367
|
+
const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$5}${DATA_API_KEY$3}`;
|
|
4368
|
+
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
|
|
4495
4369
|
const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
|
|
4496
|
-
const Default$
|
|
4370
|
+
const Default$7 = {
|
|
4497
4371
|
backdrop: true,
|
|
4498
4372
|
keyboard: true,
|
|
4499
4373
|
scroll: false
|
|
@@ -4519,13 +4393,13 @@
|
|
|
4519
4393
|
|
|
4520
4394
|
// Getters
|
|
4521
4395
|
static get Default() {
|
|
4522
|
-
return Default$
|
|
4396
|
+
return Default$7;
|
|
4523
4397
|
}
|
|
4524
4398
|
static get DefaultType() {
|
|
4525
4399
|
return DefaultType$5;
|
|
4526
4400
|
}
|
|
4527
4401
|
static get NAME() {
|
|
4528
|
-
return NAME$
|
|
4402
|
+
return NAME$8;
|
|
4529
4403
|
}
|
|
4530
4404
|
|
|
4531
4405
|
// Public
|
|
@@ -4622,11 +4496,11 @@
|
|
|
4622
4496
|
if (event.key !== ESCAPE_KEY) {
|
|
4623
4497
|
return;
|
|
4624
4498
|
}
|
|
4625
|
-
if (
|
|
4626
|
-
|
|
4499
|
+
if (this._config.keyboard) {
|
|
4500
|
+
this.hide();
|
|
4627
4501
|
return;
|
|
4628
4502
|
}
|
|
4629
|
-
this.
|
|
4503
|
+
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
|
4630
4504
|
});
|
|
4631
4505
|
}
|
|
4632
4506
|
|
|
@@ -4649,8 +4523,8 @@
|
|
|
4649
4523
|
* Data API implementation
|
|
4650
4524
|
*/
|
|
4651
4525
|
|
|
4652
|
-
EventHandler.on(document, EVENT_CLICK_DATA_API$
|
|
4653
|
-
const target = getElementFromSelector(this);
|
|
4526
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$1, function (event) {
|
|
4527
|
+
const target = SelectorEngine.getElementFromSelector(this);
|
|
4654
4528
|
if (['A', 'AREA'].includes(this.tagName)) {
|
|
4655
4529
|
event.preventDefault();
|
|
4656
4530
|
}
|
|
@@ -4690,93 +4564,17 @@
|
|
|
4690
4564
|
* jQuery
|
|
4691
4565
|
*/
|
|
4692
4566
|
|
|
4693
|
-
defineJQueryPlugin(Offcanvas);
|
|
4694
|
-
|
|
4695
|
-
/**
|
|
4696
|
-
* AccessibleToggle enhances Bootstrap Modal and Offcanvas components by:
|
|
4697
|
-
* - Adding ARIA attributes for improved accessibility.
|
|
4698
|
-
* - Updating `aria-expanded` on trigger elements based on visibility.
|
|
4699
|
-
* Automatically initializes all modal and offcanvas triggers on the page.
|
|
4700
|
-
*/
|
|
4701
|
-
class AccessibleToggle {
|
|
4702
|
-
constructor(triggerElement, type) {
|
|
4703
|
-
this.triggerElement = triggerElement;
|
|
4704
|
-
this.type = type;
|
|
4705
|
-
const target = triggerElement.getAttribute("data-bs-target") || triggerElement.getAttribute("href");
|
|
4706
|
-
if (!target || target === "#") {
|
|
4707
|
-
return;
|
|
4708
|
-
}
|
|
4709
|
-
this.targetElement = SelectorEngine.findOne(target);
|
|
4710
|
-
if (!this.targetElement) {
|
|
4711
|
-
return;
|
|
4712
|
-
}
|
|
4713
|
-
if (this.type === "modal") {
|
|
4714
|
-
this.instance = Modal.getOrCreateInstance(this.targetElement);
|
|
4715
|
-
} else if (this.type === "offcanvas") {
|
|
4716
|
-
this.instance = Offcanvas.getOrCreateInstance(this.targetElement);
|
|
4717
|
-
}
|
|
4718
|
-
this.addAriaAttributes();
|
|
4719
|
-
this.addEventListeners();
|
|
4720
|
-
}
|
|
4721
|
-
addAriaAttributes() {
|
|
4722
|
-
if (this.triggerElement) {
|
|
4723
|
-
this.triggerElement.setAttribute("aria-haspopup", "true");
|
|
4724
|
-
this.triggerElement.setAttribute("aria-expanded", "false");
|
|
4725
|
-
}
|
|
4726
|
-
}
|
|
4727
|
-
addEventListeners() {
|
|
4728
|
-
const showEvent = this.type === "modal" ? "show.bs.modal" : "show.bs.offcanvas";
|
|
4729
|
-
const hideEvent = this.type === "modal" ? "hide.bs.modal" : "hide.bs.offcanvas";
|
|
4730
|
-
EventHandler.on(this.targetElement, showEvent, () => {
|
|
4731
|
-
this.triggerElement.setAttribute("aria-expanded", "true");
|
|
4732
|
-
});
|
|
4733
|
-
EventHandler.on(this.targetElement, hideEvent, () => {
|
|
4734
|
-
this.triggerElement.setAttribute("aria-expanded", "false");
|
|
4735
|
-
});
|
|
4736
|
-
}
|
|
4737
|
-
static init(toggles) {
|
|
4738
|
-
toggles.forEach(toggle => {
|
|
4739
|
-
const triggerElements = SelectorEngine.find(toggle.selector);
|
|
4740
|
-
triggerElements.forEach(triggerElement => new AccessibleToggle(triggerElement, toggle.type));
|
|
4741
|
-
});
|
|
4742
|
-
}
|
|
4743
|
-
}
|
|
4567
|
+
defineJQueryPlugin$1(Offcanvas);
|
|
4744
4568
|
|
|
4745
4569
|
/**
|
|
4746
4570
|
* --------------------------------------------------------------------------
|
|
4747
|
-
* Bootstrap
|
|
4571
|
+
* Bootstrap util/sanitizer.js
|
|
4748
4572
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
4749
4573
|
* --------------------------------------------------------------------------
|
|
4750
4574
|
*/
|
|
4751
4575
|
|
|
4752
|
-
|
|
4576
|
+
// js-docs-start allow-list
|
|
4753
4577
|
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
|
|
4754
|
-
|
|
4755
|
-
/**
|
|
4756
|
-
* A pattern that recognizes a commonly useful subset of URLs that are safe.
|
|
4757
|
-
*
|
|
4758
|
-
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
|
|
4759
|
-
*/
|
|
4760
|
-
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
|
|
4761
|
-
|
|
4762
|
-
/**
|
|
4763
|
-
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
|
4764
|
-
*
|
|
4765
|
-
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
|
|
4766
|
-
*/
|
|
4767
|
-
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
|
|
4768
|
-
const allowedAttribute = (attribute, allowedAttributeList) => {
|
|
4769
|
-
const attributeName = attribute.nodeName.toLowerCase();
|
|
4770
|
-
if (allowedAttributeList.includes(attributeName)) {
|
|
4771
|
-
if (uriAttributes.has(attributeName)) {
|
|
4772
|
-
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
|
|
4773
|
-
}
|
|
4774
|
-
return true;
|
|
4775
|
-
}
|
|
4776
|
-
|
|
4777
|
-
// Check if a regular expression validates the attribute.
|
|
4778
|
-
return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
|
|
4779
|
-
};
|
|
4780
4578
|
const DefaultAllowlist = {
|
|
4781
4579
|
// Global attributes allowed on any supplied element below.
|
|
4782
4580
|
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
|
|
@@ -4786,7 +4584,10 @@
|
|
|
4786
4584
|
br: [],
|
|
4787
4585
|
col: [],
|
|
4788
4586
|
code: [],
|
|
4587
|
+
dd: [],
|
|
4789
4588
|
div: [],
|
|
4589
|
+
dl: [],
|
|
4590
|
+
dt: [],
|
|
4790
4591
|
em: [],
|
|
4791
4592
|
hr: [],
|
|
4792
4593
|
h1: [],
|
|
@@ -4810,6 +4611,30 @@
|
|
|
4810
4611
|
u: [],
|
|
4811
4612
|
ul: []
|
|
4812
4613
|
};
|
|
4614
|
+
// js-docs-end allow-list
|
|
4615
|
+
|
|
4616
|
+
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
|
|
4617
|
+
|
|
4618
|
+
/**
|
|
4619
|
+
* A pattern that recognizes URLs that are safe wrt. XSS in URL navigation
|
|
4620
|
+
* contexts.
|
|
4621
|
+
*
|
|
4622
|
+
* Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
|
|
4623
|
+
*/
|
|
4624
|
+
// eslint-disable-next-line unicorn/better-regex
|
|
4625
|
+
const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
|
|
4626
|
+
const allowedAttribute = (attribute, allowedAttributeList) => {
|
|
4627
|
+
const attributeName = attribute.nodeName.toLowerCase();
|
|
4628
|
+
if (allowedAttributeList.includes(attributeName)) {
|
|
4629
|
+
if (uriAttributes.has(attributeName)) {
|
|
4630
|
+
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
|
|
4631
|
+
}
|
|
4632
|
+
return true;
|
|
4633
|
+
}
|
|
4634
|
+
|
|
4635
|
+
// Check if a regular expression validates the attribute.
|
|
4636
|
+
return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
|
|
4637
|
+
};
|
|
4813
4638
|
function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
|
|
4814
4639
|
if (!unsafeHtml.length) {
|
|
4815
4640
|
return unsafeHtml;
|
|
@@ -4839,7 +4664,7 @@
|
|
|
4839
4664
|
|
|
4840
4665
|
/**
|
|
4841
4666
|
* --------------------------------------------------------------------------
|
|
4842
|
-
* Bootstrap
|
|
4667
|
+
* Bootstrap util/template-factory.js
|
|
4843
4668
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
4844
4669
|
* --------------------------------------------------------------------------
|
|
4845
4670
|
*/
|
|
@@ -4849,8 +4674,8 @@
|
|
|
4849
4674
|
* Constants
|
|
4850
4675
|
*/
|
|
4851
4676
|
|
|
4852
|
-
const NAME$
|
|
4853
|
-
const Default$
|
|
4677
|
+
const NAME$7 = 'TemplateFactory';
|
|
4678
|
+
const Default$6 = {
|
|
4854
4679
|
allowList: DefaultAllowlist,
|
|
4855
4680
|
content: {},
|
|
4856
4681
|
// { selector : text , selector2 : text2 , }
|
|
@@ -4886,13 +4711,13 @@
|
|
|
4886
4711
|
|
|
4887
4712
|
// Getters
|
|
4888
4713
|
static get Default() {
|
|
4889
|
-
return Default$
|
|
4714
|
+
return Default$6;
|
|
4890
4715
|
}
|
|
4891
4716
|
static get DefaultType() {
|
|
4892
4717
|
return DefaultType$4;
|
|
4893
4718
|
}
|
|
4894
4719
|
static get NAME() {
|
|
4895
|
-
return NAME$
|
|
4720
|
+
return NAME$7;
|
|
4896
4721
|
}
|
|
4897
4722
|
|
|
4898
4723
|
// Public
|
|
@@ -4947,8 +4772,8 @@
|
|
|
4947
4772
|
templateElement.remove();
|
|
4948
4773
|
return;
|
|
4949
4774
|
}
|
|
4950
|
-
if (isElement$
|
|
4951
|
-
this._putElementInTemplate(getElement(content), templateElement);
|
|
4775
|
+
if (isElement$2(content)) {
|
|
4776
|
+
this._putElementInTemplate(getElement$1(content), templateElement);
|
|
4952
4777
|
return;
|
|
4953
4778
|
}
|
|
4954
4779
|
if (this._config.html) {
|
|
@@ -4961,7 +4786,7 @@
|
|
|
4961
4786
|
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
|
|
4962
4787
|
}
|
|
4963
4788
|
_resolvePossibleFunction(arg) {
|
|
4964
|
-
return
|
|
4789
|
+
return execute(arg, [this]);
|
|
4965
4790
|
}
|
|
4966
4791
|
_putElementInTemplate(element, templateElement) {
|
|
4967
4792
|
if (this._config.html) {
|
|
@@ -4975,7 +4800,7 @@
|
|
|
4975
4800
|
|
|
4976
4801
|
/**
|
|
4977
4802
|
* --------------------------------------------------------------------------
|
|
4978
|
-
* Bootstrap
|
|
4803
|
+
* Bootstrap tooltip.js
|
|
4979
4804
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
4980
4805
|
* --------------------------------------------------------------------------
|
|
4981
4806
|
*/
|
|
@@ -4985,14 +4810,14 @@
|
|
|
4985
4810
|
* Constants
|
|
4986
4811
|
*/
|
|
4987
4812
|
|
|
4988
|
-
const NAME$
|
|
4813
|
+
const NAME$6 = 'tooltip';
|
|
4989
4814
|
const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
|
|
4990
4815
|
const CLASS_NAME_FADE$2 = 'fade';
|
|
4991
4816
|
const CLASS_NAME_MODAL = 'modal';
|
|
4992
4817
|
const CLASS_NAME_SHOW$2 = 'show';
|
|
4993
4818
|
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
|
|
4994
4819
|
const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
|
|
4995
|
-
const EVENT_MODAL_HIDE = 'hide.bs.modal';
|
|
4820
|
+
const EVENT_MODAL_HIDE$1 = 'hide.bs.modal';
|
|
4996
4821
|
const TRIGGER_HOVER = 'hover';
|
|
4997
4822
|
const TRIGGER_FOCUS = 'focus';
|
|
4998
4823
|
const TRIGGER_CLICK = 'click';
|
|
@@ -5014,7 +4839,7 @@
|
|
|
5014
4839
|
BOTTOM: 'bottom',
|
|
5015
4840
|
LEFT: isRTL() ? 'right' : 'left'
|
|
5016
4841
|
};
|
|
5017
|
-
const Default$
|
|
4842
|
+
const Default$5 = {
|
|
5018
4843
|
allowList: DefaultAllowlist,
|
|
5019
4844
|
animation: true,
|
|
5020
4845
|
boundary: 'clippingParents',
|
|
@@ -5023,7 +4848,7 @@
|
|
|
5023
4848
|
delay: 0,
|
|
5024
4849
|
fallbackPlacements: ['top', 'right', 'bottom', 'left'],
|
|
5025
4850
|
html: false,
|
|
5026
|
-
offset: [0,
|
|
4851
|
+
offset: [0, 6],
|
|
5027
4852
|
placement: 'top',
|
|
5028
4853
|
popperConfig: null,
|
|
5029
4854
|
sanitize: true,
|
|
@@ -5083,13 +4908,13 @@
|
|
|
5083
4908
|
|
|
5084
4909
|
// Getters
|
|
5085
4910
|
static get Default() {
|
|
5086
|
-
return Default$
|
|
4911
|
+
return Default$5;
|
|
5087
4912
|
}
|
|
5088
4913
|
static get DefaultType() {
|
|
5089
4914
|
return DefaultType$3;
|
|
5090
4915
|
}
|
|
5091
4916
|
static get NAME() {
|
|
5092
|
-
return NAME$
|
|
4917
|
+
return NAME$6;
|
|
5093
4918
|
}
|
|
5094
4919
|
|
|
5095
4920
|
// Public
|
|
@@ -5115,7 +4940,7 @@
|
|
|
5115
4940
|
}
|
|
5116
4941
|
dispose() {
|
|
5117
4942
|
clearTimeout(this._timeout);
|
|
5118
|
-
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
|
4943
|
+
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE$1, this._hideModalHandler);
|
|
5119
4944
|
if (this._element.getAttribute('data-bs-original-title')) {
|
|
5120
4945
|
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
|
|
5121
4946
|
}
|
|
@@ -5136,7 +4961,7 @@
|
|
|
5136
4961
|
return;
|
|
5137
4962
|
}
|
|
5138
4963
|
|
|
5139
|
-
//
|
|
4964
|
+
// TODO: v6 remove this or make it optional
|
|
5140
4965
|
this._disposePopper();
|
|
5141
4966
|
const tip = this._getTipElement();
|
|
5142
4967
|
this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
|
|
@@ -5222,12 +5047,12 @@
|
|
|
5222
5047
|
_createTipElement(content) {
|
|
5223
5048
|
const tip = this._getTemplateFactory(content).toHtml();
|
|
5224
5049
|
|
|
5225
|
-
//
|
|
5050
|
+
// TODO: remove this check in v6
|
|
5226
5051
|
if (!tip) {
|
|
5227
5052
|
return null;
|
|
5228
5053
|
}
|
|
5229
5054
|
tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
|
|
5230
|
-
//
|
|
5055
|
+
// TODO: v6 the following can be achieved with CSS only
|
|
5231
5056
|
tip.classList.add(`bs-${this.constructor.NAME}-auto`);
|
|
5232
5057
|
const tipId = getUID(this.constructor.NAME).toString();
|
|
5233
5058
|
tip.setAttribute('id', tipId);
|
|
@@ -5277,7 +5102,7 @@
|
|
|
5277
5102
|
return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
|
|
5278
5103
|
}
|
|
5279
5104
|
_createPopper(tip) {
|
|
5280
|
-
const placement =
|
|
5105
|
+
const placement = execute(this._config.placement, [this, tip, this._element]);
|
|
5281
5106
|
const attachment = AttachmentMap[placement.toUpperCase()];
|
|
5282
5107
|
return createPopper(this._element, tip, this._getPopperConfig(attachment));
|
|
5283
5108
|
}
|
|
@@ -5294,7 +5119,7 @@
|
|
|
5294
5119
|
return offset;
|
|
5295
5120
|
}
|
|
5296
5121
|
_resolvePossibleFunction(arg) {
|
|
5297
|
-
return
|
|
5122
|
+
return execute(arg, [this._element]);
|
|
5298
5123
|
}
|
|
5299
5124
|
_getPopperConfig(attachment) {
|
|
5300
5125
|
const defaultBsPopperConfig = {
|
|
@@ -5332,7 +5157,7 @@
|
|
|
5332
5157
|
};
|
|
5333
5158
|
return {
|
|
5334
5159
|
...defaultBsPopperConfig,
|
|
5335
|
-
...(
|
|
5160
|
+
...execute(this._config.popperConfig, [defaultBsPopperConfig])
|
|
5336
5161
|
};
|
|
5337
5162
|
}
|
|
5338
5163
|
_setListeners() {
|
|
@@ -5363,7 +5188,7 @@
|
|
|
5363
5188
|
this.hide();
|
|
5364
5189
|
}
|
|
5365
5190
|
};
|
|
5366
|
-
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
|
5191
|
+
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE$1, this._hideModalHandler);
|
|
5367
5192
|
}
|
|
5368
5193
|
_fixTitle() {
|
|
5369
5194
|
const title = this._element.getAttribute('title');
|
|
@@ -5423,7 +5248,7 @@
|
|
|
5423
5248
|
return config;
|
|
5424
5249
|
}
|
|
5425
5250
|
_configAfterMerge(config) {
|
|
5426
|
-
config.container = config.container === false ? document.body : getElement(config.container);
|
|
5251
|
+
config.container = config.container === false ? document.body : getElement$1(config.container);
|
|
5427
5252
|
if (typeof config.delay === 'number') {
|
|
5428
5253
|
config.delay = {
|
|
5429
5254
|
show: config.delay,
|
|
@@ -5440,9 +5265,9 @@
|
|
|
5440
5265
|
}
|
|
5441
5266
|
_getDelegateConfig() {
|
|
5442
5267
|
const config = {};
|
|
5443
|
-
for (const key
|
|
5444
|
-
if (this.constructor.Default[key] !==
|
|
5445
|
-
config[key] =
|
|
5268
|
+
for (const [key, value] of Object.entries(this._config)) {
|
|
5269
|
+
if (this.constructor.Default[key] !== value) {
|
|
5270
|
+
config[key] = value;
|
|
5446
5271
|
}
|
|
5447
5272
|
}
|
|
5448
5273
|
config.selector = false;
|
|
@@ -5483,11 +5308,11 @@
|
|
|
5483
5308
|
* jQuery
|
|
5484
5309
|
*/
|
|
5485
5310
|
|
|
5486
|
-
defineJQueryPlugin(Tooltip);
|
|
5311
|
+
defineJQueryPlugin$1(Tooltip);
|
|
5487
5312
|
|
|
5488
5313
|
/**
|
|
5489
5314
|
* --------------------------------------------------------------------------
|
|
5490
|
-
* Bootstrap
|
|
5315
|
+
* Bootstrap popover.js
|
|
5491
5316
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
5492
5317
|
* --------------------------------------------------------------------------
|
|
5493
5318
|
*/
|
|
@@ -5497,10 +5322,10 @@
|
|
|
5497
5322
|
* Constants
|
|
5498
5323
|
*/
|
|
5499
5324
|
|
|
5500
|
-
const NAME$
|
|
5325
|
+
const NAME$5 = 'popover';
|
|
5501
5326
|
const SELECTOR_TITLE = '.popover-header';
|
|
5502
5327
|
const SELECTOR_CONTENT = '.popover-body';
|
|
5503
|
-
const Default$
|
|
5328
|
+
const Default$4 = {
|
|
5504
5329
|
...Tooltip.Default,
|
|
5505
5330
|
content: '',
|
|
5506
5331
|
offset: [0, 8],
|
|
@@ -5520,13 +5345,13 @@
|
|
|
5520
5345
|
class Popover extends Tooltip {
|
|
5521
5346
|
// Getters
|
|
5522
5347
|
static get Default() {
|
|
5523
|
-
return Default$
|
|
5348
|
+
return Default$4;
|
|
5524
5349
|
}
|
|
5525
5350
|
static get DefaultType() {
|
|
5526
5351
|
return DefaultType$2;
|
|
5527
5352
|
}
|
|
5528
5353
|
static get NAME() {
|
|
5529
|
-
return NAME$
|
|
5354
|
+
return NAME$5;
|
|
5530
5355
|
}
|
|
5531
5356
|
|
|
5532
5357
|
// Overrides
|
|
@@ -5564,11 +5389,11 @@
|
|
|
5564
5389
|
* jQuery
|
|
5565
5390
|
*/
|
|
5566
5391
|
|
|
5567
|
-
defineJQueryPlugin(Popover);
|
|
5392
|
+
defineJQueryPlugin$1(Popover);
|
|
5568
5393
|
|
|
5569
5394
|
/**
|
|
5570
5395
|
* --------------------------------------------------------------------------
|
|
5571
|
-
* Bootstrap
|
|
5396
|
+
* Bootstrap scrollspy.js
|
|
5572
5397
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
5573
5398
|
* --------------------------------------------------------------------------
|
|
5574
5399
|
*/
|
|
@@ -5578,13 +5403,13 @@
|
|
|
5578
5403
|
* Constants
|
|
5579
5404
|
*/
|
|
5580
5405
|
|
|
5581
|
-
const NAME$
|
|
5582
|
-
const DATA_KEY$
|
|
5583
|
-
const EVENT_KEY$
|
|
5584
|
-
const DATA_API_KEY$
|
|
5585
|
-
const EVENT_ACTIVATE$1 = `activate${EVENT_KEY$
|
|
5586
|
-
const EVENT_CLICK = `click${EVENT_KEY$
|
|
5587
|
-
const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$
|
|
5406
|
+
const NAME$4 = 'scrollspy';
|
|
5407
|
+
const DATA_KEY$4 = 'bs.scrollspy';
|
|
5408
|
+
const EVENT_KEY$4 = `.${DATA_KEY$4}`;
|
|
5409
|
+
const DATA_API_KEY$2 = '.data-api';
|
|
5410
|
+
const EVENT_ACTIVATE$1 = `activate${EVENT_KEY$4}`;
|
|
5411
|
+
const EVENT_CLICK = `click${EVENT_KEY$4}`;
|
|
5412
|
+
const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$4}${DATA_API_KEY$2}`;
|
|
5588
5413
|
const CLASS_NAME_DROPDOWN_ITEM$1 = 'dropdown-item';
|
|
5589
5414
|
const CLASS_NAME_ACTIVE$2 = 'active';
|
|
5590
5415
|
const SELECTOR_DATA_SPY$1 = '[data-bs-spy="scroll"]';
|
|
@@ -5596,7 +5421,7 @@
|
|
|
5596
5421
|
const SELECTOR_LINK_ITEMS$1 = `${SELECTOR_NAV_LINKS$1}, ${SELECTOR_NAV_ITEMS$1} > ${SELECTOR_NAV_LINKS$1}, ${SELECTOR_LIST_ITEMS$1}`;
|
|
5597
5422
|
const SELECTOR_DROPDOWN$1 = '.dropdown';
|
|
5598
5423
|
const SELECTOR_DROPDOWN_TOGGLE$2 = '.dropdown-toggle';
|
|
5599
|
-
const Default$
|
|
5424
|
+
const Default$3 = {
|
|
5600
5425
|
offset: null,
|
|
5601
5426
|
// TODO: v6 @deprecated, keep it for backwards compatibility reasons
|
|
5602
5427
|
rootMargin: '0px 0px -25%',
|
|
@@ -5636,13 +5461,13 @@
|
|
|
5636
5461
|
|
|
5637
5462
|
// Getters
|
|
5638
5463
|
static get Default() {
|
|
5639
|
-
return Default$
|
|
5464
|
+
return Default$3;
|
|
5640
5465
|
}
|
|
5641
5466
|
static get DefaultType() {
|
|
5642
5467
|
return DefaultType$1;
|
|
5643
5468
|
}
|
|
5644
5469
|
static get NAME() {
|
|
5645
|
-
return NAME$
|
|
5470
|
+
return NAME$4;
|
|
5646
5471
|
}
|
|
5647
5472
|
|
|
5648
5473
|
// Public
|
|
@@ -5666,7 +5491,7 @@
|
|
|
5666
5491
|
// Private
|
|
5667
5492
|
_configAfterMerge(config) {
|
|
5668
5493
|
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
|
|
5669
|
-
config.target = getElement(config.target) || document.body;
|
|
5494
|
+
config.target = getElement$1(config.target) || document.body;
|
|
5670
5495
|
|
|
5671
5496
|
// TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
|
|
5672
5497
|
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
|
|
@@ -5752,11 +5577,11 @@
|
|
|
5752
5577
|
if (!anchor.hash || isDisabled(anchor)) {
|
|
5753
5578
|
continue;
|
|
5754
5579
|
}
|
|
5755
|
-
const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
|
|
5580
|
+
const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
|
|
5756
5581
|
|
|
5757
5582
|
// ensure that the observableSection exists & is visible
|
|
5758
5583
|
if (isVisible(observableSection)) {
|
|
5759
|
-
this._targetLinks.set(anchor.hash, anchor);
|
|
5584
|
+
this._targetLinks.set(decodeURI(anchor.hash), anchor);
|
|
5760
5585
|
this._observableSections.set(anchor.hash, observableSection);
|
|
5761
5586
|
}
|
|
5762
5587
|
}
|
|
@@ -5824,7 +5649,7 @@
|
|
|
5824
5649
|
* jQuery
|
|
5825
5650
|
*/
|
|
5826
5651
|
|
|
5827
|
-
defineJQueryPlugin(ScrollSpy$1);
|
|
5652
|
+
defineJQueryPlugin$1(ScrollSpy$1);
|
|
5828
5653
|
|
|
5829
5654
|
/**
|
|
5830
5655
|
* --------------------------------------------------------------------------
|
|
@@ -5890,30 +5715,123 @@
|
|
|
5890
5715
|
|
|
5891
5716
|
/**
|
|
5892
5717
|
* --------------------------------------------------------------------------
|
|
5893
|
-
* Bootstrap (v5.
|
|
5718
|
+
* Bootstrap (v5.2.3): util/index.js
|
|
5894
5719
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
5895
5720
|
* --------------------------------------------------------------------------
|
|
5896
5721
|
*/
|
|
5897
5722
|
|
|
5723
|
+
const getSelector = element => {
|
|
5724
|
+
let selector = element.getAttribute('data-bs-target');
|
|
5725
|
+
if (!selector || selector === '#') {
|
|
5726
|
+
let hrefAttribute = element.getAttribute('href');
|
|
5898
5727
|
|
|
5899
|
-
|
|
5900
|
-
|
|
5901
|
-
|
|
5902
|
-
|
|
5903
|
-
|
|
5904
|
-
|
|
5905
|
-
|
|
5906
|
-
|
|
5907
|
-
|
|
5908
|
-
|
|
5909
|
-
|
|
5728
|
+
// The only valid content that could double as a selector are IDs or classes,
|
|
5729
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
5730
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
5731
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
5732
|
+
if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
|
|
5733
|
+
return null;
|
|
5734
|
+
}
|
|
5735
|
+
|
|
5736
|
+
// Just in case some CMS puts out a full URL with the anchor appended
|
|
5737
|
+
if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
|
|
5738
|
+
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
|
|
5739
|
+
}
|
|
5740
|
+
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
|
|
5741
|
+
}
|
|
5742
|
+
return selector;
|
|
5743
|
+
};
|
|
5744
|
+
const getSelectorFromElement = element => {
|
|
5745
|
+
const selector = getSelector(element);
|
|
5746
|
+
if (selector) {
|
|
5747
|
+
return document.querySelector(selector) ? selector : null;
|
|
5748
|
+
}
|
|
5749
|
+
return null;
|
|
5750
|
+
};
|
|
5751
|
+
const isElement = object => {
|
|
5752
|
+
if (!object || typeof object !== 'object') {
|
|
5753
|
+
return false;
|
|
5754
|
+
}
|
|
5755
|
+
if (typeof object.jquery !== 'undefined') {
|
|
5756
|
+
object = object[0];
|
|
5757
|
+
}
|
|
5758
|
+
return typeof object.nodeType !== 'undefined';
|
|
5759
|
+
};
|
|
5760
|
+
const getElement = object => {
|
|
5761
|
+
// it's a jQuery object or a node element
|
|
5762
|
+
if (isElement(object)) {
|
|
5763
|
+
return object.jquery ? object[0] : object;
|
|
5764
|
+
}
|
|
5765
|
+
if (typeof object === 'string' && object.length > 0) {
|
|
5766
|
+
return document.querySelector(object);
|
|
5767
|
+
}
|
|
5768
|
+
return null;
|
|
5769
|
+
};
|
|
5770
|
+
const getjQuery = () => {
|
|
5771
|
+
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
5772
|
+
return window.jQuery;
|
|
5773
|
+
}
|
|
5774
|
+
return null;
|
|
5775
|
+
};
|
|
5776
|
+
const DOMContentLoadedCallbacks = [];
|
|
5777
|
+
const onDOMContentLoaded = callback => {
|
|
5778
|
+
if (document.readyState === 'loading') {
|
|
5779
|
+
// add listener on the first call when the document is in loading state
|
|
5780
|
+
if (!DOMContentLoadedCallbacks.length) {
|
|
5781
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
5782
|
+
for (const callback of DOMContentLoadedCallbacks) {
|
|
5783
|
+
callback();
|
|
5784
|
+
}
|
|
5785
|
+
});
|
|
5786
|
+
}
|
|
5787
|
+
DOMContentLoadedCallbacks.push(callback);
|
|
5788
|
+
} else {
|
|
5789
|
+
callback();
|
|
5790
|
+
}
|
|
5791
|
+
};
|
|
5792
|
+
const defineJQueryPlugin = plugin => {
|
|
5793
|
+
onDOMContentLoaded(() => {
|
|
5794
|
+
const $ = getjQuery();
|
|
5795
|
+
/* istanbul ignore if */
|
|
5796
|
+
if ($) {
|
|
5797
|
+
const name = plugin.NAME;
|
|
5798
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
5799
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
5800
|
+
$.fn[name].Constructor = plugin;
|
|
5801
|
+
$.fn[name].noConflict = () => {
|
|
5802
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
5803
|
+
return plugin.jQueryInterface;
|
|
5804
|
+
};
|
|
5805
|
+
}
|
|
5806
|
+
});
|
|
5807
|
+
};
|
|
5808
|
+
|
|
5809
|
+
/**
|
|
5810
|
+
* --------------------------------------------------------------------------
|
|
5811
|
+
* Bootstrap (v5.1.3): scrollspy.js
|
|
5812
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
5813
|
+
* --------------------------------------------------------------------------
|
|
5814
|
+
*/
|
|
5815
|
+
|
|
5816
|
+
|
|
5817
|
+
/**
|
|
5818
|
+
* ------------------------------------------------------------------------
|
|
5819
|
+
* Constants
|
|
5820
|
+
* ------------------------------------------------------------------------
|
|
5821
|
+
*/
|
|
5822
|
+
|
|
5823
|
+
const NAME$3 = 'scrollspy';
|
|
5824
|
+
const DATA_KEY$3 = 'bs.scrollspy';
|
|
5825
|
+
const EVENT_KEY$3 = `.${DATA_KEY$3}`;
|
|
5826
|
+
const DATA_API_KEY$1 = '.data-api';
|
|
5827
|
+
const Default$2 = {
|
|
5910
5828
|
offset: 10,
|
|
5911
5829
|
method: 'auto',
|
|
5912
5830
|
target: ''
|
|
5913
5831
|
};
|
|
5914
|
-
const EVENT_ACTIVATE = `activate${EVENT_KEY$
|
|
5915
|
-
const EVENT_SCROLL = `scroll${EVENT_KEY$
|
|
5916
|
-
const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$
|
|
5832
|
+
const EVENT_ACTIVATE = `activate${EVENT_KEY$3}`;
|
|
5833
|
+
const EVENT_SCROLL = `scroll${EVENT_KEY$3}`;
|
|
5834
|
+
const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
|
|
5917
5835
|
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
|
5918
5836
|
const CLASS_NAME_ACTIVE$1 = 'active';
|
|
5919
5837
|
const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
|
|
@@ -5950,10 +5868,10 @@
|
|
|
5950
5868
|
// Getters
|
|
5951
5869
|
|
|
5952
5870
|
static get Default() {
|
|
5953
|
-
return Default$
|
|
5871
|
+
return Default$2;
|
|
5954
5872
|
}
|
|
5955
5873
|
static get NAME() {
|
|
5956
|
-
return NAME$
|
|
5874
|
+
return NAME$3;
|
|
5957
5875
|
}
|
|
5958
5876
|
|
|
5959
5877
|
// Public
|
|
@@ -5982,7 +5900,7 @@
|
|
|
5982
5900
|
});
|
|
5983
5901
|
}
|
|
5984
5902
|
dispose() {
|
|
5985
|
-
EventHandler.off(this._scrollElement, EVENT_KEY$
|
|
5903
|
+
EventHandler.off(this._scrollElement, EVENT_KEY$3);
|
|
5986
5904
|
super.dispose();
|
|
5987
5905
|
}
|
|
5988
5906
|
|
|
@@ -5990,7 +5908,7 @@
|
|
|
5990
5908
|
|
|
5991
5909
|
_getConfig(config) {
|
|
5992
5910
|
config = {
|
|
5993
|
-
...Default$
|
|
5911
|
+
...Default$2,
|
|
5994
5912
|
...Manipulator.getDataAttributes(this._element),
|
|
5995
5913
|
...(typeof config === 'object' && config ? config : {})
|
|
5996
5914
|
};
|
|
@@ -6097,7 +6015,7 @@
|
|
|
6097
6015
|
|
|
6098
6016
|
/**
|
|
6099
6017
|
* --------------------------------------------------------------------------
|
|
6100
|
-
* Bootstrap
|
|
6018
|
+
* Bootstrap tab.js
|
|
6101
6019
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
6102
6020
|
* --------------------------------------------------------------------------
|
|
6103
6021
|
*/
|
|
@@ -6107,31 +6025,33 @@
|
|
|
6107
6025
|
* Constants
|
|
6108
6026
|
*/
|
|
6109
6027
|
|
|
6110
|
-
const NAME$
|
|
6111
|
-
const DATA_KEY$
|
|
6112
|
-
const EVENT_KEY$
|
|
6113
|
-
const EVENT_HIDE$1 = `hide${EVENT_KEY$
|
|
6114
|
-
const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$
|
|
6115
|
-
const EVENT_SHOW$1 = `show${EVENT_KEY$
|
|
6116
|
-
const EVENT_SHOWN$1 = `shown${EVENT_KEY$
|
|
6117
|
-
const EVENT_CLICK_DATA_API = `click${EVENT_KEY$
|
|
6118
|
-
const EVENT_KEYDOWN = `keydown${EVENT_KEY$
|
|
6119
|
-
const EVENT_LOAD_DATA_API = `load${EVENT_KEY$
|
|
6028
|
+
const NAME$2 = 'tab';
|
|
6029
|
+
const DATA_KEY$2 = 'bs.tab';
|
|
6030
|
+
const EVENT_KEY$2 = `.${DATA_KEY$2}`;
|
|
6031
|
+
const EVENT_HIDE$1 = `hide${EVENT_KEY$2}`;
|
|
6032
|
+
const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$2}`;
|
|
6033
|
+
const EVENT_SHOW$1 = `show${EVENT_KEY$2}`;
|
|
6034
|
+
const EVENT_SHOWN$1 = `shown${EVENT_KEY$2}`;
|
|
6035
|
+
const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$2}`;
|
|
6036
|
+
const EVENT_KEYDOWN = `keydown${EVENT_KEY$2}`;
|
|
6037
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}`;
|
|
6120
6038
|
const ARROW_LEFT_KEY = 'ArrowLeft';
|
|
6121
6039
|
const ARROW_RIGHT_KEY = 'ArrowRight';
|
|
6122
6040
|
const ARROW_UP_KEY = 'ArrowUp';
|
|
6123
6041
|
const ARROW_DOWN_KEY = 'ArrowDown';
|
|
6042
|
+
const HOME_KEY = 'Home';
|
|
6043
|
+
const END_KEY = 'End';
|
|
6124
6044
|
const CLASS_NAME_ACTIVE = 'active';
|
|
6125
6045
|
const CLASS_NAME_FADE$1 = 'fade';
|
|
6126
6046
|
const CLASS_NAME_SHOW$1 = 'show';
|
|
6127
6047
|
const CLASS_DROPDOWN = 'dropdown';
|
|
6128
6048
|
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
6129
6049
|
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
|
|
6130
|
-
const NOT_SELECTOR_DROPDOWN_TOGGLE =
|
|
6050
|
+
const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
|
|
6131
6051
|
const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
|
|
6132
6052
|
const SELECTOR_OUTER = '.nav-item, .list-group-item';
|
|
6133
6053
|
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
|
|
6134
|
-
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; //
|
|
6054
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
|
|
6135
6055
|
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
|
|
6136
6056
|
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
|
|
6137
6057
|
|
|
@@ -6145,7 +6065,7 @@
|
|
|
6145
6065
|
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
|
|
6146
6066
|
if (!this._parent) {
|
|
6147
6067
|
return;
|
|
6148
|
-
//
|
|
6068
|
+
// TODO: should throw exception in v6
|
|
6149
6069
|
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
|
|
6150
6070
|
}
|
|
6151
6071
|
|
|
@@ -6156,7 +6076,7 @@
|
|
|
6156
6076
|
|
|
6157
6077
|
// Getters
|
|
6158
6078
|
static get NAME() {
|
|
6159
|
-
return NAME$
|
|
6079
|
+
return NAME$2;
|
|
6160
6080
|
}
|
|
6161
6081
|
|
|
6162
6082
|
// Public
|
|
@@ -6188,7 +6108,7 @@
|
|
|
6188
6108
|
return;
|
|
6189
6109
|
}
|
|
6190
6110
|
element.classList.add(CLASS_NAME_ACTIVE);
|
|
6191
|
-
this._activate(getElementFromSelector(element)); // Search and activate/show the proper section
|
|
6111
|
+
this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
|
|
6192
6112
|
|
|
6193
6113
|
const complete = () => {
|
|
6194
6114
|
if (element.getAttribute('role') !== 'tab') {
|
|
@@ -6210,7 +6130,7 @@
|
|
|
6210
6130
|
}
|
|
6211
6131
|
element.classList.remove(CLASS_NAME_ACTIVE);
|
|
6212
6132
|
element.blur();
|
|
6213
|
-
this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too
|
|
6133
|
+
this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
|
|
6214
6134
|
|
|
6215
6135
|
const complete = () => {
|
|
6216
6136
|
if (element.getAttribute('role') !== 'tab') {
|
|
@@ -6227,13 +6147,19 @@
|
|
|
6227
6147
|
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
|
|
6228
6148
|
}
|
|
6229
6149
|
_keydown(event) {
|
|
6230
|
-
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
|
|
6150
|
+
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
|
|
6231
6151
|
return;
|
|
6232
6152
|
}
|
|
6233
6153
|
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
|
|
6234
6154
|
event.preventDefault();
|
|
6235
|
-
const
|
|
6236
|
-
|
|
6155
|
+
const children = this._getChildren().filter(element => !isDisabled(element));
|
|
6156
|
+
let nextActiveElement;
|
|
6157
|
+
if ([HOME_KEY, END_KEY].includes(event.key)) {
|
|
6158
|
+
nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
|
|
6159
|
+
} else {
|
|
6160
|
+
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
|
|
6161
|
+
nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
|
|
6162
|
+
}
|
|
6237
6163
|
if (nextActiveElement) {
|
|
6238
6164
|
nextActiveElement.focus({
|
|
6239
6165
|
preventScroll: true
|
|
@@ -6271,13 +6197,13 @@
|
|
|
6271
6197
|
this._setInitialAttributesOnTargetPanel(child);
|
|
6272
6198
|
}
|
|
6273
6199
|
_setInitialAttributesOnTargetPanel(child) {
|
|
6274
|
-
const target = getElementFromSelector(child);
|
|
6200
|
+
const target = SelectorEngine.getElementFromSelector(child);
|
|
6275
6201
|
if (!target) {
|
|
6276
6202
|
return;
|
|
6277
6203
|
}
|
|
6278
6204
|
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
|
|
6279
6205
|
if (child.id) {
|
|
6280
|
-
this._setAttributeIfNotExists(target, 'aria-labelledby',
|
|
6206
|
+
this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
|
|
6281
6207
|
}
|
|
6282
6208
|
}
|
|
6283
6209
|
_toggleDropDown(element, open) {
|
|
@@ -6333,7 +6259,7 @@
|
|
|
6333
6259
|
* Data API implementation
|
|
6334
6260
|
*/
|
|
6335
6261
|
|
|
6336
|
-
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
6262
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE, function (event) {
|
|
6337
6263
|
if (['A', 'AREA'].includes(this.tagName)) {
|
|
6338
6264
|
event.preventDefault();
|
|
6339
6265
|
}
|
|
@@ -6355,11 +6281,11 @@
|
|
|
6355
6281
|
* jQuery
|
|
6356
6282
|
*/
|
|
6357
6283
|
|
|
6358
|
-
defineJQueryPlugin(Tab);
|
|
6284
|
+
defineJQueryPlugin$1(Tab);
|
|
6359
6285
|
|
|
6360
6286
|
/**
|
|
6361
6287
|
* --------------------------------------------------------------------------
|
|
6362
|
-
* Bootstrap
|
|
6288
|
+
* Bootstrap toast.js
|
|
6363
6289
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
6364
6290
|
* --------------------------------------------------------------------------
|
|
6365
6291
|
*/
|
|
@@ -6369,17 +6295,17 @@
|
|
|
6369
6295
|
* Constants
|
|
6370
6296
|
*/
|
|
6371
6297
|
|
|
6372
|
-
const NAME = 'toast';
|
|
6373
|
-
const DATA_KEY = 'bs.toast';
|
|
6374
|
-
const EVENT_KEY = `.${DATA_KEY}`;
|
|
6375
|
-
const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
|
|
6376
|
-
const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
|
|
6377
|
-
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
|
|
6378
|
-
const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
|
|
6379
|
-
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
6380
|
-
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
6381
|
-
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
6382
|
-
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
6298
|
+
const NAME$1 = 'toast';
|
|
6299
|
+
const DATA_KEY$1 = 'bs.toast';
|
|
6300
|
+
const EVENT_KEY$1 = `.${DATA_KEY$1}`;
|
|
6301
|
+
const EVENT_MOUSEOVER = `mouseover${EVENT_KEY$1}`;
|
|
6302
|
+
const EVENT_MOUSEOUT = `mouseout${EVENT_KEY$1}`;
|
|
6303
|
+
const EVENT_FOCUSIN = `focusin${EVENT_KEY$1}`;
|
|
6304
|
+
const EVENT_FOCUSOUT = `focusout${EVENT_KEY$1}`;
|
|
6305
|
+
const EVENT_HIDE = `hide${EVENT_KEY$1}`;
|
|
6306
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY$1}`;
|
|
6307
|
+
const EVENT_SHOW = `show${EVENT_KEY$1}`;
|
|
6308
|
+
const EVENT_SHOWN = `shown${EVENT_KEY$1}`;
|
|
6383
6309
|
const CLASS_NAME_FADE = 'fade';
|
|
6384
6310
|
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
|
|
6385
6311
|
const CLASS_NAME_SHOW = 'show';
|
|
@@ -6389,7 +6315,7 @@
|
|
|
6389
6315
|
autohide: 'boolean',
|
|
6390
6316
|
delay: 'number'
|
|
6391
6317
|
};
|
|
6392
|
-
const Default = {
|
|
6318
|
+
const Default$1 = {
|
|
6393
6319
|
animation: true,
|
|
6394
6320
|
autohide: true,
|
|
6395
6321
|
delay: 5000
|
|
@@ -6410,13 +6336,13 @@
|
|
|
6410
6336
|
|
|
6411
6337
|
// Getters
|
|
6412
6338
|
static get Default() {
|
|
6413
|
-
return Default;
|
|
6339
|
+
return Default$1;
|
|
6414
6340
|
}
|
|
6415
6341
|
static get DefaultType() {
|
|
6416
6342
|
return DefaultType;
|
|
6417
6343
|
}
|
|
6418
6344
|
static get NAME() {
|
|
6419
|
-
return NAME;
|
|
6345
|
+
return NAME$1;
|
|
6420
6346
|
}
|
|
6421
6347
|
|
|
6422
6348
|
// Public
|
|
@@ -6539,7 +6465,223 @@
|
|
|
6539
6465
|
* jQuery
|
|
6540
6466
|
*/
|
|
6541
6467
|
|
|
6542
|
-
defineJQueryPlugin(Toast);
|
|
6468
|
+
defineJQueryPlugin$1(Toast);
|
|
6469
|
+
|
|
6470
|
+
class AccordionToggle {
|
|
6471
|
+
static isInitialized = false;
|
|
6472
|
+
constructor(buttonElement) {
|
|
6473
|
+
this.buttonElement = buttonElement;
|
|
6474
|
+
this.targetAccordionId = buttonElement.getAttribute("data-target");
|
|
6475
|
+
this.action = buttonElement.getAttribute("data-action");
|
|
6476
|
+
this.accordionElement = SelectorEngine.findOne(`#${this.targetAccordionId}`);
|
|
6477
|
+
this.accordionItems = SelectorEngine.find(".accordion-collapse", this.accordionElement);
|
|
6478
|
+
this.addEventListeners();
|
|
6479
|
+
}
|
|
6480
|
+
addEventListeners() {
|
|
6481
|
+
EventHandler.on(this.buttonElement, "click", event => this.handleAccordionAction(event));
|
|
6482
|
+
}
|
|
6483
|
+
handleAccordionAction(event) {
|
|
6484
|
+
const item = event.target;
|
|
6485
|
+
const action = item.getAttribute('data-action');
|
|
6486
|
+
const accordionItems = this.accordionItems;
|
|
6487
|
+
accordionItems.forEach(accordionItem => {
|
|
6488
|
+
const collapseInstance = Collapse.getOrCreateInstance(accordionItem, {
|
|
6489
|
+
toggle: false
|
|
6490
|
+
});
|
|
6491
|
+
if (action === 'expand') {
|
|
6492
|
+
collapseInstance.show();
|
|
6493
|
+
} else if (action === 'collapse') {
|
|
6494
|
+
collapseInstance.hide();
|
|
6495
|
+
}
|
|
6496
|
+
});
|
|
6497
|
+
}
|
|
6498
|
+
static init() {
|
|
6499
|
+
if (AccordionToggle.isInitialized) {
|
|
6500
|
+
return;
|
|
6501
|
+
}
|
|
6502
|
+
const toggleButtons = SelectorEngine.find('[data-action][data-target]');
|
|
6503
|
+
toggleButtons.forEach(buttonElement => new AccordionToggle(buttonElement));
|
|
6504
|
+
AccordionToggle.isInitialized = true;
|
|
6505
|
+
}
|
|
6506
|
+
}
|
|
6507
|
+
|
|
6508
|
+
/**
|
|
6509
|
+
* --------------------------------------------------------------------------
|
|
6510
|
+
* Bootstrap (v5.1.3): gallery.js
|
|
6511
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
6512
|
+
* --------------------------------------------------------------------------
|
|
6513
|
+
*/
|
|
6514
|
+
|
|
6515
|
+
|
|
6516
|
+
/**
|
|
6517
|
+
* ------------------------------------------------------------------------
|
|
6518
|
+
* Constants
|
|
6519
|
+
* ------------------------------------------------------------------------
|
|
6520
|
+
*/
|
|
6521
|
+
|
|
6522
|
+
const Default = {};
|
|
6523
|
+
const NAME = 'gallery';
|
|
6524
|
+
const DATA_KEY = 'bs.gallery';
|
|
6525
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
6526
|
+
const DATA_API_KEY = '.data-api';
|
|
6527
|
+
const CAROUSEL_SELECTOR = '.carousel';
|
|
6528
|
+
const CAROUSEL_PAGER_SELECTOR = '.carousel-pager span';
|
|
6529
|
+
const CAROUSEL_ACTIVE_SELECTOR = '.carousel-item.active';
|
|
6530
|
+
const CAROUSEL_ITEM_SELECTOR = '.carousel-item';
|
|
6531
|
+
const THUMBNAIL_SELECTOR = '.bcl-gallery__grid a, .bcl-gallery__mobile-view-more';
|
|
6532
|
+
const MODAL_SELECTOR = '.modal';
|
|
6533
|
+
const EVENT_MODAL_HIDE = 'hide.bs.modal';
|
|
6534
|
+
const CAROUSEL_EVENT = 'slide.bs.carousel';
|
|
6535
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
6536
|
+
|
|
6537
|
+
/**
|
|
6538
|
+
* ------------------------------------------------------------------------
|
|
6539
|
+
* Class Definition
|
|
6540
|
+
* ------------------------------------------------------------------------
|
|
6541
|
+
*/
|
|
6542
|
+
|
|
6543
|
+
class Gallery extends BaseComponent {
|
|
6544
|
+
constructor(element, config) {
|
|
6545
|
+
super(element, config);
|
|
6546
|
+
/* eslint no-underscore-dangle: ["error", { "allow": ["_element"] }] */
|
|
6547
|
+
this.carousel = SelectorEngine.findOne(CAROUSEL_SELECTOR, this._element);
|
|
6548
|
+
this.carouselPager = SelectorEngine.findOne(CAROUSEL_PAGER_SELECTOR, this._element);
|
|
6549
|
+
this.carouselStartIndex = element.getAttribute('data-gallery-start');
|
|
6550
|
+
this.carouselActiveItem = SelectorEngine.find(CAROUSEL_ITEM_SELECTOR, this.carousel)[this.carouselStartIndex];
|
|
6551
|
+
this.carouselPager.textContent = Number(this.carouselStartIndex) + 1;
|
|
6552
|
+
this.modal = SelectorEngine.findOne(MODAL_SELECTOR, this._element);
|
|
6553
|
+
this.addEventListeners();
|
|
6554
|
+
this.carouselLazyLoad(this.carouselActiveItem);
|
|
6555
|
+
}
|
|
6556
|
+
|
|
6557
|
+
// Getters
|
|
6558
|
+
static get NAME() {
|
|
6559
|
+
return NAME;
|
|
6560
|
+
}
|
|
6561
|
+
|
|
6562
|
+
// Public
|
|
6563
|
+
setSlide(event) {
|
|
6564
|
+
const slideFrom = SelectorEngine.findOne(CAROUSEL_ACTIVE_SELECTOR, this.carousel);
|
|
6565
|
+
const slideTo = event.relatedTarget;
|
|
6566
|
+
this.carouselLazyLoad(slideTo);
|
|
6567
|
+
this.carouselPager.textContent = event.to + 1;
|
|
6568
|
+
this.stopVideo(slideFrom);
|
|
6569
|
+
}
|
|
6570
|
+
stopSlide() {
|
|
6571
|
+
const currentSlide = SelectorEngine.findOne(CAROUSEL_ACTIVE_SELECTOR, this.carousel);
|
|
6572
|
+
this.stopVideo(currentSlide);
|
|
6573
|
+
}
|
|
6574
|
+
stopVideo(slide) {
|
|
6575
|
+
const iframe = SelectorEngine.findOne('iframe', slide);
|
|
6576
|
+
const video = SelectorEngine.findOne('video', slide);
|
|
6577
|
+
if (iframe) {
|
|
6578
|
+
iframe.src = iframe.dataset.src;
|
|
6579
|
+
} else if (video) {
|
|
6580
|
+
video.pause();
|
|
6581
|
+
}
|
|
6582
|
+
}
|
|
6583
|
+
|
|
6584
|
+
// Private
|
|
6585
|
+
carouselLazyLoad(slide) {
|
|
6586
|
+
const media = SelectorEngine.findOne('[data-src]', slide);
|
|
6587
|
+
if (media && !media.src) {
|
|
6588
|
+
media.src = media.dataset.src;
|
|
6589
|
+
}
|
|
6590
|
+
}
|
|
6591
|
+
addEventListeners() {
|
|
6592
|
+
EventHandler.on(this.carousel, CAROUSEL_EVENT, event => this.setSlide(event));
|
|
6593
|
+
EventHandler.on(this.modal, EVENT_MODAL_HIDE, event => this.stopSlide(event));
|
|
6594
|
+
}
|
|
6595
|
+
|
|
6596
|
+
// Static
|
|
6597
|
+
static get Default() {
|
|
6598
|
+
return Default;
|
|
6599
|
+
}
|
|
6600
|
+
static jQueryInterface(config) {
|
|
6601
|
+
return this.each(function jInterface() {
|
|
6602
|
+
const data = Gallery.getOrCreateInstance(this);
|
|
6603
|
+
if (typeof config !== 'string') {
|
|
6604
|
+
return;
|
|
6605
|
+
}
|
|
6606
|
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
6607
|
+
throw new TypeError(`No method named "${config}"`);
|
|
6608
|
+
}
|
|
6609
|
+
data[config](this);
|
|
6610
|
+
});
|
|
6611
|
+
}
|
|
6612
|
+
}
|
|
6613
|
+
|
|
6614
|
+
/**
|
|
6615
|
+
* ------------------------------------------------------------------------
|
|
6616
|
+
* Data Api implementation
|
|
6617
|
+
* ------------------------------------------------------------------------
|
|
6618
|
+
*/
|
|
6619
|
+
|
|
6620
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, THUMBNAIL_SELECTOR, event => {
|
|
6621
|
+
const gallery = event.target.closest('div.bcl-gallery');
|
|
6622
|
+
const firstSlide = event.target.parentNode.getAttribute('data-bs-slide-to');
|
|
6623
|
+
gallery.dataset.galleryStart = firstSlide;
|
|
6624
|
+
Gallery.getOrCreateInstance(gallery);
|
|
6625
|
+
});
|
|
6626
|
+
|
|
6627
|
+
/**
|
|
6628
|
+
* ------------------------------------------------------------------------
|
|
6629
|
+
* jQuery
|
|
6630
|
+
* ------------------------------------------------------------------------
|
|
6631
|
+
* add .gallery to jQuery only if jQuery is present
|
|
6632
|
+
*/
|
|
6633
|
+
|
|
6634
|
+
defineJQueryPlugin$1(Gallery);
|
|
6635
|
+
|
|
6636
|
+
/**
|
|
6637
|
+
* AccessibleToggle enhances Bootstrap Modal and Offcanvas components by:
|
|
6638
|
+
* - Adding ARIA attributes for improved accessibility.
|
|
6639
|
+
* - Updating `aria-expanded` on trigger elements based on visibility.
|
|
6640
|
+
* Automatically initializes all modal and offcanvas triggers on the page.
|
|
6641
|
+
*/
|
|
6642
|
+
class AccessibleToggle {
|
|
6643
|
+
constructor(triggerElement, type) {
|
|
6644
|
+
this.triggerElement = triggerElement;
|
|
6645
|
+
this.type = type;
|
|
6646
|
+
const target = triggerElement.getAttribute("data-bs-target") || triggerElement.getAttribute("href");
|
|
6647
|
+
if (!target || target === "#") {
|
|
6648
|
+
return;
|
|
6649
|
+
}
|
|
6650
|
+
this.targetElement = SelectorEngine.findOne(target);
|
|
6651
|
+
if (!this.targetElement) {
|
|
6652
|
+
return;
|
|
6653
|
+
}
|
|
6654
|
+
if (this.type === "modal") {
|
|
6655
|
+
this.instance = Modal.getOrCreateInstance(this.targetElement);
|
|
6656
|
+
} else if (this.type === "offcanvas") {
|
|
6657
|
+
this.instance = Offcanvas.getOrCreateInstance(this.targetElement);
|
|
6658
|
+
}
|
|
6659
|
+
this.addAriaAttributes();
|
|
6660
|
+
this.addEventListeners();
|
|
6661
|
+
}
|
|
6662
|
+
addAriaAttributes() {
|
|
6663
|
+
if (this.triggerElement) {
|
|
6664
|
+
this.triggerElement.setAttribute("aria-haspopup", "true");
|
|
6665
|
+
this.triggerElement.setAttribute("aria-expanded", "false");
|
|
6666
|
+
}
|
|
6667
|
+
}
|
|
6668
|
+
addEventListeners() {
|
|
6669
|
+
const showEvent = this.type === "modal" ? "show.bs.modal" : "show.bs.offcanvas";
|
|
6670
|
+
const hideEvent = this.type === "modal" ? "hide.bs.modal" : "hide.bs.offcanvas";
|
|
6671
|
+
EventHandler.on(this.targetElement, showEvent, () => {
|
|
6672
|
+
this.triggerElement.setAttribute("aria-expanded", "true");
|
|
6673
|
+
});
|
|
6674
|
+
EventHandler.on(this.targetElement, hideEvent, () => {
|
|
6675
|
+
this.triggerElement.setAttribute("aria-expanded", "false");
|
|
6676
|
+
});
|
|
6677
|
+
}
|
|
6678
|
+
static init(toggles) {
|
|
6679
|
+
toggles.forEach(toggle => {
|
|
6680
|
+
const triggerElements = SelectorEngine.find(toggle.selector);
|
|
6681
|
+
triggerElements.forEach(triggerElement => new AccessibleToggle(triggerElement, toggle.type));
|
|
6682
|
+
});
|
|
6683
|
+
}
|
|
6684
|
+
}
|
|
6543
6685
|
|
|
6544
6686
|
/**
|
|
6545
6687
|
* --------------------------------------------------------------------------
|
|
@@ -6554,16 +6696,17 @@
|
|
|
6554
6696
|
Carousel,
|
|
6555
6697
|
Collapse,
|
|
6556
6698
|
Dropdown,
|
|
6557
|
-
Gallery,
|
|
6558
6699
|
Modal,
|
|
6559
|
-
AccessibleToggle,
|
|
6560
6700
|
Offcanvas,
|
|
6561
6701
|
Popover,
|
|
6562
6702
|
ScrollSpyV2: ScrollSpy$1,
|
|
6563
6703
|
ScrollSpy,
|
|
6564
6704
|
Tab,
|
|
6565
6705
|
Toast,
|
|
6566
|
-
Tooltip
|
|
6706
|
+
Tooltip,
|
|
6707
|
+
Gallery,
|
|
6708
|
+
AccessibleToggle,
|
|
6709
|
+
AccordionToggle
|
|
6567
6710
|
};
|
|
6568
6711
|
|
|
6569
6712
|
return index_umd;
|