bootstrap 5.2.2 → 5.3.0.alpha3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +55 -0
- data/README.md +2 -2
- data/assets/javascripts/bootstrap/alert.js +21 -32
- data/assets/javascripts/bootstrap/base-component.js +21 -38
- data/assets/javascripts/bootstrap/button.js +18 -22
- data/assets/javascripts/bootstrap/carousel.js +51 -135
- data/assets/javascripts/bootstrap/collapse.js +39 -102
- data/assets/javascripts/bootstrap/dom/data.js +8 -12
- data/assets/javascripts/bootstrap/dom/event-handler.js +18 -66
- data/assets/javascripts/bootstrap/dom/manipulator.js +4 -17
- data/assets/javascripts/bootstrap/dom/selector-engine.js +41 -24
- data/assets/javascripts/bootstrap/dropdown.js +73 -145
- data/assets/javascripts/bootstrap/modal.js +52 -133
- data/assets/javascripts/bootstrap/offcanvas.js +49 -102
- data/assets/javascripts/bootstrap/popover.js +22 -29
- data/assets/javascripts/bootstrap/scrollspy.js +51 -89
- data/assets/javascripts/bootstrap/tab.js +51 -109
- data/assets/javascripts/bootstrap/toast.js +30 -73
- data/assets/javascripts/bootstrap/tooltip.js +79 -191
- data/assets/javascripts/bootstrap/util/backdrop.js +27 -54
- data/assets/javascripts/bootstrap/util/component-functions.js +13 -19
- data/assets/javascripts/bootstrap/util/config.js +14 -27
- data/assets/javascripts/bootstrap/util/focustrap.js +19 -36
- data/assets/javascripts/bootstrap/util/index.js +42 -111
- data/assets/javascripts/bootstrap/util/sanitizer.js +13 -19
- data/assets/javascripts/bootstrap/util/scrollbar.js +23 -50
- data/assets/javascripts/bootstrap/util/swipe.js +26 -48
- data/assets/javascripts/bootstrap/util/template-factory.js +24 -52
- data/assets/javascripts/bootstrap-sprockets.js +11 -11
- data/assets/javascripts/bootstrap.js +631 -1420
- 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 -5
- data/assets/stylesheets/bootstrap/_close.scss +32 -9
- data/assets/stylesheets/bootstrap/_dropdown.scss +1 -0
- data/assets/stylesheets/bootstrap/_functions.scss +2 -2
- 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 +13 -3
- 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 +125 -10
- data/assets/stylesheets/bootstrap/_tables.scss +1 -1
- 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 +260 -151
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +4 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +21 -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/_colored-links.scss +22 -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/network.rb +2 -2
- data/tasks/updater/scss.rb +1 -1
- data/test/gemfiles/rails_5_2.gemfile +8 -0
- data/test/gemfiles/rails_7_0.gemfile +7 -0
- data/test/test_helper.rb +3 -2
- metadata +15 -7
- data/.travis.yml +0 -32
@@ -1,18 +1,15 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap tooltip.js v5.
|
3
|
-
* Copyright 2011-
|
2
|
+
* Bootstrap tooltip.js v5.3.0-alpha3 (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('@popperjs/core'), require('./
|
8
|
-
typeof define === 'function' && define.amd ? define(['@popperjs/core', './
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global["@popperjs/core"], global.
|
10
|
-
})(this, (function (Popper,
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./util/index.js'), require('./util/sanitizer.js'), require('./util/template-factory.js')) :
|
8
|
+
typeof define === 'function' && define.amd ? define(['@popperjs/core', './base-component', './dom/event-handler', './dom/manipulator', './util/index', './util/sanitizer', './util/template-factory'], factory) :
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global["@popperjs/core"], global.BaseComponent, global.EventHandler, global.Manipulator, global.Index, global.Sanitizer, global.TemplateFactory));
|
10
|
+
})(this, (function (Popper, BaseComponent, EventHandler, Manipulator, index_js, sanitizer_js, TemplateFactory) { 'use strict';
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
function _interopNamespace(e) {
|
15
|
-
if (e && e.__esModule) return e;
|
12
|
+
function _interopNamespaceDefault(e) {
|
16
13
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
|
17
14
|
if (e) {
|
18
15
|
for (const k in e) {
|
@@ -29,18 +26,15 @@
|
|
29
26
|
return Object.freeze(n);
|
30
27
|
}
|
31
28
|
|
32
|
-
const Popper__namespace = /*#__PURE__*/
|
33
|
-
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
34
|
-
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
35
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
36
|
-
const TemplateFactory__default = /*#__PURE__*/_interopDefaultLegacy(TemplateFactory);
|
29
|
+
const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
|
37
30
|
|
38
31
|
/**
|
39
32
|
* --------------------------------------------------------------------------
|
40
|
-
* Bootstrap
|
33
|
+
* Bootstrap tooltip.js
|
41
34
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
42
35
|
* --------------------------------------------------------------------------
|
43
36
|
*/
|
37
|
+
|
44
38
|
/**
|
45
39
|
* Constants
|
46
40
|
*/
|
@@ -70,12 +64,12 @@
|
|
70
64
|
const AttachmentMap = {
|
71
65
|
AUTO: 'auto',
|
72
66
|
TOP: 'top',
|
73
|
-
RIGHT:
|
67
|
+
RIGHT: index_js.isRTL() ? 'left' : 'right',
|
74
68
|
BOTTOM: 'bottom',
|
75
|
-
LEFT:
|
69
|
+
LEFT: index_js.isRTL() ? 'right' : 'left'
|
76
70
|
};
|
77
71
|
const Default = {
|
78
|
-
allowList:
|
72
|
+
allowList: sanitizer_js.DefaultAllowlist,
|
79
73
|
animation: true,
|
80
74
|
boundary: 'clippingParents',
|
81
75
|
container: false,
|
@@ -83,7 +77,7 @@
|
|
83
77
|
delay: 0,
|
84
78
|
fallbackPlacements: ['top', 'right', 'bottom', 'left'],
|
85
79
|
html: false,
|
86
|
-
offset: [0,
|
80
|
+
offset: [0, 6],
|
87
81
|
placement: 'top',
|
88
82
|
popperConfig: null,
|
89
83
|
sanitize: true,
|
@@ -112,183 +106,140 @@
|
|
112
106
|
title: '(string|element|function)',
|
113
107
|
trigger: 'string'
|
114
108
|
};
|
109
|
+
|
115
110
|
/**
|
116
111
|
* Class definition
|
117
112
|
*/
|
118
113
|
|
119
|
-
class Tooltip extends
|
114
|
+
class Tooltip extends BaseComponent {
|
120
115
|
constructor(element, config) {
|
121
116
|
if (typeof Popper__namespace === 'undefined') {
|
122
117
|
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
|
123
118
|
}
|
119
|
+
super(element, config);
|
124
120
|
|
125
|
-
|
126
|
-
|
121
|
+
// Private
|
127
122
|
this._isEnabled = true;
|
128
123
|
this._timeout = 0;
|
129
124
|
this._isHovered = null;
|
130
125
|
this._activeTrigger = {};
|
131
126
|
this._popper = null;
|
132
127
|
this._templateFactory = null;
|
133
|
-
this._newContent = null;
|
128
|
+
this._newContent = null;
|
134
129
|
|
130
|
+
// Protected
|
135
131
|
this.tip = null;
|
136
|
-
|
137
132
|
this._setListeners();
|
138
|
-
|
139
133
|
if (!this._config.selector) {
|
140
134
|
this._fixTitle();
|
141
135
|
}
|
142
|
-
}
|
143
|
-
|
136
|
+
}
|
144
137
|
|
138
|
+
// Getters
|
145
139
|
static get Default() {
|
146
140
|
return Default;
|
147
141
|
}
|
148
|
-
|
149
142
|
static get DefaultType() {
|
150
143
|
return DefaultType;
|
151
144
|
}
|
152
|
-
|
153
145
|
static get NAME() {
|
154
146
|
return NAME;
|
155
|
-
}
|
156
|
-
|
147
|
+
}
|
157
148
|
|
149
|
+
// Public
|
158
150
|
enable() {
|
159
151
|
this._isEnabled = true;
|
160
152
|
}
|
161
|
-
|
162
153
|
disable() {
|
163
154
|
this._isEnabled = false;
|
164
155
|
}
|
165
|
-
|
166
156
|
toggleEnabled() {
|
167
157
|
this._isEnabled = !this._isEnabled;
|
168
158
|
}
|
169
|
-
|
170
159
|
toggle() {
|
171
160
|
if (!this._isEnabled) {
|
172
161
|
return;
|
173
162
|
}
|
174
|
-
|
175
163
|
this._activeTrigger.click = !this._activeTrigger.click;
|
176
|
-
|
177
164
|
if (this._isShown()) {
|
178
165
|
this._leave();
|
179
|
-
|
180
166
|
return;
|
181
167
|
}
|
182
|
-
|
183
168
|
this._enter();
|
184
169
|
}
|
185
|
-
|
186
170
|
dispose() {
|
187
171
|
clearTimeout(this._timeout);
|
188
|
-
|
189
|
-
|
190
|
-
if (this.tip) {
|
191
|
-
this.tip.remove();
|
192
|
-
}
|
193
|
-
|
172
|
+
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
194
173
|
if (this._element.getAttribute('data-bs-original-title')) {
|
195
174
|
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
|
196
175
|
}
|
197
|
-
|
198
176
|
this._disposePopper();
|
199
|
-
|
200
177
|
super.dispose();
|
201
178
|
}
|
202
|
-
|
203
179
|
show() {
|
204
180
|
if (this._element.style.display === 'none') {
|
205
181
|
throw new Error('Please use show on visible elements');
|
206
182
|
}
|
207
|
-
|
208
183
|
if (!(this._isWithContent() && this._isEnabled)) {
|
209
184
|
return;
|
210
185
|
}
|
211
|
-
|
212
|
-
const
|
213
|
-
const shadowRoot = index.findShadowRoot(this._element);
|
214
|
-
|
186
|
+
const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));
|
187
|
+
const shadowRoot = index_js.findShadowRoot(this._element);
|
215
188
|
const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
|
216
|
-
|
217
189
|
if (showEvent.defaultPrevented || !isInTheDom) {
|
218
190
|
return;
|
219
|
-
} // todo v6 remove this OR make it optional
|
220
|
-
|
221
|
-
|
222
|
-
if (this.tip) {
|
223
|
-
this.tip.remove();
|
224
|
-
this.tip = null;
|
225
191
|
}
|
226
192
|
|
193
|
+
// TODO: v6 remove this or make it optional
|
194
|
+
this._disposePopper();
|
227
195
|
const tip = this._getTipElement();
|
228
|
-
|
229
196
|
this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
|
230
|
-
|
231
197
|
const {
|
232
198
|
container
|
233
199
|
} = this._config;
|
234
|
-
|
235
200
|
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
|
236
201
|
container.append(tip);
|
237
|
-
|
238
|
-
}
|
239
|
-
|
240
|
-
if (this._popper) {
|
241
|
-
this._popper.update();
|
242
|
-
} else {
|
243
|
-
this._popper = this._createPopper(tip);
|
202
|
+
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
|
244
203
|
}
|
204
|
+
this._popper = this._createPopper(tip);
|
205
|
+
tip.classList.add(CLASS_NAME_SHOW);
|
245
206
|
|
246
|
-
|
207
|
+
// If this is a touch-enabled device we add extra
|
247
208
|
// empty mouseover listeners to the body's immediate children;
|
248
209
|
// only needed because of broken event delegation on iOS
|
249
210
|
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
250
|
-
|
251
211
|
if ('ontouchstart' in document.documentElement) {
|
252
212
|
for (const element of [].concat(...document.body.children)) {
|
253
|
-
|
213
|
+
EventHandler.on(element, 'mouseover', index_js.noop);
|
254
214
|
}
|
255
215
|
}
|
256
|
-
|
257
216
|
const complete = () => {
|
258
|
-
|
259
|
-
|
217
|
+
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));
|
260
218
|
if (this._isHovered === false) {
|
261
219
|
this._leave();
|
262
220
|
}
|
263
|
-
|
264
221
|
this._isHovered = false;
|
265
222
|
};
|
266
|
-
|
267
223
|
this._queueCallback(complete, this.tip, this._isAnimated());
|
268
224
|
}
|
269
|
-
|
270
225
|
hide() {
|
271
226
|
if (!this._isShown()) {
|
272
227
|
return;
|
273
228
|
}
|
274
|
-
|
275
|
-
const hideEvent = EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_HIDE));
|
276
|
-
|
229
|
+
const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));
|
277
230
|
if (hideEvent.defaultPrevented) {
|
278
231
|
return;
|
279
232
|
}
|
280
|
-
|
281
233
|
const tip = this._getTipElement();
|
234
|
+
tip.classList.remove(CLASS_NAME_SHOW);
|
282
235
|
|
283
|
-
|
236
|
+
// If this is a touch-enabled device we remove the extra
|
284
237
|
// empty mouseover listeners we added for iOS support
|
285
|
-
|
286
238
|
if ('ontouchstart' in document.documentElement) {
|
287
239
|
for (const element of [].concat(...document.body.children)) {
|
288
|
-
|
240
|
+
EventHandler.off(element, 'mouseover', index_js.noop);
|
289
241
|
}
|
290
242
|
}
|
291
|
-
|
292
243
|
this._activeTrigger[TRIGGER_CLICK] = false;
|
293
244
|
this._activeTrigger[TRIGGER_FOCUS] = false;
|
294
245
|
this._activeTrigger[TRIGGER_HOVER] = false;
|
@@ -298,135 +249,107 @@
|
|
298
249
|
if (this._isWithActiveTrigger()) {
|
299
250
|
return;
|
300
251
|
}
|
301
|
-
|
302
252
|
if (!this._isHovered) {
|
303
|
-
|
253
|
+
this._disposePopper();
|
304
254
|
}
|
305
|
-
|
306
255
|
this._element.removeAttribute('aria-describedby');
|
307
|
-
|
308
|
-
EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));
|
309
|
-
|
310
|
-
this._disposePopper();
|
256
|
+
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));
|
311
257
|
};
|
312
|
-
|
313
258
|
this._queueCallback(complete, this.tip, this._isAnimated());
|
314
259
|
}
|
315
|
-
|
316
260
|
update() {
|
317
261
|
if (this._popper) {
|
318
262
|
this._popper.update();
|
319
263
|
}
|
320
|
-
}
|
321
|
-
|
264
|
+
}
|
322
265
|
|
266
|
+
// Protected
|
323
267
|
_isWithContent() {
|
324
268
|
return Boolean(this._getTitle());
|
325
269
|
}
|
326
|
-
|
327
270
|
_getTipElement() {
|
328
271
|
if (!this.tip) {
|
329
272
|
this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
|
330
273
|
}
|
331
|
-
|
332
274
|
return this.tip;
|
333
275
|
}
|
334
|
-
|
335
276
|
_createTipElement(content) {
|
336
|
-
const tip = this._getTemplateFactory(content).toHtml();
|
337
|
-
|
277
|
+
const tip = this._getTemplateFactory(content).toHtml();
|
338
278
|
|
279
|
+
// TODO: remove this check in v6
|
339
280
|
if (!tip) {
|
340
281
|
return null;
|
341
282
|
}
|
342
|
-
|
343
|
-
|
344
|
-
|
283
|
+
tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
|
284
|
+
// TODO: v6 the following can be achieved with CSS only
|
345
285
|
tip.classList.add(`bs-${this.constructor.NAME}-auto`);
|
346
|
-
const tipId =
|
286
|
+
const tipId = index_js.getUID(this.constructor.NAME).toString();
|
347
287
|
tip.setAttribute('id', tipId);
|
348
|
-
|
349
288
|
if (this._isAnimated()) {
|
350
289
|
tip.classList.add(CLASS_NAME_FADE);
|
351
290
|
}
|
352
|
-
|
353
291
|
return tip;
|
354
292
|
}
|
355
|
-
|
356
293
|
setContent(content) {
|
357
294
|
this._newContent = content;
|
358
|
-
|
359
295
|
if (this._isShown()) {
|
360
296
|
this._disposePopper();
|
361
|
-
|
362
297
|
this.show();
|
363
298
|
}
|
364
299
|
}
|
365
|
-
|
366
300
|
_getTemplateFactory(content) {
|
367
301
|
if (this._templateFactory) {
|
368
302
|
this._templateFactory.changeContent(content);
|
369
303
|
} else {
|
370
|
-
this._templateFactory = new
|
304
|
+
this._templateFactory = new TemplateFactory({
|
305
|
+
...this._config,
|
371
306
|
// the `content` var has to be after `this._config`
|
372
307
|
// to override config.content in case of popover
|
373
308
|
content,
|
374
309
|
extraClass: this._resolvePossibleFunction(this._config.customClass)
|
375
310
|
});
|
376
311
|
}
|
377
|
-
|
378
312
|
return this._templateFactory;
|
379
313
|
}
|
380
|
-
|
381
314
|
_getContentForTemplate() {
|
382
315
|
return {
|
383
316
|
[SELECTOR_TOOLTIP_INNER]: this._getTitle()
|
384
317
|
};
|
385
318
|
}
|
386
|
-
|
387
319
|
_getTitle() {
|
388
320
|
return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
|
389
|
-
}
|
390
|
-
|
321
|
+
}
|
391
322
|
|
323
|
+
// Private
|
392
324
|
_initializeOnDelegatedTarget(event) {
|
393
325
|
return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
|
394
326
|
}
|
395
|
-
|
396
327
|
_isAnimated() {
|
397
328
|
return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE);
|
398
329
|
}
|
399
|
-
|
400
330
|
_isShown() {
|
401
331
|
return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);
|
402
332
|
}
|
403
|
-
|
404
333
|
_createPopper(tip) {
|
405
|
-
const placement =
|
334
|
+
const placement = index_js.execute(this._config.placement, [this, tip, this._element]);
|
406
335
|
const attachment = AttachmentMap[placement.toUpperCase()];
|
407
336
|
return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
|
408
337
|
}
|
409
|
-
|
410
338
|
_getOffset() {
|
411
339
|
const {
|
412
340
|
offset
|
413
341
|
} = this._config;
|
414
|
-
|
415
342
|
if (typeof offset === 'string') {
|
416
343
|
return offset.split(',').map(value => Number.parseInt(value, 10));
|
417
344
|
}
|
418
|
-
|
419
345
|
if (typeof offset === 'function') {
|
420
346
|
return popperData => offset(popperData, this._element);
|
421
347
|
}
|
422
|
-
|
423
348
|
return offset;
|
424
349
|
}
|
425
|
-
|
426
350
|
_resolvePossibleFunction(arg) {
|
427
|
-
return
|
351
|
+
return index_js.execute(arg, [this._element]);
|
428
352
|
}
|
429
|
-
|
430
353
|
_getPopperConfig(attachment) {
|
431
354
|
const defaultBsPopperConfig = {
|
432
355
|
placement: attachment,
|
@@ -461,195 +384,160 @@
|
|
461
384
|
}
|
462
385
|
}]
|
463
386
|
};
|
464
|
-
return {
|
465
|
-
...
|
387
|
+
return {
|
388
|
+
...defaultBsPopperConfig,
|
389
|
+
...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])
|
466
390
|
};
|
467
391
|
}
|
468
|
-
|
469
392
|
_setListeners() {
|
470
393
|
const triggers = this._config.trigger.split(' ');
|
471
|
-
|
472
394
|
for (const trigger of triggers) {
|
473
395
|
if (trigger === 'click') {
|
474
|
-
|
396
|
+
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {
|
475
397
|
const context = this._initializeOnDelegatedTarget(event);
|
476
|
-
|
477
398
|
context.toggle();
|
478
399
|
});
|
479
400
|
} else if (trigger !== TRIGGER_MANUAL) {
|
480
401
|
const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN);
|
481
402
|
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT);
|
482
|
-
|
403
|
+
EventHandler.on(this._element, eventIn, this._config.selector, event => {
|
483
404
|
const context = this._initializeOnDelegatedTarget(event);
|
484
|
-
|
485
405
|
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
|
486
|
-
|
487
406
|
context._enter();
|
488
407
|
});
|
489
|
-
|
408
|
+
EventHandler.on(this._element, eventOut, this._config.selector, event => {
|
490
409
|
const context = this._initializeOnDelegatedTarget(event);
|
491
|
-
|
492
410
|
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
|
493
|
-
|
494
411
|
context._leave();
|
495
412
|
});
|
496
413
|
}
|
497
414
|
}
|
498
|
-
|
499
415
|
this._hideModalHandler = () => {
|
500
416
|
if (this._element) {
|
501
417
|
this.hide();
|
502
418
|
}
|
503
419
|
};
|
504
|
-
|
505
|
-
EventHandler__default.default.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
420
|
+
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
506
421
|
}
|
507
|
-
|
508
422
|
_fixTitle() {
|
509
423
|
const title = this._element.getAttribute('title');
|
510
|
-
|
511
424
|
if (!title) {
|
512
425
|
return;
|
513
426
|
}
|
514
|
-
|
515
427
|
if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
|
516
428
|
this._element.setAttribute('aria-label', title);
|
517
429
|
}
|
518
|
-
|
519
430
|
this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
|
520
|
-
|
521
|
-
|
522
431
|
this._element.removeAttribute('title');
|
523
432
|
}
|
524
|
-
|
525
433
|
_enter() {
|
526
434
|
if (this._isShown() || this._isHovered) {
|
527
435
|
this._isHovered = true;
|
528
436
|
return;
|
529
437
|
}
|
530
|
-
|
531
438
|
this._isHovered = true;
|
532
|
-
|
533
439
|
this._setTimeout(() => {
|
534
440
|
if (this._isHovered) {
|
535
441
|
this.show();
|
536
442
|
}
|
537
443
|
}, this._config.delay.show);
|
538
444
|
}
|
539
|
-
|
540
445
|
_leave() {
|
541
446
|
if (this._isWithActiveTrigger()) {
|
542
447
|
return;
|
543
448
|
}
|
544
|
-
|
545
449
|
this._isHovered = false;
|
546
|
-
|
547
450
|
this._setTimeout(() => {
|
548
451
|
if (!this._isHovered) {
|
549
452
|
this.hide();
|
550
453
|
}
|
551
454
|
}, this._config.delay.hide);
|
552
455
|
}
|
553
|
-
|
554
456
|
_setTimeout(handler, timeout) {
|
555
457
|
clearTimeout(this._timeout);
|
556
458
|
this._timeout = setTimeout(handler, timeout);
|
557
459
|
}
|
558
|
-
|
559
460
|
_isWithActiveTrigger() {
|
560
461
|
return Object.values(this._activeTrigger).includes(true);
|
561
462
|
}
|
562
|
-
|
563
463
|
_getConfig(config) {
|
564
|
-
const dataAttributes =
|
565
|
-
|
464
|
+
const dataAttributes = Manipulator.getDataAttributes(this._element);
|
566
465
|
for (const dataAttribute of Object.keys(dataAttributes)) {
|
567
466
|
if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
|
568
467
|
delete dataAttributes[dataAttribute];
|
569
468
|
}
|
570
469
|
}
|
571
|
-
|
572
|
-
|
470
|
+
config = {
|
471
|
+
...dataAttributes,
|
573
472
|
...(typeof config === 'object' && config ? config : {})
|
574
473
|
};
|
575
474
|
config = this._mergeConfigObj(config);
|
576
475
|
config = this._configAfterMerge(config);
|
577
|
-
|
578
476
|
this._typeCheckConfig(config);
|
579
|
-
|
580
477
|
return config;
|
581
478
|
}
|
582
|
-
|
583
479
|
_configAfterMerge(config) {
|
584
|
-
config.container = config.container === false ? document.body :
|
585
|
-
|
480
|
+
config.container = config.container === false ? document.body : index_js.getElement(config.container);
|
586
481
|
if (typeof config.delay === 'number') {
|
587
482
|
config.delay = {
|
588
483
|
show: config.delay,
|
589
484
|
hide: config.delay
|
590
485
|
};
|
591
486
|
}
|
592
|
-
|
593
487
|
if (typeof config.title === 'number') {
|
594
488
|
config.title = config.title.toString();
|
595
489
|
}
|
596
|
-
|
597
490
|
if (typeof config.content === 'number') {
|
598
491
|
config.content = config.content.toString();
|
599
492
|
}
|
600
|
-
|
601
493
|
return config;
|
602
494
|
}
|
603
|
-
|
604
495
|
_getDelegateConfig() {
|
605
496
|
const config = {};
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
config[key] = this._config[key];
|
497
|
+
for (const [key, value] of Object.entries(this._config)) {
|
498
|
+
if (this.constructor.Default[key] !== value) {
|
499
|
+
config[key] = value;
|
610
500
|
}
|
611
501
|
}
|
612
|
-
|
613
502
|
config.selector = false;
|
614
|
-
config.trigger = 'manual';
|
503
|
+
config.trigger = 'manual';
|
504
|
+
|
505
|
+
// In the future can be replaced with:
|
615
506
|
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
|
616
507
|
// `Object.fromEntries(keysWithDifferentValues)`
|
617
|
-
|
618
508
|
return config;
|
619
509
|
}
|
620
|
-
|
621
510
|
_disposePopper() {
|
622
511
|
if (this._popper) {
|
623
512
|
this._popper.destroy();
|
624
|
-
|
625
513
|
this._popper = null;
|
626
514
|
}
|
627
|
-
|
628
|
-
|
515
|
+
if (this.tip) {
|
516
|
+
this.tip.remove();
|
517
|
+
this.tip = null;
|
518
|
+
}
|
519
|
+
}
|
629
520
|
|
521
|
+
// Static
|
630
522
|
static jQueryInterface(config) {
|
631
523
|
return this.each(function () {
|
632
524
|
const data = Tooltip.getOrCreateInstance(this, config);
|
633
|
-
|
634
525
|
if (typeof config !== 'string') {
|
635
526
|
return;
|
636
527
|
}
|
637
|
-
|
638
528
|
if (typeof data[config] === 'undefined') {
|
639
529
|
throw new TypeError(`No method named "${config}"`);
|
640
530
|
}
|
641
|
-
|
642
531
|
data[config]();
|
643
532
|
});
|
644
533
|
}
|
645
|
-
|
646
534
|
}
|
535
|
+
|
647
536
|
/**
|
648
537
|
* jQuery
|
649
538
|
*/
|
650
539
|
|
651
|
-
|
652
|
-
index.defineJQueryPlugin(Tooltip);
|
540
|
+
index_js.defineJQueryPlugin(Tooltip);
|
653
541
|
|
654
542
|
return Tooltip;
|
655
543
|
|