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