bootstrap 4.6.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.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/javascripts/bootstrap-sprockets.js +12 -8
  4. data/assets/javascripts/bootstrap.js +1889 -1255
  5. data/assets/javascripts/bootstrap.min.js +3 -3
  6. data/assets/javascripts/bootstrap/alert.js +136 -66
  7. data/assets/javascripts/bootstrap/button.js +59 -147
  8. data/assets/javascripts/bootstrap/carousel.js +276 -180
  9. data/assets/javascripts/bootstrap/collapse.js +284 -136
  10. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  11. data/assets/javascripts/bootstrap/dom/event-handler.js +311 -0
  12. data/assets/javascripts/bootstrap/dom/manipulator.js +100 -0
  13. data/assets/javascripts/bootstrap/dom/polyfill.js +110 -0
  14. data/assets/javascripts/bootstrap/dom/selector-engine.js +98 -0
  15. data/assets/javascripts/bootstrap/dropdown.js +238 -195
  16. data/assets/javascripts/bootstrap/modal.js +321 -223
  17. data/assets/javascripts/bootstrap/popover.js +75 -79
  18. data/assets/javascripts/bootstrap/scrollspy.js +150 -86
  19. data/assets/javascripts/bootstrap/tab.js +154 -82
  20. data/assets/javascripts/bootstrap/toast.js +162 -95
  21. data/assets/javascripts/bootstrap/tooltip.js +337 -191
  22. data/assets/stylesheets/_bootstrap-grid.scss +53 -18
  23. data/assets/stylesheets/_bootstrap-reboot.scss +6 -3
  24. data/assets/stylesheets/_bootstrap.scss +16 -10
  25. data/assets/stylesheets/bootstrap/_alert.scss +3 -4
  26. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  27. data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -17
  28. data/assets/stylesheets/bootstrap/_button-group.scss +16 -38
  29. data/assets/stylesheets/bootstrap/_buttons.scss +27 -45
  30. data/assets/stylesheets/bootstrap/_card.scss +22 -68
  31. data/assets/stylesheets/bootstrap/_carousel.scss +13 -15
  32. data/assets/stylesheets/bootstrap/_close.scss +9 -13
  33. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  34. data/assets/stylesheets/bootstrap/_dropdown.scss +12 -9
  35. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  36. data/assets/stylesheets/bootstrap/_functions.scss +82 -23
  37. data/assets/stylesheets/bootstrap/_grid.scss +3 -54
  38. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  39. data/assets/stylesheets/bootstrap/_list-group.scss +7 -4
  40. data/assets/stylesheets/bootstrap/_mixins.scss +6 -12
  41. data/assets/stylesheets/bootstrap/_modal.scss +34 -39
  42. data/assets/stylesheets/bootstrap/_nav.scss +7 -4
  43. data/assets/stylesheets/bootstrap/_navbar.scss +42 -82
  44. data/assets/stylesheets/bootstrap/_pagination.scss +7 -20
  45. data/assets/stylesheets/bootstrap/_popover.scss +5 -5
  46. data/assets/stylesheets/bootstrap/_progress.scss +3 -5
  47. data/assets/stylesheets/bootstrap/_reboot.scss +304 -172
  48. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  49. data/assets/stylesheets/bootstrap/_spinners.scss +4 -13
  50. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  51. data/assets/stylesheets/bootstrap/_toasts.scss +2 -4
  52. data/assets/stylesheets/bootstrap/_tooltip.scss +5 -5
  53. data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
  54. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  55. data/assets/stylesheets/bootstrap/_utilities.scss +503 -18
  56. data/assets/stylesheets/bootstrap/_variables.scss +546 -432
  57. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  58. data/assets/stylesheets/bootstrap/forms/_form-check.scss +142 -0
  59. data/assets/stylesheets/bootstrap/forms/_form-control.scss +116 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-file.scss +91 -0
  61. data/assets/stylesheets/bootstrap/forms/_form-range.scss +136 -0
  62. data/assets/stylesheets/bootstrap/forms/_form-select.scss +82 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  64. data/assets/stylesheets/bootstrap/forms/_input-group.scss +140 -0
  65. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  66. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  67. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  68. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  69. data/assets/stylesheets/bootstrap/helpers/_embed.scss +31 -0
  70. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  71. data/assets/stylesheets/bootstrap/helpers/_screenreaders.scss +8 -0
  72. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  73. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  74. data/assets/stylesheets/bootstrap/mixins/_alert.scss +0 -4
  75. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +1 -1
  76. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -8
  77. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +62 -47
  78. data/assets/stylesheets/bootstrap/mixins/_caret.scss +4 -4
  79. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  80. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  81. data/assets/stylesheets/bootstrap/mixins/_forms.scss +22 -74
  82. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +9 -11
  83. data/assets/stylesheets/bootstrap/mixins/_grid.scss +85 -33
  84. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  85. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -1
  86. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  87. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
  88. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  89. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +17 -23
  90. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  91. data/assets/stylesheets/bootstrap/mixins/_transition.scss +2 -2
  92. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +49 -0
  93. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  94. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  95. data/lib/bootstrap/version.rb +2 -2
  96. data/tasks/updater/js.rb +3 -3
  97. metadata +32 -40
  98. data/assets/javascripts/bootstrap/util.js +0 -192
  99. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  100. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  101. data/assets/stylesheets/bootstrap/_input-group.scss +0 -208
  102. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  103. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  104. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  105. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  106. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  107. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  108. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  109. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  110. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  111. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  112. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  113. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  114. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  115. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  116. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  117. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  118. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  119. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  120. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  121. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  122. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  123. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  124. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  125. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  126. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  127. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  128. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  129. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  130. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  131. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  132. 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,54 +1,105 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v4.6.0 (https://getbootstrap.com/)
3
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
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
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'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
10
- }(this, (function ($, Popper, Util) { 'use strict';
11
-
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
- var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
16
- var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
17
-
18
- function _defineProperties(target, props) {
19
- for (var i = 0; i < props.length; i++) {
20
- var descriptor = props[i];
21
- descriptor.enumerable = descriptor.enumerable || false;
22
- descriptor.configurable = true;
23
- if ("value" in descriptor) descriptor.writable = true;
24
- 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;
25
28
  }
26
- }
27
29
 
28
- function _createClass(Constructor, protoProps, staticProps) {
29
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
30
- if (staticProps) _defineProperties(Constructor, staticProps);
31
- return Constructor;
32
- }
30
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
31
+ };
33
32
 
34
- function _extends() {
35
- _extends = Object.assign || function (target) {
36
- for (var i = 1; i < arguments.length; i++) {
37
- var source = arguments[i];
33
+ var getSelector = function getSelector(element) {
34
+ var selector = element.getAttribute('data-target');
38
35
 
39
- for (var key in source) {
40
- if (Object.prototype.hasOwnProperty.call(source, key)) {
41
- target[key] = source[key];
42
- }
43
- }
36
+ if (!selector || selector === '#') {
37
+ var hrefAttr = element.getAttribute('href');
38
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
39
+ }
40
+
41
+ return selector;
42
+ };
43
+
44
+ var getElementFromSelector = function getElementFromSelector(element) {
45
+ var selector = getSelector(element);
46
+ return selector ? document.querySelector(selector) : null;
47
+ };
48
+
49
+ var isElement = function isElement(obj) {
50
+ return (obj[0] || obj).nodeType;
51
+ };
52
+
53
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
54
+ Object.keys(configTypes).forEach(function (property) {
55
+ var expectedTypes = configTypes[property];
56
+ var value = config[property];
57
+ var valueType = value && isElement(value) ? 'element' : toType(value);
58
+
59
+ if (!new RegExp(expectedTypes).test(valueType)) {
60
+ throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
44
61
  }
62
+ });
63
+ };
45
64
 
46
- return target;
47
- };
65
+ var isVisible = function isVisible(element) {
66
+ if (!element) {
67
+ return false;
68
+ }
48
69
 
49
- return _extends.apply(this, arguments);
50
- }
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
+ }
51
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; }
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; }
52
103
  /**
53
104
  * ------------------------------------------------------------------------
54
105
  * Constants
@@ -56,24 +107,18 @@
56
107
  */
