bootstrap 5.0.2 → 5.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/assets/javascripts/bootstrap/alert.js +78 -48
- data/assets/javascripts/bootstrap/base-component.js +22 -17
- data/assets/javascripts/bootstrap/button.js +19 -12
- data/assets/javascripts/bootstrap/carousel.js +66 -44
- data/assets/javascripts/bootstrap/collapse.js +114 -131
- data/assets/javascripts/bootstrap/dom/data.js +5 -5
- data/assets/javascripts/bootstrap/dom/event-handler.js +11 -5
- data/assets/javascripts/bootstrap/dom/manipulator.js +6 -6
- data/assets/javascripts/bootstrap/dom/selector-engine.js +49 -7
- data/assets/javascripts/bootstrap/dropdown.js +96 -106
- data/assets/javascripts/bootstrap/modal.js +241 -87
- data/assets/javascripts/bootstrap/offcanvas.js +203 -57
- data/assets/javascripts/bootstrap/popover.js +25 -58
- data/assets/javascripts/bootstrap/scrollspy.js +47 -66
- data/assets/javascripts/bootstrap/tab.js +41 -22
- data/assets/javascripts/bootstrap/toast.js +124 -29
- data/assets/javascripts/bootstrap/tooltip.js +122 -104
- data/assets/javascripts/bootstrap-sprockets.js +7 -7
- data/assets/javascripts/bootstrap.js +660 -630
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/stylesheets/_bootstrap-grid.scss +3 -1
- data/assets/stylesheets/_bootstrap-reboot.scss +2 -4
- data/assets/stylesheets/_bootstrap.scss +2 -1
- data/assets/stylesheets/bootstrap/_card.scss +2 -1
- data/assets/stylesheets/bootstrap/_functions.scss +51 -12
- data/assets/stylesheets/bootstrap/_grid.scss +11 -0
- data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +1 -11
- data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
- data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -0
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
- data/assets/stylesheets/bootstrap/_root.scss +40 -2
- data/assets/stylesheets/bootstrap/_tables.scss +8 -4
- data/assets/stylesheets/bootstrap/_toasts.scss +2 -2
- data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
- data/assets/stylesheets/bootstrap/_variables.scss +184 -11
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +2 -0
- data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +29 -10
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +1 -1
- data/bootstrap.gemspec +3 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +6 -2
- metadata +12 -8
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap v5.
|
2
|
+
* Bootstrap v5.1.3 (https://getbootstrap.com/)
|
3
3
|
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4
4
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5
5
|
*/
|
@@ -7,108 +7,34 @@
|
|
7
7
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core')) :
|
8
8
|
typeof define === 'function' && define.amd ? define(['@popperjs/core'], factory) :
|
9
9
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));
|
10
|
-
}(this, (function (Popper) { 'use strict';
|
10
|
+
})(this, (function (Popper) { 'use strict';
|
11
11
|
|
12
12
|
function _interopNamespace(e) {
|
13
13
|
if (e && e.__esModule) return e;
|
14
|
-
|
14
|
+
const n = Object.create(null);
|
15
15
|
if (e) {
|
16
|
-
|
16
|
+
for (const k in e) {
|
17
17
|
if (k !== 'default') {
|
18
|
-
|
18
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
19
19
|
Object.defineProperty(n, k, d.get ? d : {
|
20
20
|
enumerable: true,
|
21
|
-
get:
|
22
|
-
return e[k];
|
23
|
-
}
|
21
|
+
get: () => e[k]
|
24
22
|
});
|
25
23
|
}
|
26
|
-
}
|
24
|
+
}
|
27
25
|
}
|
28
|
-
n
|
26
|
+
n.default = e;
|
29
27
|
return Object.freeze(n);
|
30
28
|
}
|
31
29
|
|
32
|
-
|
30
|
+
const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
|
33
31
|
|
34
32
|
/**
|
35
33
|
* --------------------------------------------------------------------------
|
36
|
-
* Bootstrap (v5.
|
34
|
+
* Bootstrap (v5.1.3): util/index.js
|
37
35
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
38
36
|
* --------------------------------------------------------------------------
|
39
37
|
*/
|
40
|
-
|
41
|
-
/**
|
42
|
-
* ------------------------------------------------------------------------
|
43
|
-
* Constants
|
44
|
-
* ------------------------------------------------------------------------
|
45
|
-
*/
|
46
|
-
const NODE_TEXT = 3;
|
47
|
-
const SelectorEngine = {
|
48
|
-
find(selector, element = document.documentElement) {
|
49
|
-
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
|
50
|
-
},
|
51
|
-
|
52
|
-
findOne(selector, element = document.documentElement) {
|
53
|
-
return Element.prototype.querySelector.call(element, selector);
|
54
|
-
},
|
55
|
-
|
56
|
-
children(element, selector) {
|
57
|
-
return [].concat(...element.children).filter(child => child.matches(selector));
|
58
|
-
},
|
59
|
-
|
60
|
-
parents(element, selector) {
|
61
|
-
const parents = [];
|
62
|
-
let ancestor = element.parentNode;
|
63
|
-
|
64
|
-
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
|
65
|
-
if (ancestor.matches(selector)) {
|
66
|
-
parents.push(ancestor);
|
67
|
-
}
|
68
|
-
|
69
|
-
ancestor = ancestor.parentNode;
|
70
|
-
}
|
71
|
-
|
72
|
-
return parents;
|
73
|
-
},
|
74
|
-
|
75
|
-
prev(element, selector) {
|
76
|
-
let previous = element.previousElementSibling;
|
77
|
-
|
78
|
-
while (previous) {
|
79
|
-
if (previous.matches(selector)) {
|
80
|
-
return [previous];
|
81
|
-
}
|
82
|
-
|
83
|
-
previous = previous.previousElementSibling;
|
84
|
-
}
|
85
|
-
|
86
|
-
return [];
|
87
|
-
},
|
88
|
-
|
89
|
-
next(element, selector) {
|
90
|
-
let next = element.nextElementSibling;
|
91
|
-
|
92
|
-
while (next) {
|
93
|
-
if (next.matches(selector)) {
|
94
|
-
return [next];
|
95
|
-
}
|
96
|
-
|
97
|
-
next = next.nextElementSibling;
|
98
|
-
}
|
99
|
-
|
100
|
-
return [];
|
101
|
-
}
|
102
|
-
|
103
|
-
};
|
104
|
-
|
105
|
-
/**
|
106
|
-
* --------------------------------------------------------------------------
|
107
|
-
* Bootstrap (v5.0.2): util/index.js
|
108
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
109
|
-
* --------------------------------------------------------------------------
|
110
|
-
*/
|
111
|
-
|
112
38
|
const MAX_UID = 1000000;
|
113
39
|
const MILLISECONDS_MULTIPLIER = 1000;
|
114
40
|
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
@@ -220,7 +146,7 @@
|
|
220
146
|
}
|
221
147
|
|
222
148
|
if (typeof obj === 'string' && obj.length > 0) {
|
223
|
-
return
|
149
|
+
return document.querySelector(obj);
|
224
150
|
}
|
225
151
|
|
226
152
|
return null;
|
@@ -286,8 +212,20 @@
|
|
286
212
|
};
|
287
213
|
|
288
214
|
const noop = () => {};
|
215
|
+
/**
|
216
|
+
* Trick to restart an element's animation
|
217
|
+
*
|
218
|
+
* @param {HTMLElement} element
|
219
|
+
* @return void
|
220
|
+
*
|
221
|
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
222
|
+
*/
|
289
223
|
|
290
|
-
|
224
|
+
|
225
|
+
const reflow = element => {
|
226
|
+
// eslint-disable-next-line no-unused-expressions
|
227
|
+
element.offsetHeight;
|
228
|
+
};
|
291
229
|
|
292
230
|
const getjQuery = () => {
|
293
231
|
const {
|
@@ -404,7 +342,7 @@
|
|
404
342
|
|
405
343
|
/**
|
406
344
|
* --------------------------------------------------------------------------
|
407
|
-
* Bootstrap (v5.
|
345
|
+
* Bootstrap (v5.1.3): dom/event-handler.js
|
408
346
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
409
347
|
* --------------------------------------------------------------------------
|
410
348
|
*/
|
@@ -467,7 +405,6 @@
|
|
467
405
|
event.delegateTarget = target;
|
468
406
|
|
469
407
|
if (handler.oneOff) {
|
470
|
-
// eslint-disable-next-line unicorn/consistent-destructuring
|
471
408
|
EventHandler.off(element, event.type, selector, fn);
|
472
409
|
}
|
473
410
|
|
@@ -693,7 +630,7 @@
|
|
693
630
|
|
694
631
|
/**
|
695
632
|
* --------------------------------------------------------------------------
|
696
|
-
* Bootstrap (v5.
|
633
|
+
* Bootstrap (v5.1.3): dom/data.js
|
697
634
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
698
635
|
* --------------------------------------------------------------------------
|
699
636
|
*/
|
@@ -704,7 +641,7 @@
|
|
704
641
|
* ------------------------------------------------------------------------
|
705
642
|
*/
|
706
643
|
const elementMap = new Map();
|
707
|
-
|
644
|
+
const Data = {
|
708
645
|
set(element, key, instance) {
|
709
646
|
if (!elementMap.has(element)) {
|
710
647
|
elementMap.set(element, new Map());
|
@@ -747,7 +684,7 @@
|
|
747
684
|
|
748
685
|
/**
|
749
686
|
* --------------------------------------------------------------------------
|
750
|
-
* Bootstrap (v5.
|
687
|
+
* Bootstrap (v5.1.3): base-component.js
|
751
688
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
752
689
|
* --------------------------------------------------------------------------
|
753
690
|
*/
|
@@ -757,7 +694,7 @@
|
|
757
694
|
* ------------------------------------------------------------------------
|
758
695
|
*/
|
759
696
|
|
760
|
-
const VERSION = '5.
|
697
|
+
const VERSION = '5.1.3';
|
761
698
|
|
762
699
|
class BaseComponent {
|
763
700
|
constructor(element) {
|
@@ -786,7 +723,7 @@
|
|
786
723
|
|
787
724
|
|
788
725
|
static getInstance(element) {
|
789
|
-
return Data.get(element, this.DATA_KEY);
|
726
|
+
return Data.get(getElement(element), this.DATA_KEY);
|
790
727
|
}
|
791
728
|
|
792
729
|
static getOrCreateInstance(element, config = {}) {
|
@@ -813,7 +750,33 @@
|
|
813
750
|
|
814
751
|
/**
|
815
752
|
* --------------------------------------------------------------------------
|
816
|
-
* Bootstrap (v5.
|
753
|
+
* Bootstrap (v5.1.3): util/component-functions.js
|
754
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
755
|
+
* --------------------------------------------------------------------------
|
756
|
+
*/
|
757
|
+
|
758
|
+
const enableDismissTrigger = (component, method = 'hide') => {
|
759
|
+
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
|
760
|
+
const name = component.NAME;
|
761
|
+
EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
|
762
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
763
|
+
event.preventDefault();
|
764
|
+
}
|
765
|
+
|
766
|
+
if (isDisabled(this)) {
|
767
|
+
return;
|
768
|
+
}
|
769
|
+
|
770
|
+
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
771
|
+
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
772
|
+
|
773
|
+
instance[method]();
|
774
|
+
});
|
775
|
+
};
|
776
|
+
|
777
|
+
/**
|
778
|
+
* --------------------------------------------------------------------------
|
779
|
+
* Bootstrap (v5.1.3): alert.js
|
817
780
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
818
781
|
* --------------------------------------------------------------------------
|
819
782
|
*/
|
@@ -823,17 +786,13 @@
|
|
823
786
|
* ------------------------------------------------------------------------
|
824
787
|
*/
|
825
788
|
|
826
|
-
const NAME$
|
827
|
-
const DATA_KEY$
|
828
|
-
const EVENT_KEY$
|
829
|
-
const
|
830
|
-
const
|
831
|
-
const
|
832
|
-
const
|
833
|
-
const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;
|
834
|
-
const CLASS_NAME_ALERT = 'alert';
|
835
|
-
const CLASS_NAME_FADE$6 = 'fade';
|
836
|
-
const CLASS_NAME_SHOW$9 = 'show';
|
789
|
+
const NAME$d = 'alert';
|
790
|
+
const DATA_KEY$c = 'bs.alert';
|
791
|
+
const EVENT_KEY$c = `.${DATA_KEY$c}`;
|
792
|
+
const EVENT_CLOSE = `close${EVENT_KEY$c}`;
|
793
|
+
const EVENT_CLOSED = `closed${EVENT_KEY$c}`;
|
794
|
+
const CLASS_NAME_FADE$5 = 'fade';
|
795
|
+
const CLASS_NAME_SHOW$8 = 'show';
|
837
796
|
/**
|
838
797
|
* ------------------------------------------------------------------------
|
839
798
|
* Class Definition
|
@@ -843,41 +802,30 @@
|
|
843
802
|
class Alert extends BaseComponent {
|
844
803
|
// Getters
|
845
804
|
static get NAME() {
|
846
|
-
return NAME$
|
805
|
+
return NAME$d;
|
847
806
|
} // Public
|
848
807
|
|
849
808
|
|
850
|
-
close(
|
851
|
-
const
|
809
|
+
close() {
|
810
|
+
const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
|
852
811
|
|
853
|
-
|
854
|
-
|
855
|
-
if (customEvent === null || customEvent.defaultPrevented) {
|
812
|
+
if (closeEvent.defaultPrevented) {
|
856
813
|
return;
|
857
814
|
}
|
858
815
|
|
859
|
-
this.
|
860
|
-
} // Private
|
861
|
-
|
816
|
+
this._element.classList.remove(CLASS_NAME_SHOW$8);
|
862
817
|
|
863
|
-
|
864
|
-
return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);
|
865
|
-
}
|
818
|
+
const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
|
866
819
|
|
867
|
-
|
868
|
-
|
869
|
-
}
|
820
|
+
this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
|
821
|
+
} // Private
|
870
822
|
|
871
|
-
_removeElement(element) {
|
872
|
-
element.classList.remove(CLASS_NAME_SHOW$9);
|
873
|
-
const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);
|
874
823
|
|
875
|
-
|
876
|
-
|
824
|
+
_destroyElement() {
|
825
|
+
this._element.remove();
|
877
826
|
|
878
|
-
|
879
|
-
|
880
|
-
EventHandler.trigger(element, EVENT_CLOSED);
|
827
|
+
EventHandler.trigger(this._element, EVENT_CLOSED);
|
828
|
+
this.dispose();
|
881
829
|
} // Static
|
882
830
|
|
883
831
|
|
@@ -885,20 +833,16 @@
|
|
885
833
|
return this.each(function () {
|
886
834
|
const data = Alert.getOrCreateInstance(this);
|
887
835
|
|
888
|
-
if (config
|
889
|
-
|
836
|
+
if (typeof config !== 'string') {
|
837
|
+
return;
|
890
838
|
}
|
891
|
-
});
|
892
|
-
}
|
893
839
|
|
894
|
-
|
895
|
-
|
896
|
-
if (event) {
|
897
|
-
event.preventDefault();
|
840
|
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
841
|
+
throw new TypeError(`No method named "${config}"`);
|
898
842
|
}
|
899
843
|
|
900
|
-
|
901
|
-
};
|
844
|
+
data[config](this);
|
845
|
+
});
|
902
846
|
}
|
903
847
|
|
904
848
|
}
|
@@ -909,7 +853,7 @@
|
|
909
853
|
*/
|
910
854
|
|
911
855
|
|
912
|
-
|
856
|
+
enableDismissTrigger(Alert, 'close');
|
913
857
|
/**
|
914
858
|
* ------------------------------------------------------------------------
|
915
859
|
* jQuery
|
@@ -921,7 +865,7 @@
|
|
921
865
|
|
922
866
|
/**
|
923
867
|
* --------------------------------------------------------------------------
|
924
|
-
* Bootstrap (v5.
|
868
|
+
* Bootstrap (v5.1.3): button.js
|
925
869
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
926
870
|
* --------------------------------------------------------------------------
|
927
871
|
*/
|
@@ -931,13 +875,13 @@
|
|
931
875
|
* ------------------------------------------------------------------------
|
932
876
|
*/
|
933
877
|
|
934
|
-
const NAME$
|
935
|
-
const DATA_KEY$
|
936
|
-
const EVENT_KEY$
|
878
|
+
const NAME$c = 'button';
|
879
|
+
const DATA_KEY$b = 'bs.button';
|
880
|
+
const EVENT_KEY$b = `.${DATA_KEY$b}`;
|
937
881
|
const DATA_API_KEY$7 = '.data-api';
|
938
882
|
const CLASS_NAME_ACTIVE$3 = 'active';
|
939
883
|
const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
|
940
|
-
const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$
|
884
|
+
const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;
|
941
885
|
/**
|
942
886
|
* ------------------------------------------------------------------------
|
943
887
|
* Class Definition
|
@@ -947,7 +891,7 @@
|
|
947
891
|
class Button extends BaseComponent {
|
948
892
|
// Getters
|
949
893
|
static get NAME() {
|
950
|
-
return NAME$
|
894
|
+
return NAME$c;
|
951
895
|
} // Public
|
952
896
|
|
953
897
|
|
@@ -992,7 +936,7 @@
|
|
992
936
|
|
993
937
|
/**
|
994
938
|
* --------------------------------------------------------------------------
|
995
|
-
* Bootstrap (v5.
|
939
|
+
* Bootstrap (v5.1.3): dom/manipulator.js
|
996
940
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
997
941
|
* --------------------------------------------------------------------------
|
998
942
|
*/
|
@@ -1050,8 +994,8 @@
|
|
1050
994
|
offset(element) {
|
1051
995
|
const rect = element.getBoundingClientRect();
|
1052
996
|
return {
|
1053
|
-
top: rect.top +
|
1054
|
-
left: rect.left +
|
997
|
+
top: rect.top + window.pageYOffset,
|
998
|
+
left: rect.left + window.pageXOffset
|
1055
999
|
};
|
1056
1000
|
},
|
1057
1001
|
|
@@ -1066,7 +1010,77 @@
|
|
1066
1010
|
|
1067
1011
|
/**
|
1068
1012
|
* --------------------------------------------------------------------------
|
1069
|
-
* Bootstrap (v5.
|
1013
|
+
* Bootstrap (v5.1.3): dom/selector-engine.js
|
1014
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
1015
|
+
* --------------------------------------------------------------------------
|
1016
|
+
*/
|
1017
|
+
const NODE_TEXT = 3;
|
1018
|
+
const SelectorEngine = {
|
1019
|
+
find(selector, element = document.documentElement) {
|
1020
|
+
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
|
1021
|
+
},
|
1022
|
+
|
1023
|
+
findOne(selector, element = document.documentElement) {
|
1024
|
+
return Element.prototype.querySelector.call(element, selector);
|
1025
|
+
},
|
1026
|
+
|
1027
|
+
children(element, selector) {
|
1028
|
+
return [].concat(...element.children).filter(child => child.matches(selector));
|
1029
|
+
},
|
1030
|
+
|
1031
|
+
parents(element, selector) {
|
1032
|
+
const parents = [];
|
1033
|
+
let ancestor = element.parentNode;
|
1034
|
+
|
1035
|
+
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
|
1036
|
+
if (ancestor.matches(selector)) {
|
1037
|
+
parents.push(ancestor);
|
1038
|
+
}
|
1039
|
+
|
1040
|
+
ancestor = ancestor.parentNode;
|
1041
|
+
}
|
1042
|
+
|
1043
|
+
return parents;
|
1044
|
+
},
|
1045
|
+
|
1046
|
+
prev(element, selector) {
|
1047
|
+
let previous = element.previousElementSibling;
|
1048
|
+
|
1049
|
+
while (previous) {
|
1050
|
+
if (previous.matches(selector)) {
|
1051
|
+
return [previous];
|
1052
|
+
}
|
1053
|
+
|
1054
|
+
previous = previous.previousElementSibling;
|
1055
|
+
}
|
1056
|
+
|
1057
|
+
return [];
|
1058
|
+
},
|
1059
|
+
|
1060
|
+
next(element, selector) {
|
1061
|
+
let next = element.nextElementSibling;
|
1062
|
+
|
1063
|
+
while (next) {
|
1064
|
+
if (next.matches(selector)) {
|
1065
|
+
return [next];
|
1066
|
+
}
|
1067
|
+
|
1068
|
+
next = next.nextElementSibling;
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
return [];
|
1072
|
+
},
|
1073
|
+
|
1074
|
+
focusableChildren(element) {
|
1075
|
+
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
|
1076
|
+
return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
|
1077
|
+
}
|
1078
|
+
|
1079
|
+
};
|
1080
|
+
|
1081
|
+
/**
|
1082
|
+
* --------------------------------------------------------------------------
|
1083
|
+
* Bootstrap (v5.1.3): carousel.js
|
1070
1084
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
1071
1085
|
* --------------------------------------------------------------------------
|
1072
1086
|
*/
|
@@ -1076,16 +1090,16 @@
|
|
1076
1090
|
* ------------------------------------------------------------------------
|
1077
1091
|
*/
|
1078
1092
|
|
1079
|
-
const NAME$
|
1080
|
-
const DATA_KEY$
|
1081
|
-
const EVENT_KEY$
|
1093
|
+
const NAME$b = 'carousel';
|
1094
|
+
const DATA_KEY$a = 'bs.carousel';
|
1095
|
+
const EVENT_KEY$a = `.${DATA_KEY$a}`;
|
1082
1096
|
const DATA_API_KEY$6 = '.data-api';
|
1083
1097
|
const ARROW_LEFT_KEY = 'ArrowLeft';
|
1084
1098
|
const ARROW_RIGHT_KEY = 'ArrowRight';
|
1085
1099
|
const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
|
1086
1100
|
|
1087
1101
|
const SWIPE_THRESHOLD = 40;
|
1088
|
-
const Default$
|
1102
|
+
const Default$a = {
|
1089
1103
|
interval: 5000,
|
1090
1104
|
keyboard: true,
|
1091
1105
|
slide: false,
|
@@ -1093,7 +1107,7 @@
|
|
1093
1107
|
wrap: true,
|
1094
1108
|
touch: true
|
1095
1109
|
};
|
1096
|
-
const DefaultType$
|
1110
|
+
const DefaultType$a = {
|
1097
1111
|
interval: '(number|boolean)',
|
1098
1112
|
keyboard: 'boolean',
|
1099
1113
|
slide: '(boolean|string)',
|
@@ -1109,19 +1123,19 @@
|
|
1109
1123
|
[ARROW_LEFT_KEY]: DIRECTION_RIGHT,
|
1110
1124
|
[ARROW_RIGHT_KEY]: DIRECTION_LEFT
|
1111
1125
|
};
|
1112
|
-
const EVENT_SLIDE = `slide${EVENT_KEY$
|
1113
|
-
const EVENT_SLID = `slid${EVENT_KEY$
|
1114
|
-
const EVENT_KEYDOWN = `keydown${EVENT_KEY$
|
1115
|
-
const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$
|
1116
|
-
const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$
|
1117
|
-
const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$
|
1118
|
-
const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$
|
1119
|
-
const EVENT_TOUCHEND = `touchend${EVENT_KEY$
|
1120
|
-
const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$
|
1121
|
-
const EVENT_POINTERUP = `pointerup${EVENT_KEY$
|
1122
|
-
const EVENT_DRAG_START = `dragstart${EVENT_KEY$
|
1123
|
-
const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$
|
1124
|
-
const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$
|
1126
|
+
const EVENT_SLIDE = `slide${EVENT_KEY$a}`;
|
1127
|
+
const EVENT_SLID = `slid${EVENT_KEY$a}`;
|
1128
|
+
const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;
|
1129
|
+
const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;
|
1130
|
+
const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;
|
1131
|
+
const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;
|
1132
|
+
const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;
|
1133
|
+
const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;
|
1134
|
+
const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;
|
1135
|
+
const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;
|
1136
|
+
const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;
|
1137
|
+
const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;
|
1138
|
+
const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
|
1125
1139
|
const CLASS_NAME_CAROUSEL = 'carousel';
|
1126
1140
|
const CLASS_NAME_ACTIVE$2 = 'active';
|
1127
1141
|
const CLASS_NAME_SLIDE = 'slide';
|
@@ -1168,11 +1182,11 @@
|
|
1168
1182
|
|
1169
1183
|
|
1170
1184
|
static get Default() {
|
1171
|
-
return Default$
|
1185
|
+
return Default$a;
|
1172
1186
|
}
|
1173
1187
|
|
1174
1188
|
static get NAME() {
|
1175
|
-
return NAME$
|
1189
|
+
return NAME$b;
|
1176
1190
|
} // Public
|
1177
1191
|
|
1178
1192
|
|
@@ -1250,11 +1264,11 @@
|
|
1250
1264
|
|
1251
1265
|
|
1252
1266
|
_getConfig(config) {
|
1253
|
-
config = { ...Default$
|
1267
|
+
config = { ...Default$a,
|
1254
1268
|
...Manipulator.getDataAttributes(this._element),
|
1255
1269
|
...(typeof config === 'object' ? config : {})
|
1256
1270
|
};
|
1257
|
-
typeCheckConfig(NAME$
|
1271
|
+
typeCheckConfig(NAME$b, config, DefaultType$a);
|
1258
1272
|
return config;
|
1259
1273
|
}
|
1260
1274
|
|
@@ -1291,8 +1305,12 @@
|
|
1291
1305
|
}
|
1292
1306
|
|
1293
1307
|
_addTouchEventListeners() {
|
1308
|
+
const hasPointerPenTouch = event => {
|
1309
|
+
return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
|
1310
|
+
};
|
1311
|
+
|
1294
1312
|
const start = event => {
|
1295
|
-
if (
|
1313
|
+
if (hasPointerPenTouch(event)) {
|
1296
1314
|
this.touchStartX = event.clientX;
|
1297
1315
|
} else if (!this._pointerEvent) {
|
1298
1316
|
this.touchStartX = event.touches[0].clientX;
|
@@ -1305,7 +1323,7 @@
|
|
1305
1323
|
};
|
1306
1324
|
|
1307
1325
|
const end = event => {
|
1308
|
-
if (
|
1326
|
+
if (hasPointerPenTouch(event)) {
|
1309
1327
|
this.touchDeltaX = event.clientX - this.touchStartX;
|
1310
1328
|
}
|
1311
1329
|
|
@@ -1330,7 +1348,7 @@
|
|
1330
1348
|
};
|
1331
1349
|
|
1332
1350
|
SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
|
1333
|
-
EventHandler.on(itemImg, EVENT_DRAG_START,
|
1351
|
+
EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());
|
1334
1352
|
});
|
1335
1353
|
|
1336
1354
|
if (this._pointerEvent) {
|
@@ -1611,7 +1629,7 @@
|
|
1611
1629
|
|
1612
1630
|
/**
|
1613
1631
|
* --------------------------------------------------------------------------
|
1614
|
-
* Bootstrap (v5.
|
1632
|
+
* Bootstrap (v5.1.3): collapse.js
|
1615
1633
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
1616
1634
|
* --------------------------------------------------------------------------
|
1617
1635
|
*/
|
@@ -1621,30 +1639,32 @@
|
|
1621
1639
|
* ------------------------------------------------------------------------
|
1622
1640
|
*/
|
1623
1641
|
|
1624
|
-
const NAME$
|
1625
|
-
const DATA_KEY$
|
1626
|
-
const EVENT_KEY$
|
1642
|
+
const NAME$a = 'collapse';
|
1643
|
+
const DATA_KEY$9 = 'bs.collapse';
|
1644
|
+
const EVENT_KEY$9 = `.${DATA_KEY$9}`;
|
1627
1645
|
const DATA_API_KEY$5 = '.data-api';
|
1628
|
-
const Default$
|
1646
|
+
const Default$9 = {
|
1629
1647
|
toggle: true,
|
1630
|
-
parent:
|
1648
|
+
parent: null
|
1631
1649
|
};
|
1632
|
-
const DefaultType$
|
1650
|
+
const DefaultType$9 = {
|
1633
1651
|
toggle: 'boolean',
|
1634
|
-
parent: '(
|
1652
|
+
parent: '(null|element)'
|
1635
1653
|
};
|
1636
|
-
const EVENT_SHOW$5 = `show${EVENT_KEY$
|
1637
|
-
const EVENT_SHOWN$5 = `shown${EVENT_KEY$
|
1638
|
-
const EVENT_HIDE$5 = `hide${EVENT_KEY$
|
1639
|
-
const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$
|
1640
|
-
const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$
|
1641
|
-
const CLASS_NAME_SHOW$
|
1654
|
+
const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;
|
1655
|
+
const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;
|
1656
|
+
const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;
|
1657
|
+
const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;
|
1658
|
+
const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;
|
1659
|
+
const CLASS_NAME_SHOW$7 = 'show';
|
1642
1660
|
const CLASS_NAME_COLLAPSE = 'collapse';
|
1643
1661
|
const CLASS_NAME_COLLAPSING = 'collapsing';
|
1644
1662
|
const CLASS_NAME_COLLAPSED = 'collapsed';
|
1663
|
+
const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
|
1664
|
+
const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
|
1645
1665
|
const WIDTH = 'width';
|
1646
1666
|
const HEIGHT = 'height';
|
1647
|
-
const SELECTOR_ACTIVES = '.show, .collapsing';
|
1667
|
+
const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
|
1648
1668
|
const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
|
1649
1669
|
/**
|
1650
1670
|
* ------------------------------------------------------------------------
|
@@ -1657,7 +1677,7 @@
|
|
1657
1677
|
super(element);
|
1658
1678
|
this._isTransitioning = false;
|
1659
1679
|
this._config = this._getConfig(config);
|
1660
|
-
this._triggerArray =
|
1680
|
+
this._triggerArray = [];
|
1661
1681
|
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
|
1662
1682
|
|
1663
1683
|
for (let i = 0, len = toggleList.length; i < len; i++) {
|
@@ -1672,10 +1692,10 @@
|
|
1672
1692
|
}
|
1673
1693
|
}
|
1674
1694
|
|
1675
|
-
this.
|
1695
|
+
this._initializeChildren();
|
1676
1696
|
|
1677
1697
|
if (!this._config.parent) {
|
1678
|
-
this._addAriaAndCollapsedClass(this.
|
1698
|
+
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
|
1679
1699
|
}
|
1680
1700
|
|
1681
1701
|
if (this._config.toggle) {
|
@@ -1685,16 +1705,16 @@
|
|
1685
1705
|
|
1686
1706
|
|
1687
1707
|
static get Default() {
|
1688
|
-
return Default$
|
1708
|
+
return Default$9;
|
1689
1709
|
}
|
1690
1710
|
|
1691
1711
|
static get NAME() {
|
1692
|
-
return NAME$
|
1712
|
+
return NAME$a;
|
1693
1713
|
} // Public
|
1694
1714
|
|
1695
1715
|
|
1696
1716
|
toggle() {
|
1697
|
-
if (this.
|
1717
|
+
if (this._isShown()) {
|
1698
1718
|
this.hide();
|
1699
1719
|
} else {
|
1700
1720
|
this.show();
|
@@ -1702,30 +1722,21 @@
|
|
1702
1722
|
}
|
1703
1723
|
|
1704
1724
|
show() {
|
1705
|
-
if (this._isTransitioning || this.
|
1725
|
+
if (this._isTransitioning || this._isShown()) {
|
1706
1726
|
return;
|
1707
1727
|
}
|
1708
1728
|
|
1709
|
-
let actives;
|
1729
|
+
let actives = [];
|
1710
1730
|
let activesData;
|
1711
1731
|
|
1712
|
-
if (this.
|
1713
|
-
|
1714
|
-
|
1715
|
-
return elem.getAttribute('data-bs-parent') === this._config.parent;
|
1716
|
-
}
|
1717
|
-
|
1718
|
-
return elem.classList.contains(CLASS_NAME_COLLAPSE);
|
1719
|
-
});
|
1720
|
-
|
1721
|
-
if (actives.length === 0) {
|
1722
|
-
actives = null;
|
1723
|
-
}
|
1732
|
+
if (this._config.parent) {
|
1733
|
+
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
|
1734
|
+
actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
|
1724
1735
|
}
|
1725
1736
|
|
1726
1737
|
const container = SelectorEngine.findOne(this._selector);
|
1727
1738
|
|
1728
|
-
if (actives) {
|
1739
|
+
if (actives.length) {
|
1729
1740
|
const tempActiveData = actives.find(elem => container !== elem);
|
1730
1741
|
activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
|
1731
1742
|
|
@@ -1740,17 +1751,17 @@
|
|
1740
1751
|
return;
|
1741
1752
|
}
|
1742
1753
|
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
}
|
1754
|
+
actives.forEach(elemActive => {
|
1755
|
+
if (container !== elemActive) {
|
1756
|
+
Collapse.getOrCreateInstance(elemActive, {
|
1757
|
+
toggle: false
|
1758
|
+
}).hide();
|
1759
|
+
}
|
1748
1760
|
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1753
|
-
}
|
1761
|
+
if (!activesData) {
|
1762
|
+
Data.set(elemActive, DATA_KEY$9, null);
|
1763
|
+
}
|
1764
|
+
});
|
1754
1765
|
|
1755
1766
|
const dimension = this._getDimension();
|
1756
1767
|
|
@@ -1760,22 +1771,18 @@
|
|
1760
1771
|
|
1761
1772
|
this._element.style[dimension] = 0;
|
1762
1773
|
|
1763
|
-
|
1764
|
-
this._triggerArray.forEach(element => {
|
1765
|
-
element.classList.remove(CLASS_NAME_COLLAPSED);
|
1766
|
-
element.setAttribute('aria-expanded', true);
|
1767
|
-
});
|
1768
|
-
}
|
1774
|
+
this._addAriaAndCollapsedClass(this._triggerArray, true);
|
1769
1775
|
|
1770
|
-
this.
|
1776
|
+
this._isTransitioning = true;
|
1771
1777
|
|
1772
1778
|
const complete = () => {
|
1779
|
+
this._isTransitioning = false;
|
1780
|
+
|
1773
1781
|
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
1774
1782
|
|
1775
|
-
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$
|
1783
|
+
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
|
1776
1784
|
|
1777
1785
|
this._element.style[dimension] = '';
|
1778
|
-
this.setTransitioning(false);
|
1779
1786
|
EventHandler.trigger(this._element, EVENT_SHOWN$5);
|
1780
1787
|
};
|
1781
1788
|
|
@@ -1788,7 +1795,7 @@
|
|
1788
1795
|
}
|
1789
1796
|
|
1790
1797
|
hide() {
|
1791
|
-
if (this._isTransitioning || !this.
|
1798
|
+
if (this._isTransitioning || !this._isShown()) {
|
1792
1799
|
return;
|
1793
1800
|
}
|
1794
1801
|
|
@@ -1805,26 +1812,23 @@
|
|
1805
1812
|
|
1806
1813
|
this._element.classList.add(CLASS_NAME_COLLAPSING);
|
1807
1814
|
|
1808
|
-
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$
|
1815
|
+
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
|
1809
1816
|
|
1810
1817
|
const triggerArrayLength = this._triggerArray.length;
|
1811
1818
|
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
const elem = getElementFromSelector(trigger);
|
1819
|
+
for (let i = 0; i < triggerArrayLength; i++) {
|
1820
|
+
const trigger = this._triggerArray[i];
|
1821
|
+
const elem = getElementFromSelector(trigger);
|
1816
1822
|
|
1817
|
-
|
1818
|
-
|
1819
|
-
trigger.setAttribute('aria-expanded', false);
|
1820
|
-
}
|
1823
|
+
if (elem && !this._isShown(elem)) {
|
1824
|
+
this._addAriaAndCollapsedClass([trigger], false);
|
1821
1825
|
}
|
1822
1826
|
}
|
1823
1827
|
|
1824
|
-
this.
|
1828
|
+
this._isTransitioning = true;
|
1825
1829
|
|
1826
1830
|
const complete = () => {
|
1827
|
-
this.
|
1831
|
+
this._isTransitioning = false;
|
1828
1832
|
|
1829
1833
|
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
1830
1834
|
|
@@ -1838,45 +1842,47 @@
|
|
1838
1842
|
this._queueCallback(complete, this._element, true);
|
1839
1843
|
}
|
1840
1844
|
|
1841
|
-
|
1842
|
-
|
1845
|
+
_isShown(element = this._element) {
|
1846
|
+
return element.classList.contains(CLASS_NAME_SHOW$7);
|
1843
1847
|
} // Private
|
1844
1848
|
|
1845
1849
|
|
1846
1850
|
_getConfig(config) {
|
1847
|
-
config = { ...Default$
|
1851
|
+
config = { ...Default$9,
|
1852
|
+
...Manipulator.getDataAttributes(this._element),
|
1848
1853
|
...config
|
1849
1854
|
};
|
1850
1855
|
config.toggle = Boolean(config.toggle); // Coerce string values
|
1851
1856
|
|
1852
|
-
|
1857
|
+
config.parent = getElement(config.parent);
|
1858
|
+
typeCheckConfig(NAME$a, config, DefaultType$9);
|
1853
1859
|
return config;
|
1854
1860
|
}
|
1855
1861
|
|
1856
1862
|
_getDimension() {
|
1857
|
-
return this._element.classList.contains(
|
1863
|
+
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
|
1858
1864
|
}
|
1859
1865
|
|
1860
|
-
|
1861
|
-
|
1862
|
-
|
1863
|
-
}
|
1864
|
-
|
1865
|
-
const
|
1866
|
-
SelectorEngine.find(
|
1866
|
+
_initializeChildren() {
|
1867
|
+
if (!this._config.parent) {
|
1868
|
+
return;
|
1869
|
+
}
|
1870
|
+
|
1871
|
+
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
|
1872
|
+
SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
|
1867
1873
|
const selected = getElementFromSelector(element);
|
1868
1874
|
|
1869
|
-
|
1875
|
+
if (selected) {
|
1876
|
+
this._addAriaAndCollapsedClass([element], this._isShown(selected));
|
1877
|
+
}
|
1870
1878
|
});
|
1871
|
-
return parent;
|
1872
1879
|
}
|
1873
1880
|
|
1874
|
-
_addAriaAndCollapsedClass(
|
1875
|
-
if (!
|
1881
|
+
_addAriaAndCollapsedClass(triggerArray, isOpen) {
|
1882
|
+
if (!triggerArray.length) {
|
1876
1883
|
return;
|
1877
1884
|
}
|
1878
1885
|
|
1879
|
-
const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);
|
1880
1886
|
triggerArray.forEach(elem => {
|
1881
1887
|
if (isOpen) {
|
1882
1888
|
elem.classList.remove(CLASS_NAME_COLLAPSED);
|
@@ -1889,33 +1895,23 @@
|
|
1889
1895
|
} // Static
|
1890
1896
|
|
1891
1897
|
|
1892
|
-
static
|
1893
|
-
|
1894
|
-
|
1895
|
-
...Manipulator.getDataAttributes(element),
|
1896
|
-
...(typeof config === 'object' && config ? config : {})
|
1897
|
-
};
|
1898
|
-
|
1899
|
-
if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
|
1900
|
-
_config.toggle = false;
|
1901
|
-
}
|
1902
|
-
|
1903
|
-
if (!data) {
|
1904
|
-
data = new Collapse(element, _config);
|
1905
|
-
}
|
1898
|
+
static jQueryInterface(config) {
|
1899
|
+
return this.each(function () {
|
1900
|
+
const _config = {};
|
1906
1901
|
|
1907
|
-
|
1908
|
-
|
1909
|
-
throw new TypeError(`No method named "${config}"`);
|
1902
|
+
if (typeof config === 'string' && /show|hide/.test(config)) {
|
1903
|
+
_config.toggle = false;
|
1910
1904
|
}
|
1911
1905
|
|
1912
|
-
data
|
1913
|
-
}
|
1914
|
-
}
|
1906
|
+
const data = Collapse.getOrCreateInstance(this, _config);
|
1915
1907
|
|
1916
|
-
|
1917
|
-
|
1918
|
-
|
1908
|
+
if (typeof config === 'string') {
|
1909
|
+
if (typeof data[config] === 'undefined') {
|
1910
|
+
throw new TypeError(`No method named "${config}"`);
|
1911
|
+
}
|
1912
|
+
|
1913
|
+
data[config]();
|
1914
|
+
}
|
1919
1915
|
});
|
1920
1916
|
}
|
1921
1917
|
|
@@ -1933,26 +1929,12 @@
|
|
1933
1929
|
event.preventDefault();
|
1934
1930
|
}
|
1935
1931
|
|
1936
|
-
const triggerData = Manipulator.getDataAttributes(this);
|
1937
1932
|
const selector = getSelectorFromElement(this);
|
1938
1933
|
const selectorElements = SelectorEngine.find(selector);
|
1939
1934
|
selectorElements.forEach(element => {
|
1940
|
-
|
1941
|
-
|
1942
|
-
|
1943
|
-
if (data) {
|
1944
|
-
// update parent attribute
|
1945
|
-
if (data._parent === null && typeof triggerData.parent === 'string') {
|
1946
|
-
data._config.parent = triggerData.parent;
|
1947
|
-
data._parent = data._getParent();
|
1948
|
-
}
|
1949
|
-
|
1950
|
-
config = 'toggle';
|
1951
|
-
} else {
|
1952
|
-
config = triggerData;
|
1953
|
-
}
|
1954
|
-
|
1955
|
-
Collapse.collapseInterface(element, config);
|
1935
|
+
Collapse.getOrCreateInstance(element, {
|
1936
|
+
toggle: false
|
1937
|
+
}).toggle();
|
1956
1938
|
});
|
1957
1939
|
});
|
1958
1940
|
/**
|
@@ -1966,7 +1948,7 @@
|
|
1966
1948
|
|
1967
1949
|
/**
|
1968
1950
|
* --------------------------------------------------------------------------
|
1969
|
-
* Bootstrap (v5.
|
1951
|
+
* Bootstrap (v5.1.3): dropdown.js
|
1970
1952
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
1971
1953
|
* --------------------------------------------------------------------------
|
1972
1954
|
*/
|
@@ -1976,27 +1958,26 @@
|
|
1976
1958
|
* ------------------------------------------------------------------------
|
1977
1959
|
*/
|
1978
1960
|
|
1979
|
-
const NAME$
|
1980
|
-
const DATA_KEY$
|
1981
|
-
const EVENT_KEY$
|
1961
|
+
const NAME$9 = 'dropdown';
|
1962
|
+
const DATA_KEY$8 = 'bs.dropdown';
|
1963
|
+
const EVENT_KEY$8 = `.${DATA_KEY$8}`;
|
1982
1964
|
const DATA_API_KEY$4 = '.data-api';
|
1983
1965
|
const ESCAPE_KEY$2 = 'Escape';
|
1984
1966
|
const SPACE_KEY = 'Space';
|
1985
|
-
const TAB_KEY = 'Tab';
|
1967
|
+
const TAB_KEY$1 = 'Tab';
|
1986
1968
|
const ARROW_UP_KEY = 'ArrowUp';
|
1987
1969
|
const ARROW_DOWN_KEY = 'ArrowDown';
|
1988
1970
|
const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
|
1989
1971
|
|
1990
1972
|
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);
|
1991
|
-
const EVENT_HIDE$4 = `hide${EVENT_KEY$
|
1992
|
-
const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$
|
1993
|
-
const EVENT_SHOW$4 = `show${EVENT_KEY$
|
1994
|
-
const EVENT_SHOWN$4 = `shown${EVENT_KEY$
|
1995
|
-
const
|
1996
|
-
const
|
1997
|
-
const
|
1998
|
-
const
|
1999
|
-
const CLASS_NAME_SHOW$7 = 'show';
|
1973
|
+
const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;
|
1974
|
+
const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;
|
1975
|
+
const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;
|
1976
|
+
const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;
|
1977
|
+
const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;
|
1978
|
+
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;
|
1979
|
+
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;
|
1980
|
+
const CLASS_NAME_SHOW$6 = 'show';
|
2000
1981
|
const CLASS_NAME_DROPUP = 'dropup';
|
2001
1982
|
const CLASS_NAME_DROPEND = 'dropend';
|
2002
1983
|
const CLASS_NAME_DROPSTART = 'dropstart';
|
@@ -2011,7 +1992,7 @@
|
|
2011
1992
|
const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
|
2012
1993
|
const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
|
2013
1994
|
const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
|
2014
|
-
const Default$
|
1995
|
+
const Default$8 = {
|
2015
1996
|
offset: [0, 2],
|
2016
1997
|
boundary: 'clippingParents',
|
2017
1998
|
reference: 'toggle',
|
@@ -2019,7 +2000,7 @@
|
|
2019
2000
|
popperConfig: null,
|
2020
2001
|
autoClose: true
|
2021
2002
|
};
|
2022
|
-
const DefaultType$
|
2003
|
+
const DefaultType$8 = {
|
2023
2004
|
offset: '(array|string|function)',
|
2024
2005
|
boundary: '(string|element)',
|
2025
2006
|
reference: '(string|element|object)',
|
@@ -2040,45 +2021,31 @@
|
|
2040
2021
|
this._config = this._getConfig(config);
|
2041
2022
|
this._menu = this._getMenuElement();
|
2042
2023
|
this._inNavbar = this._detectNavbar();
|
2043
|
-
|
2044
|
-
this._addEventListeners();
|
2045
2024
|
} // Getters
|
2046
2025
|
|
2047
2026
|
|
2048
2027
|
static get Default() {
|
2049
|
-
return Default$
|
2028
|
+
return Default$8;
|
2050
2029
|
}
|
2051
2030
|
|
2052
2031
|
static get DefaultType() {
|
2053
|
-
return DefaultType$
|
2032
|
+
return DefaultType$8;
|
2054
2033
|
}
|
2055
2034
|
|
2056
2035
|
static get NAME() {
|
2057
|
-
return NAME$
|
2036
|
+
return NAME$9;
|
2058
2037
|
} // Public
|
2059
2038
|
|
2060
2039
|
|
2061
2040
|
toggle() {
|
2062
|
-
|
2063
|
-
return;
|
2064
|
-
}
|
2065
|
-
|
2066
|
-
const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);
|
2067
|
-
|
2068
|
-
if (isActive) {
|
2069
|
-
this.hide();
|
2070
|
-
return;
|
2071
|
-
}
|
2072
|
-
|
2073
|
-
this.show();
|
2041
|
+
return this._isShown() ? this.hide() : this.show();
|
2074
2042
|
}
|
2075
2043
|
|
2076
2044
|
show() {
|
2077
|
-
if (isDisabled(this._element) || this._menu
|
2045
|
+
if (isDisabled(this._element) || this._isShown(this._menu)) {
|
2078
2046
|
return;
|
2079
2047
|
}
|
2080
2048
|
|
2081
|
-
const parent = Dropdown.getParentFromElement(this._element);
|
2082
2049
|
const relatedTarget = {
|
2083
2050
|
relatedTarget: this._element
|
2084
2051
|
};
|
@@ -2086,34 +2053,14 @@
|
|
2086
2053
|
|
2087
2054
|
if (showEvent.defaultPrevented) {
|
2088
2055
|
return;
|
2089
|
-
}
|
2056
|
+
}
|
2090
2057
|
|
2058
|
+
const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
|
2091
2059
|
|
2092
2060
|
if (this._inNavbar) {
|
2093
2061
|
Manipulator.setDataAttribute(this._menu, 'popper', 'none');
|
2094
2062
|
} else {
|
2095
|
-
|
2096
|
-
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
|
2097
|
-
}
|
2098
|
-
|
2099
|
-
let referenceElement = this._element;
|
2100
|
-
|
2101
|
-
if (this._config.reference === 'parent') {
|
2102
|
-
referenceElement = parent;
|
2103
|
-
} else if (isElement(this._config.reference)) {
|
2104
|
-
referenceElement = getElement(this._config.reference);
|
2105
|
-
} else if (typeof this._config.reference === 'object') {
|
2106
|
-
referenceElement = this._config.reference;
|
2107
|
-
}
|
2108
|
-
|
2109
|
-
const popperConfig = this._getPopperConfig();
|
2110
|
-
|
2111
|
-
const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
|
2112
|
-
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
|
2113
|
-
|
2114
|
-
if (isDisplayStatic) {
|
2115
|
-
Manipulator.setDataAttribute(this._menu, 'popper', 'static');
|
2116
|
-
}
|
2063
|
+
this._createPopper(parent);
|
2117
2064
|
} // If this is a touch-enabled device we add extra
|
2118
2065
|
// empty mouseover listeners to the body's immediate children;
|
2119
2066
|
// only needed because of broken event delegation on iOS
|
@@ -2128,15 +2075,15 @@
|
|
2128
2075
|
|
2129
2076
|
this._element.setAttribute('aria-expanded', true);
|
2130
2077
|
|
2131
|
-
this._menu.classList.
|
2078
|
+
this._menu.classList.add(CLASS_NAME_SHOW$6);
|
2132
2079
|
|
2133
|
-
this._element.classList.
|
2080
|
+
this._element.classList.add(CLASS_NAME_SHOW$6);
|
2134
2081
|
|
2135
2082
|
EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);
|
2136
2083
|
}
|
2137
2084
|
|
2138
2085
|
hide() {
|
2139
|
-
if (isDisabled(this._element) || !this._menu
|
2086
|
+
if (isDisabled(this._element) || !this._isShown(this._menu)) {
|
2140
2087
|
return;
|
2141
2088
|
}
|
2142
2089
|
|
@@ -2164,13 +2111,6 @@
|
|
2164
2111
|
} // Private
|
2165
2112
|
|
2166
2113
|
|
2167
|
-
_addEventListeners() {
|
2168
|
-
EventHandler.on(this._element, EVENT_CLICK, event => {
|
2169
|
-
event.preventDefault();
|
2170
|
-
this.toggle();
|
2171
|
-
});
|
2172
|
-
}
|
2173
|
-
|
2174
2114
|
_completeHide(relatedTarget) {
|
2175
2115
|
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);
|
2176
2116
|
|
@@ -2188,9 +2128,9 @@
|
|
2188
2128
|
this._popper.destroy();
|
2189
2129
|
}
|
2190
2130
|
|
2191
|
-
this._menu.classList.remove(CLASS_NAME_SHOW$
|
2131
|
+
this._menu.classList.remove(CLASS_NAME_SHOW$6);
|
2192
2132
|
|
2193
|
-
this._element.classList.remove(CLASS_NAME_SHOW$
|
2133
|
+
this._element.classList.remove(CLASS_NAME_SHOW$6);
|
2194
2134
|
|
2195
2135
|
this._element.setAttribute('aria-expanded', 'false');
|
2196
2136
|
|
@@ -2203,16 +2143,45 @@
|
|
2203
2143
|
...Manipulator.getDataAttributes(this._element),
|
2204
2144
|
...config
|
2205
2145
|
};
|
2206
|
-
typeCheckConfig(NAME$
|
2146
|
+
typeCheckConfig(NAME$9, config, this.constructor.DefaultType);
|
2207
2147
|
|
2208
2148
|
if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
|
2209
2149
|
// Popper virtual elements require a getBoundingClientRect method
|
2210
|
-
throw new TypeError(`${NAME$
|
2150
|
+
throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
|
2211
2151
|
}
|
2212
2152
|
|
2213
2153
|
return config;
|
2214
2154
|
}
|
2215
2155
|
|
2156
|
+
_createPopper(parent) {
|
2157
|
+
if (typeof Popper__namespace === 'undefined') {
|
2158
|
+
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
|
2159
|
+
}
|
2160
|
+
|
2161
|
+
let referenceElement = this._element;
|
2162
|
+
|
2163
|
+
if (this._config.reference === 'parent') {
|
2164
|
+
referenceElement = parent;
|
2165
|
+
} else if (isElement(this._config.reference)) {
|
2166
|
+
referenceElement = getElement(this._config.reference);
|
2167
|
+
} else if (typeof this._config.reference === 'object') {
|
2168
|
+
referenceElement = this._config.reference;
|
2169
|
+
}
|
2170
|
+
|
2171
|
+
const popperConfig = this._getPopperConfig();
|
2172
|
+
|
2173
|
+
const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
|
2174
|
+
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
|
2175
|
+
|
2176
|
+
if (isDisplayStatic) {
|
2177
|
+
Manipulator.setDataAttribute(this._menu, 'popper', 'static');
|
2178
|
+
}
|
2179
|
+
}
|
2180
|
+
|
2181
|
+
_isShown(element = this._element) {
|
2182
|
+
return element.classList.contains(CLASS_NAME_SHOW$6);
|
2183
|
+
}
|
2184
|
+
|
2216
2185
|
_getMenuElement() {
|
2217
2186
|
return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
|
2218
2187
|
}
|
@@ -2302,26 +2271,24 @@
|
|
2302
2271
|
} // Static
|
2303
2272
|
|
2304
2273
|
|
2305
|
-
static
|
2306
|
-
|
2274
|
+
static jQueryInterface(config) {
|
2275
|
+
return this.each(function () {
|
2276
|
+
const data = Dropdown.getOrCreateInstance(this, config);
|
2277
|
+
|
2278
|
+
if (typeof config !== 'string') {
|
2279
|
+
return;
|
2280
|
+
}
|
2307
2281
|
|
2308
|
-
if (typeof config === 'string') {
|
2309
2282
|
if (typeof data[config] === 'undefined') {
|
2310
2283
|
throw new TypeError(`No method named "${config}"`);
|
2311
2284
|
}
|
2312
2285
|
|
2313
2286
|
data[config]();
|
2314
|
-
}
|
2315
|
-
}
|
2316
|
-
|
2317
|
-
static jQueryInterface(config) {
|
2318
|
-
return this.each(function () {
|
2319
|
-
Dropdown.dropdownInterface(this, config);
|
2320
2287
|
});
|
2321
2288
|
}
|
2322
2289
|
|
2323
2290
|
static clearMenus(event) {
|
2324
|
-
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
|
2291
|
+
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {
|
2325
2292
|
return;
|
2326
2293
|
}
|
2327
2294
|
|
@@ -2334,7 +2301,7 @@
|
|
2334
2301
|
continue;
|
2335
2302
|
}
|
2336
2303
|
|
2337
|
-
if (!context.
|
2304
|
+
if (!context._isShown()) {
|
2338
2305
|
continue;
|
2339
2306
|
}
|
2340
2307
|
|
@@ -2351,7 +2318,7 @@
|
|
2351
2318
|
} // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
|
2352
2319
|
|
2353
2320
|
|
2354
|
-
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
|
2321
|
+
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
|
2355
2322
|
continue;
|
2356
2323
|
}
|
2357
2324
|
|
@@ -2380,7 +2347,7 @@
|
|
2380
2347
|
return;
|
2381
2348
|
}
|
2382
2349
|
|
2383
|
-
const isActive = this.classList.contains(CLASS_NAME_SHOW$
|
2350
|
+
const isActive = this.classList.contains(CLASS_NAME_SHOW$6);
|
2384
2351
|
|
2385
2352
|
if (!isActive && event.key === ESCAPE_KEY$2) {
|
2386
2353
|
return;
|
@@ -2393,20 +2360,20 @@
|
|
2393
2360
|
return;
|
2394
2361
|
}
|
2395
2362
|
|
2396
|
-
const getToggleButton =
|
2363
|
+
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];
|
2364
|
+
const instance = Dropdown.getOrCreateInstance(getToggleButton);
|
2397
2365
|
|
2398
2366
|
if (event.key === ESCAPE_KEY$2) {
|
2399
|
-
|
2400
|
-
Dropdown.clearMenus();
|
2367
|
+
instance.hide();
|
2401
2368
|
return;
|
2402
2369
|
}
|
2403
2370
|
|
2404
2371
|
if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
|
2405
2372
|
if (!isActive) {
|
2406
|
-
|
2373
|
+
instance.show();
|
2407
2374
|
}
|
2408
2375
|
|
2409
|
-
|
2376
|
+
instance._selectMenuItem(event);
|
2410
2377
|
|
2411
2378
|
return;
|
2412
2379
|
}
|
@@ -2430,7 +2397,7 @@
|
|
2430
2397
|
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
|
2431
2398
|
EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
|
2432
2399
|
event.preventDefault();
|
2433
|
-
Dropdown.
|
2400
|
+
Dropdown.getOrCreateInstance(this).toggle();
|
2434
2401
|
});
|
2435
2402
|
/**
|
2436
2403
|
* ------------------------------------------------------------------------
|
@@ -2443,7 +2410,7 @@
|
|
2443
2410
|
|
2444
2411
|
/**
|
2445
2412
|
* --------------------------------------------------------------------------
|
2446
|
-
* Bootstrap (v5.
|
2413
|
+
* Bootstrap (v5.1.3): util/scrollBar.js
|
2447
2414
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
2448
2415
|
* --------------------------------------------------------------------------
|
2449
2416
|
*/
|
@@ -2547,11 +2514,12 @@
|
|
2547
2514
|
|
2548
2515
|
/**
|
2549
2516
|
* --------------------------------------------------------------------------
|
2550
|
-
* Bootstrap (v5.
|
2551
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
2517
|
+
* Bootstrap (v5.1.3): util/backdrop.js
|
2518
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
2552
2519
|
* --------------------------------------------------------------------------
|
2553
2520
|
*/
|
2554
|
-
const Default$
|
2521
|
+
const Default$7 = {
|
2522
|
+
className: 'modal-backdrop',
|
2555
2523
|
isVisible: true,
|
2556
2524
|
// if false, we use the backdrop helper without adding any element to the dom
|
2557
2525
|
isAnimated: false,
|
@@ -2559,17 +2527,17 @@
|
|
2559
2527
|
// give the choice to place backdrop under different elements
|
2560
2528
|
clickCallback: null
|
2561
2529
|
};
|
2562
|
-
const DefaultType$
|
2530
|
+
const DefaultType$7 = {
|
2531
|
+
className: 'string',
|
2563
2532
|
isVisible: 'boolean',
|
2564
2533
|
isAnimated: 'boolean',
|
2565
2534
|
rootElement: '(element|string)',
|
2566
2535
|
clickCallback: '(function|null)'
|
2567
2536
|
};
|
2568
|
-
const NAME$
|
2569
|
-
const
|
2570
|
-
const
|
2571
|
-
const
|
2572
|
-
const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;
|
2537
|
+
const NAME$8 = 'backdrop';
|
2538
|
+
const CLASS_NAME_FADE$4 = 'fade';
|
2539
|
+
const CLASS_NAME_SHOW$5 = 'show';
|
2540
|
+
const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;
|
2573
2541
|
|
2574
2542
|
class Backdrop {
|
2575
2543
|
constructor(config) {
|
@@ -2590,7 +2558,7 @@
|
|
2590
2558
|
reflow(this._getElement());
|
2591
2559
|
}
|
2592
2560
|
|
2593
|
-
this._getElement().classList.add(CLASS_NAME_SHOW$
|
2561
|
+
this._getElement().classList.add(CLASS_NAME_SHOW$5);
|
2594
2562
|
|
2595
2563
|
this._emulateAnimation(() => {
|
2596
2564
|
execute(callback);
|
@@ -2603,7 +2571,7 @@
|
|
2603
2571
|
return;
|
2604
2572
|
}
|
2605
2573
|
|
2606
|
-
this._getElement().classList.remove(CLASS_NAME_SHOW$
|
2574
|
+
this._getElement().classList.remove(CLASS_NAME_SHOW$5);
|
2607
2575
|
|
2608
2576
|
this._emulateAnimation(() => {
|
2609
2577
|
this.dispose();
|
@@ -2615,10 +2583,10 @@
|
|
2615
2583
|
_getElement() {
|
2616
2584
|
if (!this._element) {
|
2617
2585
|
const backdrop = document.createElement('div');
|
2618
|
-
backdrop.className =
|
2586
|
+
backdrop.className = this._config.className;
|
2619
2587
|
|
2620
2588
|
if (this._config.isAnimated) {
|
2621
|
-
backdrop.classList.add(CLASS_NAME_FADE$
|
2589
|
+
backdrop.classList.add(CLASS_NAME_FADE$4);
|
2622
2590
|
}
|
2623
2591
|
|
2624
2592
|
this._element = backdrop;
|
@@ -2628,12 +2596,12 @@
|
|
2628
2596
|
}
|
2629
2597
|
|
2630
2598
|
_getConfig(config) {
|
2631
|
-
config = { ...Default$
|
2599
|
+
config = { ...Default$7,
|
2632
2600
|
...(typeof config === 'object' ? config : {})
|
2633
2601
|
}; // use getElement() with the default "body" to get a fresh Element on each instantiation
|
2634
2602
|
|
2635
2603
|
config.rootElement = getElement(config.rootElement);
|
2636
|
-
typeCheckConfig(NAME$
|
2604
|
+
typeCheckConfig(NAME$8, config, DefaultType$7);
|
2637
2605
|
return config;
|
2638
2606
|
}
|
2639
2607
|
|
@@ -2642,7 +2610,7 @@
|
|
2642
2610
|
return;
|
2643
2611
|
}
|
2644
2612
|
|
2645
|
-
this._config.rootElement.
|
2613
|
+
this._config.rootElement.append(this._getElement());
|
2646
2614
|
|
2647
2615
|
EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {
|
2648
2616
|
execute(this._config.clickCallback);
|
@@ -2670,7 +2638,110 @@
|
|
2670
2638
|
|
2671
2639
|
/**
|
2672
2640
|
* --------------------------------------------------------------------------
|
2673
|
-
* Bootstrap (v5.
|
2641
|
+
* Bootstrap (v5.1.3): util/focustrap.js
|
2642
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
2643
|
+
* --------------------------------------------------------------------------
|
2644
|
+
*/
|
2645
|
+
const Default$6 = {
|
2646
|
+
trapElement: null,
|
2647
|
+
// The element to trap focus inside of
|
2648
|
+
autofocus: true
|
2649
|
+
};
|
2650
|
+
const DefaultType$6 = {
|
2651
|
+
trapElement: 'element',
|
2652
|
+
autofocus: 'boolean'
|
2653
|
+
};
|
2654
|
+
const NAME$7 = 'focustrap';
|
2655
|
+
const DATA_KEY$7 = 'bs.focustrap';
|
2656
|
+
const EVENT_KEY$7 = `.${DATA_KEY$7}`;
|
2657
|
+
const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;
|
2658
|
+
const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
|
2659
|
+
const TAB_KEY = 'Tab';
|
2660
|
+
const TAB_NAV_FORWARD = 'forward';
|
2661
|
+
const TAB_NAV_BACKWARD = 'backward';
|
2662
|
+
|
2663
|
+
class FocusTrap {
|
2664
|
+
constructor(config) {
|
2665
|
+
this._config = this._getConfig(config);
|
2666
|
+
this._isActive = false;
|
2667
|
+
this._lastTabNavDirection = null;
|
2668
|
+
}
|
2669
|
+
|
2670
|
+
activate() {
|
2671
|
+
const {
|
2672
|
+
trapElement,
|
2673
|
+
autofocus
|
2674
|
+
} = this._config;
|
2675
|
+
|
2676
|
+
if (this._isActive) {
|
2677
|
+
return;
|
2678
|
+
}
|
2679
|
+
|
2680
|
+
if (autofocus) {
|
2681
|
+
trapElement.focus();
|
2682
|
+
}
|
2683
|
+
|
2684
|
+
EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop
|
2685
|
+
|
2686
|
+
EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));
|
2687
|
+
EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
|
2688
|
+
this._isActive = true;
|
2689
|
+
}
|
2690
|
+
|
2691
|
+
deactivate() {
|
2692
|
+
if (!this._isActive) {
|
2693
|
+
return;
|
2694
|
+
}
|
2695
|
+
|
2696
|
+
this._isActive = false;
|
2697
|
+
EventHandler.off(document, EVENT_KEY$7);
|
2698
|
+
} // Private
|
2699
|
+
|
2700
|
+
|
2701
|
+
_handleFocusin(event) {
|
2702
|
+
const {
|
2703
|
+
target
|
2704
|
+
} = event;
|
2705
|
+
const {
|
2706
|
+
trapElement
|
2707
|
+
} = this._config;
|
2708
|
+
|
2709
|
+
if (target === document || target === trapElement || trapElement.contains(target)) {
|
2710
|
+
return;
|
2711
|
+
}
|
2712
|
+
|
2713
|
+
const elements = SelectorEngine.focusableChildren(trapElement);
|
2714
|
+
|
2715
|
+
if (elements.length === 0) {
|
2716
|
+
trapElement.focus();
|
2717
|
+
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
|
2718
|
+
elements[elements.length - 1].focus();
|
2719
|
+
} else {
|
2720
|
+
elements[0].focus();
|
2721
|
+
}
|
2722
|
+
}
|
2723
|
+
|
2724
|
+
_handleKeydown(event) {
|
2725
|
+
if (event.key !== TAB_KEY) {
|
2726
|
+
return;
|
2727
|
+
}
|
2728
|
+
|
2729
|
+
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
|
2730
|
+
}
|
2731
|
+
|
2732
|
+
_getConfig(config) {
|
2733
|
+
config = { ...Default$6,
|
2734
|
+
...(typeof config === 'object' ? config : {})
|
2735
|
+
};
|
2736
|
+
typeCheckConfig(NAME$7, config, DefaultType$6);
|
2737
|
+
return config;
|
2738
|
+
}
|
2739
|
+
|
2740
|
+
}
|
2741
|
+
|
2742
|
+
/**
|
2743
|
+
* --------------------------------------------------------------------------
|
2744
|
+
* Bootstrap (v5.1.3): modal.js
|
2674
2745
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
2675
2746
|
* --------------------------------------------------------------------------
|
2676
2747
|
*/
|
@@ -2700,21 +2771,20 @@
|
|
2700
2771
|
const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;
|
2701
2772
|
const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;
|
2702
2773
|
const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;
|
2703
|
-
const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;
|
2704
2774
|
const EVENT_RESIZE = `resize${EVENT_KEY$6}`;
|
2705
|
-
const EVENT_CLICK_DISMISS
|
2775
|
+
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
|
2706
2776
|
const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;
|
2707
2777
|
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;
|
2708
2778
|
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
|
2709
2779
|
const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
|
2710
2780
|
const CLASS_NAME_OPEN = 'modal-open';
|
2711
|
-
const CLASS_NAME_FADE$
|
2712
|
-
const CLASS_NAME_SHOW$
|
2781
|
+
const CLASS_NAME_FADE$3 = 'fade';
|
2782
|
+
const CLASS_NAME_SHOW$4 = 'show';
|
2713
2783
|
const CLASS_NAME_STATIC = 'modal-static';
|
2784
|
+
const OPEN_SELECTOR$1 = '.modal.show';
|
2714
2785
|
const SELECTOR_DIALOG = '.modal-dialog';
|
2715
2786
|
const SELECTOR_MODAL_BODY = '.modal-body';
|
2716
2787
|
const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
|
2717
|
-
const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss="modal"]';
|
2718
2788
|
/**
|
2719
2789
|
* ------------------------------------------------------------------------
|
2720
2790
|
* Class Definition
|
@@ -2727,6 +2797,7 @@
|
|
2727
2797
|
this._config = this._getConfig(config);
|
2728
2798
|
this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
|
2729
2799
|
this._backdrop = this._initializeBackDrop();
|
2800
|
+
this._focustrap = this._initializeFocusTrap();
|
2730
2801
|
this._isShown = false;
|
2731
2802
|
this._ignoreBackdropClick = false;
|
2732
2803
|
this._isTransitioning = false;
|
@@ -2776,7 +2847,6 @@
|
|
2776
2847
|
|
2777
2848
|
this._setResizeEvent();
|
2778
2849
|
|
2779
|
-
EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));
|
2780
2850
|
EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
|
2781
2851
|
EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
|
2782
2852
|
if (event.target === this._element) {
|
@@ -2788,11 +2858,7 @@
|
|
2788
2858
|
this._showBackdrop(() => this._showElement(relatedTarget));
|
2789
2859
|
}
|
2790
2860
|
|
2791
|
-
hide(
|
2792
|
-
if (event && ['A', 'AREA'].includes(event.target.tagName)) {
|
2793
|
-
event.preventDefault();
|
2794
|
-
}
|
2795
|
-
|
2861
|
+
hide() {
|
2796
2862
|
if (!this._isShown || this._isTransitioning) {
|
2797
2863
|
return;
|
2798
2864
|
}
|
@@ -2815,11 +2881,11 @@
|
|
2815
2881
|
|
2816
2882
|
this._setResizeEvent();
|
2817
2883
|
|
2818
|
-
|
2884
|
+
this._focustrap.deactivate();
|
2819
2885
|
|
2820
|
-
this._element.classList.remove(CLASS_NAME_SHOW$
|
2886
|
+
this._element.classList.remove(CLASS_NAME_SHOW$4);
|
2821
2887
|
|
2822
|
-
EventHandler.off(this._element, EVENT_CLICK_DISMISS
|
2888
|
+
EventHandler.off(this._element, EVENT_CLICK_DISMISS);
|
2823
2889
|
EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
|
2824
2890
|
|
2825
2891
|
this._queueCallback(() => this._hideModal(), this._element, isAnimated);
|
@@ -2830,14 +2896,9 @@
|
|
2830
2896
|
|
2831
2897
|
this._backdrop.dispose();
|
2832
2898
|
|
2833
|
-
|
2834
|
-
/**
|
2835
|
-
* `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
|
2836
|
-
* Do not move `document` in `htmlElements` array
|
2837
|
-
* It will remove `EVENT_CLICK_DATA_API` event that should remain
|
2838
|
-
*/
|
2899
|
+
this._focustrap.deactivate();
|
2839
2900
|
|
2840
|
-
|
2901
|
+
super.dispose();
|
2841
2902
|
}
|
2842
2903
|
|
2843
2904
|
handleUpdate() {
|
@@ -2853,6 +2914,12 @@
|
|
2853
2914
|
});
|
2854
2915
|
}
|
2855
2916
|
|
2917
|
+
_initializeFocusTrap() {
|
2918
|
+
return new FocusTrap({
|
2919
|
+
trapElement: this._element
|
2920
|
+
});
|
2921
|
+
}
|
2922
|
+
|
2856
2923
|
_getConfig(config) {
|
2857
2924
|
config = { ...Default$5,
|
2858
2925
|
...Manipulator.getDataAttributes(this._element),
|
@@ -2869,7 +2936,7 @@
|
|
2869
2936
|
|
2870
2937
|
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
2871
2938
|
// Don't move modal's DOM position
|
2872
|
-
document.body.
|
2939
|
+
document.body.append(this._element);
|
2873
2940
|
}
|
2874
2941
|
|
2875
2942
|
this._element.style.display = 'block';
|
@@ -2890,15 +2957,11 @@
|
|
2890
2957
|
reflow(this._element);
|
2891
2958
|
}
|
2892
2959
|
|
2893
|
-
this._element.classList.add(CLASS_NAME_SHOW$
|
2894
|
-
|
2895
|
-
if (this._config.focus) {
|
2896
|
-
this._enforceFocus();
|
2897
|
-
}
|
2960
|
+
this._element.classList.add(CLASS_NAME_SHOW$4);
|
2898
2961
|
|
2899
2962
|
const transitionComplete = () => {
|
2900
2963
|
if (this._config.focus) {
|
2901
|
-
this.
|
2964
|
+
this._focustrap.activate();
|
2902
2965
|
}
|
2903
2966
|
|
2904
2967
|
this._isTransitioning = false;
|
@@ -2910,16 +2973,6 @@
|
|
2910
2973
|
this._queueCallback(transitionComplete, this._dialog, isAnimated);
|
2911
2974
|
}
|
2912
2975
|
|
2913
|
-
_enforceFocus() {
|
2914
|
-
EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop
|
2915
|
-
|
2916
|
-
EventHandler.on(document, EVENT_FOCUSIN$2, event => {
|
2917
|
-
if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {
|
2918
|
-
this._element.focus();
|
2919
|
-
}
|
2920
|
-
});
|
2921
|
-
}
|
2922
|
-
|
2923
2976
|
_setEscapeEvent() {
|
2924
2977
|
if (this._isShown) {
|
2925
2978
|
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
|
@@ -2966,7 +3019,7 @@
|
|
2966
3019
|
}
|
2967
3020
|
|
2968
3021
|
_showBackdrop(callback) {
|
2969
|
-
EventHandler.on(this._element, EVENT_CLICK_DISMISS
|
3022
|
+
EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
|
2970
3023
|
if (this._ignoreBackdropClick) {
|
2971
3024
|
this._ignoreBackdropClick = false;
|
2972
3025
|
return;
|
@@ -2987,7 +3040,7 @@
|
|
2987
3040
|
}
|
2988
3041
|
|
2989
3042
|
_isAnimated() {
|
2990
|
-
return this._element.classList.contains(CLASS_NAME_FADE$
|
3043
|
+
return this._element.classList.contains(CLASS_NAME_FADE$3);
|
2991
3044
|
}
|
2992
3045
|
|
2993
3046
|
_triggerBackdropTransition() {
|
@@ -3094,10 +3147,18 @@
|
|
3094
3147
|
this.focus();
|
3095
3148
|
}
|
3096
3149
|
});
|
3097
|
-
});
|
3150
|
+
}); // avoid conflict when clicking moddal toggler while another one is open
|
3151
|
+
|
3152
|
+
const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
|
3153
|
+
|
3154
|
+
if (allReadyOpen) {
|
3155
|
+
Modal.getInstance(allReadyOpen).hide();
|
3156
|
+
}
|
3157
|
+
|
3098
3158
|
const data = Modal.getOrCreateInstance(target);
|
3099
3159
|
data.toggle(this);
|
3100
3160
|
});
|
3161
|
+
enableDismissTrigger(Modal);
|
3101
3162
|
/**
|
3102
3163
|
* ------------------------------------------------------------------------
|
3103
3164
|
* jQuery
|
@@ -3109,8 +3170,8 @@
|
|
3109
3170
|
|
3110
3171
|
/**
|
3111
3172
|
* --------------------------------------------------------------------------
|
3112
|
-
* Bootstrap (v5.
|
3113
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
3173
|
+
* Bootstrap (v5.1.3): offcanvas.js
|
3174
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
3114
3175
|
* --------------------------------------------------------------------------
|
3115
3176
|
*/
|
3116
3177
|
/**
|
@@ -3135,17 +3196,15 @@
|
|
3135
3196
|
keyboard: 'boolean',
|
3136
3197
|
scroll: 'boolean'
|
3137
3198
|
};
|
3138
|
-
const CLASS_NAME_SHOW$
|
3199
|
+
const CLASS_NAME_SHOW$3 = 'show';
|
3200
|
+
const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
|
3139
3201
|
const OPEN_SELECTOR = '.offcanvas.show';
|
3140
3202
|
const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;
|
3141
3203
|
const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;
|
3142
3204
|
const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;
|
3143
3205
|
const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;
|
3144
|
-
const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;
|
3145
3206
|
const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;
|
3146
|
-
const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;
|
3147
3207
|
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
|
3148
|
-
const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss="offcanvas"]';
|
3149
3208
|
const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
|
3150
3209
|
/**
|
3151
3210
|
* ------------------------------------------------------------------------
|
@@ -3159,6 +3218,7 @@
|
|
3159
3218
|
this._config = this._getConfig(config);
|
3160
3219
|
this._isShown = false;
|
3161
3220
|
this._backdrop = this._initializeBackDrop();
|
3221
|
+
this._focustrap = this._initializeFocusTrap();
|
3162
3222
|
|
3163
3223
|
this._addEventListeners();
|
3164
3224
|
} // Getters
|
@@ -3197,8 +3257,6 @@
|
|
3197
3257
|
|
3198
3258
|
if (!this._config.scroll) {
|
3199
3259
|
new ScrollBarHelper().hide();
|
3200
|
-
|
3201
|
-
this._enforceFocusOnElement(this._element);
|
3202
3260
|
}
|
3203
3261
|
|
3204
3262
|
this._element.removeAttribute('aria-hidden');
|
@@ -3207,9 +3265,13 @@
|
|
3207
3265
|
|
3208
3266
|
this._element.setAttribute('role', 'dialog');
|
3209
3267
|
|
3210
|
-
this._element.classList.add(CLASS_NAME_SHOW$
|
3268
|
+
this._element.classList.add(CLASS_NAME_SHOW$3);
|
3211
3269
|
|
3212
3270
|
const completeCallBack = () => {
|
3271
|
+
if (!this._config.scroll) {
|
3272
|
+
this._focustrap.activate();
|
3273
|
+
}
|
3274
|
+
|
3213
3275
|
EventHandler.trigger(this._element, EVENT_SHOWN$2, {
|
3214
3276
|
relatedTarget
|
3215
3277
|
});
|
@@ -3229,13 +3291,13 @@
|
|
3229
3291
|
return;
|
3230
3292
|
}
|
3231
3293
|
|
3232
|
-
|
3294
|
+
this._focustrap.deactivate();
|
3233
3295
|
|
3234
3296
|
this._element.blur();
|
3235
3297
|
|
3236
3298
|
this._isShown = false;
|
3237
3299
|
|
3238
|
-
this._element.classList.remove(CLASS_NAME_SHOW$
|
3300
|
+
this._element.classList.remove(CLASS_NAME_SHOW$3);
|
3239
3301
|
|
3240
3302
|
this._backdrop.hide();
|
3241
3303
|
|
@@ -3261,8 +3323,9 @@
|
|
3261
3323
|
dispose() {
|
3262
3324
|
this._backdrop.dispose();
|
3263
3325
|
|
3326
|
+
this._focustrap.deactivate();
|
3327
|
+
|
3264
3328
|
super.dispose();
|
3265
|
-
EventHandler.off(document, EVENT_FOCUSIN$1);
|
3266
3329
|
} // Private
|
3267
3330
|
|
3268
3331
|
|
@@ -3277,6 +3340,7 @@
|
|
3277
3340
|
|
3278
3341
|
_initializeBackDrop() {
|
3279
3342
|
return new Backdrop({
|
3343
|
+
className: CLASS_NAME_BACKDROP,
|
3280
3344
|
isVisible: this._config.backdrop,
|
3281
3345
|
isAnimated: true,
|
3282
3346
|
rootElement: this._element.parentNode,
|
@@ -3284,19 +3348,13 @@
|
|
3284
3348
|
});
|
3285
3349
|
}
|
3286
3350
|
|
3287
|
-
|
3288
|
-
|
3289
|
-
|
3290
|
-
EventHandler.on(document, EVENT_FOCUSIN$1, event => {
|
3291
|
-
if (document !== event.target && element !== event.target && !element.contains(event.target)) {
|
3292
|
-
element.focus();
|
3293
|
-
}
|
3351
|
+
_initializeFocusTrap() {
|
3352
|
+
return new FocusTrap({
|
3353
|
+
trapElement: this._element
|
3294
3354
|
});
|
3295
|
-
element.focus();
|
3296
3355
|
}
|
3297
3356
|
|
3298
3357
|
_addEventListeners() {
|
3299
|
-
EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());
|
3300
3358
|
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
3301
3359
|
if (this._config.keyboard && event.key === ESCAPE_KEY) {
|
3302
3360
|
this.hide();
|
@@ -3357,6 +3415,7 @@
|
|
3357
3415
|
data.toggle(this);
|
3358
3416
|
});
|
3359
3417
|
EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
|
3418
|
+
enableDismissTrigger(Offcanvas);
|
3360
3419
|
/**
|
3361
3420
|
* ------------------------------------------------------------------------
|
3362
3421
|
* jQuery
|
@@ -3367,42 +3426,42 @@
|
|
3367
3426
|
|
3368
3427
|
/**
|
3369
3428
|
* --------------------------------------------------------------------------
|
3370
|
-
* Bootstrap (v5.
|
3429
|
+
* Bootstrap (v5.1.3): util/sanitizer.js
|
3371
3430
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
3372
3431
|
* --------------------------------------------------------------------------
|
3373
3432
|
*/
|
3374
|
-
const
|
3433
|
+
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
|
3375
3434
|
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
|
3376
3435
|
/**
|
3377
3436
|
* A pattern that recognizes a commonly useful subset of URLs that are safe.
|
3378
3437
|
*
|
3379
|
-
* Shoutout to Angular
|
3438
|
+
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
|
3380
3439
|
*/
|
3381
3440
|
|
3382
|
-
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;
|
3441
|
+
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
|
3383
3442
|
/**
|
3384
3443
|
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
3385
3444
|
*
|
3386
|
-
* Shoutout to Angular
|
3445
|
+
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
|
3387
3446
|
*/
|
3388
3447
|
|
3389
3448
|
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;
|
3390
3449
|
|
3391
|
-
const allowedAttribute = (
|
3392
|
-
const
|
3450
|
+
const allowedAttribute = (attribute, allowedAttributeList) => {
|
3451
|
+
const attributeName = attribute.nodeName.toLowerCase();
|
3393
3452
|
|
3394
|
-
if (allowedAttributeList.includes(
|
3395
|
-
if (
|
3396
|
-
return Boolean(SAFE_URL_PATTERN.test(
|
3453
|
+
if (allowedAttributeList.includes(attributeName)) {
|
3454
|
+
if (uriAttributes.has(attributeName)) {
|
3455
|
+
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
|
3397
3456
|
}
|
3398
3457
|
|
3399
3458
|
return true;
|
3400
3459
|
}
|
3401
3460
|
|
3402
|
-
const regExp = allowedAttributeList.filter(
|
3461
|
+
const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.
|
3403
3462
|
|
3404
3463
|
for (let i = 0, len = regExp.length; i < len; i++) {
|
3405
|
-
if (regExp[i].test(
|
3464
|
+
if (regExp[i].test(attributeName)) {
|
3406
3465
|
return true;
|
3407
3466
|
}
|
3408
3467
|
}
|
@@ -3454,23 +3513,22 @@
|
|
3454
3513
|
|
3455
3514
|
const domParser = new window.DOMParser();
|
3456
3515
|
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
|
3457
|
-
const allowlistKeys = Object.keys(allowList);
|
3458
3516
|
const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
|
3459
3517
|
|
3460
3518
|
for (let i = 0, len = elements.length; i < len; i++) {
|
3461
|
-
const
|
3462
|
-
const
|
3519
|
+
const element = elements[i];
|
3520
|
+
const elementName = element.nodeName.toLowerCase();
|
3463
3521
|
|
3464
|
-
if (!
|
3465
|
-
|
3522
|
+
if (!Object.keys(allowList).includes(elementName)) {
|
3523
|
+
element.remove();
|
3466
3524
|
continue;
|
3467
3525
|
}
|
3468
3526
|
|
3469
|
-
const attributeList = [].concat(...
|
3470
|
-
const allowedAttributes = [].concat(allowList['*'] || [], allowList[
|
3471
|
-
attributeList.forEach(
|
3472
|
-
if (!allowedAttribute(
|
3473
|
-
|
3527
|
+
const attributeList = [].concat(...element.attributes);
|
3528
|
+
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
|
3529
|
+
attributeList.forEach(attribute => {
|
3530
|
+
if (!allowedAttribute(attribute, allowedAttributes)) {
|
3531
|
+
element.removeAttribute(attribute.nodeName);
|
3474
3532
|
}
|
3475
3533
|
});
|
3476
3534
|
}
|
@@ -3480,7 +3538,7 @@
|
|
3480
3538
|
|
3481
3539
|
/**
|
3482
3540
|
* --------------------------------------------------------------------------
|
3483
|
-
* Bootstrap (v5.
|
3541
|
+
* Bootstrap (v5.1.3): tooltip.js
|
3484
3542
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
3485
3543
|
* --------------------------------------------------------------------------
|
3486
3544
|
*/
|
@@ -3494,7 +3552,6 @@
|
|
3494
3552
|
const DATA_KEY$4 = 'bs.tooltip';
|
3495
3553
|
const EVENT_KEY$4 = `.${DATA_KEY$4}`;
|
3496
3554
|
const CLASS_PREFIX$1 = 'bs-tooltip';
|
3497
|
-
const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\s)${CLASS_PREFIX$1}\\S+`, 'g');
|
3498
3555
|
const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
|
3499
3556
|
const DefaultType$3 = {
|
3500
3557
|
animation: 'boolean',
|
@@ -3553,12 +3610,14 @@
|
|
3553
3610
|
MOUSEENTER: `mouseenter${EVENT_KEY$4}`,
|
3554
3611
|
MOUSELEAVE: `mouseleave${EVENT_KEY$4}`
|
3555
3612
|
};
|
3556
|
-
const CLASS_NAME_FADE$
|
3613
|
+
const CLASS_NAME_FADE$2 = 'fade';
|
3557
3614
|
const CLASS_NAME_MODAL = 'modal';
|
3558
|
-
const CLASS_NAME_SHOW$
|
3615
|
+
const CLASS_NAME_SHOW$2 = 'show';
|
3559
3616
|
const HOVER_STATE_SHOW = 'show';
|
3560
3617
|
const HOVER_STATE_OUT = 'out';
|
3561
3618
|
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
|
3619
|
+
const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
|
3620
|
+
const EVENT_MODAL_HIDE = 'hide.bs.modal';
|
3562
3621
|
const TRIGGER_HOVER = 'hover';
|
3563
3622
|
const TRIGGER_FOCUS = 'focus';
|
3564
3623
|
const TRIGGER_CLICK = 'click';
|
@@ -3635,7 +3694,7 @@
|
|
3635
3694
|
context._leave(null, context);
|
3636
3695
|
}
|
3637
3696
|
} else {
|
3638
|
-
if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$
|
3697
|
+
if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {
|
3639
3698
|
this._leave(null, this);
|
3640
3699
|
|
3641
3700
|
return;
|
@@ -3647,15 +3706,13 @@
|
|
3647
3706
|
|
3648
3707
|
dispose() {
|
3649
3708
|
clearTimeout(this._timeout);
|
3650
|
-
EventHandler.off(this._element.closest(
|
3709
|
+
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
3651
3710
|
|
3652
3711
|
if (this.tip) {
|
3653
3712
|
this.tip.remove();
|
3654
3713
|
}
|
3655
3714
|
|
3656
|
-
|
3657
|
-
this._popper.destroy();
|
3658
|
-
}
|
3715
|
+
this._disposePopper();
|
3659
3716
|
|
3660
3717
|
super.dispose();
|
3661
3718
|
}
|
@@ -3675,6 +3732,15 @@
|
|
3675
3732
|
|
3676
3733
|
if (showEvent.defaultPrevented || !isInTheDom) {
|
3677
3734
|
return;
|
3735
|
+
} // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`
|
3736
|
+
// This will be removed later in favor of a `setContent` method
|
3737
|
+
|
3738
|
+
|
3739
|
+
if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {
|
3740
|
+
this._disposePopper();
|
3741
|
+
|
3742
|
+
this.tip.remove();
|
3743
|
+
this.tip = null;
|
3678
3744
|
}
|
3679
3745
|
|
3680
3746
|
const tip = this.getTipElement();
|
@@ -3683,10 +3749,8 @@
|
|
3683
3749
|
|
3684
3750
|
this._element.setAttribute('aria-describedby', tipId);
|
3685
3751
|
|
3686
|
-
this.setContent();
|
3687
|
-
|
3688
3752
|
if (this._config.animation) {
|
3689
|
-
tip.classList.add(CLASS_NAME_FADE$
|
3753
|
+
tip.classList.add(CLASS_NAME_FADE$2);
|
3690
3754
|
}
|
3691
3755
|
|
3692
3756
|
const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
|
@@ -3701,7 +3765,7 @@
|
|
3701
3765
|
Data.set(tip, this.constructor.DATA_KEY, this);
|
3702
3766
|
|
3703
3767
|
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
|
3704
|
-
container.
|
3768
|
+
container.append(tip);
|
3705
3769
|
EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
|
3706
3770
|
}
|
3707
3771
|
|
@@ -3711,8 +3775,9 @@
|
|
3711
3775
|
this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
|
3712
3776
|
}
|
3713
3777
|
|
3714
|
-
tip.classList.add(CLASS_NAME_SHOW$
|
3715
|
-
|
3778
|
+
tip.classList.add(CLASS_NAME_SHOW$2);
|
3779
|
+
|
3780
|
+
const customClass = this._resolvePossibleFunction(this._config.customClass);
|
3716
3781
|
|
3717
3782
|
if (customClass) {
|
3718
3783
|
tip.classList.add(...customClass.split(' '));
|
@@ -3738,7 +3803,7 @@
|
|
3738
3803
|
}
|
3739
3804
|
};
|
3740
3805
|
|
3741
|
-
const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$
|
3806
|
+
const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
|
3742
3807
|
|
3743
3808
|
this._queueCallback(complete, this.tip, isAnimated);
|
3744
3809
|
}
|
@@ -3765,11 +3830,7 @@
|
|
3765
3830
|
|
3766
3831
|
EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);
|
3767
3832
|
|
3768
|
-
|
3769
|
-
this._popper.destroy();
|
3770
|
-
|
3771
|
-
this._popper = null;
|
3772
|
-
}
|
3833
|
+
this._disposePopper();
|
3773
3834
|
};
|
3774
3835
|
|
3775
3836
|
const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
|
@@ -3778,7 +3839,7 @@
|
|
3778
3839
|
return;
|
3779
3840
|
}
|
3780
3841
|
|
3781
|
-
tip.classList.remove(CLASS_NAME_SHOW$
|
3842
|
+
tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
|
3782
3843
|
// empty mouseover listeners we added for iOS support
|
3783
3844
|
|
3784
3845
|
if ('ontouchstart' in document.documentElement) {
|
@@ -3788,7 +3849,7 @@
|
|
3788
3849
|
this._activeTrigger[TRIGGER_CLICK] = false;
|
3789
3850
|
this._activeTrigger[TRIGGER_FOCUS] = false;
|
3790
3851
|
this._activeTrigger[TRIGGER_HOVER] = false;
|
3791
|
-
const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$
|
3852
|
+
const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
|
3792
3853
|
|
3793
3854
|
this._queueCallback(complete, this.tip, isAnimated);
|
3794
3855
|
|
@@ -3813,14 +3874,27 @@
|
|
3813
3874
|
|
3814
3875
|
const element = document.createElement('div');
|
3815
3876
|
element.innerHTML = this._config.template;
|
3816
|
-
|
3877
|
+
const tip = element.children[0];
|
3878
|
+
this.setContent(tip);
|
3879
|
+
tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
|
3880
|
+
this.tip = tip;
|
3817
3881
|
return this.tip;
|
3818
3882
|
}
|
3819
3883
|
|
3820
|
-
setContent() {
|
3821
|
-
|
3822
|
-
|
3823
|
-
|
3884
|
+
setContent(tip) {
|
3885
|
+
this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
|
3886
|
+
}
|
3887
|
+
|
3888
|
+
_sanitizeAndSetContent(template, content, selector) {
|
3889
|
+
const templateElement = SelectorEngine.findOne(selector, template);
|
3890
|
+
|
3891
|
+
if (!content && templateElement) {
|
3892
|
+
templateElement.remove();
|
3893
|
+
return;
|
3894
|
+
} // we use append for html objects to maintain js events
|
3895
|
+
|
3896
|
+
|
3897
|
+
this.setElementContent(templateElement, content);
|
3824
3898
|
}
|
3825
3899
|
|
3826
3900
|
setElementContent(element, content) {
|
@@ -3834,7 +3908,7 @@
|
|
3834
3908
|
if (this._config.html) {
|
3835
3909
|
if (content.parentNode !== element) {
|
3836
3910
|
element.innerHTML = '';
|
3837
|
-
element.
|
3911
|
+
element.append(content);
|
3838
3912
|
}
|
3839
3913
|
} else {
|
3840
3914
|
element.textContent = content.textContent;
|
@@ -3855,13 +3929,9 @@
|
|
3855
3929
|
}
|
3856
3930
|
|
3857
3931
|
getTitle() {
|
3858
|
-
|
3859
|
-
|
3860
|
-
if (!title) {
|
3861
|
-
title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;
|
3862
|
-
}
|
3932
|
+
const title = this._element.getAttribute('data-bs-original-title') || this._config.title;
|
3863
3933
|
|
3864
|
-
return title;
|
3934
|
+
return this._resolvePossibleFunction(title);
|
3865
3935
|
}
|
3866
3936
|
|
3867
3937
|
updateAttachment(attachment) {
|
@@ -3878,15 +3948,7 @@
|
|
3878
3948
|
|
3879
3949
|
|
3880
3950
|
_initializeOnDelegatedTarget(event, context) {
|
3881
|
-
|
3882
|
-
context = context || Data.get(event.delegateTarget, dataKey);
|
3883
|
-
|
3884
|
-
if (!context) {
|
3885
|
-
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
|
3886
|
-
Data.set(event.delegateTarget, dataKey, context);
|
3887
|
-
}
|
3888
|
-
|
3889
|
-
return context;
|
3951
|
+
return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
|
3890
3952
|
}
|
3891
3953
|
|
3892
3954
|
_getOffset() {
|
@@ -3905,6 +3967,10 @@
|
|
3905
3967
|
return offset;
|
3906
3968
|
}
|
3907
3969
|
|
3970
|
+
_resolvePossibleFunction(content) {
|
3971
|
+
return typeof content === 'function' ? content.call(this._element) : content;
|
3972
|
+
}
|
3973
|
+
|
3908
3974
|
_getPopperConfig(attachment) {
|
3909
3975
|
const defaultBsPopperConfig = {
|
3910
3976
|
placement: attachment,
|
@@ -3946,7 +4012,7 @@
|
|
3946
4012
|
}
|
3947
4013
|
|
3948
4014
|
_addAttachmentClass(attachment) {
|
3949
|
-
this.getTipElement().classList.add(`${
|
4015
|
+
this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
|
3950
4016
|
}
|
3951
4017
|
|
3952
4018
|
_getAttachment(placement) {
|
@@ -3973,7 +4039,7 @@
|
|
3973
4039
|
}
|
3974
4040
|
};
|
3975
4041
|
|
3976
|
-
EventHandler.on(this._element.closest(
|
4042
|
+
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
3977
4043
|
|
3978
4044
|
if (this._config.selector) {
|
3979
4045
|
this._config = { ...this._config,
|
@@ -4008,7 +4074,7 @@
|
|
4008
4074
|
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
|
4009
4075
|
}
|
4010
4076
|
|
4011
|
-
if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$
|
4077
|
+
if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {
|
4012
4078
|
context._hoverState = HOVER_STATE_SHOW;
|
4013
4079
|
return;
|
4014
4080
|
}
|
@@ -4104,26 +4170,32 @@
|
|
4104
4170
|
_getDelegateConfig() {
|
4105
4171
|
const config = {};
|
4106
4172
|
|
4107
|
-
|
4108
|
-
|
4109
|
-
|
4110
|
-
config[key] = this._config[key];
|
4111
|
-
}
|
4173
|
+
for (const key in this._config) {
|
4174
|
+
if (this.constructor.Default[key] !== this._config[key]) {
|
4175
|
+
config[key] = this._config[key];
|
4112
4176
|
}
|
4113
|
-
}
|
4177
|
+
} // In the future can be replaced with:
|
4178
|
+
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
|
4179
|
+
// `Object.fromEntries(keysWithDifferentValues)`
|
4180
|
+
|
4114
4181
|
|
4115
4182
|
return config;
|
4116
4183
|
}
|
4117
4184
|
|
4118
4185
|
_cleanTipClass() {
|
4119
4186
|
const tip = this.getTipElement();
|
4120
|
-
const
|
4187
|
+
const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
|
4188
|
+
const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
|
4121
4189
|
|
4122
4190
|
if (tabClass !== null && tabClass.length > 0) {
|
4123
4191
|
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
4124
4192
|
}
|
4125
4193
|
}
|
4126
4194
|
|
4195
|
+
_getBasicClassPrefix() {
|
4196
|
+
return CLASS_PREFIX$1;
|
4197
|
+
}
|
4198
|
+
|
4127
4199
|
_handlePopperPlacementChange(popperData) {
|
4128
4200
|
const {
|
4129
4201
|
state
|
@@ -4138,6 +4210,14 @@
|
|
4138
4210
|
this._cleanTipClass();
|
4139
4211
|
|
4140
4212
|
this._addAttachmentClass(this._getAttachment(state.placement));
|
4213
|
+
}
|
4214
|
+
|
4215
|
+
_disposePopper() {
|
4216
|
+
if (this._popper) {
|
4217
|
+
this._popper.destroy();
|
4218
|
+
|
4219
|
+
this._popper = null;
|
4220
|
+
}
|
4141
4221
|
} // Static
|
4142
4222
|
|
4143
4223
|
|
@@ -4168,7 +4248,7 @@
|
|
4168
4248
|
|
4169
4249
|
/**
|
4170
4250
|
* --------------------------------------------------------------------------
|
4171
|
-
* Bootstrap (v5.
|
4251
|
+
* Bootstrap (v5.1.3): popover.js
|
4172
4252
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4173
4253
|
* --------------------------------------------------------------------------
|
4174
4254
|
*/
|
@@ -4182,7 +4262,6 @@
|
|
4182
4262
|
const DATA_KEY$3 = 'bs.popover';
|
4183
4263
|
const EVENT_KEY$3 = `.${DATA_KEY$3}`;
|
4184
4264
|
const CLASS_PREFIX = 'bs-popover';
|
4185
|
-
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
|
4186
4265
|
const Default$2 = { ...Tooltip.Default,
|
4187
4266
|
placement: 'right',
|
4188
4267
|
offset: [0, 8],
|
@@ -4205,8 +4284,6 @@
|
|
4205
4284
|
MOUSEENTER: `mouseenter${EVENT_KEY$3}`,
|
4206
4285
|
MOUSELEAVE: `mouseleave${EVENT_KEY$3}`
|
4207
4286
|
};
|
4208
|
-
const CLASS_NAME_FADE$2 = 'fade';
|
4209
|
-
const CLASS_NAME_SHOW$2 = 'show';
|
4210
4287
|
const SELECTOR_TITLE = '.popover-header';
|
4211
4288
|
const SELECTOR_CONTENT = '.popover-body';
|
4212
4289
|
/**
|
@@ -4238,55 +4315,19 @@
|
|
4238
4315
|
return this.getTitle() || this._getContent();
|
4239
4316
|
}
|
4240
4317
|
|
4241
|
-
|
4242
|
-
|
4243
|
-
return this.tip;
|
4244
|
-
}
|
4245
|
-
|
4246
|
-
this.tip = super.getTipElement();
|
4247
|
-
|
4248
|
-
if (!this.getTitle()) {
|
4249
|
-
SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();
|
4250
|
-
}
|
4251
|
-
|
4252
|
-
if (!this._getContent()) {
|
4253
|
-
SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();
|
4254
|
-
}
|
4255
|
-
|
4256
|
-
return this.tip;
|
4257
|
-
}
|
4258
|
-
|
4259
|
-
setContent() {
|
4260
|
-
const tip = this.getTipElement(); // we use append for html objects to maintain js events
|
4261
|
-
|
4262
|
-
this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());
|
4318
|
+
setContent(tip) {
|
4319
|
+
this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
|
4263
4320
|
|
4264
|
-
|
4265
|
-
|
4266
|
-
if (typeof content === 'function') {
|
4267
|
-
content = content.call(this._element);
|
4268
|
-
}
|
4269
|
-
|
4270
|
-
this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);
|
4271
|
-
tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
|
4321
|
+
this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
|
4272
4322
|
} // Private
|
4273
4323
|
|
4274
4324
|
|
4275
|
-
_addAttachmentClass(attachment) {
|
4276
|
-
this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
|
4277
|
-
}
|
4278
|
-
|
4279
4325
|
_getContent() {
|
4280
|
-
return this.
|
4326
|
+
return this._resolvePossibleFunction(this._config.content);
|
4281
4327
|
}
|
4282
4328
|
|
4283
|
-
|
4284
|
-
|
4285
|
-
const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
|
4286
|
-
|
4287
|
-
if (tabClass !== null && tabClass.length > 0) {
|
4288
|
-
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
4289
|
-
}
|
4329
|
+
_getBasicClassPrefix() {
|
4330
|
+
return CLASS_PREFIX;
|
4290
4331
|
} // Static
|
4291
4332
|
|
4292
4333
|
|
@@ -4317,7 +4358,7 @@
|
|
4317
4358
|
|
4318
4359
|
/**
|
4319
4360
|
* --------------------------------------------------------------------------
|
4320
|
-
* Bootstrap (v5.
|
4361
|
+
* Bootstrap (v5.1.3): scrollspy.js
|
4321
4362
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4322
4363
|
* --------------------------------------------------------------------------
|
4323
4364
|
*/
|
@@ -4351,6 +4392,7 @@
|
|
4351
4392
|
const SELECTOR_NAV_LINKS = '.nav-link';
|
4352
4393
|
const SELECTOR_NAV_ITEMS = '.nav-item';
|
4353
4394
|
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
4395
|
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
|
4354
4396
|
const SELECTOR_DROPDOWN$1 = '.dropdown';
|
4355
4397
|
const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
|
4356
4398
|
const METHOD_OFFSET = 'offset';
|
@@ -4366,7 +4408,6 @@
|
|
4366
4408
|
super(element);
|
4367
4409
|
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
|
4368
4410
|
this._config = this._getConfig(config);
|
4369
|
-
this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
|
4370
4411
|
this._offsets = [];
|
4371
4412
|
this._targets = [];
|
4372
4413
|
this._activeTarget = null;
|
@@ -4394,7 +4435,7 @@
|
|
4394
4435
|
this._offsets = [];
|
4395
4436
|
this._targets = [];
|
4396
4437
|
this._scrollHeight = this._getScrollHeight();
|
4397
|
-
const targets = SelectorEngine.find(this.
|
4438
|
+
const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
|
4398
4439
|
targets.map(element => {
|
4399
4440
|
const targetSelector = getSelectorFromElement(element);
|
4400
4441
|
const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
|
@@ -4426,20 +4467,7 @@
|
|
4426
4467
|
...Manipulator.getDataAttributes(this._element),
|
4427
4468
|
...(typeof config === 'object' && config ? config : {})
|
4428
4469
|
};
|
4429
|
-
|
4430
|
-
if (typeof config.target !== 'string' && isElement(config.target)) {
|
4431
|
-
let {
|
4432
|
-
id
|
4433
|
-
} = config.target;
|
4434
|
-
|
4435
|
-
if (!id) {
|
4436
|
-
id = getUID(NAME$2);
|
4437
|
-
config.target.id = id;
|
4438
|
-
}
|
4439
|
-
|
4440
|
-
config.target = `#${id}`;
|
4441
|
-
}
|
4442
|
-
|
4470
|
+
config.target = getElement(config.target) || document.documentElement;
|
4443
4471
|
typeCheckConfig(NAME$2, config, DefaultType$1);
|
4444
4472
|
return config;
|
4445
4473
|
}
|
@@ -4499,16 +4527,13 @@
|
|
4499
4527
|
|
4500
4528
|
this._clear();
|
4501
4529
|
|
4502
|
-
const queries =
|
4503
|
-
|
4504
|
-
|
4530
|
+
const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
|
4531
|
+
const link = SelectorEngine.findOne(queries.join(','), this._config.target);
|
4532
|
+
link.classList.add(CLASS_NAME_ACTIVE$1);
|
4505
4533
|
|
4506
4534
|
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
4507
4535
|
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);
|
4508
|
-
link.classList.add(CLASS_NAME_ACTIVE$1);
|
4509
4536
|
} else {
|
4510
|
-
// Set triggered link as active
|
4511
|
-
link.classList.add(CLASS_NAME_ACTIVE$1);
|
4512
4537
|
SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {
|
4513
4538
|
// Set triggered links parents as active
|
4514
4539
|
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
@@ -4526,7 +4551,7 @@
|
|
4526
4551
|
}
|
4527
4552
|
|
4528
4553
|
_clear() {
|
4529
|
-
SelectorEngine.find(this.
|
4554
|
+
SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));
|
4530
4555
|
} // Static
|
4531
4556
|
|
4532
4557
|
|
@@ -4568,7 +4593,7 @@
|
|
4568
4593
|
|
4569
4594
|
/**
|
4570
4595
|
* --------------------------------------------------------------------------
|
4571
|
-
* Bootstrap (v5.
|
4596
|
+
* Bootstrap (v5.1.3): tab.js
|
4572
4597
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4573
4598
|
* --------------------------------------------------------------------------
|
4574
4599
|
*/
|
@@ -4766,7 +4791,7 @@
|
|
4766
4791
|
|
4767
4792
|
/**
|
4768
4793
|
* --------------------------------------------------------------------------
|
4769
|
-
* Bootstrap (v5.
|
4794
|
+
* Bootstrap (v5.1.3): toast.js
|
4770
4795
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4771
4796
|
* --------------------------------------------------------------------------
|
4772
4797
|
*/
|
@@ -4779,7 +4804,6 @@
|
|
4779
4804
|
const NAME = 'toast';
|
4780
4805
|
const DATA_KEY = 'bs.toast';
|
4781
4806
|
const EVENT_KEY = `.${DATA_KEY}`;
|
4782
|
-
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
4783
4807
|
const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
|
4784
4808
|
const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
|
4785
4809
|
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
|
@@ -4789,7 +4813,8 @@
|
|
4789
4813
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
4790
4814
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
4791
4815
|
const CLASS_NAME_FADE = 'fade';
|
4792
|
-
const CLASS_NAME_HIDE = 'hide';
|
4816
|
+
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
|
4817
|
+
|
4793
4818
|
const CLASS_NAME_SHOW = 'show';
|
4794
4819
|
const CLASS_NAME_SHOWING = 'showing';
|
4795
4820
|
const DefaultType = {
|
@@ -4802,7 +4827,6 @@
|
|
4802
4827
|
autohide: true,
|
4803
4828
|
delay: 5000
|
4804
4829
|
};
|
4805
|
-
const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="toast"]';
|
4806
4830
|
/**
|
4807
4831
|
* ------------------------------------------------------------------------
|
4808
4832
|
* Class Definition
|
@@ -4850,17 +4874,18 @@
|
|
4850
4874
|
const complete = () => {
|
4851
4875
|
this._element.classList.remove(CLASS_NAME_SHOWING);
|
4852
4876
|
|
4853
|
-
this._element.classList.add(CLASS_NAME_SHOW);
|
4854
|
-
|
4855
4877
|
EventHandler.trigger(this._element, EVENT_SHOWN);
|
4856
4878
|
|
4857
4879
|
this._maybeScheduleHide();
|
4858
4880
|
};
|
4859
4881
|
|
4860
|
-
this._element.classList.remove(CLASS_NAME_HIDE);
|
4882
|
+
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
|
4883
|
+
|
4861
4884
|
|
4862
4885
|
reflow(this._element);
|
4863
4886
|
|
4887
|
+
this._element.classList.add(CLASS_NAME_SHOW);
|
4888
|
+
|
4864
4889
|
this._element.classList.add(CLASS_NAME_SHOWING);
|
4865
4890
|
|
4866
4891
|
this._queueCallback(complete, this._element, this._config.animation);
|
@@ -4878,12 +4903,17 @@
|
|
4878
4903
|
}
|
4879
4904
|
|
4880
4905
|
const complete = () => {
|
4881
|
-
this._element.classList.add(CLASS_NAME_HIDE);
|
4906
|
+
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
|
4907
|
+
|
4908
|
+
|
4909
|
+
this._element.classList.remove(CLASS_NAME_SHOWING);
|
4910
|
+
|
4911
|
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
4882
4912
|
|
4883
4913
|
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
4884
4914
|
};
|
4885
4915
|
|
4886
|
-
this._element.classList.
|
4916
|
+
this._element.classList.add(CLASS_NAME_SHOWING);
|
4887
4917
|
|
4888
4918
|
this._queueCallback(complete, this._element, this._config.animation);
|
4889
4919
|
}
|
@@ -4951,7 +4981,6 @@
|
|
4951
4981
|
}
|
4952
4982
|
|
4953
4983
|
_setListeners() {
|
4954
|
-
EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
|
4955
4984
|
EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
|
4956
4985
|
EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
|
4957
4986
|
EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
|
@@ -4979,6 +5008,8 @@
|
|
4979
5008
|
}
|
4980
5009
|
|
4981
5010
|
}
|
5011
|
+
|
5012
|
+
enableDismissTrigger(Toast);
|
4982
5013
|
/**
|
4983
5014
|
* ------------------------------------------------------------------------
|
4984
5015
|
* jQuery
|
@@ -4986,16 +5017,15 @@
|
|
4986
5017
|
* add .Toast to jQuery only if jQuery is present
|
4987
5018
|
*/
|
4988
5019
|
|
4989
|
-
|
4990
5020
|
defineJQueryPlugin(Toast);
|
4991
5021
|
|
4992
5022
|
/**
|
4993
5023
|
* --------------------------------------------------------------------------
|
4994
|
-
* Bootstrap (v5.
|
5024
|
+
* Bootstrap (v5.1.3): index.umd.js
|
4995
5025
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4996
5026
|
* --------------------------------------------------------------------------
|
4997
5027
|
*/
|
4998
|
-
|
5028
|
+
const index_umd = {
|
4999
5029
|
Alert,
|
5000
5030
|
Button,
|
5001
5031
|
Carousel,
|
@@ -5012,4 +5042,4 @@
|
|
5012
5042
|
|
5013
5043
|
return index_umd;
|
5014
5044
|
|
5015
|
-
}))
|
5045
|
+
}));
|