bootstrap 5.2.3 → 5.3.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/README.md +1 -1
- data/assets/javascripts/bootstrap/alert.js +22 -32
- data/assets/javascripts/bootstrap/base-component.js +22 -38
- data/assets/javascripts/bootstrap/button.js +19 -22
- data/assets/javascripts/bootstrap/carousel.js +52 -135
- data/assets/javascripts/bootstrap/collapse.js +40 -102
- data/assets/javascripts/bootstrap/dom/data.js +8 -12
- data/assets/javascripts/bootstrap/dom/event-handler.js +19 -66
- data/assets/javascripts/bootstrap/dom/manipulator.js +4 -17
- data/assets/javascripts/bootstrap/dom/selector-engine.js +42 -24
- data/assets/javascripts/bootstrap/dropdown.js +74 -145
- data/assets/javascripts/bootstrap/modal.js +53 -133
- data/assets/javascripts/bootstrap/offcanvas.js +50 -102
- data/assets/javascripts/bootstrap/popover.js +23 -29
- data/assets/javascripts/bootstrap/scrollspy.js +53 -90
- data/assets/javascripts/bootstrap/tab.js +52 -109
- data/assets/javascripts/bootstrap/toast.js +31 -73
- data/assets/javascripts/bootstrap/tooltip.js +75 -177
- data/assets/javascripts/bootstrap/util/backdrop.js +28 -54
- data/assets/javascripts/bootstrap/util/component-functions.js +13 -18
- data/assets/javascripts/bootstrap/util/config.js +15 -27
- data/assets/javascripts/bootstrap/util/focustrap.js +20 -36
- data/assets/javascripts/bootstrap/util/index.js +42 -111
- data/assets/javascripts/bootstrap/util/sanitizer.js +30 -42
- data/assets/javascripts/bootstrap/util/scrollbar.js +24 -50
- data/assets/javascripts/bootstrap/util/swipe.js +27 -48
- data/assets/javascripts/bootstrap/util/template-factory.js +25 -52
- data/assets/javascripts/bootstrap-sprockets.js +12 -12
- data/assets/javascripts/bootstrap.js +678 -1441
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +1 -3
- data/assets/stylesheets/_bootstrap-reboot.scss +1 -0
- data/assets/stylesheets/_bootstrap.scss +1 -0
- data/assets/stylesheets/bootstrap/_accordion.scss +9 -0
- data/assets/stylesheets/bootstrap/_alert.scss +8 -11
- data/assets/stylesheets/bootstrap/_button-group.scss +2 -2
- data/assets/stylesheets/bootstrap/_buttons.scss +3 -3
- data/assets/stylesheets/bootstrap/_card.scss +5 -0
- data/assets/stylesheets/bootstrap/_carousel.scss +20 -2
- data/assets/stylesheets/bootstrap/_close.scss +32 -9
- data/assets/stylesheets/bootstrap/_dropdown.scss +1 -0
- data/assets/stylesheets/bootstrap/_functions.scss +1 -1
- data/assets/stylesheets/bootstrap/_grid.scss +6 -0
- data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +12 -7
- data/assets/stylesheets/bootstrap/_maps.scss +120 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
- data/assets/stylesheets/bootstrap/_nav.scss +40 -3
- data/assets/stylesheets/bootstrap/_navbar.scss +15 -4
- data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -2
- data/assets/stylesheets/bootstrap/_pagination.scss +1 -1
- data/assets/stylesheets/bootstrap/_progress.scss +10 -1
- data/assets/stylesheets/bootstrap/_reboot.scss +3 -3
- data/assets/stylesheets/bootstrap/_root.scss +121 -10
- data/assets/stylesheets/bootstrap/_tables.scss +18 -11
- data/assets/stylesheets/bootstrap/_tooltip.scss +4 -5
- data/assets/stylesheets/bootstrap/_utilities.scss +172 -13
- data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
- data/assets/stylesheets/bootstrap/_variables.scss +262 -153
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +22 -3
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +24 -11
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +23 -3
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +11 -2
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +1 -1
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +0 -2
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
- data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
- data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +4 -1
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +2 -4
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -7
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +5 -1
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
- data/bootstrap.gemspec +1 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +1 -1
- data/tasks/updater/scss.rb +1 -1
- metadata +12 -8
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap tab.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap tab.js v5.3.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2023 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.Tab = factory(global.
|
|
10
|
-
})(this, (function (
|
|
11
|
-
|
|
12
|
-
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
|
-
|
|
14
|
-
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
-
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
16
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Index));
|
|
10
|
+
})(this, (function (BaseComponent, EventHandler, SelectorEngine, index_js) { 'use strict';
|
|
17
11
|
|
|
18
12
|
/**
|
|
19
13
|
* --------------------------------------------------------------------------
|
|
20
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap tab.js
|
|
21
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
22
16
|
* --------------------------------------------------------------------------
|
|
23
17
|
*/
|
|
18
|
+
|
|
19
|
+
|
|
24
20
|
/**
|
|
25
21
|
* Constants
|
|
26
22
|
*/
|
|
@@ -49,134 +45,109 @@
|
|
|
49
45
|
const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
|
|
50
46
|
const SELECTOR_OUTER = '.nav-item, .list-group-item';
|
|
51
47
|
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
|
|
52
|
-
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; //
|
|
53
|
-
|
|
48
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
|
|
54
49
|
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
|
|
55
50
|
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
|
|
51
|
+
|
|
56
52
|
/**
|
|
57
53
|
* Class definition
|
|
58
54
|
*/
|
|
59
55
|
|
|
60
|
-
class Tab extends
|
|
56
|
+
class Tab extends BaseComponent {
|
|
61
57
|
constructor(element) {
|
|
62
58
|
super(element);
|
|
63
59
|
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
|
|
64
|
-
|
|
65
60
|
if (!this._parent) {
|
|
66
|
-
return;
|
|
61
|
+
return;
|
|
62
|
+
// TODO: should throw exception in v6
|
|
67
63
|
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
|
|
68
|
-
}
|
|
69
|
-
|
|
64
|
+
}
|
|
70
65
|
|
|
66
|
+
// Set up initial aria attributes
|
|
71
67
|
this._setInitialAttributes(this._parent, this._getChildren());
|
|
68
|
+
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
|
|
69
|
+
}
|
|
72
70
|
|
|
73
|
-
|
|
74
|
-
} // Getters
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
// Getters
|
|
77
72
|
static get NAME() {
|
|
78
73
|
return NAME;
|
|
79
|
-
}
|
|
80
|
-
|
|
74
|
+
}
|
|
81
75
|
|
|
76
|
+
// Public
|
|
82
77
|
show() {
|
|
83
78
|
// Shows this elem and deactivate the active sibling if exists
|
|
84
79
|
const innerElem = this._element;
|
|
85
|
-
|
|
86
80
|
if (this._elemIsActive(innerElem)) {
|
|
87
81
|
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
82
|
+
}
|
|
90
83
|
|
|
84
|
+
// Search for active tab on same parent to deactivate it
|
|
91
85
|
const active = this._getActiveElem();
|
|
92
|
-
|
|
93
|
-
const hideEvent = active ? EventHandler__default.default.trigger(active, EVENT_HIDE, {
|
|
86
|
+
const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE, {
|
|
94
87
|
relatedTarget: innerElem
|
|
95
88
|
}) : null;
|
|
96
|
-
const showEvent =
|
|
89
|
+
const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, {
|
|
97
90
|
relatedTarget: active
|
|
98
91
|
});
|
|
99
|
-
|
|
100
92
|
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
|
|
101
93
|
return;
|
|
102
94
|
}
|
|
103
|
-
|
|
104
95
|
this._deactivate(active, innerElem);
|
|
105
|
-
|
|
106
96
|
this._activate(innerElem, active);
|
|
107
|
-
}
|
|
108
|
-
|
|
97
|
+
}
|
|
109
98
|
|
|
99
|
+
// Private
|
|
110
100
|
_activate(element, relatedElem) {
|
|
111
101
|
if (!element) {
|
|
112
102
|
return;
|
|
113
103
|
}
|
|
114
|
-
|
|
115
104
|
element.classList.add(CLASS_NAME_ACTIVE);
|
|
116
|
-
|
|
117
|
-
this._activate(index.getElementFromSelector(element)); // Search and activate/show the proper section
|
|
118
|
-
|
|
105
|
+
this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
|
|
119
106
|
|
|
120
107
|
const complete = () => {
|
|
121
108
|
if (element.getAttribute('role') !== 'tab') {
|
|
122
109
|
element.classList.add(CLASS_NAME_SHOW);
|
|
123
110
|
return;
|
|
124
111
|
}
|
|
125
|
-
|
|
126
112
|
element.removeAttribute('tabindex');
|
|
127
113
|
element.setAttribute('aria-selected', true);
|
|
128
|
-
|
|
129
114
|
this._toggleDropDown(element, true);
|
|
130
|
-
|
|
131
|
-
EventHandler__default.default.trigger(element, EVENT_SHOWN, {
|
|
115
|
+
EventHandler.trigger(element, EVENT_SHOWN, {
|
|
132
116
|
relatedTarget: relatedElem
|
|
133
117
|
});
|
|
134
118
|
};
|
|
135
|
-
|
|
136
119
|
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
|
|
137
120
|
}
|
|
138
|
-
|
|
139
121
|
_deactivate(element, relatedElem) {
|
|
140
122
|
if (!element) {
|
|
141
123
|
return;
|
|
142
124
|
}
|
|
143
|
-
|
|
144
125
|
element.classList.remove(CLASS_NAME_ACTIVE);
|
|
145
126
|
element.blur();
|
|
146
|
-
|
|
147
|
-
this._deactivate(index.getElementFromSelector(element)); // Search and deactivate the shown section too
|
|
148
|
-
|
|
127
|
+
this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
|
|
149
128
|
|
|
150
129
|
const complete = () => {
|
|
151
130
|
if (element.getAttribute('role') !== 'tab') {
|
|
152
131
|
element.classList.remove(CLASS_NAME_SHOW);
|
|
153
132
|
return;
|
|
154
133
|
}
|
|
155
|
-
|
|
156
134
|
element.setAttribute('aria-selected', false);
|
|
157
135
|
element.setAttribute('tabindex', '-1');
|
|
158
|
-
|
|
159
136
|
this._toggleDropDown(element, false);
|
|
160
|
-
|
|
161
|
-
EventHandler__default.default.trigger(element, EVENT_HIDDEN, {
|
|
137
|
+
EventHandler.trigger(element, EVENT_HIDDEN, {
|
|
162
138
|
relatedTarget: relatedElem
|
|
163
139
|
});
|
|
164
140
|
};
|
|
165
|
-
|
|
166
141
|
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
|
|
167
142
|
}
|
|
168
|
-
|
|
169
143
|
_keydown(event) {
|
|
170
144
|
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
|
|
171
145
|
return;
|
|
172
146
|
}
|
|
173
|
-
|
|
174
147
|
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
|
|
175
|
-
|
|
176
148
|
event.preventDefault();
|
|
177
149
|
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
|
|
178
|
-
const nextActiveElement =
|
|
179
|
-
|
|
150
|
+
const nextActiveElement = index_js.getNextActiveElement(this._getChildren().filter(element => !index_js.isDisabled(element)), event.target, isNext, true);
|
|
180
151
|
if (nextActiveElement) {
|
|
181
152
|
nextActiveElement.focus({
|
|
182
153
|
preventScroll: true
|
|
@@ -184,141 +155,113 @@
|
|
|
184
155
|
Tab.getOrCreateInstance(nextActiveElement).show();
|
|
185
156
|
}
|
|
186
157
|
}
|
|
187
|
-
|
|
188
158
|
_getChildren() {
|
|
189
159
|
// collection of inner elements
|
|
190
|
-
return
|
|
160
|
+
return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
|
|
191
161
|
}
|
|
192
|
-
|
|
193
162
|
_getActiveElem() {
|
|
194
163
|
return this._getChildren().find(child => this._elemIsActive(child)) || null;
|
|
195
164
|
}
|
|
196
|
-
|
|
197
165
|
_setInitialAttributes(parent, children) {
|
|
198
166
|
this._setAttributeIfNotExists(parent, 'role', 'tablist');
|
|
199
|
-
|
|
200
167
|
for (const child of children) {
|
|
201
168
|
this._setInitialAttributesOnChild(child);
|
|
202
169
|
}
|
|
203
170
|
}
|
|
204
|
-
|
|
205
171
|
_setInitialAttributesOnChild(child) {
|
|
206
172
|
child = this._getInnerElement(child);
|
|
207
|
-
|
|
208
173
|
const isActive = this._elemIsActive(child);
|
|
209
|
-
|
|
210
174
|
const outerElem = this._getOuterElement(child);
|
|
211
|
-
|
|
212
175
|
child.setAttribute('aria-selected', isActive);
|
|
213
|
-
|
|
214
176
|
if (outerElem !== child) {
|
|
215
177
|
this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
|
|
216
178
|
}
|
|
217
|
-
|
|
218
179
|
if (!isActive) {
|
|
219
180
|
child.setAttribute('tabindex', '-1');
|
|
220
181
|
}
|
|
182
|
+
this._setAttributeIfNotExists(child, 'role', 'tab');
|
|
221
183
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
184
|
+
// set attributes to the related panel too
|
|
225
185
|
this._setInitialAttributesOnTargetPanel(child);
|
|
226
186
|
}
|
|
227
|
-
|
|
228
187
|
_setInitialAttributesOnTargetPanel(child) {
|
|
229
|
-
const target =
|
|
230
|
-
|
|
188
|
+
const target = SelectorEngine.getElementFromSelector(child);
|
|
231
189
|
if (!target) {
|
|
232
190
|
return;
|
|
233
191
|
}
|
|
234
|
-
|
|
235
192
|
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
|
|
236
|
-
|
|
237
193
|
if (child.id) {
|
|
238
|
-
this._setAttributeIfNotExists(target, 'aria-labelledby',
|
|
194
|
+
this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
|
|
239
195
|
}
|
|
240
196
|
}
|
|
241
|
-
|
|
242
197
|
_toggleDropDown(element, open) {
|
|
243
198
|
const outerElem = this._getOuterElement(element);
|
|
244
|
-
|
|
245
199
|
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
|
|
246
200
|
return;
|
|
247
201
|
}
|
|
248
|
-
|
|
249
202
|
const toggle = (selector, className) => {
|
|
250
|
-
const element =
|
|
251
|
-
|
|
203
|
+
const element = SelectorEngine.findOne(selector, outerElem);
|
|
252
204
|
if (element) {
|
|
253
205
|
element.classList.toggle(className, open);
|
|
254
206
|
}
|
|
255
207
|
};
|
|
256
|
-
|
|
257
208
|
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
|
|
258
209
|
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);
|
|
259
210
|
outerElem.setAttribute('aria-expanded', open);
|
|
260
211
|
}
|
|
261
|
-
|
|
262
212
|
_setAttributeIfNotExists(element, attribute, value) {
|
|
263
213
|
if (!element.hasAttribute(attribute)) {
|
|
264
214
|
element.setAttribute(attribute, value);
|
|
265
215
|
}
|
|
266
216
|
}
|
|
267
|
-
|
|
268
217
|
_elemIsActive(elem) {
|
|
269
218
|
return elem.classList.contains(CLASS_NAME_ACTIVE);
|
|
270
|
-
}
|
|
271
|
-
|
|
219
|
+
}
|
|
272
220
|
|
|
221
|
+
// Try to get the inner element (usually the .nav-link)
|
|
273
222
|
_getInnerElement(elem) {
|
|
274
|
-
return elem.matches(SELECTOR_INNER_ELEM) ? elem :
|
|
275
|
-
}
|
|
276
|
-
|
|
223
|
+
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
|
|
224
|
+
}
|
|
277
225
|
|
|
226
|
+
// Try to get the outer element (usually the .nav-item)
|
|
278
227
|
_getOuterElement(elem) {
|
|
279
228
|
return elem.closest(SELECTOR_OUTER) || elem;
|
|
280
|
-
}
|
|
281
|
-
|
|
229
|
+
}
|
|
282
230
|
|
|
231
|
+
// Static
|
|
283
232
|
static jQueryInterface(config) {
|
|
284
233
|
return this.each(function () {
|
|
285
234
|
const data = Tab.getOrCreateInstance(this);
|
|
286
|
-
|
|
287
235
|
if (typeof config !== 'string') {
|
|
288
236
|
return;
|
|
289
237
|
}
|
|
290
|
-
|
|
291
238
|
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
292
239
|
throw new TypeError(`No method named "${config}"`);
|
|
293
240
|
}
|
|
294
|
-
|
|
295
241
|
data[config]();
|
|
296
242
|
});
|
|
297
243
|
}
|
|
298
|
-
|
|
299
244
|
}
|
|
245
|
+
|
|
300
246
|
/**
|
|
301
247
|
* Data API implementation
|
|
302
248
|
*/
|
|
303
249
|
|
|
304
|
-
|
|
305
|
-
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
250
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
306
251
|
if (['A', 'AREA'].includes(this.tagName)) {
|
|
307
252
|
event.preventDefault();
|
|
308
253
|
}
|
|
309
|
-
|
|
310
|
-
if (index.isDisabled(this)) {
|
|
254
|
+
if (index_js.isDisabled(this)) {
|
|
311
255
|
return;
|
|
312
256
|
}
|
|
313
|
-
|
|
314
257
|
Tab.getOrCreateInstance(this).show();
|
|
315
258
|
});
|
|
259
|
+
|
|
316
260
|
/**
|
|
317
261
|
* Initialize on focus
|
|
318
262
|
*/
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
for (const element of SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
|
|
263
|
+
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|
264
|
+
for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
|
|
322
265
|
Tab.getOrCreateInstance(element);
|
|
323
266
|
}
|
|
324
267
|
});
|
|
@@ -326,7 +269,7 @@
|
|
|
326
269
|
* jQuery
|
|
327
270
|
*/
|
|
328
271
|
|
|
329
|
-
|
|
272
|
+
index_js.defineJQueryPlugin(Tab);
|
|
330
273
|
|
|
331
274
|
return Tab;
|
|
332
275
|
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap toast.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap toast.js v5.3.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2023 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.Toast = factory(global.
|
|
10
|
-
})(this, (function (
|
|
11
|
-
|
|
12
|
-
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
|
-
|
|
14
|
-
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./util/component-functions.js'), require('./util/index.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './util/component-functions', './util/index'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.BaseComponent, global.EventHandler, global.ComponentFunctions, global.Index));
|
|
10
|
+
})(this, (function (BaseComponent, EventHandler, componentFunctions_js, index_js) { 'use strict';
|
|
16
11
|
|
|
17
12
|
/**
|
|
18
13
|
* --------------------------------------------------------------------------
|
|
19
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap toast.js
|
|
20
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
21
16
|
* --------------------------------------------------------------------------
|
|
22
17
|
*/
|
|
18
|
+
|
|
19
|
+
|
|
23
20
|
/**
|
|
24
21
|
* Constants
|
|
25
22
|
*/
|
|
@@ -37,7 +34,6 @@
|
|
|
37
34
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
38
35
|
const CLASS_NAME_FADE = 'fade';
|
|
39
36
|
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
|
|
40
|
-
|
|
41
37
|
const CLASS_NAME_SHOW = 'show';
|
|
42
38
|
const CLASS_NAME_SHOWING = 'showing';
|
|
43
39
|
const DefaultType = {
|
|
@@ -50,119 +46,91 @@
|
|
|
50
46
|
autohide: true,
|
|
51
47
|
delay: 5000
|
|
52
48
|
};
|
|
49
|
+
|
|
53
50
|
/**
|
|
54
51
|
* Class definition
|
|
55
52
|
*/
|
|
56
53
|
|
|
57
|
-
class Toast extends
|
|
54
|
+
class Toast extends BaseComponent {
|
|
58
55
|
constructor(element, config) {
|
|
59
56
|
super(element, config);
|
|
60
57
|
this._timeout = null;
|
|
61
58
|
this._hasMouseInteraction = false;
|
|
62
59
|
this._hasKeyboardInteraction = false;
|
|
63
|
-
|
|
64
60
|
this._setListeners();
|
|
65
|
-
}
|
|
66
|
-
|
|
61
|
+
}
|
|
67
62
|
|
|
63
|
+
// Getters
|
|
68
64
|
static get Default() {
|
|
69
65
|
return Default;
|
|
70
66
|
}
|
|
71
|
-
|
|
72
67
|
static get DefaultType() {
|
|
73
68
|
return DefaultType;
|
|
74
69
|
}
|
|
75
|
-
|
|
76
70
|
static get NAME() {
|
|
77
71
|
return NAME;
|
|
78
|
-
}
|
|
79
|
-
|
|
72
|
+
}
|
|
80
73
|
|
|
74
|
+
// Public
|
|
81
75
|
show() {
|
|
82
|
-
const showEvent =
|
|
83
|
-
|
|
76
|
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
|
|
84
77
|
if (showEvent.defaultPrevented) {
|
|
85
78
|
return;
|
|
86
79
|
}
|
|
87
|
-
|
|
88
80
|
this._clearTimeout();
|
|
89
|
-
|
|
90
81
|
if (this._config.animation) {
|
|
91
82
|
this._element.classList.add(CLASS_NAME_FADE);
|
|
92
83
|
}
|
|
93
|
-
|
|
94
84
|
const complete = () => {
|
|
95
85
|
this._element.classList.remove(CLASS_NAME_SHOWING);
|
|
96
|
-
|
|
97
|
-
EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
|
|
98
|
-
|
|
86
|
+
EventHandler.trigger(this._element, EVENT_SHOWN);
|
|
99
87
|
this._maybeScheduleHide();
|
|
100
88
|
};
|
|
101
|
-
|
|
102
89
|
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
index.reflow(this._element);
|
|
106
|
-
|
|
90
|
+
index_js.reflow(this._element);
|
|
107
91
|
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
|
|
108
|
-
|
|
109
92
|
this._queueCallback(complete, this._element, this._config.animation);
|
|
110
93
|
}
|
|
111
|
-
|
|
112
94
|
hide() {
|
|
113
95
|
if (!this.isShown()) {
|
|
114
96
|
return;
|
|
115
97
|
}
|
|
116
|
-
|
|
117
|
-
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
|
|
118
|
-
|
|
98
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
|
|
119
99
|
if (hideEvent.defaultPrevented) {
|
|
120
100
|
return;
|
|
121
101
|
}
|
|
122
|
-
|
|
123
102
|
const complete = () => {
|
|
124
103
|
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
|
|
125
|
-
|
|
126
|
-
|
|
127
104
|
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
|
|
128
|
-
|
|
129
|
-
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
|
|
105
|
+
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
|
130
106
|
};
|
|
131
|
-
|
|
132
107
|
this._element.classList.add(CLASS_NAME_SHOWING);
|
|
133
|
-
|
|
134
108
|
this._queueCallback(complete, this._element, this._config.animation);
|
|
135
109
|
}
|
|
136
|
-
|
|
137
110
|
dispose() {
|
|
138
111
|
this._clearTimeout();
|
|
139
|
-
|
|
140
112
|
if (this.isShown()) {
|
|
141
113
|
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
142
114
|
}
|
|
143
|
-
|
|
144
115
|
super.dispose();
|
|
145
116
|
}
|
|
146
|
-
|
|
147
117
|
isShown() {
|
|
148
118
|
return this._element.classList.contains(CLASS_NAME_SHOW);
|
|
149
|
-
}
|
|
119
|
+
}
|
|
150
120
|
|
|
121
|
+
// Private
|
|
151
122
|
|
|
152
123
|
_maybeScheduleHide() {
|
|
153
124
|
if (!this._config.autohide) {
|
|
154
125
|
return;
|
|
155
126
|
}
|
|
156
|
-
|
|
157
127
|
if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
|
|
158
128
|
return;
|
|
159
129
|
}
|
|
160
|
-
|
|
161
130
|
this._timeout = setTimeout(() => {
|
|
162
131
|
this.hide();
|
|
163
132
|
}, this._config.delay);
|
|
164
133
|
}
|
|
165
|
-
|
|
166
134
|
_onInteraction(event, isInteracting) {
|
|
167
135
|
switch (event.type) {
|
|
168
136
|
case 'mouseover':
|
|
@@ -171,7 +139,6 @@
|
|
|
171
139
|
this._hasMouseInteraction = isInteracting;
|
|
172
140
|
break;
|
|
173
141
|
}
|
|
174
|
-
|
|
175
142
|
case 'focusin':
|
|
176
143
|
case 'focusout':
|
|
177
144
|
{
|
|
@@ -179,61 +146,52 @@
|
|
|
179
146
|
break;
|
|
180
147
|
}
|
|
181
148
|
}
|
|
182
|
-
|
|
183
149
|
if (isInteracting) {
|
|
184
150
|
this._clearTimeout();
|
|
185
|
-
|
|
186
151
|
return;
|
|
187
152
|
}
|
|
188
|
-
|
|
189
153
|
const nextElement = event.relatedTarget;
|
|
190
|
-
|
|
191
154
|
if (this._element === nextElement || this._element.contains(nextElement)) {
|
|
192
155
|
return;
|
|
193
156
|
}
|
|
194
|
-
|
|
195
157
|
this._maybeScheduleHide();
|
|
196
158
|
}
|
|
197
|
-
|
|
198
159
|
_setListeners() {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
160
|
+
EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
|
|
161
|
+
EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
|
|
162
|
+
EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
|
|
163
|
+
EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
|
|
203
164
|
}
|
|
204
|
-
|
|
205
165
|
_clearTimeout() {
|
|
206
166
|
clearTimeout(this._timeout);
|
|
207
167
|
this._timeout = null;
|
|
208
|
-
}
|
|
209
|
-
|
|
168
|
+
}
|
|
210
169
|
|
|
170
|
+
// Static
|
|
211
171
|
static jQueryInterface(config) {
|
|
212
172
|
return this.each(function () {
|
|
213
173
|
const data = Toast.getOrCreateInstance(this, config);
|
|
214
|
-
|
|
215
174
|
if (typeof config === 'string') {
|
|
216
175
|
if (typeof data[config] === 'undefined') {
|
|
217
176
|
throw new TypeError(`No method named "${config}"`);
|
|
218
177
|
}
|
|
219
|
-
|
|
220
178
|
data[config](this);
|
|
221
179
|
}
|
|
222
180
|
});
|
|
223
181
|
}
|
|
224
|
-
|
|
225
182
|
}
|
|
183
|
+
|
|
226
184
|
/**
|
|
227
185
|
* Data API implementation
|
|
228
186
|
*/
|
|
229
187
|
|
|
188
|
+
componentFunctions_js.enableDismissTrigger(Toast);
|
|
230
189
|
|
|
231
|
-
componentFunctions.enableDismissTrigger(Toast);
|
|
232
190
|
/**
|
|
233
191
|
* jQuery
|
|
234
192
|
*/
|
|
235
193
|
|
|
236
|
-
|
|
194
|
+
index_js.defineJQueryPlugin(Toast);
|
|
237
195
|
|
|
238
196
|
return Toast;
|
|
239
197
|
|