bootstrap 5.2.0 → 5.3.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/.github/workflows/ci.yml +55 -0
- data/README.md +25 -5
- data/assets/javascripts/bootstrap/alert.js +22 -32
- data/assets/javascripts/bootstrap/base-component.js +22 -38
- data/assets/javascripts/bootstrap/button.js +19 -22
- data/assets/javascripts/bootstrap/carousel.js +52 -135
- data/assets/javascripts/bootstrap/collapse.js +40 -102
- data/assets/javascripts/bootstrap/dom/data.js +8 -12
- data/assets/javascripts/bootstrap/dom/event-handler.js +19 -66
- data/assets/javascripts/bootstrap/dom/manipulator.js +4 -17
- data/assets/javascripts/bootstrap/dom/selector-engine.js +42 -24
- data/assets/javascripts/bootstrap/dropdown.js +74 -143
- data/assets/javascripts/bootstrap/modal.js +66 -143
- data/assets/javascripts/bootstrap/offcanvas.js +50 -102
- data/assets/javascripts/bootstrap/popover.js +23 -29
- data/assets/javascripts/bootstrap/scrollspy.js +64 -97
- data/assets/javascripts/bootstrap/tab.js +55 -112
- data/assets/javascripts/bootstrap/toast.js +39 -77
- data/assets/javascripts/bootstrap/tooltip.js +99 -216
- data/assets/javascripts/bootstrap/util/backdrop.js +28 -54
- data/assets/javascripts/bootstrap/util/component-functions.js +13 -18
- data/assets/javascripts/bootstrap/util/config.js +15 -27
- data/assets/javascripts/bootstrap/util/focustrap.js +20 -36
- data/assets/javascripts/bootstrap/util/index.js +42 -111
- data/assets/javascripts/bootstrap/util/sanitizer.js +30 -42
- data/assets/javascripts/bootstrap/util/scrollbar.js +24 -50
- data/assets/javascripts/bootstrap/util/swipe.js +27 -48
- data/assets/javascripts/bootstrap/util/template-factory.js +25 -52
- data/assets/javascripts/bootstrap-sprockets.js +12 -12
- data/assets/javascripts/bootstrap.js +764 -1529
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +1 -3
- data/assets/stylesheets/_bootstrap-reboot.scss +1 -0
- data/assets/stylesheets/_bootstrap.scss +1 -0
- data/assets/stylesheets/bootstrap/_accordion.scss +16 -4
- data/assets/stylesheets/bootstrap/_alert.scss +8 -11
- data/assets/stylesheets/bootstrap/_button-group.scss +3 -3
- data/assets/stylesheets/bootstrap/_buttons.scss +31 -10
- data/assets/stylesheets/bootstrap/_card.scss +5 -0
- data/assets/stylesheets/bootstrap/_carousel.scss +20 -5
- data/assets/stylesheets/bootstrap/_close.scss +32 -9
- data/assets/stylesheets/bootstrap/_dropdown.scss +3 -1
- data/assets/stylesheets/bootstrap/_functions.scss +3 -3
- data/assets/stylesheets/bootstrap/_grid.scss +6 -0
- data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +18 -12
- data/assets/stylesheets/bootstrap/_maps.scss +120 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
- data/assets/stylesheets/bootstrap/_modal.scss +1 -1
- data/assets/stylesheets/bootstrap/_nav.scss +42 -5
- data/assets/stylesheets/bootstrap/_navbar.scss +17 -4
- data/assets/stylesheets/bootstrap/_offcanvas.scss +9 -6
- data/assets/stylesheets/bootstrap/_pagination.scss +1 -1
- data/assets/stylesheets/bootstrap/_popover.scss +5 -5
- data/assets/stylesheets/bootstrap/_progress.scss +10 -1
- data/assets/stylesheets/bootstrap/_reboot.scss +3 -3
- data/assets/stylesheets/bootstrap/_root.scss +121 -10
- data/assets/stylesheets/bootstrap/_tables.scss +18 -11
- data/assets/stylesheets/bootstrap/_toasts.scss +5 -2
- data/assets/stylesheets/bootstrap/_tooltip.scss +4 -5
- data/assets/stylesheets/bootstrap/_utilities.scss +172 -13
- data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
- data/assets/stylesheets/bootstrap/_variables.scss +272 -162
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +4 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +23 -3
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +24 -11
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +23 -3
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +11 -2
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +7 -4
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +0 -2
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
- data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
- data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +4 -1
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +3 -5
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +18 -17
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +5 -1
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
- data/bootstrap.gemspec +1 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +2 -2
- data/tasks/updater/network.rb +2 -2
- data/tasks/updater/scss.rb +1 -1
- data/tasks/updater.rb +2 -2
- data/test/gemfiles/rails_5_2.gemfile +8 -0
- data/test/gemfiles/rails_7_0.gemfile +7 -0
- data/test/test_helper.rb +3 -2
- metadata +17 -9
- data/.travis.yml +0 -32
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap modal.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap modal.js v5.3.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2023 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 (
|
|
11
|
-
|
|
12
|
-
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
|
-
|
|
14
|
-
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
-
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
16
|
-
const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
|
|
17
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
18
|
-
const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
|
|
19
|
-
const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/backdrop.js'), require('./util/component-functions.js'), require('./util/focustrap.js'), require('./util/index.js'), require('./util/scrollbar.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/backdrop', './util/component-functions', './util/focustrap', './util/index', './util/scrollbar'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Backdrop, global.ComponentFunctions, global.Focustrap, global.Index, global.Scrollbar));
|
|
10
|
+
})(this, (function (BaseComponent, EventHandler, SelectorEngine, Backdrop, componentFunctions_js, FocusTrap, index_js, ScrollBarHelper) { 'use strict';
|
|
20
11
|
|
|
21
12
|
/**
|
|
22
13
|
* --------------------------------------------------------------------------
|
|
23
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap modal.js
|
|
24
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
25
16
|
* --------------------------------------------------------------------------
|
|
26
17
|
*/
|
|
18
|
+
|
|
19
|
+
|
|
27
20
|
/**
|
|
28
21
|
* Constants
|
|
29
22
|
*/
|
|
@@ -39,6 +32,7 @@
|
|
|
39
32
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
40
33
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
41
34
|
const EVENT_RESIZE = `resize${EVENT_KEY}`;
|
|
35
|
+
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
|
42
36
|
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;
|
|
43
37
|
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
|
|
44
38
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
@@ -60,336 +54,265 @@
|
|
|
60
54
|
focus: 'boolean',
|
|
61
55
|
keyboard: 'boolean'
|
|
62
56
|
};
|
|
57
|
+
|
|
63
58
|
/**
|
|
64
59
|
* Class definition
|
|
65
60
|
*/
|
|
66
61
|
|
|
67
|
-
class Modal extends
|
|
62
|
+
class Modal extends BaseComponent {
|
|
68
63
|
constructor(element, config) {
|
|
69
64
|
super(element, config);
|
|
70
|
-
this._dialog =
|
|
65
|
+
this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
|
|
71
66
|
this._backdrop = this._initializeBackDrop();
|
|
72
67
|
this._focustrap = this._initializeFocusTrap();
|
|
73
68
|
this._isShown = false;
|
|
74
69
|
this._isTransitioning = false;
|
|
75
|
-
this._scrollBar = new
|
|
76
|
-
|
|
70
|
+
this._scrollBar = new ScrollBarHelper();
|
|
77
71
|
this._addEventListeners();
|
|
78
|
-
}
|
|
79
|
-
|
|
72
|
+
}
|
|
80
73
|
|
|
74
|
+
// Getters
|
|
81
75
|
static get Default() {
|
|
82
76
|
return Default;
|
|
83
77
|
}
|
|
84
|
-
|
|
85
78
|
static get DefaultType() {
|
|
86
79
|
return DefaultType;
|
|
87
80
|
}
|
|
88
|
-
|
|
89
81
|
static get NAME() {
|
|
90
82
|
return NAME;
|
|
91
|
-
}
|
|
92
|
-
|
|
83
|
+
}
|
|
93
84
|
|
|
85
|
+
// Public
|
|
94
86
|
toggle(relatedTarget) {
|
|
95
87
|
return this._isShown ? this.hide() : this.show(relatedTarget);
|
|
96
88
|
}
|
|
97
|
-
|
|
98
89
|
show(relatedTarget) {
|
|
99
90
|
if (this._isShown || this._isTransitioning) {
|
|
100
91
|
return;
|
|
101
92
|
}
|
|
102
|
-
|
|
103
|
-
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
|
|
93
|
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
|
|
104
94
|
relatedTarget
|
|
105
95
|
});
|
|
106
|
-
|
|
107
96
|
if (showEvent.defaultPrevented) {
|
|
108
97
|
return;
|
|
109
98
|
}
|
|
110
|
-
|
|
111
99
|
this._isShown = true;
|
|
112
100
|
this._isTransitioning = true;
|
|
113
|
-
|
|
114
101
|
this._scrollBar.hide();
|
|
115
|
-
|
|
116
102
|
document.body.classList.add(CLASS_NAME_OPEN);
|
|
117
|
-
|
|
118
103
|
this._adjustDialog();
|
|
119
|
-
|
|
120
104
|
this._backdrop.show(() => this._showElement(relatedTarget));
|
|
121
105
|
}
|
|
122
|
-
|
|
123
106
|
hide() {
|
|
124
107
|
if (!this._isShown || this._isTransitioning) {
|
|
125
108
|
return;
|
|
126
109
|
}
|
|
127
|
-
|
|
128
|
-
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
|
|
129
|
-
|
|
110
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
|
|
130
111
|
if (hideEvent.defaultPrevented) {
|
|
131
112
|
return;
|
|
132
113
|
}
|
|
133
|
-
|
|
134
114
|
this._isShown = false;
|
|
135
115
|
this._isTransitioning = true;
|
|
136
|
-
|
|
137
116
|
this._focustrap.deactivate();
|
|
138
|
-
|
|
139
117
|
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
140
|
-
|
|
141
118
|
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
|
|
142
119
|
}
|
|
143
|
-
|
|
144
120
|
dispose() {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
|
|
121
|
+
EventHandler.off(window, EVENT_KEY);
|
|
122
|
+
EventHandler.off(this._dialog, EVENT_KEY);
|
|
149
123
|
this._backdrop.dispose();
|
|
150
|
-
|
|
151
124
|
this._focustrap.deactivate();
|
|
152
|
-
|
|
153
125
|
super.dispose();
|
|
154
126
|
}
|
|
155
|
-
|
|
156
127
|
handleUpdate() {
|
|
157
128
|
this._adjustDialog();
|
|
158
|
-
}
|
|
159
|
-
|
|
129
|
+
}
|
|
160
130
|
|
|
131
|
+
// Private
|
|
161
132
|
_initializeBackDrop() {
|
|
162
|
-
return new
|
|
133
|
+
return new Backdrop({
|
|
163
134
|
isVisible: Boolean(this._config.backdrop),
|
|
164
135
|
// 'static' option will be translated to true, and booleans will keep their value,
|
|
165
136
|
isAnimated: this._isAnimated()
|
|
166
137
|
});
|
|
167
138
|
}
|
|
168
|
-
|
|
169
139
|
_initializeFocusTrap() {
|
|
170
|
-
return new
|
|
140
|
+
return new FocusTrap({
|
|
171
141
|
trapElement: this._element
|
|
172
142
|
});
|
|
173
143
|
}
|
|
174
|
-
|
|
175
144
|
_showElement(relatedTarget) {
|
|
176
145
|
// try to append dynamic modal
|
|
177
146
|
if (!document.body.contains(this._element)) {
|
|
178
147
|
document.body.append(this._element);
|
|
179
148
|
}
|
|
180
|
-
|
|
181
149
|
this._element.style.display = 'block';
|
|
182
|
-
|
|
183
150
|
this._element.removeAttribute('aria-hidden');
|
|
184
|
-
|
|
185
151
|
this._element.setAttribute('aria-modal', true);
|
|
186
|
-
|
|
187
152
|
this._element.setAttribute('role', 'dialog');
|
|
188
|
-
|
|
189
153
|
this._element.scrollTop = 0;
|
|
190
|
-
const modalBody =
|
|
191
|
-
|
|
154
|
+
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
|
|
192
155
|
if (modalBody) {
|
|
193
156
|
modalBody.scrollTop = 0;
|
|
194
157
|
}
|
|
195
|
-
|
|
196
|
-
index.reflow(this._element);
|
|
197
|
-
|
|
158
|
+
index_js.reflow(this._element);
|
|
198
159
|
this._element.classList.add(CLASS_NAME_SHOW);
|
|
199
|
-
|
|
200
160
|
const transitionComplete = () => {
|
|
201
161
|
if (this._config.focus) {
|
|
202
162
|
this._focustrap.activate();
|
|
203
163
|
}
|
|
204
|
-
|
|
205
164
|
this._isTransitioning = false;
|
|
206
|
-
|
|
165
|
+
EventHandler.trigger(this._element, EVENT_SHOWN, {
|
|
207
166
|
relatedTarget
|
|
208
167
|
});
|
|
209
168
|
};
|
|
210
|
-
|
|
211
169
|
this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
|
|
212
170
|
}
|
|
213
|
-
|
|
214
171
|
_addEventListeners() {
|
|
215
|
-
|
|
172
|
+
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
|
216
173
|
if (event.key !== ESCAPE_KEY) {
|
|
217
174
|
return;
|
|
218
175
|
}
|
|
219
|
-
|
|
220
176
|
if (this._config.keyboard) {
|
|
221
|
-
event.preventDefault();
|
|
222
177
|
this.hide();
|
|
223
178
|
return;
|
|
224
179
|
}
|
|
225
|
-
|
|
226
180
|
this._triggerBackdropTransition();
|
|
227
181
|
});
|
|
228
|
-
|
|
182
|
+
EventHandler.on(window, EVENT_RESIZE, () => {
|
|
229
183
|
if (this._isShown && !this._isTransitioning) {
|
|
230
184
|
this._adjustDialog();
|
|
231
185
|
}
|
|
232
186
|
});
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
187
|
+
EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
|
|
188
|
+
// a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
|
|
189
|
+
EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
|
|
190
|
+
if (this._element !== event.target || this._element !== event2.target) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (this._config.backdrop === 'static') {
|
|
194
|
+
this._triggerBackdropTransition();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (this._config.backdrop) {
|
|
198
|
+
this.hide();
|
|
199
|
+
}
|
|
200
|
+
});
|
|
248
201
|
});
|
|
249
202
|
}
|
|
250
|
-
|
|
251
203
|
_hideModal() {
|
|
252
204
|
this._element.style.display = 'none';
|
|
253
|
-
|
|
254
205
|
this._element.setAttribute('aria-hidden', true);
|
|
255
|
-
|
|
256
206
|
this._element.removeAttribute('aria-modal');
|
|
257
|
-
|
|
258
207
|
this._element.removeAttribute('role');
|
|
259
|
-
|
|
260
208
|
this._isTransitioning = false;
|
|
261
|
-
|
|
262
209
|
this._backdrop.hide(() => {
|
|
263
210
|
document.body.classList.remove(CLASS_NAME_OPEN);
|
|
264
|
-
|
|
265
211
|
this._resetAdjustments();
|
|
266
|
-
|
|
267
212
|
this._scrollBar.reset();
|
|
268
|
-
|
|
269
|
-
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
|
|
213
|
+
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
|
270
214
|
});
|
|
271
215
|
}
|
|
272
|
-
|
|
273
216
|
_isAnimated() {
|
|
274
217
|
return this._element.classList.contains(CLASS_NAME_FADE);
|
|
275
218
|
}
|
|
276
|
-
|
|
277
219
|
_triggerBackdropTransition() {
|
|
278
|
-
const hideEvent =
|
|
279
|
-
|
|
220
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
|
280
221
|
if (hideEvent.defaultPrevented) {
|
|
281
222
|
return;
|
|
282
223
|
}
|
|
283
|
-
|
|
284
224
|
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
|
285
|
-
const initialOverflowY = this._element.style.overflowY;
|
|
286
|
-
|
|
225
|
+
const initialOverflowY = this._element.style.overflowY;
|
|
226
|
+
// return if the following background transition hasn't yet completed
|
|
287
227
|
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
|
|
288
228
|
return;
|
|
289
229
|
}
|
|
290
|
-
|
|
291
230
|
if (!isModalOverflowing) {
|
|
292
231
|
this._element.style.overflowY = 'hidden';
|
|
293
232
|
}
|
|
294
|
-
|
|
295
233
|
this._element.classList.add(CLASS_NAME_STATIC);
|
|
296
|
-
|
|
297
234
|
this._queueCallback(() => {
|
|
298
235
|
this._element.classList.remove(CLASS_NAME_STATIC);
|
|
299
|
-
|
|
300
236
|
this._queueCallback(() => {
|
|
301
237
|
this._element.style.overflowY = initialOverflowY;
|
|
302
238
|
}, this._dialog);
|
|
303
239
|
}, this._dialog);
|
|
304
|
-
|
|
305
240
|
this._element.focus();
|
|
306
241
|
}
|
|
242
|
+
|
|
307
243
|
/**
|
|
308
244
|
* The following methods are used to handle overflowing modals
|
|
309
245
|
*/
|
|
310
246
|
|
|
311
|
-
|
|
312
247
|
_adjustDialog() {
|
|
313
248
|
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
|
314
|
-
|
|
315
249
|
const scrollbarWidth = this._scrollBar.getWidth();
|
|
316
|
-
|
|
317
250
|
const isBodyOverflowing = scrollbarWidth > 0;
|
|
318
|
-
|
|
319
251
|
if (isBodyOverflowing && !isModalOverflowing) {
|
|
320
|
-
const property =
|
|
252
|
+
const property = index_js.isRTL() ? 'paddingLeft' : 'paddingRight';
|
|
321
253
|
this._element.style[property] = `${scrollbarWidth}px`;
|
|
322
254
|
}
|
|
323
|
-
|
|
324
255
|
if (!isBodyOverflowing && isModalOverflowing) {
|
|
325
|
-
const property =
|
|
256
|
+
const property = index_js.isRTL() ? 'paddingRight' : 'paddingLeft';
|
|
326
257
|
this._element.style[property] = `${scrollbarWidth}px`;
|
|
327
258
|
}
|
|
328
259
|
}
|
|
329
|
-
|
|
330
260
|
_resetAdjustments() {
|
|
331
261
|
this._element.style.paddingLeft = '';
|
|
332
262
|
this._element.style.paddingRight = '';
|
|
333
|
-
}
|
|
334
|
-
|
|
263
|
+
}
|
|
335
264
|
|
|
265
|
+
// Static
|
|
336
266
|
static jQueryInterface(config, relatedTarget) {
|
|
337
267
|
return this.each(function () {
|
|
338
268
|
const data = Modal.getOrCreateInstance(this, config);
|
|
339
|
-
|
|
340
269
|
if (typeof config !== 'string') {
|
|
341
270
|
return;
|
|
342
271
|
}
|
|
343
|
-
|
|
344
272
|
if (typeof data[config] === 'undefined') {
|
|
345
273
|
throw new TypeError(`No method named "${config}"`);
|
|
346
274
|
}
|
|
347
|
-
|
|
348
275
|
data[config](relatedTarget);
|
|
349
276
|
});
|
|
350
277
|
}
|
|
351
|
-
|
|
352
278
|
}
|
|
279
|
+
|
|
353
280
|
/**
|
|
354
281
|
* Data API implementation
|
|
355
282
|
*/
|
|
356
283
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
const target = index.getElementFromSelector(this);
|
|
360
|
-
|
|
284
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
285
|
+
const target = SelectorEngine.getElementFromSelector(this);
|
|
361
286
|
if (['A', 'AREA'].includes(this.tagName)) {
|
|
362
287
|
event.preventDefault();
|
|
363
288
|
}
|
|
364
|
-
|
|
365
|
-
EventHandler__default.default.one(target, EVENT_SHOW, showEvent => {
|
|
289
|
+
EventHandler.one(target, EVENT_SHOW, showEvent => {
|
|
366
290
|
if (showEvent.defaultPrevented) {
|
|
367
291
|
// only register focus restorer if modal will actually get shown
|
|
368
292
|
return;
|
|
369
293
|
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
if (index.isVisible(this)) {
|
|
294
|
+
EventHandler.one(target, EVENT_HIDDEN, () => {
|
|
295
|
+
if (index_js.isVisible(this)) {
|
|
373
296
|
this.focus();
|
|
374
297
|
}
|
|
375
298
|
});
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
|
|
299
|
+
});
|
|
379
300
|
|
|
301
|
+
// avoid conflict when clicking modal toggler while another one is open
|
|
302
|
+
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
|
|
380
303
|
if (alreadyOpen) {
|
|
381
304
|
Modal.getInstance(alreadyOpen).hide();
|
|
382
305
|
}
|
|
383
|
-
|
|
384
306
|
const data = Modal.getOrCreateInstance(target);
|
|
385
307
|
data.toggle(this);
|
|
386
308
|
});
|
|
387
|
-
|
|
309
|
+
componentFunctions_js.enableDismissTrigger(Modal);
|
|
310
|
+
|
|
388
311
|
/**
|
|
389
312
|
* jQuery
|
|
390
313
|
*/
|
|
391
314
|
|
|
392
|
-
|
|
315
|
+
index_js.defineJQueryPlugin(Modal);
|
|
393
316
|
|
|
394
317
|
return Modal;
|
|
395
318
|
|