57
108
 
58
109
  var NAME = 'dropdown';
59
- var VERSION = '4.6.0';
110
+ var VERSION = '5.0.0-alpha1';
60
111
  var DATA_KEY = 'bs.dropdown';
61
112
  var EVENT_KEY = "." + DATA_KEY;
62
113
  var DATA_API_KEY = '.data-api';
63
- var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
64
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
65
-
66
- var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
67
-
68
- var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
69
-
70
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
71
-
72
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
73
-
74
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
75
-
76
- var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
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);
77
122
  var EVENT_HIDE = "hide" + EVENT_KEY;
78
123
  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
79
124
  var EVENT_SHOW = "show" + EVENT_KEY;
@@ -88,6 +133,7 @@
88
133
  var CLASS_NAME_DROPRIGHT = 'dropright';
89
134
  var CLASS_NAME_DROPLEFT = 'dropleft';
90
135
  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
136
+ var CLASS_NAME_NAVBAR = 'navbar';
91
137
  var CLASS_NAME_POSITION_STATIC = 'position-static';
92
138
  var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
93
139
  var SELECTOR_FORM_CHILD = '.dropdown form';
@@ -131,6 +177,8 @@
131
177
  this._inNavbar = this._detectNavbar();
132
178
 
133
179
  this._addEventListeners();
