bootstrap 4.3.0 → 5.0.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,67 +1,147 @@
1
1
  /*!
2
- * Bootstrap collapse.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 collapse.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('./util.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
9
- (global = global || self, global.Collapse = factory(global.jQuery, global.Util));
10
- }(this, function ($, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
14
-
15
- function _defineProperties(target, props) {
16
- for (var i = 0; i < props.length; i++) {
17
- var descriptor = props[i];
18
- descriptor.enumerable = descriptor.enumerable || false;
19
- descriptor.configurable = true;
20
- if ("value" in descriptor) descriptor.writable = true;
21
- 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('./dom/selector-engine.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/manipulator.js', './dom/selector-engine.js'], factory) :
9
+ (global = global || self, global.Collapse = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine));
10
+ }(this, (function (Data, EventHandler, Manipulator, 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
+ SelectorEngine = SelectorEngine && Object.prototype.hasOwnProperty.call(SelectorEngine, 'default') ? SelectorEngine['default'] : SelectorEngine;
16
+
17
+ /**
18
+ * --------------------------------------------------------------------------
19
+ * Bootstrap (v5.0.0-alpha1): util/index.js
20
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
21
+ * --------------------------------------------------------------------------
22
+ */
23
+ var MILLISECONDS_MULTIPLIER = 1000;
24
+ var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
25
+
26
+ var toType = function toType(obj) {
27
+ if (obj === null || obj === undefined) {
28
+ return "" + obj;
22
29
  }
23
- }
24
30
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
31
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
32
+ };
30
33
 
31
- function _defineProperty(obj, key, value) {
32
- if (key in obj) {
33
- Object.defineProperty(obj, key, {
34
- value: value,
35
- enumerable: true,
36
- configurable: true,
37
- writable: true
38
- });
39
- } else {
40
- obj[key] = value;
34
+ var getSelector = function getSelector(element) {
35
+ var selector = element.getAttribute('data-target');
36
+
37
+ if (!selector || selector === '#') {
38
+ var hrefAttr = element.getAttribute('href');
39
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
41
40
  }
42
41
 
43
- return obj;
44
- }
42
+ return selector;
43
+ };
44
+
45
+ var getSelectorFromElement = function getSelectorFromElement(element) {
46
+ var selector = getSelector(element);
45
47
 
46
- function _objectSpread(target) {
47
- for (var i = 1; i < arguments.length; i++) {
48
- var source = arguments[i] != null ? arguments[i] : {};
49
- var ownKeys = Object.keys(source);
48
+ if (selector) {
49
+ return document.querySelector(selector) ? selector : null;
50
+ }
51
+
52
+ return null;
53
+ };
54
+
55
+ var getElementFromSelector = function getElementFromSelector(element) {
56
+ var selector = getSelector(element);
57
+ return selector ? document.querySelector(selector) : null;
58
+ };
59
+
60
+ var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
61
+ if (!element) {
62
+ return 0;
63
+ } // Get transition-duration of the element
64
+
65
+
66
+ var _window$getComputedSt = window.getComputedStyle(element),
67
+ transitionDuration = _window$getComputedSt.transitionDuration,
68
+ transitionDelay = _window$getComputedSt.transitionDelay;
69
+
70
+ var floatTransitionDuration = parseFloat(transitionDuration);
71
+ var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
72
+
73
+ if (!floatTransitionDuration && !floatTransitionDelay) {
74
+ return 0;
75
+ } // If multiple durations are defined, take the first
76
+
77
+
78
+ transitionDuration = transitionDuration.split(',')[0];
79
+ transitionDelay = transitionDelay.split(',')[0];
80
+ return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
81
+ };
50
82
 
51
- if (typeof Object.getOwnPropertySymbols === 'function') {
52
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
53
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
54
- }));
83
+ var triggerTransitionEnd = function triggerTransitionEnd(element) {
84
+ element.dispatchEvent(new Event(TRANSITION_END));
85
+ };
86
+
87
+ var isElement = function isElement(obj) {
88
+ return (obj[0] || obj).nodeType;
89
+ };
90
+
91
+ var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
92
+ var called = false;
93
+ var durationPadding = 5;
94
+ var emulatedDuration = duration + durationPadding;
95
+
96
+ function listener() {
97
+ called = true;
98
+ element.removeEventListener(TRANSITION_END, listener);
99
+ }
100
+
101
+ element.addEventListener(TRANSITION_END, listener);
102
+ setTimeout(function () {
103
+ if (!called) {
104
+ triggerTransitionEnd(element);
55
105
  }
106
+ }, emulatedDuration);
107
+ };
56
108
 
