bootstrap 4.3.0 → 5.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +1 -1
  5. data/assets/javascripts/bootstrap-sprockets.js +5 -1
  6. data/assets/javascripts/bootstrap.js +2292 -1514
  7. data/assets/javascripts/bootstrap.min.js +4 -4
  8. data/assets/javascripts/bootstrap/alert.js +148 -85
  9. data/assets/javascripts/bootstrap/button.js +69 -110
  10. data/assets/javascripts/bootstrap/carousel.js +320 -239
  11. data/assets/javascripts/bootstrap/collapse.js +300 -177
  12. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  13. data/assets/javascripts/bootstrap/dom/event-handler.js +311 -0
  14. data/assets/javascripts/bootstrap/dom/manipulator.js +100 -0
  15. data/assets/javascripts/bootstrap/dom/polyfill.js +110 -0
  16. data/assets/javascripts/bootstrap/dom/selector-engine.js +98 -0
  17. data/assets/javascripts/bootstrap/dropdown.js +282 -265
  18. data/assets/javascripts/bootstrap/modal.js +348 -231
  19. data/assets/javascripts/bootstrap/popover.js +80 -105
  20. data/assets/javascripts/bootstrap/scrollspy.js +173 -138
  21. data/assets/javascripts/bootstrap/tab.js +180 -115
  22. data/assets/javascripts/bootstrap/toast.js +188 -132
  23. data/assets/javascripts/bootstrap/tooltip.js +508 -230
  24. data/assets/stylesheets/_bootstrap-grid.scss +54 -18
  25. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  26. data/assets/stylesheets/_bootstrap.scss +17 -11
  27. data/assets/stylesheets/bootstrap/_alert.scss +3 -3
  28. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  29. data/assets/stylesheets/bootstrap/_breadcrumb.scss +7 -18
  30. data/assets/stylesheets/bootstrap/_button-group.scss +16 -38
  31. data/assets/stylesheets/bootstrap/_buttons.scss +26 -39
  32. data/assets/stylesheets/bootstrap/_card.scss +48 -97
  33. data/assets/stylesheets/bootstrap/_carousel.scss +16 -18
  34. data/assets/stylesheets/bootstrap/_close.scss +9 -14
  35. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  36. data/assets/stylesheets/bootstrap/_dropdown.scss +13 -9
  37. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  38. data/assets/stylesheets/bootstrap/_functions.scss +141 -24
  39. data/assets/stylesheets/bootstrap/_grid.scss +4 -34
  40. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  41. data/assets/stylesheets/bootstrap/_images.scss +2 -2
  42. data/assets/stylesheets/bootstrap/_list-group.scss +41 -33
  43. data/assets/stylesheets/bootstrap/_mixins.scss +9 -15
  44. data/assets/stylesheets/bootstrap/_modal.scss +54 -48
  45. data/assets/stylesheets/bootstrap/_nav.scss +12 -9
  46. data/assets/stylesheets/bootstrap/_navbar.scss +54 -56
  47. data/assets/stylesheets/bootstrap/_pagination.scss +10 -22
  48. data/assets/stylesheets/bootstrap/_popover.scss +13 -14
  49. data/assets/stylesheets/bootstrap/_progress.scss +6 -4
  50. data/assets/stylesheets/bootstrap/_reboot.scss +318 -185
  51. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  52. data/assets/stylesheets/bootstrap/_spinners.scss +3 -2
  53. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +5 -5
  55. data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
  56. data/assets/stylesheets/bootstrap/_type.scss +40 -61
  57. data/assets/stylesheets/bootstrap/_utilities.scss +503 -17
  58. data/assets/stylesheets/bootstrap/_variables.scss +567 -430
  59. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-check.scss +142 -0
  61. data/assets/stylesheets/bootstrap/forms/_form-control.scss +116 -0
  62. data/assets/stylesheets/bootstrap/forms/_form-file.scss +91 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-range.scss +136 -0
  64. data/assets/stylesheets/bootstrap/forms/_form-select.scss +82 -0
  65. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  66. data/assets/stylesheets/bootstrap/forms/_input-group.scss +140 -0
  67. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  68. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  69. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  70. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  71. data/assets/stylesheets/bootstrap/helpers/_embed.scss +31 -0
  72. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  73. data/assets/stylesheets/bootstrap/helpers/_screenreaders.scss +8 -0
  74. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  75. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  76. data/assets/stylesheets/bootstrap/mixins/_alert.scss +0 -4
  77. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +26 -13
  78. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -8
  79. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +68 -50
  80. data/assets/stylesheets/bootstrap/mixins/_caret.scss +4 -4
  81. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  82. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  83. data/assets/stylesheets/bootstrap/mixins/_forms.scss +47 -106
  84. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +9 -11
  85. data/assets/stylesheets/bootstrap/mixins/_grid.scss +99 -29
  86. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  87. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -1
  88. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
  89. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  90. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +14 -19
  91. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  92. data/assets/stylesheets/bootstrap/mixins/_transition.scss +17 -7
  93. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +49 -0
  94. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  95. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +230 -130
  96. data/bootstrap.gemspec +1 -1
  97. data/lib/bootstrap/version.rb +2 -2
  98. data/tasks/updater/js.rb +3 -3
  99. data/tasks/updater/network.rb +2 -2
  100. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  101. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  102. data/test/gemfiles/rails_6_0.gemfile +7 -0
  103. data/test/support/dummy_rails_integration.rb +3 -1
  104. data/test/test_helper.rb +18 -13
  105. metadata +40 -42
  106. data/assets/javascripts/bootstrap/util.js +0 -171
  107. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  108. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  109. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  110. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  111. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  112. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  113. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  114. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  115. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  116. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  117. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  118. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  119. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  120. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  121. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  122. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  123. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  124. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  125. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  126. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  127. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  128. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  129. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  130. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  131. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  132. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  133. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  134. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  135. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  136. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  137. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  138. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  139. 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 v4.3.0 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
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('jquery'), require('popper.js'), require('./util.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
9
- (global = global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
10
- }(this, function ($, Popper, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
14
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
15
-
16
- function _defineProperties(target, props) {
17
- for (var i = 0; i < props.length; i++) {
18
- var descriptor = props[i];
19
- descriptor.enumerable = descriptor.enumerable || false;
20
- descriptor.configurable = true;
21
- if ("value" in descriptor) descriptor.writable = true;
22
- Object.defineProperty(target, descriptor.key, descriptor);
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
- function _createClass(Constructor, protoProps, staticProps) {
27
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
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 _defineProperty(obj, key, value) {
33
- if (key in obj) {
34
- Object.defineProperty(obj, key, {
35
- value: value,
36
- enumerable: true,
37
- configurable: true,
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 obj;
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 _objectSpread(target) {
48
- for (var i = 1; i < arguments.length; i++) {
49
- var source = arguments[i] != null ? arguments[i] : {};
50
- var ownKeys = Object.keys(source);
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 (typeof Object.getOwnPropertySymbols === 'function') {
53
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
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
- ownKeys.forEach(function (key) {
59
- _defineProperty(target, key, source[key]);
60
- });
65
+ var isVisible = function isVisible(element) {
66
+ if (!element) {
67
+ return false;
61
68
  }
62
69
 
63
- return target;
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 = '4.3.0';
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 JQUERY_NO_CONFLICT = $.fn[NAME];
78
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
79
-
80
- var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
81
-
82
- var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
83
-
84
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
85
-
86
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
87
-
88
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
89
-
90
- var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
91
- var Event = {
92
- HIDE: "hide" + EVENT_KEY,
93
- HIDDEN: "hidden" + EVENT_KEY,
94
- SHOW: "show" + EVENT_KEY,
95
- SHOWN: "shown" + EVENT_KEY,
96
- CLICK: "click" + EVENT_KEY,
97
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
98
- KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY,
99
- KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY
100
- };
101
- var ClassName = {
102
- DISABLED: 'disabled',
103
- SHOW: 'show',
104
- DROPUP: 'dropup',
105
- DROPRIGHT: 'dropright',
106
- DROPLEFT: 'dropleft',
107
- MENURIGHT: 'dropdown-menu-right',
108
- MENULEFT: 'dropdown-menu-left',
109
- POSITION_STATIC: 'position-static'
110
- };
111
- var Selector = {
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 || $(this._element).hasClass(ClassName.DISABLED)) {
189
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
168
190
  return;
169
191
  }
170
192
 
171
- var parent = Dropdown._getParentFromElement(this._element);
193
+ var isActive = this._element.classList.contains(CLASS_NAME_SHOW);
172
194
 
173
- var isActive = $(this._menu).hasClass(ClassName.SHOW);
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 = $.Event(Event.SHOW, relatedTarget);
185
- $(parent).trigger(showEvent);
213
+ var showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
186
214
 
187
- if (showEvent.isDefaultPrevented()) {
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 (Util.isElement(this._config.reference)) {
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
- $(parent).addClass(ClassName.POSITION_STATIC);
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 && $(parent).closest(Selector.NAVBAR_NAV).length === 0) {
228
- $(document.body).children().on('mouseover', null, $.noop);
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
- $(this._menu).toggleClass(ClassName.SHOW);
236
- $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
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.show = function show() {
240
- if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {
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 showEvent = $.Event(Event.SHOW, relatedTarget);
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
- _proto.hide = function hide() {
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
- var relatedTarget = {
267
- relatedTarget: this._element
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
- $(this._menu).toggleClass(ClassName.SHOW);
280
- $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
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
- $.removeData(this._element, DATA_KEY);
285
- $(this._element).off(EVENT_KEY);
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 !== null) {
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 !== null) {
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
- $(this._element).on(Event.CLICK, function (event) {
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, $(this._element).data(), config);
318
- Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
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
- if (!this._menu) {
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 $parentDropdown = $(this._element.parentNode);
336
- var placement = AttachmentMap.BOTTOM; // Handle dropup
336
+ var parentDropdown = this._element.parentNode;
337
+ var placement = PLACEMENT_BOTTOM; // Handle dropup
337
338
 
338
- if ($parentDropdown.hasClass(ClassName.DROPUP)) {
339
- placement = AttachmentMap.TOP;
339
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
340
+ placement = PLACEMENT_TOP;
340
341
 
341
- if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
342
- placement = AttachmentMap.TOPEND;
342
+ if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
343
+ placement = PLACEMENT_TOPEND;
343
344
  }
344
- } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
345
- placement = AttachmentMap.RIGHT;
346
- } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
347
- placement = AttachmentMap.LEFT;
348
- } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
349
- placement = AttachmentMap.BOTTOMEND;
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 $(this._element).closest('.navbar').length > 0;
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
- } // Disable Popper.js if we have a static display
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._jQueryInterface = function _jQueryInterface(config) {
402
- return this.each(function () {
403
- var data = $(this).data(DATA_KEY);
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
- var _config = typeof config === 'object' ? config : null;
406
+ if (!data) {
407
+ data = new Dropdown(element, _config);
408
+ }
406
409
 
407
- if (!data) {
408
- data = new Dropdown(this, _config);
409
- $(this).data(DATA_KEY, data);
410
+ if (typeof config === 'string') {
411
+ if (typeof data[config] === 'undefined') {
412
+ throw new TypeError("No method named \"" + config + "\"");
410
413
  }
411
414
 
412
- if (typeof config === 'string') {
413
- if (typeof data[config] === 'undefined') {
414
- throw new TypeError("No method named \"" + config + "\"");
415
- }
415
+ data[config]();
416
+ }
417
+ };
416
418
 
417
- data[config]();
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._clearMenus = function _clearMenus(event) {
423
- if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
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 = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
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._getParentFromElement(toggles[i]);
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 (!$(parent).hasClass(ClassName.SHOW)) {
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.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
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 = $.Event(Event.HIDE, relatedTarget);
456
- $(parent).trigger(hideEvent);
457
+ var hideEvent = EventHandler.trigger(parent, EVENT_HIDE, relatedTarget);
457
458
 
458
- if (hideEvent.isDefaultPrevented()) {
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
- $(document.body).children().off('mouseover', null, $.noop);
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
- Dropdown._getParentFromElement = function _getParentFromElement(element) {
475
- var parent;
476
- var selector = Util.getSelectorFromElement(element);
475
+ if (context._popper) {
476
+ context._popper.destroy();
477
+ }
477
478
 
478
- if (selector) {
479
- parent = document.querySelector(selector);
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
- return parent || element.parentNode;
483
- } // eslint-disable-next-line complexity
484
- ;
485
+ Dropdown.getParentFromElement = function getParentFromElement(element) {
486
+ return getElementFromSelector(element) || element.parentNode;
487
+ };
485
488
 
486
- Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
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.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
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 || $(this).hasClass(ClassName.DISABLED)) {
504
+ if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
502
505
  return;
503
506
  }
504
507
 
505
- var parent = Dropdown._getParentFromElement(this);
508
+ var parent = Dropdown.getParentFromElement(this);
509
+ var isActive = this.classList.contains(CLASS_NAME_SHOW);
506
510
 
507
- var isActive = $(parent).hasClass(ClassName.SHOW);
508
-
509
- if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
510
- if (event.which === ESCAPE_KEYCODE) {
511
- var toggle = parent.querySelector(Selector.DATA_TOGGLE);
512
- $(toggle).trigger('focus');
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
- $(this).trigger('click');
518
+ if (!isActive || event.key === SPACE_KEY) {
519
+ Dropdown.clearMenus();
516
520
  return;
517
521
  }
518
522
 
519
- var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS));
523
+ var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
520
524
 
521
- if (items.length === 0) {
525
+ if (!items.length) {
522
526
  return;
523
527
  }
524
528
 
525
529
  var index = items.indexOf(event.target);
526
530
 
527
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
531
+ if (event.key === ARROW_UP_KEY && index > 0) {
528
532
  // Up
529
533
  index--;
530
534
  }
531
535
 
532
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
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
- $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
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
- $.fn[NAME] = Dropdown._jQueryInterface;
585
- $.fn[NAME].Constructor = Dropdown;
596
+ /* istanbul ignore if */
586
597
 
587
- $.fn[NAME].noConflict = function () {
588
- $.fn[NAME] = JQUERY_NO_CONFLICT;
589
- return Dropdown._jQueryInterface;
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
+ })));