180
+
181
+ Data.setData(element, DATA_KEY, this);
134
182
  } // Getters
135
183
 
136
184
 
@@ -138,58 +186,47 @@
138
186
 
139
187
  // Public
140
188
  _proto.toggle = function toggle() {
141
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {
189
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
142
190
  return;
143
191
  }
144
192
 
145
- var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW);
193
+ var isActive = this._element.classList.contains(CLASS_NAME_SHOW);
146
194
 
147
- Dropdown._clearMenus();
195
+ Dropdown.clearMenus();
148
196
 
149
197
  if (isActive) {
150
198
  return;
151
199
  }
152
200
 
153
- this.show(true);
201
+ this.show();
154
202
  };
155
203
 
156
- _proto.show = function show(usePopper) {
157
- if (usePopper === void 0) {
158
- usePopper = false;
159
- }
160
-
161
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
204
+ _proto.show = function show() {
205
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
162
206
  return;
163
207
  }
164
208
 
209
+ var parent = Dropdown.getParentFromElement(this._element);
165
210
  var relatedTarget = {
166
211
  relatedTarget: this._element
167
212
  };
168
- var showEvent = $__default['default'].Event(EVENT_SHOW, relatedTarget);
169
-
170
- var parent = Dropdown._getParentFromElement(this._element);
213
+ var showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
171
214
 
172
- $__default['default'](parent).trigger(showEvent);
173
-
174
- if (showEvent.isDefaultPrevented()) {
215
+ if (showEvent.defaultPrevented) {
175
216
  return;
176
- } // Totally disable Popper for Dropdowns in Navbar
217
+ } // Disable totally Popper.js for Dropdown in Navbar
177
218
 
178
219
 
179
- if (!this._inNavbar && usePopper) {
180
- /**
181
- * Check for Popper dependency
182
- * Popper - https://popper.js.org
183
- */
184
- if (typeof Popper__default['default'] === 'undefined') {
185
- throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
220
+ if (!this._inNavbar) {
221
+ if (typeof Popper === 'undefined') {
222
+ throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org)');
186
223
  }
187
224
 
188
225
  var referenceElement = this._element;
189
226
 
190
227
  if (this._config.reference === 'parent') {
191
228
  referenceElement = parent;
192
- } else if (Util__default['default'].isElement(this._config.reference)) {
229
+ } else if (isElement(this._config.reference)) {
193
230
  referenceElement = this._config.reference; // Check if it's jQuery element
194
231
 
195
232
  if (typeof this._config.reference.jquery !== 'undefined') {
@@ -201,43 +238,45 @@
201
238
 
202
239
 
203
240
  if (this._config.boundary !== 'scrollParent') {
204
- $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);
241
+ parent.classList.add(CLASS_NAME_POSITION_STATIC);
205
242
  }
206
243
 
207
- this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());
244
+ this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
208
245
  } // If this is a touch-enabled device we add extra
209
246
  // empty mouseover listeners to the body's immediate children;
210
247
  // only needed because of broken event delegation on iOS
211
248
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
212
249
 
213
250
 
214
- if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
215
- $__default['default'](document.body).children().on('mouseover', null, $__default['default'].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
+ });
216
257
  }
217
258
 
218
259
  this._element.focus();
219
260
 
