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