bootstrap 5.0.2 → 5.1.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-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
|