220
261
  this._element.setAttribute('aria-expanded', true);
221
262
 
222
- $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
223
- $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].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);
224
266
  };
225
267
 
226
268
  _proto.hide = function hide() {
227
- if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
269
+ if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
228
270
  return;
229
271
  }
230
272
 
273
+ var parent = Dropdown.getParentFromElement(this._element);
231
274
  var relatedTarget = {
232
275
  relatedTarget: this._element
233
276
  };
234
- var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
235
-
236
- var parent = Dropdown._getParentFromElement(this._element);
277
+ var hideEvent = EventHandler.trigger(parent, EVENT_HIDE, relatedTarget);
237
278
 
238
- $__default['default'](parent).trigger(hideEvent);
239
-
240
- if (hideEvent.isDefaultPrevented()) {
279
+ if (hideEvent.defaultPrevented) {
241
280
  return;
242
281
  }
243
282
 
@@ -245,17 +284,18 @@
245
284
  this._popper.destroy();
246
285
  }
247
286
 
248
- $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
249
- $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].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);
250
290
  };
251
291
 
252
292
  _proto.dispose = function dispose() {
253
- $__default['default'].removeData(this._element, DATA_KEY);
254
- $__default['default'](this._element).off(EVENT_KEY);
293
+ Data.removeData(this._element, DATA_KEY);
294
+ EventHandler.off(this._element, EVENT_KEY);
255
295
  this._element = null;
256
296
  this._menu = null;
257
297
 
258
- if (this._popper !== null) {
298
+ if (this._popper) {
259
299
  this._popper.destroy();
260
300
 
261
301
  this._popper = null;
@@ -265,7 +305,7 @@
265
305
  _proto.update = function update() {
266
306
  this._inNavbar = this._detectNavbar();
267
307
 
268
- if (this._popper !== null) {
308
+ if (this._popper) {
269
309
  this._popper.scheduleUpdate();
270
310
  }
271
311
  } // Private
@@ -274,7 +314,7 @@
274
314
  _proto._addEventListeners = function _addEventListeners() {
275
315
  var _this = this;
276
316
 
277
- $__default['default'](this._element).on(EVENT_CLICK, function (event) {
317
+ EventHandler.on(this._element, EVENT_CLICK, function (event) {
278
318
  event.preventDefault();
279
319
  event.stopPropagation();
280
320
 
@@ -283,34 +323,30 @@
283
323
  };
284
324
 
285
325
  _proto._getConfig = function _getConfig(config) {
286
- config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);
287
- Util__default['default'].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);
288
328
  return config;
289
329
  };
290
330
 
291
331
  _proto._getMenuElement = function _getMenuElement() {
292
- if (!this._menu) {
293
- var parent = Dropdown._getParentFromElement(this._element);
294
-
295
- if (parent) {
296
- this._menu = parent.querySelector(SELECTOR_MENU);
297
- }
298
- }
299
-
300
- return this._menu;
332
+ return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
301
333
  };
302
334
 
303
335
  _proto._getPlacement = function _getPlacement() {
304
- var $parentDropdown = $__default['default'](this._element.parentNode);
336
+ var parentDropdown = this._element.parentNode;
305
337
  var placement = PLACEMENT_BOTTOM; // Handle dropup
306
338
 
307
- if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
308
- placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
309
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
339
+ if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
340
+ placement = PLACEMENT_TOP;
341
+
342
+ if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
343
+ placement = PLACEMENT_TOPEND;
344
+ }
345
+ } else if (parentDropdown.classList.contains(CLASS_NAME_DROPRIGHT)) {
310
346
  placement = PLACEMENT_RIGHT;
311
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
347
+ } else if (parentDropdown.classList.contains(CLASS_NAME_DROPLEFT)) {
312
348
  placement = PLACEMENT_LEFT;
313
- } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
349
+ } else if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
314
350
  placement = PLACEMENT_BOTTOMEND;
315
351
  }
316
352
 
@@ -318,7 +354,7 @@
318
354
  };
319
355
 
320
356
  _proto._detectNavbar = function _detectNavbar() {
321
- return $__default['default'](this._element).closest('.navbar').length > 0;
357
+ return Boolean(this._element.closest("." + CLASS_NAME_NAVBAR));
322
358
  };
323
359
 
324
360
  _proto._getOffset = function _getOffset() {
@@ -328,7 +364,7 @@
328
364
 
329
365
  if (typeof this._config.offset === 'function') {
330
366
  offset.fn = function (data) {
331
- data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
367
+ data.offsets = _objectSpread(_objectSpread({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
332
368
  return data;
333
369
  };
334
370
  } else {
@@ -350,7 +386,7 @@
350
386
  boundariesElement: this._config.boundary
351
387
  }
352
388
  }
353
- }; // Disable Popper if we have a static display
389
+ }; // Disable Popper.js if we have a static display
354
390
 
355
391
  if (this._config.display === 'static') {
356
392
  popperConfig.modifiers.applyStyle = {
@@ -358,42 +394,44 @@
358
394
  };
359
395
  }
360
396
 
361
- return _extends({}, popperConfig, this._config.popperConfig);
397
+ return _objectSpread(_objectSpread({}, popperConfig), this._config.popperConfig);
362
398
  } // Static
363
399
  ;
364
400
 
365
- Dropdown._jQueryInterface = function _jQueryInterface(config) {
366
- return this.each(function () {
367
- var data = $__default['default'](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;
368
405
 
369
- var _config = typeof config === 'object' ? config : null;
406
+ if (!data) {
407
+ data = new Dropdown(element, _config);
408
+ }
370
409
 
371
- if (!data) {
372
- data = new Dropdown(this, _config);
373
- $__default['default'](this).data(DATA_KEY, data);
410
+ if (typeof config === 'string') {
411
+ if (typeof data[config] === 'undefined') {
412
+ throw new TypeError("No method named \"" + config + "\"");
374
413
  }
375
414
 
376
- if (typeof config === 'string') {
377
- if (typeof data[config] === 'undefined') {
378
- throw new TypeError("No method named \"" + config + "\"");
379
- }
415
+ data[config]();
416
+ }
417
+ };
380
418
 
381
- data[config]();
382
- }
419
+ Dropdown.jQueryInterface = function jQueryInterface(config) {
420
+ return this.each(function () {
421
+ Dropdown.dropdownInterface(this, config);
383
422
  });
384
423
  };
385
424
 
386
- Dropdown._clearMenus = function _clearMenus(event) {
387
- 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)) {
388
427
  return;
389
428
  }
390
429
 
391
- var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
430
+ var toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
392
431
 
393
432
  for (var i = 0, len = toggles.length; i < len; i++) {
394
- var parent = Dropdown._getParentFromElement(toggles[i]);
395
-
396
- var context = $__default['default'](toggles[i]).data(DATA_KEY);
433
+ var parent = Dropdown.getParentFromElement(toggles[i]);
434
+ var context = Data.getData(toggles[i], DATA_KEY);
397
435
  var relatedTarget = {
398
436
  relatedTarget: toggles[i]
399
437
  };
@@ -408,25 +446,28 @@
408
446
 
409
447
  var dropdownMenu = context._menu;
410
448
 
411
- if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW)) {
449
+ if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) {
412
450
  continue;
413
451
  }
414
452
 
415
- if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].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)) {
416
454
  continue;
417
455
  }
418
456
 
419
- var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
420
- $__default['default'](parent).trigger(hideEvent);
457
+ var hideEvent = EventHandler.trigger(parent, EVENT_HIDE, relatedTarget);
421
458
 
422
- if (hideEvent.isDefaultPrevented()) {
459
+ if (hideEvent.defaultPrevented) {
423
460
  continue;
424
461
  } // If this is a touch-enabled device we remove the extra
425
462
  // empty mouseover listeners we added for iOS support
426
463
 
427
464
 
428
465
  if ('ontouchstart' in document.documentElement) {
429
- $__default['default'](document.body).children().off('mouseover', null, $__default['default'].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
+ });
430
471
  }
431
472
 
432
473
  toggles[i].setAttribute('aria-expanded', 'false');
@@ -435,24 +476,17 @@
435
476
  context._popper.destroy();
436
477
  }
