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