bootstrap 4.1.3 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +17 -2
- data/CHANGELOG.md +2 -14
- data/README.md +7 -4
- data/Rakefile +2 -2
- data/assets/javascripts/bootstrap/alert.js +226 -166
- data/assets/javascripts/bootstrap/base-component.js +63 -0
- data/assets/javascripts/bootstrap/button.js +119 -165
- data/assets/javascripts/bootstrap/carousel.js +634 -445
- data/assets/javascripts/bootstrap/collapse.js +447 -327
- data/assets/javascripts/bootstrap/dom/data.js +68 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
- data/assets/javascripts/bootstrap/dropdown.js +550 -425
- data/assets/javascripts/bootstrap/modal.js +695 -492
- data/assets/javascripts/bootstrap/offcanvas.js +671 -0
- data/assets/javascripts/bootstrap/popover.js +167 -217
- data/assets/javascripts/bootstrap/scrollspy.js +319 -302
- data/assets/javascripts/bootstrap/tab.js +303 -221
- data/assets/javascripts/bootstrap/toast.js +333 -0
- data/assets/javascripts/bootstrap/tooltip.js +896 -577
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +15 -7
- data/assets/javascripts/bootstrap.js +4262 -3163
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/stylesheets/_bootstrap-grid.scss +54 -21
- data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
- data/assets/stylesheets/_bootstrap.scss +21 -11
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +15 -9
- data/assets/stylesheets/bootstrap/_badge.scss +3 -21
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
- data/assets/stylesheets/bootstrap/_button-group.scss +29 -62
- data/assets/stylesheets/bootstrap/_buttons.scss +33 -65
- data/assets/stylesheets/bootstrap/_card.scss +55 -141
- data/assets/stylesheets/bootstrap/_carousel.scss +94 -101
- data/assets/stylesheets/bootstrap/_close.scss +33 -28
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +114 -40
- data/assets/stylesheets/bootstrap/_forms.scss +9 -333
- data/assets/stylesheets/bootstrap/_functions.scss +148 -29
- data/assets/stylesheets/bootstrap/_grid.scss +4 -34
- data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
- data/assets/stylesheets/bootstrap/_images.scss +4 -4
- data/assets/stylesheets/bootstrap/_list-group.scss +86 -27
- data/assets/stylesheets/bootstrap/_mixins.scss +17 -16
- data/assets/stylesheets/bootstrap/_modal.scss +90 -42
- data/assets/stylesheets/bootstrap/_nav.scss +31 -10
- data/assets/stylesheets/bootstrap/_navbar.scss +68 -61
- data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +13 -27
- data/assets/stylesheets/bootstrap/_popover.scss +63 -88
- data/assets/stylesheets/bootstrap/_progress.scss +20 -6
- data/assets/stylesheets/bootstrap/_reboot.scss +349 -211
- data/assets/stylesheets/bootstrap/_root.scss +5 -8
- data/assets/stylesheets/bootstrap/_spinners.scss +69 -0
- data/assets/stylesheets/bootstrap/_tables.scss +79 -116
- data/assets/stylesheets/bootstrap/_toasts.scss +51 -0
- data/assets/stylesheets/bootstrap/_tooltip.scss +18 -18
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -3
- data/assets/stylesheets/bootstrap/_type.scss +42 -63
- data/assets/stylesheets/bootstrap/_utilities.scss +594 -15
- data/assets/stylesheets/bootstrap/_variables.scss +952 -440
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
- data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
- data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
- data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
- data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +57 -14
- data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +14 -1
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +13 -9
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -53
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +14 -16
- data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
- data/assets/stylesheets/bootstrap/mixins/_deprecate.scss +10 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +87 -97
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +106 -33
- data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +18 -9
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +19 -6
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +312 -0
- data/bootstrap.gemspec +7 -6
- data/lib/bootstrap/engine.rb +3 -0
- data/lib/bootstrap/version.rb +4 -2
- data/lib/bootstrap.rb +10 -7
- data/tasks/updater/js.rb +20 -5
- data/tasks/updater/network.rb +8 -2
- data/test/dummy_rails/app/assets/config/manifest.js +3 -0
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
- data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
- data/test/dummy_rails/app/views/pages/root.html +89 -0
- data/test/dummy_rails/config/application.rb +0 -3
- data/test/gemfiles/rails_6_0.gemfile +7 -0
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- data/test/support/dummy_rails_integration.rb +3 -1
- data/test/test_helper.rb +18 -13
- metadata +64 -79
- data/assets/javascripts/bootstrap/util.js +0 -143
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -433
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -173
- data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -16
- data/assets/stylesheets/bootstrap/_media.scss +0 -8
- data/assets/stylesheets/bootstrap/_print.scss +0 -141
- data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
- data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -12
- data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -67
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
- data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -6
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -30
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -14
- data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -13
- data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -7
- data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
- data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
- data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -59
- data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -38
- data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -52
- data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
- data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -9
- data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -37
- data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
- data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
- data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -12
- data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -51
- data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -58
- data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -11
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
- /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,732 +1,1051 @@
|
|
1
|
+
/*!
|
2
|
+
* Bootstrap tooltip.js v5.0.0 (https://getbootstrap.com/)
|
3
|
+
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5
|
+
*/
|
1
6
|
(function (global, factory) {
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('
|
3
|
-
typeof define === 'function' && define.amd ? define(['
|
4
|
-
(global.Tooltip = factory(global.
|
5
|
-
}(this, (function (
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
+
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
13
|
+
|
14
|
+
function _interopNamespace(e) {
|
15
|
+
if (e && e.__esModule) return e;
|
16
|
+
var n = Object.create(null);
|
17
|
+
if (e) {
|
18
|
+
Object.keys(e).forEach(function (k) {
|
19
|
+
if (k !== 'default') {
|
20
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
21
|
+
Object.defineProperty(n, k, d.get ? d : {
|
22
|
+
enumerable: true,
|
23
|
+
get: function () {
|
24
|
+
return e[k];
|
25
|
+
}
|
26
|
+
});
|
27
|
+
}
|
28
|
+
});
|
18
29
|
}
|
30
|
+
n['default'] = e;
|
31
|
+
return Object.freeze(n);
|
19
32
|
}
|
20
33
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
34
|
+
var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
|
35
|
+
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
36
|
+
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
37
|
+
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
38
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
39
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
26
40
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
41
|
+
/**
|
42
|
+
* --------------------------------------------------------------------------
|
43
|
+
* Bootstrap (v5.0.0): util/index.js
|
44
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
45
|
+
* --------------------------------------------------------------------------
|
46
|
+
*/
|
47
|
+
const MAX_UID = 1000000;
|
48
|
+
const MILLISECONDS_MULTIPLIER = 1000;
|
49
|
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
50
|
+
|
51
|
+
const toType = obj => {
|
52
|
+
if (obj === null || obj === undefined) {
|
53
|
+
return `${obj}`;
|
54
|
+
}
|
55
|
+
|
56
|
+
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
57
|
+
};
|
58
|
+
/**
|
59
|
+
* --------------------------------------------------------------------------
|
60
|
+
* Public Util Api
|
61
|
+
* --------------------------------------------------------------------------
|
62
|
+
*/
|
63
|
+
|
64
|
+
|
65
|
+
const getUID = prefix => {
|
66
|
+
do {
|
67
|
+
prefix += Math.floor(Math.random() * MAX_UID);
|
68
|
+
} while (document.getElementById(prefix));
|
69
|
+
|
70
|
+
return prefix;
|
71
|
+
};
|
72
|
+
|
73
|
+
const getTransitionDurationFromElement = element => {
|
74
|
+
if (!element) {
|
75
|
+
return 0;
|
76
|
+
} // Get transition-duration of the element
|
77
|
+
|
78
|
+
|
79
|
+
let {
|
80
|
+
transitionDuration,
|
81
|
+
transitionDelay
|
82
|
+
} = window.getComputedStyle(element);
|
83
|
+
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
84
|
+
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
|
85
|
+
|
86
|
+
if (!floatTransitionDuration && !floatTransitionDelay) {
|
87
|
+
return 0;
|
88
|
+
} // If multiple durations are defined, take the first
|
89
|
+
|
90
|
+
|
91
|
+
transitionDuration = transitionDuration.split(',')[0];
|
92
|
+
transitionDelay = transitionDelay.split(',')[0];
|
93
|
+
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
94
|
+
};
|
95
|
+
|
96
|
+
const triggerTransitionEnd = element => {
|
97
|
+
element.dispatchEvent(new Event(TRANSITION_END));
|
98
|
+
};
|
99
|
+
|
100
|
+
const isElement = obj => (obj[0] || obj).nodeType;
|
101
|
+
|
102
|
+
const emulateTransitionEnd = (element, duration) => {
|
103
|
+
let called = false;
|
104
|
+
const durationPadding = 5;
|
105
|
+
const emulatedDuration = duration + durationPadding;
|
106
|
+
|
107
|
+
function listener() {
|
108
|
+
called = true;
|
109
|
+
element.removeEventListener(TRANSITION_END, listener);
|
110
|
+
}
|
111
|
+
|
112
|
+
element.addEventListener(TRANSITION_END, listener);
|
113
|
+
setTimeout(() => {
|
114
|
+
if (!called) {
|
115
|
+
triggerTransitionEnd(element);
|
116
|
+
}
|
117
|
+
}, emulatedDuration);
|
118
|
+
};
|
119
|
+
|
120
|
+
const typeCheckConfig = (componentName, config, configTypes) => {
|
121
|
+
Object.keys(configTypes).forEach(property => {
|
122
|
+
const expectedTypes = configTypes[property];
|
123
|
+
const value = config[property];
|
124
|
+
const valueType = value && isElement(value) ? 'element' : toType(value);
|
125
|
+
|
126
|
+
if (!new RegExp(expectedTypes).test(valueType)) {
|
127
|
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
128
|
+
}
|
129
|
+
});
|
130
|
+
};
|
131
|
+
|
132
|
+
const findShadowRoot = element => {
|
133
|
+
if (!document.documentElement.attachShadow) {
|
134
|
+
return null;
|
135
|
+
} // Can find the shadow root otherwise it'll return the document
|
136
|
+
|
137
|
+
|
138
|
+
if (typeof element.getRootNode === 'function') {
|
139
|
+
const root = element.getRootNode();
|
140
|
+
return root instanceof ShadowRoot ? root : null;
|
141
|
+
}
|
142
|
+
|
143
|
+
if (element instanceof ShadowRoot) {
|
144
|
+
return element;
|
145
|
+
} // when we don't find a shadow root
|
146
|
+
|
147
|
+
|
148
|
+
if (!element.parentNode) {
|
149
|
+
return null;
|
150
|
+
}
|
151
|
+
|
152
|
+
return findShadowRoot(element.parentNode);
|
153
|
+
};
|
154
|
+
|
155
|
+
const noop = () => {};
|
156
|
+
|
157
|
+
const getjQuery = () => {
|
158
|
+
const {
|
159
|
+
jQuery
|
160
|
+
} = window;
|
161
|
+
|
162
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
163
|
+
return jQuery;
|
164
|
+
}
|
165
|
+
|
166
|
+
return null;
|
167
|
+
};
|
168
|
+
|
169
|
+
const onDOMContentLoaded = callback => {
|
170
|
+
if (document.readyState === 'loading') {
|
171
|
+
document.addEventListener('DOMContentLoaded', callback);
|
35
172
|
} else {
|
36
|
-
|
173
|
+
callback();
|
37
174
|
}
|
175
|
+
};
|
38
176
|
|
39
|
-
|
40
|
-
|
177
|
+
const isRTL = () => document.documentElement.dir === 'rtl';
|
178
|
+
|
179
|
+
const defineJQueryPlugin = (name, plugin) => {
|
180
|
+
onDOMContentLoaded(() => {
|
181
|
+
const $ = getjQuery();
|
182
|
+
/* istanbul ignore if */
|
41
183
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
184
|
+
if ($) {
|
185
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
186
|
+
$.fn[name] = plugin.jQueryInterface;
|
187
|
+
$.fn[name].Constructor = plugin;
|
46
188
|
|
47
|
-
|
48
|
-
|
49
|
-
return
|
50
|
-
}
|
189
|
+
$.fn[name].noConflict = () => {
|
190
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
191
|
+
return plugin.jQueryInterface;
|
192
|
+
};
|
51
193
|
}
|
194
|
+
});
|
195
|
+
};
|
196
|
+
|
197
|
+
/**
|
198
|
+
* --------------------------------------------------------------------------
|
199
|
+
* Bootstrap (v5.0.0): util/sanitizer.js
|
200
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
201
|
+
* --------------------------------------------------------------------------
|
202
|
+
*/
|
203
|
+
const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
|
204
|
+
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
|
205
|
+
/**
|
206
|
+
* A pattern that recognizes a commonly useful subset of URLs that are safe.
|
207
|
+
*
|
208
|
+
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
209
|
+
*/
|
52
210
|
|
53
|
-
|
54
|
-
|
211
|
+
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;
|
212
|
+
/**
|
213
|
+
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
214
|
+
*
|
215
|
+
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
|
216
|
+
*/
|
217
|
+
|
218
|
+
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
|
219
|
+
|
220
|
+
const allowedAttribute = (attr, allowedAttributeList) => {
|
221
|
+
const attrName = attr.nodeName.toLowerCase();
|
222
|
+
|
223
|
+
if (allowedAttributeList.includes(attrName)) {
|
224
|
+
if (uriAttrs.has(attrName)) {
|
225
|
+
return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
|
226
|
+
}
|
227
|
+
|
228
|
+
return true;
|
229
|
+
}
|
230
|
+
|
231
|
+
const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.
|
232
|
+
|
233
|
+
for (let i = 0, len = regExp.length; i < len; i++) {
|
234
|
+
if (regExp[i].test(attrName)) {
|
235
|
+
return true;
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
return false;
|
240
|
+
};
|
241
|
+
|
242
|
+
const DefaultAllowlist = {
|
243
|
+
// Global attributes allowed on any supplied element below.
|
244
|
+
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
|
245
|
+
a: ['target', 'href', 'title', 'rel'],
|
246
|
+
area: [],
|
247
|
+
b: [],
|
248
|
+
br: [],
|
249
|
+
col: [],
|
250
|
+
code: [],
|
251
|
+
div: [],
|
252
|
+
em: [],
|
253
|
+
hr: [],
|
254
|
+
h1: [],
|
255
|
+
h2: [],
|
256
|
+
h3: [],
|
257
|
+
h4: [],
|
258
|
+
h5: [],
|
259
|
+
h6: [],
|
260
|
+
i: [],
|
261
|
+
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
|
262
|
+
li: [],
|
263
|
+
ol: [],
|
264
|
+
p: [],
|
265
|
+
pre: [],
|
266
|
+
s: [],
|
267
|
+
small: [],
|
268
|
+
span: [],
|
269
|
+
sub: [],
|
270
|
+
sup: [],
|
271
|
+
strong: [],
|
272
|
+
u: [],
|
273
|
+
ul: []
|
274
|
+
};
|
275
|
+
function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
|
276
|
+
if (!unsafeHtml.length) {
|
277
|
+
return unsafeHtml;
|
278
|
+
}
|
279
|
+
|
280
|
+
if (sanitizeFn && typeof sanitizeFn === 'function') {
|
281
|
+
return sanitizeFn(unsafeHtml);
|
282
|
+
}
|
283
|
+
|
284
|
+
const domParser = new window.DOMParser();
|
285
|
+
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
|
286
|
+
const allowlistKeys = Object.keys(allowList);
|
287
|
+
const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
|
288
|
+
|
289
|
+
for (let i = 0, len = elements.length; i < len; i++) {
|
290
|
+
const el = elements[i];
|
291
|
+
const elName = el.nodeName.toLowerCase();
|
292
|
+
|
293
|
+
if (!allowlistKeys.includes(elName)) {
|
294
|
+
el.parentNode.removeChild(el);
|
295
|
+
continue;
|
296
|
+
}
|
297
|
+
|
298
|
+
const attributeList = [].concat(...el.attributes);
|
299
|
+
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);
|
300
|
+
attributeList.forEach(attr => {
|
301
|
+
if (!allowedAttribute(attr, allowedAttributes)) {
|
302
|
+
el.removeAttribute(attr.nodeName);
|
303
|
+
}
|
55
304
|
});
|
56
305
|
}
|
57
306
|
|
58
|
-
return
|
307
|
+
return createdDocument.body.innerHTML;
|
59
308
|
}
|
60
309
|
|
61
310
|
/**
|
62
311
|
* --------------------------------------------------------------------------
|
63
|
-
* Bootstrap (
|
64
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
312
|
+
* Bootstrap (v5.0.0): tooltip.js
|
313
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
65
314
|
* --------------------------------------------------------------------------
|
66
315
|
*/
|
316
|
+
/**
|
317
|
+
* ------------------------------------------------------------------------
|
318
|
+
* Constants
|
319
|
+
* ------------------------------------------------------------------------
|
320
|
+
*/
|
67
321
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
/**
|
147
|
-
* ------------------------------------------------------------------------
|
148
|
-
* Class Definition
|
149
|
-
* ------------------------------------------------------------------------
|
150
|
-
*/
|
151
|
-
|
152
|
-
};
|
153
|
-
|
154
|
-
var Tooltip =
|
155
|
-
/*#__PURE__*/
|
156
|
-
function () {
|
157
|
-
function Tooltip(element, config) {
|
158
|
-
/**
|
159
|
-
* Check for Popper dependency
|
160
|
-
* Popper - https://popper.js.org
|
161
|
-
*/
|
162
|
-
if (typeof Popper === 'undefined') {
|
163
|
-
throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');
|
164
|
-
} // private
|
165
|
-
|
166
|
-
|
167
|
-
this._isEnabled = true;
|
168
|
-
this._timeout = 0;
|
169
|
-
this._hoverState = '';
|
170
|
-
this._activeTrigger = {};
|
171
|
-
this._popper = null; // Protected
|
172
|
-
|
173
|
-
this.element = element;
|
174
|
-
this.config = this._getConfig(config);
|
175
|
-
this.tip = null;
|
176
|
-
|
177
|
-
this._setListeners();
|
178
|
-
} // Getters
|
179
|
-
|
180
|
-
|
181
|
-
var _proto = Tooltip.prototype;
|
182
|
-
|
183
|
-
// Public
|
184
|
-
_proto.enable = function enable() {
|
185
|
-
this._isEnabled = true;
|
186
|
-
};
|
322
|
+
const NAME = 'tooltip';
|
323
|
+
const DATA_KEY = 'bs.tooltip';
|
324
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
325
|
+
const CLASS_PREFIX = 'bs-tooltip';
|
326
|
+
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
|
327
|
+
const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
|
328
|
+
const DefaultType = {
|
329
|
+
animation: 'boolean',
|
330
|
+
template: 'string',
|
331
|
+
title: '(string|element|function)',
|
332
|
+
trigger: 'string',
|
333
|
+
delay: '(number|object)',
|
334
|
+
html: 'boolean',
|
335
|
+
selector: '(string|boolean)',
|
336
|
+
placement: '(string|function)',
|
337
|
+
offset: '(array|string|function)',
|
338
|
+
container: '(string|element|boolean)',
|
339
|
+
fallbackPlacements: 'array',
|
340
|
+
boundary: '(string|element)',
|
341
|
+
customClass: '(string|function)',
|
342
|
+
sanitize: 'boolean',
|
343
|
+
sanitizeFn: '(null|function)',
|
344
|
+
allowList: 'object',
|
345
|
+
popperConfig: '(null|object|function)'
|
346
|
+
};
|
347
|
+
const AttachmentMap = {
|
348
|
+
AUTO: 'auto',
|
349
|
+
TOP: 'top',
|
350
|
+
RIGHT: isRTL() ? 'left' : 'right',
|
351
|
+
BOTTOM: 'bottom',
|
352
|
+
LEFT: isRTL() ? 'right' : 'left'
|
353
|
+
};
|
354
|
+
const Default = {
|
355
|
+
animation: true,
|
356
|
+
template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
|
357
|
+
trigger: 'hover focus',
|
358
|
+
title: '',
|
359
|
+
delay: 0,
|
360
|
+
html: false,
|
361
|
+
selector: false,
|
362
|
+
placement: 'top',
|
363
|
+
offset: [0, 0],
|
364
|
+
container: false,
|
365
|
+
fallbackPlacements: ['top', 'right', 'bottom', 'left'],
|
366
|
+
boundary: 'clippingParents',
|
367
|
+
customClass: '',
|
368
|
+
sanitize: true,
|
369
|
+
sanitizeFn: null,
|
370
|
+
allowList: DefaultAllowlist,
|
371
|
+
popperConfig: null
|
372
|
+
};
|
373
|
+
const Event$1 = {
|
374
|
+
HIDE: `hide${EVENT_KEY}`,
|
375
|
+
HIDDEN: `hidden${EVENT_KEY}`,
|
376
|
+
SHOW: `show${EVENT_KEY}`,
|
377
|
+
SHOWN: `shown${EVENT_KEY}`,
|
378
|
+
INSERTED: `inserted${EVENT_KEY}`,
|
379
|
+
CLICK: `click${EVENT_KEY}`,
|
380
|
+
FOCUSIN: `focusin${EVENT_KEY}`,
|
381
|
+
FOCUSOUT: `focusout${EVENT_KEY}`,
|
382
|
+
MOUSEENTER: `mouseenter${EVENT_KEY}`,
|
383
|
+
MOUSELEAVE: `mouseleave${EVENT_KEY}`
|
384
|
+
};
|
385
|
+
const CLASS_NAME_FADE = 'fade';
|
386
|
+
const CLASS_NAME_MODAL = 'modal';
|
387
|
+
const CLASS_NAME_SHOW = 'show';
|
388
|
+
const HOVER_STATE_SHOW = 'show';
|
389
|
+
const HOVER_STATE_OUT = 'out';
|
390
|
+
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
|
391
|
+
const TRIGGER_HOVER = 'hover';
|
392
|
+
const TRIGGER_FOCUS = 'focus';
|
393
|
+
const TRIGGER_CLICK = 'click';
|
394
|
+
const TRIGGER_MANUAL = 'manual';
|
395
|
+
/**
|
396
|
+
* ------------------------------------------------------------------------
|
397
|
+
* Class Definition
|
398
|
+
* ------------------------------------------------------------------------
|
399
|
+
*/
|
187
400
|
|
188
|
-
|
189
|
-
|
190
|
-
|
401
|
+
class Tooltip extends BaseComponent__default['default'] {
|
402
|
+
constructor(element, config) {
|
403
|
+
if (typeof Popper__namespace === 'undefined') {
|
404
|
+
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
|
405
|
+
}
|
191
406
|
|
192
|
-
|
193
|
-
this._isEnabled = !this._isEnabled;
|
194
|
-
};
|
407
|
+
super(element); // private
|
195
408
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
409
|
+
this._isEnabled = true;
|
410
|
+
this._timeout = 0;
|
411
|
+
this._hoverState = '';
|
412
|
+
this._activeTrigger = {};
|
413
|
+
this._popper = null; // Protected
|
200
414
|
|
201
|
-
|
202
|
-
|
203
|
-
var context = $$$1(event.currentTarget).data(dataKey);
|
415
|
+
this.config = this._getConfig(config);
|
416
|
+
this.tip = null;
|
204
417
|
|
205
|
-
|
206
|
-
|
207
|
-
$$$1(event.currentTarget).data(dataKey, context);
|
208
|
-
}
|
418
|
+
this._setListeners();
|
419
|
+
} // Getters
|
209
420
|
|
210
|
-
context._activeTrigger.click = !context._activeTrigger.click;
|
211
421
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
context._leave(null, context);
|
216
|
-
}
|
217
|
-
} else {
|
218
|
-
if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) {
|
219
|
-
this._leave(null, this);
|
422
|
+
static get Default() {
|
423
|
+
return Default;
|
424
|
+
}
|
220
425
|
|
221
|
-
|
222
|
-
|
426
|
+
static get NAME() {
|
427
|
+
return NAME;
|
428
|
+
}
|
223
429
|
|
224
|
-
|
225
|
-
|
226
|
-
|
430
|
+
static get DATA_KEY() {
|
431
|
+
return DATA_KEY;
|
432
|
+
}
|
227
433
|
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
$$$1(this.element).off(this.constructor.EVENT_KEY);
|
232
|
-
$$$1(this.element).closest('.modal').off('hide.bs.modal');
|
434
|
+
static get Event() {
|
435
|
+
return Event$1;
|
436
|
+
}
|
233
437
|
|
234
|
-
|
235
|
-
|
236
|
-
|
438
|
+
static get EVENT_KEY() {
|
439
|
+
return EVENT_KEY;
|
440
|
+
}
|
237
441
|
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
this._activeTrigger = null;
|
442
|
+
static get DefaultType() {
|
443
|
+
return DefaultType;
|
444
|
+
} // Public
|
242
445
|
|
243
|
-
if (this._popper !== null) {
|
244
|
-
this._popper.destroy();
|
245
|
-
}
|
246
446
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
447
|
+
enable() {
|
448
|
+
this._isEnabled = true;
|
449
|
+
}
|
450
|
+
|
451
|
+
disable() {
|
452
|
+
this._isEnabled = false;
|
453
|
+
}
|
454
|
+
|
455
|
+
toggleEnabled() {
|
456
|
+
this._isEnabled = !this._isEnabled;
|
457
|
+
}
|
252
458
|
|
253
|
-
|
254
|
-
|
459
|
+
toggle(event) {
|
460
|
+
if (!this._isEnabled) {
|
461
|
+
return;
|
462
|
+
}
|
463
|
+
|
464
|
+
if (event) {
|
465
|
+
const context = this._initializeOnDelegatedTarget(event);
|
466
|
+
|
467
|
+
context._activeTrigger.click = !context._activeTrigger.click;
|
255
468
|
|
256
|
-
if (
|
257
|
-
|
469
|
+
if (context._isWithActiveTrigger()) {
|
470
|
+
context._enter(null, context);
|
471
|
+
} else {
|
472
|
+
context._leave(null, context);
|
258
473
|
}
|
474
|
+
} else {
|
475
|
+
if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {
|
476
|
+
this._leave(null, this);
|
259
477
|
|
260
|
-
|
478
|
+
return;
|
479
|
+
}
|
261
480
|
|
262
|
-
|
263
|
-
|
264
|
-
|
481
|
+
this._enter(null, this);
|
482
|
+
}
|
483
|
+
}
|
265
484
|
|
266
|
-
|
267
|
-
|
268
|
-
|
485
|
+
dispose() {
|
486
|
+
clearTimeout(this._timeout);
|
487
|
+
EventHandler__default['default'].off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
|
269
488
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
this.element.setAttribute('aria-describedby', tipId);
|
274
|
-
this.setContent();
|
489
|
+
if (this.tip && this.tip.parentNode) {
|
490
|
+
this.tip.parentNode.removeChild(this.tip);
|
491
|
+
}
|
275
492
|
|
276
|
-
|
277
|
-
|
278
|
-
|
493
|
+
this._isEnabled = null;
|
494
|
+
this._timeout = null;
|
495
|
+
this._hoverState = null;
|
496
|
+
this._activeTrigger = null;
|
279
497
|
|
280
|
-
|
498
|
+
if (this._popper) {
|
499
|
+
this._popper.destroy();
|
500
|
+
}
|
281
501
|
|
282
|
-
|
502
|
+
this._popper = null;
|
503
|
+
this.config = null;
|
504
|
+
this.tip = null;
|
505
|
+
super.dispose();
|
506
|
+
}
|
283
507
|
|
284
|
-
|
285
|
-
|
286
|
-
|
508
|
+
show() {
|
509
|
+
if (this._element.style.display === 'none') {
|
510
|
+
throw new Error('Please use show on visible elements');
|
511
|
+
}
|
287
512
|
|
288
|
-
|
289
|
-
|
290
|
-
|
513
|
+
if (!(this.isWithContent() && this._isEnabled)) {
|
514
|
+
return;
|
515
|
+
}
|
291
516
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
modifiers: {
|
296
|
-
offset: {
|
297
|
-
offset: this.config.offset
|
298
|
-
},
|
299
|
-
flip: {
|
300
|
-
behavior: this.config.fallbackPlacement
|
301
|
-
},
|
302
|
-
arrow: {
|
303
|
-
element: Selector.ARROW
|
304
|
-
},
|
305
|
-
preventOverflow: {
|
306
|
-
boundariesElement: this.config.boundary
|
307
|
-
}
|
308
|
-
},
|
309
|
-
onCreate: function onCreate(data) {
|
310
|
-
if (data.originalPlacement !== data.placement) {
|
311
|
-
_this._handlePopperPlacementChange(data);
|
312
|
-
}
|
313
|
-
},
|
314
|
-
onUpdate: function onUpdate(data) {
|
315
|
-
_this._handlePopperPlacementChange(data);
|
316
|
-
}
|
317
|
-
});
|
318
|
-
$$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
|
319
|
-
// empty mouseover listeners to the body's immediate children;
|
320
|
-
// only needed because of broken event delegation on iOS
|
321
|
-
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
517
|
+
const showEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOW);
|
518
|
+
const shadowRoot = findShadowRoot(this._element);
|
519
|
+
const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
|
322
520
|
|
323
|
-
|
324
|
-
|
325
|
-
|
521
|
+
if (showEvent.defaultPrevented || !isInTheDom) {
|
522
|
+
return;
|
523
|
+
}
|
326
524
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
}
|
525
|
+
const tip = this.getTipElement();
|
526
|
+
const tipId = getUID(this.constructor.NAME);
|
527
|
+
tip.setAttribute('id', tipId);
|
331
528
|
|
332
|
-
|
333
|
-
_this._hoverState = null;
|
334
|
-
$$$1(_this.element).trigger(_this.constructor.Event.SHOWN);
|
529
|
+
this._element.setAttribute('aria-describedby', tipId);
|
335
530
|
|
336
|
-
|
337
|
-
_this._leave(null, _this);
|
338
|
-
}
|
339
|
-
};
|
531
|
+
this.setContent();
|
340
532
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
} else {
|
345
|
-
complete();
|
346
|
-
}
|
347
|
-
}
|
348
|
-
};
|
533
|
+
if (this.config.animation) {
|
534
|
+
tip.classList.add(CLASS_NAME_FADE);
|
535
|
+
}
|
349
536
|
|
350
|
-
|
351
|
-
var _this2 = this;
|
537
|
+
const placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this._element) : this.config.placement;
|
352
538
|
|
353
|
-
|
354
|
-
var hideEvent = $$$1.Event(this.constructor.Event.HIDE);
|
539
|
+
const attachment = this._getAttachment(placement);
|
355
540
|
|
356
|
-
|
357
|
-
if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
|
358
|
-
tip.parentNode.removeChild(tip);
|
359
|
-
}
|
541
|
+
this._addAttachmentClass(attachment);
|
360
542
|
|
361
|
-
|
543
|
+
const container = this._getContainer();
|
362
544
|
|
363
|
-
|
545
|
+
Data__default['default'].set(tip, this.constructor.DATA_KEY, this);
|
364
546
|
|
365
|
-
|
547
|
+
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
|
548
|
+
container.appendChild(tip);
|
549
|
+
EventHandler__default['default'].trigger(this._element, this.constructor.Event.INSERTED);
|
550
|
+
}
|
366
551
|
|
367
|
-
|
368
|
-
|
369
|
-
|
552
|
+
if (this._popper) {
|
553
|
+
this._popper.update();
|
554
|
+
} else {
|
555
|
+
this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
|
556
|
+
}
|
370
557
|
|
371
|
-
|
372
|
-
|
373
|
-
}
|
374
|
-
};
|
558
|
+
tip.classList.add(CLASS_NAME_SHOW);
|
559
|
+
const customClass = typeof this.config.customClass === 'function' ? this.config.customClass() : this.config.customClass;
|
375
560
|
|
376
|
-
|
561
|
+
if (customClass) {
|
562
|
+
tip.classList.add(...customClass.split(' '));
|
563
|
+
} // If this is a touch-enabled device we add extra
|
564
|
+
// empty mouseover listeners to the body's immediate children;
|
565
|
+
// only needed because of broken event delegation on iOS
|
566
|
+
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
377
567
|
|
378
|
-
if (hideEvent.isDefaultPrevented()) {
|
379
|
-
return;
|
380
|
-
}
|
381
568
|
|
382
|
-
|
383
|
-
|
569
|
+
if ('ontouchstart' in document.documentElement) {
|
570
|
+
[].concat(...document.body.children).forEach(element => {
|
571
|
+
EventHandler__default['default'].on(element, 'mouseover', noop);
|
572
|
+
});
|
573
|
+
}
|
574
|
+
|
575
|
+
const complete = () => {
|
576
|
+
const prevHoverState = this._hoverState;
|
577
|
+
this._hoverState = null;
|
578
|
+
EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOWN);
|
384
579
|
|
385
|
-
if (
|
386
|
-
|
580
|
+
if (prevHoverState === HOVER_STATE_OUT) {
|
581
|
+
this._leave(null, this);
|
387
582
|
}
|
583
|
+
};
|
584
|
+
|
585
|
+
if (this.tip.classList.contains(CLASS_NAME_FADE)) {
|
586
|
+
const transitionDuration = getTransitionDurationFromElement(this.tip);
|
587
|
+
EventHandler__default['default'].one(this.tip, 'transitionend', complete);
|
588
|
+
emulateTransitionEnd(this.tip, transitionDuration);
|
589
|
+
} else {
|
590
|
+
complete();
|
591
|
+
}
|
592
|
+
}
|
388
593
|
|
389
|
-
|
390
|
-
|
391
|
-
|
594
|
+
hide() {
|
595
|
+
if (!this._popper) {
|
596
|
+
return;
|
597
|
+
}
|
392
598
|
|
393
|
-
|
394
|
-
var transitionDuration = Util.getTransitionDurationFromElement(tip);
|
395
|
-
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
|
396
|
-
} else {
|
397
|
-
complete();
|
398
|
-
}
|
599
|
+
const tip = this.getTipElement();
|
399
600
|
|
400
|
-
|
401
|
-
|
601
|
+
const complete = () => {
|
602
|
+
if (this._isWithActiveTrigger()) {
|
603
|
+
return;
|
604
|
+
}
|
402
605
|
|
403
|
-
|
404
|
-
|
405
|
-
this._popper.scheduleUpdate();
|
606
|
+
if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
|
607
|
+
tip.parentNode.removeChild(tip);
|
406
608
|
}
|
407
|
-
}; // Protected
|
408
609
|
|
610
|
+
this._cleanTipClass();
|
409
611
|
|
410
|
-
|
411
|
-
return Boolean(this.getTitle());
|
412
|
-
};
|
612
|
+
this._element.removeAttribute('aria-describedby');
|
413
613
|
|
414
|
-
|
415
|
-
|
614
|
+
EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDDEN);
|
615
|
+
|
616
|
+
if (this._popper) {
|
617
|
+
this._popper.destroy();
|
618
|
+
|
619
|
+
this._popper = null;
|
620
|
+
}
|
416
621
|
};
|
417
622
|
|
418
|
-
|
419
|
-
|
623
|
+
const hideEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDE);
|
624
|
+
|
625
|
+
if (hideEvent.defaultPrevented) {
|
626
|
+
return;
|
627
|
+
}
|
628
|
+
|
629
|
+
tip.classList.remove(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra
|
630
|
+
// empty mouseover listeners we added for iOS support
|
631
|
+
|
632
|
+
if ('ontouchstart' in document.documentElement) {
|
633
|
+
[].concat(...document.body.children).forEach(element => EventHandler__default['default'].off(element, 'mouseover', noop));
|
634
|
+
}
|
635
|
+
|
636
|
+
this._activeTrigger[TRIGGER_CLICK] = false;
|
637
|
+
this._activeTrigger[TRIGGER_FOCUS] = false;
|
638
|
+
this._activeTrigger[TRIGGER_HOVER] = false;
|
639
|
+
|
640
|
+
if (this.tip.classList.contains(CLASS_NAME_FADE)) {
|
641
|
+
const transitionDuration = getTransitionDurationFromElement(tip);
|
642
|
+
EventHandler__default['default'].one(tip, 'transitionend', complete);
|
643
|
+
emulateTransitionEnd(tip, transitionDuration);
|
644
|
+
} else {
|
645
|
+
complete();
|
646
|
+
}
|
647
|
+
|
648
|
+
this._hoverState = '';
|
649
|
+
}
|
650
|
+
|
651
|
+
update() {
|
652
|
+
if (this._popper !== null) {
|
653
|
+
this._popper.update();
|
654
|
+
}
|
655
|
+
} // Protected
|
656
|
+
|
657
|
+
|
658
|
+
isWithContent() {
|
659
|
+
return Boolean(this.getTitle());
|
660
|
+
}
|
661
|
+
|
662
|
+
getTipElement() {
|
663
|
+
if (this.tip) {
|
420
664
|
return this.tip;
|
421
|
-
}
|
665
|
+
}
|
422
666
|
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
667
|
+
const element = document.createElement('div');
|
668
|
+
element.innerHTML = this.config.template;
|
669
|
+
this.tip = element.children[0];
|
670
|
+
return this.tip;
|
671
|
+
}
|
428
672
|
|
429
|
-
|
430
|
-
|
673
|
+
setContent() {
|
674
|
+
const tip = this.getTipElement();
|
675
|
+
this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());
|
676
|
+
tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
|
677
|
+
}
|
431
678
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
679
|
+
setElementContent(element, content) {
|
680
|
+
if (element === null) {
|
681
|
+
return;
|
682
|
+
}
|
683
|
+
|
684
|
+
if (typeof content === 'object' && isElement(content)) {
|
685
|
+
if (content.jquery) {
|
686
|
+
content = content[0];
|
687
|
+
} // content is a DOM node or a jQuery
|
688
|
+
|
689
|
+
|
690
|
+
if (this.config.html) {
|
691
|
+
if (content.parentNode !== element) {
|
692
|
+
element.innerHTML = '';
|
693
|
+
element.appendChild(content);
|
440
694
|
}
|
441
695
|
} else {
|
442
|
-
|
696
|
+
element.textContent = content.textContent;
|
443
697
|
}
|
444
|
-
};
|
445
698
|
|
446
|
-
|
447
|
-
|
699
|
+
return;
|
700
|
+
}
|
448
701
|
|
449
|
-
|
450
|
-
|
702
|
+
if (this.config.html) {
|
703
|
+
if (this.config.sanitize) {
|
704
|
+
content = sanitizeHtml(content, this.config.allowList, this.config.sanitizeFn);
|
451
705
|
}
|
452
706
|
|
453
|
-
|
454
|
-
}
|
707
|
+
element.innerHTML = content;
|
708
|
+
} else {
|
709
|
+
element.textContent = content;
|
710
|
+
}
|
711
|
+
}
|
455
712
|
|
713
|
+
getTitle() {
|
714
|
+
let title = this._element.getAttribute('data-bs-original-title');
|
456
715
|
|
457
|
-
|
458
|
-
|
459
|
-
}
|
716
|
+
if (!title) {
|
717
|
+
title = typeof this.config.title === 'function' ? this.config.title.call(this._element) : this.config.title;
|
718
|
+
}
|
460
719
|
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
var triggers = this.config.trigger.split(' ');
|
465
|
-
triggers.forEach(function (trigger) {
|
466
|
-
if (trigger === 'click') {
|
467
|
-
$$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
|
468
|
-
return _this3.toggle(event);
|
469
|
-
});
|
470
|
-
} else if (trigger !== Trigger.MANUAL) {
|
471
|
-
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
|
472
|
-
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
|
473
|
-
$$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) {
|
474
|
-
return _this3._enter(event);
|
475
|
-
}).on(eventOut, _this3.config.selector, function (event) {
|
476
|
-
return _this3._leave(event);
|
477
|
-
});
|
478
|
-
}
|
720
|
+
return title;
|
721
|
+
}
|
479
722
|
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
723
|
+
updateAttachment(attachment) {
|
724
|
+
if (attachment === 'right') {
|
725
|
+
return 'end';
|
726
|
+
}
|
484
727
|
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
selector: ''
|
489
|
-
});
|
490
|
-
} else {
|
491
|
-
this._fixTitle();
|
492
|
-
}
|
493
|
-
};
|
728
|
+
if (attachment === 'left') {
|
729
|
+
return 'start';
|
730
|
+
}
|
494
731
|
|
495
|
-
|
496
|
-
|
732
|
+
return attachment;
|
733
|
+
} // Private
|
497
734
|
|
498
|
-
if (this.element.getAttribute('title') || titleType !== 'string') {
|
499
|
-
this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
|
500
|
-
this.element.setAttribute('title', '');
|
501
|
-
}
|
502
|
-
};
|
503
735
|
|
504
|
-
|
505
|
-
|
506
|
-
|
736
|
+
_initializeOnDelegatedTarget(event, context) {
|
737
|
+
const dataKey = this.constructor.DATA_KEY;
|
738
|
+
context = context || Data__default['default'].get(event.delegateTarget, dataKey);
|
507
739
|
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
740
|
+
if (!context) {
|
741
|
+
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
|
742
|
+
Data__default['default'].set(event.delegateTarget, dataKey, context);
|
743
|
+
}
|
512
744
|
|
513
|
-
|
514
|
-
|
515
|
-
}
|
745
|
+
return context;
|
746
|
+
}
|
516
747
|
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
748
|
+
_getOffset() {
|
749
|
+
const {
|
750
|
+
offset
|
751
|
+
} = this.config;
|
521
752
|
|
522
|
-
|
523
|
-
|
753
|
+
if (typeof offset === 'string') {
|
754
|
+
return offset.split(',').map(val => Number.parseInt(val, 10));
|
755
|
+
}
|
524
756
|
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
}
|
757
|
+
if (typeof offset === 'function') {
|
758
|
+
return popperData => offset(popperData, this._element);
|
759
|
+
}
|
529
760
|
|
530
|
-
|
531
|
-
|
532
|
-
|
761
|
+
return offset;
|
762
|
+
}
|
763
|
+
|
764
|
+
_getPopperConfig(attachment) {
|
765
|
+
const defaultBsPopperConfig = {
|
766
|
+
placement: attachment,
|
767
|
+
modifiers: [{
|
768
|
+
name: 'flip',
|
769
|
+
options: {
|
770
|
+
fallbackPlacements: this.config.fallbackPlacements
|
771
|
+
}
|
772
|
+
}, {
|
773
|
+
name: 'offset',
|
774
|
+
options: {
|
775
|
+
offset: this._getOffset()
|
533
776
|
}
|
534
|
-
},
|
777
|
+
}, {
|
778
|
+
name: 'preventOverflow',
|
779
|
+
options: {
|
780
|
+
boundary: this.config.boundary
|
781
|
+
}
|
782
|
+
}, {
|
783
|
+
name: 'arrow',
|
784
|
+
options: {
|
785
|
+
element: `.${this.constructor.NAME}-arrow`
|
786
|
+
}
|
787
|
+
}, {
|
788
|
+
name: 'onChange',
|
789
|
+
enabled: true,
|
790
|
+
phase: 'afterWrite',
|
791
|
+
fn: data => this._handlePopperPlacementChange(data)
|
792
|
+
}],
|
793
|
+
onFirstUpdate: data => {
|
794
|
+
if (data.options.placement !== data.placement) {
|
795
|
+
this._handlePopperPlacementChange(data);
|
796
|
+
}
|
797
|
+
}
|
798
|
+
};
|
799
|
+
return { ...defaultBsPopperConfig,
|
800
|
+
...(typeof this.config.popperConfig === 'function' ? this.config.popperConfig(defaultBsPopperConfig) : this.config.popperConfig)
|
535
801
|
};
|
802
|
+
}
|
536
803
|
|
537
|
-
|
538
|
-
|
539
|
-
|
804
|
+
_addAttachmentClass(attachment) {
|
805
|
+
this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
|
806
|
+
}
|
540
807
|
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
808
|
+
_getContainer() {
|
809
|
+
if (this.config.container === false) {
|
810
|
+
return document.body;
|
811
|
+
}
|
545
812
|
|
546
|
-
|
547
|
-
|
548
|
-
|
813
|
+
if (isElement(this.config.container)) {
|
814
|
+
return this.config.container;
|
815
|
+
}
|
549
816
|
|
550
|
-
|
551
|
-
|
552
|
-
}
|
817
|
+
return SelectorEngine__default['default'].findOne(this.config.container);
|
818
|
+
}
|
553
819
|
|
554
|
-
|
555
|
-
|
820
|
+
_getAttachment(placement) {
|
821
|
+
return AttachmentMap[placement.toUpperCase()];
|
822
|
+
}
|
556
823
|
|
557
|
-
|
558
|
-
|
559
|
-
|
824
|
+
_setListeners() {
|
825
|
+
const triggers = this.config.trigger.split(' ');
|
826
|
+
triggers.forEach(trigger => {
|
827
|
+
if (trigger === 'click') {
|
828
|
+
EventHandler__default['default'].on(this._element, this.constructor.Event.CLICK, this.config.selector, event => this.toggle(event));
|
829
|
+
} else if (trigger !== TRIGGER_MANUAL) {
|
830
|
+
const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
|
831
|
+
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
|
832
|
+
EventHandler__default['default'].on(this._element, eventIn, this.config.selector, event => this._enter(event));
|
833
|
+
EventHandler__default['default'].on(this._element, eventOut, this.config.selector, event => this._leave(event));
|
560
834
|
}
|
835
|
+
});
|
561
836
|
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
}, context.config.delay.hide);
|
837
|
+
this._hideModalHandler = () => {
|
838
|
+
if (this._element) {
|
839
|
+
this.hide();
|
840
|
+
}
|
567
841
|
};
|
568
842
|
|
569
|
-
|
570
|
-
for (var trigger in this._activeTrigger) {
|
571
|
-
if (this._activeTrigger[trigger]) {
|
572
|
-
return true;
|
573
|
-
}
|
574
|
-
}
|
843
|
+
EventHandler__default['default'].on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
|
575
844
|
|
576
|
-
|
577
|
-
|
845
|
+
if (this.config.selector) {
|
846
|
+
this.config = { ...this.config,
|
847
|
+
trigger: 'manual',
|
848
|
+
selector: ''
|
849
|
+
};
|
850
|
+
} else {
|
851
|
+
this._fixTitle();
|
852
|
+
}
|
853
|
+
}
|
578
854
|
|
579
|
-
|
580
|
-
|
855
|
+
_fixTitle() {
|
856
|
+
const title = this._element.getAttribute('title');
|
581
857
|
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
};
|
587
|
-
}
|
858
|
+
const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
|
859
|
+
|
860
|
+
if (title || originalTitleType !== 'string') {
|
861
|
+
this._element.setAttribute('data-bs-original-title', title || '');
|
588
862
|
|
589
|
-
if (
|
590
|
-
|
863
|
+
if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
|
864
|
+
this._element.setAttribute('aria-label', title);
|
591
865
|
}
|
592
866
|
|
593
|
-
|
594
|
-
|
867
|
+
this._element.setAttribute('title', '');
|
868
|
+
}
|
869
|
+
}
|
870
|
+
|
871
|
+
_enter(event, context) {
|
872
|
+
context = this._initializeOnDelegatedTarget(event, context);
|
873
|
+
|
874
|
+
if (event) {
|
875
|
+
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
|
876
|
+
}
|
877
|
+
|
878
|
+
if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {
|
879
|
+
context._hoverState = HOVER_STATE_SHOW;
|
880
|
+
return;
|
881
|
+
}
|
882
|
+
|
883
|
+
clearTimeout(context._timeout);
|
884
|
+
context._hoverState = HOVER_STATE_SHOW;
|
885
|
+
|
886
|
+
if (!context.config.delay || !context.config.delay.show) {
|
887
|
+
context.show();
|
888
|
+
return;
|
889
|
+
}
|
890
|
+
|
891
|
+
context._timeout = setTimeout(() => {
|
892
|
+
if (context._hoverState === HOVER_STATE_SHOW) {
|
893
|
+
context.show();
|
595
894
|
}
|
895
|
+
}, context.config.delay.show);
|
896
|
+
}
|
596
897
|
|
597
|
-
|
598
|
-
|
599
|
-
};
|
898
|
+
_leave(event, context) {
|
899
|
+
context = this._initializeOnDelegatedTarget(event, context);
|
600
900
|
|
601
|
-
|
602
|
-
|
901
|
+
if (event) {
|
902
|
+
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
|
903
|
+
}
|
603
904
|
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
905
|
+
if (context._isWithActiveTrigger()) {
|
906
|
+
return;
|
907
|
+
}
|
908
|
+
|
909
|
+
clearTimeout(context._timeout);
|
910
|
+
context._hoverState = HOVER_STATE_OUT;
|
911
|
+
|
912
|
+
if (!context.config.delay || !context.config.delay.hide) {
|
913
|
+
context.hide();
|
914
|
+
return;
|
915
|
+
}
|
916
|
+
|
917
|
+
context._timeout = setTimeout(() => {
|
918
|
+
if (context._hoverState === HOVER_STATE_OUT) {
|
919
|
+
context.hide();
|
610
920
|
}
|
921
|
+
}, context.config.delay.hide);
|
922
|
+
}
|
611
923
|
|
612
|
-
|
613
|
-
|
924
|
+
_isWithActiveTrigger() {
|
925
|
+
for (const trigger in this._activeTrigger) {
|
926
|
+
if (this._activeTrigger[trigger]) {
|
927
|
+
return true;
|
928
|
+
}
|
929
|
+
}
|
614
930
|
|
615
|
-
|
616
|
-
|
617
|
-
var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
|
931
|
+
return false;
|
932
|
+
}
|
618
933
|
|
619
|
-
|
620
|
-
|
934
|
+
_getConfig(config) {
|
935
|
+
const dataAttributes = Manipulator__default['default'].getDataAttributes(this._element);
|
936
|
+
Object.keys(dataAttributes).forEach(dataAttr => {
|
937
|
+
if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
|
938
|
+
delete dataAttributes[dataAttr];
|
621
939
|
}
|
940
|
+
});
|
941
|
+
|
942
|
+
if (config && typeof config.container === 'object' && config.container.jquery) {
|
943
|
+
config.container = config.container[0];
|
944
|
+
}
|
945
|
+
|
946
|
+
config = { ...this.constructor.Default,
|
947
|
+
...dataAttributes,
|
948
|
+
...(typeof config === 'object' && config ? config : {})
|
622
949
|
};
|
623
950
|
|
624
|
-
|
625
|
-
|
626
|
-
|
951
|
+
if (typeof config.delay === 'number') {
|
952
|
+
config.delay = {
|
953
|
+
show: config.delay,
|
954
|
+
hide: config.delay
|
955
|
+
};
|
956
|
+
}
|
627
957
|
|
628
|
-
|
958
|
+
if (typeof config.title === 'number') {
|
959
|
+
config.title = config.title.toString();
|
960
|
+
}
|
629
961
|
|
630
|
-
|
631
|
-
|
962
|
+
if (typeof config.content === 'number') {
|
963
|
+
config.content = config.content.toString();
|
964
|
+
}
|
632
965
|
|
633
|
-
|
634
|
-
var tip = this.getTipElement();
|
635
|
-
var initConfigAnimation = this.config.animation;
|
966
|
+
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
636
967
|
|
637
|
-
|
638
|
-
|
968
|
+
if (config.sanitize) {
|
969
|
+
config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
|
970
|
+
}
|
971
|
+
|
972
|
+
return config;
|
973
|
+
}
|
974
|
+
|
975
|
+
_getDelegateConfig() {
|
976
|
+
const config = {};
|
977
|
+
|
978
|
+
if (this.config) {
|
979
|
+
for (const key in this.config) {
|
980
|
+
if (this.constructor.Default[key] !== this.config[key]) {
|
981
|
+
config[key] = this.config[key];
|
982
|
+
}
|
639
983
|
}
|
984
|
+
}
|
640
985
|
|
641
|
-
|
642
|
-
|
643
|
-
this.hide();
|
644
|
-
this.show();
|
645
|
-
this.config.animation = initConfigAnimation;
|
646
|
-
}; // Static
|
986
|
+
return config;
|
987
|
+
}
|
647
988
|
|
989
|
+
_cleanTipClass() {
|
990
|
+
const tip = this.getTipElement();
|
991
|
+
const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
|
648
992
|
|
649
|
-
|
650
|
-
|
651
|
-
|
993
|
+
if (tabClass !== null && tabClass.length > 0) {
|
994
|
+
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
995
|
+
}
|
996
|
+
}
|
652
997
|
|
653
|
-
|
998
|
+
_handlePopperPlacementChange(popperData) {
|
999
|
+
const {
|
1000
|
+
state
|
1001
|
+
} = popperData;
|
654
1002
|
|
655
|
-
|
656
|
-
|
657
|
-
|
1003
|
+
if (!state) {
|
1004
|
+
return;
|
1005
|
+
}
|
658
1006
|
|
659
|
-
|
660
|
-
data = new Tooltip(this, _config);
|
661
|
-
$$$1(this).data(DATA_KEY, data);
|
662
|
-
}
|
1007
|
+
this.tip = state.elements.popper;
|
663
1008
|
|
664
|
-
|
665
|
-
if (typeof data[config] === 'undefined') {
|
666
|
-
throw new TypeError("No method named \"" + config + "\"");
|
667
|
-
}
|
1009
|
+
this._cleanTipClass();
|
668
1010
|
|
669
|
-
|
670
|
-
|
671
|
-
});
|
672
|
-
};
|
1011
|
+
this._addAttachmentClass(this._getAttachment(state.placement));
|
1012
|
+
} // Static
|
673
1013
|
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
return
|
683
|
-
}
|
684
|
-
}, {
|
685
|
-
key: "NAME",
|
686
|
-
get: function get() {
|
687
|
-
return NAME;
|
688
|
-
}
|
689
|
-
}, {
|
690
|
-
key: "DATA_KEY",
|
691
|
-
get: function get() {
|
692
|
-
return DATA_KEY;
|
693
|
-
}
|
694
|
-
}, {
|
695
|
-
key: "Event",
|
696
|
-
get: function get() {
|
697
|
-
return Event;
|
698
|
-
}
|
699
|
-
}, {
|
700
|
-
key: "EVENT_KEY",
|
701
|
-
get: function get() {
|
702
|
-
return EVENT_KEY;
|
1014
|
+
|
1015
|
+
static jQueryInterface(config) {
|
1016
|
+
return this.each(function () {
|
1017
|
+
let data = Data__default['default'].get(this, DATA_KEY);
|
1018
|
+
|
1019
|
+
const _config = typeof config === 'object' && config;
|
1020
|
+
|
1021
|
+
if (!data && /dispose|hide/.test(config)) {
|
1022
|
+
return;
|
703
1023
|
}
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
return DefaultType;
|
1024
|
+
|
1025
|
+
if (!data) {
|
1026
|
+
data = new Tooltip(this, _config);
|
708
1027
|
}
|
709
|
-
}]);
|
710
1028
|
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
* jQuery
|
716
|
-
* ------------------------------------------------------------------------
|
717
|
-
*/
|
1029
|
+
if (typeof config === 'string') {
|
1030
|
+
if (typeof data[config] === 'undefined') {
|
1031
|
+
throw new TypeError(`No method named "${config}"`);
|
1032
|
+
}
|
718
1033
|
|
1034
|
+
data[config]();
|
1035
|
+
}
|
1036
|
+
});
|
1037
|
+
}
|
719
1038
|
|
720
|
-
|
721
|
-
|
1039
|
+
}
|
1040
|
+
/**
|
1041
|
+
* ------------------------------------------------------------------------
|
1042
|
+
* jQuery
|
1043
|
+
* ------------------------------------------------------------------------
|
1044
|
+
* add .Tooltip to jQuery only if jQuery is present
|
1045
|
+
*/
|
722
1046
|
|
723
|
-
$$$1.fn[NAME].noConflict = function () {
|
724
|
-
$$$1.fn[NAME] = JQUERY_NO_CONFLICT;
|
725
|
-
return Tooltip._jQueryInterface;
|
726
|
-
};
|
727
1047
|
|
728
|
-
|
729
|
-
}($, Popper);
|
1048
|
+
defineJQueryPlugin(NAME, Tooltip);
|
730
1049
|
|
731
1050
|
return Tooltip;
|
732
1051
|
|