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