437
478
 
438
- $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW);
439
- $__default['default'](parent).removeClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
479
+ dropdownMenu.classList.remove(CLASS_NAME_SHOW);
480
+ toggles[i].classList.remove(CLASS_NAME_SHOW);
481
+ EventHandler.trigger(parent, EVENT_HIDDEN, relatedTarget);
440
482
  }
441
483
  };
442
484
 
443
- Dropdown._getParentFromElement = function _getParentFromElement(element) {
444
- var parent;
445
- var selector = Util__default['default'].getSelectorFromElement(element);
446
-
447
- if (selector) {
448
- parent = document.querySelector(selector);
449
- }
450
-
451
- return parent || element.parentNode;
452
- } // eslint-disable-next-line complexity
453
- ;
485
+ Dropdown.getParentFromElement = function getParentFromElement(element) {
486
+ return getElementFromSelector(element) || element.parentNode;
487
+ };
454
488
 
455
- Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
489
+ Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
456
490
  // If not input/textarea:
457
491
  // - And not a key in REGEXP_KEYDOWN => not a dropdown command
458
492
  // If input/textarea:
@@ -460,61 +494,59 @@
460
494
  // - If key is other than escape
461
495
  // - If key is not up or down => not a dropdown command
462
496
  // - If trigger inside the menu => not a dropdown command
