bootstrap 5.1.3 → 5.3.5
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/.github/workflows/ci.yml +61 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -0
- data/README.md +35 -14
- data/Rakefile +16 -5
- data/assets/javascripts/bootstrap/alert.js +22 -167
- data/assets/javascripts/bootstrap/base-component.js +34 -133
- data/assets/javascripts/bootstrap/button.js +19 -86
- data/assets/javascripts/bootstrap/carousel.js +209 -564
- data/assets/javascripts/bootstrap/collapse.js +78 -324
- data/assets/javascripts/bootstrap/dom/data.js +8 -14
- data/assets/javascripts/bootstrap/dom/event-handler.js +89 -174
- data/assets/javascripts/bootstrap/dom/manipulator.js +22 -39
- data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -71
- data/assets/javascripts/bootstrap/dropdown.js +135 -420
- data/assets/javascripts/bootstrap/modal.js +115 -837
- data/assets/javascripts/bootstrap/offcanvas.js +93 -714
- data/assets/javascripts/bootstrap/popover.js +42 -130
- data/assets/javascripts/bootstrap/scrollspy.js +180 -296
- data/assets/javascripts/bootstrap/tab.js +197 -245
- data/assets/javascripts/bootstrap/toast.js +52 -276
- data/assets/javascripts/bootstrap/tooltip.js +283 -744
- data/assets/javascripts/bootstrap/util/backdrop.js +138 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
- data/assets/javascripts/bootstrap/util/config.js +67 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +112 -0
- data/assets/javascripts/bootstrap/util/index.js +280 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +113 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
- data/assets/javascripts/bootstrap/util/swipe.js +134 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
- data/assets/javascripts/bootstrap-global-this-define.js +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +15 -6
- data/assets/javascripts/bootstrap.js +2278 -2831
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +4 -9
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
- data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
- data/assets/stylesheets/_bootstrap.scss +5 -6
- data/assets/stylesheets/bootstrap/_accordion.scss +68 -33
- data/assets/stylesheets/bootstrap/_alert.scss +25 -14
- data/assets/stylesheets/bootstrap/_badge.scss +14 -5
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -10
- data/assets/stylesheets/bootstrap/_button-group.scss +12 -4
- data/assets/stylesheets/bootstrap/_buttons.scss +133 -28
- data/assets/stylesheets/bootstrap/_card.scss +61 -39
- data/assets/stylesheets/bootstrap/_carousel.scss +22 -25
- data/assets/stylesheets/bootstrap/_close.scss +36 -10
- data/assets/stylesheets/bootstrap/_containers.scss +1 -1
- data/assets/stylesheets/bootstrap/_dropdown.scss +86 -76
- data/assets/stylesheets/bootstrap/_functions.scss +10 -10
- data/assets/stylesheets/bootstrap/_grid.scss +9 -3
- data/assets/stylesheets/bootstrap/_helpers.scss +3 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +81 -56
- data/assets/stylesheets/bootstrap/_maps.scss +174 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
- data/assets/stylesheets/bootstrap/_modal.scss +76 -45
- data/assets/stylesheets/bootstrap/_nav.scss +87 -29
- data/assets/stylesheets/bootstrap/_navbar.scss +102 -148
- data/assets/stylesheets/bootstrap/_offcanvas.scss +125 -61
- data/assets/stylesheets/bootstrap/_pagination.scss +66 -21
- data/assets/stylesheets/bootstrap/_placeholders.scss +1 -1
- data/assets/stylesheets/bootstrap/_popover.scss +90 -52
- data/assets/stylesheets/bootstrap/_progress.scss +31 -11
- data/assets/stylesheets/bootstrap/_reboot.scss +32 -46
- data/assets/stylesheets/bootstrap/_root.scss +155 -22
- data/assets/stylesheets/bootstrap/_spinners.scss +38 -22
- data/assets/stylesheets/bootstrap/_tables.scss +40 -24
- data/assets/stylesheets/bootstrap/_toasts.scss +38 -16
- data/assets/stylesheets/bootstrap/_tooltip.scss +60 -56
- data/assets/stylesheets/bootstrap/_type.scss +3 -1
- data/assets/stylesheets/bootstrap/_utilities.scss +209 -33
- data/assets/stylesheets/bootstrap/_variables-dark.scss +102 -0
- data/assets/stylesheets/bootstrap/_variables.scss +415 -303
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +39 -5
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +51 -14
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +36 -41
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +12 -4
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +20 -9
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
- data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
- data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +7 -1
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -4
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +8 -8
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +32 -95
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +4 -2
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +38 -19
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +15 -15
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +4 -25
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +12 -9
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +14 -6
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +6 -2
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
- data/bootstrap.gemspec +3 -3
- data/lib/bootstrap/engine.rb +17 -2
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +10 -5
- data/tasks/updater/network.rb +2 -2
- data/tasks/updater/scss.rb +2 -2
- data/tasks/updater.rb +2 -2
- data/test/dummy_rails/config/application.rb +0 -2
- data/test/dummy_rails/public/favicon.ico +0 -0
- data/test/gemfiles/rails_4_2.gemfile +2 -1
- data/test/gemfiles/rails_5_0.gemfile +1 -2
- data/test/gemfiles/rails_5_1.gemfile +1 -2
- data/test/gemfiles/rails_5_2.gemfile +7 -0
- data/test/gemfiles/rails_6_0.gemfile +1 -1
- data/test/gemfiles/rails_6_1.gemfile +1 -1
- data/test/gemfiles/rails_7_0_dartsass.gemfile +7 -0
- data/test/gemfiles/rails_7_0_sassc.gemfile +7 -0
- data/test/rails_test.rb +0 -5
- data/test/test_helper.rb +3 -2
- metadata +49 -29
- data/.travis.yml +0 -32
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -18
|
@@ -1,199 +1,30 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap collapse.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap collapse.js v5.3.5 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2025 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('./
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['./
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.
|
|
10
|
-
})(this, (function (
|
|
11
|
-
|
|
12
|
-
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
|
-
|
|
14
|
-
const Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
|
15
|
-
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
16
|
-
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
17
|
-
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
18
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Index));
|
|
10
|
+
})(this, (function (BaseComponent, EventHandler, SelectorEngine, index_js) { 'use strict';
|
|
19
11
|
|
|
20
12
|
/**
|
|
21
13
|
* --------------------------------------------------------------------------
|
|
22
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap collapse.js
|
|
23
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
24
16
|
* --------------------------------------------------------------------------
|
|
25
17
|
*/
|
|
26
18
|
|
|
27
|
-
const toType = obj => {
|
|
28
|
-
if (obj === null || obj === undefined) {
|
|
29
|
-
return `${obj}`;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const getSelector = element => {
|
|
36
|
-
let selector = element.getAttribute('data-bs-target');
|
|
37
|
-
|
|
38
|
-
if (!selector || selector === '#') {
|
|
39
|
-
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
40
|
-
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
41
|
-
// `document.querySelector` will rightfully complain it is invalid.
|
|
42
|
-
// See https://github.com/twbs/bootstrap/issues/32273
|
|
43
|
-
|
|
44
|
-
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
45
|
-
return null;
|
|
46
|
-
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
50
|
-
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
51
|
-
}
|
|
52
19
|
|
|
53
|
-
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return selector;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const getSelectorFromElement = element => {
|
|
60
|
-
const selector = getSelector(element);
|
|
61
|
-
|
|
62
|
-
if (selector) {
|
|
63
|
-
return document.querySelector(selector) ? selector : null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return null;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const getElementFromSelector = element => {
|
|
70
|
-
const selector = getSelector(element);
|
|
71
|
-
return selector ? document.querySelector(selector) : null;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const isElement = obj => {
|
|
75
|
-
if (!obj || typeof obj !== 'object') {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (typeof obj.jquery !== 'undefined') {
|
|
80
|
-
obj = obj[0];
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return typeof obj.nodeType !== 'undefined';
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const getElement = obj => {
|
|
87
|
-
if (isElement(obj)) {
|
|
88
|
-
// it's a jQuery object or a node element
|
|
89
|
-
return obj.jquery ? obj[0] : obj;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (typeof obj === 'string' && obj.length > 0) {
|
|
93
|
-
return document.querySelector(obj);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return null;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const typeCheckConfig = (componentName, config, configTypes) => {
|
|
100
|
-
Object.keys(configTypes).forEach(property => {
|
|
101
|
-
const expectedTypes = configTypes[property];
|
|
102
|
-
const value = config[property];
|
|
103
|
-
const valueType = value && isElement(value) ? 'element' : toType(value);
|
|
104
|
-
|
|
105
|
-
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
106
|
-
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
};
|
|
110
20
|
/**
|
|
111
|
-
* Trick to restart an element's animation
|
|
112
|
-
*
|
|
113
|
-
* @param {HTMLElement} element
|
|
114
|
-
* @return void
|
|
115
|
-
*
|
|
116
|
-
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
117
|
-
*/
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const reflow = element => {
|
|
121
|
-
// eslint-disable-next-line no-unused-expressions
|
|
122
|
-
element.offsetHeight;
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
const getjQuery = () => {
|
|
126
|
-
const {
|
|
127
|
-
jQuery
|
|
128
|
-
} = window;
|
|
129
|
-
|
|
130
|
-
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
131
|
-
return jQuery;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return null;
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
const DOMContentLoadedCallbacks = [];
|
|
138
|
-
|
|
139
|
-
const onDOMContentLoaded = callback => {
|
|
140
|
-
if (document.readyState === 'loading') {
|
|
141
|
-
// add listener on the first call when the document is in loading state
|
|
142
|
-
if (!DOMContentLoadedCallbacks.length) {
|
|
143
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
144
|
-
DOMContentLoadedCallbacks.forEach(callback => callback());
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
DOMContentLoadedCallbacks.push(callback);
|
|
149
|
-
} else {
|
|
150
|
-
callback();
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const defineJQueryPlugin = plugin => {
|
|
155
|
-
onDOMContentLoaded(() => {
|
|
156
|
-
const $ = getjQuery();
|
|
157
|
-
/* istanbul ignore if */
|
|
158
|
-
|
|
159
|
-
if ($) {
|
|
160
|
-
const name = plugin.NAME;
|
|
161
|
-
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
162
|
-
$.fn[name] = plugin.jQueryInterface;
|
|
163
|
-
$.fn[name].Constructor = plugin;
|
|
164
|
-
|
|
165
|
-
$.fn[name].noConflict = () => {
|
|
166
|
-
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
167
|
-
return plugin.jQueryInterface;
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* --------------------------------------------------------------------------
|
|
175
|
-
* Bootstrap (v5.1.3): collapse.js
|
|
176
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
177
|
-
* --------------------------------------------------------------------------
|
|
178
|
-
*/
|
|
179
|
-
/**
|
|
180
|
-
* ------------------------------------------------------------------------
|
|
181
21
|
* Constants
|
|
182
|
-
* ------------------------------------------------------------------------
|
|
183
22
|
*/
|
|
184
23
|
|
|
185
24
|
const NAME = 'collapse';
|
|
186
25
|
const DATA_KEY = 'bs.collapse';
|
|
187
26
|
const EVENT_KEY = `.${DATA_KEY}`;
|
|
188
27
|
const DATA_API_KEY = '.data-api';
|
|
189
|
-
const Default = {
|
|
190
|
-
toggle: true,
|
|
191
|
-
parent: null
|
|
192
|
-
};
|
|
193
|
-
const DefaultType = {
|
|
194
|
-
toggle: 'boolean',
|
|
195
|
-
parent: '(null|element)'
|
|
196
|
-
};
|
|
197
28
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
198
29
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
199
30
|
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
@@ -209,53 +40,53 @@
|
|
|
209
40
|
const HEIGHT = 'height';
|
|
210
41
|
const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
|
|
211
42
|
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]';
|
|
43
|
+
const Default = {
|
|
44
|
+
parent: null,
|
|
45
|
+
toggle: true
|
|
46
|
+
};
|
|
47
|
+
const DefaultType = {
|
|
48
|
+
parent: '(null|element)',
|
|
49
|
+
toggle: 'boolean'
|
|
50
|
+
};
|
|
51
|
+
|
|
212
52
|
/**
|
|
213
|
-
*
|
|
214
|
-
* Class Definition
|
|
215
|
-
* ------------------------------------------------------------------------
|
|
53
|
+
* Class definition
|
|
216
54
|
*/
|
|
217
55
|
|
|
218
|
-
class Collapse extends
|
|
56
|
+
class Collapse extends BaseComponent {
|
|
219
57
|
constructor(element, config) {
|
|
220
|
-
super(element);
|
|
58
|
+
super(element, config);
|
|
221
59
|
this._isTransitioning = false;
|
|
222
|
-
this._config = this._getConfig(config);
|
|
223
60
|
this._triggerArray = [];
|
|
224
|
-
const toggleList =
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
const selector = getSelectorFromElement(elem);
|
|
229
|
-
const filterElement = SelectorEngine__default.default.find(selector).filter(foundElem => foundElem === this._element);
|
|
230
|
-
|
|
61
|
+
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
|
|
62
|
+
for (const elem of toggleList) {
|
|
63
|
+
const selector = SelectorEngine.getSelectorFromElement(elem);
|
|
64
|
+
const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
|
|
231
65
|
if (selector !== null && filterElement.length) {
|
|
232
|
-
this._selector = selector;
|
|
233
|
-
|
|
234
66
|
this._triggerArray.push(elem);
|
|
235
67
|
}
|
|
236
68
|
}
|
|
237
|
-
|
|
238
69
|
this._initializeChildren();
|
|
239
|
-
|
|
240
70
|
if (!this._config.parent) {
|
|
241
71
|
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
|
|
242
72
|
}
|
|
243
|
-
|
|
244
73
|
if (this._config.toggle) {
|
|
245
74
|
this.toggle();
|
|
246
75
|
}
|
|
247
|
-
}
|
|
248
|
-
|
|
76
|
+
}
|
|
249
77
|
|
|
78
|
+
// Getters
|
|
250
79
|
static get Default() {
|
|
251
80
|
return Default;
|
|
252
81
|
}
|
|
253
|
-
|
|
82
|
+
static get DefaultType() {
|
|
83
|
+
return DefaultType;
|
|
84
|
+
}
|
|
254
85
|
static get NAME() {
|
|
255
86
|
return NAME;
|
|
256
|
-
}
|
|
257
|
-
|
|
87
|
+
}
|
|
258
88
|
|
|
89
|
+
// Public
|
|
259
90
|
toggle() {
|
|
260
91
|
if (this._isShown()) {
|
|
261
92
|
this.hide();
|
|
@@ -263,231 +94,154 @@
|
|
|
263
94
|
this.show();
|
|
264
95
|
}
|
|
265
96
|
}
|
|
266
|
-
|
|
267
97
|
show() {
|
|
268
98
|
if (this._isTransitioning || this._isShown()) {
|
|
269
99
|
return;
|
|
270
100
|
}
|
|
101
|
+
let activeChildren = [];
|
|
271
102
|
|
|
272
|
-
|
|
273
|
-
let activesData;
|
|
274
|
-
|
|
103
|
+
// find active children
|
|
275
104
|
if (this._config.parent) {
|
|
276
|
-
|
|
277
|
-
|
|
105
|
+
activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
|
|
106
|
+
toggle: false
|
|
107
|
+
}));
|
|
278
108
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
if (actives.length) {
|
|
283
|
-
const tempActiveData = actives.find(elem => container !== elem);
|
|
284
|
-
activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
|
|
285
|
-
|
|
286
|
-
if (activesData && activesData._isTransitioning) {
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
109
|
+
if (activeChildren.length && activeChildren[0]._isTransitioning) {
|
|
110
|
+
return;
|
|
289
111
|
}
|
|
290
|
-
|
|
291
|
-
const startEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
|
|
292
|
-
|
|
112
|
+
const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);
|
|
293
113
|
if (startEvent.defaultPrevented) {
|
|
294
114
|
return;
|
|
295
115
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
Collapse.getOrCreateInstance(elemActive, {
|
|
300
|
-
toggle: false
|
|
301
|
-
}).hide();
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
if (!activesData) {
|
|
305
|
-
Data__default.default.set(elemActive, DATA_KEY, null);
|
|
306
|
-
}
|
|
307
|
-
});
|
|
308
|
-
|
|
116
|
+
for (const activeInstance of activeChildren) {
|
|
117
|
+
activeInstance.hide();
|
|
118
|
+
}
|
|
309
119
|
const dimension = this._getDimension();
|
|
310
|
-
|
|
311
120
|
this._element.classList.remove(CLASS_NAME_COLLAPSE);
|
|
312
|
-
|
|
313
121
|
this._element.classList.add(CLASS_NAME_COLLAPSING);
|
|
314
|
-
|
|
315
122
|
this._element.style[dimension] = 0;
|
|
316
|
-
|
|
317
123
|
this._addAriaAndCollapsedClass(this._triggerArray, true);
|
|
318
|
-
|
|
319
124
|
this._isTransitioning = true;
|
|
320
|
-
|
|
321
125
|
const complete = () => {
|
|
322
126
|
this._isTransitioning = false;
|
|
323
|
-
|
|
324
127
|
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
|
325
|
-
|
|
326
128
|
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
|
|
327
|
-
|
|
328
129
|
this._element.style[dimension] = '';
|
|
329
|
-
|
|
130
|
+
EventHandler.trigger(this._element, EVENT_SHOWN);
|
|
330
131
|
};
|
|
331
|
-
|
|
332
132
|
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
|
333
133
|
const scrollSize = `scroll${capitalizedDimension}`;
|
|
334
|
-
|
|
335
134
|
this._queueCallback(complete, this._element, true);
|
|
336
|
-
|
|
337
135
|
this._element.style[dimension] = `${this._element[scrollSize]}px`;
|
|
338
136
|
}
|
|
339
|
-
|
|
340
137
|
hide() {
|
|
341
138
|
if (this._isTransitioning || !this._isShown()) {
|
|
342
139
|
return;
|
|
343
140
|
}
|
|
344
|
-
|
|
345
|
-
const startEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
|
|
346
|
-
|
|
141
|
+
const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);
|
|
347
142
|
if (startEvent.defaultPrevented) {
|
|
348
143
|
return;
|
|
349
144
|
}
|
|
350
|
-
|
|
351
145
|
const dimension = this._getDimension();
|
|
352
|
-
|
|
353
146
|
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
|
|
354
|
-
reflow(this._element);
|
|
355
|
-
|
|
147
|
+
index_js.reflow(this._element);
|
|
356
148
|
this._element.classList.add(CLASS_NAME_COLLAPSING);
|
|
357
|
-
|
|
358
149
|
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
for (let i = 0; i < triggerArrayLength; i++) {
|
|
363
|
-
const trigger = this._triggerArray[i];
|
|
364
|
-
const elem = getElementFromSelector(trigger);
|
|
365
|
-
|
|
366
|
-
if (elem && !this._isShown(elem)) {
|
|
150
|
+
for (const trigger of this._triggerArray) {
|
|
151
|
+
const element = SelectorEngine.getElementFromSelector(trigger);
|
|
152
|
+
if (element && !this._isShown(element)) {
|
|
367
153
|
this._addAriaAndCollapsedClass([trigger], false);
|
|
368
154
|
}
|
|
369
155
|
}
|
|
370
|
-
|
|
371
156
|
this._isTransitioning = true;
|
|
372
|
-
|
|
373
157
|
const complete = () => {
|
|
374
158
|
this._isTransitioning = false;
|
|
375
|
-
|
|
376
159
|
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
|
377
|
-
|
|
378
160
|
this._element.classList.add(CLASS_NAME_COLLAPSE);
|
|
379
|
-
|
|
380
|
-
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
|
|
161
|
+
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
|
381
162
|
};
|
|
382
|
-
|
|
383
163
|
this._element.style[dimension] = '';
|
|
384
|
-
|
|
385
164
|
this._queueCallback(complete, this._element, true);
|
|
386
165
|
}
|
|
387
|
-
|
|
388
166
|
_isShown(element = this._element) {
|
|
389
167
|
return element.classList.contains(CLASS_NAME_SHOW);
|
|
390
|
-
}
|
|
391
|
-
|
|
168
|
+
}
|
|
392
169
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
...Manipulator__default.default.getDataAttributes(this._element),
|
|
396
|
-
...config
|
|
397
|
-
};
|
|
170
|
+
// Private
|
|
171
|
+
_configAfterMerge(config) {
|
|
398
172
|
config.toggle = Boolean(config.toggle); // Coerce string values
|
|
399
|
-
|
|
400
|
-
config.parent = getElement(config.parent);
|
|
401
|
-
typeCheckConfig(NAME, config, DefaultType);
|
|
173
|
+
config.parent = index_js.getElement(config.parent);
|
|
402
174
|
return config;
|
|
403
175
|
}
|
|
404
|
-
|
|
405
176
|
_getDimension() {
|
|
406
177
|
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
|
|
407
178
|
}
|
|
408
|
-
|
|
409
179
|
_initializeChildren() {
|
|
410
180
|
if (!this._config.parent) {
|
|
411
181
|
return;
|
|
412
182
|
}
|
|
413
|
-
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
const selected = getElementFromSelector(element);
|
|
417
|
-
|
|
183
|
+
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);
|
|
184
|
+
for (const element of children) {
|
|
185
|
+
const selected = SelectorEngine.getElementFromSelector(element);
|
|
418
186
|
if (selected) {
|
|
419
187
|
this._addAriaAndCollapsedClass([element], this._isShown(selected));
|
|
420
188
|
}
|
|
421
|
-
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
_getFirstLevelChildren(selector) {
|
|
192
|
+
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
|
|
193
|
+
// remove children if greater depth
|
|
194
|
+
return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
|
|
422
195
|
}
|
|
423
|
-
|
|
424
196
|
_addAriaAndCollapsedClass(triggerArray, isOpen) {
|
|
425
197
|
if (!triggerArray.length) {
|
|
426
198
|
return;
|
|
427
199
|
}
|
|
200
|
+
for (const element of triggerArray) {
|
|
201
|
+
element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
|
|
202
|
+
element.setAttribute('aria-expanded', isOpen);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
428
205
|
|
|
429
|
-
|
|
430
|
-
if (isOpen) {
|
|
431
|
-
elem.classList.remove(CLASS_NAME_COLLAPSED);
|
|
432
|
-
} else {
|
|
433
|
-
elem.classList.add(CLASS_NAME_COLLAPSED);
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
elem.setAttribute('aria-expanded', isOpen);
|
|
437
|
-
});
|
|
438
|
-
} // Static
|
|
439
|
-
|
|
440
|
-
|
|
206
|
+
// Static
|
|
441
207
|
static jQueryInterface(config) {
|
|
208
|
+
const _config = {};
|
|
209
|
+
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
210
|
+
_config.toggle = false;
|
|
211
|
+
}
|
|
442
212
|
return this.each(function () {
|
|
443
|
-
const _config = {};
|
|
444
|
-
|
|
445
|
-
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
446
|
-
_config.toggle = false;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
213
|
const data = Collapse.getOrCreateInstance(this, _config);
|
|
450
|
-
|
|
451
214
|
if (typeof config === 'string') {
|
|
452
215
|
if (typeof data[config] === 'undefined') {
|
|
453
216
|
throw new TypeError(`No method named "${config}"`);
|
|
454
217
|
}
|
|
455
|
-
|
|
456
218
|
data[config]();
|
|
457
219
|
}
|
|
458
220
|
});
|
|
459
221
|
}
|
|
460
|
-
|
|
461
222
|
}
|
|
223
|
+
|
|
462
224
|
/**
|
|
463
|
-
*
|
|
464
|
-
* Data Api implementation
|
|
465
|
-
* ------------------------------------------------------------------------
|
|
225
|
+
* Data API implementation
|
|
466
226
|
*/
|
|
467
227
|
|
|
468
|
-
|
|
469
|
-
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
228
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
470
229
|
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
|
471
230
|
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
|
|
472
231
|
event.preventDefault();
|
|
473
232
|
}
|
|
474
|
-
|
|
475
|
-
const selector = getSelectorFromElement(this);
|
|
476
|
-
const selectorElements = SelectorEngine__default.default.find(selector);
|
|
477
|
-
selectorElements.forEach(element => {
|
|
233
|
+
for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
|
|
478
234
|
Collapse.getOrCreateInstance(element, {
|
|
479
235
|
toggle: false
|
|
480
236
|
}).toggle();
|
|
481
|
-
}
|
|
237
|
+
}
|
|
482
238
|
});
|
|
239
|
+
|
|
483
240
|
/**
|
|
484
|
-
* ------------------------------------------------------------------------
|
|
485
241
|
* jQuery
|
|
486
|
-
* ------------------------------------------------------------------------
|
|
487
|
-
* add .Collapse to jQuery only if jQuery is present
|
|
488
242
|
*/
|
|
489
243
|
|
|
490
|
-
defineJQueryPlugin(Collapse);
|
|
244
|
+
index_js.defineJQueryPlugin(Collapse);
|
|
491
245
|
|
|
492
246
|
return Collapse;
|
|
493
247
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap data.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap data.js v5.3.5 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2025 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) {
|
|
@@ -11,56 +11,50 @@
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* --------------------------------------------------------------------------
|
|
14
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap dom/data.js
|
|
15
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
16
16
|
* --------------------------------------------------------------------------
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* ------------------------------------------------------------------------
|
|
21
20
|
* Constants
|
|
22
|
-
* ------------------------------------------------------------------------
|
|
23
21
|
*/
|
|
22
|
+
|
|
24
23
|
const elementMap = new Map();
|
|
25
24
|
const data = {
|
|
26
25
|
set(element, key, instance) {
|
|
27
26
|
if (!elementMap.has(element)) {
|
|
28
27
|
elementMap.set(element, new Map());
|
|
29
28
|
}
|
|
29
|
+
const instanceMap = elementMap.get(element);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
// make it clear we only want one instance per element
|
|
32
32
|
// can be removed later when multiple key/instances are fine to be used
|
|
33
|
-
|
|
34
33
|
if (!instanceMap.has(key) && instanceMap.size !== 0) {
|
|
35
34
|
// eslint-disable-next-line no-console
|
|
36
35
|
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
|
|
37
36
|
return;
|
|
38
37
|
}
|
|
39
|
-
|
|
40
38
|
instanceMap.set(key, instance);
|
|
41
39
|
},
|
|
42
|
-
|
|
43
40
|
get(element, key) {
|
|
44
41
|
if (elementMap.has(element)) {
|
|
45
42
|
return elementMap.get(element).get(key) || null;
|
|
46
43
|
}
|
|
47
|
-
|
|
48
44
|
return null;
|
|
49
45
|
},
|
|
50
|
-
|
|
51
46
|
remove(element, key) {
|
|
52
47
|
if (!elementMap.has(element)) {
|
|
53
48
|
return;
|
|
54
49
|
}
|
|
55
|
-
|
|
56
50
|
const instanceMap = elementMap.get(element);
|
|
57
|
-
instanceMap.delete(key);
|
|
51
|
+
instanceMap.delete(key);
|
|
58
52
|
|
|
53
|
+
// free up element references if there are no instances left for an element
|
|
59
54
|
if (instanceMap.size === 0) {
|
|
60
55
|
elementMap.delete(element);
|
|
61
56
|
}
|
|
62
57
|
}
|
|
63
|
-
|
|
64
58
|
};
|
|
65
59
|
|
|
66
60
|
return data;
|