bootstrap 4.5.2 → 5.0.0.alpha1
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 +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +12 -8
- data/assets/javascripts/bootstrap.js +1876 -1220
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/javascripts/bootstrap/alert.js +133 -48
- data/assets/javascripts/bootstrap/button.js +56 -123
- data/assets/javascripts/bootstrap/carousel.js +268 -129
- data/assets/javascripts/bootstrap/collapse.js +285 -106
- data/assets/javascripts/bootstrap/dom/data.js +81 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +311 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +100 -0
- data/assets/javascripts/bootstrap/dom/polyfill.js +110 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +98 -0
- data/assets/javascripts/bootstrap/dropdown.js +235 -161
- data/assets/javascripts/bootstrap/modal.js +322 -193
- data/assets/javascripts/bootstrap/popover.js +72 -41
- data/assets/javascripts/bootstrap/scrollspy.js +151 -56
- data/assets/javascripts/bootstrap/tab.js +151 -64
- data/assets/javascripts/bootstrap/toast.js +163 -65
- data/assets/javascripts/bootstrap/tooltip.js +336 -155
- data/assets/stylesheets/_bootstrap-grid.scss +51 -15
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -1
- data/assets/stylesheets/_bootstrap.scss +14 -8
- data/assets/stylesheets/bootstrap/_alert.scss +3 -3
- data/assets/stylesheets/bootstrap/_badge.scss +2 -27
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -17
- data/assets/stylesheets/bootstrap/_button-group.scss +16 -38
- data/assets/stylesheets/bootstrap/_buttons.scss +27 -45
- data/assets/stylesheets/bootstrap/_card.scss +18 -64
- data/assets/stylesheets/bootstrap/_carousel.scss +13 -15
- data/assets/stylesheets/bootstrap/_close.scss +9 -13
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +10 -7
- data/assets/stylesheets/bootstrap/_forms.scss +9 -347
- data/assets/stylesheets/bootstrap/_functions.scss +82 -20
- data/assets/stylesheets/bootstrap/_grid.scss +3 -54
- data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +6 -3
- data/assets/stylesheets/bootstrap/_mixins.scss +6 -12
- data/assets/stylesheets/bootstrap/_modal.scss +34 -39
- data/assets/stylesheets/bootstrap/_nav.scss +8 -8
- data/assets/stylesheets/bootstrap/_navbar.scss +42 -74
- data/assets/stylesheets/bootstrap/_pagination.scss +7 -20
- data/assets/stylesheets/bootstrap/_popover.scss +5 -5
- data/assets/stylesheets/bootstrap/_progress.scss +2 -4
- data/assets/stylesheets/bootstrap/_reboot.scss +300 -164
- data/assets/stylesheets/bootstrap/_root.scss +5 -9
- data/assets/stylesheets/bootstrap/_spinners.scss +2 -2
- data/assets/stylesheets/bootstrap/_tables.scss +80 -114
- data/assets/stylesheets/bootstrap/_toasts.scss +2 -4
- data/assets/stylesheets/bootstrap/_tooltip.scss +5 -5
- data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
- data/assets/stylesheets/bootstrap/_type.scss +38 -59
- data/assets/stylesheets/bootstrap/_utilities.scss +503 -18
- data/assets/stylesheets/bootstrap/_variables.scss +544 -424
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +142 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +116 -0
- data/assets/stylesheets/bootstrap/forms/_form-file.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +136 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +82 -0
- data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +140 -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/_embed.scss +31 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
- data/assets/stylesheets/bootstrap/helpers/_screenreaders.scss +8 -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/mixins/_alert.scss +0 -4
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -8
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +62 -47
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +4 -4
- 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 +22 -67
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +9 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +84 -32
- data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -1
- 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/_screen-reader.scss +16 -22
- 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 +49 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +3 -3
- metadata +31 -39
- data/assets/javascripts/bootstrap/util.js +0 -192
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -523
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -192
- 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/_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
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Bootstrap polyfill.js v5.0.0-alpha1 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2020 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' ? factory(exports) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
9
|
+
(global = global || self, factory(global.Polyfill = {}));
|
|
10
|
+
}(this, (function (exports) { 'use strict';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* --------------------------------------------------------------------------
|
|
14
|
+
* Bootstrap (v5.0.0-alpha1): util/index.js
|
|
15
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
16
|
+
* --------------------------------------------------------------------------
|
|
17
|
+
*/
|
|
18
|
+
var MAX_UID = 1000000;
|
|
19
|
+
/**
|
|
20
|
+
* --------------------------------------------------------------------------
|
|
21
|
+
* Public Util Api
|
|
22
|
+
* --------------------------------------------------------------------------
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
var getUID = function getUID(prefix) {
|
|
27
|
+
do {
|
|
28
|
+
prefix += Math.floor(Math.random() * MAX_UID);
|
|
29
|
+
} while (document.getElementById(prefix));
|
|
30
|
+
|
|
31
|
+
return prefix;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/* istanbul ignore file */
|
|
35
|
+
exports.find = Element.prototype.querySelectorAll;
|
|
36
|
+
exports.findOne = Element.prototype.querySelector; // MSEdge resets defaultPrevented flag upon dispatchEvent call if at least one listener is attached
|
|
37
|
+
|
|
38
|
+
var defaultPreventedPreservedOnDispatch = function () {
|
|
39
|
+
var e = new CustomEvent('Bootstrap', {
|
|
40
|
+
cancelable: true
|
|
41
|
+
});
|
|
42
|
+
var element = document.createElement('div');
|
|
43
|
+
element.addEventListener('Bootstrap', function () {
|
|
44
|
+
return null;
|
|
45
|
+
});
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
element.dispatchEvent(e);
|
|
48
|
+
return e.defaultPrevented;
|
|
49
|
+
}();
|
|
50
|
+
|
|
51
|
+
var scopeSelectorRegex = /:scope\b/;
|
|
52
|
+
|
|
53
|
+
var supportScopeQuery = function () {
|
|
54
|
+
var element = document.createElement('div');
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
element.querySelectorAll(':scope *');
|
|
58
|
+
} catch (_) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return true;
|
|
63
|
+
}();
|
|
64
|
+
|
|
65
|
+
if (!supportScopeQuery) {
|
|
66
|
+
exports.find = function find(selector) {
|
|
67
|
+
if (!scopeSelectorRegex.test(selector)) {
|
|
68
|
+
return this.querySelectorAll(selector);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var hasId = Boolean(this.id);
|
|
72
|
+
|
|
73
|
+
if (!hasId) {
|
|
74
|
+
this.id = getUID('scope');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var nodeList = null;
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
selector = selector.replace(scopeSelectorRegex, "#" + this.id);
|
|
81
|
+
nodeList = this.querySelectorAll(selector);
|
|
82
|
+
} finally {
|
|
83
|
+
if (!hasId) {
|
|
84
|
+
this.removeAttribute('id');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return nodeList;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
exports.findOne = function findOne(selector) {
|
|
92
|
+
if (!scopeSelectorRegex.test(selector)) {
|
|
93
|
+
return this.querySelector(selector);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var matches = exports.find.call(this, selector);
|
|
97
|
+
|
|
98
|
+
if (typeof matches[0] !== 'undefined') {
|
|
99
|
+
return matches[0];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return null;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
exports.defaultPreventedPreservedOnDispatch = defaultPreventedPreservedOnDispatch;
|
|
107
|
+
|
|
108
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
109
|
+
|
|
110
|
+
})));
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Bootstrap selector-engine.js v5.0.0-alpha1 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2020 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(require('./polyfill.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./polyfill.js'], factory) :
|
|
9
|
+
(global = global || self, global.SelectorEngine = factory(global.Polyfill));
|
|
10
|
+
}(this, (function (polyfill_js) { 'use strict';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* --------------------------------------------------------------------------
|
|
14
|
+
* Bootstrap (v5.0.0-alpha1): dom/selector-engine.js
|
|
15
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
16
|
+
* --------------------------------------------------------------------------
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* ------------------------------------------------------------------------
|
|
20
|
+
* Constants
|
|
21
|
+
* ------------------------------------------------------------------------
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
var NODE_TEXT = 3;
|
|
25
|
+
var SelectorEngine = {
|
|
26
|
+
matches: function matches(element, selector) {
|
|
27
|
+
return element.matches(selector);
|
|
28
|
+
},
|
|
29
|
+
find: function find(selector, element) {
|
|
30
|
+
var _ref;
|
|
31
|
+
|
|
32
|
+
if (element === void 0) {
|
|
33
|
+
element = document.documentElement;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return (_ref = []).concat.apply(_ref, polyfill_js.find.call(element, selector));
|
|
37
|
+
},
|
|
38
|
+
findOne: function findOne(selector, element) {
|
|
39
|
+
if (element === void 0) {
|
|
40
|
+
element = document.documentElement;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return polyfill_js.findOne.call(element, selector);
|
|
44
|
+
},
|
|
45
|
+
children: function children(element, selector) {
|
|
46
|
+
var _ref2;
|
|
47
|
+
|
|
48
|
+
var children = (_ref2 = []).concat.apply(_ref2, element.children);
|
|
49
|
+
|
|
50
|
+
return children.filter(function (child) {
|
|
51
|
+
return child.matches(selector);
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
parents: function parents(element, selector) {
|
|
55
|
+
var parents = [];
|
|
56
|
+
var ancestor = element.parentNode;
|
|
57
|
+
|
|
58
|
+
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
|
|
59
|
+
if (this.matches(ancestor, selector)) {
|
|
60
|
+
parents.push(ancestor);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
ancestor = ancestor.parentNode;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return parents;
|
|
67
|
+
},
|
|
68
|
+
prev: function prev(element, selector) {
|
|
69
|
+
var previous = element.previousElementSibling;
|
|
70
|
+
|
|
71
|
+
while (previous) {
|
|
72
|
+
if (previous.matches(selector)) {
|
|
73
|
+
return [previous];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
previous = previous.previousElementSibling;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return [];
|
|
80
|
+
},
|
|
81
|
+
next: function next(element, selector) {
|
|
82
|
+
var next = element.nextElementSibling;
|
|
83
|
+
|
|
84
|
+
while (next) {
|
|
85
|
+
if (this.matches(next, selector)) {
|
|
86
|
+
return [next];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
next = next.nextElementSibling;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
return SelectorEngine;
|
|
97
|
+
|
|
98
|
+
})));
|
|
@@ -1,19 +1,101 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap dropdown.js
|
|
2
|
+
* Bootstrap dropdown.js v5.0.0-alpha1 (https://getbootstrap.com/)
|
|
3
3
|
* Copyright 2011-2020 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 =
|
|
10
|
-
}(this, (function (
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('popper.js'), require('./dom/selector-engine.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/manipulator.js', 'popper.js', './dom/selector-engine.js'], factory) :
|
|
9
|
+
(global = global || self, global.Dropdown = factory(global.Data, global.EventHandler, global.Manipulator, global.Popper, global.SelectorEngine));
|
|
10
|
+
}(this, (function (Data, EventHandler, Manipulator, Popper, SelectorEngine) { 'use strict';
|
|
11
|
+
|
|
12
|
+
Data = Data && Object.prototype.hasOwnProperty.call(Data, 'default') ? Data['default'] : Data;
|
|
13
|
+
EventHandler = EventHandler && Object.prototype.hasOwnProperty.call(EventHandler, 'default') ? EventHandler['default'] : EventHandler;
|
|
14
|
+
Manipulator = Manipulator && Object.prototype.hasOwnProperty.call(Manipulator, 'default') ? Manipulator['default'] : Manipulator;
|
|
13
15
|
Popper = Popper && Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default'] : Popper;
|
|
14
|
-
|
|
16
|
+
SelectorEngine = SelectorEngine && Object.prototype.hasOwnProperty.call(SelectorEngine, 'default') ? SelectorEngine['default'] : SelectorEngine;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* --------------------------------------------------------------------------
|
|
20
|
+
* Bootstrap (v5.0.0-alpha1): util/index.js
|
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
22
|
+
* --------------------------------------------------------------------------
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
var toType = function toType(obj) {
|
|
26
|
+
if (obj === null || obj === undefined) {
|
|
27
|
+
return "" + obj;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var getSelector = function getSelector(element) {
|
|
34
|
+
var selector = element.getAttribute('data-target');
|
|
35
|
+
|
|
36
|
+
if (!selector || selector === '#') {
|
|
37
|
+
var hrefAttr = element.getAttribute('href');
|
|
38
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return selector;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
var getElementFromSelector = function getElementFromSelector(element) {
|
|
45
|
+
var selector = getSelector(element);
|
|
46
|
+
return selector ? document.querySelector(selector) : null;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
var isElement = function isElement(obj) {
|
|
50
|
+
return (obj[0] || obj).nodeType;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
|
|
54
|
+
Object.keys(configTypes).forEach(function (property) {
|
|
55
|
+
var expectedTypes = configTypes[property];
|
|
56
|
+
var value = config[property];
|
|
57
|
+
var valueType = value && isElement(value) ? 'element' : toType(value);
|
|
58
|
+
|
|
59
|
+
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
60
|
+
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
var isVisible = function isVisible(element) {
|
|
66
|
+
if (!element) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (element.style && element.parentNode && element.parentNode.style) {
|
|
71
|
+
var elementStyle = getComputedStyle(element);
|
|
72
|
+
var parentNodeStyle = getComputedStyle(element.parentNode);
|
|
73
|
+
return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return false;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
var noop = function noop() {
|
|
80
|
+
return function () {};
|
|
81
|
+
};
|
|
15
82
|
|
|
16
|
-
|
|
83
|
+
var getjQuery = function getjQuery() {
|
|
84
|
+
var _window = window,
|
|
85
|
+
jQuery = _window.jQuery;
|
|
86
|
+
|
|
87
|
+
if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
|
|
88
|
+
return jQuery;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return null;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
95
|
+
|
|
96
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
97
|
+
|
|
98
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
99
|
|
|
18
100
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
19
101
|
|
|
@@ -25,24 +107,18 @@
|
|
|
25
107
|
*/
|
|
26
108
|
|
|
27
109
|
var NAME = 'dropdown';
|
|
28
|
-
var VERSION = '
|
|
110
|
+
var VERSION = '5.0.0-alpha1';
|
|
29
111
|
var DATA_KEY = 'bs.dropdown';
|
|
30
112
|
var EVENT_KEY = "." + DATA_KEY;
|
|
31
113
|
var DATA_API_KEY = '.data-api';
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
|
|
37
|
-
var
|
|
38
|
-
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
|
|
42
|
-
|
|
43
|
-
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
|
|
44
|
-
|
|
45
|
-
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
|
|
114
|
+
var ESCAPE_KEY = 'Escape';
|
|
115
|
+
var SPACE_KEY = 'Space';
|
|
116
|
+
var TAB_KEY = 'Tab';
|
|
117
|
+
var ARROW_UP_KEY = 'ArrowUp';
|
|
118
|
+
var ARROW_DOWN_KEY = 'ArrowDown';
|
|
119
|
+
var RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
|
|
120
|
+
|
|
121
|
+
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEY + "|" + ARROW_DOWN_KEY + "|" + ESCAPE_KEY);
|
|
46
122
|
var EVENT_HIDE = "hide" + EVENT_KEY;
|
|
47
123
|
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
|
|
48
124
|
var EVENT_SHOW = "show" + EVENT_KEY;
|
|
@@ -57,6 +133,7 @@
|
|
|
57
133
|
var CLASS_NAME_DROPRIGHT = 'dropright';
|
|
58
134
|
var CLASS_NAME_DROPLEFT = 'dropleft';
|
|
59
135
|
var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
|
|
136
|
+
var CLASS_NAME_NAVBAR = 'navbar';
|
|
60
137
|
var CLASS_NAME_POSITION_STATIC = 'position-static';
|
|
61
138
|
var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
|
|
62
139
|
var SELECTOR_FORM_CHILD = '.dropdown form';
|
|
@@ -100,6 +177,8 @@
|
|
|
100
177
|
this._inNavbar = this._detectNavbar();
|
|
101
178
|
|
|
102
179
|
this._addEventListeners();
|
|
180
|
+
|
|
181
|
+
Data.setData(element, DATA_KEY, this);
|
|
103
182
|
} // Getters
|
|
104
183
|
|
|
105
184
|
|
|
@@ -107,58 +186,47 @@
|
|
|
107
186
|
|
|
108
187
|
// Public
|
|
109
188
|
_proto.toggle = function toggle() {
|
|
110
|
-
if (this._element.disabled ||
|
|
189
|
+
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
|
|
111
190
|
return;
|
|
112
191
|
}
|
|
113
192
|
|
|
114
|
-
var isActive =
|
|
193
|
+
var isActive = this._element.classList.contains(CLASS_NAME_SHOW);
|
|
115
194
|
|
|
116
|
-
Dropdown.
|
|
195
|
+
Dropdown.clearMenus();
|
|
117
196
|
|
|
118
197
|
if (isActive) {
|
|
119
198
|
return;
|
|
120
199
|
}
|
|
121
200
|
|
|
122
|
-
this.show(
|
|
201
|
+
this.show();
|
|
123
202
|
};
|
|
124
203
|
|
|
125
|
-
_proto.show = function show(
|
|
126
|
-
if (
|
|
127
|
-
usePopper = false;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {
|
|
204
|
+
_proto.show = function show() {
|
|
205
|
+
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
|
|
131
206
|
return;
|
|
132
207
|
}
|
|
133
208
|
|
|
209
|
+
var parent = Dropdown.getParentFromElement(this._element);
|
|
134
210
|
var relatedTarget = {
|
|
135
211
|
relatedTarget: this._element
|
|
136
212
|
};
|
|
137
|
-
var showEvent =
|
|
138
|
-
|
|
139
|
-
var parent = Dropdown._getParentFromElement(this._element);
|
|
140
|
-
|
|
141
|
-
$(parent).trigger(showEvent);
|
|
213
|
+
var showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
|
|
142
214
|
|
|
143
|
-
if (showEvent.
|
|
215
|
+
if (showEvent.defaultPrevented) {
|
|
144
216
|
return;
|
|
145
217
|
} // Disable totally Popper.js for Dropdown in Navbar
|
|
146
218
|
|
|
147
219
|
|
|
148
|
-
if (!this._inNavbar
|
|
149
|
-
/**
|
|
150
|
-
* Check for Popper dependency
|
|
151
|
-
* Popper - https://popper.js.org
|
|
152
|
-
*/
|
|
220
|
+
if (!this._inNavbar) {
|
|
153
221
|
if (typeof Popper === 'undefined') {
|
|
154
|
-
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org
|
|
222
|
+
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org)');
|
|
155
223
|
}
|
|
156
224
|
|
|
157
225
|
var referenceElement = this._element;
|
|
158
226
|
|
|
159
227
|
if (this._config.reference === 'parent') {
|
|
160
228
|
referenceElement = parent;
|
|
161
|
-
} else if (
|
|
229
|
+
} else if (isElement(this._config.reference)) {
|
|
162
230
|
referenceElement = this._config.reference; // Check if it's jQuery element
|
|
163
231
|
|
|
164
232
|
if (typeof this._config.reference.jquery !== 'undefined') {
|
|
@@ -170,7 +238,7 @@
|
|
|
170
238
|
|
|
171
239
|
|
|
172
240
|
if (this._config.boundary !== 'scrollParent') {
|
|
173
|
-
|
|
241
|
+
parent.classList.add(CLASS_NAME_POSITION_STATIC);
|
|
174
242
|
}
|
|
175
243
|
|
|
176
244
|
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
|
|
@@ -180,33 +248,35 @@
|
|
|
180
248
|
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
|
181
249
|
|
|
182
250
|
|
|
183
|
-
if ('ontouchstart' in document.documentElement &&
|
|
184
|
-
|
|
251
|
+
if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
|
|
252
|
+
var _ref;
|
|
253
|
+
|
|
254
|
+
(_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
|
|
255
|
+
return EventHandler.on(elem, 'mouseover', null, noop());
|
|
256
|
+
});
|
|
185
257
|
}
|
|
186
258
|
|
|
187
259
|
this._element.focus();
|
|
188
260
|
|
|
189
261
|
this._element.setAttribute('aria-expanded', true);
|
|
190
262
|
|
|
191
|
-
|
|
192
|
-
|
|
263
|
+
Manipulator.toggleClass(this._menu, CLASS_NAME_SHOW);
|
|
264
|
+
Manipulator.toggleClass(this._element, CLASS_NAME_SHOW);
|
|
265
|
+
EventHandler.trigger(parent, EVENT_SHOWN, relatedTarget);
|
|
193
266
|
};
|
|
194
267
|
|
|
195
268
|
_proto.hide = function hide() {
|
|
196
|
-
if (this._element.disabled ||
|
|
269
|
+
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
|
|
197
270
|
return;
|
|
198
271
|
}
|
|
199
272
|
|
|
273
|
+
var parent = Dropdown.getParentFromElement(this._element);
|
|
200
274
|
var relatedTarget = {
|
|
201
275
|
relatedTarget: this._element
|
|
202
276
|
};
|
|
203
|
-
var hideEvent =
|
|
204
|
-
|
|
205
|
-
var parent = Dropdown._getParentFromElement(this._element);
|
|
277
|
+
var hideEvent = EventHandler.trigger(parent, EVENT_HIDE, relatedTarget);
|
|
206
278
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
if (hideEvent.isDefaultPrevented()) {
|
|
279
|
+
if (hideEvent.defaultPrevented) {
|
|
210
280
|
return;
|
|
211
281
|
}
|
|
212
282
|
|
|
@@ -214,17 +284,18 @@
|
|
|
214
284
|
this._popper.destroy();
|
|
215
285
|
}
|
|
216
286
|
|
|
217
|
-
|
|
218
|
-
|
|
287
|
+
Manipulator.toggleClass(this._menu, CLASS_NAME_SHOW);
|
|
288
|
+
Manipulator.toggleClass(this._element, CLASS_NAME_SHOW);
|
|
289
|
+
EventHandler.trigger(parent, EVENT_HIDDEN, relatedTarget);
|
|
219
290
|
};
|
|
220
291
|
|
|
221
292
|
_proto.dispose = function dispose() {
|
|
222
|
-
|
|
223
|
-
|
|
293
|
+
Data.removeData(this._element, DATA_KEY);
|
|
294
|
+
EventHandler.off(this._element, EVENT_KEY);
|
|
224
295
|
this._element = null;
|
|
225
296
|
this._menu = null;
|
|
226
297
|
|
|
227
|
-
if (this._popper
|
|
298
|
+
if (this._popper) {
|
|
228
299
|
this._popper.destroy();
|
|
229
300
|
|
|
230
301
|
this._popper = null;
|
|
@@ -234,7 +305,7 @@
|
|
|
234
305
|
_proto.update = function update() {
|
|
235
306
|
this._inNavbar = this._detectNavbar();
|
|
236
307
|
|
|
237
|
-
if (this._popper
|
|
308
|
+
if (this._popper) {
|
|
238
309
|
this._popper.scheduleUpdate();
|
|
239
310
|
}
|
|
240
311
|
} // Private
|
|
@@ -243,7 +314,7 @@
|
|
|
243
314
|
_proto._addEventListeners = function _addEventListeners() {
|
|
244
315
|
var _this = this;
|
|
245
316
|
|
|
246
|
-
|
|
317
|
+
EventHandler.on(this._element, EVENT_CLICK, function (event) {
|
|
247
318
|
event.preventDefault();
|
|
248
319
|
event.stopPropagation();
|
|
249
320
|
|
|
@@ -252,34 +323,30 @@
|
|
|
252
323
|
};
|
|
253
324
|
|
|
254
325
|
_proto._getConfig = function _getConfig(config) {
|
|
255
|
-
config =
|
|
256
|
-
|
|
326
|
+
config = _objectSpread(_objectSpread(_objectSpread({}, this.constructor.Default), Manipulator.getDataAttributes(this._element)), config);
|
|
327
|
+
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
|
257
328
|
return config;
|
|
258
329
|
};
|
|
259
330
|
|
|
260
331
|
_proto._getMenuElement = function _getMenuElement() {
|
|
261
|
-
|
|
262
|
-
var parent = Dropdown._getParentFromElement(this._element);
|
|
263
|
-
|
|
264
|
-
if (parent) {
|
|
265
|
-
this._menu = parent.querySelector(SELECTOR_MENU);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
return this._menu;
|
|
332
|
+
return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
|
|
270
333
|
};
|
|
271
334
|
|
|
272
335
|
_proto._getPlacement = function _getPlacement() {
|
|
273
|
-
var
|
|
336
|
+
var parentDropdown = this._element.parentNode;
|
|
274
337
|
var placement = PLACEMENT_BOTTOM; // Handle dropup
|
|
275
338
|
|
|
276
|
-
if (
|
|
277
|
-
placement =
|
|
278
|
-
|
|
339
|
+
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
|
|
340
|
+
placement = PLACEMENT_TOP;
|
|
341
|
+
|
|
342
|
+
if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
|
|
343
|
+
placement = PLACEMENT_TOPEND;
|
|
344
|
+
}
|
|
345
|
+
} else if (parentDropdown.classList.contains(CLASS_NAME_DROPRIGHT)) {
|
|
279
346
|
placement = PLACEMENT_RIGHT;
|
|
280
|
-
} else if (
|
|
347
|
+
} else if (parentDropdown.classList.contains(CLASS_NAME_DROPLEFT)) {
|
|
281
348
|
placement = PLACEMENT_LEFT;
|
|
282
|
-
} else if (
|
|
349
|
+
} else if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
|
|
283
350
|
placement = PLACEMENT_BOTTOMEND;
|
|
284
351
|
}
|
|
285
352
|
|
|
@@ -287,7 +354,7 @@
|
|
|
287
354
|
};
|
|
288
355
|
|
|
289
356
|
_proto._detectNavbar = function _detectNavbar() {
|
|
290
|
-
return
|
|
357
|
+
return Boolean(this._element.closest("." + CLASS_NAME_NAVBAR));
|
|
291
358
|
};
|
|
292
359
|
|
|
293
360
|
_proto._getOffset = function _getOffset() {
|
|
@@ -297,7 +364,7 @@
|
|
|
297
364
|
|
|
298
365
|
if (typeof this._config.offset === 'function') {
|
|
299
366
|
offset.fn = function (data) {
|
|
300
|
-
data.offsets =
|
|
367
|
+
data.offsets = _objectSpread(_objectSpread({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
|
|
301
368
|
return data;
|
|
302
369
|
};
|
|
303
370
|
} else {
|
|
@@ -327,42 +394,44 @@
|
|
|
327
394
|
};
|
|
328
395
|
}
|
|
329
396
|
|
|
330
|
-
return
|
|
397
|
+
return _objectSpread(_objectSpread({}, popperConfig), this._config.popperConfig);
|
|
331
398
|
} // Static
|
|
332
399
|
;
|
|
333
400
|
|
|
334
|
-
Dropdown.
|
|
335
|
-
|
|
336
|
-
|
|
401
|
+
Dropdown.dropdownInterface = function dropdownInterface(element, config) {
|
|
402
|
+
var data = Data.getData(element, DATA_KEY);
|
|
403
|
+
|
|
404
|
+
var _config = typeof config === 'object' ? config : null;
|
|
337
405
|
|
|
338
|
-
|
|
406
|
+
if (!data) {
|
|
407
|
+
data = new Dropdown(element, _config);
|
|
408
|
+
}
|
|
339
409
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
410
|
+
if (typeof config === 'string') {
|
|
411
|
+
if (typeof data[config] === 'undefined') {
|
|
412
|
+
throw new TypeError("No method named \"" + config + "\"");
|
|
343
413
|
}
|
|
344
414
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
}
|
|
415
|
+
data[config]();
|
|
416
|
+
}
|
|
417
|
+
};
|
|
349
418
|
|
|
350
|
-
|
|
351
|
-
|
|
419
|
+
Dropdown.jQueryInterface = function jQueryInterface(config) {
|
|
420
|
+
return this.each(function () {
|
|
421
|
+
Dropdown.dropdownInterface(this, config);
|
|
352
422
|
});
|
|
353
423
|
};
|
|
354
424
|
|
|
355
|
-
Dropdown.
|
|
356
|
-
if (event && (event.
|
|
425
|
+
Dropdown.clearMenus = function clearMenus(event) {
|
|
426
|
+
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
|
|
357
427
|
return;
|
|
358
428
|
}
|
|
359
429
|
|
|
360
|
-
var toggles =
|
|
430
|
+
var toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
|
|
361
431
|
|
|
362
432
|
for (var i = 0, len = toggles.length; i < len; i++) {
|
|
363
|
-
var parent = Dropdown.
|
|
364
|
-
|
|
365
|
-
var context = $(toggles[i]).data(DATA_KEY);
|
|
433
|
+
var parent = Dropdown.getParentFromElement(toggles[i]);
|
|
434
|
+
var context = Data.getData(toggles[i], DATA_KEY);
|
|
366
435
|
var relatedTarget = {
|
|
367
436
|
relatedTarget: toggles[i]
|
|
368
437
|
};
|
|
@@ -377,25 +446,28 @@
|
|
|
377
446
|
|
|
378
447
|
var dropdownMenu = context._menu;
|
|
379
448
|
|
|
380
|
-
if (
|
|
449
|
+
if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) {
|
|
381
450
|
continue;
|
|
382
451
|
}
|
|
383
452
|
|
|
384
|
-
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.
|
|
453
|
+
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.key === TAB_KEY) && dropdownMenu.contains(event.target)) {
|
|
385
454
|
continue;
|
|
386
455
|
}
|
|
387
456
|
|
|
388
|
-
var hideEvent =
|
|
389
|
-
$(parent).trigger(hideEvent);
|
|
457
|
+
var hideEvent = EventHandler.trigger(parent, EVENT_HIDE, relatedTarget);
|
|
390
458
|
|
|
391
|
-
if (hideEvent.
|
|
459
|
+
if (hideEvent.defaultPrevented) {
|
|
392
460
|
continue;
|
|
393
461
|
} // If this is a touch-enabled device we remove the extra
|
|
394
462
|
// empty mouseover listeners we added for iOS support
|
|
395
463
|
|
|
396
464
|
|
|
397
465
|
if ('ontouchstart' in document.documentElement) {
|
|
398
|
-
|
|
466
|
+
var _ref2;
|
|
467
|
+
|
|
468
|
+
(_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
|
|
469
|
+
return EventHandler.off(elem, 'mouseover', null, noop());
|
|
470
|
+
});
|
|
399
471
|
}
|
|
400
472
|
|
|
401
473
|
toggles[i].setAttribute('aria-expanded', 'false');
|
|
@@ -404,24 +476,17 @@
|
|
|
404
476
|
context._popper.destroy();
|
|
405
477
|
}
|
|
406
478
|
|
|
407
|
-
|
|
408
|
-
|
|
479
|
+
dropdownMenu.classList.remove(CLASS_NAME_SHOW);
|
|
480
|
+
toggles[i].classList.remove(CLASS_NAME_SHOW);
|
|
481
|
+
EventHandler.trigger(parent, EVENT_HIDDEN, relatedTarget);
|
|
409
482
|
}
|
|
410
483
|
};
|
|
411
484
|
|
|
412
|
-
Dropdown.
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
if (selector) {
|
|
417
|
-
parent = document.querySelector(selector);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
return parent || element.parentNode;
|
|
421
|
-
} // eslint-disable-next-line complexity
|
|
422
|
-
;
|
|
485
|
+
Dropdown.getParentFromElement = function getParentFromElement(element) {
|
|
486
|
+
return getElementFromSelector(element) || element.parentNode;
|
|
487
|
+
};
|
|
423
488
|
|
|
424
|
-
Dropdown.
|
|
489
|
+
Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
|
|
425
490
|
// If not input/textarea:
|
|
426
491
|
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
|
|
427
492
|
// If input/textarea:
|
|
@@ -429,61 +494,59 @@
|
|
|
429
494
|
// - If key is other than escape
|
|
430
495
|
// - If key is not up or down => not a dropdown command
|
|
431
496
|
// - If trigger inside the menu => not a dropdown command
|
|
432
|
-
if (/input|textarea/i.test(event.target.tagName) ? event.
|
|
497
|
+
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)) {
|
|
433
498
|
return;
|
|
434
499
|
}
|
|
435
500
|
|
|
436
|
-
|
|
501
|
+
event.preventDefault();
|
|
502
|
+
event.stopPropagation();
|
|
503
|
+
|
|
504
|
+
if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
|
|
437
505
|
return;
|
|
438
506
|
}
|
|
439
507
|
|
|
440
|
-
var parent = Dropdown.
|
|
441
|
-
|
|
442
|
-
var isActive = $(parent).hasClass(CLASS_NAME_SHOW);
|
|
508
|
+
var parent = Dropdown.getParentFromElement(this);
|
|
509
|
+
var isActive = this.classList.contains(CLASS_NAME_SHOW);
|
|
443
510
|
|
|
444
|
-
if (
|
|
511
|
+
if (event.key === ESCAPE_KEY) {
|
|
512
|
+
var button = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0];
|
|
513
|
+
button.focus();
|
|
514
|
+
Dropdown.clearMenus();
|
|
445
515
|
return;
|
|
446
516
|
}
|
|
447
517
|
|
|
448
|
-
event.
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
|
|
452
|
-
if (event.which === ESCAPE_KEYCODE) {
|
|
453
|
-
$(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus');
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
$(this).trigger('click');
|
|
518
|
+
if (!isActive || event.key === SPACE_KEY) {
|
|
519
|
+
Dropdown.clearMenus();
|
|
457
520
|
return;
|
|
458
521
|
}
|
|
459
522
|
|
|
460
|
-
var items =
|
|
461
|
-
return $(item).is(':visible');
|
|
462
|
-
});
|
|
523
|
+
var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
|
|
463
524
|
|
|
464
|
-
if (items.length
|
|
525
|
+
if (!items.length) {
|
|
465
526
|
return;
|
|
466
527
|
}
|
|
467
528
|
|
|
468
529
|
var index = items.indexOf(event.target);
|
|
469
530
|
|
|
470
|
-
if (event.
|
|
531
|
+
if (event.key === ARROW_UP_KEY && index > 0) {
|
|
471
532
|
// Up
|
|
472
533
|
index--;
|
|
473
534
|
}
|
|
474
535
|
|
|
475
|
-
if (event.
|
|
536
|
+
if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
|
|
476
537
|
// Down
|
|
477
538
|
index++;
|
|
478
|
-
}
|
|
539
|
+
} // index is -1 if the first keydown is an ArrowUp
|
|
479
540
|
|
|
480
|
-
if (index < 0) {
|
|
481
|
-
index = 0;
|
|
482
|
-
}
|
|
483
541
|
|
|
542
|
+
index = index === -1 ? 0 : index;
|
|
484
543
|
items[index].focus();
|
|
485
544
|
};
|
|
486
545
|
|
|
546
|
+
Dropdown.getInstance = function getInstance(element) {
|
|
547
|
+
return Data.getData(element, DATA_KEY);
|
|
548
|
+
};
|
|
549
|
+
|
|
487
550
|
_createClass(Dropdown, null, [{
|
|
488
551
|
key: "VERSION",
|
|
489
552
|
get: function get() {
|
|
@@ -510,27 +573,38 @@
|
|
|
510
573
|
*/
|
|
511
574
|
|
|
512
575
|
|
|
513
|
-
|
|
576
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
|
|
577
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
|
|
578
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
|
|
579
|
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
|
|
580
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
514
581
|
event.preventDefault();
|
|
515
582
|
event.stopPropagation();
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
e.stopPropagation();
|
|
583
|
+
Dropdown.dropdownInterface(this, 'toggle');
|
|
584
|
+
});
|
|
585
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
|
|
586
|
+
return e.stopPropagation();
|
|
520
587
|
});
|
|
588
|
+
var $ = getjQuery();
|
|
521
589
|
/**
|
|
522
590
|
* ------------------------------------------------------------------------
|
|
523
591
|
* jQuery
|
|
524
592
|
* ------------------------------------------------------------------------
|
|
593
|
+
* add .dropdown to jQuery only if jQuery is present
|
|
525
594
|
*/
|
|
526
595
|
|
|
527
|
-
|
|
528
|
-
$.fn[NAME].Constructor = Dropdown;
|
|
596
|
+
/* istanbul ignore if */
|
|
529
597
|
|
|
530
|
-
|
|
531
|
-
$.fn[NAME]
|
|
532
|
-
|
|
533
|
-
|
|
598
|
+
if ($) {
|
|
599
|
+
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
|
600
|
+
$.fn[NAME] = Dropdown.jQueryInterface;
|
|
601
|
+
$.fn[NAME].Constructor = Dropdown;
|
|
602
|
+
|
|
603
|
+
$.fn[NAME].noConflict = function () {
|
|
604
|
+
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
605
|
+
return Dropdown.jQueryInterface;
|
|
606
|
+
};
|
|
607
|
+
}
|
|
534
608
|
|
|
535
609
|
return Dropdown;
|
|
536
610
|
|