57
- ownKeys.forEach(function (key) {
58
- _defineProperty(target, key, source[key]);
59
- });
109
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
110
+ Object.keys(configTypes).forEach(function (property) {
111
+ var expectedTypes = configTypes[property];
112
+ var value = config[property];
113
+ var valueType = value && isElement(value) ? 'element' : toType(value);
114
+
115
+ if (!new RegExp(expectedTypes).test(valueType)) {
116
+ throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
117
+ }
118
+ });
119
+ };
120
+
121
+ var reflow = function reflow(element) {
122
+ return element.offsetHeight;
123
+ };
124
+
125
+ var getjQuery = function getjQuery() {
126
+ var _window = window,
127
+ jQuery = _window.jQuery;
128
+
129
+ if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
130
+ return jQuery;
60
131
  }
61
132
 
62
- return target;
63
- }
133
+ return null;
134
+ };
64
135
 
136
+ 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; }
137
+
138
+ 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; }
139
+
140
+ 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; }
141
+
142
+ 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); } }
143
+
144
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
65
145
  /**
66
146
  * ------------------------------------------------------------------------
67
147
  * Constants
@@ -69,11 +149,10 @@
69
149
  */
70
150
 
71
151
  var NAME = 'collapse';
72
- var VERSION = '4.3.0';
152
+ var VERSION = '5.0.0-alpha1';
73
153
  var DATA_KEY = 'bs.collapse';
74
154
  var EVENT_KEY = "." + DATA_KEY;
75
155
  var DATA_API_KEY = '.data-api';
76
- var JQUERY_NO_CONFLICT = $.fn[NAME];
77
156
  var Default = {
78
157
  toggle: true,
79
158
  parent: ''
@@ -82,52 +161,41 @@
82
161
  toggle: 'boolean',
83
162
  parent: '(string|element)'
84
163
  };
85
- var Event = {
86
- SHOW: "show" + EVENT_KEY,
87
- SHOWN: "shown" + EVENT_KEY,
88
- HIDE: "hide" + EVENT_KEY,
89
- HIDDEN: "hidden" + EVENT_KEY,
90
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
91
- };
92
- var ClassName = {
93
- SHOW: 'show',
94
- COLLAPSE: 'collapse',
95
- COLLAPSING: 'collapsing',
96
- COLLAPSED: 'collapsed'
97
- };
98
- var Dimension = {
99
- WIDTH: 'width',
100
- HEIGHT: 'height'
101
- };
102
- var Selector = {
103
- ACTIVES: '.show, .collapsing',
104
- DATA_TOGGLE: '[data-toggle="collapse"]'
105
- /**
106
- * ------------------------------------------------------------------------
107
- * Class Definition
108
- * ------------------------------------------------------------------------
109
- */
110
-
111
- };
164
+ var EVENT_SHOW = "show" + EVENT_KEY;
165
+ var EVENT_SHOWN = "shown" + EVENT_KEY;
166
+ var EVENT_HIDE = "hide" + EVENT_KEY;
167
+ var EVENT_HIDDEN = "hidden" + EVENT_KEY;
168
+ var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
169
+ var CLASS_NAME_SHOW = 'show';
170
+ var CLASS_NAME_COLLAPSE = 'collapse';
171
+ var CLASS_NAME_COLLAPSING = 'collapsing';
172
+ var CLASS_NAME_COLLAPSED = 'collapsed';
173
+ var WIDTH = 'width';
174
+ var HEIGHT = 'height';
175
+ var SELECTOR_ACTIVES = '.show, .collapsing';
176
+ var SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]';
177
+ /**
178
+ * ------------------------------------------------------------------------
179
+ * Class Definition
180
+ * ------------------------------------------------------------------------
181
+ */
112
182
 
