bootstrap 5.1.3 → 5.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -4
- data/assets/javascripts/bootstrap/alert.js +11 -146
- data/assets/javascripts/bootstrap/base-component.js +37 -120
- data/assets/javascripts/bootstrap/button.js +10 -74
- data/assets/javascripts/bootstrap/carousel.js +213 -485
- data/assets/javascripts/bootstrap/collapse.js +65 -249
- data/assets/javascripts/bootstrap/dom/data.js +3 -5
- data/assets/javascripts/bootstrap/dom/event-handler.js +94 -132
- data/assets/javascripts/bootstrap/dom/manipulator.js +23 -27
- data/assets/javascripts/bootstrap/dom/selector-engine.js +16 -58
- data/assets/javascripts/bootstrap/dropdown.js +103 -317
- data/assets/javascripts/bootstrap/modal.js +107 -749
- data/assets/javascripts/bootstrap/offcanvas.js +90 -659
- data/assets/javascripts/bootstrap/popover.js +36 -118
- data/assets/javascripts/bootstrap/scrollspy.js +183 -262
- data/assets/javascripts/bootstrap/tab.js +215 -214
- data/assets/javascripts/bootstrap/toast.js +28 -214
- data/assets/javascripts/bootstrap/tooltip.js +272 -611
- data/assets/javascripts/bootstrap/util/backdrop.js +165 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +46 -0
- data/assets/javascripts/bootstrap/util/config.js +79 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +129 -0
- data/assets/javascripts/bootstrap/util/index.js +350 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +122 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +138 -0
- data/assets/javascripts/bootstrap/util/swipe.js +155 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +177 -0
- data/assets/javascripts/bootstrap-global-this-define.js +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +10 -1
- data/assets/javascripts/bootstrap.js +2077 -1859
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +3 -6
- data/assets/stylesheets/_bootstrap-reboot.scss +3 -7
- data/assets/stylesheets/_bootstrap.scss +4 -6
- data/assets/stylesheets/bootstrap/_accordion.scss +56 -25
- data/assets/stylesheets/bootstrap/_alert.scss +18 -4
- data/assets/stylesheets/bootstrap/_badge.scss +14 -5
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -10
- data/assets/stylesheets/bootstrap/_button-group.scss +4 -1
- data/assets/stylesheets/bootstrap/_buttons.scss +120 -30
- data/assets/stylesheets/bootstrap/_card.scss +55 -37
- data/assets/stylesheets/bootstrap/_close.scss +1 -1
- data/assets/stylesheets/bootstrap/_containers.scss +1 -1
- data/assets/stylesheets/bootstrap/_dropdown.scss +85 -76
- data/assets/stylesheets/bootstrap/_functions.scss +8 -8
- data/assets/stylesheets/bootstrap/_grid.scss +3 -3
- data/assets/stylesheets/bootstrap/_helpers.scss +1 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +48 -30
- data/assets/stylesheets/bootstrap/_maps.scss +54 -0
- data/assets/stylesheets/bootstrap/_modal.scss +71 -43
- data/assets/stylesheets/bootstrap/_nav.scss +53 -20
- data/assets/stylesheets/bootstrap/_navbar.scss +93 -150
- data/assets/stylesheets/bootstrap/_offcanvas.scss +120 -59
- data/assets/stylesheets/bootstrap/_pagination.scss +66 -21
- data/assets/stylesheets/bootstrap/_placeholders.scss +1 -1
- data/assets/stylesheets/bootstrap/_popover.scss +90 -52
- data/assets/stylesheets/bootstrap/_progress.scss +20 -9
- data/assets/stylesheets/bootstrap/_reboot.scss +25 -40
- data/assets/stylesheets/bootstrap/_root.scss +40 -21
- data/assets/stylesheets/bootstrap/_spinners.scss +38 -22
- data/assets/stylesheets/bootstrap/_tables.scss +32 -23
- data/assets/stylesheets/bootstrap/_toasts.scss +36 -16
- data/assets/stylesheets/bootstrap/_tooltip.scss +61 -56
- data/assets/stylesheets/bootstrap/_type.scss +2 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +43 -26
- data/assets/stylesheets/bootstrap/_variables.scss +128 -135
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +3 -6
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +15 -3
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +28 -5
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +12 -37
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +0 -1
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +19 -8
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +10 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_position.scss +7 -1
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +7 -3
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +9 -0
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +8 -8
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +32 -95
- data/assets/stylesheets/bootstrap/mixins/_container.scss +4 -2
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +18 -10
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +12 -12
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +4 -25
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +12 -9
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +13 -5
- data/bootstrap.gemspec +1 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +10 -5
- metadata +16 -4
@@ -1,43 +1,22 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap event-handler.js v5.1
|
3
|
-
* Copyright 2011-
|
2
|
+
* Bootstrap event-handler.js v5.2.1 (https://getbootstrap.com/)
|
3
|
+
* Copyright 2011-2022 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() :
|
8
|
-
typeof define === 'function' && define.amd ? define(factory) :
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory());
|
10
|
-
})(this, (function () { 'use strict';
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index));
|
10
|
+
})(this, (function (index) { 'use strict';
|
11
11
|
|
12
12
|
/**
|
13
13
|
* --------------------------------------------------------------------------
|
14
|
-
* Bootstrap (v5.1
|
14
|
+
* Bootstrap (v5.2.1): dom/event-handler.js
|
15
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
16
16
|
* --------------------------------------------------------------------------
|
17
17
|
*/
|
18
|
-
|
19
|
-
const getjQuery = () => {
|
20
|
-
const {
|
21
|
-
jQuery
|
22
|
-
} = window;
|
23
|
-
|
24
|
-
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
25
|
-
return jQuery;
|
26
|
-
}
|
27
|
-
|
28
|
-
return null;
|
29
|
-
};
|
30
|
-
|
31
18
|
/**
|
32
|
-
* --------------------------------------------------------------------------
|
33
|
-
* Bootstrap (v5.1.3): dom/event-handler.js
|
34
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
35
|
-
* --------------------------------------------------------------------------
|
36
|
-
*/
|
37
|
-
/**
|
38
|
-
* ------------------------------------------------------------------------
|
39
19
|
* Constants
|
40
|
-
* ------------------------------------------------------------------------
|
41
20
|
*/
|
42
21
|
|
43
22
|
const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
|
@@ -50,20 +29,17 @@
|
|
50
29
|
mouseenter: 'mouseover',
|
51
30
|
mouseleave: 'mouseout'
|
52
31
|
};
|
53
|
-
const customEventsRegex = /^(mouseenter|mouseleave)/i;
|
54
32
|
const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
|
55
33
|
/**
|
56
|
-
* ------------------------------------------------------------------------
|
57
34
|
* Private methods
|
58
|
-
* ------------------------------------------------------------------------
|
59
35
|
*/
|
60
36
|
|
61
|
-
function
|
37
|
+
function makeEventUid(element, uid) {
|
62
38
|
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
|
63
39
|
}
|
64
40
|
|
65
|
-
function
|
66
|
-
const uid =
|
41
|
+
function getElementEvents(element) {
|
42
|
+
const uid = makeEventUid(element);
|
67
43
|
element.uidEvent = uid;
|
68
44
|
eventRegistry[uid] = eventRegistry[uid] || {};
|
69
45
|
return eventRegistry[uid];
|
@@ -71,7 +47,9 @@
|
|
71
47
|
|
72
48
|
function bootstrapHandler(element, fn) {
|
73
49
|
return function handler(event) {
|
74
|
-
event
|
50
|
+
hydrateObj(event, {
|
51
|
+
delegateTarget: element
|
52
|
+
});
|
75
53
|
|
76
54
|
if (handler.oneOff) {
|
77
55
|
EventHandler.off(element, event.type, fn);
|
@@ -88,65 +66,52 @@
|
|
88
66
|
for (let {
|
89
67
|
target
|
90
68
|
} = event; target && target !== this; target = target.parentNode) {
|
91
|
-
for (
|
92
|
-
if (
|
93
|
-
|
69
|
+
for (const domElement of domElements) {
|
70
|
+
if (domElement !== target) {
|
71
|
+
continue;
|
72
|
+
}
|
94
73
|
|
95
|
-
|
96
|
-
|
97
|
-
|
74
|
+
hydrateObj(event, {
|
75
|
+
delegateTarget: target
|
76
|
+
});
|
98
77
|
|
99
|
-
|
78
|
+
if (handler.oneOff) {
|
79
|
+
EventHandler.off(element, event.type, selector, fn);
|
100
80
|
}
|
101
|
-
}
|
102
|
-
} // To please ESLint
|
103
81
|
|
104
|
-
|
105
|
-
|
82
|
+
return fn.apply(target, [event]);
|
83
|
+
}
|
84
|
+
}
|
106
85
|
};
|
107
86
|
}
|
108
87
|
|
109
|
-
function findHandler(events,
|
110
|
-
|
111
|
-
|
112
|
-
for (let i = 0, len = uidEventList.length; i < len; i++) {
|
113
|
-
const event = events[uidEventList[i]];
|
114
|
-
|
115
|
-
if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
|
116
|
-
return event;
|
117
|
-
}
|
118
|
-
}
|
119
|
-
|
120
|
-
return null;
|
88
|
+
function findHandler(events, callable, delegationSelector = null) {
|
89
|
+
return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
|
121
90
|
}
|
122
91
|
|
123
|
-
function
|
124
|
-
const
|
125
|
-
|
92
|
+
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
|
93
|
+
const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check
|
94
|
+
|
95
|
+
const callable = isDelegated ? delegationFunction : handler || delegationFunction;
|
126
96
|
let typeEvent = getTypeEvent(originalTypeEvent);
|
127
|
-
const isNative = nativeEvents.has(typeEvent);
|
128
97
|
|
129
|
-
if (!
|
98
|
+
if (!nativeEvents.has(typeEvent)) {
|
130
99
|
typeEvent = originalTypeEvent;
|
131
100
|
}
|
132
101
|
|
133
|
-
return [
|
102
|
+
return [isDelegated, callable, typeEvent];
|
134
103
|
}
|
135
104
|
|
136
|
-
function addHandler(element, originalTypeEvent, handler,
|
105
|
+
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
|
137
106
|
if (typeof originalTypeEvent !== 'string' || !element) {
|
138
107
|
return;
|
139
108
|
}
|
140
109
|
|
141
|
-
|
142
|
-
handler = delegationFn;
|
143
|
-
delegationFn = null;
|
144
|
-
} // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
|
110
|
+
let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
|
145
111
|
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
|
146
112
|
|
147
|
-
|
148
|
-
|
149
|
-
const wrapFn = fn => {
|
113
|
+
if (originalTypeEvent in customEvents) {
|
114
|
+
const wrapFunction = fn => {
|
150
115
|
return function (event) {
|
151
116
|
if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
|
152
117
|
return fn.call(this, event);
|
@@ -154,31 +119,26 @@
|
|
154
119
|
};
|
155
120
|
};
|
156
121
|
|
157
|
-
|
158
|
-
delegationFn = wrapFn(delegationFn);
|
159
|
-
} else {
|
160
|
-
handler = wrapFn(handler);
|
161
|
-
}
|
122
|
+
callable = wrapFunction(callable);
|
162
123
|
}
|
163
124
|
|
164
|
-
const
|
165
|
-
const events = getEvent(element);
|
125
|
+
const events = getElementEvents(element);
|
166
126
|
const handlers = events[typeEvent] || (events[typeEvent] = {});
|
167
|
-
const
|
127
|
+
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
|
168
128
|
|
169
|
-
if (
|
170
|
-
|
129
|
+
if (previousFunction) {
|
130
|
+
previousFunction.oneOff = previousFunction.oneOff && oneOff;
|
171
131
|
return;
|
172
132
|
}
|
173
133
|
|
174
|
-
const uid =
|
175
|
-
const fn =
|
176
|
-
fn.delegationSelector =
|
177
|
-
fn.
|
134
|
+
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
|
135
|
+
const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
|
136
|
+
fn.delegationSelector = isDelegated ? handler : null;
|
137
|
+
fn.callable = callable;
|
178
138
|
fn.oneOff = oneOff;
|
179
139
|
fn.uidEvent = uid;
|
180
140
|
handlers[uid] = fn;
|
181
|
-
element.addEventListener(typeEvent, fn,
|
141
|
+
element.addEventListener(typeEvent, fn, isDelegated);
|
182
142
|
}
|
183
143
|
|
184
144
|
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
|
@@ -194,12 +154,13 @@
|
|
194
154
|
|
195
155
|
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
|
196
156
|
const storeElementEvent = events[typeEvent] || {};
|
197
|
-
|
157
|
+
|
158
|
+
for (const handlerKey of Object.keys(storeElementEvent)) {
|
198
159
|
if (handlerKey.includes(namespace)) {
|
199
160
|
const event = storeElementEvent[handlerKey];
|
200
|
-
removeHandler(element, events, typeEvent, event.
|
161
|
+
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
|
201
162
|
}
|
202
|
-
}
|
163
|
+
}
|
203
164
|
}
|
204
165
|
|
205
166
|
function getTypeEvent(event) {
|
@@ -209,49 +170,49 @@
|
|
209
170
|
}
|
210
171
|
|
211
172
|
const EventHandler = {
|
212
|
-
on(element, event, handler,
|
213
|
-
addHandler(element, event, handler,
|
173
|
+
on(element, event, handler, delegationFunction) {
|
174
|
+
addHandler(element, event, handler, delegationFunction, false);
|
214
175
|
},
|
215
176
|
|
216
|
-
one(element, event, handler,
|
217
|
-
addHandler(element, event, handler,
|
177
|
+
one(element, event, handler, delegationFunction) {
|
178
|
+
addHandler(element, event, handler, delegationFunction, true);
|
218
179
|
},
|
219
180
|
|
220
|
-
off(element, originalTypeEvent, handler,
|
181
|
+
off(element, originalTypeEvent, handler, delegationFunction) {
|
221
182
|
if (typeof originalTypeEvent !== 'string' || !element) {
|
222
183
|
return;
|
223
184
|
}
|
224
185
|
|
225
|
-
const [
|
186
|
+
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
|
226
187
|
const inNamespace = typeEvent !== originalTypeEvent;
|
227
|
-
const events =
|
188
|
+
const events = getElementEvents(element);
|
189
|
+
const storeElementEvent = events[typeEvent] || {};
|
228
190
|
const isNamespace = originalTypeEvent.startsWith('.');
|
229
191
|
|
230
|
-
if (typeof
|
192
|
+
if (typeof callable !== 'undefined') {
|
231
193
|
// Simplest case: handler is passed, remove that listener ONLY.
|
232
|
-
if (!
|
194
|
+
if (!Object.keys(storeElementEvent).length) {
|
233
195
|
return;
|
234
196
|
}
|
235
197
|
|
236
|
-
removeHandler(element, events, typeEvent,
|
198
|
+
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
|
237
199
|
return;
|
238
200
|
}
|
239
201
|
|
240
202
|
if (isNamespace) {
|
241
|
-
Object.keys(events)
|
203
|
+
for (const elementEvent of Object.keys(events)) {
|
242
204
|
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
|
243
|
-
}
|
205
|
+
}
|
244
206
|
}
|
245
207
|
|
246
|
-
const
|
247
|
-
Object.keys(storeElementEvent).forEach(keyHandlers => {
|
208
|
+
for (const keyHandlers of Object.keys(storeElementEvent)) {
|
248
209
|
const handlerKey = keyHandlers.replace(stripUidRegex, '');
|
249
210
|
|
250
211
|
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
|
251
212
|
const event = storeElementEvent[keyHandlers];
|
252
|
-
removeHandler(element, events, typeEvent, event.
|
213
|
+
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
|
253
214
|
}
|
254
|
-
}
|
215
|
+
}
|
255
216
|
},
|
256
217
|
|
257
218
|
trigger(element, event, args) {
|
@@ -259,15 +220,13 @@
|
|
259
220
|
return null;
|
260
221
|
}
|
261
222
|
|
262
|
-
const $ = getjQuery();
|
223
|
+
const $ = index.getjQuery();
|
263
224
|
const typeEvent = getTypeEvent(event);
|
264
225
|
const inNamespace = event !== typeEvent;
|
265
|
-
|
266
|
-
let jQueryEvent;
|
226
|
+
let jQueryEvent = null;
|
267
227
|
let bubbles = true;
|
268
228
|
let nativeDispatch = true;
|
269
229
|
let defaultPrevented = false;
|
270
|
-
let evt = null;
|
271
230
|
|
272
231
|
if (inNamespace && $) {
|
273
232
|
jQueryEvent = $.Event(event, args);
|
@@ -277,27 +236,11 @@
|
|
277
236
|
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
278
237
|
}
|
279
238
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
}
|
284
|
-
|
285
|
-
bubbles,
|
286
|
-
cancelable: true
|
287
|
-
});
|
288
|
-
} // merge custom information in our event
|
289
|
-
|
290
|
-
|
291
|
-
if (typeof args !== 'undefined') {
|
292
|
-
Object.keys(args).forEach(key => {
|
293
|
-
Object.defineProperty(evt, key, {
|
294
|
-
get() {
|
295
|
-
return args[key];
|
296
|
-
}
|
297
|
-
|
298
|
-
});
|
299
|
-
});
|
300
|
-
}
|
239
|
+
let evt = new Event(event, {
|
240
|
+
bubbles,
|
241
|
+
cancelable: true
|
242
|
+
});
|
243
|
+
evt = hydrateObj(evt, args);
|
301
244
|
|
302
245
|
if (defaultPrevented) {
|
303
246
|
evt.preventDefault();
|
@@ -307,7 +250,7 @@
|
|
307
250
|
element.dispatchEvent(evt);
|
308
251
|
}
|
309
252
|
|
310
|
-
if (evt.defaultPrevented &&
|
253
|
+
if (evt.defaultPrevented && jQueryEvent) {
|
311
254
|
jQueryEvent.preventDefault();
|
312
255
|
}
|
313
256
|
|
@@ -316,6 +259,25 @@
|
|
316
259
|
|
317
260
|
};
|
318
261
|
|
262
|
+
function hydrateObj(obj, meta) {
|
263
|
+
for (const [key, value] of Object.entries(meta || {})) {
|
264
|
+
try {
|
265
|
+
obj[key] = value;
|
266
|
+
} catch (_unused) {
|
267
|
+
Object.defineProperty(obj, key, {
|
268
|
+
configurable: true,
|
269
|
+
|
270
|
+
get() {
|
271
|
+
return value;
|
272
|
+
}
|
273
|
+
|
274
|
+
});
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
return obj;
|
279
|
+
}
|
280
|
+
|
319
281
|
return EventHandler;
|
320
282
|
|
321
283
|
}));
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap manipulator.js v5.1
|
3
|
-
* Copyright 2011-
|
2
|
+
* Bootstrap manipulator.js v5.2.1 (https://getbootstrap.com/)
|
3
|
+
* Copyright 2011-2022 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) {
|
@@ -11,28 +11,36 @@
|
|
11
11
|
|
12
12
|
/**
|
13
13
|
* --------------------------------------------------------------------------
|
14
|
-
* Bootstrap (v5.1
|
14
|
+
* Bootstrap (v5.2.1): dom/manipulator.js
|
15
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
16
16
|
* --------------------------------------------------------------------------
|
17
17
|
*/
|
18
|
-
function normalizeData(
|
19
|
-
if (
|
18
|
+
function normalizeData(value) {
|
19
|
+
if (value === 'true') {
|
20
20
|
return true;
|
21
21
|
}
|
22
22
|
|
23
|
-
if (
|
23
|
+
if (value === 'false') {
|
24
24
|
return false;
|
25
25
|
}
|
26
26
|
|
27
|
-
if (
|
28
|
-
return Number(
|
27
|
+
if (value === Number(value).toString()) {
|
28
|
+
return Number(value);
|
29
29
|
}
|
30
30
|
|
31
|
-
if (
|
31
|
+
if (value === '' || value === 'null') {
|
32
32
|
return null;
|
33
33
|
}
|
34
34
|
|
35
|
-
|
35
|
+
if (typeof value !== 'string') {
|
36
|
+
return value;
|
37
|
+
}
|
38
|
+
|
39
|
+
try {
|
40
|
+
return JSON.parse(decodeURIComponent(value));
|
41
|
+
} catch (_unused) {
|
42
|
+
return value;
|
43
|
+
}
|
36
44
|
}
|
37
45
|
|
38
46
|
function normalizeDataKey(key) {
|
@@ -54,31 +62,19 @@
|
|
54
62
|
}
|
55
63
|
|
56
64
|
const attributes = {};
|
57
|
-
Object.keys(element.dataset).filter(key => key.startsWith('bs')
|
65
|
+
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
|
66
|
+
|
67
|
+
for (const key of bsKeys) {
|
58
68
|
let pureKey = key.replace(/^bs/, '');
|
59
69
|
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
|
60
70
|
attributes[pureKey] = normalizeData(element.dataset[key]);
|
61
|
-
}
|
71
|
+
}
|
72
|
+
|
62
73
|
return attributes;
|
63
74
|
},
|
64
75
|
|
65
76
|
getDataAttribute(element, key) {
|
66
77
|
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
|
67
|
-
},
|
68
|
-
|
69
|
-
offset(element) {
|
70
|
-
const rect = element.getBoundingClientRect();
|
71
|
-
return {
|
72
|
-
top: rect.top + window.pageYOffset,
|
73
|
-
left: rect.left + window.pageXOffset
|
74
|
-
};
|
75
|
-
},
|
76
|
-
|
77
|
-
position(element) {
|
78
|
-
return {
|
79
|
-
top: element.offsetTop,
|
80
|
-
left: element.offsetLeft
|
81
|
-
};
|
82
78
|
}
|
83
79
|
|
84
80
|
};
|
@@ -1,64 +1,24 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap selector-engine.js v5.1
|
3
|
-
* Copyright 2011-
|
2
|
+
* Bootstrap selector-engine.js v5.2.1 (https://getbootstrap.com/)
|
3
|
+
* Copyright 2011-2022 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() :
|
8
|
-
typeof define === 'function' && define.amd ? define(factory) :
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory());
|
10
|
-
})(this, (function () { 'use strict';
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory(global.Index));
|
10
|
+
})(this, (function (index) { 'use strict';
|
11
11
|
|
12
12
|
/**
|
13
13
|
* --------------------------------------------------------------------------
|
14
|
-
* Bootstrap (v5.1
|
14
|
+
* Bootstrap (v5.2.1): dom/selector-engine.js
|
15
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
16
16
|
* --------------------------------------------------------------------------
|
17
17
|
*/
|
18
|
-
|
19
|
-
const isElement = obj => {
|
20
|
-
if (!obj || typeof obj !== 'object') {
|
21
|
-
return false;
|
22
|
-
}
|
23
|
-
|
24
|
-
if (typeof obj.jquery !== 'undefined') {
|
25
|
-
obj = obj[0];
|
26
|
-
}
|
27
|
-
|
28
|
-
return typeof obj.nodeType !== 'undefined';
|
29
|
-
};
|
30
|
-
|
31
|
-
const isVisible = element => {
|
32
|
-
if (!isElement(element) || element.getClientRects().length === 0) {
|
33
|
-
return false;
|
34
|
-
}
|
35
|
-
|
36
|
-
return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
37
|
-
};
|
38
|
-
|
39
|
-
const isDisabled = element => {
|
40
|
-
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
41
|
-
return true;
|
42
|
-
}
|
43
|
-
|
44
|
-
if (element.classList.contains('disabled')) {
|
45
|
-
return true;
|
46
|
-
}
|
47
|
-
|
48
|
-
if (typeof element.disabled !== 'undefined') {
|
49
|
-
return element.disabled;
|
50
|
-
}
|
51
|
-
|
52
|
-
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
53
|
-
};
|
54
|
-
|
55
18
|
/**
|
56
|
-
*
|
57
|
-
* Bootstrap (v5.1.3): dom/selector-engine.js
|
58
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
59
|
-
* --------------------------------------------------------------------------
|
19
|
+
* Constants
|
60
20
|
*/
|
61
|
-
|
21
|
+
|
62
22
|
const SelectorEngine = {
|
63
23
|
find(selector, element = document.documentElement) {
|
64
24
|
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
|
@@ -74,14 +34,11 @@
|
|
74
34
|
|
75
35
|
parents(element, selector) {
|
76
36
|
const parents = [];
|
77
|
-
let ancestor = element.parentNode;
|
78
|
-
|
79
|
-
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
|
80
|
-
if (ancestor.matches(selector)) {
|
81
|
-
parents.push(ancestor);
|
82
|
-
}
|
37
|
+
let ancestor = element.parentNode.closest(selector);
|
83
38
|
|
84
|
-
|
39
|
+
while (ancestor) {
|
40
|
+
parents.push(ancestor);
|
41
|
+
ancestor = ancestor.parentNode.closest(selector);
|
85
42
|
}
|
86
43
|
|
87
44
|
return parents;
|
@@ -101,6 +58,7 @@
|
|
101
58
|
return [];
|
102
59
|
},
|
103
60
|
|
61
|
+
// TODO: this is now unused; remove later along with prev()
|
104
62
|
next(element, selector) {
|
105
63
|
let next = element.nextElementSibling;
|
106
64
|
|
@@ -116,8 +74,8 @@
|
|
116
74
|
},
|
117
75
|
|
118
76
|
focusableChildren(element) {
|
119
|
-
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',
|
120
|
-
return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
|
77
|
+
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
|
78
|
+
return this.find(focusables, element).filter(el => !index.isDisabled(el) && index.isVisible(el));
|
121
79
|
}
|
122
80
|
|
123
81
|
};
|