bootstrap 5.1.3 → 5.3.5
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 +61 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -0
- data/README.md +35 -14
- data/Rakefile +16 -5
- data/assets/javascripts/bootstrap/alert.js +22 -167
- data/assets/javascripts/bootstrap/base-component.js +34 -133
- data/assets/javascripts/bootstrap/button.js +19 -86
- data/assets/javascripts/bootstrap/carousel.js +209 -564
- data/assets/javascripts/bootstrap/collapse.js +78 -324
- data/assets/javascripts/bootstrap/dom/data.js +8 -14
- data/assets/javascripts/bootstrap/dom/event-handler.js +89 -174
- data/assets/javascripts/bootstrap/dom/manipulator.js +22 -39
- data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -71
- data/assets/javascripts/bootstrap/dropdown.js +135 -420
- data/assets/javascripts/bootstrap/modal.js +115 -837
- data/assets/javascripts/bootstrap/offcanvas.js +93 -714
- data/assets/javascripts/bootstrap/popover.js +42 -130
- data/assets/javascripts/bootstrap/scrollspy.js +180 -296
- data/assets/javascripts/bootstrap/tab.js +197 -245
- data/assets/javascripts/bootstrap/toast.js +52 -276
- data/assets/javascripts/bootstrap/tooltip.js +283 -744
- data/assets/javascripts/bootstrap/util/backdrop.js +138 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
- data/assets/javascripts/bootstrap/util/config.js +67 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +112 -0
- data/assets/javascripts/bootstrap/util/index.js +280 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +113 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
- data/assets/javascripts/bootstrap/util/swipe.js +134 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
- data/assets/javascripts/bootstrap-global-this-define.js +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +15 -6
- data/assets/javascripts/bootstrap.js +2278 -2831
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +4 -9
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
- data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
- data/assets/stylesheets/_bootstrap.scss +5 -6
- data/assets/stylesheets/bootstrap/_accordion.scss +68 -33
- data/assets/stylesheets/bootstrap/_alert.scss +25 -14
- data/assets/stylesheets/bootstrap/_badge.scss +14 -5
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -10
- data/assets/stylesheets/bootstrap/_button-group.scss +12 -4
- data/assets/stylesheets/bootstrap/_buttons.scss +133 -28
- data/assets/stylesheets/bootstrap/_card.scss +61 -39
- data/assets/stylesheets/bootstrap/_carousel.scss +22 -25
- data/assets/stylesheets/bootstrap/_close.scss +36 -10
- data/assets/stylesheets/bootstrap/_containers.scss +1 -1
- data/assets/stylesheets/bootstrap/_dropdown.scss +86 -76
- data/assets/stylesheets/bootstrap/_functions.scss +10 -10
- data/assets/stylesheets/bootstrap/_grid.scss +9 -3
- data/assets/stylesheets/bootstrap/_helpers.scss +3 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +81 -56
- data/assets/stylesheets/bootstrap/_maps.scss +174 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
- data/assets/stylesheets/bootstrap/_modal.scss +76 -45
- data/assets/stylesheets/bootstrap/_nav.scss +87 -29
- data/assets/stylesheets/bootstrap/_navbar.scss +102 -148
- data/assets/stylesheets/bootstrap/_offcanvas.scss +125 -61
- 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 +31 -11
- data/assets/stylesheets/bootstrap/_reboot.scss +32 -46
- data/assets/stylesheets/bootstrap/_root.scss +155 -22
- data/assets/stylesheets/bootstrap/_spinners.scss +38 -22
- data/assets/stylesheets/bootstrap/_tables.scss +40 -24
- data/assets/stylesheets/bootstrap/_toasts.scss +38 -16
- data/assets/stylesheets/bootstrap/_tooltip.scss +60 -56
- data/assets/stylesheets/bootstrap/_type.scss +3 -1
- data/assets/stylesheets/bootstrap/_utilities.scss +209 -33
- data/assets/stylesheets/bootstrap/_variables-dark.scss +102 -0
- data/assets/stylesheets/bootstrap/_variables.scss +415 -303
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +39 -5
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +51 -14
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +36 -41
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +12 -4
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +20 -9
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
- 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/helpers/_position.scss +7 -1
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -4
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +8 -8
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +32 -95
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +4 -2
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +38 -19
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +15 -15
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- 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 +14 -6
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +6 -2
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
- data/bootstrap.gemspec +3 -3
- data/lib/bootstrap/engine.rb +17 -2
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +10 -5
- data/tasks/updater/network.rb +2 -2
- data/tasks/updater/scss.rb +2 -2
- data/tasks/updater.rb +2 -2
- data/test/dummy_rails/config/application.rb +0 -2
- data/test/dummy_rails/public/favicon.ico +0 -0
- data/test/gemfiles/rails_4_2.gemfile +2 -1
- data/test/gemfiles/rails_5_0.gemfile +1 -2
- data/test/gemfiles/rails_5_1.gemfile +1 -2
- data/test/gemfiles/rails_5_2.gemfile +7 -0
- data/test/gemfiles/rails_6_0.gemfile +1 -1
- data/test/gemfiles/rails_6_1.gemfile +1 -1
- data/test/gemfiles/rails_7_0_dartsass.gemfile +7 -0
- data/test/gemfiles/rails_7_0_sassc.gemfile +7 -0
- data/test/rails_test.rb +0 -5
- data/test/test_helper.rb +3 -2
- metadata +49 -29
- data/.travis.yml +0 -32
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -18
|
@@ -1,274 +1,197 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap event-handler.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap event-handler.js v5.3.5 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2025 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.js')) :
|
|
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_js) { 'use strict';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* --------------------------------------------------------------------------
|
|
14
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap dom/event-handler.js
|
|
15
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
16
16
|
* --------------------------------------------------------------------------
|
|
17
17
|
*/
|
|
18
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
19
|
|
|
31
20
|
/**
|
|
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
21
|
* Constants
|
|
40
|
-
* ------------------------------------------------------------------------
|
|
41
22
|
*/
|
|
42
23
|
|
|
43
24
|
const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
|
|
44
25
|
const stripNameRegex = /\..*/;
|
|
45
26
|
const stripUidRegex = /::\d+$/;
|
|
46
27
|
const eventRegistry = {}; // Events storage
|
|
47
|
-
|
|
48
28
|
let uidEvent = 1;
|
|
49
29
|
const customEvents = {
|
|
50
30
|
mouseenter: 'mouseover',
|
|
51
31
|
mouseleave: 'mouseout'
|
|
52
32
|
};
|
|
53
|
-
const customEventsRegex = /^(mouseenter|mouseleave)/i;
|
|
54
33
|
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']);
|
|
34
|
+
|
|
55
35
|
/**
|
|
56
|
-
* ------------------------------------------------------------------------
|
|
57
36
|
* Private methods
|
|
58
|
-
* ------------------------------------------------------------------------
|
|
59
37
|
*/
|
|
60
38
|
|
|
61
|
-
function
|
|
39
|
+
function makeEventUid(element, uid) {
|
|
62
40
|
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
|
|
63
41
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const uid = getUidEvent(element);
|
|
42
|
+
function getElementEvents(element) {
|
|
43
|
+
const uid = makeEventUid(element);
|
|
67
44
|
element.uidEvent = uid;
|
|
68
45
|
eventRegistry[uid] = eventRegistry[uid] || {};
|
|
69
46
|
return eventRegistry[uid];
|
|
70
47
|
}
|
|
71
|
-
|
|
72
48
|
function bootstrapHandler(element, fn) {
|
|
73
49
|
return function handler(event) {
|
|
74
|
-
event
|
|
75
|
-
|
|
50
|
+
hydrateObj(event, {
|
|
51
|
+
delegateTarget: element
|
|
52
|
+
});
|
|
76
53
|
if (handler.oneOff) {
|
|
77
54
|
EventHandler.off(element, event.type, fn);
|
|
78
55
|
}
|
|
79
|
-
|
|
80
56
|
return fn.apply(element, [event]);
|
|
81
57
|
};
|
|
82
58
|
}
|
|
83
|
-
|
|
84
59
|
function bootstrapDelegationHandler(element, selector, fn) {
|
|
85
60
|
return function handler(event) {
|
|
86
61
|
const domElements = element.querySelectorAll(selector);
|
|
87
|
-
|
|
88
62
|
for (let {
|
|
89
63
|
target
|
|
90
64
|
} = event; target && target !== this; target = target.parentNode) {
|
|
91
|
-
for (
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
65
|
+
for (const domElement of domElements) {
|
|
66
|
+
if (domElement !== target) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
hydrateObj(event, {
|
|
70
|
+
delegateTarget: target
|
|
71
|
+
});
|
|
72
|
+
if (handler.oneOff) {
|
|
73
|
+
EventHandler.off(element, event.type, selector, fn);
|
|
100
74
|
}
|
|
75
|
+
return fn.apply(target, [event]);
|
|
101
76
|
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
return null;
|
|
77
|
+
}
|
|
106
78
|
};
|
|
107
79
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const uidEventList = Object.keys(events);
|
|
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;
|
|
80
|
+
function findHandler(events, callable, delegationSelector = null) {
|
|
81
|
+
return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
|
|
121
82
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const
|
|
83
|
+
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
|
|
84
|
+
const isDelegated = typeof handler === 'string';
|
|
85
|
+
// TODO: tooltip passes `false` instead of selector, so we need to check
|
|
86
|
+
const callable = isDelegated ? delegationFunction : handler || delegationFunction;
|
|
126
87
|
let typeEvent = getTypeEvent(originalTypeEvent);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (!isNative) {
|
|
88
|
+
if (!nativeEvents.has(typeEvent)) {
|
|
130
89
|
typeEvent = originalTypeEvent;
|
|
131
90
|
}
|
|
132
|
-
|
|
133
|
-
return [delegation, originalHandler, typeEvent];
|
|
91
|
+
return [isDelegated, callable, typeEvent];
|
|
134
92
|
}
|
|
135
|
-
|
|
136
|
-
function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
|
|
93
|
+
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
|
|
137
94
|
if (typeof originalTypeEvent !== 'string' || !element) {
|
|
138
95
|
return;
|
|
139
96
|
}
|
|
97
|
+
let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
|
|
140
98
|
|
|
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
|
|
99
|
+
// in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
|
|
145
100
|
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (customEventsRegex.test(originalTypeEvent)) {
|
|
149
|
-
const wrapFn = fn => {
|
|
101
|
+
if (originalTypeEvent in customEvents) {
|
|
102
|
+
const wrapFunction = fn => {
|
|
150
103
|
return function (event) {
|
|
151
104
|
if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
|
|
152
105
|
return fn.call(this, event);
|
|
153
106
|
}
|
|
154
107
|
};
|
|
155
108
|
};
|
|
156
|
-
|
|
157
|
-
if (delegationFn) {
|
|
158
|
-
delegationFn = wrapFn(delegationFn);
|
|
159
|
-
} else {
|
|
160
|
-
handler = wrapFn(handler);
|
|
161
|
-
}
|
|
109
|
+
callable = wrapFunction(callable);
|
|
162
110
|
}
|
|
163
|
-
|
|
164
|
-
const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
|
|
165
|
-
const events = getEvent(element);
|
|
111
|
+
const events = getElementEvents(element);
|
|
166
112
|
const handlers = events[typeEvent] || (events[typeEvent] = {});
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
previousFn.oneOff = previousFn.oneOff && oneOff;
|
|
113
|
+
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
|
|
114
|
+
if (previousFunction) {
|
|
115
|
+
previousFunction.oneOff = previousFunction.oneOff && oneOff;
|
|
171
116
|
return;
|
|
172
117
|
}
|
|
173
|
-
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
fn.
|
|
177
|
-
fn.originalHandler = originalHandler;
|
|
118
|
+
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
|
|
119
|
+
const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
|
|
120
|
+
fn.delegationSelector = isDelegated ? handler : null;
|
|
121
|
+
fn.callable = callable;
|
|
178
122
|
fn.oneOff = oneOff;
|
|
179
123
|
fn.uidEvent = uid;
|
|
180
124
|
handlers[uid] = fn;
|
|
181
|
-
element.addEventListener(typeEvent, fn,
|
|
125
|
+
element.addEventListener(typeEvent, fn, isDelegated);
|
|
182
126
|
}
|
|
183
|
-
|
|
184
127
|
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
|
|
185
128
|
const fn = findHandler(events[typeEvent], handler, delegationSelector);
|
|
186
|
-
|
|
187
129
|
if (!fn) {
|
|
188
130
|
return;
|
|
189
131
|
}
|
|
190
|
-
|
|
191
132
|
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
|
|
192
133
|
delete events[typeEvent][fn.uidEvent];
|
|
193
134
|
}
|
|
194
|
-
|
|
195
135
|
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
|
|
196
136
|
const storeElementEvent = events[typeEvent] || {};
|
|
197
|
-
Object.
|
|
137
|
+
for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
|
|
198
138
|
if (handlerKey.includes(namespace)) {
|
|
199
|
-
|
|
200
|
-
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
|
|
139
|
+
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
|
|
201
140
|
}
|
|
202
|
-
}
|
|
141
|
+
}
|
|
203
142
|
}
|
|
204
|
-
|
|
205
143
|
function getTypeEvent(event) {
|
|
206
144
|
// allow to get the native events from namespaced events ('click.bs.button' --> 'click')
|
|
207
145
|
event = event.replace(stripNameRegex, '');
|
|
208
146
|
return customEvents[event] || event;
|
|
209
147
|
}
|
|
210
|
-
|
|
211
148
|
const EventHandler = {
|
|
212
|
-
on(element, event, handler,
|
|
213
|
-
addHandler(element, event, handler,
|
|
149
|
+
on(element, event, handler, delegationFunction) {
|
|
150
|
+
addHandler(element, event, handler, delegationFunction, false);
|
|
214
151
|
},
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
addHandler(element, event, handler, delegationFn, true);
|
|
152
|
+
one(element, event, handler, delegationFunction) {
|
|
153
|
+
addHandler(element, event, handler, delegationFunction, true);
|
|
218
154
|
},
|
|
219
|
-
|
|
220
|
-
off(element, originalTypeEvent, handler, delegationFn) {
|
|
155
|
+
off(element, originalTypeEvent, handler, delegationFunction) {
|
|
221
156
|
if (typeof originalTypeEvent !== 'string' || !element) {
|
|
222
157
|
return;
|
|
223
158
|
}
|
|
224
|
-
|
|
225
|
-
const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
|
|
159
|
+
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
|
|
226
160
|
const inNamespace = typeEvent !== originalTypeEvent;
|
|
227
|
-
const events =
|
|
161
|
+
const events = getElementEvents(element);
|
|
162
|
+
const storeElementEvent = events[typeEvent] || {};
|
|
228
163
|
const isNamespace = originalTypeEvent.startsWith('.');
|
|
229
|
-
|
|
230
|
-
if (typeof originalHandler !== 'undefined') {
|
|
164
|
+
if (typeof callable !== 'undefined') {
|
|
231
165
|
// Simplest case: handler is passed, remove that listener ONLY.
|
|
232
|
-
if (!
|
|
166
|
+
if (!Object.keys(storeElementEvent).length) {
|
|
233
167
|
return;
|
|
234
168
|
}
|
|
235
|
-
|
|
236
|
-
removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
|
|
169
|
+
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
|
|
237
170
|
return;
|
|
238
171
|
}
|
|
239
|
-
|
|
240
172
|
if (isNamespace) {
|
|
241
|
-
Object.keys(events)
|
|
173
|
+
for (const elementEvent of Object.keys(events)) {
|
|
242
174
|
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
|
|
243
|
-
}
|
|
175
|
+
}
|
|
244
176
|
}
|
|
245
|
-
|
|
246
|
-
const storeElementEvent = events[typeEvent] || {};
|
|
247
|
-
Object.keys(storeElementEvent).forEach(keyHandlers => {
|
|
177
|
+
for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
|
|
248
178
|
const handlerKey = keyHandlers.replace(stripUidRegex, '');
|
|
249
|
-
|
|
250
179
|
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
|
|
251
|
-
|
|
252
|
-
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
|
|
180
|
+
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
|
|
253
181
|
}
|
|
254
|
-
}
|
|
182
|
+
}
|
|
255
183
|
},
|
|
256
|
-
|
|
257
184
|
trigger(element, event, args) {
|
|
258
185
|
if (typeof event !== 'string' || !element) {
|
|
259
186
|
return null;
|
|
260
187
|
}
|
|
261
|
-
|
|
262
|
-
const $ = getjQuery();
|
|
188
|
+
const $ = index_js.getjQuery();
|
|
263
189
|
const typeEvent = getTypeEvent(event);
|
|
264
190
|
const inNamespace = event !== typeEvent;
|
|
265
|
-
|
|
266
|
-
let jQueryEvent;
|
|
191
|
+
let jQueryEvent = null;
|
|
267
192
|
let bubbles = true;
|
|
268
193
|
let nativeDispatch = true;
|
|
269
194
|
let defaultPrevented = false;
|
|
270
|
-
let evt = null;
|
|
271
|
-
|
|
272
195
|
if (inNamespace && $) {
|
|
273
196
|
jQueryEvent = $.Event(event, args);
|
|
274
197
|
$(element).trigger(jQueryEvent);
|
|
@@ -276,45 +199,37 @@
|
|
|
276
199
|
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
|
277
200
|
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
|
278
201
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
} else {
|
|
284
|
-
evt = new CustomEvent(event, {
|
|
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
|
-
}
|
|
301
|
-
|
|
202
|
+
const evt = hydrateObj(new Event(event, {
|
|
203
|
+
bubbles,
|
|
204
|
+
cancelable: true
|
|
205
|
+
}), args);
|
|
302
206
|
if (defaultPrevented) {
|
|
303
207
|
evt.preventDefault();
|
|
304
208
|
}
|
|
305
|
-
|
|
306
209
|
if (nativeDispatch) {
|
|
307
210
|
element.dispatchEvent(evt);
|
|
308
211
|
}
|
|
309
|
-
|
|
310
|
-
if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
|
|
212
|
+
if (evt.defaultPrevented && jQueryEvent) {
|
|
311
213
|
jQueryEvent.preventDefault();
|
|
312
214
|
}
|
|
313
|
-
|
|
314
215
|
return evt;
|
|
315
216
|
}
|
|
316
|
-
|
|
317
217
|
};
|
|
218
|
+
function hydrateObj(obj, meta = {}) {
|
|
219
|
+
for (const [key, value] of Object.entries(meta)) {
|
|
220
|
+
try {
|
|
221
|
+
obj[key] = value;
|
|
222
|
+
} catch (_unused) {
|
|
223
|
+
Object.defineProperty(obj, key, {
|
|
224
|
+
configurable: true,
|
|
225
|
+
get() {
|
|
226
|
+
return value;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return obj;
|
|
232
|
+
}
|
|
318
233
|
|
|
319
234
|
return EventHandler;
|
|
320
235
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap manipulator.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap manipulator.js v5.3.5 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2025 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,76 +11,59 @@
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* --------------------------------------------------------------------------
|
|
14
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap dom/manipulator.js
|
|
15
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
16
16
|
* --------------------------------------------------------------------------
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
|
|
19
|
+
function normalizeData(value) {
|
|
20
|
+
if (value === 'true') {
|
|
20
21
|
return true;
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
-
if (val === 'false') {
|
|
23
|
+
if (value === 'false') {
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return Number(val);
|
|
26
|
+
if (value === Number(value).toString()) {
|
|
27
|
+
return Number(value);
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
if (val === '' || val === 'null') {
|
|
29
|
+
if (value === '' || value === 'null') {
|
|
32
30
|
return null;
|
|
33
31
|
}
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
if (typeof value !== 'string') {
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(decodeURIComponent(value));
|
|
37
|
+
} catch (_unused) {
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
36
40
|
}
|
|
37
|
-
|
|
38
41
|
function normalizeDataKey(key) {
|
|
39
42
|
return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
|
|
40
43
|
}
|
|
41
|
-
|
|
42
44
|
const Manipulator = {
|
|
43
45
|
setDataAttribute(element, key, value) {
|
|
44
46
|
element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
|
|
45
47
|
},
|
|
46
|
-
|
|
47
48
|
removeDataAttribute(element, key) {
|
|
48
49
|
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
|
|
49
50
|
},
|
|
50
|
-
|
|
51
51
|
getDataAttributes(element) {
|
|
52
52
|
if (!element) {
|
|
53
53
|
return {};
|
|
54
54
|
}
|
|
55
|
-
|
|
56
55
|
const attributes = {};
|
|
57
|
-
Object.keys(element.dataset).filter(key => key.startsWith('bs')
|
|
56
|
+
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
|
|
57
|
+
for (const key of bsKeys) {
|
|
58
58
|
let pureKey = key.replace(/^bs/, '');
|
|
59
|
-
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1
|
|
59
|
+
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1);
|
|
60
60
|
attributes[pureKey] = normalizeData(element.dataset[key]);
|
|
61
|
-
}
|
|
61
|
+
}
|
|
62
62
|
return attributes;
|
|
63
63
|
},
|
|
64
|
-
|
|
65
64
|
getDataAttribute(element, key) {
|
|
66
65
|
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
66
|
}
|
|
83
|
-
|
|
84
67
|
};
|
|
85
68
|
|
|
86
69
|
return Manipulator;
|