bootstrap 5.0.0.alpha2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +7 -4
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +10 -7
- data/assets/javascripts/bootstrap.js +2554 -2564
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/javascripts/bootstrap/alert.js +119 -115
- data/assets/javascripts/bootstrap/base-component.js +63 -0
- data/assets/javascripts/bootstrap/button.js +67 -69
- data/assets/javascripts/bootstrap/carousel.js +340 -331
- data/assets/javascripts/bootstrap/collapse.js +214 -209
- data/assets/javascripts/bootstrap/dom/data.js +35 -48
- data/assets/javascripts/bootstrap/dom/event-handler.js +105 -98
- data/assets/javascripts/bootstrap/dom/manipulator.js +26 -34
- data/assets/javascripts/bootstrap/dom/selector-engine.js +28 -41
- data/assets/javascripts/bootstrap/dropdown.js +392 -325
- data/assets/javascripts/bootstrap/modal.js +492 -434
- data/assets/javascripts/bootstrap/offcanvas.js +671 -0
- data/assets/javascripts/bootstrap/popover.js +114 -132
- data/assets/javascripts/bootstrap/scrollspy.js +172 -180
- data/assets/javascripts/bootstrap/tab.js +168 -144
- data/assets/javascripts/bootstrap/toast.js +141 -150
- data/assets/javascripts/bootstrap/tooltip.js +466 -452
- data/assets/stylesheets/_bootstrap-grid.scss +9 -9
- data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
- data/assets/stylesheets/_bootstrap.scss +5 -3
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +10 -3
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +2 -4
- data/assets/stylesheets/bootstrap/_button-group.scss +5 -7
- data/assets/stylesheets/bootstrap/_buttons.scss +2 -15
- data/assets/stylesheets/bootstrap/_card.scss +2 -29
- data/assets/stylesheets/bootstrap/_carousel.scss +35 -18
- data/assets/stylesheets/bootstrap/_close.scss +2 -3
- data/assets/stylesheets/bootstrap/_dropdown.scss +33 -29
- data/assets/stylesheets/bootstrap/_forms.scss +1 -1
- data/assets/stylesheets/bootstrap/_functions.scss +11 -12
- data/assets/stylesheets/bootstrap/_list-group.scss +23 -6
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +2 -9
- data/assets/stylesheets/bootstrap/_nav.scss +12 -0
- data/assets/stylesheets/bootstrap/_navbar.scss +15 -2
- data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +3 -3
- data/assets/stylesheets/bootstrap/_popover.scss +10 -22
- data/assets/stylesheets/bootstrap/_progress.scss +4 -1
- data/assets/stylesheets/bootstrap/_reboot.scss +48 -44
- data/assets/stylesheets/bootstrap/_root.scss +5 -5
- data/assets/stylesheets/bootstrap/_spinners.scss +18 -5
- data/assets/stylesheets/bootstrap/_tables.scss +15 -16
- data/assets/stylesheets/bootstrap/_toasts.scss +15 -12
- data/assets/stylesheets/bootstrap/_tooltip.scss +12 -12
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +133 -70
- data/assets/stylesheets/bootstrap/_variables.scss +363 -207
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +5 -5
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +21 -11
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +112 -9
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -46
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -16
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +21 -40
- data/assets/stylesheets/bootstrap/forms/_validation.scss +1 -1
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -1
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -6
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +10 -5
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -6
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +2 -4
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +26 -22
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +5 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -13
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +5 -3
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +7 -7
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +19 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +3 -2
- data/assets/stylesheets/bootstrap/utilities/_api.scss +1 -1
- data/bootstrap.gemspec +1 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +20 -5
- data/tasks/updater/network.rb +7 -1
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
- data/test/dummy_rails/app/views/pages/root.html +89 -0
- data/test/dummy_rails/config/application.rb +0 -3
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- metadata +20 -40
- data/assets/javascripts/bootstrap/dom/polyfill.js +0 -110
- data/assets/stylesheets/bootstrap/forms/_form-file.scss +0 -91
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap collapse.js v5.0.0
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap collapse.js v5.0.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2021 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('./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
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine));
|
|
10
|
-
}(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict';
|
|
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'), require('./base-component.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
|
|
10
|
+
}(this, (function (Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
|
|
11
11
|
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
13
|
|
|
@@ -15,37 +15,51 @@
|
|
|
15
15
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
16
16
|
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
17
17
|
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
18
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* --------------------------------------------------------------------------
|
|
21
|
-
* Bootstrap (v5.0.0
|
|
22
|
+
* Bootstrap (v5.0.0): util/index.js
|
|
22
23
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
23
24
|
* --------------------------------------------------------------------------
|
|
24
25
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
const MILLISECONDS_MULTIPLIER = 1000;
|
|
27
|
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
const toType = obj => {
|
|
29
30
|
if (obj === null || obj === undefined) {
|
|
30
|
-
return
|
|
31
|
+
return `${obj}`;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
34
35
|
};
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
const getSelector = element => {
|
|
38
|
+
let selector = element.getAttribute('data-bs-target');
|
|
38
39
|
|
|
39
40
|
if (!selector || selector === '#') {
|
|
40
|
-
|
|
41
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
42
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
43
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
44
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
45
|
+
|
|
46
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
47
|
+
return null;
|
|
48
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
52
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
53
|
+
}
|
|
54
|
+
|
|
41
55
|
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
42
56
|
}
|
|
43
57
|
|
|
44
58
|
return selector;
|
|
45
59
|
};
|
|
46
60
|
|
|
47
|
-
|
|
48
|
-
|
|
61
|
+
const getSelectorFromElement = element => {
|
|
62
|
+
const selector = getSelector(element);
|
|
49
63
|
|
|
50
64
|
if (selector) {
|
|
51
65
|
return document.querySelector(selector) ? selector : null;
|
|
@@ -54,23 +68,23 @@
|
|
|
54
68
|
return null;
|
|
55
69
|
};
|
|
56
70
|
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
const getElementFromSelector = element => {
|
|
72
|
+
const selector = getSelector(element);
|
|
59
73
|
return selector ? document.querySelector(selector) : null;
|
|
60
74
|
};
|
|
61
75
|
|
|
62
|
-
|
|
76
|
+
const getTransitionDurationFromElement = element => {
|
|
63
77
|
if (!element) {
|
|
64
78
|
return 0;
|
|
65
79
|
} // Get transition-duration of the element
|
|
66
80
|
|
|
67
81
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
let {
|
|
83
|
+
transitionDuration,
|
|
84
|
+
transitionDelay
|
|
85
|
+
} = window.getComputedStyle(element);
|
|
86
|
+
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
87
|
+
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
|
|
74
88
|
|
|
75
89
|
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
76
90
|
return 0;
|
|
@@ -79,21 +93,19 @@
|
|
|
79
93
|
|
|
80
94
|
transitionDuration = transitionDuration.split(',')[0];
|
|
81
95
|
transitionDelay = transitionDelay.split(',')[0];
|
|
82
|
-
return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
96
|
+
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
83
97
|
};
|
|
84
98
|
|
|
85
|
-
|
|
99
|
+
const triggerTransitionEnd = element => {
|
|
86
100
|
element.dispatchEvent(new Event(TRANSITION_END));
|
|
87
101
|
};
|
|
88
102
|
|
|
89
|
-
|
|
90
|
-
return (obj[0] || obj).nodeType;
|
|
91
|
-
};
|
|
103
|
+
const isElement = obj => (obj[0] || obj).nodeType;
|
|
92
104
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
105
|
+
const emulateTransitionEnd = (element, duration) => {
|
|
106
|
+
let called = false;
|
|
107
|
+
const durationPadding = 5;
|
|
108
|
+
const emulatedDuration = duration + durationPadding;
|
|
97
109
|
|
|
98
110
|
function listener() {
|
|
99
111
|
called = true;
|
|
@@ -101,97 +113,120 @@
|
|
|
101
113
|
}
|
|
102
114
|
|
|
103
115
|
element.addEventListener(TRANSITION_END, listener);
|
|
104
|
-
setTimeout(
|
|
116
|
+
setTimeout(() => {
|
|
105
117
|
if (!called) {
|
|
106
118
|
triggerTransitionEnd(element);
|
|
107
119
|
}
|
|
108
120
|
}, emulatedDuration);
|
|
109
121
|
};
|
|
110
122
|
|
|
111
|
-
|
|
112
|
-
Object.keys(configTypes).forEach(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
123
|
+
const typeCheckConfig = (componentName, config, configTypes) => {
|
|
124
|
+
Object.keys(configTypes).forEach(property => {
|
|
125
|
+
const expectedTypes = configTypes[property];
|
|
126
|
+
const value = config[property];
|
|
127
|
+
const valueType = value && isElement(value) ? 'element' : toType(value);
|
|
116
128
|
|
|
117
129
|
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
118
|
-
throw new
|
|
130
|
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
119
131
|
}
|
|
120
132
|
});
|
|
121
133
|
};
|
|
122
134
|
|
|
123
|
-
|
|
124
|
-
return element.offsetHeight;
|
|
125
|
-
};
|
|
135
|
+
const reflow = element => element.offsetHeight;
|
|
126
136
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
137
|
+
const getjQuery = () => {
|
|
138
|
+
const {
|
|
139
|
+
jQuery
|
|
140
|
+
} = window;
|
|
130
141
|
|
|
131
|
-
if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
|
|
142
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
132
143
|
return jQuery;
|
|
133
144
|
}
|
|
134
145
|
|
|
135
146
|
return null;
|
|
136
147
|
};
|
|
137
148
|
|
|
138
|
-
|
|
149
|
+
const onDOMContentLoaded = callback => {
|
|
150
|
+
if (document.readyState === 'loading') {
|
|
151
|
+
document.addEventListener('DOMContentLoaded', callback);
|
|
152
|
+
} else {
|
|
153
|
+
callback();
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
const defineJQueryPlugin = (name, plugin) => {
|
|
158
|
+
onDOMContentLoaded(() => {
|
|
159
|
+
const $ = getjQuery();
|
|
160
|
+
/* istanbul ignore if */
|
|
161
|
+
|
|
162
|
+
if ($) {
|
|
163
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
164
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
165
|
+
$.fn[name].Constructor = plugin;
|
|
139
166
|
|
|
140
|
-
|
|
167
|
+
$.fn[name].noConflict = () => {
|
|
168
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
169
|
+
return plugin.jQueryInterface;
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
};
|
|
141
174
|
|
|
142
|
-
|
|
175
|
+
/**
|
|
176
|
+
* --------------------------------------------------------------------------
|
|
177
|
+
* Bootstrap (v5.0.0): collapse.js
|
|
178
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
179
|
+
* --------------------------------------------------------------------------
|
|
180
|
+
*/
|
|
143
181
|
/**
|
|
144
182
|
* ------------------------------------------------------------------------
|
|
145
183
|
* Constants
|
|
146
184
|
* ------------------------------------------------------------------------
|
|
147
185
|
*/
|
|
148
186
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
var Default = {
|
|
187
|
+
const NAME = 'collapse';
|
|
188
|
+
const DATA_KEY = 'bs.collapse';
|
|
189
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
190
|
+
const DATA_API_KEY = '.data-api';
|
|
191
|
+
const Default = {
|
|
155
192
|
toggle: true,
|
|
156
193
|
parent: ''
|
|
157
194
|
};
|
|
158
|
-
|
|
195
|
+
const DefaultType = {
|
|
159
196
|
toggle: 'boolean',
|
|
160
197
|
parent: '(string|element)'
|
|
161
198
|
};
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
199
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
200
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
201
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
202
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
203
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
204
|
+
const CLASS_NAME_SHOW = 'show';
|
|
205
|
+
const CLASS_NAME_COLLAPSE = 'collapse';
|
|
206
|
+
const CLASS_NAME_COLLAPSING = 'collapsing';
|
|
207
|
+
const CLASS_NAME_COLLAPSED = 'collapsed';
|
|
208
|
+
const WIDTH = 'width';
|
|
209
|
+
const HEIGHT = 'height';
|
|
210
|
+
const SELECTOR_ACTIVES = '.show, .collapsing';
|
|
211
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]';
|
|
175
212
|
/**
|
|
176
213
|
* ------------------------------------------------------------------------
|
|
177
214
|
* Class Definition
|
|
178
215
|
* ------------------------------------------------------------------------
|
|
179
216
|
*/
|
|
180
217
|
|
|
181
|
-
|
|
182
|
-
|
|
218
|
+
class Collapse extends BaseComponent__default['default'] {
|
|
219
|
+
constructor(element, config) {
|
|
220
|
+
super(element);
|
|
183
221
|
this._isTransitioning = false;
|
|
184
|
-
this._element = element;
|
|
185
222
|
this._config = this._getConfig(config);
|
|
186
|
-
this._triggerArray = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
for (
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
return foundElem === element;
|
|
194
|
-
});
|
|
223
|
+
this._triggerArray = SelectorEngine__default['default'].find(`${SELECTOR_DATA_TOGGLE}[href="#${this._element.id}"],` + `${SELECTOR_DATA_TOGGLE}[data-bs-target="#${this._element.id}"]`);
|
|
224
|
+
const toggleList = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
|
|
225
|
+
|
|
226
|
+
for (let i = 0, len = toggleList.length; i < len; i++) {
|
|
227
|
+
const elem = toggleList[i];
|
|
228
|
+
const selector = getSelectorFromElement(elem);
|
|
229
|
+
const filterElement = SelectorEngine__default['default'].find(selector).filter(foundElem => foundElem === this._element);
|
|
195
230
|
|
|
196
231
|
if (selector !== null && filterElement.length) {
|
|
197
232
|
this._selector = selector;
|
|
@@ -209,36 +244,38 @@
|
|
|
209
244
|
if (this._config.toggle) {
|
|
210
245
|
this.toggle();
|
|
211
246
|
}
|
|
212
|
-
|
|
213
|
-
Data__default['default'].setData(element, DATA_KEY, this);
|
|
214
247
|
} // Getters
|
|
215
248
|
|
|
216
249
|
|
|
217
|
-
|
|
250
|
+
static get Default() {
|
|
251
|
+
return Default;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
static get DATA_KEY() {
|
|
255
|
+
return DATA_KEY;
|
|
256
|
+
} // Public
|
|
257
|
+
|
|
218
258
|
|
|
219
|
-
|
|
220
|
-
_proto.toggle = function toggle() {
|
|
259
|
+
toggle() {
|
|
221
260
|
if (this._element.classList.contains(CLASS_NAME_SHOW)) {
|
|
222
261
|
this.hide();
|
|
223
262
|
} else {
|
|
224
263
|
this.show();
|
|
225
264
|
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
_proto.show = function show() {
|
|
229
|
-
var _this = this;
|
|
265
|
+
}
|
|
230
266
|
|
|
267
|
+
show() {
|
|
231
268
|
if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW)) {
|
|
232
269
|
return;
|
|
233
270
|
}
|
|
234
271
|
|
|
235
|
-
|
|
236
|
-
|
|
272
|
+
let actives;
|
|
273
|
+
let activesData;
|
|
237
274
|
|
|
238
275
|
if (this._parent) {
|
|
239
|
-
actives = SelectorEngine__default['default'].find(SELECTOR_ACTIVES, this._parent).filter(
|
|
240
|
-
if (typeof
|
|
241
|
-
return elem.getAttribute('data-parent') ===
|
|
276
|
+
actives = SelectorEngine__default['default'].find(SELECTOR_ACTIVES, this._parent).filter(elem => {
|
|
277
|
+
if (typeof this._config.parent === 'string') {
|
|
278
|
+
return elem.getAttribute('data-bs-parent') === this._config.parent;
|
|
242
279
|
}
|
|
243
280
|
|
|
244
281
|
return elem.classList.contains(CLASS_NAME_COLLAPSE);
|
|
@@ -249,38 +286,36 @@
|
|
|
249
286
|
}
|
|
250
287
|
}
|
|
251
288
|
|
|
252
|
-
|
|
289
|
+
const container = SelectorEngine__default['default'].findOne(this._selector);
|
|
253
290
|
|
|
254
291
|
if (actives) {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
});
|
|
258
|
-
activesData = tempActiveData[0] ? Data__default['default'].getData(tempActiveData[0], DATA_KEY) : null;
|
|
292
|
+
const tempActiveData = actives.find(elem => container !== elem);
|
|
293
|
+
activesData = tempActiveData ? Data__default['default'].get(tempActiveData, DATA_KEY) : null;
|
|
259
294
|
|
|
260
295
|
if (activesData && activesData._isTransitioning) {
|
|
261
296
|
return;
|
|
262
297
|
}
|
|
263
298
|
}
|
|
264
299
|
|
|
265
|
-
|
|
300
|
+
const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
|
|
266
301
|
|
|
267
302
|
if (startEvent.defaultPrevented) {
|
|
268
303
|
return;
|
|
269
304
|
}
|
|
270
305
|
|
|
271
306
|
if (actives) {
|
|
272
|
-
actives.forEach(
|
|
307
|
+
actives.forEach(elemActive => {
|
|
273
308
|
if (container !== elemActive) {
|
|
274
309
|
Collapse.collapseInterface(elemActive, 'hide');
|
|
275
310
|
}
|
|
276
311
|
|
|
277
312
|
if (!activesData) {
|
|
278
|
-
Data__default['default'].
|
|
313
|
+
Data__default['default'].set(elemActive, DATA_KEY, null);
|
|
279
314
|
}
|
|
280
315
|
});
|
|
281
316
|
}
|
|
282
317
|
|
|
283
|
-
|
|
318
|
+
const dimension = this._getDimension();
|
|
284
319
|
|
|
285
320
|
this._element.classList.remove(CLASS_NAME_COLLAPSE);
|
|
286
321
|
|
|
@@ -289,7 +324,7 @@
|
|
|
289
324
|
this._element.style[dimension] = 0;
|
|
290
325
|
|
|
291
326
|
if (this._triggerArray.length) {
|
|
292
|
-
this._triggerArray.forEach(
|
|
327
|
+
this._triggerArray.forEach(element => {
|
|
293
328
|
element.classList.remove(CLASS_NAME_COLLAPSED);
|
|
294
329
|
element.setAttribute('aria-expanded', true);
|
|
295
330
|
});
|
|
@@ -297,54 +332,50 @@
|
|
|
297
332
|
|
|
298
333
|
this.setTransitioning(true);
|
|
299
334
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
_this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
|
|
335
|
+
const complete = () => {
|
|
336
|
+
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
|
304
337
|
|
|
305
|
-
|
|
338
|
+
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
|
|
306
339
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
EventHandler__default['default'].trigger(
|
|
340
|
+
this._element.style[dimension] = '';
|
|
341
|
+
this.setTransitioning(false);
|
|
342
|
+
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
|
|
310
343
|
};
|
|
311
344
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
EventHandler__default['default'].one(this._element,
|
|
345
|
+
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
|
346
|
+
const scrollSize = `scroll${capitalizedDimension}`;
|
|
347
|
+
const transitionDuration = getTransitionDurationFromElement(this._element);
|
|
348
|
+
EventHandler__default['default'].one(this._element, 'transitionend', complete);
|
|
316
349
|
emulateTransitionEnd(this._element, transitionDuration);
|
|
317
|
-
this._element.style[dimension] = this._element[scrollSize]
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
_proto.hide = function hide() {
|
|
321
|
-
var _this2 = this;
|
|
350
|
+
this._element.style[dimension] = `${this._element[scrollSize]}px`;
|
|
351
|
+
}
|
|
322
352
|
|
|
353
|
+
hide() {
|
|
323
354
|
if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW)) {
|
|
324
355
|
return;
|
|
325
356
|
}
|
|
326
357
|
|
|
327
|
-
|
|
358
|
+
const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
|
|
328
359
|
|
|
329
360
|
if (startEvent.defaultPrevented) {
|
|
330
361
|
return;
|
|
331
362
|
}
|
|
332
363
|
|
|
333
|
-
|
|
364
|
+
const dimension = this._getDimension();
|
|
334
365
|
|
|
335
|
-
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension]
|
|
366
|
+
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
|
|
336
367
|
reflow(this._element);
|
|
337
368
|
|
|
338
369
|
this._element.classList.add(CLASS_NAME_COLLAPSING);
|
|
339
370
|
|
|
340
371
|
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
|
|
341
372
|
|
|
342
|
-
|
|
373
|
+
const triggerArrayLength = this._triggerArray.length;
|
|
343
374
|
|
|
344
375
|
if (triggerArrayLength > 0) {
|
|
345
|
-
for (
|
|
346
|
-
|
|
347
|
-
|
|
376
|
+
for (let i = 0; i < triggerArrayLength; i++) {
|
|
377
|
+
const trigger = this._triggerArray[i];
|
|
378
|
+
const elem = getElementFromSelector(trigger);
|
|
348
379
|
|
|
349
380
|
if (elem && !elem.classList.contains(CLASS_NAME_SHOW)) {
|
|
350
381
|
trigger.classList.add(CLASS_NAME_COLLAPSED);
|
|
@@ -355,52 +386,53 @@
|
|
|
355
386
|
|
|
356
387
|
this.setTransitioning(true);
|
|
357
388
|
|
|
358
|
-
|
|
359
|
-
|
|
389
|
+
const complete = () => {
|
|
390
|
+
this.setTransitioning(false);
|
|
360
391
|
|
|
361
|
-
|
|
392
|
+
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
|
362
393
|
|
|
363
|
-
|
|
394
|
+
this._element.classList.add(CLASS_NAME_COLLAPSE);
|
|
364
395
|
|
|
365
|
-
EventHandler__default['default'].trigger(
|
|
396
|
+
EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
|
|
366
397
|
};
|
|
367
398
|
|
|
368
399
|
this._element.style[dimension] = '';
|
|
369
|
-
|
|
370
|
-
EventHandler__default['default'].one(this._element,
|
|
400
|
+
const transitionDuration = getTransitionDurationFromElement(this._element);
|
|
401
|
+
EventHandler__default['default'].one(this._element, 'transitionend', complete);
|
|
371
402
|
emulateTransitionEnd(this._element, transitionDuration);
|
|
372
|
-
}
|
|
403
|
+
}
|
|
373
404
|
|
|
374
|
-
|
|
405
|
+
setTransitioning(isTransitioning) {
|
|
375
406
|
this._isTransitioning = isTransitioning;
|
|
376
|
-
}
|
|
407
|
+
}
|
|
377
408
|
|
|
378
|
-
|
|
379
|
-
|
|
409
|
+
dispose() {
|
|
410
|
+
super.dispose();
|
|
380
411
|
this._config = null;
|
|
381
412
|
this._parent = null;
|
|
382
|
-
this._element = null;
|
|
383
413
|
this._triggerArray = null;
|
|
384
414
|
this._isTransitioning = null;
|
|
385
415
|
} // Private
|
|
386
|
-
;
|
|
387
416
|
|
|
388
|
-
|
|
389
|
-
|
|
417
|
+
|
|
418
|
+
_getConfig(config) {
|
|
419
|
+
config = { ...Default,
|
|
420
|
+
...config
|
|
421
|
+
};
|
|
390
422
|
config.toggle = Boolean(config.toggle); // Coerce string values
|
|
391
423
|
|
|
392
424
|
typeCheckConfig(NAME, config, DefaultType);
|
|
393
425
|
return config;
|
|
394
|
-
}
|
|
426
|
+
}
|
|
395
427
|
|
|
396
|
-
|
|
428
|
+
_getDimension() {
|
|
397
429
|
return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
_proto._getParent = function _getParent() {
|
|
401
|
-
var _this3 = this;
|
|
430
|
+
}
|
|
402
431
|
|
|
403
|
-
|
|
432
|
+
_getParent() {
|
|
433
|
+
let {
|
|
434
|
+
parent
|
|
435
|
+
} = this._config;
|
|
404
436
|
|
|
405
437
|
if (isElement(parent)) {
|
|
406
438
|
// it's a jQuery object
|
|
@@ -411,22 +443,22 @@
|
|
|
411
443
|
parent = SelectorEngine__default['default'].findOne(parent);
|
|
412
444
|
}
|
|
413
445
|
|
|
414
|
-
|
|
415
|
-
SelectorEngine__default['default'].find(selector, parent).forEach(
|
|
416
|
-
|
|
446
|
+
const selector = `${SELECTOR_DATA_TOGGLE}[data-bs-parent="${parent}"]`;
|
|
447
|
+
SelectorEngine__default['default'].find(selector, parent).forEach(element => {
|
|
448
|
+
const selected = getElementFromSelector(element);
|
|
417
449
|
|
|
418
|
-
|
|
450
|
+
this._addAriaAndCollapsedClass(selected, [element]);
|
|
419
451
|
});
|
|
420
452
|
return parent;
|
|
421
|
-
}
|
|
453
|
+
}
|
|
422
454
|
|
|
423
|
-
|
|
455
|
+
_addAriaAndCollapsedClass(element, triggerArray) {
|
|
424
456
|
if (!element || !triggerArray.length) {
|
|
425
457
|
return;
|
|
426
458
|
}
|
|
427
459
|
|
|
428
|
-
|
|
429
|
-
triggerArray.forEach(
|
|
460
|
+
const isOpen = element.classList.contains(CLASS_NAME_SHOW);
|
|
461
|
+
triggerArray.forEach(elem => {
|
|
430
462
|
if (isOpen) {
|
|
431
463
|
elem.classList.remove(CLASS_NAME_COLLAPSED);
|
|
432
464
|
} else {
|
|
@@ -436,12 +468,14 @@
|
|
|
436
468
|
elem.setAttribute('aria-expanded', isOpen);
|
|
437
469
|
});
|
|
438
470
|
} // Static
|
|
439
|
-
;
|
|
440
471
|
|
|
441
|
-
Collapse.collapseInterface = function collapseInterface(element, config) {
|
|
442
|
-
var data = Data__default['default'].getData(element, DATA_KEY);
|
|
443
472
|
|
|
444
|
-
|
|
473
|
+
static collapseInterface(element, config) {
|
|
474
|
+
let data = Data__default['default'].get(element, DATA_KEY);
|
|
475
|
+
const _config = { ...Default,
|
|
476
|
+
...Manipulator__default['default'].getDataAttributes(element),
|
|
477
|
+
...(typeof config === 'object' && config ? config : {})
|
|
478
|
+
};
|
|
445
479
|
|
|
446
480
|
if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
|
|
447
481
|
_config.toggle = false;
|
|
@@ -453,37 +487,20 @@
|
|
|
453
487
|
|
|
454
488
|
if (typeof config === 'string') {
|
|
455
489
|
if (typeof data[config] === 'undefined') {
|
|
456
|
-
throw new TypeError(
|
|
490
|
+
throw new TypeError(`No method named "${config}"`);
|
|
457
491
|
}
|
|
458
492
|
|
|
459
493
|
data[config]();
|
|
460
494
|
}
|
|
461
|
-
}
|
|
495
|
+
}
|
|
462
496
|
|
|
463
|
-
|
|
497
|
+
static jQueryInterface(config) {
|
|
464
498
|
return this.each(function () {
|
|
465
499
|
Collapse.collapseInterface(this, config);
|
|
466
500
|
});
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
Collapse.getInstance = function getInstance(element) {
|
|
470
|
-
return Data__default['default'].getData(element, DATA_KEY);
|
|
471
|
-
};
|
|
472
|
-
|
|
473
|
-
_createClass(Collapse, null, [{
|
|
474
|
-
key: "VERSION",
|
|
475
|
-
get: function get() {
|
|
476
|
-
return VERSION;
|
|
477
|
-
}
|
|
478
|
-
}, {
|
|
479
|
-
key: "Default",
|
|
480
|
-
get: function get() {
|
|
481
|
-
return Default;
|
|
482
|
-
}
|
|
483
|
-
}]);
|
|
501
|
+
}
|
|
484
502
|
|
|
485
|
-
|
|
486
|
-
}();
|
|
503
|
+
}
|
|
487
504
|
/**
|
|
488
505
|
* ------------------------------------------------------------------------
|
|
489
506
|
* Data Api implementation
|
|
@@ -493,16 +510,16 @@
|
|
|
493
510
|
|
|
494
511
|
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
495
512
|
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
|
496
|
-
if (event.target.tagName === 'A') {
|
|
513
|
+
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
|
|
497
514
|
event.preventDefault();
|
|
498
515
|
}
|
|
499
516
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
selectorElements.forEach(
|
|
504
|
-
|
|
505
|
-
|
|
517
|
+
const triggerData = Manipulator__default['default'].getDataAttributes(this);
|
|
518
|
+
const selector = getSelectorFromElement(this);
|
|
519
|
+
const selectorElements = SelectorEngine__default['default'].find(selector);
|
|
520
|
+
selectorElements.forEach(element => {
|
|
521
|
+
const data = Data__default['default'].get(element, DATA_KEY);
|
|
522
|
+
let config;
|
|
506
523
|
|
|
507
524
|
if (data) {
|
|
508
525
|
// update parent attribute
|
|
@@ -519,26 +536,14 @@
|
|
|
519
536
|
Collapse.collapseInterface(element, config);
|
|
520
537
|
});
|
|
521
538
|
});
|
|
522
|
-
var $ = getjQuery();
|
|
523
539
|
/**
|
|
524
540
|
* ------------------------------------------------------------------------
|
|
525
541
|
* jQuery
|
|
526
542
|
* ------------------------------------------------------------------------
|
|
527
|
-
* add .
|
|
543
|
+
* add .Collapse to jQuery only if jQuery is present
|
|
528
544
|
*/
|
|
529
545
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
if ($) {
|
|
533
|
-
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
|
534
|
-
$.fn[NAME] = Collapse.jQueryInterface;
|
|
535
|
-
$.fn[NAME].Constructor = Collapse;
|
|
536
|
-
|
|
537
|
-
$.fn[NAME].noConflict = function () {
|
|
538
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
539
|
-
return Collapse.jQueryInterface;
|
|
540
|
-
};
|
|
541
|
-
}
|
|
546
|
+
defineJQueryPlugin(NAME, Collapse);
|
|
542
547
|
|
|
543
548
|
return Collapse;
|
|
544
549
|
|