bootstrap 4.5.2 → 5.0.0.alpha1

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