bootstrap 5.2.3 → 5.3.2
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 +11 -5
- data/Gemfile +1 -0
- data/README.md +6 -2
- data/Rakefile +10 -1
- 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 -145
- data/assets/javascripts/bootstrap/modal.js +53 -133
- data/assets/javascripts/bootstrap/offcanvas.js +50 -102
- data/assets/javascripts/bootstrap/popover.js +23 -29
- data/assets/javascripts/bootstrap/scrollspy.js +53 -90
- data/assets/javascripts/bootstrap/tab.js +63 -112
- data/assets/javascripts/bootstrap/toast.js +31 -73
- data/assets/javascripts/bootstrap/tooltip.js +75 -177
- 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 +10 -10
- data/assets/javascripts/bootstrap.js +689 -1444
- 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-utilities.scss +19 -0
- data/assets/stylesheets/_bootstrap.scss +1 -0
- data/assets/stylesheets/bootstrap/_accordion.scss +9 -0
- data/assets/stylesheets/bootstrap/_alert.scss +8 -11
- data/assets/stylesheets/bootstrap/_button-group.scss +2 -2
- data/assets/stylesheets/bootstrap/_buttons.scss +3 -3
- data/assets/stylesheets/bootstrap/_card.scss +5 -0
- data/assets/stylesheets/bootstrap/_carousel.scss +20 -2
- data/assets/stylesheets/bootstrap/_close.scss +32 -9
- data/assets/stylesheets/bootstrap/_dropdown.scss +1 -0
- data/assets/stylesheets/bootstrap/_functions.scss +1 -1
- data/assets/stylesheets/bootstrap/_grid.scss +6 -0
- data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +12 -7
- data/assets/stylesheets/bootstrap/_maps.scss +120 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
- data/assets/stylesheets/bootstrap/_nav.scss +42 -17
- data/assets/stylesheets/bootstrap/_navbar.scss +15 -4
- data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -2
- data/assets/stylesheets/bootstrap/_pagination.scss +1 -1
- data/assets/stylesheets/bootstrap/_progress.scss +10 -1
- data/assets/stylesheets/bootstrap/_reboot.scss +8 -7
- data/assets/stylesheets/bootstrap/_root.scss +124 -10
- data/assets/stylesheets/bootstrap/_tables.scss +18 -11
- data/assets/stylesheets/bootstrap/_tooltip.scss +4 -5
- data/assets/stylesheets/bootstrap/_utilities.scss +175 -16
- data/assets/stylesheets/bootstrap/_variables-dark.scss +87 -0
- data/assets/stylesheets/bootstrap/_variables.scss +282 -169
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +23 -3
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +26 -12
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +24 -4
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +12 -3
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +1 -1
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +1 -4
- 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/_vr.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +4 -1
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +2 -4
- 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 +8 -7
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +5 -1
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
- data/bootstrap.gemspec +4 -3
- data/lib/bootstrap/engine.rb +7 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +1 -1
- data/tasks/updater/scss.rb +2 -2
- data/test/gemfiles/rails_4_2.gemfile +1 -1
- data/test/gemfiles/rails_5_0.gemfile +1 -1
- data/test/gemfiles/rails_5_1.gemfile +1 -1
- data/test/gemfiles/rails_5_2.gemfile +1 -1
- data/test/gemfiles/rails_6_0.gemfile +1 -0
- data/test/gemfiles/rails_6_1.gemfile +1 -0
- data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
- data/test/gemfiles/{rails_7_0.gemfile → rails_7_0_sassc.gemfile} +1 -0
- metadata +35 -15
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -18
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap dropdown.js v5.2
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap dropdown.js v5.3.2 (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('@popperjs/core'), require('./
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['@popperjs/core', './
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.
|
|
10
|
-
})(this, (function (Popper,
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['@popperjs/core', './base-component', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './util/index'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.BaseComponent, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Index));
|
|
10
|
+
})(this, (function (Popper, BaseComponent, EventHandler, Manipulator, SelectorEngine, index_js) { 'use strict';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
function _interopNamespace(e) {
|
|
15
|
-
if (e && e.__esModule) return e;
|
|
12
|
+
function _interopNamespaceDefault(e) {
|
|
16
13
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
|
|
17
14
|
if (e) {
|
|
18
15
|
for (const k in e) {
|
|
@@ -29,18 +26,16 @@
|
|
|
29
26
|
return Object.freeze(n);
|
|
30
27
|
}
|
|
31
28
|
|
|
32
|
-
const Popper__namespace = /*#__PURE__*/
|
|
33
|
-
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
34
|
-
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
35
|
-
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
36
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
29
|
+
const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
|
|
37
30
|
|
|
38
31
|
/**
|
|
39
32
|
* --------------------------------------------------------------------------
|
|
40
|
-
* Bootstrap
|
|
33
|
+
* Bootstrap dropdown.js
|
|
41
34
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
42
35
|
* --------------------------------------------------------------------------
|
|
43
36
|
*/
|
|
37
|
+
|
|
38
|
+
|
|
44
39
|
/**
|
|
45
40
|
* Constants
|
|
46
41
|
*/
|
|
@@ -74,12 +69,12 @@
|
|
|
74
69
|
const SELECTOR_NAVBAR = '.navbar';
|
|
75
70
|
const SELECTOR_NAVBAR_NAV = '.navbar-nav';
|
|
76
71
|
const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
|
|
77
|
-
const PLACEMENT_TOP =
|
|
78
|
-
const PLACEMENT_TOPEND =
|
|
79
|
-
const PLACEMENT_BOTTOM =
|
|
80
|
-
const PLACEMENT_BOTTOMEND =
|
|
81
|
-
const PLACEMENT_RIGHT =
|
|
82
|
-
const PLACEMENT_LEFT =
|
|
72
|
+
const PLACEMENT_TOP = index_js.isRTL() ? 'top-end' : 'top-start';
|
|
73
|
+
const PLACEMENT_TOPEND = index_js.isRTL() ? 'top-start' : 'top-end';
|
|
74
|
+
const PLACEMENT_BOTTOM = index_js.isRTL() ? 'bottom-end' : 'bottom-start';
|
|
75
|
+
const PLACEMENT_BOTTOMEND = index_js.isRTL() ? 'bottom-start' : 'bottom-end';
|
|
76
|
+
const PLACEMENT_RIGHT = index_js.isRTL() ? 'left-start' : 'right-start';
|
|
77
|
+
const PLACEMENT_LEFT = index_js.isRTL() ? 'right-start' : 'left-start';
|
|
83
78
|
const PLACEMENT_TOPCENTER = 'top';
|
|
84
79
|
const PLACEMENT_BOTTOMCENTER = 'bottom';
|
|
85
80
|
const Default = {
|
|
@@ -98,218 +93,172 @@
|
|
|
98
93
|
popperConfig: '(null|object|function)',
|
|
99
94
|
reference: '(string|element|object)'
|
|
100
95
|
};
|
|
96
|
+
|
|
101
97
|
/**
|
|
102
98
|
* Class definition
|
|
103
99
|
*/
|
|
104
100
|
|
|
105
|
-
class Dropdown extends
|
|
101
|
+
class Dropdown extends BaseComponent {
|
|
106
102
|
constructor(element, config) {
|
|
107
103
|
super(element, config);
|
|
108
104
|
this._popper = null;
|
|
109
105
|
this._parent = this._element.parentNode; // dropdown wrapper
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
this._menu = SelectorEngine__default.default.next(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.findOne(SELECTOR_MENU, this._parent);
|
|
106
|
+
// TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
|
|
107
|
+
this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
|
|
113
108
|
this._inNavbar = this._detectNavbar();
|
|
114
|
-
}
|
|
115
|
-
|
|
109
|
+
}
|
|
116
110
|
|
|
111
|
+
// Getters
|
|
117
112
|
static get Default() {
|
|
118
113
|
return Default;
|
|
119
114
|
}
|
|
120
|
-
|
|
121
115
|
static get DefaultType() {
|
|
122
116
|
return DefaultType;
|
|
123
117
|
}
|
|
124
|
-
|
|
125
118
|
static get NAME() {
|
|
126
119
|
return NAME;
|
|
127
|
-
}
|
|
128
|
-
|
|
120
|
+
}
|
|
129
121
|
|
|
122
|
+
// Public
|
|
130
123
|
toggle() {
|
|
131
124
|
return this._isShown() ? this.hide() : this.show();
|
|
132
125
|
}
|
|
133
|
-
|
|
134
126
|
show() {
|
|
135
|
-
if (
|
|
127
|
+
if (index_js.isDisabled(this._element) || this._isShown()) {
|
|
136
128
|
return;
|
|
137
129
|
}
|
|
138
|
-
|
|
139
130
|
const relatedTarget = {
|
|
140
131
|
relatedTarget: this._element
|
|
141
132
|
};
|
|
142
|
-
const showEvent =
|
|
143
|
-
|
|
133
|
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
|
|
144
134
|
if (showEvent.defaultPrevented) {
|
|
145
135
|
return;
|
|
146
136
|
}
|
|
137
|
+
this._createPopper();
|
|
147
138
|
|
|
148
|
-
|
|
139
|
+
// If this is a touch-enabled device we add extra
|
|
149
140
|
// empty mouseover listeners to the body's immediate children;
|
|
150
141
|
// only needed because of broken event delegation on iOS
|
|
151
142
|
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
|
152
|
-
|
|
153
|
-
|
|
154
143
|
if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
|
|
155
144
|
for (const element of [].concat(...document.body.children)) {
|
|
156
|
-
|
|
145
|
+
EventHandler.on(element, 'mouseover', index_js.noop);
|
|
157
146
|
}
|
|
158
147
|
}
|
|
159
|
-
|
|
160
148
|
this._element.focus();
|
|
161
|
-
|
|
162
149
|
this._element.setAttribute('aria-expanded', true);
|
|
163
|
-
|
|
164
150
|
this._menu.classList.add(CLASS_NAME_SHOW);
|
|
165
|
-
|
|
166
151
|
this._element.classList.add(CLASS_NAME_SHOW);
|
|
167
|
-
|
|
168
|
-
EventHandler__default.default.trigger(this._element, EVENT_SHOWN, relatedTarget);
|
|
152
|
+
EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);
|
|
169
153
|
}
|
|
170
|
-
|
|
171
154
|
hide() {
|
|
172
|
-
if (
|
|
155
|
+
if (index_js.isDisabled(this._element) || !this._isShown()) {
|
|
173
156
|
return;
|
|
174
157
|
}
|
|
175
|
-
|
|
176
158
|
const relatedTarget = {
|
|
177
159
|
relatedTarget: this._element
|
|
178
160
|
};
|
|
179
|
-
|
|
180
161
|
this._completeHide(relatedTarget);
|
|
181
162
|
}
|
|
182
|
-
|
|
183
163
|
dispose() {
|
|
184
164
|
if (this._popper) {
|
|
185
165
|
this._popper.destroy();
|
|
186
166
|
}
|
|
187
|
-
|
|
188
167
|
super.dispose();
|
|
189
168
|
}
|
|
190
|
-
|
|
191
169
|
update() {
|
|
192
170
|
this._inNavbar = this._detectNavbar();
|
|
193
|
-
|
|
194
171
|
if (this._popper) {
|
|
195
172
|
this._popper.update();
|
|
196
173
|
}
|
|
197
|
-
}
|
|
198
|
-
|
|
174
|
+
}
|
|
199
175
|
|
|
176
|
+
// Private
|
|
200
177
|
_completeHide(relatedTarget) {
|
|
201
|
-
const hideEvent =
|
|
202
|
-
|
|
178
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);
|
|
203
179
|
if (hideEvent.defaultPrevented) {
|
|
204
180
|
return;
|
|
205
|
-
}
|
|
206
|
-
// empty mouseover listeners we added for iOS support
|
|
207
|
-
|
|
181
|
+
}
|
|
208
182
|
|
|
183
|
+
// If this is a touch-enabled device we remove the extra
|
|
184
|
+
// empty mouseover listeners we added for iOS support
|
|
209
185
|
if ('ontouchstart' in document.documentElement) {
|
|
210
186
|
for (const element of [].concat(...document.body.children)) {
|
|
211
|
-
|
|
187
|
+
EventHandler.off(element, 'mouseover', index_js.noop);
|
|
212
188
|
}
|
|
213
189
|
}
|
|
214
|
-
|
|
215
190
|
if (this._popper) {
|
|
216
191
|
this._popper.destroy();
|
|
217
192
|
}
|
|
218
|
-
|
|
219
193
|
this._menu.classList.remove(CLASS_NAME_SHOW);
|
|
220
|
-
|
|
221
194
|
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
222
|
-
|
|
223
195
|
this._element.setAttribute('aria-expanded', 'false');
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN, relatedTarget);
|
|
196
|
+
Manipulator.removeDataAttribute(this._menu, 'popper');
|
|
197
|
+
EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);
|
|
227
198
|
}
|
|
228
|
-
|
|
229
199
|
_getConfig(config) {
|
|
230
200
|
config = super._getConfig(config);
|
|
231
|
-
|
|
232
|
-
if (typeof config.reference === 'object' && !index.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
|
|
201
|
+
if (typeof config.reference === 'object' && !index_js.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
|
|
233
202
|
// Popper virtual elements require a getBoundingClientRect method
|
|
234
203
|
throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
|
|
235
204
|
}
|
|
236
|
-
|
|
237
205
|
return config;
|
|
238
206
|
}
|
|
239
|
-
|
|
240
207
|
_createPopper() {
|
|
241
208
|
if (typeof Popper__namespace === 'undefined') {
|
|
242
209
|
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
|
|
243
210
|
}
|
|
244
|
-
|
|
245
211
|
let referenceElement = this._element;
|
|
246
|
-
|
|
247
212
|
if (this._config.reference === 'parent') {
|
|
248
213
|
referenceElement = this._parent;
|
|
249
|
-
} else if (
|
|
250
|
-
referenceElement =
|
|
214
|
+
} else if (index_js.isElement(this._config.reference)) {
|
|
215
|
+
referenceElement = index_js.getElement(this._config.reference);
|
|
251
216
|
} else if (typeof this._config.reference === 'object') {
|
|
252
217
|
referenceElement = this._config.reference;
|
|
253
218
|
}
|
|
254
|
-
|
|
255
219
|
const popperConfig = this._getPopperConfig();
|
|
256
|
-
|
|
257
220
|
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
|
|
258
221
|
}
|
|
259
|
-
|
|
260
222
|
_isShown() {
|
|
261
223
|
return this._menu.classList.contains(CLASS_NAME_SHOW);
|
|
262
224
|
}
|
|
263
|
-
|
|
264
225
|
_getPlacement() {
|
|
265
226
|
const parentDropdown = this._parent;
|
|
266
|
-
|
|
267
227
|
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
|
|
268
228
|
return PLACEMENT_RIGHT;
|
|
269
229
|
}
|
|
270
|
-
|
|
271
230
|
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
|
|
272
231
|
return PLACEMENT_LEFT;
|
|
273
232
|
}
|
|
274
|
-
|
|
275
233
|
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
|
|
276
234
|
return PLACEMENT_TOPCENTER;
|
|
277
235
|
}
|
|
278
|
-
|
|
279
236
|
if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
|
|
280
237
|
return PLACEMENT_BOTTOMCENTER;
|
|
281
|
-
}
|
|
282
|
-
|
|
238
|
+
}
|
|
283
239
|
|
|
240
|
+
// We need to trim the value because custom properties can also include spaces
|
|
284
241
|
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
|
|
285
|
-
|
|
286
242
|
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
|
|
287
243
|
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
|
|
288
244
|
}
|
|
289
|
-
|
|
290
245
|
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
|
|
291
246
|
}
|
|
292
|
-
|
|
293
247
|
_detectNavbar() {
|
|
294
248
|
return this._element.closest(SELECTOR_NAVBAR) !== null;
|
|
295
249
|
}
|
|
296
|
-
|
|
297
250
|
_getOffset() {
|
|
298
251
|
const {
|
|
299
252
|
offset
|
|
300
253
|
} = this._config;
|
|
301
|
-
|
|
302
254
|
if (typeof offset === 'string') {
|
|
303
255
|
return offset.split(',').map(value => Number.parseInt(value, 10));
|
|
304
256
|
}
|
|
305
|
-
|
|
306
257
|
if (typeof offset === 'function') {
|
|
307
258
|
return popperData => offset(popperData, this._element);
|
|
308
259
|
}
|
|
309
|
-
|
|
310
260
|
return offset;
|
|
311
261
|
}
|
|
312
|
-
|
|
313
262
|
_getPopperConfig() {
|
|
314
263
|
const defaultBsPopperConfig = {
|
|
315
264
|
placement: this._getPlacement(),
|
|
@@ -324,121 +273,101 @@
|
|
|
324
273
|
offset: this._getOffset()
|
|
325
274
|
}
|
|
326
275
|
}]
|
|
327
|
-
};
|
|
276
|
+
};
|
|
328
277
|
|
|
278
|
+
// Disable Popper if we have a static display or Dropdown is in Navbar
|
|
329
279
|
if (this._inNavbar || this._config.display === 'static') {
|
|
330
|
-
|
|
331
|
-
|
|
280
|
+
Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
|
|
332
281
|
defaultBsPopperConfig.modifiers = [{
|
|
333
282
|
name: 'applyStyles',
|
|
334
283
|
enabled: false
|
|
335
284
|
}];
|
|
336
285
|
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
...(
|
|
286
|
+
return {
|
|
287
|
+
...defaultBsPopperConfig,
|
|
288
|
+
...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])
|
|
340
289
|
};
|
|
341
290
|
}
|
|
342
|
-
|
|
343
291
|
_selectMenuItem({
|
|
344
292
|
key,
|
|
345
293
|
target
|
|
346
294
|
}) {
|
|
347
|
-
const items =
|
|
348
|
-
|
|
295
|
+
const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index_js.isVisible(element));
|
|
349
296
|
if (!items.length) {
|
|
350
297
|
return;
|
|
351
|
-
}
|
|
352
|
-
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
index.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
|
|
356
|
-
} // Static
|
|
298
|
+
}
|
|
357
299
|
|
|
300
|
+
// if target isn't included in items (e.g. when expanding the dropdown)
|
|
301
|
+
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
|
302
|
+
index_js.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
|
|
303
|
+
}
|
|
358
304
|
|
|
305
|
+
// Static
|
|
359
306
|
static jQueryInterface(config) {
|
|
360
307
|
return this.each(function () {
|
|
361
308
|
const data = Dropdown.getOrCreateInstance(this, config);
|
|
362
|
-
|
|
363
309
|
if (typeof config !== 'string') {
|
|
364
310
|
return;
|
|
365
311
|
}
|
|
366
|
-
|
|
367
312
|
if (typeof data[config] === 'undefined') {
|
|
368
313
|
throw new TypeError(`No method named "${config}"`);
|
|
369
314
|
}
|
|
370
|
-
|
|
371
315
|
data[config]();
|
|
372
316
|
});
|
|
373
317
|
}
|
|
374
|
-
|
|
375
318
|
static clearMenus(event) {
|
|
376
319
|
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
|
|
377
320
|
return;
|
|
378
321
|
}
|
|
379
|
-
|
|
380
|
-
const openToggles = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_SHOWN);
|
|
381
|
-
|
|
322
|
+
const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
|
|
382
323
|
for (const toggle of openToggles) {
|
|
383
324
|
const context = Dropdown.getInstance(toggle);
|
|
384
|
-
|
|
385
325
|
if (!context || context._config.autoClose === false) {
|
|
386
326
|
continue;
|
|
387
327
|
}
|
|
388
|
-
|
|
389
328
|
const composedPath = event.composedPath();
|
|
390
329
|
const isMenuTarget = composedPath.includes(context._menu);
|
|
391
|
-
|
|
392
330
|
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
|
|
393
331
|
continue;
|
|
394
|
-
}
|
|
395
|
-
|
|
332
|
+
}
|
|
396
333
|
|
|
334
|
+
// Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
|
|
397
335
|
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
|
|
398
336
|
continue;
|
|
399
337
|
}
|
|
400
|
-
|
|
401
338
|
const relatedTarget = {
|
|
402
339
|
relatedTarget: context._element
|
|
403
340
|
};
|
|
404
|
-
|
|
405
341
|
if (event.type === 'click') {
|
|
406
342
|
relatedTarget.clickEvent = event;
|
|
407
343
|
}
|
|
408
|
-
|
|
409
344
|
context._completeHide(relatedTarget);
|
|
410
345
|
}
|
|
411
346
|
}
|
|
412
|
-
|
|
413
347
|
static dataApiKeydownHandler(event) {
|
|
414
348
|
// If not an UP | DOWN | ESCAPE key => not a dropdown command
|
|
415
349
|
// If input/textarea && if key is other than ESCAPE => not a dropdown command
|
|
350
|
+
|
|
416
351
|
const isInput = /input|textarea/i.test(event.target.tagName);
|
|
417
352
|
const isEscapeEvent = event.key === ESCAPE_KEY;
|
|
418
353
|
const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);
|
|
419
|
-
|
|
420
354
|
if (!isUpOrDownEvent && !isEscapeEvent) {
|
|
421
355
|
return;
|
|
422
356
|
}
|
|
423
|
-
|
|
424
357
|
if (isInput && !isEscapeEvent) {
|
|
425
358
|
return;
|
|
426
359
|
}
|
|
360
|
+
event.preventDefault();
|
|
427
361
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default.default.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
|
|
362
|
+
// TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
|
|
363
|
+
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
|
|
431
364
|
const instance = Dropdown.getOrCreateInstance(getToggleButton);
|
|
432
|
-
|
|
433
365
|
if (isUpOrDownEvent) {
|
|
434
366
|
event.stopPropagation();
|
|
435
367
|
instance.show();
|
|
436
|
-
|
|
437
368
|
instance._selectMenuItem(event);
|
|
438
|
-
|
|
439
369
|
return;
|
|
440
370
|
}
|
|
441
|
-
|
|
442
371
|
if (instance._isShown()) {
|
|
443
372
|
// else is escape and we check if it is shown
|
|
444
373
|
event.stopPropagation();
|
|
@@ -446,26 +375,26 @@
|
|
|
446
375
|
getToggleButton.focus();
|
|
447
376
|
}
|
|
448
377
|
}
|
|
449
|
-
|
|
450
378
|
}
|
|
379
|
+
|
|
451
380
|
/**
|
|
452
381
|
* Data API implementation
|
|
453
382
|
*/
|
|
454
383
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
384
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
|
|
385
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
|
|
386
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
|
|
387
|
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
|
|
388
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
461
389
|
event.preventDefault();
|
|
462
390
|
Dropdown.getOrCreateInstance(this).toggle();
|
|
463
391
|
});
|
|
392
|
+
|
|
464
393
|
/**
|
|
465
394
|
* jQuery
|
|
466
395
|
*/
|
|
467
396
|
|
|
468
|
-
|
|
397
|
+
index_js.defineJQueryPlugin(Dropdown);
|
|
469
398
|
|
|
470
399
|
return Dropdown;
|
|
471
400
|
|