113
- var Collapse =
114
- /*#__PURE__*/
115
- function () {
183
+ var Collapse = /*#__PURE__*/function () {
116
184
  function Collapse(element, config) {
117
185
  this._isTransitioning = false;
118
186
  this._element = element;
119
187
  this._config = this._getConfig(config);
120
- this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
121
- var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
188
+ this._triggerArray = SelectorEngine.find(SELECTOR_DATA_TOGGLE + "[href=\"#" + element.id + "\"]," + (SELECTOR_DATA_TOGGLE + "[data-target=\"#" + element.id + "\"]"));
189
+ var toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
122
190
 
123
191
  for (var i = 0, len = toggleList.length; i < len; i++) {
124
192
  var elem = toggleList[i];
125
- var selector = Util.getSelectorFromElement(elem);
126
- var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
193
+ var selector = getSelectorFromElement(elem);
194
+ var filterElement = SelectorEngine.find(selector).filter(function (foundElem) {
127
195
  return foundElem === element;
128
196
  });
129
197
 
130
- if (selector !== null && filterElement.length > 0) {
198
+ if (selector !== null && filterElement.length) {
131
199
  this._selector = selector;
132
200
 
133
201
  this._triggerArray.push(elem);
@@ -143,6 +211,8 @@
143
211
  if (this._config.toggle) {
144
212
  this.toggle();
145
213
  }
214
+
215
+ Data.setData(element, DATA_KEY, this);
146
216
  } // Getters
147
217
 
148
218
 
@@ -150,7 +220,7 @@
150
220
 
151
221
  // Public
152
222
  _proto.toggle = function toggle() {
153
- if ($(this._element).hasClass(ClassName.SHOW)) {
223
+ if (this._element.classList.contains(CLASS_NAME_SHOW)) {
154
224
  this.hide();
155
225
  } else {
156
226
  this.show();
@@ -160,7 +230,7 @@
160
230
  _proto.show = function show() {
161
231
  var _this = this;
162
232
 
163
- if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {
233
+ if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW)) {
164
234
  return;
165
235
  }
166
236
 
@@ -168,12 +238,12 @@
168
238
  var activesData;
169
239
 
170
240
  if (this._parent) {
171
- actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {
241
+ actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(function (elem) {
172
242
  if (typeof _this._config.parent === 'string') {
173
243
  return elem.getAttribute('data-parent') === _this._config.parent;
174
244
  }
175
245
 
176
- return elem.classList.contains(ClassName.COLLAPSE);
246
+ return elem.classList.contains(CLASS_NAME_COLLAPSE);
177
247
  });
178
248
 
179
249
  if (actives.length === 0) {
@@ -181,88 +251,106 @@
181
251
  }
182
252
  }
183
253
 
254
+ var container = SelectorEngine.findOne(this._selector);
255
+
184
256
  if (actives) {
185
- activesData = $(actives).not(this._selector).data(DATA_KEY);
257
+ var tempActiveData = actives.filter(function (elem) {
258
+ return container !== elem;
259
+ });
260
+ activesData = tempActiveData[0] ? Data.getData(tempActiveData[0], DATA_KEY) : null;
186
261
 
187
262
  if (activesData && activesData._isTransitioning) {
188
263
  return;
189
264
  }
190
265
  }
191
266
 
192
- var startEvent = $.Event(Event.SHOW);
193
- $(this._element).trigger(startEvent);
267
+ var startEvent = EventHandler.trigger(this._element, EVENT_SHOW);
194
268
 
195
- if (startEvent.isDefaultPrevented()) {
269
+ if (startEvent.defaultPrevented) {
196
270
  return;
197
271
  }
198
272
 
199
273
  if (actives) {
200
- Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
274
+ actives.forEach(function (elemActive) {
275
+ if (container !== elemActive) {
276
+ Collapse.collapseInterface(elemActive, 'hide');
277
+ }
201
278
 
202
- if (!activesData) {
203
- $(actives).data(DATA_KEY, null);
204
- }
279
+ if (!activesData) {
280
+ Data.setData(elemActive, DATA_KEY, null);
281
+ }
282
+ });
205
283
  }
206
284
 
207
285
  var dimension = this._getDimension();
208
286
 
209
- $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
287
+ this._element.classList.remove(CLASS_NAME_COLLAPSE);
288
+
289
+ this._element.classList.add(CLASS_NAME_COLLAPSING);
290
+
210
291
  this._element.style[dimension] = 0;
211
292
 
212
293
  if (this._triggerArray.length) {
213
- $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
294
+ this._triggerArray.forEach(function (element) {
295
+ element.classList.remove(CLASS_NAME_COLLAPSED);
296
+ element.setAttribute('aria-expanded', true);
297
+ });
214
298
  }
215
299
 
216
300
  this.setTransitioning(true);
217
301
 
218
302
  var complete = function complete() {
219
- $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
303
+ _this._element.classList.remove(CLASS_NAME_COLLAPSING);
304
+
305
+ _this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
306
+
220
307
  _this._element.style[dimension] = '';
221
308
 
222
309
  _this.setTransitioning(false);
223
310
 
224
- $(_this._element).trigger(Event.SHOWN);
311
+ EventHandler.trigger(_this._element, EVENT_SHOWN);
225
312
  };
226
313
 
227
314
  var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
228
315
  var scrollSize = "scroll" + capitalizedDimension;
229
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
230
- $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
316
+ var transitionDuration = getTransitionDurationFromElement(this._element);
317
+ EventHandler.one(this._element, TRANSITION_END, complete);
318
+ emulateTransitionEnd(this._element, transitionDuration);
231
319
  this._element.style[dimension] = this._element[scrollSize] + "px";
232
320
  };
233
321
 
234
322
  _proto.hide = function hide() {
235
323
  var _this2 = this;
236
324
 
237
- if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {
325
+ if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW)) {
238
326
  return;
239
327
  }
240
328
 
241
- var startEvent = $.Event(Event.HIDE);
242
- $(this._element).trigger(startEvent);
329
+ var startEvent = EventHandler.trigger(this._element, EVENT_HIDE);
243
330
 
244
- if (startEvent.isDefaultPrevented()) {
331
+ if (startEvent.defaultPrevented) {
245
332
  return;
246
333
  }
247
334
 
248
335
  var dimension = this._getDimension();
249
336
 
250
337
  this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
251
- Util.reflow(this._element);
252
- $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
338
+ reflow(this._element);
339
+
340
+ this._element.classList.add(CLASS_NAME_COLLAPSING);
341
+
342
+ this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
343
+
253
344
  var triggerArrayLength = this._triggerArray.length;
254
345
 
255
346
  if (triggerArrayLength > 0) {
256
347
  for (var i = 0; i < triggerArrayLength; i++) {
257
348
  var trigger = this._triggerArray[i];
258
- var selector = Util.getSelectorFromElement(trigger);
259
-
260
- if (selector !== null) {
261
- var $elem = $([].slice.call(document.querySelectorAll(selector)));
349
+ var elem = getElementFromSelector(trigger);
262
350
 
263
- if (!$elem.hasClass(ClassName.SHOW)) {
264
- $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
265
- }
351
+ if (elem && !elem.classList.contains(CLASS_NAME_SHOW)) {
352
+ trigger.classList.add(CLASS_NAME_COLLAPSED);
353
+ trigger.setAttribute('aria-expanded', false);
266
354
  }
267
355
  }
268
356
  }
@@ -272,12 +360,17 @@
272
360
  var complete = function complete() {
273
361
  _this2.setTransitioning(false);
274
362
 
275
- $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
363
+ _this2._element.classList.remove(CLASS_NAME_COLLAPSING);
364
+
365
+ _this2._element.classList.add(CLASS_NAME_COLLAPSE);
366
+
367
+ EventHandler.trigger(_this2._element, EVENT_HIDDEN);
276
368
  };
277
369
 
278
370
  this._element.style[dimension] = '';
279
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
280
- $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
371
+ var transitionDuration = getTransitionDurationFromElement(this._element);
372
+ EventHandler.one(this._element, TRANSITION_END, complete);
373
+ emulateTransitionEnd(this._element, transitionDuration);
281
374
  };
282
375
 
283
376
  _proto.setTransitioning = function setTransitioning(isTransitioning) {
@@ -285,7 +378,7 @@
285
378
  };
286
379
 
287
380
  _proto.dispose = function dispose() {
288
- $.removeData(this._element, DATA_KEY);
381
+ Data.removeData(this._element, DATA_KEY);
289
382
  this._config = null;
290
383
  this._parent = null;
291
384
  this._element = null;
@@ -295,81 +388,93 @@
295
388
  ;
296
389
 
297
390
  _proto._getConfig = function _getConfig(config) {
298
- config = _objectSpread({}, Default, config);
391
+ config = _objectSpread(_objectSpread({}, Default), config);
299
392
  config.toggle = Boolean(config.toggle); // Coerce string values
300
393
 
301
- Util.typeCheckConfig(NAME, config, DefaultType);
394
+ typeCheckConfig(NAME, config, DefaultType);
302
395
  return config;
303
396
  };
304
397
 
305
398
  _proto._getDimension = function _getDimension() {
306
- var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
307
- return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
399
+ var hasWidth = this._element.classList.contains(WIDTH);
400
+
401
+ return hasWidth ? WIDTH : HEIGHT;
308
402
  };
309
403
 
310
404
  _proto._getParent = function _getParent() {
311
405
  var _this3 = this;
312
406
 
313
- var parent;
314
-
315
- if (Util.isElement(this._config.parent)) {
316
- parent = this._config.parent; // It's a jQuery object
407
+ var parent = this._config.parent;
317
408
 
318
- if (typeof this._config.parent.jquery !== 'undefined') {
319
- parent = this._config.parent[0];
409
+ if (isElement(parent)) {
410
+ // it's a jQuery object
411
+ if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') {
412
+ parent = parent[0];
320
413
  }
321
414
  } else {
322
- parent = document.querySelector(this._config.parent);
415
+ parent = SelectorEngine.findOne(parent);
323
416
  }
324
417
 
325
- var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
326
- var children = [].slice.call(parent.querySelectorAll(selector));
327
- $(children).each(function (i, element) {
328
- _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
418
+ var selector = SELECTOR_DATA_TOGGLE + "[data-parent=\"" + parent + "\"]";
419
+ SelectorEngine.find(selector, parent).forEach(function (element) {
420
+ var selected = getElementFromSelector(element);
421
+
422
+ _this3._addAriaAndCollapsedClass(selected, [element]);
329
423
  });
330
424
  return parent;
331
425
  };
332
426
 
333
427
  _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
334
- var isOpen = $(element).hasClass(ClassName.SHOW);
428
+ if (element) {
429
+ var isOpen = element.classList.contains(CLASS_NAME_SHOW);
430
+
431
+ if (triggerArray.length) {
432
+ triggerArray.forEach(function (elem) {
433
+ if (isOpen) {
434
+ elem.classList.remove(CLASS_NAME_COLLAPSED);
435
+ } else {
436
+ elem.classList.add(CLASS_NAME_COLLAPSED);
437
+ }
335
438
 
336
- if (triggerArray.length) {
337
- $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
439
+ elem.setAttribute('aria-expanded', isOpen);
440
+ });
441
+ }
338
442
  }
339
443
  } // Static
340
444
  ;
341
445
 
342
- Collapse._getTargetFromElement = function _getTargetFromElement(element) {
343
- var selector = Util.getSelectorFromElement(element);
344
- return selector ? document.querySelector(selector) : null;
345
- };
446
+ Collapse.collapseInterface = function collapseInterface(element, config) {
447
+ var data = Data.getData(element, DATA_KEY);
346
448
 
347
- Collapse._jQueryInterface = function _jQueryInterface(config) {
348
- return this.each(function () {
349
- var $this = $(this);
350
- var data = $this.data(DATA_KEY);
449
+ var _config = _objectSpread(_objectSpread(_objectSpread({}, Default), Manipulator.getDataAttributes(element)), typeof config === 'object' && config ? config : {});
351
450
 
352
- var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});
451
+ if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
452
+ _config.toggle = false;
453
+ }
353
454
 
354
- if (!data && _config.toggle && /show|hide/.test(config)) {
355
- _config.toggle = false;
356
- }
455
+ if (!data) {
456
+ data = new Collapse(element, _config);
457
+ }
357
458
 
358
- if (!data) {
359
- data = new Collapse(this, _config);
360
- $this.data(DATA_KEY, data);
459
+ if (typeof config === 'string') {
460
+ if (typeof data[config] === 'undefined') {
461
+ throw new TypeError("No method named \"" + config + "\"");
361
462
  }
362
463
 
363
- if (typeof config === 'string') {
364
- if (typeof data[config] === 'undefined') {
365
- throw new TypeError("No method named \"" + config + "\"");
366
- }
464
+ data[config]();
465
+ }
466
+ };
367
467
 
368
- data[config]();
369
- }
468
+ Collapse.jQueryInterface = function jQueryInterface(config) {
469
+ return this.each(function () {
470
+ Collapse.collapseInterface(this, config);
370
471
  });
371
472
  };
372
473
 
474
+ Collapse.getInstance = function getInstance(element) {
475
+ return Data.getData(element, DATA_KEY);
476
+ };
477
+
373
478
  _createClass(Collapse, null, [{
374
479
  key: "VERSION",
375
480
  get: function get() {
@@ -391,37 +496,55 @@
391
496
  */
392
497
 
393
498
 
394
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
499
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
395
500
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
396
- if (event.currentTarget.tagName === 'A') {
501
+ if (event.target.tagName === 'A') {
397
502
  event.preventDefault();
398
503
  }
399
504
 
400
- var $trigger = $(this);
401
- var selector = Util.getSelectorFromElement(this);
402
- var selectors = [].slice.call(document.querySelectorAll(selector));
403
- $(selectors).each(function () {
404
- var $target = $(this);
405
- var data = $target.data(DATA_KEY);
406
- var config = data ? 'toggle' : $trigger.data();
505
+ var triggerData = Manipulator.getDataAttributes(this);
506
+ var selector = getSelectorFromElement(this);
507
+ var selectorElements = SelectorEngine.find(selector);
508
+ selectorElements.forEach(function (element) {
509
+ var data = Data.getData(element, DATA_KEY);
510
+ var config;
511
+
512
+ if (data) {
513
+ // update parent attribute
514
+ if (data._parent === null && typeof triggerData.parent === 'string') {
515
+ data._config.parent = triggerData.parent;
516
+ data._parent = data._getParent();
517
+ }
518
+
519
+ config = 'toggle';
520
+ } else {
521
+ config = triggerData;
522
+ }
407
523
 
408
- Collapse._jQueryInterface.call($target, config);
524
+ Collapse.collapseInterface(element, config);
409
525
  });
410
526
  });
527
+ var $ = getjQuery();
411
528
  /**
412
529
  * ------------------------------------------------------------------------
413
530
  * jQuery
414
531
  * ------------------------------------------------------------------------
532
+ * add .collapse to jQuery only if jQuery is present
415
533
  */
416
534
 
417
- $.fn[NAME] = Collapse._jQueryInterface;
418
- $.fn[NAME].Constructor = Collapse;
535
+ /* istanbul ignore if */
419
536
 
420
- $.fn[NAME].noConflict = function () {
421
- $.fn[NAME] = JQUERY_NO_CONFLICT;
422
- return Collapse._jQueryInterface;
423
- };
537
+ if ($) {
538
+ var JQUERY_NO_CONFLICT = $.fn[NAME];
539
+ $.fn[NAME] = Collapse.jQueryInterface;
540
+ $.fn[NAME].Constructor = Collapse;
541
+
542
+ $.fn[NAME].noConflict = function () {
543
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
544
+ return Collapse.jQueryInterface;
545
+ };
546
+ }
424
547
 
425
548
  return Collapse;
426
549
 
427
- }));
550
+ })));