bootstrap 4.3.0 → 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/.travis.yml +15 -1
- data/CHANGELOG.md +2 -14
- data/README.md +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +5 -1
- data/assets/javascripts/bootstrap.js +2292 -1514
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/javascripts/bootstrap/alert.js +148 -85
- data/assets/javascripts/bootstrap/button.js +69 -110
- data/assets/javascripts/bootstrap/carousel.js +320 -239
- data/assets/javascripts/bootstrap/collapse.js +300 -177
- 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 +282 -265
- data/assets/javascripts/bootstrap/modal.js +348 -231
- data/assets/javascripts/bootstrap/popover.js +80 -105
- data/assets/javascripts/bootstrap/scrollspy.js +173 -138
- data/assets/javascripts/bootstrap/tab.js +180 -115
- data/assets/javascripts/bootstrap/toast.js +188 -132
- data/assets/javascripts/bootstrap/tooltip.js +508 -230
- data/assets/stylesheets/_bootstrap-grid.scss +54 -18
- data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
- data/assets/stylesheets/_bootstrap.scss +17 -11
- data/assets/stylesheets/bootstrap/_alert.scss +3 -3
- data/assets/stylesheets/bootstrap/_badge.scss +2 -27
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +7 -18
- data/assets/stylesheets/bootstrap/_button-group.scss +16 -38
- data/assets/stylesheets/bootstrap/_buttons.scss +26 -39
- data/assets/stylesheets/bootstrap/_card.scss +48 -97
- data/assets/stylesheets/bootstrap/_carousel.scss +16 -18
- data/assets/stylesheets/bootstrap/_close.scss +9 -14
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +13 -9
- data/assets/stylesheets/bootstrap/_forms.scss +9 -330
- data/assets/stylesheets/bootstrap/_functions.scss +141 -24
- data/assets/stylesheets/bootstrap/_grid.scss +4 -34
- data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
- data/assets/stylesheets/bootstrap/_images.scss +2 -2
- data/assets/stylesheets/bootstrap/_list-group.scss +41 -33
- data/assets/stylesheets/bootstrap/_mixins.scss +9 -15
- data/assets/stylesheets/bootstrap/_modal.scss +54 -48
- data/assets/stylesheets/bootstrap/_nav.scss +12 -9
- data/assets/stylesheets/bootstrap/_navbar.scss +54 -56
- data/assets/stylesheets/bootstrap/_pagination.scss +10 -22
- data/assets/stylesheets/bootstrap/_popover.scss +13 -14
- data/assets/stylesheets/bootstrap/_progress.scss +6 -4
- data/assets/stylesheets/bootstrap/_reboot.scss +318 -185
- data/assets/stylesheets/bootstrap/_root.scss +5 -8
- data/assets/stylesheets/bootstrap/_spinners.scss +3 -2
- data/assets/stylesheets/bootstrap/_tables.scss +80 -114
- data/assets/stylesheets/bootstrap/_tooltip.scss +5 -5
- data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
- data/assets/stylesheets/bootstrap/_type.scss +40 -61
- data/assets/stylesheets/bootstrap/_utilities.scss +503 -17
- data/assets/stylesheets/bootstrap/_variables.scss +567 -430
- 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/_border-radius.scss +26 -13
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -8
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +68 -50
- 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 +47 -106
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +9 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +99 -29
- data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +14 -19
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +17 -7
- 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 +230 -130
- data/bootstrap.gemspec +1 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +3 -3
- data/tasks/updater/network.rb +2 -2
- data/test/dummy_rails/app/assets/config/manifest.js +3 -0
- data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
- data/test/gemfiles/rails_6_0.gemfile +7 -0
- data/test/support/dummy_rails_integration.rb +3 -1
- data/test/test_helper.rb +18 -13
- metadata +40 -42
- data/assets/javascripts/bootstrap/util.js +0 -171
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
- 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 -21
- 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 -66
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
- 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 -16
- 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/_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,68 +1,105 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap dropdown.js
|
|
3
|
-
* Copyright 2011-
|
|
4
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
2
|
+
* Bootstrap dropdown.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
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 = global || self, global.Dropdown = factory(global.
|
|
10
|
-
}(this, function (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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;
|
|
15
|
+
Popper = Popper && Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default'] : Popper;
|
|
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;
|
|
23
28
|
}
|
|
24
|
-
}
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
29
|
-
return Constructor;
|
|
30
|
-
}
|
|
30
|
+
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
31
|
+
};
|
|
31
32
|
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
writable: true
|
|
39
|
-
});
|
|
40
|
-
} else {
|
|
41
|
-
obj[key] = value;
|
|
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;
|
|
42
39
|
}
|
|
43
40
|
|
|
44
|
-
return
|
|
45
|
-
}
|
|
41
|
+
return selector;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
var getElementFromSelector = function getElementFromSelector(element) {
|
|
45
|
+
var selector = getSelector(element);
|
|
46
|
+
return selector ? document.querySelector(selector) : null;
|
|
47
|
+
};
|
|
46
48
|
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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);
|
|
51
58
|
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
55
|
-
}));
|
|
59
|
+
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
60
|
+
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
|
|
56
61
|
}
|
|
62
|
+
});
|
|
63
|
+
};
|
|
57
64
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
var isVisible = function isVisible(element) {
|
|
66
|
+
if (!element) {
|
|
67
|
+
return false;
|
|
61
68
|
}
|
|
62
69
|
|
|
63
|
-
|
|
64
|
-
|
|
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
|
+
};
|
|
82
|
+
|
|
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; }
|
|
65
99
|
|
|
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); } }
|
|
101
|
+
|
|
102
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
66
103
|
/**
|
|
67
104
|
* ------------------------------------------------------------------------
|
|
68
105
|
* Constants
|
|
@@ -70,85 +107,68 @@
|
|
|
70
107
|
*/
|
|
71
108
|
|
|
72
109
|
var NAME = 'dropdown';
|
|
73
|
-
var VERSION = '
|
|
110
|
+
var VERSION = '5.0.0-alpha1';
|
|
74
111
|
var DATA_KEY = 'bs.dropdown';
|
|
75
112
|
var EVENT_KEY = "." + DATA_KEY;
|
|
76
113
|
var DATA_API_KEY = '.data-api';
|
|
77
|
-
var
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
var
|
|
81
|
-
|
|
82
|
-
var
|
|
83
|
-
|
|
84
|
-
var
|
|
85
|
-
|
|
86
|
-
var
|
|
87
|
-
|
|
88
|
-
var
|
|
89
|
-
|
|
90
|
-
var
|
|
91
|
-
var
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
var
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
var
|
|
112
|
-
DATA_TOGGLE: '[data-toggle="dropdown"]',
|
|
113
|
-
FORM_CHILD: '.dropdown form',
|
|
114
|
-
MENU: '.dropdown-menu',
|
|
115
|
-
NAVBAR_NAV: '.navbar-nav',
|
|
116
|
-
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
|
|
117
|
-
};
|
|
118
|
-
var AttachmentMap = {
|
|
119
|
-
TOP: 'top-start',
|
|
120
|
-
TOPEND: 'top-end',
|
|
121
|
-
BOTTOM: 'bottom-start',
|
|
122
|
-
BOTTOMEND: 'bottom-end',
|
|
123
|
-
RIGHT: 'right-start',
|
|
124
|
-
RIGHTEND: 'right-end',
|
|
125
|
-
LEFT: 'left-start',
|
|
126
|
-
LEFTEND: 'left-end'
|
|
127
|
-
};
|
|
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);
|
|
122
|
+
var EVENT_HIDE = "hide" + EVENT_KEY;
|
|
123
|
+
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
|
|
124
|
+
var EVENT_SHOW = "show" + EVENT_KEY;
|
|
125
|
+
var EVENT_SHOWN = "shown" + EVENT_KEY;
|
|
126
|
+
var EVENT_CLICK = "click" + EVENT_KEY;
|
|
127
|
+
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
|
|
128
|
+
var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY + DATA_API_KEY;
|
|
129
|
+
var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY + DATA_API_KEY;
|
|
130
|
+
var CLASS_NAME_DISABLED = 'disabled';
|
|
131
|
+
var CLASS_NAME_SHOW = 'show';
|
|
132
|
+
var CLASS_NAME_DROPUP = 'dropup';
|
|
133
|
+
var CLASS_NAME_DROPRIGHT = 'dropright';
|
|
134
|
+
var CLASS_NAME_DROPLEFT = 'dropleft';
|
|
135
|
+
var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
|
|
136
|
+
var CLASS_NAME_NAVBAR = 'navbar';
|
|
137
|
+
var CLASS_NAME_POSITION_STATIC = 'position-static';
|
|
138
|
+
var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
|
|
139
|
+
var SELECTOR_FORM_CHILD = '.dropdown form';
|
|
140
|
+
var SELECTOR_MENU = '.dropdown-menu';
|
|
141
|
+
var SELECTOR_NAVBAR_NAV = '.navbar-nav';
|
|
142
|
+
var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
|
|
143
|
+
var PLACEMENT_TOP = 'top-start';
|
|
144
|
+
var PLACEMENT_TOPEND = 'top-end';
|
|
145
|
+
var PLACEMENT_BOTTOM = 'bottom-start';
|
|
146
|
+
var PLACEMENT_BOTTOMEND = 'bottom-end';
|
|
147
|
+
var PLACEMENT_RIGHT = 'right-start';
|
|
148
|
+
var PLACEMENT_LEFT = 'left-start';
|
|
128
149
|
var Default = {
|
|
129
150
|
offset: 0,
|
|
130
151
|
flip: true,
|
|
131
152
|
boundary: 'scrollParent',
|
|
132
153
|
reference: 'toggle',
|
|
133
|
-
display: 'dynamic'
|
|
154
|
+
display: 'dynamic',
|
|
155
|
+
popperConfig: null
|
|
134
156
|
};
|
|
135
157
|
var DefaultType = {
|
|
136
158
|
offset: '(number|string|function)',
|
|
137
159
|
flip: 'boolean',
|
|
138
160
|
boundary: '(string|element)',
|
|
139
161
|
reference: '(string|element)',
|
|
140
|
-
display: 'string'
|
|
141
|
-
|
|
142
|
-
* ------------------------------------------------------------------------
|
|
143
|
-
* Class Definition
|
|
144
|
-
* ------------------------------------------------------------------------
|
|
145
|
-
*/
|
|
146
|
-
|
|
162
|
+
display: 'string',
|
|
163
|
+
popperConfig: '(null|object)'
|
|
147
164
|
};
|
|
165
|
+
/**
|
|
166
|
+
* ------------------------------------------------------------------------
|
|
167
|
+
* Class Definition
|
|
168
|
+
* ------------------------------------------------------------------------
|
|
169
|
+
*/
|
|
148
170
|
|
|
149
|
-
var Dropdown =
|
|
150
|
-
/*#__PURE__*/
|
|
151
|
-
function () {
|
|
171
|
+
var Dropdown = /*#__PURE__*/function () {
|
|
152
172
|
function Dropdown(element, config) {
|
|
153
173
|
this._element = element;
|
|
154
174
|
this._popper = null;
|
|
@@ -157,6 +177,8 @@
|
|
|
157
177
|
this._inNavbar = this._detectNavbar();
|
|
158
178
|
|
|
159
179
|
this._addEventListeners();
|
|
180
|
+
|
|
181
|
+
Data.setData(element, DATA_KEY, this);
|
|
160
182
|
} // Getters
|
|
161
183
|
|
|
162
184
|
|
|
@@ -164,45 +186,47 @@
|
|
|
164
186
|
|
|
165
187
|
// Public
|
|
166
188
|
_proto.toggle = function toggle() {
|
|
167
|
-
if (this._element.disabled ||
|
|
189
|
+
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
|
|
168
190
|
return;
|
|
169
191
|
}
|
|
170
192
|
|
|
171
|
-
var
|
|
193
|
+
var isActive = this._element.classList.contains(CLASS_NAME_SHOW);
|
|
172
194
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
Dropdown._clearMenus();
|
|
195
|
+
Dropdown.clearMenus();
|
|
176
196
|
|
|
177
197
|
if (isActive) {
|
|
178
198
|
return;
|
|
179
199
|
}
|
|
180
200
|
|
|
201
|
+
this.show();
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
_proto.show = function show() {
|
|
205
|
+
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
var parent = Dropdown.getParentFromElement(this._element);
|
|
181
210
|
var relatedTarget = {
|
|
182
211
|
relatedTarget: this._element
|
|
183
212
|
};
|
|
184
|
-
var showEvent =
|
|
185
|
-
$(parent).trigger(showEvent);
|
|
213
|
+
var showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
|
|
186
214
|
|
|
187
|
-
if (showEvent.
|
|
215
|
+
if (showEvent.defaultPrevented) {
|
|
188
216
|
return;
|
|
189
217
|
} // Disable totally Popper.js for Dropdown in Navbar
|
|
190
218
|
|
|
191
219
|
|
|
192
220
|
if (!this._inNavbar) {
|
|
193
|
-
/**
|
|
194
|
-
* Check for Popper dependency
|
|
195
|
-
* Popper - https://popper.js.org
|
|
196
|
-
*/
|
|
197
221
|
if (typeof Popper === 'undefined') {
|
|
198
|
-
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)');
|
|
199
223
|
}
|
|
200
224
|
|
|
201
225
|
var referenceElement = this._element;
|
|
202
226
|
|
|
203
227
|
if (this._config.reference === 'parent') {
|
|
204
228
|
referenceElement = parent;
|
|
205
|
-
} else if (
|
|
229
|
+
} else if (isElement(this._config.reference)) {
|
|
206
230
|
referenceElement = this._config.reference; // Check if it's jQuery element
|
|
207
231
|
|
|
208
232
|
if (typeof this._config.reference.jquery !== 'undefined') {
|
|
@@ -214,7 +238,7 @@
|
|
|
214
238
|
|
|
215
239
|
|
|
216
240
|
if (this._config.boundary !== 'scrollParent') {
|
|
217
|
-
|
|
241
|
+
parent.classList.add(CLASS_NAME_POSITION_STATIC);
|
|
218
242
|
}
|
|
219
243
|
|
|
220
244
|
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
|
|
@@ -224,69 +248,54 @@
|
|
|
224
248
|
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
|
225
249
|
|
|
226
250
|
|
|
227
|
-
if ('ontouchstart' in document.documentElement &&
|
|
228
|
-
|
|
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
|
+
});
|
|
229
257
|
}
|
|
230
258
|
|
|
231
259
|
this._element.focus();
|
|
232
260
|
|
|
233
261
|
this._element.setAttribute('aria-expanded', true);
|
|
234
262
|
|
|
235
|
-
|
|
236
|
-
|
|
263
|
+
Manipulator.toggleClass(this._menu, CLASS_NAME_SHOW);
|
|
264
|
+
Manipulator.toggleClass(this._element, CLASS_NAME_SHOW);
|
|
265
|
+
EventHandler.trigger(parent, EVENT_SHOWN, relatedTarget);
|
|
237
266
|
};
|
|
238
267
|
|
|
239
|
-
_proto.
|
|
240
|
-
if (this._element.disabled ||
|
|
268
|
+
_proto.hide = function hide() {
|
|
269
|
+
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
|
|
241
270
|
return;
|
|
242
271
|
}
|
|
243
272
|
|
|
273
|
+
var parent = Dropdown.getParentFromElement(this._element);
|
|
244
274
|
var relatedTarget = {
|
|
245
275
|
relatedTarget: this._element
|
|
246
276
|
};
|
|
247
|
-
var
|
|
248
|
-
|
|
249
|
-
var parent = Dropdown._getParentFromElement(this._element);
|
|
250
|
-
|
|
251
|
-
$(parent).trigger(showEvent);
|
|
252
|
-
|
|
253
|
-
if (showEvent.isDefaultPrevented()) {
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
$(this._menu).toggleClass(ClassName.SHOW);
|
|
258
|
-
$(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
|
|
259
|
-
};
|
|
277
|
+
var hideEvent = EventHandler.trigger(parent, EVENT_HIDE, relatedTarget);
|
|
260
278
|
|
|
261
|
-
|
|
262
|
-
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {
|
|
279
|
+
if (hideEvent.defaultPrevented) {
|
|
263
280
|
return;
|
|
264
281
|
}
|
|
265
282
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
};
|
|
269
|
-
var hideEvent = $.Event(Event.HIDE, relatedTarget);
|
|
270
|
-
|
|
271
|
-
var parent = Dropdown._getParentFromElement(this._element);
|
|
272
|
-
|
|
273
|
-
$(parent).trigger(hideEvent);
|
|
274
|
-
|
|
275
|
-
if (hideEvent.isDefaultPrevented()) {
|
|
276
|
-
return;
|
|
283
|
+
if (this._popper) {
|
|
284
|
+
this._popper.destroy();
|
|
277
285
|
}
|
|
278
286
|
|
|
279
|
-
|
|
280
|
-
|
|
287
|
+
Manipulator.toggleClass(this._menu, CLASS_NAME_SHOW);
|
|
288
|
+
Manipulator.toggleClass(this._element, CLASS_NAME_SHOW);
|
|
289
|
+
EventHandler.trigger(parent, EVENT_HIDDEN, relatedTarget);
|
|
281
290
|
};
|
|
282
291
|
|
|
283
292
|
_proto.dispose = function dispose() {
|
|
284
|
-
|
|
285
|
-
|
|
293
|
+
Data.removeData(this._element, DATA_KEY);
|
|
294
|
+
EventHandler.off(this._element, EVENT_KEY);
|
|
286
295
|
this._element = null;
|
|
287
296
|
this._menu = null;
|
|
288
297
|
|
|
289
|
-
if (this._popper
|
|
298
|
+
if (this._popper) {
|
|
290
299
|
this._popper.destroy();
|
|
291
300
|
|
|
292
301
|
this._popper = null;
|
|
@@ -296,7 +305,7 @@
|
|
|
296
305
|
_proto.update = function update() {
|
|
297
306
|
this._inNavbar = this._detectNavbar();
|
|
298
307
|
|
|
299
|
-
if (this._popper
|
|
308
|
+
if (this._popper) {
|
|
300
309
|
this._popper.scheduleUpdate();
|
|
301
310
|
}
|
|
302
311
|
} // Private
|
|
@@ -305,7 +314,7 @@
|
|
|
305
314
|
_proto._addEventListeners = function _addEventListeners() {
|
|
306
315
|
var _this = this;
|
|
307
316
|
|
|
308
|
-
|
|
317
|
+
EventHandler.on(this._element, EVENT_CLICK, function (event) {
|
|
309
318
|
event.preventDefault();
|
|
310
319
|
event.stopPropagation();
|
|
311
320
|
|
|
@@ -314,46 +323,38 @@
|
|
|
314
323
|
};
|
|
315
324
|
|
|
316
325
|
_proto._getConfig = function _getConfig(config) {
|
|
317
|
-
config = _objectSpread({}, this.constructor.Default,
|
|
318
|
-
|
|
326
|
+
config = _objectSpread(_objectSpread(_objectSpread({}, this.constructor.Default), Manipulator.getDataAttributes(this._element)), config);
|
|
327
|
+
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
|
319
328
|
return config;
|
|
320
329
|
};
|
|
321
330
|
|
|
322
331
|
_proto._getMenuElement = function _getMenuElement() {
|
|
323
|
-
|
|
324
|
-
var parent = Dropdown._getParentFromElement(this._element);
|
|
325
|
-
|
|
326
|
-
if (parent) {
|
|
327
|
-
this._menu = parent.querySelector(Selector.MENU);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
return this._menu;
|
|
332
|
+
return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
|
|
332
333
|
};
|
|
333
334
|
|
|
334
335
|
_proto._getPlacement = function _getPlacement() {
|
|
335
|
-
var
|
|
336
|
-
var placement =
|
|
336
|
+
var parentDropdown = this._element.parentNode;
|
|
337
|
+
var placement = PLACEMENT_BOTTOM; // Handle dropup
|
|
337
338
|
|
|
338
|
-
if (
|
|
339
|
-
placement =
|
|
339
|
+
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
|
|
340
|
+
placement = PLACEMENT_TOP;
|
|
340
341
|
|
|
341
|
-
if (
|
|
342
|
-
placement =
|
|
342
|
+
if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
|
|
343
|
+
placement = PLACEMENT_TOPEND;
|
|
343
344
|
}
|
|
344
|
-
} else if (
|
|
345
|
-
placement =
|
|
346
|
-
} else if (
|
|
347
|
-
placement =
|
|
348
|
-
} else if (
|
|
349
|
-
placement =
|
|
345
|
+
} else if (parentDropdown.classList.contains(CLASS_NAME_DROPRIGHT)) {
|
|
346
|
+
placement = PLACEMENT_RIGHT;
|
|
347
|
+
} else if (parentDropdown.classList.contains(CLASS_NAME_DROPLEFT)) {
|
|
348
|
+
placement = PLACEMENT_LEFT;
|
|
349
|
+
} else if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
|
|
350
|
+
placement = PLACEMENT_BOTTOMEND;
|
|
350
351
|
}
|
|
351
352
|
|
|
352
353
|
return placement;
|
|
353
354
|
};
|
|
354
355
|
|
|
355
356
|
_proto._detectNavbar = function _detectNavbar() {
|
|
356
|
-
return
|
|
357
|
+
return Boolean(this._element.closest("." + CLASS_NAME_NAVBAR));
|
|
357
358
|
};
|
|
358
359
|
|
|
359
360
|
_proto._getOffset = function _getOffset() {
|
|
@@ -363,7 +364,7 @@
|
|
|
363
364
|
|
|
364
365
|
if (typeof this._config.offset === 'function') {
|
|
365
366
|
offset.fn = function (data) {
|
|
366
|
-
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
|
|
367
|
+
data.offsets = _objectSpread(_objectSpread({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
|
|
367
368
|
return data;
|
|
368
369
|
};
|
|
369
370
|
} else {
|
|
@@ -384,9 +385,8 @@
|
|
|
384
385
|
preventOverflow: {
|
|
385
386
|
boundariesElement: this._config.boundary
|
|
386
387
|
}
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
};
|
|
388
|
+
}
|
|
389
|
+
}; // Disable Popper.js if we have a static display
|
|
390
390
|
|
|
391
391
|
if (this._config.display === 'static') {
|
|
392
392
|
popperConfig.modifiers.applyStyle = {
|
|
@@ -394,42 +394,44 @@
|
|
|
394
394
|
};
|
|
395
395
|
}
|
|
396
396
|
|
|
397
|
-
return popperConfig;
|
|
397
|
+
return _objectSpread(_objectSpread({}, popperConfig), this._config.popperConfig);
|
|
398
398
|
} // Static
|
|
399
399
|
;
|
|
400
400
|
|
|
401
|
-
Dropdown.
|
|
402
|
-
|
|
403
|
-
|
|
401
|
+
Dropdown.dropdownInterface = function dropdownInterface(element, config) {
|
|
402
|
+
var data = Data.getData(element, DATA_KEY);
|
|
403
|
+
|
|
404
|
+
var _config = typeof config === 'object' ? config : null;
|
|
404
405
|
|
|
405
|
-
|
|
406
|
+
if (!data) {
|
|
407
|
+
data = new Dropdown(element, _config);
|
|
408
|
+
}
|
|
406
409
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
+
if (typeof config === 'string') {
|
|
411
|
+
if (typeof data[config] === 'undefined') {
|
|
412
|
+
throw new TypeError("No method named \"" + config + "\"");
|
|
410
413
|
}
|
|
411
414
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
}
|
|
415
|
+
data[config]();
|
|
416
|
+
}
|
|
417
|
+
};
|
|
416
418
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
+
Dropdown.jQueryInterface = function jQueryInterface(config) {
|
|
420
|
+
return this.each(function () {
|
|
421
|
+
Dropdown.dropdownInterface(this, config);
|
|
419
422
|
});
|
|
420
423
|
};
|
|
421
424
|
|
|
422
|
-
Dropdown.
|
|
423
|
-
if (event && (event.
|
|
425
|
+
Dropdown.clearMenus = function clearMenus(event) {
|
|
426
|
+
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
|
|
424
427
|
return;
|
|
425
428
|
}
|
|
426
429
|
|
|
427
|
-
var toggles =
|
|
430
|
+
var toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
|
|
428
431
|
|
|
429
432
|
for (var i = 0, len = toggles.length; i < len; i++) {
|
|
430
|
-
var parent = Dropdown.
|
|
431
|
-
|
|
432
|
-
var context = $(toggles[i]).data(DATA_KEY);
|
|
433
|
+
var parent = Dropdown.getParentFromElement(toggles[i]);
|
|
434
|
+
var context = Data.getData(toggles[i], DATA_KEY);
|
|
433
435
|
var relatedTarget = {
|
|
434
436
|
relatedTarget: toggles[i]
|
|
435
437
|
};
|
|
@@ -444,46 +446,47 @@
|
|
|
444
446
|
|
|
445
447
|
var dropdownMenu = context._menu;
|
|
446
448
|
|
|
447
|
-
if (
|
|
449
|
+
if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) {
|
|
448
450
|
continue;
|
|
449
451
|
}
|
|
450
452
|
|
|
451
|
-
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)) {
|
|
452
454
|
continue;
|
|
453
455
|
}
|
|
454
456
|
|
|
455
|
-
var hideEvent =
|
|
456
|
-
$(parent).trigger(hideEvent);
|
|
457
|
+
var hideEvent = EventHandler.trigger(parent, EVENT_HIDE, relatedTarget);
|
|
457
458
|
|
|
458
|
-
if (hideEvent.
|
|
459
|
+
if (hideEvent.defaultPrevented) {
|
|
459
460
|
continue;
|
|
460
461
|
} // If this is a touch-enabled device we remove the extra
|
|
461
462
|
// empty mouseover listeners we added for iOS support
|
|
462
463
|
|
|
463
464
|
|
|
464
465
|
if ('ontouchstart' in document.documentElement) {
|
|
465
|
-
|
|
466
|
+
var _ref2;
|
|
467
|
+
|
|
468
|
+
(_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
|
|
469
|
+
return EventHandler.off(elem, 'mouseover', null, noop());
|
|
470
|
+
});
|
|
466
471
|
}
|
|
467
472
|
|
|
468
473
|
toggles[i].setAttribute('aria-expanded', 'false');
|
|
469
|
-
$(dropdownMenu).removeClass(ClassName.SHOW);
|
|
470
|
-
$(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
|
|
471
|
-
}
|
|
472
|
-
};
|
|
473
474
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
475
|
+
if (context._popper) {
|
|
476
|
+
context._popper.destroy();
|
|
477
|
+
}
|
|
477
478
|
|
|
478
|
-
|
|
479
|
-
|
|
479
|
+
dropdownMenu.classList.remove(CLASS_NAME_SHOW);
|
|
480
|
+
toggles[i].classList.remove(CLASS_NAME_SHOW);
|
|
481
|
+
EventHandler.trigger(parent, EVENT_HIDDEN, relatedTarget);
|
|
480
482
|
}
|
|
483
|
+
};
|
|
481
484
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
;
|
|
485
|
+
Dropdown.getParentFromElement = function getParentFromElement(element) {
|
|
486
|
+
return getElementFromSelector(element) || element.parentNode;
|
|
487
|
+
};
|
|
485
488
|
|
|
486
|
-
Dropdown.
|
|
489
|
+
Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
|
|
487
490
|
// If not input/textarea:
|
|
488
491
|
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
|
|
489
492
|
// If input/textarea:
|
|
@@ -491,56 +494,59 @@
|
|
|
491
494
|
// - If key is other than escape
|
|
492
495
|
// - If key is not up or down => not a dropdown command
|
|
493
496
|
// - If trigger inside the menu => not a dropdown command
|
|
494
|
-
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)) {
|
|
495
498
|
return;
|
|
496
499
|
}
|
|
497
500
|
|
|
498
501
|
event.preventDefault();
|
|
499
502
|
event.stopPropagation();
|
|
500
503
|
|
|
501
|
-
if (this.disabled ||
|
|
504
|
+
if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
|
|
502
505
|
return;
|
|
503
506
|
}
|
|
504
507
|
|
|
505
|
-
var parent = Dropdown.
|
|
508
|
+
var parent = Dropdown.getParentFromElement(this);
|
|
509
|
+
var isActive = this.classList.contains(CLASS_NAME_SHOW);
|
|
506
510
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
}
|
|
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();
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
514
517
|
|
|
515
|
-
|
|
518
|
+
if (!isActive || event.key === SPACE_KEY) {
|
|
519
|
+
Dropdown.clearMenus();
|
|
516
520
|
return;
|
|
517
521
|
}
|
|
518
522
|
|
|
519
|
-
var items =
|
|
523
|
+
var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
|
|
520
524
|
|
|
521
|
-
if (items.length
|
|
525
|
+
if (!items.length) {
|
|
522
526
|
return;
|
|
523
527
|
}
|
|
524
528
|
|
|
525
529
|
var index = items.indexOf(event.target);
|
|
526
530
|
|
|
527
|
-
if (event.
|
|
531
|
+
if (event.key === ARROW_UP_KEY && index > 0) {
|
|
528
532
|
// Up
|
|
529
533
|
index--;
|
|
530
534
|
}
|
|
531
535
|
|
|
532
|
-
if (event.
|
|
536
|
+
if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
|
|
533
537
|
// Down
|
|
534
538
|
index++;
|
|
535
|
-
}
|
|
539
|
+
} // index is -1 if the first keydown is an ArrowUp
|
|
536
540
|
|
|
537
|
-
if (index < 0) {
|
|
538
|
-
index = 0;
|
|
539
|
-
}
|
|
540
541
|
|
|
542
|
+
index = index === -1 ? 0 : index;
|
|
541
543
|
items[index].focus();
|
|
542
544
|
};
|
|
543
545
|
|
|
546
|
+
Dropdown.getInstance = function getInstance(element) {
|
|
547
|
+
return Data.getData(element, DATA_KEY);
|
|
548
|
+
};
|
|
549
|
+
|
|
544
550
|
_createClass(Dropdown, null, [{
|
|
545
551
|
key: "VERSION",
|
|
546
552
|
get: function get() {
|
|
@@ -567,28 +573,39 @@
|
|
|
567
573
|
*/
|
|
568
574
|
|
|
569
575
|
|
|
570
|
-
|
|
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) {
|
|
571
581
|
event.preventDefault();
|
|
572
582
|
event.stopPropagation();
|
|
573
|
-
|
|
574
|
-
Dropdown._jQueryInterface.call($(this), 'toggle');
|
|
575
|
-
}).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
|
|
576
|
-
e.stopPropagation();
|
|
583
|
+
Dropdown.dropdownInterface(this, 'toggle');
|
|
577
584
|
});
|
|
585
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
|
|
586
|
+
return e.stopPropagation();
|
|
587
|
+
});
|
|
588
|
+
var $ = getjQuery();
|
|
578
589
|
/**
|
|
579
590
|
* ------------------------------------------------------------------------
|
|
580
591
|
* jQuery
|
|
581
592
|
* ------------------------------------------------------------------------
|
|
593
|
+
* add .dropdown to jQuery only if jQuery is present
|
|
582
594
|
*/
|
|
583
595
|
|
|
584
|
-
|
|
585
|
-
$.fn[NAME].Constructor = Dropdown;
|
|
596
|
+
/* istanbul ignore if */
|
|
586
597
|
|
|
587
|
-
|
|
588
|
-
$.fn[NAME]
|
|
589
|
-
|
|
590
|
-
|
|
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
|
+
}
|
|
591
608
|
|
|
592
609
|
return Dropdown;
|
|
593
610
|
|
|
594
|
-
}));
|
|
611
|
+
})));
|