bootstrap 5.0.0 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/assets/javascripts/bootstrap/alert.js +77 -106
- data/assets/javascripts/bootstrap/base-component.js +126 -7
- data/assets/javascripts/bootstrap/button.js +24 -24
- data/assets/javascripts/bootstrap/carousel.js +115 -128
- data/assets/javascripts/bootstrap/collapse.js +119 -176
- data/assets/javascripts/bootstrap/dom/data.js +2 -2
- data/assets/javascripts/bootstrap/dom/event-handler.js +3 -4
- data/assets/javascripts/bootstrap/dom/manipulator.js +4 -4
- data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -5
- data/assets/javascripts/bootstrap/dropdown.js +142 -130
- data/assets/javascripts/bootstrap/modal.js +376 -171
- data/assets/javascripts/bootstrap/offcanvas.js +328 -133
- data/assets/javascripts/bootstrap/popover.js +27 -59
- data/assets/javascripts/bootstrap/scrollspy.js +51 -56
- data/assets/javascripts/bootstrap/tab.js +39 -66
- data/assets/javascripts/bootstrap/toast.js +175 -86
- data/assets/javascripts/bootstrap/tooltip.js +141 -185
- data/assets/javascripts/bootstrap-sprockets.js +6 -6
- data/assets/javascripts/bootstrap.js +1031 -1026
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/stylesheets/_bootstrap-grid.scss +3 -1
- data/assets/stylesheets/_bootstrap-reboot.scss +2 -4
- data/assets/stylesheets/_bootstrap.scss +2 -1
- data/assets/stylesheets/bootstrap/_card.scss +7 -6
- data/assets/stylesheets/bootstrap/_carousel.scss +2 -2
- data/assets/stylesheets/bootstrap/_dropdown.scss +4 -4
- data/assets/stylesheets/bootstrap/_functions.scss +100 -3
- data/assets/stylesheets/bootstrap/_grid.scss +11 -0
- data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
- data/assets/stylesheets/bootstrap/_images.scss +1 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +5 -5
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +7 -26
- data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
- data/assets/stylesheets/bootstrap/_offcanvas.scss +8 -2
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_popover.scss +10 -10
- data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
- data/assets/stylesheets/bootstrap/_root.scss +40 -2
- data/assets/stylesheets/bootstrap/_tables.scss +1 -0
- data/assets/stylesheets/bootstrap/_toasts.scss +3 -3
- data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
- data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
- data/assets/stylesheets/bootstrap/_variables.scss +200 -25
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +3 -1
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +6 -6
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +3 -0
- data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +33 -8
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +55 -13
- data/bootstrap.gemspec +3 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +6 -2
- metadata +12 -8
@@ -1,13 +1,13 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap dropdown.js v5.
|
2
|
+
* Bootstrap dropdown.js v5.1.1 (https://getbootstrap.com/)
|
3
3
|
* Copyright 2011-2021 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('./dom/
|
8
|
-
typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.
|
10
|
-
}(this, (function (Popper,
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
|
10
|
+
}(this, (function (Popper, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
|
11
11
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
13
13
|
|
@@ -32,7 +32,6 @@
|
|
32
32
|
}
|
33
33
|
|
34
34
|
var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
|
35
|
-
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
36
35
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
37
36
|
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
38
37
|
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
@@ -40,7 +39,7 @@
|
|
40
39
|
|
41
40
|
/**
|
42
41
|
* --------------------------------------------------------------------------
|
43
|
-
* Bootstrap (v5.
|
42
|
+
* Bootstrap (v5.1.1): util/index.js
|
44
43
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
45
44
|
* --------------------------------------------------------------------------
|
46
45
|
*/
|
@@ -82,7 +81,30 @@
|
|
82
81
|
return selector ? document.querySelector(selector) : null;
|
83
82
|
};
|
84
83
|
|
85
|
-
const isElement = obj =>
|
84
|
+
const isElement = obj => {
|
85
|
+
if (!obj || typeof obj !== 'object') {
|
86
|
+
return false;
|
87
|
+
}
|
88
|
+
|
89
|
+
if (typeof obj.jquery !== 'undefined') {
|
90
|
+
obj = obj[0];
|
91
|
+
}
|
92
|
+
|
93
|
+
return typeof obj.nodeType !== 'undefined';
|
94
|
+
};
|
95
|
+
|
96
|
+
const getElement = obj => {
|
97
|
+
if (isElement(obj)) {
|
98
|
+
// it's a jQuery object or a node element
|
99
|
+
return obj.jquery ? obj[0] : obj;
|
100
|
+
}
|
101
|
+
|
102
|
+
if (typeof obj === 'string' && obj.length > 0) {
|
103
|
+
return document.querySelector(obj);
|
104
|
+
}
|
105
|
+
|
106
|
+
return null;
|
107
|
+
};
|
86
108
|
|
87
109
|
const typeCheckConfig = (componentName, config, configTypes) => {
|
88
110
|
Object.keys(configTypes).forEach(property => {
|
@@ -97,17 +119,11 @@
|
|
97
119
|
};
|
98
120
|
|
99
121
|
const isVisible = element => {
|
100
|
-
if (!element) {
|
122
|
+
if (!isElement(element) || element.getClientRects().length === 0) {
|
101
123
|
return false;
|
102
124
|
}
|
103
125
|
|
104
|
-
|
105
|
-
const elementStyle = getComputedStyle(element);
|
106
|
-
const parentNodeStyle = getComputedStyle(element.parentNode);
|
107
|
-
return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
|
108
|
-
}
|
109
|
-
|
110
|
-
return false;
|
126
|
+
return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
111
127
|
};
|
112
128
|
|
113
129
|
const isDisabled = element => {
|
@@ -140,9 +156,18 @@
|
|
140
156
|
return null;
|
141
157
|
};
|
142
158
|
|
159
|
+
const DOMContentLoadedCallbacks = [];
|
160
|
+
|
143
161
|
const onDOMContentLoaded = callback => {
|
144
162
|
if (document.readyState === 'loading') {
|
145
|
-
document
|
163
|
+
// add listener on the first call when the document is in loading state
|
164
|
+
if (!DOMContentLoadedCallbacks.length) {
|
165
|
+
document.addEventListener('DOMContentLoaded', () => {
|
166
|
+
DOMContentLoadedCallbacks.forEach(callback => callback());
|
167
|
+
});
|
168
|
+
}
|
169
|
+
|
170
|
+
DOMContentLoadedCallbacks.push(callback);
|
146
171
|
} else {
|
147
172
|
callback();
|
148
173
|
}
|
@@ -150,12 +175,13 @@
|
|
150
175
|
|
151
176
|
const isRTL = () => document.documentElement.dir === 'rtl';
|
152
177
|
|
153
|
-
const defineJQueryPlugin =
|
178
|
+
const defineJQueryPlugin = plugin => {
|
154
179
|
onDOMContentLoaded(() => {
|
155
180
|
const $ = getjQuery();
|
156
181
|
/* istanbul ignore if */
|
157
182
|
|
158
183
|
if ($) {
|
184
|
+
const name = plugin.NAME;
|
159
185
|
const JQUERY_NO_CONFLICT = $.fn[name];
|
160
186
|
$.fn[name] = plugin.jQueryInterface;
|
161
187
|
$.fn[name].Constructor = plugin;
|
@@ -167,10 +193,37 @@
|
|
167
193
|
}
|
168
194
|
});
|
169
195
|
};
|
196
|
+
/**
|
197
|
+
* Return the previous/next element of a list.
|
198
|
+
*
|
199
|
+
* @param {array} list The list of elements
|
200
|
+
* @param activeElement The active element
|
201
|
+
* @param shouldGetNext Choose to get next or previous element
|
202
|
+
* @param isCycleAllowed
|
203
|
+
* @return {Element|elem} The proper element
|
204
|
+
*/
|
205
|
+
|
206
|
+
|
207
|
+
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
208
|
+
let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
|
209
|
+
|
210
|
+
if (index === -1) {
|
211
|
+
return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
|
212
|
+
}
|
213
|
+
|
214
|
+
const listLength = list.length;
|
215
|
+
index += shouldGetNext ? 1 : -1;
|
216
|
+
|
217
|
+
if (isCycleAllowed) {
|
218
|
+
index = (index + listLength) % listLength;
|
219
|
+
}
|
220
|
+
|
221
|
+
return list[Math.max(0, Math.min(index, listLength - 1))];
|
222
|
+
};
|
170
223
|
|
171
224
|
/**
|
172
225
|
* --------------------------------------------------------------------------
|
173
|
-
* Bootstrap (v5.
|
226
|
+
* Bootstrap (v5.1.1): dropdown.js
|
174
227
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
175
228
|
* --------------------------------------------------------------------------
|
176
229
|
*/
|
@@ -196,7 +249,6 @@
|
|
196
249
|
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
197
250
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
198
251
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
199
|
-
const EVENT_CLICK = `click${EVENT_KEY}`;
|
200
252
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
201
253
|
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;
|
202
254
|
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;
|
@@ -244,8 +296,6 @@
|
|
244
296
|
this._config = this._getConfig(config);
|
245
297
|
this._menu = this._getMenuElement();
|
246
298
|
this._inNavbar = this._detectNavbar();
|
247
|
-
|
248
|
-
this._addEventListeners();
|
249
299
|
} // Getters
|
250
300
|
|
251
301
|
|
@@ -257,32 +307,20 @@
|
|
257
307
|
return DefaultType;
|
258
308
|
}
|
259
309
|
|
260
|
-
static get
|
261
|
-
return
|
310
|
+
static get NAME() {
|
311
|
+
return NAME;
|
262
312
|
} // Public
|
263
313
|
|
264
314
|
|
265
315
|
toggle() {
|
266
|
-
|
267
|
-
return;
|
268
|
-
}
|
269
|
-
|
270
|
-
const isActive = this._element.classList.contains(CLASS_NAME_SHOW);
|
271
|
-
|
272
|
-
if (isActive) {
|
273
|
-
this.hide();
|
274
|
-
return;
|
275
|
-
}
|
276
|
-
|
277
|
-
this.show();
|
316
|
+
return this._isShown() ? this.hide() : this.show();
|
278
317
|
}
|
279
318
|
|
280
319
|
show() {
|
281
|
-
if (isDisabled(this._element) || this._menu
|
320
|
+
if (isDisabled(this._element) || this._isShown(this._menu)) {
|
282
321
|
return;
|
283
322
|
}
|
284
323
|
|
285
|
-
const parent = Dropdown.getParentFromElement(this._element);
|
286
324
|
const relatedTarget = {
|
287
325
|
relatedTarget: this._element
|
288
326
|
};
|
@@ -290,38 +328,14 @@
|
|
290
328
|
|
291
329
|
if (showEvent.defaultPrevented) {
|
292
330
|
return;
|
293
|
-
}
|
331
|
+
}
|
294
332
|
|
333
|
+
const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
|
295
334
|
|
296
335
|
if (this._inNavbar) {
|
297
336
|
Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'none');
|
298
337
|
} else {
|
299
|
-
|
300
|
-
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
|
301
|
-
}
|
302
|
-
|
303
|
-
let referenceElement = this._element;
|
304
|
-
|
305
|
-
if (this._config.reference === 'parent') {
|
306
|
-
referenceElement = parent;
|
307
|
-
} else if (isElement(this._config.reference)) {
|
308
|
-
referenceElement = this._config.reference; // Check if it's jQuery element
|
309
|
-
|
310
|
-
if (typeof this._config.reference.jquery !== 'undefined') {
|
311
|
-
referenceElement = this._config.reference[0];
|
312
|
-
}
|
313
|
-
} else if (typeof this._config.reference === 'object') {
|
314
|
-
referenceElement = this._config.reference;
|
315
|
-
}
|
316
|
-
|
317
|
-
const popperConfig = this._getPopperConfig();
|
318
|
-
|
319
|
-
const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
|
320
|
-
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
|
321
|
-
|
322
|
-
if (isDisplayStatic) {
|
323
|
-
Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
|
324
|
-
}
|
338
|
+
this._createPopper(parent);
|
325
339
|
} // If this is a touch-enabled device we add extra
|
326
340
|
// empty mouseover listeners to the body's immediate children;
|
327
341
|
// only needed because of broken event delegation on iOS
|
@@ -336,15 +350,15 @@
|
|
336
350
|
|
337
351
|
this._element.setAttribute('aria-expanded', true);
|
338
352
|
|
339
|
-
this._menu.classList.
|
353
|
+
this._menu.classList.add(CLASS_NAME_SHOW);
|
340
354
|
|
341
|
-
this._element.classList.
|
355
|
+
this._element.classList.add(CLASS_NAME_SHOW);
|
342
356
|
|
343
357
|
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, relatedTarget);
|
344
358
|
}
|
345
359
|
|
346
360
|
hide() {
|
347
|
-
if (isDisabled(this._element) || !this._menu
|
361
|
+
if (isDisabled(this._element) || !this._isShown(this._menu)) {
|
348
362
|
return;
|
349
363
|
}
|
350
364
|
|
@@ -356,12 +370,8 @@
|
|
356
370
|
}
|
357
371
|
|
358
372
|
dispose() {
|
359
|
-
this._menu = null;
|
360
|
-
|
361
373
|
if (this._popper) {
|
362
374
|
this._popper.destroy();
|
363
|
-
|
364
|
-
this._popper = null;
|
365
375
|
}
|
366
376
|
|
367
377
|
super.dispose();
|
@@ -376,13 +386,6 @@
|
|
376
386
|
} // Private
|
377
387
|
|
378
388
|
|
379
|
-
_addEventListeners() {
|
380
|
-
EventHandler__default['default'].on(this._element, EVENT_CLICK, event => {
|
381
|
-
event.preventDefault();
|
382
|
-
this.toggle();
|
383
|
-
});
|
384
|
-
}
|
385
|
-
|
386
389
|
_completeHide(relatedTarget) {
|
387
390
|
const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE, relatedTarget);
|
388
391
|
|
@@ -425,6 +428,35 @@
|
|
425
428
|
return config;
|
426
429
|
}
|
427
430
|
|
431
|
+
_createPopper(parent) {
|
432
|
+
if (typeof Popper__namespace === 'undefined') {
|
433
|
+
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
|
434
|
+
}
|
435
|
+
|
436
|
+
let referenceElement = this._element;
|
437
|
+
|
438
|
+
if (this._config.reference === 'parent') {
|
439
|
+
referenceElement = parent;
|
440
|
+
} else if (isElement(this._config.reference)) {
|
441
|
+
referenceElement = getElement(this._config.reference);
|
442
|
+
} else if (typeof this._config.reference === 'object') {
|
443
|
+
referenceElement = this._config.reference;
|
444
|
+
}
|
445
|
+
|
446
|
+
const popperConfig = this._getPopperConfig();
|
447
|
+
|
448
|
+
const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
|
449
|
+
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
|
450
|
+
|
451
|
+
if (isDisplayStatic) {
|
452
|
+
Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
|
453
|
+
}
|
454
|
+
}
|
455
|
+
|
456
|
+
_isShown(element = this._element) {
|
457
|
+
return element.classList.contains(CLASS_NAME_SHOW);
|
458
|
+
}
|
459
|
+
|
428
460
|
_getMenuElement() {
|
429
461
|
return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0];
|
430
462
|
}
|
@@ -498,75 +530,53 @@
|
|
498
530
|
};
|
499
531
|
}
|
500
532
|
|
501
|
-
_selectMenuItem(
|
533
|
+
_selectMenuItem({
|
534
|
+
key,
|
535
|
+
target
|
536
|
+
}) {
|
502
537
|
const items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
|
503
538
|
|
504
539
|
if (!items.length) {
|
505
540
|
return;
|
506
|
-
}
|
507
|
-
|
508
|
-
let index = items.indexOf(event.target); // Up
|
509
|
-
|
510
|
-
if (event.key === ARROW_UP_KEY && index > 0) {
|
511
|
-
index--;
|
512
|
-
} // Down
|
513
|
-
|
514
|
-
|
515
|
-
if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
|
516
|
-
index++;
|
517
|
-
} // index is -1 if the first keydown is an ArrowUp
|
541
|
+
} // if target isn't included in items (e.g. when expanding the dropdown)
|
542
|
+
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
518
543
|
|
519
544
|
|
520
|
-
|
521
|
-
items[index].focus();
|
545
|
+
getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
|
522
546
|
} // Static
|
523
547
|
|
524
548
|
|
525
|
-
static
|
526
|
-
|
527
|
-
|
528
|
-
const _config = typeof config === 'object' ? config : null;
|
549
|
+
static jQueryInterface(config) {
|
550
|
+
return this.each(function () {
|
551
|
+
const data = Dropdown.getOrCreateInstance(this, config);
|
529
552
|
|
530
|
-
|
531
|
-
|
532
|
-
|
553
|
+
if (typeof config !== 'string') {
|
554
|
+
return;
|
555
|
+
}
|
533
556
|
|
534
|
-
if (typeof config === 'string') {
|
535
557
|
if (typeof data[config] === 'undefined') {
|
536
558
|
throw new TypeError(`No method named "${config}"`);
|
537
559
|
}
|
538
560
|
|
539
561
|
data[config]();
|
540
|
-
}
|
541
|
-
}
|
542
|
-
|
543
|
-
static jQueryInterface(config) {
|
544
|
-
return this.each(function () {
|
545
|
-
Dropdown.dropdownInterface(this, config);
|
546
562
|
});
|
547
563
|
}
|
548
564
|
|
549
565
|
static clearMenus(event) {
|
550
|
-
if (event) {
|
551
|
-
|
552
|
-
return;
|
553
|
-
}
|
554
|
-
|
555
|
-
if (/input|select|option|textarea|form/i.test(event.target.tagName)) {
|
556
|
-
return;
|
557
|
-
}
|
566
|
+
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
|
567
|
+
return;
|
558
568
|
}
|
559
569
|
|
560
570
|
const toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
|
561
571
|
|
562
572
|
for (let i = 0, len = toggles.length; i < len; i++) {
|
563
|
-
const context =
|
573
|
+
const context = Dropdown.getInstance(toggles[i]);
|
564
574
|
|
565
575
|
if (!context || context._config.autoClose === false) {
|
566
576
|
continue;
|
567
577
|
}
|
568
578
|
|
569
|
-
if (!context.
|
579
|
+
if (!context._isShown()) {
|
570
580
|
continue;
|
571
581
|
}
|
572
582
|
|
@@ -580,10 +590,10 @@
|
|
580
590
|
|
581
591
|
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
|
582
592
|
continue;
|
583
|
-
} // Tab navigation through the dropdown menu shouldn't close the menu
|
593
|
+
} // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
|
584
594
|
|
585
595
|
|
586
|
-
if (event.type === 'keyup' && event.key === TAB_KEY
|
596
|
+
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
|
587
597
|
continue;
|
588
598
|
}
|
589
599
|
|
@@ -625,25 +635,27 @@
|
|
625
635
|
return;
|
626
636
|
}
|
627
637
|
|
628
|
-
const getToggleButton =
|
638
|
+
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
|
639
|
+
const instance = Dropdown.getOrCreateInstance(getToggleButton);
|
629
640
|
|
630
641
|
if (event.key === ESCAPE_KEY) {
|
631
|
-
|
632
|
-
Dropdown.clearMenus();
|
642
|
+
instance.hide();
|
633
643
|
return;
|
634
644
|
}
|
635
645
|
|
636
|
-
if (
|
637
|
-
|
646
|
+
if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
|
647
|
+
if (!isActive) {
|
648
|
+
instance.show();
|
649
|
+
}
|
650
|
+
|
651
|
+
instance._selectMenuItem(event);
|
652
|
+
|
638
653
|
return;
|
639
654
|
}
|
640
655
|
|
641
656
|
if (!isActive || event.key === SPACE_KEY) {
|
642
657
|
Dropdown.clearMenus();
|
643
|
-
return;
|
644
658
|
}
|
645
|
-
|
646
|
-
Dropdown.getInstance(getToggleButton())._selectMenuItem(event);
|
647
659
|
}
|
648
660
|
|
649
661
|
}
|
@@ -660,7 +672,7 @@
|
|
660
672
|
EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
|
661
673
|
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
662
674
|
event.preventDefault();
|
663
|
-
Dropdown.
|
675
|
+
Dropdown.getOrCreateInstance(this).toggle();
|
664
676
|
});
|
665
677
|
/**
|
666
678
|
* ------------------------------------------------------------------------
|
@@ -669,7 +681,7 @@
|
|
669
681
|
* add .Dropdown to jQuery only if jQuery is present
|
670
682
|
*/
|
671
683
|
|
672
|
-
defineJQueryPlugin(
|
684
|
+
defineJQueryPlugin(Dropdown);
|
673
685
|
|
674
686
|
return Dropdown;
|
675
687
|
|