463
- 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 || $__default['default'](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)) {
464
498
  return;
465
499
  }
466
500
 
467
- if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {
501
+ event.preventDefault();
502
+ event.stopPropagation();
503
+
504
+ if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
468
505
  return;
469
506
  }
470
507
 
471
- var parent = Dropdown._getParentFromElement(this);
508
+ var parent = Dropdown.getParentFromElement(this);
509
+ var isActive = this.classList.contains(CLASS_NAME_SHOW);
472
510
 
473
- var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW);
474
-
475
- if (!isActive && event.which === ESCAPE_KEYCODE) {
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();
476
515
  return;
477
516
  }
478
517
 
479
- event.preventDefault();
480
- event.stopPropagation();
481
-
482
- if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {
483
- if (event.which === ESCAPE_KEYCODE) {
484
- $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus');
485
- }
486
-
487
- $__default['default'](this).trigger('click');
518
+ if (!isActive || event.key === SPACE_KEY) {
519
+ Dropdown.clearMenus();
488
520
  return;
489
521
  }
490
522
 
491
- var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
492
- return $__default['default'](item).is(':visible');
493
- });
523
+ var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
494
524
 
495
- if (items.length === 0) {
525
+ if (!items.length) {
496
526
  return;
497
527
  }
498
528
 
499
529
  var index = items.indexOf(event.target);
500
530
 
501
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
531
+ if (event.key === ARROW_UP_KEY && index > 0) {
502
532
  // Up
503
533
  index--;
504
534
  }
505
535
 
506
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
536
+ if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
507
537
  // Down
508
538
  index++;
509
- }
539
+ } // index is -1 if the first keydown is an ArrowUp
510
540
 
511
- if (index < 0) {
512
- index = 0;
513
- }
514
541
 
542
+ index = index === -1 ? 0 : index;
515
543
  items[index].focus();
516
544
  };
517
545
 
546
+ Dropdown.getInstance = function getInstance(element) {
547
+ return Data.getData(element, DATA_KEY);
548
+ };
549
+
518
550
  _createClass(Dropdown, null, [{
519
551
  key: "VERSION",
520
552
  get: function get() {
@@ -541,27 +573,38 @@
541
573
  */
542
574
 
543
575
 
544
- $__default['default'](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) {
545
581
  event.preventDefault();
546
582
  event.stopPropagation();
547
-
548
- Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');
549
- }).on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
550
- e.stopPropagation();
583
+ Dropdown.dropdownInterface(this, 'toggle');
551
584
  });
585
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
586
+ return e.stopPropagation();
587
+ });
588
+ var $ = getjQuery();
552
589
  /**
553
590
  * ------------------------------------------------------------------------
554
591
  * jQuery
555
592
  * ------------------------------------------------------------------------
593
+ * add .dropdown to jQuery only if jQuery is present
556
594
  */
557
595
 
558
- $__default['default'].fn[NAME] = Dropdown._jQueryInterface;
559
- $__default['default'].fn[NAME].Constructor = Dropdown;
596
+ /* istanbul ignore if */
560
597
 
561
- $__default['default'].fn[NAME].noConflict = function () {
562
- $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
563
- return Dropdown._jQueryInterface;
564
- };
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
+ }
565
608
 
566
609
  return Dropdown;
567
610