bootstrap 5.0.0.beta2 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/assets/javascripts/bootstrap-sprockets.js +8 -7
- data/assets/javascripts/bootstrap.js +2525 -2460
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/javascripts/bootstrap/alert.js +77 -179
- data/assets/javascripts/bootstrap/base-component.js +140 -38
- data/assets/javascripts/bootstrap/button.js +54 -100
- data/assets/javascripts/bootstrap/carousel.js +335 -451
- data/assets/javascripts/bootstrap/collapse.js +195 -303
- data/assets/javascripts/bootstrap/dom/data.js +34 -47
- data/assets/javascripts/bootstrap/dom/event-handler.js +95 -90
- data/assets/javascripts/bootstrap/dom/manipulator.js +23 -21
- data/assets/javascripts/bootstrap/dom/selector-engine.js +20 -28
- data/assets/javascripts/bootstrap/dropdown.js +323 -358
- data/assets/javascripts/bootstrap/modal.js +537 -489
- data/assets/javascripts/bootstrap/offcanvas.js +720 -0
- data/assets/javascripts/bootstrap/popover.js +112 -180
- data/assets/javascripts/bootstrap/scrollspy.js +167 -235
- data/assets/javascripts/bootstrap/tab.js +121 -188
- data/assets/javascripts/bootstrap/toast.js +166 -243
- data/assets/javascripts/bootstrap/tooltip.js +333 -495
- data/assets/stylesheets/_bootstrap-grid.scss +1 -1
- data/assets/stylesheets/_bootstrap-reboot.scss +1 -1
- data/assets/stylesheets/_bootstrap.scss +2 -1
- data/assets/stylesheets/bootstrap/_accordion.scss +24 -32
- data/assets/stylesheets/bootstrap/_buttons.scss +2 -0
- data/assets/stylesheets/bootstrap/_card.scss +6 -6
- data/assets/stylesheets/bootstrap/_carousel.scss +2 -2
- data/assets/stylesheets/bootstrap/_dropdown.scss +14 -23
- data/assets/stylesheets/bootstrap/_functions.scss +61 -3
- data/assets/stylesheets/bootstrap/_images.scss +1 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +16 -5
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +8 -24
- data/assets/stylesheets/bootstrap/_nav.scss +7 -0
- data/assets/stylesheets/bootstrap/_navbar.scss +2 -0
- data/assets/stylesheets/bootstrap/_offcanvas.scss +79 -0
- data/assets/stylesheets/bootstrap/_popover.scss +10 -10
- data/assets/stylesheets/bootstrap/_progress.scss +3 -0
- data/assets/stylesheets/bootstrap/_reboot.scss +7 -21
- data/assets/stylesheets/bootstrap/_spinners.scss +6 -2
- data/assets/stylesheets/bootstrap/_tables.scss +1 -0
- data/assets/stylesheets/bootstrap/_toasts.scss +1 -1
- data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +65 -37
- data/assets/stylesheets/bootstrap/_variables.scss +162 -50
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +3 -1
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +0 -4
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +3 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +7 -2
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +25 -5
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +23 -11
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +2 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +55 -13
- data/bootstrap.gemspec +1 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +1 -1
- data/tasks/updater/network.rb +7 -1
- metadata +9 -6
@@ -1,94 +1,37 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap modal.js v5.0.
|
2
|
+
* Bootstrap modal.js v5.0.2 (https://getbootstrap.com/)
|
3
3
|
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4
4
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5
5
|
*/
|
6
6
|
(function (global, factory) {
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/
|
8
|
-
typeof define === 'function' && define.amd ? define(['./dom/
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.
|
10
|
-
}(this, (function (
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.SelectorEngine, global.EventHandler, global.Manipulator, global.Base));
|
10
|
+
}(this, (function (SelectorEngine, EventHandler, Manipulator, BaseComponent) { 'use strict';
|
11
11
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
13
13
|
|
14
|
-
var
|
14
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
15
15
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
16
16
|
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
17
|
-
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
18
17
|
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
var descriptor = props[i];
|
23
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
24
|
-
descriptor.configurable = true;
|
25
|
-
if ("value" in descriptor) descriptor.writable = true;
|
26
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
31
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
32
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
33
|
-
return Constructor;
|
34
|
-
}
|
35
|
-
|
36
|
-
function _extends() {
|
37
|
-
_extends = Object.assign || function (target) {
|
38
|
-
for (var i = 1; i < arguments.length; i++) {
|
39
|
-
var source = arguments[i];
|
40
|
-
|
41
|
-
for (var key in source) {
|
42
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
43
|
-
target[key] = source[key];
|
44
|
-
}
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
return target;
|
49
|
-
};
|
50
|
-
|
51
|
-
return _extends.apply(this, arguments);
|
52
|
-
}
|
53
|
-
|
54
|
-
function _inheritsLoose(subClass, superClass) {
|
55
|
-
subClass.prototype = Object.create(superClass.prototype);
|
56
|
-
subClass.prototype.constructor = subClass;
|
57
|
-
|
58
|
-
_setPrototypeOf(subClass, superClass);
|
59
|
-
}
|
60
|
-
|
61
|
-
function _setPrototypeOf(o, p) {
|
62
|
-
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
63
|
-
o.__proto__ = p;
|
64
|
-
return o;
|
65
|
-
};
|
66
|
-
|
67
|
-
return _setPrototypeOf(o, p);
|
68
|
-
}
|
19
|
+
const MILLISECONDS_MULTIPLIER = 1000;
|
20
|
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
69
21
|
|
70
|
-
|
71
|
-
* --------------------------------------------------------------------------
|
72
|
-
* Bootstrap (v5.0.0-beta2): util/index.js
|
73
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
74
|
-
* --------------------------------------------------------------------------
|
75
|
-
*/
|
76
|
-
var MILLISECONDS_MULTIPLIER = 1000;
|
77
|
-
var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
78
|
-
|
79
|
-
var toType = function toType(obj) {
|
22
|
+
const toType = obj => {
|
80
23
|
if (obj === null || obj === undefined) {
|
81
|
-
return
|
24
|
+
return `${obj}`;
|
82
25
|
}
|
83
26
|
|
84
27
|
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
85
28
|
};
|
86
29
|
|
87
|
-
|
88
|
-
|
30
|
+
const getSelector = element => {
|
31
|
+
let selector = element.getAttribute('data-bs-target');
|
89
32
|
|
90
33
|
if (!selector || selector === '#') {
|
91
|
-
|
34
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
92
35
|
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
93
36
|
// `document.querySelector` will rightfully complain it is invalid.
|
94
37
|
// See https://github.com/twbs/bootstrap/issues/32273
|
@@ -99,7 +42,7 @@
|
|
99
42
|
|
100
43
|
|
101
44
|
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
102
|
-
hrefAttr =
|
45
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
103
46
|
}
|
104
47
|
|
105
48
|
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
@@ -108,23 +51,23 @@
|
|
108
51
|
return selector;
|
109
52
|
};
|
110
53
|
|
111
|
-
|
112
|
-
|
54
|
+
const getElementFromSelector = element => {
|
55
|
+
const selector = getSelector(element);
|
113
56
|
return selector ? document.querySelector(selector) : null;
|
114
57
|
};
|
115
58
|
|
116
|
-
|
59
|
+
const getTransitionDurationFromElement = element => {
|
117
60
|
if (!element) {
|
118
61
|
return 0;
|
119
62
|
} // Get transition-duration of the element
|
120
63
|
|
121
64
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
65
|
+
let {
|
66
|
+
transitionDuration,
|
67
|
+
transitionDelay
|
68
|
+
} = window.getComputedStyle(element);
|
69
|
+
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
70
|
+
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
|
128
71
|
|
129
72
|
if (!floatTransitionDuration && !floatTransitionDelay) {
|
130
73
|
return 0;
|
@@ -136,65 +79,61 @@
|
|
136
79
|
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
137
80
|
};
|
138
81
|
|
139
|
-
|
82
|
+
const triggerTransitionEnd = element => {
|
140
83
|
element.dispatchEvent(new Event(TRANSITION_END));
|
141
84
|
};
|
142
85
|
|
143
|
-
|
144
|
-
|
86
|
+
const isElement = obj => {
|
87
|
+
if (!obj || typeof obj !== 'object') {
|
88
|
+
return false;
|
89
|
+
}
|
90
|
+
|
91
|
+
if (typeof obj.jquery !== 'undefined') {
|
92
|
+
obj = obj[0];
|
93
|
+
}
|
94
|
+
|
95
|
+
return typeof obj.nodeType !== 'undefined';
|
145
96
|
};
|
146
97
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
98
|
+
const getElement = obj => {
|
99
|
+
if (isElement(obj)) {
|
100
|
+
// it's a jQuery object or a node element
|
101
|
+
return obj.jquery ? obj[0] : obj;
|
102
|
+
}
|
151
103
|
|
152
|
-
|
153
|
-
|
154
|
-
element.removeEventListener(TRANSITION_END, listener);
|
104
|
+
if (typeof obj === 'string' && obj.length > 0) {
|
105
|
+
return SelectorEngine__default['default'].findOne(obj);
|
155
106
|
}
|
156
107
|
|
157
|
-
|
158
|
-
setTimeout(function () {
|
159
|
-
if (!called) {
|
160
|
-
triggerTransitionEnd(element);
|
161
|
-
}
|
162
|
-
}, emulatedDuration);
|
108
|
+
return null;
|
163
109
|
};
|
164
110
|
|
165
|
-
|
166
|
-
Object.keys(configTypes).forEach(
|
167
|
-
|
168
|
-
|
169
|
-
|
111
|
+
const typeCheckConfig = (componentName, config, configTypes) => {
|
112
|
+
Object.keys(configTypes).forEach(property => {
|
113
|
+
const expectedTypes = configTypes[property];
|
114
|
+
const value = config[property];
|
115
|
+
const valueType = value && isElement(value) ? 'element' : toType(value);
|
170
116
|
|
171
117
|
if (!new RegExp(expectedTypes).test(valueType)) {
|
172
|
-
throw new TypeError(componentName.toUpperCase()
|
118
|
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
173
119
|
}
|
174
120
|
});
|
175
121
|
};
|
176
122
|
|
177
|
-
|
178
|
-
if (!element) {
|
123
|
+
const isVisible = element => {
|
124
|
+
if (!isElement(element) || element.getClientRects().length === 0) {
|
179
125
|
return false;
|
180
126
|
}
|
181
127
|
|
182
|
-
|
183
|
-
var elementStyle = getComputedStyle(element);
|
184
|
-
var parentNodeStyle = getComputedStyle(element.parentNode);
|
185
|
-
return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
|
186
|
-
}
|
187
|
-
|
188
|
-
return false;
|
128
|
+
return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
189
129
|
};
|
190
130
|
|
191
|
-
|
192
|
-
return element.offsetHeight;
|
193
|
-
};
|
131
|
+
const reflow = element => element.offsetHeight;
|
194
132
|
|
195
|
-
|
196
|
-
|
197
|
-
|
133
|
+
const getjQuery = () => {
|
134
|
+
const {
|
135
|
+
jQuery
|
136
|
+
} = window;
|
198
137
|
|
199
138
|
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
200
139
|
return jQuery;
|
@@ -203,27 +142,37 @@
|
|
203
142
|
return null;
|
204
143
|
};
|
205
144
|
|
206
|
-
|
145
|
+
const DOMContentLoadedCallbacks = [];
|
146
|
+
|
147
|
+
const onDOMContentLoaded = callback => {
|
207
148
|
if (document.readyState === 'loading') {
|
208
|
-
document
|
149
|
+
// add listener on the first call when the document is in loading state
|
150
|
+
if (!DOMContentLoadedCallbacks.length) {
|
151
|
+
document.addEventListener('DOMContentLoaded', () => {
|
152
|
+
DOMContentLoadedCallbacks.forEach(callback => callback());
|
153
|
+
});
|
154
|
+
}
|
155
|
+
|
156
|
+
DOMContentLoadedCallbacks.push(callback);
|
209
157
|
} else {
|
210
158
|
callback();
|
211
159
|
}
|
212
160
|
};
|
213
161
|
|
214
|
-
|
162
|
+
const isRTL = () => document.documentElement.dir === 'rtl';
|
215
163
|
|
216
|
-
|
217
|
-
onDOMContentLoaded(
|
218
|
-
|
164
|
+
const defineJQueryPlugin = plugin => {
|
165
|
+
onDOMContentLoaded(() => {
|
166
|
+
const $ = getjQuery();
|
219
167
|
/* istanbul ignore if */
|
220
168
|
|
221
169
|
if ($) {
|
222
|
-
|
170
|
+
const name = plugin.NAME;
|
171
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
223
172
|
$.fn[name] = plugin.jQueryInterface;
|
224
173
|
$.fn[name].Constructor = plugin;
|
225
174
|
|
226
|
-
$.fn[name].noConflict =
|
175
|
+
$.fn[name].noConflict = () => {
|
227
176
|
$.fn[name] = JQUERY_NO_CONFLICT;
|
228
177
|
return plugin.jQueryInterface;
|
229
178
|
};
|
@@ -231,107 +180,370 @@
|
|
231
180
|
});
|
232
181
|
};
|
233
182
|
|
183
|
+
const execute = callback => {
|
184
|
+
if (typeof callback === 'function') {
|
185
|
+
callback();
|
186
|
+
}
|
187
|
+
};
|
188
|
+
|
189
|
+
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
190
|
+
if (!waitForTransition) {
|
191
|
+
execute(callback);
|
192
|
+
return;
|
193
|
+
}
|
194
|
+
|
195
|
+
const durationPadding = 5;
|
196
|
+
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
197
|
+
let called = false;
|
198
|
+
|
199
|
+
const handler = ({
|
200
|
+
target
|
201
|
+
}) => {
|
202
|
+
if (target !== transitionElement) {
|
203
|
+
return;
|
204
|
+
}
|
205
|
+
|
206
|
+
called = true;
|
207
|
+
transitionElement.removeEventListener(TRANSITION_END, handler);
|
208
|
+
execute(callback);
|
209
|
+
};
|
210
|
+
|
211
|
+
transitionElement.addEventListener(TRANSITION_END, handler);
|
212
|
+
setTimeout(() => {
|
213
|
+
if (!called) {
|
214
|
+
triggerTransitionEnd(transitionElement);
|
215
|
+
}
|
216
|
+
}, emulatedDuration);
|
217
|
+
};
|
218
|
+
|
219
|
+
/**
|
220
|
+
* --------------------------------------------------------------------------
|
221
|
+
* Bootstrap (v5.0.2): util/scrollBar.js
|
222
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
223
|
+
* --------------------------------------------------------------------------
|
224
|
+
*/
|
225
|
+
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
226
|
+
const SELECTOR_STICKY_CONTENT = '.sticky-top';
|
227
|
+
|
228
|
+
class ScrollBarHelper {
|
229
|
+
constructor() {
|
230
|
+
this._element = document.body;
|
231
|
+
}
|
232
|
+
|
233
|
+
getWidth() {
|
234
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
|
235
|
+
const documentWidth = document.documentElement.clientWidth;
|
236
|
+
return Math.abs(window.innerWidth - documentWidth);
|
237
|
+
}
|
238
|
+
|
239
|
+
hide() {
|
240
|
+
const width = this.getWidth();
|
241
|
+
|
242
|
+
this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
|
243
|
+
|
244
|
+
|
245
|
+
this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
|
246
|
+
|
247
|
+
|
248
|
+
this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
|
249
|
+
|
250
|
+
this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
|
251
|
+
}
|
252
|
+
|
253
|
+
_disableOverFlow() {
|
254
|
+
this._saveInitialAttribute(this._element, 'overflow');
|
255
|
+
|
256
|
+
this._element.style.overflow = 'hidden';
|
257
|
+
}
|
258
|
+
|
259
|
+
_setElementAttributes(selector, styleProp, callback) {
|
260
|
+
const scrollbarWidth = this.getWidth();
|
261
|
+
|
262
|
+
const manipulationCallBack = element => {
|
263
|
+
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
|
264
|
+
return;
|
265
|
+
}
|
266
|
+
|
267
|
+
this._saveInitialAttribute(element, styleProp);
|
268
|
+
|
269
|
+
const calculatedValue = window.getComputedStyle(element)[styleProp];
|
270
|
+
element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;
|
271
|
+
};
|
272
|
+
|
273
|
+
this._applyManipulationCallback(selector, manipulationCallBack);
|
274
|
+
}
|
275
|
+
|
276
|
+
reset() {
|
277
|
+
this._resetElementAttributes(this._element, 'overflow');
|
278
|
+
|
279
|
+
this._resetElementAttributes(this._element, 'paddingRight');
|
280
|
+
|
281
|
+
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
|
282
|
+
|
283
|
+
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
|
284
|
+
}
|
285
|
+
|
286
|
+
_saveInitialAttribute(element, styleProp) {
|
287
|
+
const actualValue = element.style[styleProp];
|
288
|
+
|
289
|
+
if (actualValue) {
|
290
|
+
Manipulator__default['default'].setDataAttribute(element, styleProp, actualValue);
|
291
|
+
}
|
292
|
+
}
|
293
|
+
|
294
|
+
_resetElementAttributes(selector, styleProp) {
|
295
|
+
const manipulationCallBack = element => {
|
296
|
+
const value = Manipulator__default['default'].getDataAttribute(element, styleProp);
|
297
|
+
|
298
|
+
if (typeof value === 'undefined') {
|
299
|
+
element.style.removeProperty(styleProp);
|
300
|
+
} else {
|
301
|
+
Manipulator__default['default'].removeDataAttribute(element, styleProp);
|
302
|
+
element.style[styleProp] = value;
|
303
|
+
}
|
304
|
+
};
|
305
|
+
|
306
|
+
this._applyManipulationCallback(selector, manipulationCallBack);
|
307
|
+
}
|
308
|
+
|
309
|
+
_applyManipulationCallback(selector, callBack) {
|
310
|
+
if (isElement(selector)) {
|
311
|
+
callBack(selector);
|
312
|
+
} else {
|
313
|
+
SelectorEngine__default['default'].find(selector, this._element).forEach(callBack);
|
314
|
+
}
|
315
|
+
}
|
316
|
+
|
317
|
+
isOverflowing() {
|
318
|
+
return this.getWidth() > 0;
|
319
|
+
}
|
320
|
+
|
321
|
+
}
|
322
|
+
|
323
|
+
/**
|
324
|
+
* --------------------------------------------------------------------------
|
325
|
+
* Bootstrap (v5.0.2): util/backdrop.js
|
326
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
327
|
+
* --------------------------------------------------------------------------
|
328
|
+
*/
|
329
|
+
const Default$1 = {
|
330
|
+
isVisible: true,
|
331
|
+
// if false, we use the backdrop helper without adding any element to the dom
|
332
|
+
isAnimated: false,
|
333
|
+
rootElement: 'body',
|
334
|
+
// give the choice to place backdrop under different elements
|
335
|
+
clickCallback: null
|
336
|
+
};
|
337
|
+
const DefaultType$1 = {
|
338
|
+
isVisible: 'boolean',
|
339
|
+
isAnimated: 'boolean',
|
340
|
+
rootElement: '(element|string)',
|
341
|
+
clickCallback: '(function|null)'
|
342
|
+
};
|
343
|
+
const NAME$1 = 'backdrop';
|
344
|
+
const CLASS_NAME_BACKDROP = 'modal-backdrop';
|
345
|
+
const CLASS_NAME_FADE$1 = 'fade';
|
346
|
+
const CLASS_NAME_SHOW$1 = 'show';
|
347
|
+
const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$1}`;
|
348
|
+
|
349
|
+
class Backdrop {
|
350
|
+
constructor(config) {
|
351
|
+
this._config = this._getConfig(config);
|
352
|
+
this._isAppended = false;
|
353
|
+
this._element = null;
|
354
|
+
}
|
355
|
+
|
356
|
+
show(callback) {
|
357
|
+
if (!this._config.isVisible) {
|
358
|
+
execute(callback);
|
359
|
+
return;
|
360
|
+
}
|
361
|
+
|
362
|
+
this._append();
|
363
|
+
|
364
|
+
if (this._config.isAnimated) {
|
365
|
+
reflow(this._getElement());
|
366
|
+
}
|
367
|
+
|
368
|
+
this._getElement().classList.add(CLASS_NAME_SHOW$1);
|
369
|
+
|
370
|
+
this._emulateAnimation(() => {
|
371
|
+
execute(callback);
|
372
|
+
});
|
373
|
+
}
|
374
|
+
|
375
|
+
hide(callback) {
|
376
|
+
if (!this._config.isVisible) {
|
377
|
+
execute(callback);
|
378
|
+
return;
|
379
|
+
}
|
380
|
+
|
381
|
+
this._getElement().classList.remove(CLASS_NAME_SHOW$1);
|
382
|
+
|
383
|
+
this._emulateAnimation(() => {
|
384
|
+
this.dispose();
|
385
|
+
execute(callback);
|
386
|
+
});
|
387
|
+
} // Private
|
388
|
+
|
389
|
+
|
390
|
+
_getElement() {
|
391
|
+
if (!this._element) {
|
392
|
+
const backdrop = document.createElement('div');
|
393
|
+
backdrop.className = CLASS_NAME_BACKDROP;
|
394
|
+
|
395
|
+
if (this._config.isAnimated) {
|
396
|
+
backdrop.classList.add(CLASS_NAME_FADE$1);
|
397
|
+
}
|
398
|
+
|
399
|
+
this._element = backdrop;
|
400
|
+
}
|
401
|
+
|
402
|
+
return this._element;
|
403
|
+
}
|
404
|
+
|
405
|
+
_getConfig(config) {
|
406
|
+
config = { ...Default$1,
|
407
|
+
...(typeof config === 'object' ? config : {})
|
408
|
+
}; // use getElement() with the default "body" to get a fresh Element on each instantiation
|
409
|
+
|
410
|
+
config.rootElement = getElement(config.rootElement);
|
411
|
+
typeCheckConfig(NAME$1, config, DefaultType$1);
|
412
|
+
return config;
|
413
|
+
}
|
414
|
+
|
415
|
+
_append() {
|
416
|
+
if (this._isAppended) {
|
417
|
+
return;
|
418
|
+
}
|
419
|
+
|
420
|
+
this._config.rootElement.appendChild(this._getElement());
|
421
|
+
|
422
|
+
EventHandler__default['default'].on(this._getElement(), EVENT_MOUSEDOWN, () => {
|
423
|
+
execute(this._config.clickCallback);
|
424
|
+
});
|
425
|
+
this._isAppended = true;
|
426
|
+
}
|
427
|
+
|
428
|
+
dispose() {
|
429
|
+
if (!this._isAppended) {
|
430
|
+
return;
|
431
|
+
}
|
432
|
+
|
433
|
+
EventHandler__default['default'].off(this._element, EVENT_MOUSEDOWN);
|
434
|
+
|
435
|
+
this._element.remove();
|
436
|
+
|
437
|
+
this._isAppended = false;
|
438
|
+
}
|
439
|
+
|
440
|
+
_emulateAnimation(callback) {
|
441
|
+
executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
|
442
|
+
}
|
443
|
+
|
444
|
+
}
|
445
|
+
|
446
|
+
/**
|
447
|
+
* --------------------------------------------------------------------------
|
448
|
+
* Bootstrap (v5.0.2): modal.js
|
449
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
450
|
+
* --------------------------------------------------------------------------
|
451
|
+
*/
|
234
452
|
/**
|
235
453
|
* ------------------------------------------------------------------------
|
236
454
|
* Constants
|
237
455
|
* ------------------------------------------------------------------------
|
238
456
|
*/
|
239
457
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
458
|
+
const NAME = 'modal';
|
459
|
+
const DATA_KEY = 'bs.modal';
|
460
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
461
|
+
const DATA_API_KEY = '.data-api';
|
462
|
+
const ESCAPE_KEY = 'Escape';
|
463
|
+
const Default = {
|
246
464
|
backdrop: true,
|
247
465
|
keyboard: true,
|
248
466
|
focus: true
|
249
467
|
};
|
250
|
-
|
468
|
+
const DefaultType = {
|
251
469
|
backdrop: '(boolean|string)',
|
252
470
|
keyboard: 'boolean',
|
253
471
|
focus: 'boolean'
|
254
472
|
};
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]';
|
276
|
-
var SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]';
|
277
|
-
var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
278
|
-
var SELECTOR_STICKY_CONTENT = '.sticky-top';
|
473
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
474
|
+
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;
|
475
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
476
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
477
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
478
|
+
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
|
479
|
+
const EVENT_RESIZE = `resize${EVENT_KEY}`;
|
480
|
+
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
481
|
+
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
|
482
|
+
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`;
|
483
|
+
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;
|
484
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
485
|
+
const CLASS_NAME_OPEN = 'modal-open';
|
486
|
+
const CLASS_NAME_FADE = 'fade';
|
487
|
+
const CLASS_NAME_SHOW = 'show';
|
488
|
+
const CLASS_NAME_STATIC = 'modal-static';
|
489
|
+
const SELECTOR_DIALOG = '.modal-dialog';
|
490
|
+
const SELECTOR_MODAL_BODY = '.modal-body';
|
491
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]';
|
492
|
+
const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]';
|
279
493
|
/**
|
280
494
|
* ------------------------------------------------------------------------
|
281
495
|
* Class Definition
|
282
496
|
* ------------------------------------------------------------------------
|
283
497
|
*/
|
284
498
|
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
_this._isShown = false;
|
296
|
-
_this._isBodyOverflowing = false;
|
297
|
-
_this._ignoreBackdropClick = false;
|
298
|
-
_this._isTransitioning = false;
|
299
|
-
_this._scrollbarWidth = 0;
|
300
|
-
return _this;
|
499
|
+
class Modal extends BaseComponent__default['default'] {
|
500
|
+
constructor(element, config) {
|
501
|
+
super(element);
|
502
|
+
this._config = this._getConfig(config);
|
503
|
+
this._dialog = SelectorEngine__default['default'].findOne(SELECTOR_DIALOG, this._element);
|
504
|
+
this._backdrop = this._initializeBackDrop();
|
505
|
+
this._isShown = false;
|
506
|
+
this._ignoreBackdropClick = false;
|
507
|
+
this._isTransitioning = false;
|
508
|
+
this._scrollBar = new ScrollBarHelper();
|
301
509
|
} // Getters
|
302
510
|
|
303
511
|
|
304
|
-
|
512
|
+
static get Default() {
|
513
|
+
return Default;
|
514
|
+
}
|
515
|
+
|
516
|
+
static get NAME() {
|
517
|
+
return NAME;
|
518
|
+
} // Public
|
305
519
|
|
306
|
-
// Public
|
307
|
-
_proto.toggle = function toggle(relatedTarget) {
|
308
|
-
return this._isShown ? this.hide() : this.show(relatedTarget);
|
309
|
-
};
|
310
520
|
|
311
|
-
|
312
|
-
|
521
|
+
toggle(relatedTarget) {
|
522
|
+
return this._isShown ? this.hide() : this.show(relatedTarget);
|
523
|
+
}
|
313
524
|
|
525
|
+
show(relatedTarget) {
|
314
526
|
if (this._isShown || this._isTransitioning) {
|
315
527
|
return;
|
316
528
|
}
|
317
529
|
|
318
|
-
|
319
|
-
|
320
|
-
}
|
321
|
-
|
322
|
-
var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
|
323
|
-
relatedTarget: relatedTarget
|
530
|
+
const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
|
531
|
+
relatedTarget
|
324
532
|
});
|
325
533
|
|
326
|
-
if (
|
534
|
+
if (showEvent.defaultPrevented) {
|
327
535
|
return;
|
328
536
|
}
|
329
537
|
|
330
538
|
this._isShown = true;
|
331
539
|
|
332
|
-
this.
|
540
|
+
if (this._isAnimated()) {
|
541
|
+
this._isTransitioning = true;
|
542
|
+
}
|
333
543
|
|
334
|
-
this.
|
544
|
+
this._scrollBar.hide();
|
545
|
+
|
546
|
+
document.body.classList.add(CLASS_NAME_OPEN);
|
335
547
|
|
336
548
|
this._adjustDialog();
|
337
549
|
|
@@ -339,26 +551,20 @@
|
|
339
551
|
|
340
552
|
this._setResizeEvent();
|
341
553
|
|
342
|
-
EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS,
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
if (event.target === _this2._element) {
|
348
|
-
_this2._ignoreBackdropClick = true;
|
554
|
+
EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, event => this.hide(event));
|
555
|
+
EventHandler__default['default'].on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
|
556
|
+
EventHandler__default['default'].one(this._element, EVENT_MOUSEUP_DISMISS, event => {
|
557
|
+
if (event.target === this._element) {
|
558
|
+
this._ignoreBackdropClick = true;
|
349
559
|
}
|
350
560
|
});
|
351
561
|
});
|
352
562
|
|
353
|
-
this._showBackdrop(
|
354
|
-
|
355
|
-
});
|
356
|
-
};
|
357
|
-
|
358
|
-
_proto.hide = function hide(event) {
|
359
|
-
var _this3 = this;
|
563
|
+
this._showBackdrop(() => this._showElement(relatedTarget));
|
564
|
+
}
|
360
565
|
|
361
|
-
|
566
|
+
hide(event) {
|
567
|
+
if (event && ['A', 'AREA'].includes(event.target.tagName)) {
|
362
568
|
event.preventDefault();
|
363
569
|
}
|
364
570
|
|
@@ -366,7 +572,7 @@
|
|
366
572
|
return;
|
367
573
|
}
|
368
574
|
|
369
|
-
|
575
|
+
const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
|
370
576
|
|
371
577
|
if (hideEvent.defaultPrevented) {
|
372
578
|
return;
|
@@ -374,9 +580,9 @@
|
|
374
580
|
|
375
581
|
this._isShown = false;
|
376
582
|
|
377
|
-
|
583
|
+
const isAnimated = this._isAnimated();
|
378
584
|
|
379
|
-
if (
|
585
|
+
if (isAnimated) {
|
380
586
|
this._isTransitioning = true;
|
381
587
|
}
|
382
588
|
|
@@ -391,58 +597,50 @@
|
|
391
597
|
EventHandler__default['default'].off(this._element, EVENT_CLICK_DISMISS);
|
392
598
|
EventHandler__default['default'].off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
|
393
599
|
|
394
|
-
|
395
|
-
|
396
|
-
EventHandler__default['default'].one(this._element, 'transitionend', function (event) {
|
397
|
-
return _this3._hideModal(event);
|
398
|
-
});
|
399
|
-
emulateTransitionEnd(this._element, transitionDuration);
|
400
|
-
} else {
|
401
|
-
this._hideModal();
|
402
|
-
}
|
403
|
-
};
|
600
|
+
this._queueCallback(() => this._hideModal(), this._element, isAnimated);
|
601
|
+
}
|
404
602
|
|
405
|
-
|
406
|
-
[window, this.
|
407
|
-
return EventHandler__default['default'].off(htmlElement, EVENT_KEY);
|
408
|
-
});
|
603
|
+
dispose() {
|
604
|
+
[window, this._dialog].forEach(htmlElement => EventHandler__default['default'].off(htmlElement, EVENT_KEY));
|
409
605
|
|
410
|
-
|
606
|
+
this._backdrop.dispose();
|
607
|
+
|
608
|
+
super.dispose();
|
411
609
|
/**
|
412
610
|
* `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
|
413
611
|
* Do not move `document` in `htmlElements` array
|
414
612
|
* It will remove `EVENT_CLICK_DATA_API` event that should remain
|
415
613
|
*/
|
416
614
|
|
417
|
-
|
418
615
|
EventHandler__default['default'].off(document, EVENT_FOCUSIN);
|
419
|
-
|
420
|
-
this._dialog = null;
|
421
|
-
this._backdrop = null;
|
422
|
-
this._isShown = null;
|
423
|
-
this._isBodyOverflowing = null;
|
424
|
-
this._ignoreBackdropClick = null;
|
425
|
-
this._isTransitioning = null;
|
426
|
-
this._scrollbarWidth = null;
|
427
|
-
};
|
616
|
+
}
|
428
617
|
|
429
|
-
|
618
|
+
handleUpdate() {
|
430
619
|
this._adjustDialog();
|
431
620
|
} // Private
|
432
|
-
;
|
433
621
|
|
434
|
-
|
435
|
-
|
622
|
+
|
623
|
+
_initializeBackDrop() {
|
624
|
+
return new Backdrop({
|
625
|
+
isVisible: Boolean(this._config.backdrop),
|
626
|
+
// 'static' option will be translated to true, and booleans will keep their value
|
627
|
+
isAnimated: this._isAnimated()
|
628
|
+
});
|
629
|
+
}
|
630
|
+
|
631
|
+
_getConfig(config) {
|
632
|
+
config = { ...Default,
|
633
|
+
...Manipulator__default['default'].getDataAttributes(this._element),
|
634
|
+
...(typeof config === 'object' ? config : {})
|
635
|
+
};
|
436
636
|
typeCheckConfig(NAME, config, DefaultType);
|
437
637
|
return config;
|
438
|
-
}
|
439
|
-
|
440
|
-
_proto._showElement = function _showElement(relatedTarget) {
|
441
|
-
var _this4 = this;
|
638
|
+
}
|
442
639
|
|
443
|
-
|
640
|
+
_showElement(relatedTarget) {
|
641
|
+
const isAnimated = this._isAnimated();
|
444
642
|
|
445
|
-
|
643
|
+
const modalBody = SelectorEngine__default['default'].findOne(SELECTOR_MODAL_BODY, this._dialog);
|
446
644
|
|
447
645
|
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
448
646
|
// Don't move modal's DOM position
|
@@ -463,7 +661,7 @@
|
|
463
661
|
modalBody.scrollTop = 0;
|
464
662
|
}
|
465
663
|
|
466
|
-
if (
|
664
|
+
if (isAnimated) {
|
467
665
|
reflow(this._element);
|
468
666
|
}
|
469
667
|
|
@@ -473,71 +671,54 @@
|
|
473
671
|
this._enforceFocus();
|
474
672
|
}
|
475
673
|
|
476
|
-
|
477
|
-
if (
|
478
|
-
|
674
|
+
const transitionComplete = () => {
|
675
|
+
if (this._config.focus) {
|
676
|
+
this._element.focus();
|
479
677
|
}
|
480
678
|
|
481
|
-
|
482
|
-
EventHandler__default['default'].trigger(
|
483
|
-
relatedTarget
|
679
|
+
this._isTransitioning = false;
|
680
|
+
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
|
681
|
+
relatedTarget
|
484
682
|
});
|
485
683
|
};
|
486
684
|
|
487
|
-
|
488
|
-
|
489
|
-
EventHandler__default['default'].one(this._dialog, 'transitionend', transitionComplete);
|
490
|
-
emulateTransitionEnd(this._dialog, transitionDuration);
|
491
|
-
} else {
|
492
|
-
transitionComplete();
|
493
|
-
}
|
494
|
-
};
|
495
|
-
|
496
|
-
_proto._enforceFocus = function _enforceFocus() {
|
497
|
-
var _this5 = this;
|
685
|
+
this._queueCallback(transitionComplete, this._dialog, isAnimated);
|
686
|
+
}
|
498
687
|
|
688
|
+
_enforceFocus() {
|
499
689
|
EventHandler__default['default'].off(document, EVENT_FOCUSIN); // guard against infinite focus loop
|
500
690
|
|
501
|
-
EventHandler__default['default'].on(document, EVENT_FOCUSIN,
|
502
|
-
if (document !== event.target &&
|
503
|
-
|
691
|
+
EventHandler__default['default'].on(document, EVENT_FOCUSIN, event => {
|
692
|
+
if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {
|
693
|
+
this._element.focus();
|
504
694
|
}
|
505
695
|
});
|
506
|
-
}
|
507
|
-
|
508
|
-
_proto._setEscapeEvent = function _setEscapeEvent() {
|
509
|
-
var _this6 = this;
|
696
|
+
}
|
510
697
|
|
698
|
+
_setEscapeEvent() {
|
511
699
|
if (this._isShown) {
|
512
|
-
EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS,
|
513
|
-
if (
|
700
|
+
EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
701
|
+
if (this._config.keyboard && event.key === ESCAPE_KEY) {
|
514
702
|
event.preventDefault();
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
_this6._triggerBackdropTransition();
|
703
|
+
this.hide();
|
704
|
+
} else if (!this._config.keyboard && event.key === ESCAPE_KEY) {
|
705
|
+
this._triggerBackdropTransition();
|
519
706
|
}
|
520
707
|
});
|
521
708
|
} else {
|
522
709
|
EventHandler__default['default'].off(this._element, EVENT_KEYDOWN_DISMISS);
|
523
710
|
}
|
524
|
-
}
|
525
|
-
|
526
|
-
_proto._setResizeEvent = function _setResizeEvent() {
|
527
|
-
var _this7 = this;
|
711
|
+
}
|
528
712
|
|
713
|
+
_setResizeEvent() {
|
529
714
|
if (this._isShown) {
|
530
|
-
EventHandler__default['default'].on(window, EVENT_RESIZE,
|
531
|
-
return _this7._adjustDialog();
|
532
|
-
});
|
715
|
+
EventHandler__default['default'].on(window, EVENT_RESIZE, () => this._adjustDialog());
|
533
716
|
} else {
|
534
717
|
EventHandler__default['default'].off(window, EVENT_RESIZE);
|
535
718
|
}
|
536
|
-
}
|
537
|
-
|
538
|
-
_proto._hideModal = function _hideModal() {
|
539
|
-
var _this8 = this;
|
719
|
+
}
|
540
720
|
|
721
|
+
_hideModal() {
|
541
722
|
this._element.style.display = 'none';
|
542
723
|
|
543
724
|
this._element.setAttribute('aria-hidden', true);
|
@@ -548,245 +729,121 @@
|
|
548
729
|
|
549
730
|
this._isTransitioning = false;
|
550
731
|
|
551
|
-
this.
|
732
|
+
this._backdrop.hide(() => {
|
552
733
|
document.body.classList.remove(CLASS_NAME_OPEN);
|
553
734
|
|
554
|
-
|
735
|
+
this._resetAdjustments();
|
555
736
|
|
556
|
-
|
737
|
+
this._scrollBar.reset();
|
557
738
|
|
558
|
-
EventHandler__default['default'].trigger(
|
739
|
+
EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
|
559
740
|
});
|
560
|
-
}
|
561
|
-
|
562
|
-
_proto._removeBackdrop = function _removeBackdrop() {
|
563
|
-
this._backdrop.parentNode.removeChild(this._backdrop);
|
564
|
-
|
565
|
-
this._backdrop = null;
|
566
|
-
};
|
567
|
-
|
568
|
-
_proto._showBackdrop = function _showBackdrop(callback) {
|
569
|
-
var _this9 = this;
|
570
|
-
|
571
|
-
var animate = this._element.classList.contains(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
|
572
|
-
|
573
|
-
if (this._isShown && this._config.backdrop) {
|
574
|
-
this._backdrop = document.createElement('div');
|
575
|
-
this._backdrop.className = CLASS_NAME_BACKDROP;
|
576
|
-
|
577
|
-
if (animate) {
|
578
|
-
this._backdrop.classList.add(animate);
|
579
|
-
}
|
580
|
-
|
581
|
-
document.body.appendChild(this._backdrop);
|
582
|
-
EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, function (event) {
|
583
|
-
if (_this9._ignoreBackdropClick) {
|
584
|
-
_this9._ignoreBackdropClick = false;
|
585
|
-
return;
|
586
|
-
}
|
587
|
-
|
588
|
-
if (event.target !== event.currentTarget) {
|
589
|
-
return;
|
590
|
-
}
|
591
|
-
|
592
|
-
if (_this9._config.backdrop === 'static') {
|
593
|
-
_this9._triggerBackdropTransition();
|
594
|
-
} else {
|
595
|
-
_this9.hide();
|
596
|
-
}
|
597
|
-
});
|
741
|
+
}
|
598
742
|
|
599
|
-
|
600
|
-
|
743
|
+
_showBackdrop(callback) {
|
744
|
+
EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, event => {
|
745
|
+
if (this._ignoreBackdropClick) {
|
746
|
+
this._ignoreBackdropClick = false;
|
747
|
+
return;
|
601
748
|
}
|
602
749
|
|
603
|
-
|
604
|
-
|
605
|
-
if (!animate) {
|
606
|
-
callback();
|
750
|
+
if (event.target !== event.currentTarget) {
|
607
751
|
return;
|
608
752
|
}
|
609
753
|
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
754
|
+
if (this._config.backdrop === true) {
|
755
|
+
this.hide();
|
756
|
+
} else if (this._config.backdrop === 'static') {
|
757
|
+
this._triggerBackdropTransition();
|
758
|
+
}
|
759
|
+
});
|
615
760
|
|
616
|
-
|
617
|
-
|
761
|
+
this._backdrop.show(callback);
|
762
|
+
}
|
618
763
|
|
619
|
-
|
620
|
-
|
764
|
+
_isAnimated() {
|
765
|
+
return this._element.classList.contains(CLASS_NAME_FADE);
|
766
|
+
}
|
621
767
|
|
622
|
-
|
623
|
-
|
768
|
+
_triggerBackdropTransition() {
|
769
|
+
const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE_PREVENTED);
|
624
770
|
|
625
|
-
|
626
|
-
|
627
|
-
} else {
|
628
|
-
callbackRemove();
|
629
|
-
}
|
630
|
-
} else {
|
631
|
-
callback();
|
771
|
+
if (hideEvent.defaultPrevented) {
|
772
|
+
return;
|
632
773
|
}
|
633
|
-
};
|
634
|
-
|
635
|
-
_proto._triggerBackdropTransition = function _triggerBackdropTransition() {
|
636
|
-
var _this10 = this;
|
637
774
|
|
638
|
-
|
775
|
+
const {
|
776
|
+
classList,
|
777
|
+
scrollHeight,
|
778
|
+
style
|
779
|
+
} = this._element;
|
780
|
+
const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed
|
639
781
|
|
640
|
-
if (
|
782
|
+
if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {
|
641
783
|
return;
|
642
784
|
}
|
643
785
|
|
644
|
-
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
645
|
-
|
646
786
|
if (!isModalOverflowing) {
|
647
|
-
|
787
|
+
style.overflowY = 'hidden';
|
648
788
|
}
|
649
789
|
|
650
|
-
|
790
|
+
classList.add(CLASS_NAME_STATIC);
|
651
791
|
|
652
|
-
|
653
|
-
|
654
|
-
EventHandler__default['default'].one(this._element, 'transitionend', function () {
|
655
|
-
_this10._element.classList.remove(CLASS_NAME_STATIC);
|
792
|
+
this._queueCallback(() => {
|
793
|
+
classList.remove(CLASS_NAME_STATIC);
|
656
794
|
|
657
795
|
if (!isModalOverflowing) {
|
658
|
-
|
659
|
-
|
660
|
-
});
|
661
|
-
emulateTransitionEnd(_this10._element, modalTransitionDuration);
|
796
|
+
this._queueCallback(() => {
|
797
|
+
style.overflowY = '';
|
798
|
+
}, this._dialog);
|
662
799
|
}
|
663
|
-
});
|
664
|
-
emulateTransitionEnd(this._element, modalTransitionDuration);
|
800
|
+
}, this._dialog);
|
665
801
|
|
666
802
|
this._element.focus();
|
667
803
|
} // ----------------------------------------------------------------------
|
668
804
|
// the following methods are used to handle overflowing modals
|
669
805
|
// ----------------------------------------------------------------------
|
670
|
-
;
|
671
|
-
|
672
|
-
_proto._adjustDialog = function _adjustDialog() {
|
673
|
-
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
674
|
-
|
675
|
-
if (!this._isBodyOverflowing && isModalOverflowing && !isRTL || this._isBodyOverflowing && !isModalOverflowing && isRTL) {
|
676
|
-
this._element.style.paddingLeft = this._scrollbarWidth + "px";
|
677
|
-
}
|
678
|
-
|
679
|
-
if (this._isBodyOverflowing && !isModalOverflowing && !isRTL || !this._isBodyOverflowing && isModalOverflowing && isRTL) {
|
680
|
-
this._element.style.paddingRight = this._scrollbarWidth + "px";
|
681
|
-
}
|
682
|
-
};
|
683
|
-
|
684
|
-
_proto._resetAdjustments = function _resetAdjustments() {
|
685
|
-
this._element.style.paddingLeft = '';
|
686
|
-
this._element.style.paddingRight = '';
|
687
|
-
};
|
688
806
|
|
689
|
-
_proto._checkScrollbar = function _checkScrollbar() {
|
690
|
-
var rect = document.body.getBoundingClientRect();
|
691
|
-
this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
|
692
|
-
this._scrollbarWidth = this._getScrollbarWidth();
|
693
|
-
};
|
694
807
|
|
695
|
-
|
696
|
-
|
808
|
+
_adjustDialog() {
|
809
|
+
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
697
810
|
|
698
|
-
|
699
|
-
this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', function (calculatedValue) {
|
700
|
-
return calculatedValue + _this11._scrollbarWidth;
|
701
|
-
});
|
811
|
+
const scrollbarWidth = this._scrollBar.getWidth();
|
702
812
|
|
703
|
-
|
704
|
-
return calculatedValue - _this11._scrollbarWidth;
|
705
|
-
});
|
813
|
+
const isBodyOverflowing = scrollbarWidth > 0;
|
706
814
|
|
707
|
-
|
708
|
-
|
709
|
-
});
|
815
|
+
if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {
|
816
|
+
this._element.style.paddingLeft = `${scrollbarWidth}px`;
|
710
817
|
}
|
711
818
|
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
SelectorEngine__default['default'].find(selector).forEach(function (element) {
|
717
|
-
var actualValue = element.style[styleProp];
|
718
|
-
var calculatedValue = window.getComputedStyle(element)[styleProp];
|
719
|
-
Manipulator__default['default'].setDataAttribute(element, styleProp, actualValue);
|
720
|
-
element.style[styleProp] = callback(Number.parseFloat(calculatedValue)) + 'px';
|
721
|
-
});
|
722
|
-
};
|
723
|
-
|
724
|
-
_proto._resetScrollbar = function _resetScrollbar() {
|
725
|
-
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
|
726
|
-
|
727
|
-
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
|
728
|
-
|
729
|
-
this._resetElementAttributes('body', 'paddingRight');
|
730
|
-
};
|
731
|
-
|
732
|
-
_proto._resetElementAttributes = function _resetElementAttributes(selector, styleProp) {
|
733
|
-
SelectorEngine__default['default'].find(selector).forEach(function (element) {
|
734
|
-
var value = Manipulator__default['default'].getDataAttribute(element, styleProp);
|
735
|
-
|
736
|
-
if (typeof value === 'undefined' && element === document.body) {
|
737
|
-
element.style[styleProp] = '';
|
738
|
-
} else {
|
739
|
-
Manipulator__default['default'].removeDataAttribute(element, styleProp);
|
740
|
-
element.style[styleProp] = value;
|
741
|
-
}
|
742
|
-
});
|
743
|
-
};
|
819
|
+
if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {
|
820
|
+
this._element.style.paddingRight = `${scrollbarWidth}px`;
|
821
|
+
}
|
822
|
+
}
|
744
823
|
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
|
749
|
-
document.body.appendChild(scrollDiv);
|
750
|
-
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
|
751
|
-
document.body.removeChild(scrollDiv);
|
752
|
-
return scrollbarWidth;
|
824
|
+
_resetAdjustments() {
|
825
|
+
this._element.style.paddingLeft = '';
|
826
|
+
this._element.style.paddingRight = '';
|
753
827
|
} // Static
|
754
|
-
;
|
755
828
|
|
756
|
-
Modal.jQueryInterface = function jQueryInterface(config, relatedTarget) {
|
757
|
-
return this.each(function () {
|
758
|
-
var data = Data__default['default'].getData(this, DATA_KEY);
|
759
829
|
|
760
|
-
|
830
|
+
static jQueryInterface(config, relatedTarget) {
|
831
|
+
return this.each(function () {
|
832
|
+
const data = Modal.getOrCreateInstance(this, config);
|
761
833
|
|
762
|
-
if (
|
763
|
-
|
834
|
+
if (typeof config !== 'string') {
|
835
|
+
return;
|
764
836
|
}
|
765
837
|
|
766
|
-
if (typeof config === '
|
767
|
-
|
768
|
-
throw new TypeError("No method named \"" + config + "\"");
|
769
|
-
}
|
770
|
-
|
771
|
-
data[config](relatedTarget);
|
838
|
+
if (typeof data[config] === 'undefined') {
|
839
|
+
throw new TypeError(`No method named "${config}"`);
|
772
840
|
}
|
773
|
-
});
|
774
|
-
};
|
775
841
|
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
return Default;
|
780
|
-
}
|
781
|
-
}, {
|
782
|
-
key: "DATA_KEY",
|
783
|
-
get: function get() {
|
784
|
-
return DATA_KEY;
|
785
|
-
}
|
786
|
-
}]);
|
842
|
+
data[config](relatedTarget);
|
843
|
+
});
|
844
|
+
}
|
787
845
|
|
788
|
-
|
789
|
-
}(BaseComponent__default['default']);
|
846
|
+
}
|
790
847
|
/**
|
791
848
|
* ------------------------------------------------------------------------
|
792
849
|
* Data Api implementation
|
@@ -795,34 +852,25 @@
|
|
795
852
|
|
796
853
|
|
797
854
|
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
798
|
-
|
855
|
+
const target = getElementFromSelector(this);
|
799
856
|
|
800
|
-
|
801
|
-
|
802
|
-
if (this.tagName === 'A' || this.tagName === 'AREA') {
|
857
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
803
858
|
event.preventDefault();
|
804
859
|
}
|
805
860
|
|
806
|
-
EventHandler__default['default'].one(target, EVENT_SHOW,
|
861
|
+
EventHandler__default['default'].one(target, EVENT_SHOW, showEvent => {
|
807
862
|
if (showEvent.defaultPrevented) {
|
808
863
|
// only register focus restorer if modal will actually get shown
|
809
864
|
return;
|
810
865
|
}
|
811
866
|
|
812
|
-
EventHandler__default['default'].one(target, EVENT_HIDDEN,
|
813
|
-
if (isVisible(
|
814
|
-
|
867
|
+
EventHandler__default['default'].one(target, EVENT_HIDDEN, () => {
|
868
|
+
if (isVisible(this)) {
|
869
|
+
this.focus();
|
815
870
|
}
|
816
871
|
});
|
817
872
|
});
|
818
|
-
|
819
|
-
|
820
|
-
if (!data) {
|
821
|
-
var config = _extends({}, Manipulator__default['default'].getDataAttributes(target), Manipulator__default['default'].getDataAttributes(this));
|
822
|
-
|
823
|
-
data = new Modal(target, config);
|
824
|
-
}
|
825
|
-
|
873
|
+
const data = Modal.getOrCreateInstance(target);
|
826
874
|
data.toggle(this);
|
827
875
|
});
|
828
876
|
/**
|
@@ -832,7 +880,7 @@
|
|
832
880
|
* add .Modal to jQuery only if jQuery is present
|
833
881
|
*/
|
834
882
|
|
835
|
-
defineJQueryPlugin(
|
883
|
+
defineJQueryPlugin(Modal);
|
836
884
|
|
837
885
|
return Modal;
|
838
886
|
|