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