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