@coreui/coreui 4.1.6 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -2
- package/README.md +62 -10
- package/dist/css/bootstrap-reboot.css +488 -0
- package/dist/css/bootstrap-reboot.css.map +1 -0
- package/dist/css/bootstrap-reboot.min.css +8 -0
- package/dist/css/bootstrap-reboot.min.css.map +1 -0
- package/dist/css/coreui-grid.css +22 -4
- package/dist/css/coreui-grid.css.map +1 -1
- package/dist/css/coreui-grid.min.css +2 -2
- package/dist/css/coreui-grid.min.css.map +1 -1
- package/dist/css/coreui-grid.rtl.css +23 -5
- package/dist/css/coreui-grid.rtl.css.map +1 -1
- package/dist/css/coreui-grid.rtl.min.css +3 -3
- package/dist/css/coreui-grid.rtl.min.css.map +1 -1
- package/dist/css/coreui-reboot.css +34 -41
- package/dist/css/coreui-reboot.css.map +1 -1
- package/dist/css/coreui-reboot.min.css +2 -2
- package/dist/css/coreui-reboot.min.css.map +1 -1
- package/dist/css/coreui-reboot.rtl.css +34 -42
- package/dist/css/coreui-reboot.rtl.css.map +1 -1
- package/dist/css/coreui-reboot.rtl.min.css +3 -3
- package/dist/css/coreui-reboot.rtl.min.css.map +1 -1
- package/dist/css/coreui-utilities.css +278 -163
- package/dist/css/coreui-utilities.css.map +1 -1
- package/dist/css/coreui-utilities.min.css +2 -2
- package/dist/css/coreui-utilities.min.css.map +1 -1
- package/dist/css/coreui-utilities.rtl.css +273 -164
- package/dist/css/coreui-utilities.rtl.css.map +1 -1
- package/dist/css/coreui-utilities.rtl.min.css +3 -3
- package/dist/css/coreui-utilities.rtl.min.css.map +1 -1
- package/dist/css/coreui.css +2168 -1240
- package/dist/css/coreui.css.map +1 -1
- package/dist/css/coreui.min.css +2 -2
- package/dist/css/coreui.min.css.map +1 -1
- package/dist/css/coreui.rtl.css +2150 -1228
- package/dist/css/coreui.rtl.css.map +1 -1
- package/dist/css/coreui.rtl.min.css +3 -3
- package/dist/css/coreui.rtl.min.css.map +1 -1
- package/dist/js/coreui.bundle.js +2095 -1906
- package/dist/js/coreui.bundle.js.map +1 -1
- package/dist/js/coreui.bundle.min.js +2 -2
- package/dist/js/coreui.bundle.min.js.map +1 -1
- package/dist/js/coreui.esm.js +2098 -1909
- package/dist/js/coreui.esm.js.map +1 -1
- package/dist/js/coreui.esm.min.js +2 -2
- package/dist/js/coreui.esm.min.js.map +1 -1
- package/dist/js/coreui.js +2099 -1910
- package/dist/js/coreui.js.map +1 -1
- package/dist/js/coreui.min.js +2 -2
- package/dist/js/coreui.min.js.map +1 -1
- package/js/dist/alert.js +10 -148
- package/js/dist/alert.js.map +1 -1
- package/js/dist/base-component.js +36 -122
- package/js/dist/base-component.js.map +1 -1
- package/js/dist/button.js +9 -76
- package/js/dist/button.js.map +1 -1
- package/js/dist/carousel.js +212 -507
- package/js/dist/carousel.js.map +1 -1
- package/js/dist/collapse.js +64 -251
- package/js/dist/collapse.js.map +1 -1
- package/js/dist/dom/data.js +2 -4
- package/js/dist/dom/data.js.map +1 -1
- package/js/dist/dom/event-handler.js +82 -133
- package/js/dist/dom/event-handler.js.map +1 -1
- package/js/dist/dom/manipulator.js +22 -26
- package/js/dist/dom/manipulator.js.map +1 -1
- package/js/dist/dom/selector-engine.js +16 -81
- package/js/dist/dom/selector-engine.js.map +1 -1
- package/js/dist/dropdown.js +99 -338
- package/js/dist/dropdown.js.map +1 -1
- package/js/dist/modal.js +106 -774
- package/js/dist/modal.js.map +1 -1
- package/js/dist/navigation.js +309 -0
- package/js/dist/navigation.js.map +1 -0
- package/js/dist/offcanvas.js +88 -680
- package/js/dist/offcanvas.js.map +1 -1
- package/js/dist/popover.js +35 -120
- package/js/dist/popover.js.map +1 -1
- package/js/dist/scrollspy.js +178 -264
- package/js/dist/scrollspy.js.map +1 -1
- package/js/dist/sidebar.js +347 -0
- package/js/dist/sidebar.js.map +1 -0
- package/js/dist/tab.js +226 -216
- package/js/dist/tab.js.map +1 -1
- package/js/dist/toast.js +27 -216
- package/js/dist/toast.js.map +1 -1
- package/js/dist/tooltip.js +271 -618
- package/js/dist/tooltip.js.map +1 -1
- package/js/dist/util/backdrop.js +166 -0
- package/js/dist/util/backdrop.js.map +1 -0
- package/js/dist/util/component-functions.js +47 -0
- package/js/dist/util/component-functions.js.map +1 -0
- package/js/dist/util/config.js +80 -0
- package/js/dist/util/config.js.map +1 -0
- package/js/dist/util/focustrap.js +130 -0
- package/js/dist/util/focustrap.js.map +1 -0
- package/js/dist/util/index.js +354 -0
- package/js/dist/util/index.js.map +1 -0
- package/js/dist/util/sanitizer.js +126 -0
- package/js/dist/util/sanitizer.js.map +1 -0
- package/js/dist/util/scrollbar.js +139 -0
- package/js/dist/util/scrollbar.js.map +1 -0
- package/js/dist/util/swipe.js +156 -0
- package/js/dist/util/swipe.js.map +1 -0
- package/js/dist/util/template-factory.js +178 -0
- package/js/dist/util/template-factory.js.map +1 -0
- package/js/src/alert.js +3 -15
- package/js/src/base-component.js +28 -18
- package/js/src/button.js +3 -15
- package/js/src/carousel.js +203 -320
- package/js/src/collapse.js +61 -94
- package/js/src/dom/data.js +1 -3
- package/js/src/dom/event-handler.js +74 -107
- package/js/src/dom/manipulator.js +22 -31
- package/js/src/dom/selector-engine.js +10 -19
- package/js/src/dropdown.js +84 -138
- package/js/src/modal.js +94 -158
- package/js/src/navigation.js +12 -13
- package/js/src/offcanvas.js +71 -60
- package/js/src/popover.js +31 -62
- package/js/src/scrollspy.js +166 -171
- package/js/src/sidebar.js +5 -8
- package/js/src/tab.js +201 -110
- package/js/src/toast.js +19 -41
- package/js/src/tooltip.js +264 -374
- package/js/src/util/backdrop.js +55 -36
- package/js/src/util/component-functions.js +1 -1
- package/js/src/util/config.js +66 -0
- package/js/src/util/focustrap.js +38 -28
- package/js/src/util/index.js +41 -57
- package/js/src/util/sanitizer.js +9 -17
- package/js/src/util/scrollbar.js +47 -30
- package/js/src/util/swipe.js +146 -0
- package/js/src/util/template-factory.js +160 -0
- package/package.json +36 -36
- package/scss/_accordion.scss +53 -25
- package/scss/_alert.scss +29 -9
- package/scss/_badge.scss +15 -6
- package/scss/_breadcrumb.scss +23 -11
- package/scss/_button-group.scss +3 -0
- package/scss/_buttons.scss +71 -50
- package/scss/_callout.scss +18 -6
- package/scss/_card.scss +55 -37
- package/scss/_carousel.scss +6 -6
- package/scss/_close.scss +4 -4
- package/scss/_containers.scss +1 -1
- package/scss/_dropdown.scss +86 -64
- package/scss/_footer.scss +15 -5
- package/scss/_functions.scss +11 -24
- package/scss/_grid.scss +3 -3
- package/scss/_header.scss +59 -34
- package/scss/_helpers.scss +1 -0
- package/scss/_images.scss +3 -3
- package/scss/_list-group.scss +47 -29
- package/scss/_maps.scss +54 -0
- package/scss/_modal.scss +70 -43
- package/scss/_nav.scss +53 -20
- package/scss/_navbar.scss +84 -94
- package/scss/_offcanvas.scss +120 -60
- package/scss/_pagination.scss +66 -21
- package/scss/_popover.scss +90 -52
- package/scss/_progress.scss +20 -9
- package/scss/_reboot.scss +31 -58
- package/scss/_root.scss +41 -19
- package/scss/_spinners.scss +37 -21
- package/scss/_subheader.scss +9 -9
- package/scss/_tables.scss +34 -36
- package/scss/_toasts.scss +35 -19
- package/scss/_tooltip.scss +61 -56
- package/scss/_utilities.scss +42 -25
- package/scss/_variables.scss +169 -148
- package/scss/bootstrap-reboot.scss +14 -0
- package/scss/coreui-grid.rtl.scss +1 -1
- package/scss/coreui-grid.scss +2 -1
- package/scss/coreui-reboot.rtl.scss +1 -1
- package/scss/coreui-reboot.scss +1 -1
- package/scss/coreui-utilities.rtl.scss +1 -1
- package/scss/coreui-utilities.scss +2 -1
- package/scss/coreui.rtl.scss +1 -1
- package/scss/coreui.scss +2 -1
- package/scss/forms/_floating-labels.scss +14 -3
- package/scss/forms/_form-check.scss +41 -18
- package/scss/forms/_form-control.scss +25 -50
- package/scss/forms/_form-range.scss +8 -8
- package/scss/forms/_form-select.scss +8 -8
- package/scss/forms/_form-text.scss +1 -1
- package/scss/forms/_input-group.scss +3 -3
- package/scss/forms/_labels.scss +2 -2
- package/scss/helpers/_color-bg.scss +10 -0
- package/scss/helpers/_colored-links.scss +2 -2
- package/scss/helpers/_position.scss +7 -1
- package/scss/helpers/_ratio.scss +2 -2
- package/scss/helpers/_vr.scss +1 -0
- package/scss/mixins/_alert.scss +10 -10
- package/scss/mixins/_breakpoints.scss +8 -8
- package/scss/mixins/_buttons.scss +45 -47
- package/scss/mixins/_container.scss +4 -2
- package/scss/mixins/_css-vars.scss +47 -47
- package/scss/mixins/_forms.scss +8 -0
- package/scss/mixins/_gradients.scss +1 -1
- package/scss/mixins/_grid.scss +11 -11
- package/scss/mixins/_list-group.scss +7 -9
- package/scss/mixins/_pagination.scss +4 -25
- package/scss/mixins/_table-variants.scss +20 -12
- package/scss/mixins/_utilities.scss +8 -3
- package/scss/sidebar/_sidebar-narrow.scss +10 -10
- package/scss/sidebar/_sidebar-nav.scss +33 -32
- package/scss/sidebar/_sidebar.scss +110 -56
package/js/dist/modal.js
CHANGED
|
@@ -1,638 +1,26 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* CoreUI modal.js v4.
|
|
2
|
+
* CoreUI modal.js v4.2.0 (https://coreui.io)
|
|
3
3
|
* Copyright 2022 The CoreUI Team (https://github.com/orgs/coreui/people)
|
|
4
4
|
* Licensed under MIT (https://coreui.io)
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['./
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.
|
|
10
|
-
})(this, (function (
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./util/scrollbar'), require('./base-component'), require('./util/backdrop'), require('./util/focustrap'), require('./util/component-functions')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './util/scrollbar', './base-component', './util/backdrop', './util/focustrap', './util/component-functions'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Index, global.EventHandler, global.SelectorEngine, global.Scrollbar, global.BaseComponent, global.Backdrop, global.Focustrap, global.ComponentFunctions));
|
|
10
|
+
})(this, (function (index, EventHandler, SelectorEngine, ScrollBarHelper, BaseComponent, Backdrop, FocusTrap, componentFunctions) { 'use strict';
|
|
11
11
|
|
|
12
12
|
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
13
|
|
|
14
14
|
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
-
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
16
15
|
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
16
|
+
const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
|
|
17
17
|
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
18
|
+
const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
|
|
19
|
+
const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
|
|
18
20
|
|
|
19
21
|
/**
|
|
20
22
|
* --------------------------------------------------------------------------
|
|
21
|
-
|
|
22
|
-
* Licensed under MIT (https://coreui.io/license)
|
|
23
|
-
*
|
|
24
|
-
* This component is a modified version of the Bootstrap's util/index.js
|
|
25
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
26
|
-
* --------------------------------------------------------------------------
|
|
27
|
-
*/
|
|
28
|
-
const MILLISECONDS_MULTIPLIER = 1000;
|
|
29
|
-
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
|
30
|
-
|
|
31
|
-
const toType = object => {
|
|
32
|
-
if (object === null || object === undefined) {
|
|
33
|
-
return `${object}`;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const getSelector = element => {
|
|
40
|
-
let selector = element.getAttribute('data-coreui-target');
|
|
41
|
-
|
|
42
|
-
if (!selector || selector === '#') {
|
|
43
|
-
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
44
|
-
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
45
|
-
// `document.querySelector` will rightfully complain it is invalid.
|
|
46
|
-
// See https://github.com/twbs/bootstrap/issues/32273
|
|
47
|
-
|
|
48
|
-
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
49
|
-
return null;
|
|
50
|
-
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
54
|
-
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return selector;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const getElementFromSelector = element => {
|
|
64
|
-
const selector = getSelector(element);
|
|
65
|
-
return selector ? document.querySelector(selector) : null;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const getTransitionDurationFromElement = element => {
|
|
69
|
-
if (!element) {
|
|
70
|
-
return 0;
|
|
71
|
-
} // Get transition-duration of the element
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
let {
|
|
75
|
-
transitionDuration,
|
|
76
|
-
transitionDelay
|
|
77
|
-
} = window.getComputedStyle(element);
|
|
78
|
-
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
79
|
-
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
|
|
80
|
-
|
|
81
|
-
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
82
|
-
return 0;
|
|
83
|
-
} // If multiple durations are defined, take the first
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
transitionDuration = transitionDuration.split(',')[0];
|
|
87
|
-
transitionDelay = transitionDelay.split(',')[0];
|
|
88
|
-
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
const triggerTransitionEnd = element => {
|
|
92
|
-
element.dispatchEvent(new Event(TRANSITION_END));
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
const isElement = obj => {
|
|
96
|
-
if (!obj || typeof obj !== 'object') {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (typeof obj.jquery !== 'undefined') {
|
|
101
|
-
obj = obj[0];
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return typeof obj.nodeType !== 'undefined';
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
const getElement = obj => {
|
|
108
|
-
if (isElement(obj)) {
|
|
109
|
-
// it's a jQuery object or a node element
|
|
110
|
-
return obj.jquery ? obj[0] : obj;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (typeof obj === 'string' && obj.length > 0) {
|
|
114
|
-
return document.querySelector(obj);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return null;
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
const typeCheckConfig = (componentName, config, configTypes) => {
|
|
121
|
-
Object.keys(configTypes).forEach(property => {
|
|
122
|
-
const expectedTypes = configTypes[property];
|
|
123
|
-
const value = config[property];
|
|
124
|
-
const valueType = value && isElement(value) ? 'element' : toType(value);
|
|
125
|
-
|
|
126
|
-
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
127
|
-
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
const isVisible = element => {
|
|
133
|
-
if (!isElement(element) || element.getClientRects().length === 0) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed
|
|
138
|
-
|
|
139
|
-
const closedDetails = element.closest('details:not([open])');
|
|
140
|
-
|
|
141
|
-
if (!closedDetails) {
|
|
142
|
-
return elementIsVisible;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (closedDetails !== element) {
|
|
146
|
-
const summary = element.closest('summary');
|
|
147
|
-
|
|
148
|
-
if (summary && summary.parentNode !== closedDetails) {
|
|
149
|
-
return false;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (summary === null) {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return elementIsVisible;
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
const isDisabled = element => {
|
|
161
|
-
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if (element.classList.contains('disabled')) {
|
|
166
|
-
return true;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (typeof element.disabled !== 'undefined') {
|
|
170
|
-
return element.disabled;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
174
|
-
};
|
|
175
|
-
/**
|
|
176
|
-
* Trick to restart an element's animation
|
|
177
|
-
*
|
|
178
|
-
* @param {HTMLElement} element
|
|
179
|
-
* @return void
|
|
180
|
-
*
|
|
181
|
-
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
182
|
-
*/
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const reflow = element => {
|
|
186
|
-
// eslint-disable-next-line no-unused-expressions
|
|
187
|
-
element.offsetHeight;
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
const getjQuery = () => {
|
|
191
|
-
const {
|
|
192
|
-
jQuery
|
|
193
|
-
} = window;
|
|
194
|
-
|
|
195
|
-
if (jQuery && !document.body.hasAttribute('data-coreui-no-jquery')) {
|
|
196
|
-
return jQuery;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
return null;
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
const DOMContentLoadedCallbacks = [];
|
|
203
|
-
|
|
204
|
-
const onDOMContentLoaded = callback => {
|
|
205
|
-
if (document.readyState === 'loading') {
|
|
206
|
-
// add listener on the first call when the document is in loading state
|
|
207
|
-
if (!DOMContentLoadedCallbacks.length) {
|
|
208
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
209
|
-
DOMContentLoadedCallbacks.forEach(callback => callback());
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
DOMContentLoadedCallbacks.push(callback);
|
|
214
|
-
} else {
|
|
215
|
-
callback();
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
const isRTL = () => document.documentElement.dir === 'rtl';
|
|
220
|
-
|
|
221
|
-
const defineJQueryPlugin = plugin => {
|
|
222
|
-
onDOMContentLoaded(() => {
|
|
223
|
-
const $ = getjQuery();
|
|
224
|
-
/* istanbul ignore if */
|
|
225
|
-
|
|
226
|
-
if ($) {
|
|
227
|
-
const name = plugin.NAME;
|
|
228
|
-
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
229
|
-
$.fn[name] = plugin.jQueryInterface;
|
|
230
|
-
$.fn[name].Constructor = plugin;
|
|
231
|
-
|
|
232
|
-
$.fn[name].noConflict = () => {
|
|
233
|
-
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
234
|
-
return plugin.jQueryInterface;
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
const execute = callback => {
|
|
241
|
-
if (typeof callback === 'function') {
|
|
242
|
-
callback();
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
|
247
|
-
if (!waitForTransition) {
|
|
248
|
-
execute(callback);
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
const durationPadding = 5;
|
|
253
|
-
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
|
254
|
-
let called = false;
|
|
255
|
-
|
|
256
|
-
const handler = ({
|
|
257
|
-
target
|
|
258
|
-
}) => {
|
|
259
|
-
if (target !== transitionElement) {
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
called = true;
|
|
264
|
-
transitionElement.removeEventListener(TRANSITION_END, handler);
|
|
265
|
-
execute(callback);
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
transitionElement.addEventListener(TRANSITION_END, handler);
|
|
269
|
-
setTimeout(() => {
|
|
270
|
-
if (!called) {
|
|
271
|
-
triggerTransitionEnd(transitionElement);
|
|
272
|
-
}
|
|
273
|
-
}, emulatedDuration);
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* --------------------------------------------------------------------------
|
|
278
|
-
* Bootstrap (v5.1.3): util/scrollBar.js
|
|
279
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
280
|
-
* --------------------------------------------------------------------------
|
|
281
|
-
*/
|
|
282
|
-
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
|
283
|
-
const SELECTOR_STICKY_CONTENT = '.sticky-top';
|
|
284
|
-
|
|
285
|
-
class ScrollBarHelper {
|
|
286
|
-
constructor() {
|
|
287
|
-
this._element = document.body;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
getWidth() {
|
|
291
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
|
|
292
|
-
const documentWidth = document.documentElement.clientWidth;
|
|
293
|
-
return Math.abs(window.innerWidth - documentWidth);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
hide() {
|
|
297
|
-
const width = this.getWidth();
|
|
298
|
-
|
|
299
|
-
this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
|
|
306
|
-
|
|
307
|
-
this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
_disableOverFlow() {
|
|
311
|
-
this._saveInitialAttribute(this._element, 'overflow');
|
|
312
|
-
|
|
313
|
-
this._element.style.overflow = 'hidden';
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
_setElementAttributes(selector, styleProp, callback) {
|
|
317
|
-
const scrollbarWidth = this.getWidth();
|
|
318
|
-
|
|
319
|
-
const manipulationCallBack = element => {
|
|
320
|
-
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
this._saveInitialAttribute(element, styleProp);
|
|
325
|
-
|
|
326
|
-
const calculatedValue = window.getComputedStyle(element)[styleProp];
|
|
327
|
-
element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;
|
|
328
|
-
};
|
|
329
|
-
|
|
330
|
-
this._applyManipulationCallback(selector, manipulationCallBack);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
reset() {
|
|
334
|
-
this._resetElementAttributes(this._element, 'overflow');
|
|
335
|
-
|
|
336
|
-
this._resetElementAttributes(this._element, 'paddingRight');
|
|
337
|
-
|
|
338
|
-
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
|
|
339
|
-
|
|
340
|
-
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
_saveInitialAttribute(element, styleProp) {
|
|
344
|
-
const actualValue = element.style[styleProp];
|
|
345
|
-
|
|
346
|
-
if (actualValue) {
|
|
347
|
-
Manipulator__default.default.setDataAttribute(element, styleProp, actualValue);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
_resetElementAttributes(selector, styleProp) {
|
|
352
|
-
const manipulationCallBack = element => {
|
|
353
|
-
const value = Manipulator__default.default.getDataAttribute(element, styleProp);
|
|
354
|
-
|
|
355
|
-
if (typeof value === 'undefined') {
|
|
356
|
-
element.style.removeProperty(styleProp);
|
|
357
|
-
} else {
|
|
358
|
-
Manipulator__default.default.removeDataAttribute(element, styleProp);
|
|
359
|
-
element.style[styleProp] = value;
|
|
360
|
-
}
|
|
361
|
-
};
|
|
362
|
-
|
|
363
|
-
this._applyManipulationCallback(selector, manipulationCallBack);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
_applyManipulationCallback(selector, callBack) {
|
|
367
|
-
if (isElement(selector)) {
|
|
368
|
-
callBack(selector);
|
|
369
|
-
} else {
|
|
370
|
-
SelectorEngine__default.default.find(selector, this._element).forEach(callBack);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
isOverflowing() {
|
|
375
|
-
return this.getWidth() > 0;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* --------------------------------------------------------------------------
|
|
382
|
-
* Bootstrap (v5.1.3): util/backdrop.js
|
|
383
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
384
|
-
* --------------------------------------------------------------------------
|
|
385
|
-
*/
|
|
386
|
-
const Default$2 = {
|
|
387
|
-
className: 'modal-backdrop',
|
|
388
|
-
isVisible: true,
|
|
389
|
-
// if false, we use the backdrop helper without adding any element to the dom
|
|
390
|
-
isAnimated: false,
|
|
391
|
-
rootElement: 'body',
|
|
392
|
-
// give the choice to place backdrop under different elements
|
|
393
|
-
clickCallback: null
|
|
394
|
-
};
|
|
395
|
-
const DefaultType$2 = {
|
|
396
|
-
className: 'string',
|
|
397
|
-
isVisible: 'boolean',
|
|
398
|
-
isAnimated: 'boolean',
|
|
399
|
-
rootElement: '(element|string)',
|
|
400
|
-
clickCallback: '(function|null)'
|
|
401
|
-
};
|
|
402
|
-
const NAME$2 = 'backdrop';
|
|
403
|
-
const CLASS_NAME_FADE$1 = 'fade';
|
|
404
|
-
const CLASS_NAME_SHOW$1 = 'show';
|
|
405
|
-
const EVENT_MOUSEDOWN = `mousedown.coreui.${NAME$2}`;
|
|
406
|
-
|
|
407
|
-
class Backdrop {
|
|
408
|
-
constructor(config) {
|
|
409
|
-
this._config = this._getConfig(config);
|
|
410
|
-
this._isAppended = false;
|
|
411
|
-
this._element = null;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
show(callback) {
|
|
415
|
-
if (!this._config.isVisible) {
|
|
416
|
-
execute(callback);
|
|
417
|
-
return;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
this._append();
|
|
421
|
-
|
|
422
|
-
if (this._config.isAnimated) {
|
|
423
|
-
reflow(this._getElement());
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
this._getElement().classList.add(CLASS_NAME_SHOW$1);
|
|
427
|
-
|
|
428
|
-
this._emulateAnimation(() => {
|
|
429
|
-
execute(callback);
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
hide(callback) {
|
|
434
|
-
if (!this._config.isVisible) {
|
|
435
|
-
execute(callback);
|
|
436
|
-
return;
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
this._getElement().classList.remove(CLASS_NAME_SHOW$1);
|
|
440
|
-
|
|
441
|
-
this._emulateAnimation(() => {
|
|
442
|
-
this.dispose();
|
|
443
|
-
execute(callback);
|
|
444
|
-
});
|
|
445
|
-
} // Private
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
_getElement() {
|
|
449
|
-
if (!this._element) {
|
|
450
|
-
const backdrop = document.createElement('div');
|
|
451
|
-
backdrop.className = this._config.className;
|
|
452
|
-
|
|
453
|
-
if (this._config.isAnimated) {
|
|
454
|
-
backdrop.classList.add(CLASS_NAME_FADE$1);
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
this._element = backdrop;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
return this._element;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
_getConfig(config) {
|
|
464
|
-
config = { ...Default$2,
|
|
465
|
-
...(typeof config === 'object' ? config : {})
|
|
466
|
-
}; // use getElement() with the default "body" to get a fresh Element on each instantiation
|
|
467
|
-
|
|
468
|
-
config.rootElement = getElement(config.rootElement);
|
|
469
|
-
typeCheckConfig(NAME$2, config, DefaultType$2);
|
|
470
|
-
return config;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
_append() {
|
|
474
|
-
if (this._isAppended) {
|
|
475
|
-
return;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
this._config.rootElement.append(this._getElement());
|
|
479
|
-
|
|
480
|
-
EventHandler__default.default.on(this._getElement(), EVENT_MOUSEDOWN, () => {
|
|
481
|
-
execute(this._config.clickCallback);
|
|
482
|
-
});
|
|
483
|
-
this._isAppended = true;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
dispose() {
|
|
487
|
-
if (!this._isAppended) {
|
|
488
|
-
return;
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
EventHandler__default.default.off(this._element, EVENT_MOUSEDOWN);
|
|
492
|
-
|
|
493
|
-
this._element.remove();
|
|
494
|
-
|
|
495
|
-
this._isAppended = false;
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
_emulateAnimation(callback) {
|
|
499
|
-
executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
/**
|
|
505
|
-
* --------------------------------------------------------------------------
|
|
506
|
-
* Bootstrap (v5.1.3): util/focustrap.js
|
|
507
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
508
|
-
* --------------------------------------------------------------------------
|
|
509
|
-
*/
|
|
510
|
-
const Default$1 = {
|
|
511
|
-
trapElement: null,
|
|
512
|
-
// The element to trap focus inside of
|
|
513
|
-
autofocus: true
|
|
514
|
-
};
|
|
515
|
-
const DefaultType$1 = {
|
|
516
|
-
trapElement: 'element',
|
|
517
|
-
autofocus: 'boolean'
|
|
518
|
-
};
|
|
519
|
-
const NAME$1 = 'focustrap';
|
|
520
|
-
const DATA_KEY$1 = 'coreui.focustrap';
|
|
521
|
-
const EVENT_KEY$1 = `.${DATA_KEY$1}`;
|
|
522
|
-
const EVENT_FOCUSIN = `focusin${EVENT_KEY$1}`;
|
|
523
|
-
const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$1}`;
|
|
524
|
-
const TAB_KEY = 'Tab';
|
|
525
|
-
const TAB_NAV_FORWARD = 'forward';
|
|
526
|
-
const TAB_NAV_BACKWARD = 'backward';
|
|
527
|
-
|
|
528
|
-
class FocusTrap {
|
|
529
|
-
constructor(config) {
|
|
530
|
-
this._config = this._getConfig(config);
|
|
531
|
-
this._isActive = false;
|
|
532
|
-
this._lastTabNavDirection = null;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
activate() {
|
|
536
|
-
const {
|
|
537
|
-
trapElement,
|
|
538
|
-
autofocus
|
|
539
|
-
} = this._config;
|
|
540
|
-
|
|
541
|
-
if (this._isActive) {
|
|
542
|
-
return;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
if (autofocus) {
|
|
546
|
-
trapElement.focus();
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
EventHandler__default.default.off(document, EVENT_KEY$1); // guard against infinite focus loop
|
|
550
|
-
|
|
551
|
-
EventHandler__default.default.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event));
|
|
552
|
-
EventHandler__default.default.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
|
|
553
|
-
this._isActive = true;
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
deactivate() {
|
|
557
|
-
if (!this._isActive) {
|
|
558
|
-
return;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
this._isActive = false;
|
|
562
|
-
EventHandler__default.default.off(document, EVENT_KEY$1);
|
|
563
|
-
} // Private
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
_handleFocusin(event) {
|
|
567
|
-
const {
|
|
568
|
-
target
|
|
569
|
-
} = event;
|
|
570
|
-
const {
|
|
571
|
-
trapElement
|
|
572
|
-
} = this._config;
|
|
573
|
-
|
|
574
|
-
if (target === document || target === trapElement || trapElement.contains(target)) {
|
|
575
|
-
return;
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
const elements = SelectorEngine__default.default.focusableChildren(trapElement);
|
|
579
|
-
|
|
580
|
-
if (elements.length === 0) {
|
|
581
|
-
trapElement.focus();
|
|
582
|
-
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
|
|
583
|
-
elements[elements.length - 1].focus();
|
|
584
|
-
} else {
|
|
585
|
-
elements[0].focus();
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
_handleKeydown(event) {
|
|
590
|
-
if (event.key !== TAB_KEY) {
|
|
591
|
-
return;
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
_getConfig(config) {
|
|
598
|
-
config = { ...Default$1,
|
|
599
|
-
...(typeof config === 'object' ? config : {})
|
|
600
|
-
};
|
|
601
|
-
typeCheckConfig(NAME$1, config, DefaultType$1);
|
|
602
|
-
return config;
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
/**
|
|
608
|
-
* --------------------------------------------------------------------------
|
|
609
|
-
* Bootstrap (v5.1.3): util/component-functions.js
|
|
610
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
611
|
-
* --------------------------------------------------------------------------
|
|
612
|
-
*/
|
|
613
|
-
|
|
614
|
-
const enableDismissTrigger = (component, method = 'hide') => {
|
|
615
|
-
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
|
|
616
|
-
const name = component.NAME;
|
|
617
|
-
EventHandler__default.default.on(document, clickEvent, `[data-coreui-dismiss="${name}"]`, function (event) {
|
|
618
|
-
if (['A', 'AREA'].includes(this.tagName)) {
|
|
619
|
-
event.preventDefault();
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
if (isDisabled(this)) {
|
|
623
|
-
return;
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
|
627
|
-
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
|
628
|
-
|
|
629
|
-
instance[method]();
|
|
630
|
-
});
|
|
631
|
-
};
|
|
632
|
-
|
|
633
|
-
/**
|
|
634
|
-
* --------------------------------------------------------------------------
|
|
635
|
-
* CoreUI (v4.1.6): modal.js
|
|
23
|
+
* CoreUI (v4.2.0): modal.js
|
|
636
24
|
* Licensed under MIT (https://coreui.io/license)
|
|
637
25
|
*
|
|
638
26
|
* This component is a modified version of the Bootstrap's modal.js
|
|
@@ -640,9 +28,7 @@
|
|
|
640
28
|
* --------------------------------------------------------------------------
|
|
641
29
|
*/
|
|
642
30
|
/**
|
|
643
|
-
* ------------------------------------------------------------------------
|
|
644
31
|
* Constants
|
|
645
|
-
* ------------------------------------------------------------------------
|
|
646
32
|
*/
|
|
647
33
|
|
|
648
34
|
const NAME = 'modal';
|
|
@@ -650,26 +36,14 @@
|
|
|
650
36
|
const EVENT_KEY = `.${DATA_KEY}`;
|
|
651
37
|
const DATA_API_KEY = '.data-api';
|
|
652
38
|
const ESCAPE_KEY = 'Escape';
|
|
653
|
-
const Default = {
|
|
654
|
-
backdrop: true,
|
|
655
|
-
keyboard: true,
|
|
656
|
-
focus: true
|
|
657
|
-
};
|
|
658
|
-
const DefaultType = {
|
|
659
|
-
backdrop: '(boolean|string)',
|
|
660
|
-
keyboard: 'boolean',
|
|
661
|
-
focus: 'boolean'
|
|
662
|
-
};
|
|
663
39
|
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
664
40
|
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;
|
|
665
41
|
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
666
42
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
667
43
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
668
44
|
const EVENT_RESIZE = `resize${EVENT_KEY}`;
|
|
669
|
-
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
|
670
|
-
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
|
|
671
|
-
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`;
|
|
672
45
|
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;
|
|
46
|
+
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
|
|
673
47
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
674
48
|
const CLASS_NAME_OPEN = 'modal-open';
|
|
675
49
|
const CLASS_NAME_FADE = 'fade';
|
|
@@ -679,23 +53,31 @@
|
|
|
679
53
|
const SELECTOR_DIALOG = '.modal-dialog';
|
|
680
54
|
const SELECTOR_MODAL_BODY = '.modal-body';
|
|
681
55
|
const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="modal"]';
|
|
56
|
+
const Default = {
|
|
57
|
+
backdrop: true,
|
|
58
|
+
focus: true,
|
|
59
|
+
keyboard: true
|
|
60
|
+
};
|
|
61
|
+
const DefaultType = {
|
|
62
|
+
backdrop: '(boolean|string)',
|
|
63
|
+
focus: 'boolean',
|
|
64
|
+
keyboard: 'boolean'
|
|
65
|
+
};
|
|
682
66
|
/**
|
|
683
|
-
*
|
|
684
|
-
* Class Definition
|
|
685
|
-
* ------------------------------------------------------------------------
|
|
67
|
+
* Class definition
|
|
686
68
|
*/
|
|
687
69
|
|
|
688
70
|
class Modal extends BaseComponent__default.default {
|
|
689
71
|
constructor(element, config) {
|
|
690
|
-
super(element);
|
|
691
|
-
this._config = this._getConfig(config);
|
|
72
|
+
super(element, config);
|
|
692
73
|
this._dialog = SelectorEngine__default.default.findOne(SELECTOR_DIALOG, this._element);
|
|
693
74
|
this._backdrop = this._initializeBackDrop();
|
|
694
75
|
this._focustrap = this._initializeFocusTrap();
|
|
695
76
|
this._isShown = false;
|
|
696
|
-
this._ignoreBackdropClick = false;
|
|
697
77
|
this._isTransitioning = false;
|
|
698
|
-
this._scrollBar = new
|
|
78
|
+
this._scrollBar = new ScrollBarHelper__default.default();
|
|
79
|
+
|
|
80
|
+
this._addEventListeners();
|
|
699
81
|
} // Getters
|
|
700
82
|
|
|
701
83
|
|
|
@@ -703,6 +85,10 @@
|
|
|
703
85
|
return Default;
|
|
704
86
|
}
|
|
705
87
|
|
|
88
|
+
static get DefaultType() {
|
|
89
|
+
return DefaultType;
|
|
90
|
+
}
|
|
91
|
+
|
|
706
92
|
static get NAME() {
|
|
707
93
|
return NAME;
|
|
708
94
|
} // Public
|
|
@@ -726,10 +112,7 @@
|
|
|
726
112
|
}
|
|
727
113
|
|
|
728
114
|
this._isShown = true;
|
|
729
|
-
|
|
730
|
-
if (this._isAnimated()) {
|
|
731
|
-
this._isTransitioning = true;
|
|
732
|
-
}
|
|
115
|
+
this._isTransitioning = true;
|
|
733
116
|
|
|
734
117
|
this._scrollBar.hide();
|
|
735
118
|
|
|
@@ -737,19 +120,7 @@
|
|
|
737
120
|
|
|
738
121
|
this._adjustDialog();
|
|
739
122
|
|
|
740
|
-
this.
|
|
741
|
-
|
|
742
|
-
this._setResizeEvent();
|
|
743
|
-
|
|
744
|
-
EventHandler__default.default.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
|
|
745
|
-
EventHandler__default.default.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
|
|
746
|
-
if (event.target === this._element) {
|
|
747
|
-
this._ignoreBackdropClick = true;
|
|
748
|
-
}
|
|
749
|
-
});
|
|
750
|
-
});
|
|
751
|
-
|
|
752
|
-
this._showBackdrop(() => this._showElement(relatedTarget));
|
|
123
|
+
this._backdrop.show(() => this._showElement(relatedTarget));
|
|
753
124
|
}
|
|
754
125
|
|
|
755
126
|
hide() {
|
|
@@ -764,29 +135,19 @@
|
|
|
764
135
|
}
|
|
765
136
|
|
|
766
137
|
this._isShown = false;
|
|
767
|
-
|
|
768
|
-
const isAnimated = this._isAnimated();
|
|
769
|
-
|
|
770
|
-
if (isAnimated) {
|
|
771
|
-
this._isTransitioning = true;
|
|
772
|
-
}
|
|
773
|
-
|
|
774
|
-
this._setEscapeEvent();
|
|
775
|
-
|
|
776
|
-
this._setResizeEvent();
|
|
138
|
+
this._isTransitioning = true;
|
|
777
139
|
|
|
778
140
|
this._focustrap.deactivate();
|
|
779
141
|
|
|
780
142
|
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
781
143
|
|
|
782
|
-
|
|
783
|
-
EventHandler__default.default.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
|
|
784
|
-
|
|
785
|
-
this._queueCallback(() => this._hideModal(), this._element, isAnimated);
|
|
144
|
+
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
|
|
786
145
|
}
|
|
787
146
|
|
|
788
147
|
dispose() {
|
|
789
|
-
[window, this._dialog]
|
|
148
|
+
for (const htmlElement of [window, this._dialog]) {
|
|
149
|
+
EventHandler__default.default.off(htmlElement, EVENT_KEY);
|
|
150
|
+
}
|
|
790
151
|
|
|
791
152
|
this._backdrop.dispose();
|
|
792
153
|
|
|
@@ -801,35 +162,22 @@
|
|
|
801
162
|
|
|
802
163
|
|
|
803
164
|
_initializeBackDrop() {
|
|
804
|
-
return new
|
|
165
|
+
return new Backdrop__default.default({
|
|
805
166
|
isVisible: Boolean(this._config.backdrop),
|
|
806
|
-
// 'static' option will be translated to true, and booleans will keep their value
|
|
167
|
+
// 'static' option will be translated to true, and booleans will keep their value,
|
|
807
168
|
isAnimated: this._isAnimated()
|
|
808
169
|
});
|
|
809
170
|
}
|
|
810
171
|
|
|
811
172
|
_initializeFocusTrap() {
|
|
812
|
-
return new
|
|
173
|
+
return new FocusTrap__default.default({
|
|
813
174
|
trapElement: this._element
|
|
814
175
|
});
|
|
815
176
|
}
|
|
816
177
|
|
|
817
|
-
_getConfig(config) {
|
|
818
|
-
config = { ...Default,
|
|
819
|
-
...Manipulator__default.default.getDataAttributes(this._element),
|
|
820
|
-
...(typeof config === 'object' ? config : {})
|
|
821
|
-
};
|
|
822
|
-
typeCheckConfig(NAME, config, DefaultType);
|
|
823
|
-
return config;
|
|
824
|
-
}
|
|
825
|
-
|
|
826
178
|
_showElement(relatedTarget) {
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
const modalBody = SelectorEngine__default.default.findOne(SELECTOR_MODAL_BODY, this._dialog);
|
|
830
|
-
|
|
831
|
-
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
|
832
|
-
// Don't move modal's DOM position
|
|
179
|
+
// try to append dynamic modal
|
|
180
|
+
if (!document.body.contains(this._element)) {
|
|
833
181
|
document.body.append(this._element);
|
|
834
182
|
}
|
|
835
183
|
|
|
@@ -842,14 +190,13 @@
|
|
|
842
190
|
this._element.setAttribute('role', 'dialog');
|
|
843
191
|
|
|
844
192
|
this._element.scrollTop = 0;
|
|
193
|
+
const modalBody = SelectorEngine__default.default.findOne(SELECTOR_MODAL_BODY, this._dialog);
|
|
845
194
|
|
|
846
195
|
if (modalBody) {
|
|
847
196
|
modalBody.scrollTop = 0;
|
|
848
197
|
}
|
|
849
198
|
|
|
850
|
-
|
|
851
|
-
reflow(this._element);
|
|
852
|
-
}
|
|
199
|
+
index.reflow(this._element);
|
|
853
200
|
|
|
854
201
|
this._element.classList.add(CLASS_NAME_SHOW);
|
|
855
202
|
|
|
@@ -864,30 +211,44 @@
|
|
|
864
211
|
});
|
|
865
212
|
};
|
|
866
213
|
|
|
867
|
-
this._queueCallback(transitionComplete, this._dialog,
|
|
214
|
+
this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
|
|
868
215
|
}
|
|
869
216
|
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
this.hide();
|
|
876
|
-
} else if (!this._config.keyboard && event.key === ESCAPE_KEY) {
|
|
877
|
-
this._triggerBackdropTransition();
|
|
878
|
-
}
|
|
879
|
-
});
|
|
880
|
-
} else {
|
|
881
|
-
EventHandler__default.default.off(this._element, EVENT_KEYDOWN_DISMISS);
|
|
882
|
-
}
|
|
883
|
-
}
|
|
217
|
+
_addEventListeners() {
|
|
218
|
+
EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
|
219
|
+
if (event.key !== ESCAPE_KEY) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
884
222
|
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
223
|
+
if (this._config.keyboard) {
|
|
224
|
+
event.preventDefault();
|
|
225
|
+
this.hide();
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
this._triggerBackdropTransition();
|
|
230
|
+
});
|
|
231
|
+
EventHandler__default.default.on(window, EVENT_RESIZE, () => {
|
|
232
|
+
if (this._isShown && !this._isTransitioning) {
|
|
233
|
+
this._adjustDialog();
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
EventHandler__default.default.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
|
|
237
|
+
if (event.target !== event.currentTarget) {
|
|
238
|
+
// click is inside modal-dialog
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (this._config.backdrop === 'static') {
|
|
243
|
+
this._triggerBackdropTransition();
|
|
244
|
+
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (this._config.backdrop) {
|
|
249
|
+
this.hide();
|
|
250
|
+
}
|
|
251
|
+
});
|
|
891
252
|
}
|
|
892
253
|
|
|
893
254
|
_hideModal() {
|
|
@@ -912,27 +273,6 @@
|
|
|
912
273
|
});
|
|
913
274
|
}
|
|
914
275
|
|
|
915
|
-
_showBackdrop(callback) {
|
|
916
|
-
EventHandler__default.default.on(this._element, EVENT_CLICK_DISMISS, event => {
|
|
917
|
-
if (this._ignoreBackdropClick) {
|
|
918
|
-
this._ignoreBackdropClick = false;
|
|
919
|
-
return;
|
|
920
|
-
}
|
|
921
|
-
|
|
922
|
-
if (event.target !== event.currentTarget) {
|
|
923
|
-
return;
|
|
924
|
-
}
|
|
925
|
-
|
|
926
|
-
if (this._config.backdrop === true) {
|
|
927
|
-
this.hide();
|
|
928
|
-
} else if (this._config.backdrop === 'static') {
|
|
929
|
-
this._triggerBackdropTransition();
|
|
930
|
-
}
|
|
931
|
-
});
|
|
932
|
-
|
|
933
|
-
this._backdrop.show(callback);
|
|
934
|
-
}
|
|
935
|
-
|
|
936
276
|
_isAnimated() {
|
|
937
277
|
return this._element.classList.contains(CLASS_NAME_FADE);
|
|
938
278
|
}
|
|
@@ -944,37 +284,32 @@
|
|
|
944
284
|
return;
|
|
945
285
|
}
|
|
946
286
|
|
|
947
|
-
const
|
|
948
|
-
|
|
949
|
-
scrollHeight,
|
|
950
|
-
style
|
|
951
|
-
} = this._element;
|
|
952
|
-
const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed
|
|
287
|
+
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
|
288
|
+
const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed
|
|
953
289
|
|
|
954
|
-
if (
|
|
290
|
+
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
|
|
955
291
|
return;
|
|
956
292
|
}
|
|
957
293
|
|
|
958
294
|
if (!isModalOverflowing) {
|
|
959
|
-
style.overflowY = 'hidden';
|
|
295
|
+
this._element.style.overflowY = 'hidden';
|
|
960
296
|
}
|
|
961
297
|
|
|
962
|
-
classList.add(CLASS_NAME_STATIC);
|
|
298
|
+
this._element.classList.add(CLASS_NAME_STATIC);
|
|
963
299
|
|
|
964
300
|
this._queueCallback(() => {
|
|
965
|
-
classList.remove(CLASS_NAME_STATIC);
|
|
301
|
+
this._element.classList.remove(CLASS_NAME_STATIC);
|
|
966
302
|
|
|
967
|
-
|
|
968
|
-
this.
|
|
969
|
-
|
|
970
|
-
}, this._dialog);
|
|
971
|
-
}
|
|
303
|
+
this._queueCallback(() => {
|
|
304
|
+
this._element.style.overflowY = initialOverflowY;
|
|
305
|
+
}, this._dialog);
|
|
972
306
|
}, this._dialog);
|
|
973
307
|
|
|
974
308
|
this._element.focus();
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* The following methods are used to handle overflowing modals
|
|
312
|
+
*/
|
|
978
313
|
|
|
979
314
|
|
|
980
315
|
_adjustDialog() {
|
|
@@ -984,12 +319,14 @@
|
|
|
984
319
|
|
|
985
320
|
const isBodyOverflowing = scrollbarWidth > 0;
|
|
986
321
|
|
|
987
|
-
if (
|
|
988
|
-
|
|
322
|
+
if (isBodyOverflowing && !isModalOverflowing) {
|
|
323
|
+
const property = index.isRTL() ? 'paddingLeft' : 'paddingRight';
|
|
324
|
+
this._element.style[property] = `${scrollbarWidth}px`;
|
|
989
325
|
}
|
|
990
326
|
|
|
991
|
-
if (
|
|
992
|
-
|
|
327
|
+
if (!isBodyOverflowing && isModalOverflowing) {
|
|
328
|
+
const property = index.isRTL() ? 'paddingRight' : 'paddingLeft';
|
|
329
|
+
this._element.style[property] = `${scrollbarWidth}px`;
|
|
993
330
|
}
|
|
994
331
|
}
|
|
995
332
|
|
|
@@ -1017,14 +354,12 @@
|
|
|
1017
354
|
|
|
1018
355
|
}
|
|
1019
356
|
/**
|
|
1020
|
-
*
|
|
1021
|
-
* Data Api implementation
|
|
1022
|
-
* ------------------------------------------------------------------------
|
|
357
|
+
* Data API implementation
|
|
1023
358
|
*/
|
|
1024
359
|
|
|
1025
360
|
|
|
1026
361
|
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
1027
|
-
const target = getElementFromSelector(this);
|
|
362
|
+
const target = index.getElementFromSelector(this);
|
|
1028
363
|
|
|
1029
364
|
if (['A', 'AREA'].includes(this.tagName)) {
|
|
1030
365
|
event.preventDefault();
|
|
@@ -1037,30 +372,27 @@
|
|
|
1037
372
|
}
|
|
1038
373
|
|
|
1039
374
|
EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
|
|
1040
|
-
if (isVisible(this)) {
|
|
375
|
+
if (index.isVisible(this)) {
|
|
1041
376
|
this.focus();
|
|
1042
377
|
}
|
|
1043
378
|
});
|
|
1044
|
-
}); // avoid conflict when clicking
|
|
379
|
+
}); // avoid conflict when clicking modal toggler while another one is open
|
|
1045
380
|
|
|
1046
|
-
const
|
|
381
|
+
const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
|
|
1047
382
|
|
|
1048
|
-
if (
|
|
1049
|
-
Modal.getInstance(
|
|
383
|
+
if (alreadyOpen) {
|
|
384
|
+
Modal.getInstance(alreadyOpen).hide();
|
|
1050
385
|
}
|
|
1051
386
|
|
|
1052
387
|
const data = Modal.getOrCreateInstance(target);
|
|
1053
388
|
data.toggle(this);
|
|
1054
389
|
});
|
|
1055
|
-
enableDismissTrigger(Modal);
|
|
390
|
+
componentFunctions.enableDismissTrigger(Modal);
|
|
1056
391
|
/**
|
|
1057
|
-
* ------------------------------------------------------------------------
|
|
1058
392
|
* jQuery
|
|
1059
|
-
* ------------------------------------------------------------------------
|
|
1060
|
-
* add .Modal to jQuery only if jQuery is present
|
|
1061
393
|
*/
|
|
1062
394
|
|
|
1063
|
-
defineJQueryPlugin(Modal);
|
|
395
|
+
index.defineJQueryPlugin(Modal);
|
|
1064
396
|
|
|
1065
397
|
return Modal;
|
|
1066
398
|
|