bootstrap 5.0.0.beta2 → 5.0.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/README.md +3 -3
- data/assets/javascripts/bootstrap-sprockets.js +8 -7
- data/assets/javascripts/bootstrap.js +2525 -2460
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/javascripts/bootstrap/alert.js +77 -179
- data/assets/javascripts/bootstrap/base-component.js +140 -38
- data/assets/javascripts/bootstrap/button.js +54 -100
- data/assets/javascripts/bootstrap/carousel.js +335 -451
- data/assets/javascripts/bootstrap/collapse.js +195 -303
- data/assets/javascripts/bootstrap/dom/data.js +34 -47
- data/assets/javascripts/bootstrap/dom/event-handler.js +95 -90
- data/assets/javascripts/bootstrap/dom/manipulator.js +23 -21
- data/assets/javascripts/bootstrap/dom/selector-engine.js +20 -28
- data/assets/javascripts/bootstrap/dropdown.js +323 -358
- data/assets/javascripts/bootstrap/modal.js +537 -489
- data/assets/javascripts/bootstrap/offcanvas.js +720 -0
- data/assets/javascripts/bootstrap/popover.js +112 -180
- data/assets/javascripts/bootstrap/scrollspy.js +167 -235
- data/assets/javascripts/bootstrap/tab.js +121 -188
- data/assets/javascripts/bootstrap/toast.js +166 -243
- data/assets/javascripts/bootstrap/tooltip.js +333 -495
- data/assets/stylesheets/_bootstrap-grid.scss +1 -1
- data/assets/stylesheets/_bootstrap-reboot.scss +1 -1
- data/assets/stylesheets/_bootstrap.scss +2 -1
- data/assets/stylesheets/bootstrap/_accordion.scss +24 -32
- data/assets/stylesheets/bootstrap/_buttons.scss +2 -0
- data/assets/stylesheets/bootstrap/_card.scss +6 -6
- data/assets/stylesheets/bootstrap/_carousel.scss +2 -2
- data/assets/stylesheets/bootstrap/_dropdown.scss +14 -23
- data/assets/stylesheets/bootstrap/_functions.scss +61 -3
- data/assets/stylesheets/bootstrap/_images.scss +1 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +16 -5
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +8 -24
- data/assets/stylesheets/bootstrap/_nav.scss +7 -0
- data/assets/stylesheets/bootstrap/_navbar.scss +2 -0
- data/assets/stylesheets/bootstrap/_offcanvas.scss +79 -0
- data/assets/stylesheets/bootstrap/_popover.scss +10 -10
- data/assets/stylesheets/bootstrap/_progress.scss +3 -0
- data/assets/stylesheets/bootstrap/_reboot.scss +7 -21
- data/assets/stylesheets/bootstrap/_spinners.scss +6 -2
- data/assets/stylesheets/bootstrap/_tables.scss +1 -0
- data/assets/stylesheets/bootstrap/_toasts.scss +1 -1
- data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +65 -37
- data/assets/stylesheets/bootstrap/_variables.scss +162 -50
- 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 +0 -4
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +3 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +7 -2
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +25 -5
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +23 -11
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +2 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +55 -13
- data/bootstrap.gemspec +1 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +1 -1
- data/tasks/updater/network.rb +7 -1
- metadata +9 -6
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap selector-engine.js v5.0.
|
2
|
+
* Bootstrap selector-engine.js v5.0.2 (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
|
*/
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
/**
|
13
13
|
* --------------------------------------------------------------------------
|
14
|
-
* Bootstrap (v5.0.
|
14
|
+
* Bootstrap (v5.0.2): dom/selector-engine.js
|
15
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
16
16
|
* --------------------------------------------------------------------------
|
17
17
|
*/
|
@@ -21,34 +21,23 @@
|
|
21
21
|
* Constants
|
22
22
|
* ------------------------------------------------------------------------
|
23
23
|
*/
|
24
|
-
|
25
|
-
|
26
|
-
find
|
27
|
-
|
28
|
-
|
29
|
-
if (element === void 0) {
|
30
|
-
element = document.documentElement;
|
31
|
-
}
|
32
|
-
|
33
|
-
return (_ref = []).concat.apply(_ref, Element.prototype.querySelectorAll.call(element, selector));
|
24
|
+
const NODE_TEXT = 3;
|
25
|
+
const SelectorEngine = {
|
26
|
+
find(selector, element = document.documentElement) {
|
27
|
+
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
|
34
28
|
},
|
35
|
-
findOne: function findOne(selector, element) {
|
36
|
-
if (element === void 0) {
|
37
|
-
element = document.documentElement;
|
38
|
-
}
|
39
29
|
|
30
|
+
findOne(selector, element = document.documentElement) {
|
40
31
|
return Element.prototype.querySelector.call(element, selector);
|
41
32
|
},
|
42
|
-
children: function children(element, selector) {
|
43
|
-
var _ref2;
|
44
33
|
|
45
|
-
|
46
|
-
|
47
|
-
});
|
34
|
+
children(element, selector) {
|
35
|
+
return [].concat(...element.children).filter(child => child.matches(selector));
|
48
36
|
},
|
49
|
-
|
50
|
-
|
51
|
-
|
37
|
+
|
38
|
+
parents(element, selector) {
|
39
|
+
const parents = [];
|
40
|
+
let ancestor = element.parentNode;
|
52
41
|
|
53
42
|
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
|
54
43
|
if (ancestor.matches(selector)) {
|
@@ -60,8 +49,9 @@
|
|
60
49
|
|
61
50
|
return parents;
|
62
51
|
},
|
63
|
-
|
64
|
-
|
52
|
+
|
53
|
+
prev(element, selector) {
|
54
|
+
let previous = element.previousElementSibling;
|
65
55
|
|
66
56
|
while (previous) {
|
67
57
|
if (previous.matches(selector)) {
|
@@ -73,8 +63,9 @@
|
|
73
63
|
|
74
64
|
return [];
|
75
65
|
},
|
76
|
-
|
77
|
-
|
66
|
+
|
67
|
+
next(element, selector) {
|
68
|
+
let next = element.nextElementSibling;
|
78
69
|
|
79
70
|
while (next) {
|
80
71
|
if (next.matches(selector)) {
|
@@ -86,6 +77,7 @@
|
|
86
77
|
|
87
78
|
return [];
|
88
79
|
}
|
80
|
+
|
89
81
|
};
|
90
82
|
|
91
83
|
return SelectorEngine;
|
@@ -1,13 +1,13 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap dropdown.js v5.0.
|
2
|
+
* Bootstrap dropdown.js v5.0.2 (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/selector-engine.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/selector-engine', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.SelectorEngine, global.EventHandler, global.Manipulator, global.Base));
|
10
|
+
}(this, (function (Popper, SelectorEngine, EventHandler, Manipulator, BaseComponent) { 'use strict';
|
11
11
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
13
13
|
|
@@ -32,82 +32,24 @@
|
|
32
32
|
}
|
33
33
|
|
34
34
|
var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
|
35
|
-
var
|
35
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
36
36
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
37
37
|
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
38
|
-
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
39
38
|
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
40
39
|
|
41
|
-
|
42
|
-
for (var i = 0; i < props.length; i++) {
|
43
|
-
var descriptor = props[i];
|
44
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
45
|
-
descriptor.configurable = true;
|
46
|
-
if ("value" in descriptor) descriptor.writable = true;
|
47
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
48
|
-
}
|
49
|
-
}
|
50
|
-
|
51
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
52
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
53
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
54
|
-
return Constructor;
|
55
|
-
}
|
56
|
-
|
57
|
-
function _extends() {
|
58
|
-
_extends = Object.assign || function (target) {
|
59
|
-
for (var i = 1; i < arguments.length; i++) {
|
60
|
-
var source = arguments[i];
|
61
|
-
|
62
|
-
for (var key in source) {
|
63
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
64
|
-
target[key] = source[key];
|
65
|
-
}
|
66
|
-
}
|
67
|
-
}
|
68
|
-
|
69
|
-
return target;
|
70
|
-
};
|
71
|
-
|
72
|
-
return _extends.apply(this, arguments);
|
73
|
-
}
|
74
|
-
|
75
|
-
function _inheritsLoose(subClass, superClass) {
|
76
|
-
subClass.prototype = Object.create(superClass.prototype);
|
77
|
-
subClass.prototype.constructor = subClass;
|
78
|
-
|
79
|
-
_setPrototypeOf(subClass, superClass);
|
80
|
-
}
|
81
|
-
|
82
|
-
function _setPrototypeOf(o, p) {
|
83
|
-
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
84
|
-
o.__proto__ = p;
|
85
|
-
return o;
|
86
|
-
};
|
87
|
-
|
88
|
-
return _setPrototypeOf(o, p);
|
89
|
-
}
|
90
|
-
|
91
|
-
/**
|
92
|
-
* --------------------------------------------------------------------------
|
93
|
-
* Bootstrap (v5.0.0-beta2): util/index.js
|
94
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
95
|
-
* --------------------------------------------------------------------------
|
96
|
-
*/
|
97
|
-
|
98
|
-
var toType = function toType(obj) {
|
40
|
+
const toType = obj => {
|
99
41
|
if (obj === null || obj === undefined) {
|
100
|
-
return
|
42
|
+
return `${obj}`;
|
101
43
|
}
|
102
44
|
|
103
45
|
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
104
46
|
};
|
105
47
|
|
106
|
-
|
107
|
-
|
48
|
+
const getSelector = element => {
|
49
|
+
let selector = element.getAttribute('data-bs-target');
|
108
50
|
|
109
51
|
if (!selector || selector === '#') {
|
110
|
-
|
52
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
111
53
|
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
112
54
|
// `document.querySelector` will rightfully complain it is invalid.
|
113
55
|
// See https://github.com/twbs/bootstrap/issues/32273
|
@@ -118,7 +60,7 @@
|
|
118
60
|
|
119
61
|
|
120
62
|
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
121
|
-
hrefAttr =
|
63
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
122
64
|
}
|
123
65
|
|
124
66
|
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
@@ -127,48 +69,78 @@
|
|
127
69
|
return selector;
|
128
70
|
};
|
129
71
|
|
130
|
-
|
131
|
-
|
72
|
+
const getElementFromSelector = element => {
|
73
|
+
const selector = getSelector(element);
|
132
74
|
return selector ? document.querySelector(selector) : null;
|
133
75
|
};
|
134
76
|
|
135
|
-
|
136
|
-
|
77
|
+
const isElement = obj => {
|
78
|
+
if (!obj || typeof obj !== 'object') {
|
79
|
+
return false;
|
80
|
+
}
|
81
|
+
|
82
|
+
if (typeof obj.jquery !== 'undefined') {
|
83
|
+
obj = obj[0];
|
84
|
+
}
|
85
|
+
|
86
|
+
return typeof obj.nodeType !== 'undefined';
|
87
|
+
};
|
88
|
+
|
89
|
+
const getElement = obj => {
|
90
|
+
if (isElement(obj)) {
|
91
|
+
// it's a jQuery object or a node element
|
92
|
+
return obj.jquery ? obj[0] : obj;
|
93
|
+
}
|
94
|
+
|
95
|
+
if (typeof obj === 'string' && obj.length > 0) {
|
96
|
+
return SelectorEngine__default['default'].findOne(obj);
|
97
|
+
}
|
98
|
+
|
99
|
+
return null;
|
137
100
|
};
|
138
101
|
|
139
|
-
|
140
|
-
Object.keys(configTypes).forEach(
|
141
|
-
|
142
|
-
|
143
|
-
|
102
|
+
const typeCheckConfig = (componentName, config, configTypes) => {
|
103
|
+
Object.keys(configTypes).forEach(property => {
|
104
|
+
const expectedTypes = configTypes[property];
|
105
|
+
const value = config[property];
|
106
|
+
const valueType = value && isElement(value) ? 'element' : toType(value);
|
144
107
|
|
145
108
|
if (!new RegExp(expectedTypes).test(valueType)) {
|
146
|
-
throw new TypeError(componentName.toUpperCase()
|
109
|
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
147
110
|
}
|
148
111
|
});
|
149
112
|
};
|
150
113
|
|
151
|
-
|
152
|
-
if (!element) {
|
114
|
+
const isVisible = element => {
|
115
|
+
if (!isElement(element) || element.getClientRects().length === 0) {
|
153
116
|
return false;
|
154
117
|
}
|
155
118
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
119
|
+
return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
120
|
+
};
|
121
|
+
|
122
|
+
const isDisabled = element => {
|
123
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
124
|
+
return true;
|
160
125
|
}
|
161
126
|
|
162
|
-
|
163
|
-
|
127
|
+
if (element.classList.contains('disabled')) {
|
128
|
+
return true;
|
129
|
+
}
|
164
130
|
|
165
|
-
|
166
|
-
|
131
|
+
if (typeof element.disabled !== 'undefined') {
|
132
|
+
return element.disabled;
|
133
|
+
}
|
134
|
+
|
135
|
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
167
136
|
};
|
168
137
|
|
169
|
-
|
170
|
-
|
171
|
-
|
138
|
+
const noop = () => {};
|
139
|
+
|
140
|
+
const getjQuery = () => {
|
141
|
+
const {
|
142
|
+
jQuery
|
143
|
+
} = window;
|
172
144
|
|
173
145
|
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
174
146
|
return jQuery;
|
@@ -177,92 +149,133 @@
|
|
177
149
|
return null;
|
178
150
|
};
|
179
151
|
|
180
|
-
|
152
|
+
const DOMContentLoadedCallbacks = [];
|
153
|
+
|
154
|
+
const onDOMContentLoaded = callback => {
|
181
155
|
if (document.readyState === 'loading') {
|
182
|
-
document
|
156
|
+
// add listener on the first call when the document is in loading state
|
157
|
+
if (!DOMContentLoadedCallbacks.length) {
|
158
|
+
document.addEventListener('DOMContentLoaded', () => {
|
159
|
+
DOMContentLoadedCallbacks.forEach(callback => callback());
|
160
|
+
});
|
161
|
+
}
|
162
|
+
|
163
|
+
DOMContentLoadedCallbacks.push(callback);
|
183
164
|
} else {
|
184
165
|
callback();
|
185
166
|
}
|
186
167
|
};
|
187
168
|
|
188
|
-
|
169
|
+
const isRTL = () => document.documentElement.dir === 'rtl';
|
189
170
|
|
190
|
-
|
191
|
-
onDOMContentLoaded(
|
192
|
-
|
171
|
+
const defineJQueryPlugin = plugin => {
|
172
|
+
onDOMContentLoaded(() => {
|
173
|
+
const $ = getjQuery();
|
193
174
|
/* istanbul ignore if */
|
194
175
|
|
195
176
|
if ($) {
|
196
|
-
|
177
|
+
const name = plugin.NAME;
|
178
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
197
179
|
$.fn[name] = plugin.jQueryInterface;
|
198
180
|
$.fn[name].Constructor = plugin;
|
199
181
|
|
200
|
-
$.fn[name].noConflict =
|
182
|
+
$.fn[name].noConflict = () => {
|
201
183
|
$.fn[name] = JQUERY_NO_CONFLICT;
|
202
184
|
return plugin.jQueryInterface;
|
203
185
|
};
|
204
186
|
}
|
205
187
|
});
|
206
188
|
};
|
189
|
+
/**
|
190
|
+
* Return the previous/next element of a list.
|
191
|
+
*
|
192
|
+
* @param {array} list The list of elements
|
193
|
+
* @param activeElement The active element
|
194
|
+
* @param shouldGetNext Choose to get next or previous element
|
195
|
+
* @param isCycleAllowed
|
196
|
+
* @return {Element|elem} The proper element
|
197
|
+
*/
|
198
|
+
|
199
|
+
|
200
|
+
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
201
|
+
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
|
202
|
+
|
203
|
+
if (index === -1) {
|
204
|
+
return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
|
205
|
+
}
|
206
|
+
|
207
|
+
const listLength = list.length;
|
208
|
+
index += shouldGetNext ? 1 : -1;
|
209
|
+
|
210
|
+
if (isCycleAllowed) {
|
211
|
+
index = (index + listLength) % listLength;
|
212
|
+
}
|
213
|
+
|
214
|
+
return list[Math.max(0, Math.min(index, listLength - 1))];
|
215
|
+
};
|
207
216
|
|
217
|
+
/**
|
218
|
+
* --------------------------------------------------------------------------
|
219
|
+
* Bootstrap (v5.0.2): dropdown.js
|
220
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
221
|
+
* --------------------------------------------------------------------------
|
222
|
+
*/
|
208
223
|
/**
|
209
224
|
* ------------------------------------------------------------------------
|
210
225
|
* Constants
|
211
226
|
* ------------------------------------------------------------------------
|
212
227
|
*/
|
213
228
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
var PLACEMENT_LEFT = isRTL ? 'right-start' : 'left-start';
|
251
|
-
var Default = {
|
229
|
+
const NAME = 'dropdown';
|
230
|
+
const DATA_KEY = 'bs.dropdown';
|
231
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
232
|
+
const DATA_API_KEY = '.data-api';
|
233
|
+
const ESCAPE_KEY = 'Escape';
|
234
|
+
const SPACE_KEY = 'Space';
|
235
|
+
const TAB_KEY = 'Tab';
|
236
|
+
const ARROW_UP_KEY = 'ArrowUp';
|
237
|
+
const ARROW_DOWN_KEY = 'ArrowDown';
|
238
|
+
const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
|
239
|
+
|
240
|
+
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`);
|
241
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
242
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
243
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
244
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
245
|
+
const EVENT_CLICK = `click${EVENT_KEY}`;
|
246
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
247
|
+
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;
|
248
|
+
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;
|
249
|
+
const CLASS_NAME_SHOW = 'show';
|
250
|
+
const CLASS_NAME_DROPUP = 'dropup';
|
251
|
+
const CLASS_NAME_DROPEND = 'dropend';
|
252
|
+
const CLASS_NAME_DROPSTART = 'dropstart';
|
253
|
+
const CLASS_NAME_NAVBAR = 'navbar';
|
254
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]';
|
255
|
+
const SELECTOR_MENU = '.dropdown-menu';
|
256
|
+
const SELECTOR_NAVBAR_NAV = '.navbar-nav';
|
257
|
+
const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
|
258
|
+
const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
|
259
|
+
const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
|
260
|
+
const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
|
261
|
+
const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
|
262
|
+
const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
|
263
|
+
const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
|
264
|
+
const Default = {
|
252
265
|
offset: [0, 2],
|
253
|
-
flip: true,
|
254
266
|
boundary: 'clippingParents',
|
255
267
|
reference: 'toggle',
|
256
268
|
display: 'dynamic',
|
257
|
-
popperConfig: null
|
269
|
+
popperConfig: null,
|
270
|
+
autoClose: true
|
258
271
|
};
|
259
|
-
|
272
|
+
const DefaultType = {
|
260
273
|
offset: '(array|string|function)',
|
261
|
-
flip: 'boolean',
|
262
274
|
boundary: '(string|element)',
|
263
275
|
reference: '(string|element|object)',
|
264
276
|
display: 'string',
|
265
|
-
popperConfig: '(null|object|function)'
|
277
|
+
popperConfig: '(null|object|function)',
|
278
|
+
autoClose: '(boolean|string)'
|
266
279
|
};
|
267
280
|
/**
|
268
281
|
* ------------------------------------------------------------------------
|
@@ -270,53 +283,56 @@
|
|
270
283
|
* ------------------------------------------------------------------------
|
271
284
|
*/
|
272
285
|
|
273
|
-
|
274
|
-
|
286
|
+
class Dropdown extends BaseComponent__default['default'] {
|
287
|
+
constructor(element, config) {
|
288
|
+
super(element);
|
289
|
+
this._popper = null;
|
290
|
+
this._config = this._getConfig(config);
|
291
|
+
this._menu = this._getMenuElement();
|
292
|
+
this._inNavbar = this._detectNavbar();
|
275
293
|
|
276
|
-
|
277
|
-
|
294
|
+
this._addEventListeners();
|
295
|
+
} // Getters
|
278
296
|
|
279
|
-
_this = _BaseComponent.call(this, element) || this;
|
280
|
-
_this._popper = null;
|
281
|
-
_this._config = _this._getConfig(config);
|
282
|
-
_this._menu = _this._getMenuElement();
|
283
|
-
_this._inNavbar = _this._detectNavbar();
|
284
297
|
|
285
|
-
|
298
|
+
static get Default() {
|
299
|
+
return Default;
|
300
|
+
}
|
286
301
|
|
287
|
-
|
288
|
-
|
302
|
+
static get DefaultType() {
|
303
|
+
return DefaultType;
|
304
|
+
}
|
289
305
|
|
306
|
+
static get NAME() {
|
307
|
+
return NAME;
|
308
|
+
} // Public
|
290
309
|
|
291
|
-
var _proto = Dropdown.prototype;
|
292
310
|
|
293
|
-
|
294
|
-
|
295
|
-
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
|
311
|
+
toggle() {
|
312
|
+
if (isDisabled(this._element)) {
|
296
313
|
return;
|
297
314
|
}
|
298
315
|
|
299
|
-
|
300
|
-
|
301
|
-
Dropdown.clearMenus();
|
316
|
+
const isActive = this._element.classList.contains(CLASS_NAME_SHOW);
|
302
317
|
|
303
318
|
if (isActive) {
|
319
|
+
this.hide();
|
304
320
|
return;
|
305
321
|
}
|
306
322
|
|
307
323
|
this.show();
|
308
|
-
}
|
324
|
+
}
|
309
325
|
|
310
|
-
|
311
|
-
if (this._element
|
326
|
+
show() {
|
327
|
+
if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
|
312
328
|
return;
|
313
329
|
}
|
314
330
|
|
315
|
-
|
316
|
-
|
331
|
+
const parent = Dropdown.getParentFromElement(this._element);
|
332
|
+
const relatedTarget = {
|
317
333
|
relatedTarget: this._element
|
318
334
|
};
|
319
|
-
|
335
|
+
const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, relatedTarget);
|
320
336
|
|
321
337
|
if (showEvent.defaultPrevented) {
|
322
338
|
return;
|
@@ -330,26 +346,20 @@
|
|
330
346
|
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
|
331
347
|
}
|
332
348
|
|
333
|
-
|
349
|
+
let referenceElement = this._element;
|
334
350
|
|
335
351
|
if (this._config.reference === 'parent') {
|
336
352
|
referenceElement = parent;
|
337
353
|
} else if (isElement(this._config.reference)) {
|
338
|
-
referenceElement = this._config.reference;
|
339
|
-
|
340
|
-
if (typeof this._config.reference.jquery !== 'undefined') {
|
341
|
-
referenceElement = this._config.reference[0];
|
342
|
-
}
|
354
|
+
referenceElement = getElement(this._config.reference);
|
343
355
|
} else if (typeof this._config.reference === 'object') {
|
344
356
|
referenceElement = this._config.reference;
|
345
357
|
}
|
346
358
|
|
347
|
-
|
359
|
+
const popperConfig = this._getPopperConfig();
|
348
360
|
|
349
|
-
|
350
|
-
|
351
|
-
});
|
352
|
-
this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);
|
361
|
+
const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
|
362
|
+
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
|
353
363
|
|
354
364
|
if (isDisplayStatic) {
|
355
365
|
Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
|
@@ -361,11 +371,7 @@
|
|
361
371
|
|
362
372
|
|
363
373
|
if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
|
364
|
-
|
365
|
-
|
366
|
-
(_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
|
367
|
-
return EventHandler__default['default'].on(elem, 'mouseover', null, noop());
|
368
|
-
});
|
374
|
+
[].concat(...document.body.children).forEach(elem => EventHandler__default['default'].on(elem, 'mouseover', noop));
|
369
375
|
}
|
370
376
|
|
371
377
|
this._element.focus();
|
@@ -377,85 +383,92 @@
|
|
377
383
|
this._element.classList.toggle(CLASS_NAME_SHOW);
|
378
384
|
|
379
385
|
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, relatedTarget);
|
380
|
-
}
|
386
|
+
}
|
381
387
|
|
382
|
-
|
383
|
-
if (this._element
|
388
|
+
hide() {
|
389
|
+
if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
|
384
390
|
return;
|
385
391
|
}
|
386
392
|
|
387
|
-
|
393
|
+
const relatedTarget = {
|
388
394
|
relatedTarget: this._element
|
389
395
|
};
|
390
|
-
var hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE, relatedTarget);
|
391
396
|
|
392
|
-
|
393
|
-
|
394
|
-
}
|
397
|
+
this._completeHide(relatedTarget);
|
398
|
+
}
|
395
399
|
|
400
|
+
dispose() {
|
396
401
|
if (this._popper) {
|
397
402
|
this._popper.destroy();
|
398
403
|
}
|
399
404
|
|
400
|
-
|
405
|
+
super.dispose();
|
406
|
+
}
|
401
407
|
|
402
|
-
|
408
|
+
update() {
|
409
|
+
this._inNavbar = this._detectNavbar();
|
403
410
|
|
404
|
-
|
405
|
-
|
406
|
-
|
411
|
+
if (this._popper) {
|
412
|
+
this._popper.update();
|
413
|
+
}
|
414
|
+
} // Private
|
407
415
|
|
408
|
-
_proto.dispose = function dispose() {
|
409
|
-
_BaseComponent.prototype.dispose.call(this);
|
410
416
|
|
411
|
-
|
412
|
-
this.
|
417
|
+
_addEventListeners() {
|
418
|
+
EventHandler__default['default'].on(this._element, EVENT_CLICK, event => {
|
419
|
+
event.preventDefault();
|
420
|
+
this.toggle();
|
421
|
+
});
|
422
|
+
}
|
413
423
|
|
414
|
-
|
415
|
-
|
424
|
+
_completeHide(relatedTarget) {
|
425
|
+
const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE, relatedTarget);
|
416
426
|
|
417
|
-
|
418
|
-
|
419
|
-
|
427
|
+
if (hideEvent.defaultPrevented) {
|
428
|
+
return;
|
429
|
+
} // If this is a touch-enabled device we remove the extra
|
430
|
+
// empty mouseover listeners we added for iOS support
|
420
431
|
|
421
|
-
|
422
|
-
|
432
|
+
|
433
|
+
if ('ontouchstart' in document.documentElement) {
|
434
|
+
[].concat(...document.body.children).forEach(elem => EventHandler__default['default'].off(elem, 'mouseover', noop));
|
435
|
+
}
|
423
436
|
|
424
437
|
if (this._popper) {
|
425
|
-
this._popper.
|
438
|
+
this._popper.destroy();
|
426
439
|
}
|
427
|
-
} // Private
|
428
|
-
;
|
429
440
|
|
430
|
-
|
431
|
-
var _this2 = this;
|
441
|
+
this._menu.classList.remove(CLASS_NAME_SHOW);
|
432
442
|
|
433
|
-
|
434
|
-
event.preventDefault();
|
435
|
-
event.stopPropagation();
|
443
|
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
436
444
|
|
437
|
-
|
438
|
-
});
|
439
|
-
};
|
445
|
+
this._element.setAttribute('aria-expanded', 'false');
|
440
446
|
|
441
|
-
|
442
|
-
|
447
|
+
Manipulator__default['default'].removeDataAttribute(this._menu, 'popper');
|
448
|
+
EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN, relatedTarget);
|
449
|
+
}
|
450
|
+
|
451
|
+
_getConfig(config) {
|
452
|
+
config = { ...this.constructor.Default,
|
453
|
+
...Manipulator__default['default'].getDataAttributes(this._element),
|
454
|
+
...config
|
455
|
+
};
|
443
456
|
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
444
457
|
|
445
458
|
if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
|
446
459
|
// Popper virtual elements require a getBoundingClientRect method
|
447
|
-
throw new TypeError(NAME.toUpperCase()
|
460
|
+
throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
|
448
461
|
}
|
449
462
|
|
450
463
|
return config;
|
451
|
-
}
|
464
|
+
}
|
452
465
|
|
453
|
-
|
466
|
+
_getMenuElement() {
|
454
467
|
return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0];
|
455
|
-
}
|
468
|
+
}
|
456
469
|
|
457
|
-
|
458
|
-
|
470
|
+
_getPlacement() {
|
471
|
+
const parentDropdown = this._element.parentNode;
|
459
472
|
|
460
473
|
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
|
461
474
|
return PLACEMENT_RIGHT;
|
@@ -466,46 +479,41 @@
|
|
466
479
|
} // We need to trim the value because custom properties can also include spaces
|
467
480
|
|
468
481
|
|
469
|
-
|
482
|
+
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
|
470
483
|
|
471
484
|
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
|
472
485
|
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
|
473
486
|
}
|
474
487
|
|
475
488
|
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
|
476
|
-
}
|
477
|
-
|
478
|
-
_proto._detectNavbar = function _detectNavbar() {
|
479
|
-
return this._element.closest("." + CLASS_NAME_NAVBAR) !== null;
|
480
|
-
};
|
489
|
+
}
|
481
490
|
|
482
|
-
|
483
|
-
|
491
|
+
_detectNavbar() {
|
492
|
+
return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;
|
493
|
+
}
|
484
494
|
|
485
|
-
|
495
|
+
_getOffset() {
|
496
|
+
const {
|
497
|
+
offset
|
498
|
+
} = this._config;
|
486
499
|
|
487
500
|
if (typeof offset === 'string') {
|
488
|
-
return offset.split(',').map(
|
489
|
-
return Number.parseInt(val, 10);
|
490
|
-
});
|
501
|
+
return offset.split(',').map(val => Number.parseInt(val, 10));
|
491
502
|
}
|
492
503
|
|
493
504
|
if (typeof offset === 'function') {
|
494
|
-
return
|
495
|
-
return offset(popperData, _this3._element);
|
496
|
-
};
|
505
|
+
return popperData => offset(popperData, this._element);
|
497
506
|
}
|
498
507
|
|
499
508
|
return offset;
|
500
|
-
}
|
509
|
+
}
|
501
510
|
|
502
|
-
|
503
|
-
|
511
|
+
_getPopperConfig() {
|
512
|
+
const defaultBsPopperConfig = {
|
504
513
|
placement: this._getPlacement(),
|
505
514
|
modifiers: [{
|
506
515
|
name: 'preventOverflow',
|
507
516
|
options: {
|
508
|
-
altBoundary: this._config.flip,
|
509
517
|
boundary: this._config.boundary
|
510
518
|
}
|
511
519
|
}, {
|
@@ -523,99 +531,94 @@
|
|
523
531
|
}];
|
524
532
|
}
|
525
533
|
|
526
|
-
return
|
527
|
-
|
528
|
-
|
534
|
+
return { ...defaultBsPopperConfig,
|
535
|
+
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
|
536
|
+
};
|
537
|
+
}
|
529
538
|
|
530
|
-
|
531
|
-
|
539
|
+
_selectMenuItem({
|
540
|
+
key,
|
541
|
+
target
|
542
|
+
}) {
|
543
|
+
const items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
|
532
544
|
|
533
|
-
|
545
|
+
if (!items.length) {
|
546
|
+
return;
|
547
|
+
} // if target isn't included in items (e.g. when expanding the dropdown)
|
548
|
+
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
549
|
+
|
550
|
+
|
551
|
+
getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
|
552
|
+
} // Static
|
534
553
|
|
535
|
-
|
536
|
-
|
537
|
-
|
554
|
+
|
555
|
+
static dropdownInterface(element, config) {
|
556
|
+
const data = Dropdown.getOrCreateInstance(element, config);
|
538
557
|
|
539
558
|
if (typeof config === 'string') {
|
540
559
|
if (typeof data[config] === 'undefined') {
|
541
|
-
throw new TypeError(
|
560
|
+
throw new TypeError(`No method named "${config}"`);
|
542
561
|
}
|
543
562
|
|
544
563
|
data[config]();
|
545
564
|
}
|
546
|
-
}
|
565
|
+
}
|
547
566
|
|
548
|
-
|
567
|
+
static jQueryInterface(config) {
|
549
568
|
return this.each(function () {
|
550
569
|
Dropdown.dropdownInterface(this, config);
|
551
570
|
});
|
552
|
-
}
|
571
|
+
}
|
553
572
|
|
554
|
-
|
573
|
+
static clearMenus(event) {
|
555
574
|
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
|
556
575
|
return;
|
557
576
|
}
|
558
577
|
|
559
|
-
|
578
|
+
const toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
|
560
579
|
|
561
|
-
for (
|
562
|
-
|
563
|
-
var relatedTarget = {
|
564
|
-
relatedTarget: toggles[i]
|
565
|
-
};
|
566
|
-
|
567
|
-
if (event && event.type === 'click') {
|
568
|
-
relatedTarget.clickEvent = event;
|
569
|
-
}
|
580
|
+
for (let i = 0, len = toggles.length; i < len; i++) {
|
581
|
+
const context = Dropdown.getInstance(toggles[i]);
|
570
582
|
|
571
|
-
if (!context) {
|
583
|
+
if (!context || context._config.autoClose === false) {
|
572
584
|
continue;
|
573
585
|
}
|
574
586
|
|
575
|
-
|
576
|
-
|
577
|
-
if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) {
|
587
|
+
if (!context._element.classList.contains(CLASS_NAME_SHOW)) {
|
578
588
|
continue;
|
579
589
|
}
|
580
590
|
|
581
|
-
|
582
|
-
|
583
|
-
}
|
584
|
-
|
585
|
-
var hideEvent = EventHandler__default['default'].trigger(toggles[i], EVENT_HIDE, relatedTarget);
|
586
|
-
|
587
|
-
if (hideEvent.defaultPrevented) {
|
588
|
-
continue;
|
589
|
-
} // If this is a touch-enabled device we remove the extra
|
590
|
-
// empty mouseover listeners we added for iOS support
|
591
|
+
const relatedTarget = {
|
592
|
+
relatedTarget: context._element
|
593
|
+
};
|
591
594
|
|
595
|
+
if (event) {
|
596
|
+
const composedPath = event.composedPath();
|
597
|
+
const isMenuTarget = composedPath.includes(context._menu);
|
592
598
|
|
593
|
-
|
594
|
-
|
599
|
+
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
|
600
|
+
continue;
|
601
|
+
} // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
|
595
602
|
|
596
|
-
(_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
|
597
|
-
return EventHandler__default['default'].off(elem, 'mouseover', null, noop());
|
598
|
-
});
|
599
|
-
}
|
600
603
|
|
601
|
-
|
604
|
+
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
|
605
|
+
continue;
|
606
|
+
}
|
602
607
|
|
603
|
-
|
604
|
-
|
608
|
+
if (event.type === 'click') {
|
609
|
+
relatedTarget.clickEvent = event;
|
610
|
+
}
|
605
611
|
}
|
606
612
|
|
607
|
-
|
608
|
-
toggles[i].classList.remove(CLASS_NAME_SHOW);
|
609
|
-
Manipulator__default['default'].removeDataAttribute(dropdownMenu, 'popper');
|
610
|
-
EventHandler__default['default'].trigger(toggles[i], EVENT_HIDDEN, relatedTarget);
|
613
|
+
context._completeHide(relatedTarget);
|
611
614
|
}
|
612
|
-
}
|
615
|
+
}
|
613
616
|
|
614
|
-
|
617
|
+
static getParentFromElement(element) {
|
615
618
|
return getElementFromSelector(element) || element.parentNode;
|
616
|
-
}
|
619
|
+
}
|
617
620
|
|
618
|
-
|
621
|
+
static dataApiKeydownHandler(event) {
|
619
622
|
// If not input/textarea:
|
620
623
|
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
|
621
624
|
// If input/textarea:
|
@@ -627,77 +630,43 @@
|
|
627
630
|
return;
|
628
631
|
}
|
629
632
|
|
633
|
+
const isActive = this.classList.contains(CLASS_NAME_SHOW);
|
634
|
+
|
635
|
+
if (!isActive && event.key === ESCAPE_KEY) {
|
636
|
+
return;
|
637
|
+
}
|
638
|
+
|
630
639
|
event.preventDefault();
|
631
640
|
event.stopPropagation();
|
632
641
|
|
633
|
-
if (this
|
642
|
+
if (isDisabled(this)) {
|
634
643
|
return;
|
635
644
|
}
|
636
645
|
|
637
|
-
|
638
|
-
var isActive = this.classList.contains(CLASS_NAME_SHOW);
|
646
|
+
const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
|
639
647
|
|
640
648
|
if (event.key === ESCAPE_KEY) {
|
641
|
-
|
642
|
-
button.focus();
|
649
|
+
getToggleButton().focus();
|
643
650
|
Dropdown.clearMenus();
|
644
651
|
return;
|
645
652
|
}
|
646
653
|
|
647
|
-
if (
|
648
|
-
|
654
|
+
if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
|
655
|
+
if (!isActive) {
|
656
|
+
getToggleButton().click();
|
657
|
+
}
|
649
658
|
|
650
|
-
|
659
|
+
Dropdown.getInstance(getToggleButton())._selectMenuItem(event);
|
651
660
|
|
652
661
|
return;
|
653
662
|
}
|
654
663
|
|
655
664
|
if (!isActive || event.key === SPACE_KEY) {
|
656
665
|
Dropdown.clearMenus();
|
657
|
-
return;
|
658
666
|
}
|
667
|
+
}
|
659
668
|
|
660
|
-
|
661
|
-
|
662
|
-
if (!items.length) {
|
663
|
-
return;
|
664
|
-
}
|
665
|
-
|
666
|
-
var index = items.indexOf(event.target); // Up
|
667
|
-
|
668
|
-
if (event.key === ARROW_UP_KEY && index > 0) {
|
669
|
-
index--;
|
670
|
-
} // Down
|
671
|
-
|
672
|
-
|
673
|
-
if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
|
674
|
-
index++;
|
675
|
-
} // index is -1 if the first keydown is an ArrowUp
|
676
|
-
|
677
|
-
|
678
|
-
index = index === -1 ? 0 : index;
|
679
|
-
items[index].focus();
|
680
|
-
};
|
681
|
-
|
682
|
-
_createClass(Dropdown, null, [{
|
683
|
-
key: "Default",
|
684
|
-
get: function get() {
|
685
|
-
return Default;
|
686
|
-
}
|
687
|
-
}, {
|
688
|
-
key: "DefaultType",
|
689
|
-
get: function get() {
|
690
|
-
return DefaultType;
|
691
|
-
}
|
692
|
-
}, {
|
693
|
-
key: "DATA_KEY",
|
694
|
-
get: function get() {
|
695
|
-
return DATA_KEY;
|
696
|
-
}
|
697
|
-
}]);
|
698
|
-
|
699
|
-
return Dropdown;
|
700
|
-
}(BaseComponent__default['default']);
|
669
|
+
}
|
701
670
|
/**
|
702
671
|
* ------------------------------------------------------------------------
|
703
672
|
* Data Api implementation
|
@@ -711,11 +680,7 @@
|
|
711
680
|
EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
|
712
681
|
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
713
682
|
event.preventDefault();
|
714
|
-
|
715
|
-
Dropdown.dropdownInterface(this, 'toggle');
|
716
|
-
});
|
717
|
-
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
|
718
|
-
return e.stopPropagation();
|
683
|
+
Dropdown.dropdownInterface(this);
|
719
684
|
});
|
720
685
|
/**
|
721
686
|
* ------------------------------------------------------------------------
|
@@ -724,7 +689,7 @@
|
|
724
689
|
* add .Dropdown to jQuery only if jQuery is present
|
725
690
|
*/
|
726
691
|
|
727
|
-
defineJQueryPlugin(
|
692
|
+
defineJQueryPlugin(Dropdown);
|
728
693
|
|
729
694
|
return Dropdown;
|
730
695
|
|