bootstrap 5.0.2 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +7 -7
- data/assets/javascripts/bootstrap.js +590 -580
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/javascripts/bootstrap/alert.js +73 -43
- data/assets/javascripts/bootstrap/base-component.js +15 -10
- data/assets/javascripts/bootstrap/button.js +13 -6
- data/assets/javascripts/bootstrap/carousel.js +26 -8
- data/assets/javascripts/bootstrap/collapse.js +96 -114
- data/assets/javascripts/bootstrap/dom/data.js +2 -2
- data/assets/javascripts/bootstrap/dom/event-handler.js +9 -2
- data/assets/javascripts/bootstrap/dom/manipulator.js +4 -4
- data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -5
- data/assets/javascripts/bootstrap/dropdown.js +66 -74
- data/assets/javascripts/bootstrap/modal.js +198 -52
- data/assets/javascripts/bootstrap/offcanvas.js +177 -31
- data/assets/javascripts/bootstrap/popover.js +19 -52
- data/assets/javascripts/bootstrap/scrollspy.js +28 -47
- data/assets/javascripts/bootstrap/tab.js +27 -8
- data/assets/javascripts/bootstrap/toast.js +108 -13
- data/assets/javascripts/bootstrap/tooltip.js +57 -47
- data/assets/stylesheets/_bootstrap-grid.scss +1 -1
- data/assets/stylesheets/_bootstrap-reboot.scss +1 -1
- data/assets/stylesheets/_bootstrap.scss +2 -1
- data/assets/stylesheets/bootstrap/_card.scss +2 -1
- data/assets/stylesheets/bootstrap/_functions.scss +45 -12
- data/assets/stylesheets/bootstrap/_grid.scss +11 -0
- data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
- data/assets/stylesheets/bootstrap/_modal.scss +1 -11
- data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
- data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -0
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
- data/assets/stylesheets/bootstrap/_root.scss +39 -2
- data/assets/stylesheets/bootstrap/_toasts.scss +2 -2
- data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
- data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
- data/assets/stylesheets/bootstrap/_variables.scss +167 -6
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +1 -1
- data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +25 -7
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
- data/bootstrap.gemspec +3 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +6 -2
- metadata +11 -7
@@ -1,30 +1,28 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap scrollspy.js v5.0
|
2
|
+
* Bootstrap scrollspy.js v5.1.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('./dom/
|
8
|
-
typeof define === 'function' && define.amd ? define(['./dom/
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.
|
10
|
-
}(this, (function (
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(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/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
|
10
|
+
}(this, (function (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 SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
15
14
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
16
15
|
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
16
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
17
17
|
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
18
18
|
|
19
19
|
/**
|
20
20
|
* --------------------------------------------------------------------------
|
21
|
-
* Bootstrap (v5.0
|
21
|
+
* Bootstrap (v5.1.0): util/index.js
|
22
22
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
23
23
|
* --------------------------------------------------------------------------
|
24
24
|
*/
|
25
25
|
|
26
|
-
const MAX_UID = 1000000;
|
27
|
-
|
28
26
|
const toType = obj => {
|
29
27
|
if (obj === null || obj === undefined) {
|
30
28
|
return `${obj}`;
|
@@ -32,20 +30,6 @@
|
|
32
30
|
|
33
31
|
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
34
32
|
};
|
35
|
-
/**
|
36
|
-
* --------------------------------------------------------------------------
|
37
|
-
* Public Util Api
|
38
|
-
* --------------------------------------------------------------------------
|
39
|
-
*/
|
40
|
-
|
41
|
-
|
42
|
-
const getUID = prefix => {
|
43
|
-
do {
|
44
|
-
prefix += Math.floor(Math.random() * MAX_UID);
|
45
|
-
} while (document.getElementById(prefix));
|
46
|
-
|
47
|
-
return prefix;
|
48
|
-
};
|
49
33
|
|
50
34
|
const getSelector = element => {
|
51
35
|
let selector = element.getAttribute('data-bs-target');
|
@@ -93,6 +77,19 @@
|
|
93
77
|
return typeof obj.nodeType !== 'undefined';
|
94
78
|
};
|
95
79
|
|
80
|
+
const getElement = obj => {
|
81
|
+
if (isElement(obj)) {
|
82
|
+
// it's a jQuery object or a node element
|
83
|
+
return obj.jquery ? obj[0] : obj;
|
84
|
+
}
|
85
|
+
|
86
|
+
if (typeof obj === 'string' && obj.length > 0) {
|
87
|
+
return document.querySelector(obj);
|
88
|
+
}
|
89
|
+
|
90
|
+
return null;
|
91
|
+
};
|
92
|
+
|
96
93
|
const typeCheckConfig = (componentName, config, configTypes) => {
|
97
94
|
Object.keys(configTypes).forEach(property => {
|
98
95
|
const expectedTypes = configTypes[property];
|
@@ -155,7 +152,7 @@
|
|
155
152
|
|
156
153
|
/**
|
157
154
|
* --------------------------------------------------------------------------
|
158
|
-
* Bootstrap (v5.0
|
155
|
+
* Bootstrap (v5.1.0): scrollspy.js
|
159
156
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
160
157
|
* --------------------------------------------------------------------------
|
161
158
|
*/
|
@@ -189,6 +186,7 @@
|
|
189
186
|
const SELECTOR_NAV_LINKS = '.nav-link';
|
190
187
|
const SELECTOR_NAV_ITEMS = '.nav-item';
|
191
188
|
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
189
|
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
|
192
190
|
const SELECTOR_DROPDOWN = '.dropdown';
|
193
191
|
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
194
192
|
const METHOD_OFFSET = 'offset';
|
@@ -204,7 +202,6 @@
|
|
204
202
|
super(element);
|
205
203
|
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
|
206
204
|
this._config = this._getConfig(config);
|
207
|
-
this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
|
208
205
|
this._offsets = [];
|
209
206
|
this._targets = [];
|
210
207
|
this._activeTarget = null;
|
@@ -232,7 +229,7 @@
|
|
232
229
|
this._offsets = [];
|
233
230
|
this._targets = [];
|
234
231
|
this._scrollHeight = this._getScrollHeight();
|
235
|
-
const targets = SelectorEngine__default['default'].find(this.
|
232
|
+
const targets = SelectorEngine__default['default'].find(SELECTOR_LINK_ITEMS, this._config.target);
|
236
233
|
targets.map(element => {
|
237
234
|
const targetSelector = getSelectorFromElement(element);
|
238
235
|
const target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
|
@@ -264,20 +261,7 @@
|
|
264
261
|
...Manipulator__default['default'].getDataAttributes(this._element),
|
265
262
|
...(typeof config === 'object' && config ? config : {})
|
266
263
|
};
|
267
|
-
|
268
|
-
if (typeof config.target !== 'string' && isElement(config.target)) {
|
269
|
-
let {
|
270
|
-
id
|
271
|
-
} = config.target;
|
272
|
-
|
273
|
-
if (!id) {
|
274
|
-
id = getUID(NAME);
|
275
|
-
config.target.id = id;
|
276
|
-
}
|
277
|
-
|
278
|
-
config.target = `#${id}`;
|
279
|
-
}
|
280
|
-
|
264
|
+
config.target = getElement(config.target) || document.documentElement;
|
281
265
|
typeCheckConfig(NAME, config, DefaultType);
|
282
266
|
return config;
|
283
267
|
}
|
@@ -337,16 +321,13 @@
|
|
337
321
|
|
338
322
|
this._clear();
|
339
323
|
|
340
|
-
const queries =
|
341
|
-
|
342
|
-
|
324
|
+
const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
|
325
|
+
const link = SelectorEngine__default['default'].findOne(queries.join(','), this._config.target);
|
326
|
+
link.classList.add(CLASS_NAME_ACTIVE);
|
343
327
|
|
344
328
|
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
345
329
|
SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
|
346
|
-
link.classList.add(CLASS_NAME_ACTIVE);
|
347
330
|
} else {
|
348
|
-
// Set triggered link as active
|
349
|
-
link.classList.add(CLASS_NAME_ACTIVE);
|
350
331
|
SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
|
351
332
|
// Set triggered links parents as active
|
352
333
|
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
@@ -364,7 +345,7 @@
|
|
364
345
|
}
|
365
346
|
|
366
347
|
_clear() {
|
367
|
-
SelectorEngine__default['default'].find(this.
|
348
|
+
SelectorEngine__default['default'].find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
|
368
349
|
} // Static
|
369
350
|
|
370
351
|
|
@@ -1,20 +1,27 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap tab.js v5.0
|
2
|
+
* Bootstrap tab.js v5.1.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('./dom/
|
8
|
-
typeof define === 'function' && define.amd ? define(['./dom/
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.
|
10
|
-
}(this, (function (
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.EventHandler, global.SelectorEngine, global.Base));
|
10
|
+
}(this, (function (EventHandler, 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 SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
15
14
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
15
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
16
16
|
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
17
17
|
|
18
|
+
/**
|
19
|
+
* --------------------------------------------------------------------------
|
20
|
+
* Bootstrap (v5.1.0): util/index.js
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
22
|
+
* --------------------------------------------------------------------------
|
23
|
+
*/
|
24
|
+
|
18
25
|
const getSelector = element => {
|
19
26
|
let selector = element.getAttribute('data-bs-target');
|
20
27
|
|
@@ -59,8 +66,20 @@
|
|
59
66
|
|
60
67
|
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
61
68
|
};
|
69
|
+
/**
|
70
|
+
* Trick to restart an element's animation
|
71
|
+
*
|
72
|
+
* @param {HTMLElement} element
|
73
|
+
* @return void
|
74
|
+
*
|
75
|
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
76
|
+
*/
|
77
|
+
|
62
78
|
|
63
|
-
const reflow = element =>
|
79
|
+
const reflow = element => {
|
80
|
+
// eslint-disable-next-line no-unused-expressions
|
81
|
+
element.offsetHeight;
|
82
|
+
};
|
64
83
|
|
65
84
|
const getjQuery = () => {
|
66
85
|
const {
|
@@ -112,7 +131,7 @@
|
|
112
131
|
|
113
132
|
/**
|
114
133
|
* --------------------------------------------------------------------------
|
115
|
-
* Bootstrap (v5.0
|
134
|
+
* Bootstrap (v5.1.0): tab.js
|
116
135
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
117
136
|
* --------------------------------------------------------------------------
|
118
137
|
*/
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap toast.js v5.0
|
2
|
+
* Bootstrap toast.js v5.1.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
|
*/
|
@@ -15,6 +15,13 @@
|
|
15
15
|
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
16
16
|
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
17
17
|
|
18
|
+
/**
|
19
|
+
* --------------------------------------------------------------------------
|
20
|
+
* Bootstrap (v5.1.0): util/index.js
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
22
|
+
* --------------------------------------------------------------------------
|
23
|
+
*/
|
24
|
+
|
18
25
|
const toType = obj => {
|
19
26
|
if (obj === null || obj === undefined) {
|
20
27
|
return `${obj}`;
|
@@ -23,6 +30,35 @@
|
|
23
30
|
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
24
31
|
};
|
25
32
|
|
33
|
+
const getSelector = element => {
|
34
|
+
let selector = element.getAttribute('data-bs-target');
|
35
|
+
|
36
|
+
if (!selector || selector === '#') {
|
37
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
38
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
39
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
40
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
41
|
+
|
42
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
43
|
+
return null;
|
44
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
45
|
+
|
46
|
+
|
47
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
48
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
49
|
+
}
|
50
|
+
|
51
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
52
|
+
}
|
53
|
+
|
54
|
+
return selector;
|
55
|
+
};
|
56
|
+
|
57
|
+
const getElementFromSelector = element => {
|
58
|
+
const selector = getSelector(element);
|
59
|
+
return selector ? document.querySelector(selector) : null;
|
60
|
+
};
|
61
|
+
|
26
62
|
const isElement = obj => {
|
27
63
|
if (!obj || typeof obj !== 'object') {
|
28
64
|
return false;
|
@@ -47,7 +83,35 @@
|
|
47
83
|
});
|
48
84
|
};
|
49
85
|
|
50
|
-
const
|
86
|
+
const isDisabled = element => {
|
87
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
88
|
+
return true;
|
89
|
+
}
|
90
|
+
|
91
|
+
if (element.classList.contains('disabled')) {
|
92
|
+
return true;
|
93
|
+
}
|
94
|
+
|
95
|
+
if (typeof element.disabled !== 'undefined') {
|
96
|
+
return element.disabled;
|
97
|
+
}
|
98
|
+
|
99
|
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
100
|
+
};
|
101
|
+
/**
|
102
|
+
* Trick to restart an element's animation
|
103
|
+
*
|
104
|
+
* @param {HTMLElement} element
|
105
|
+
* @return void
|
106
|
+
*
|
107
|
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
108
|
+
*/
|
109
|
+
|
110
|
+
|
111
|
+
const reflow = element => {
|
112
|
+
// eslint-disable-next-line no-unused-expressions
|
113
|
+
element.offsetHeight;
|
114
|
+
};
|
51
115
|
|
52
116
|
const getjQuery = () => {
|
53
117
|
const {
|
@@ -99,7 +163,33 @@
|
|
99
163
|
|
100
164
|
/**
|
101
165
|
* --------------------------------------------------------------------------
|
102
|
-
* Bootstrap (v5.0
|
166
|
+
* Bootstrap (v5.1.0): util/component-functions.js
|
167
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
168
|
+
* --------------------------------------------------------------------------
|
169
|
+
*/
|
170
|
+
|
171
|
+
const enableDismissTrigger = (component, method = 'hide') => {
|
172
|
+
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
|
173
|
+
const name = component.NAME;
|
174
|
+
EventHandler__default['default'].on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
|
175
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
176
|
+
event.preventDefault();
|
177
|
+
}
|
178
|
+
|
179
|
+
if (isDisabled(this)) {
|
180
|
+
return;
|
181
|
+
}
|
182
|
+
|
183
|
+
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
184
|
+
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
185
|
+
|
186
|
+
instance[method]();
|
187
|
+
});
|
188
|
+
};
|
189
|
+
|
190
|
+
/**
|
191
|
+
* --------------------------------------------------------------------------
|
192
|
+
* Bootstrap (v5.1.0): toast.js
|
103
193
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
104
194
|
* --------------------------------------------------------------------------
|
105
195
|
*/
|
@@ -112,7 +202,6 @@
|
|
112
202
|
const NAME = 'toast';
|
113
203
|
const DATA_KEY = 'bs.toast';
|
114
204
|
const EVENT_KEY = `.${DATA_KEY}`;
|
115
|
-
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
116
205
|
const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
|
117
206
|
const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
|
118
207
|
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
|
@@ -122,7 +211,8 @@
|
|
122
211
|
const EVENT_SHOW = `show${EVENT_KEY}`;
|
123
212
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
124
213
|
const CLASS_NAME_FADE = 'fade';
|
125
|
-
const CLASS_NAME_HIDE = 'hide';
|
214
|
+
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
|
215
|
+
|
126
216
|
const CLASS_NAME_SHOW = 'show';
|
127
217
|
const CLASS_NAME_SHOWING = 'showing';
|
128
218
|
const DefaultType = {
|
@@ -135,7 +225,6 @@
|
|
135
225
|
autohide: true,
|
136
226
|
delay: 5000
|
137
227
|
};
|
138
|
-
const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="toast"]';
|
139
228
|
/**
|
140
229
|
* ------------------------------------------------------------------------
|
141
230
|
* Class Definition
|
@@ -183,17 +272,18 @@
|
|
183
272
|
const complete = () => {
|
184
273
|
this._element.classList.remove(CLASS_NAME_SHOWING);
|
185
274
|
|
186
|
-
this._element.classList.add(CLASS_NAME_SHOW);
|
187
|
-
|
188
275
|
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
|
189
276
|
|
190
277
|
this._maybeScheduleHide();
|
191
278
|
};
|
192
279
|
|
193
|
-
this._element.classList.remove(CLASS_NAME_HIDE);
|
280
|
+
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
|
281
|
+
|
194
282
|
|
195
283
|
reflow(this._element);
|
196
284
|
|
285
|
+
this._element.classList.add(CLASS_NAME_SHOW);
|
286
|
+
|
197
287
|
this._element.classList.add(CLASS_NAME_SHOWING);
|
198
288
|
|
199
289
|
this._queueCallback(complete, this._element, this._config.animation);
|
@@ -211,12 +301,17 @@
|
|
211
301
|
}
|
212
302
|
|
213
303
|
const complete = () => {
|
214
|
-
this._element.classList.add(CLASS_NAME_HIDE);
|
304
|
+
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
|
305
|
+
|
306
|
+
|
307
|
+
this._element.classList.remove(CLASS_NAME_SHOWING);
|
308
|
+
|
309
|
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
215
310
|
|
216
311
|
EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
|
217
312
|
};
|
218
313
|
|
219
|
-
this._element.classList.
|
314
|
+
this._element.classList.add(CLASS_NAME_SHOWING);
|
220
315
|
|
221
316
|
this._queueCallback(complete, this._element, this._config.animation);
|
222
317
|
}
|
@@ -284,7 +379,6 @@
|
|
284
379
|
}
|
285
380
|
|
286
381
|
_setListeners() {
|
287
|
-
EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
|
288
382
|
EventHandler__default['default'].on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
|
289
383
|
EventHandler__default['default'].on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
|
290
384
|
EventHandler__default['default'].on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
|
@@ -312,6 +406,8 @@
|
|
312
406
|
}
|
313
407
|
|
314
408
|
}
|
409
|
+
|
410
|
+
enableDismissTrigger(Toast);
|
315
411
|
/**
|
316
412
|
* ------------------------------------------------------------------------
|
317
413
|
* jQuery
|
@@ -319,7 +415,6 @@
|
|
319
415
|
* add .Toast to jQuery only if jQuery is present
|
320
416
|
*/
|
321
417
|
|
322
|
-
|
323
418
|
defineJQueryPlugin(Toast);
|
324
419
|
|
325
420
|
return Toast;
|
@@ -1,13 +1,13 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap tooltip.js v5.0
|
2
|
+
* Bootstrap tooltip.js v5.1.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('@popperjs/core'), require('./dom/
|
8
|
-
typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global.Popper, global.
|
10
|
-
}(this, (function (Popper,
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), 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(['@popperjs/core', './dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global.Popper, global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
|
10
|
+
}(this, (function (Popper, 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
|
|
@@ -32,19 +32,18 @@
|
|
32
32
|
}
|
33
33
|
|
34
34
|
var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
|
35
|
-
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
36
35
|
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
37
36
|
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
38
37
|
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
38
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
39
39
|
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
40
40
|
|
41
41
|
/**
|
42
42
|
* --------------------------------------------------------------------------
|
43
|
-
* Bootstrap (v5.0
|
43
|
+
* Bootstrap (v5.1.0): util/index.js
|
44
44
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
45
45
|
* --------------------------------------------------------------------------
|
46
46
|
*/
|
47
|
-
|
48
47
|
const MAX_UID = 1000000;
|
49
48
|
|
50
49
|
const toType = obj => {
|
@@ -88,7 +87,7 @@
|
|
88
87
|
}
|
89
88
|
|
90
89
|
if (typeof obj === 'string' && obj.length > 0) {
|
91
|
-
return
|
90
|
+
return document.querySelector(obj);
|
92
91
|
}
|
93
92
|
|
94
93
|
return null;
|
@@ -183,7 +182,7 @@
|
|
183
182
|
|
184
183
|
/**
|
185
184
|
* --------------------------------------------------------------------------
|
186
|
-
* Bootstrap (v5.0
|
185
|
+
* Bootstrap (v5.1.0): util/sanitizer.js
|
187
186
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
188
187
|
* --------------------------------------------------------------------------
|
189
188
|
*/
|
@@ -296,7 +295,7 @@
|
|
296
295
|
|
297
296
|
/**
|
298
297
|
* --------------------------------------------------------------------------
|
299
|
-
* Bootstrap (v5.0
|
298
|
+
* Bootstrap (v5.1.0): tooltip.js
|
300
299
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
301
300
|
* --------------------------------------------------------------------------
|
302
301
|
*/
|
@@ -310,7 +309,6 @@
|
|
310
309
|
const DATA_KEY = 'bs.tooltip';
|
311
310
|
const EVENT_KEY = `.${DATA_KEY}`;
|
312
311
|
const CLASS_PREFIX = 'bs-tooltip';
|
313
|
-
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
|
314
312
|
const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
|
315
313
|
const DefaultType = {
|
316
314
|
animation: 'boolean',
|
@@ -375,6 +373,8 @@
|
|
375
373
|
const HOVER_STATE_SHOW = 'show';
|
376
374
|
const HOVER_STATE_OUT = 'out';
|
377
375
|
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
|
376
|
+
const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
|
377
|
+
const EVENT_MODAL_HIDE = 'hide.bs.modal';
|
378
378
|
const TRIGGER_HOVER = 'hover';
|
379
379
|
const TRIGGER_FOCUS = 'focus';
|
380
380
|
const TRIGGER_CLICK = 'click';
|
@@ -463,7 +463,7 @@
|
|
463
463
|
|
464
464
|
dispose() {
|
465
465
|
clearTimeout(this._timeout);
|
466
|
-
EventHandler__default['default'].off(this._element.closest(
|
466
|
+
EventHandler__default['default'].off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
467
467
|
|
468
468
|
if (this.tip) {
|
469
469
|
this.tip.remove();
|
@@ -499,8 +499,6 @@
|
|
499
499
|
|
500
500
|
this._element.setAttribute('aria-describedby', tipId);
|
501
501
|
|
502
|
-
this.setContent();
|
503
|
-
|
504
502
|
if (this._config.animation) {
|
505
503
|
tip.classList.add(CLASS_NAME_FADE);
|
506
504
|
}
|
@@ -517,7 +515,7 @@
|
|
517
515
|
Data__default['default'].set(tip, this.constructor.DATA_KEY, this);
|
518
516
|
|
519
517
|
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
|
520
|
-
container.
|
518
|
+
container.append(tip);
|
521
519
|
EventHandler__default['default'].trigger(this._element, this.constructor.Event.INSERTED);
|
522
520
|
}
|
523
521
|
|
@@ -528,7 +526,8 @@
|
|
528
526
|
}
|
529
527
|
|
530
528
|
tip.classList.add(CLASS_NAME_SHOW);
|
531
|
-
|
529
|
+
|
530
|
+
const customClass = this._resolvePossibleFunction(this._config.customClass);
|
532
531
|
|
533
532
|
if (customClass) {
|
534
533
|
tip.classList.add(...customClass.split(' '));
|
@@ -629,14 +628,27 @@
|
|
629
628
|
|
630
629
|
const element = document.createElement('div');
|
631
630
|
element.innerHTML = this._config.template;
|
632
|
-
|
631
|
+
const tip = element.children[0];
|
632
|
+
this.setContent(tip);
|
633
|
+
tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
|
634
|
+
this.tip = tip;
|
633
635
|
return this.tip;
|
634
636
|
}
|
635
637
|
|
636
|
-
setContent() {
|
637
|
-
|
638
|
-
|
639
|
-
|
638
|
+
setContent(tip) {
|
639
|
+
this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
|
640
|
+
}
|
641
|
+
|
642
|
+
_sanitizeAndSetContent(template, content, selector) {
|
643
|
+
const templateElement = SelectorEngine__default['default'].findOne(selector, template);
|
644
|
+
|
645
|
+
if (!content && templateElement) {
|
646
|
+
templateElement.remove();
|
647
|
+
return;
|
648
|
+
} // we use append for html objects to maintain js events
|
649
|
+
|
650
|
+
|
651
|
+
this.setElementContent(templateElement, content);
|
640
652
|
}
|
641
653
|
|
642
654
|
setElementContent(element, content) {
|
@@ -650,7 +662,7 @@
|
|
650
662
|
if (this._config.html) {
|
651
663
|
if (content.parentNode !== element) {
|
652
664
|
element.innerHTML = '';
|
653
|
-
element.
|
665
|
+
element.append(content);
|
654
666
|
}
|
655
667
|
} else {
|
656
668
|
element.textContent = content.textContent;
|
@@ -671,13 +683,9 @@
|
|
671
683
|
}
|
672
684
|
|
673
685
|
getTitle() {
|
674
|
-
|
675
|
-
|
676
|
-
if (!title) {
|
677
|
-
title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;
|
678
|
-
}
|
686
|
+
const title = this._element.getAttribute('data-bs-original-title') || this._config.title;
|
679
687
|
|
680
|
-
return title;
|
688
|
+
return this._resolvePossibleFunction(title);
|
681
689
|
}
|
682
690
|
|
683
691
|
updateAttachment(attachment) {
|
@@ -694,15 +702,7 @@
|
|
694
702
|
|
695
703
|
|
696
704
|
_initializeOnDelegatedTarget(event, context) {
|
697
|
-
|
698
|
-
context = context || Data__default['default'].get(event.delegateTarget, dataKey);
|
699
|
-
|
700
|
-
if (!context) {
|
701
|
-
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
|
702
|
-
Data__default['default'].set(event.delegateTarget, dataKey, context);
|
703
|
-
}
|
704
|
-
|
705
|
-
return context;
|
705
|
+
return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
|
706
706
|
}
|
707
707
|
|
708
708
|
_getOffset() {
|
@@ -721,6 +721,10 @@
|
|
721
721
|
return offset;
|
722
722
|
}
|
723
723
|
|
724
|
+
_resolvePossibleFunction(content) {
|
725
|
+
return typeof content === 'function' ? content.call(this._element) : content;
|
726
|
+
}
|
727
|
+
|
724
728
|
_getPopperConfig(attachment) {
|
725
729
|
const defaultBsPopperConfig = {
|
726
730
|
placement: attachment,
|
@@ -762,7 +766,7 @@
|
|
762
766
|
}
|
763
767
|
|
764
768
|
_addAttachmentClass(attachment) {
|
765
|
-
this.getTipElement().classList.add(`${
|
769
|
+
this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
|
766
770
|
}
|
767
771
|
|
768
772
|
_getAttachment(placement) {
|
@@ -789,7 +793,7 @@
|
|
789
793
|
}
|
790
794
|
};
|
791
795
|
|
792
|
-
EventHandler__default['default'].on(this._element.closest(
|
796
|
+
EventHandler__default['default'].on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
793
797
|
|
794
798
|
if (this._config.selector) {
|
795
799
|
this._config = { ...this._config,
|
@@ -920,26 +924,32 @@
|
|
920
924
|
_getDelegateConfig() {
|
921
925
|
const config = {};
|
922
926
|
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
config[key] = this._config[key];
|
927
|
-
}
|
927
|
+
for (const key in this._config) {
|
928
|
+
if (this.constructor.Default[key] !== this._config[key]) {
|
929
|
+
config[key] = this._config[key];
|
928
930
|
}
|
929
|
-
}
|
931
|
+
} // In the future can be replaced with:
|
932
|
+
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
|
933
|
+
// `Object.fromEntries(keysWithDifferentValues)`
|
934
|
+
|
930
935
|
|
931
936
|
return config;
|
932
937
|
}
|
933
938
|
|
934
939
|
_cleanTipClass() {
|
935
940
|
const tip = this.getTipElement();
|
936
|
-
const
|
941
|
+
const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
|
942
|
+
const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
|
937
943
|
|
938
944
|
if (tabClass !== null && tabClass.length > 0) {
|
939
945
|
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
940
946
|
}
|
941
947
|
}
|
942
948
|
|
949
|
+
_getBasicClassPrefix() {
|
950
|
+
return CLASS_PREFIX;
|
951
|
+
}
|
952
|
+
|
943
953
|
_handlePopperPlacementChange(popperData) {
|
944
954
|
const {
|
945
955
|
state
|