administrate-bootstrap-theme 0.1.2 → 0.1.4
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/app/assets/stylesheets/administrate-bootstrap-theme/components/_content_body.scss +16 -0
- data/app/assets/stylesheets/administrate-bootstrap-theme/theme.scss +12 -0
- data/lib/administrate-bootstrap-theme/version.rb +1 -1
- metadata +4 -85
- data/node_modules/bootstrap/LICENSE +0 -22
- data/node_modules/bootstrap/README.md +0 -239
- data/node_modules/bootstrap/dist/css/bootstrap-grid.css +0 -4997
- data/node_modules/bootstrap/dist/css/bootstrap-grid.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-grid.min.css +0 -7
- data/node_modules/bootstrap/dist/css/bootstrap-grid.min.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.css +0 -4996
- data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.min.css +0 -7
- data/node_modules/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.css +0 -426
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.min.css +0 -8
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.min.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.css +0 -423
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.min.css +0 -8
- data/node_modules/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.css +0 -4752
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.min.css +0 -7
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.min.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.css +0 -4743
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.min.css +0 -7
- data/node_modules/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap.css +0 -10819
- data/node_modules/bootstrap/dist/css/bootstrap.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap.min.css +0 -7
- data/node_modules/bootstrap/dist/css/bootstrap.min.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap.rtl.css +0 -10795
- data/node_modules/bootstrap/dist/css/bootstrap.rtl.css.map +0 -1
- data/node_modules/bootstrap/dist/css/bootstrap.rtl.min.css +0 -7
- data/node_modules/bootstrap/dist/css/bootstrap.rtl.min.css.map +0 -1
- data/node_modules/bootstrap/dist/js/bootstrap.bundle.js +0 -6714
- data/node_modules/bootstrap/dist/js/bootstrap.bundle.js.map +0 -1
- data/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js +0 -7
- data/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js.map +0 -1
- data/node_modules/bootstrap/dist/js/bootstrap.esm.js +0 -4944
- data/node_modules/bootstrap/dist/js/bootstrap.esm.js.map +0 -1
- data/node_modules/bootstrap/dist/js/bootstrap.esm.min.js +0 -7
- data/node_modules/bootstrap/dist/js/bootstrap.esm.min.js.map +0 -1
- data/node_modules/bootstrap/dist/js/bootstrap.js +0 -4993
- data/node_modules/bootstrap/dist/js/bootstrap.js.map +0 -1
- data/node_modules/bootstrap/dist/js/bootstrap.min.js +0 -7
- data/node_modules/bootstrap/dist/js/bootstrap.min.js.map +0 -1
- data/node_modules/bootstrap/js/dist/alert.js +0 -264
- data/node_modules/bootstrap/js/dist/alert.js.map +0 -1
- data/node_modules/bootstrap/js/dist/base-component.js +0 -62
- data/node_modules/bootstrap/js/dist/base-component.js.map +0 -1
- data/node_modules/bootstrap/js/dist/button.js +0 -146
- data/node_modules/bootstrap/js/dist/button.js.map +0 -1
- data/node_modules/bootstrap/js/dist/carousel.js +0 -757
- data/node_modules/bootstrap/js/dist/carousel.js.map +0 -1
- data/node_modules/bootstrap/js/dist/collapse.js +0 -551
- data/node_modules/bootstrap/js/dist/collapse.js.map +0 -1
- data/node_modules/bootstrap/js/dist/dom/data.js +0 -69
- data/node_modules/bootstrap/js/dist/dom/data.js.map +0 -1
- data/node_modules/bootstrap/js/dist/dom/event-handler.js +0 -305
- data/node_modules/bootstrap/js/dist/dom/event-handler.js.map +0 -1
- data/node_modules/bootstrap/js/dist/dom/manipulator.js +0 -89
- data/node_modules/bootstrap/js/dist/dom/manipulator.js.map +0 -1
- data/node_modules/bootstrap/js/dist/dom/selector-engine.js +0 -86
- data/node_modules/bootstrap/js/dist/dom/selector-engine.js.map +0 -1
- data/node_modules/bootstrap/js/dist/dropdown.js +0 -662
- data/node_modules/bootstrap/js/dist/dropdown.js.map +0 -1
- data/node_modules/bootstrap/js/dist/modal.js +0 -752
- data/node_modules/bootstrap/js/dist/modal.js.map +0 -1
- data/node_modules/bootstrap/js/dist/offcanvas.js +0 -509
- data/node_modules/bootstrap/js/dist/offcanvas.js.map +0 -1
- data/node_modules/bootstrap/js/dist/popover.js +0 -216
- data/node_modules/bootstrap/js/dist/popover.js.map +0 -1
- data/node_modules/bootstrap/js/dist/scrollspy.js +0 -400
- data/node_modules/bootstrap/js/dist/scrollspy.js.map +0 -1
- data/node_modules/bootstrap/js/dist/tab.js +0 -347
- data/node_modules/bootstrap/js/dist/tab.js.map +0 -1
- data/node_modules/bootstrap/js/dist/toast.js +0 -335
- data/node_modules/bootstrap/js/dist/toast.js.map +0 -1
- data/node_modules/bootstrap/js/dist/tooltip.js +0 -1055
- data/node_modules/bootstrap/js/dist/tooltip.js.map +0 -1
- data/node_modules/bootstrap/package.json +0 -177
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toast.js","sources":["../src/util/index.js","../src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = '#' + hrefAttr.split('#')[1]\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => (obj[0] || obj).nodeType\n\nconst emulateTransitionEnd = (element, duration) => {\n let called = false\n const durationPadding = 5\n const emulatedDuration = duration + durationPadding\n\n function listener() {\n called = true\n element.removeEventListener(TRANSITION_END, listener)\n }\n\n element.addEventListener(TRANSITION_END, listener)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(element)\n }\n }, emulatedDuration)\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!element) {\n return false\n }\n\n if (element.style && element.parentNode && element.parentNode.style) {\n const elementStyle = getComputedStyle(element)\n const parentNodeStyle = getComputedStyle(element.parentNode)\n\n return elementStyle.display !== 'none' &&\n parentNodeStyle.display !== 'none' &&\n elementStyle.visibility !== 'hidden'\n }\n\n return false\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => function () {}\n\nconst reflow = element => element.offsetHeight\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return jQuery\n }\n\n return null\n}\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = (name, plugin) => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nexport {\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n emulateTransitionEnd,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n emulateTransitionEnd,\n getTransitionDurationFromElement,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n emulateTransitionEnd(this._element, transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = getTransitionDurationFromElement(this._element)\n\n EventHandler.one(this._element, 'transitionend', complete)\n emulateTransitionEnd(this._element, transitionDuration)\n } else {\n complete()\n }\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n EventHandler.off(this._element, EVENT_CLICK_DISMISS)\n\n super.dispose()\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n return config\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.get(this, DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, Toast)\n\nexport default Toast\n"],"names":["MILLISECONDS_MULTIPLIER","TRANSITION_END","toType","obj","undefined","toString","call","match","toLowerCase","getTransitionDurationFromElement","element","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","nodeType","emulateTransitionEnd","duration","called","durationPadding","emulatedDuration","listener","removeEventListener","addEventListener","setTimeout","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","RegExp","test","TypeError","toUpperCase","reflow","offsetHeight","getjQuery","jQuery","document","body","hasAttribute","onDOMContentLoaded","callback","readyState","defineJQueryPlugin","name","plugin","$","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","NAME","DATA_KEY","EVENT_KEY","EVENT_CLICK_DISMISS","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","DefaultType","animation","autohide","delay","Default","SELECTOR_DATA_DISMISS","Toast","BaseComponent","constructor","_config","_getConfig","_timeout","_setListeners","show","showEvent","EventHandler","trigger","_element","defaultPrevented","_clearTimeout","classList","add","complete","remove","hide","one","contains","hideEvent","dispose","off","Manipulator","getDataAttributes","on","clearTimeout","each","data","Data","get"],"mappings":"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"}
|
|
@@ -1,1055 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Bootstrap tooltip.js v5.0.0-beta3 (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
|
-
*/
|
|
6
|
-
(function (global, factory) {
|
|
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
|
-
});
|
|
29
|
-
}
|
|
30
|
-
n['default'] = e;
|
|
31
|
-
return Object.freeze(n);
|
|
32
|
-
}
|
|
33
|
-
|
|
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);
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* --------------------------------------------------------------------------
|
|
43
|
-
* Bootstrap (v5.0.0-beta3): 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 = () => function () {};
|
|
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);
|
|
172
|
-
} else {
|
|
173
|
-
callback();
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
const isRTL = () => document.documentElement.dir === 'rtl';
|
|
178
|
-
|
|
179
|
-
const defineJQueryPlugin = (name, plugin) => {
|
|
180
|
-
onDOMContentLoaded(() => {
|
|
181
|
-
const $ = getjQuery();
|
|
182
|
-
/* istanbul ignore if */
|
|
183
|
-
|
|
184
|
-
if ($) {
|
|
185
|
-
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
186
|
-
$.fn[name] = plugin.jQueryInterface;
|
|
187
|
-
$.fn[name].Constructor = plugin;
|
|
188
|
-
|
|
189
|
-
$.fn[name].noConflict = () => {
|
|
190
|
-
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
191
|
-
return plugin.jQueryInterface;
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* --------------------------------------------------------------------------
|
|
199
|
-
* Bootstrap (v5.0.0-beta3): 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
|
-
*/
|
|
210
|
-
|
|
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
|
-
}
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
return createdDocument.body.innerHTML;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* --------------------------------------------------------------------------
|
|
312
|
-
* Bootstrap (v5.0.0-beta3): tooltip.js
|
|
313
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
314
|
-
* --------------------------------------------------------------------------
|
|
315
|
-
*/
|
|
316
|
-
/**
|
|
317
|
-
* ------------------------------------------------------------------------
|
|
318
|
-
* Constants
|
|
319
|
-
* ------------------------------------------------------------------------
|
|
320
|
-
*/
|
|
321
|
-
|
|
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
|
-
*/
|
|
400
|
-
|
|
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
|
-
}
|
|
406
|
-
|
|
407
|
-
super(element); // private
|
|
408
|
-
|
|
409
|
-
this._isEnabled = true;
|
|
410
|
-
this._timeout = 0;
|
|
411
|
-
this._hoverState = '';
|
|
412
|
-
this._activeTrigger = {};
|
|
413
|
-
this._popper = null; // Protected
|
|
414
|
-
|
|
415
|
-
this.config = this._getConfig(config);
|
|
416
|
-
this.tip = null;
|
|
417
|
-
|
|
418
|
-
this._setListeners();
|
|
419
|
-
} // Getters
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
static get Default() {
|
|
423
|
-
return Default;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
static get NAME() {
|
|
427
|
-
return NAME;
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
static get DATA_KEY() {
|
|
431
|
-
return DATA_KEY;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
static get Event() {
|
|
435
|
-
return Event$1;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
static get EVENT_KEY() {
|
|
439
|
-
return EVENT_KEY;
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
static get DefaultType() {
|
|
443
|
-
return DefaultType;
|
|
444
|
-
} // Public
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
enable() {
|
|
448
|
-
this._isEnabled = true;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
disable() {
|
|
452
|
-
this._isEnabled = false;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
toggleEnabled() {
|
|
456
|
-
this._isEnabled = !this._isEnabled;
|
|
457
|
-
}
|
|
458
|
-
|
|
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;
|
|
468
|
-
|
|
469
|
-
if (context._isWithActiveTrigger()) {
|
|
470
|
-
context._enter(null, context);
|
|
471
|
-
} else {
|
|
472
|
-
context._leave(null, context);
|
|
473
|
-
}
|
|
474
|
-
} else {
|
|
475
|
-
if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {
|
|
476
|
-
this._leave(null, this);
|
|
477
|
-
|
|
478
|
-
return;
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
this._enter(null, this);
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
dispose() {
|
|
486
|
-
clearTimeout(this._timeout);
|
|
487
|
-
EventHandler__default['default'].off(this._element, this.constructor.EVENT_KEY);
|
|
488
|
-
EventHandler__default['default'].off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
|
|
489
|
-
|
|
490
|
-
if (this.tip && this.tip.parentNode) {
|
|
491
|
-
this.tip.parentNode.removeChild(this.tip);
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
this._isEnabled = null;
|
|
495
|
-
this._timeout = null;
|
|
496
|
-
this._hoverState = null;
|
|
497
|
-
this._activeTrigger = null;
|
|
498
|
-
|
|
499
|
-
if (this._popper) {
|
|
500
|
-
this._popper.destroy();
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
this._popper = null;
|
|
504
|
-
this.config = null;
|
|
505
|
-
this.tip = null;
|
|
506
|
-
super.dispose();
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
show() {
|
|
510
|
-
if (this._element.style.display === 'none') {
|
|
511
|
-
throw new Error('Please use show on visible elements');
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
if (!(this.isWithContent() && this._isEnabled)) {
|
|
515
|
-
return;
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
const showEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOW);
|
|
519
|
-
const shadowRoot = findShadowRoot(this._element);
|
|
520
|
-
const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
|
|
521
|
-
|
|
522
|
-
if (showEvent.defaultPrevented || !isInTheDom) {
|
|
523
|
-
return;
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
const tip = this.getTipElement();
|
|
527
|
-
const tipId = getUID(this.constructor.NAME);
|
|
528
|
-
tip.setAttribute('id', tipId);
|
|
529
|
-
|
|
530
|
-
this._element.setAttribute('aria-describedby', tipId);
|
|
531
|
-
|
|
532
|
-
this.setContent();
|
|
533
|
-
|
|
534
|
-
if (this.config.animation) {
|
|
535
|
-
tip.classList.add(CLASS_NAME_FADE);
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
const placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this._element) : this.config.placement;
|
|
539
|
-
|
|
540
|
-
const attachment = this._getAttachment(placement);
|
|
541
|
-
|
|
542
|
-
this._addAttachmentClass(attachment);
|
|
543
|
-
|
|
544
|
-
const container = this._getContainer();
|
|
545
|
-
|
|
546
|
-
Data__default['default'].set(tip, this.constructor.DATA_KEY, this);
|
|
547
|
-
|
|
548
|
-
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
|
|
549
|
-
container.appendChild(tip);
|
|
550
|
-
EventHandler__default['default'].trigger(this._element, this.constructor.Event.INSERTED);
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
if (this._popper) {
|
|
554
|
-
this._popper.update();
|
|
555
|
-
} else {
|
|
556
|
-
this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
tip.classList.add(CLASS_NAME_SHOW);
|
|
560
|
-
const customClass = typeof this.config.customClass === 'function' ? this.config.customClass() : this.config.customClass;
|
|
561
|
-
|
|
562
|
-
if (customClass) {
|
|
563
|
-
tip.classList.add(...customClass.split(' '));
|
|
564
|
-
} // If this is a touch-enabled device we add extra
|
|
565
|
-
// empty mouseover listeners to the body's immediate children;
|
|
566
|
-
// only needed because of broken event delegation on iOS
|
|
567
|
-
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
if ('ontouchstart' in document.documentElement) {
|
|
571
|
-
[].concat(...document.body.children).forEach(element => {
|
|
572
|
-
EventHandler__default['default'].on(element, 'mouseover', noop());
|
|
573
|
-
});
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
const complete = () => {
|
|
577
|
-
const prevHoverState = this._hoverState;
|
|
578
|
-
this._hoverState = null;
|
|
579
|
-
EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOWN);
|
|
580
|
-
|
|
581
|
-
if (prevHoverState === HOVER_STATE_OUT) {
|
|
582
|
-
this._leave(null, this);
|
|
583
|
-
}
|
|
584
|
-
};
|
|
585
|
-
|
|
586
|
-
if (this.tip.classList.contains(CLASS_NAME_FADE)) {
|
|
587
|
-
const transitionDuration = getTransitionDurationFromElement(this.tip);
|
|
588
|
-
EventHandler__default['default'].one(this.tip, 'transitionend', complete);
|
|
589
|
-
emulateTransitionEnd(this.tip, transitionDuration);
|
|
590
|
-
} else {
|
|
591
|
-
complete();
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
hide() {
|
|
596
|
-
if (!this._popper) {
|
|
597
|
-
return;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
const tip = this.getTipElement();
|
|
601
|
-
|
|
602
|
-
const complete = () => {
|
|
603
|
-
if (this._isWithActiveTrigger()) {
|
|
604
|
-
return;
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
|
|
608
|
-
tip.parentNode.removeChild(tip);
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
this._cleanTipClass();
|
|
612
|
-
|
|
613
|
-
this._element.removeAttribute('aria-describedby');
|
|
614
|
-
|
|
615
|
-
EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDDEN);
|
|
616
|
-
|
|
617
|
-
if (this._popper) {
|
|
618
|
-
this._popper.destroy();
|
|
619
|
-
|
|
620
|
-
this._popper = null;
|
|
621
|
-
}
|
|
622
|
-
};
|
|
623
|
-
|
|
624
|
-
const hideEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDE);
|
|
625
|
-
|
|
626
|
-
if (hideEvent.defaultPrevented) {
|
|
627
|
-
return;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
tip.classList.remove(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra
|
|
631
|
-
// empty mouseover listeners we added for iOS support
|
|
632
|
-
|
|
633
|
-
if ('ontouchstart' in document.documentElement) {
|
|
634
|
-
[].concat(...document.body.children).forEach(element => EventHandler__default['default'].off(element, 'mouseover', noop));
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
this._activeTrigger[TRIGGER_CLICK] = false;
|
|
638
|
-
this._activeTrigger[TRIGGER_FOCUS] = false;
|
|
639
|
-
this._activeTrigger[TRIGGER_HOVER] = false;
|
|
640
|
-
|
|
641
|
-
if (this.tip.classList.contains(CLASS_NAME_FADE)) {
|
|
642
|
-
const transitionDuration = getTransitionDurationFromElement(tip);
|
|
643
|
-
EventHandler__default['default'].one(tip, 'transitionend', complete);
|
|
644
|
-
emulateTransitionEnd(tip, transitionDuration);
|
|
645
|
-
} else {
|
|
646
|
-
complete();
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
this._hoverState = '';
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
update() {
|
|
653
|
-
if (this._popper !== null) {
|
|
654
|
-
this._popper.update();
|
|
655
|
-
}
|
|
656
|
-
} // Protected
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
isWithContent() {
|
|
660
|
-
return Boolean(this.getTitle());
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
getTipElement() {
|
|
664
|
-
if (this.tip) {
|
|
665
|
-
return this.tip;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
const element = document.createElement('div');
|
|
669
|
-
element.innerHTML = this.config.template;
|
|
670
|
-
this.tip = element.children[0];
|
|
671
|
-
return this.tip;
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
setContent() {
|
|
675
|
-
const tip = this.getTipElement();
|
|
676
|
-
this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());
|
|
677
|
-
tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
setElementContent(element, content) {
|
|
681
|
-
if (element === null) {
|
|
682
|
-
return;
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
if (typeof content === 'object' && isElement(content)) {
|
|
686
|
-
if (content.jquery) {
|
|
687
|
-
content = content[0];
|
|
688
|
-
} // content is a DOM node or a jQuery
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
if (this.config.html) {
|
|
692
|
-
if (content.parentNode !== element) {
|
|
693
|
-
element.innerHTML = '';
|
|
694
|
-
element.appendChild(content);
|
|
695
|
-
}
|
|
696
|
-
} else {
|
|
697
|
-
element.textContent = content.textContent;
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
return;
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
if (this.config.html) {
|
|
704
|
-
if (this.config.sanitize) {
|
|
705
|
-
content = sanitizeHtml(content, this.config.allowList, this.config.sanitizeFn);
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
element.innerHTML = content;
|
|
709
|
-
} else {
|
|
710
|
-
element.textContent = content;
|
|
711
|
-
}
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
getTitle() {
|
|
715
|
-
let title = this._element.getAttribute('data-bs-original-title');
|
|
716
|
-
|
|
717
|
-
if (!title) {
|
|
718
|
-
title = typeof this.config.title === 'function' ? this.config.title.call(this._element) : this.config.title;
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
return title;
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
updateAttachment(attachment) {
|
|
725
|
-
if (attachment === 'right') {
|
|
726
|
-
return 'end';
|
|
727
|
-
}
|
|
728
|
-
|
|
729
|
-
if (attachment === 'left') {
|
|
730
|
-
return 'start';
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
return attachment;
|
|
734
|
-
} // Private
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
_initializeOnDelegatedTarget(event, context) {
|
|
738
|
-
const dataKey = this.constructor.DATA_KEY;
|
|
739
|
-
context = context || Data__default['default'].get(event.delegateTarget, dataKey);
|
|
740
|
-
|
|
741
|
-
if (!context) {
|
|
742
|
-
context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
|
|
743
|
-
Data__default['default'].set(event.delegateTarget, dataKey, context);
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
return context;
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
_getOffset() {
|
|
750
|
-
const {
|
|
751
|
-
offset
|
|
752
|
-
} = this.config;
|
|
753
|
-
|
|
754
|
-
if (typeof offset === 'string') {
|
|
755
|
-
return offset.split(',').map(val => Number.parseInt(val, 10));
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
if (typeof offset === 'function') {
|
|
759
|
-
return popperData => offset(popperData, this._element);
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
return offset;
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
_getPopperConfig(attachment) {
|
|
766
|
-
const defaultBsPopperConfig = {
|
|
767
|
-
placement: attachment,
|
|
768
|
-
modifiers: [{
|
|
769
|
-
name: 'flip',
|
|
770
|
-
options: {
|
|
771
|
-
altBoundary: true,
|
|
772
|
-
fallbackPlacements: this.config.fallbackPlacements
|
|
773
|
-
}
|
|
774
|
-
}, {
|
|
775
|
-
name: 'offset',
|
|
776
|
-
options: {
|
|
777
|
-
offset: this._getOffset()
|
|
778
|
-
}
|
|
779
|
-
}, {
|
|
780
|
-
name: 'preventOverflow',
|
|
781
|
-
options: {
|
|
782
|
-
boundary: this.config.boundary
|
|
783
|
-
}
|
|
784
|
-
}, {
|
|
785
|
-
name: 'arrow',
|
|
786
|
-
options: {
|
|
787
|
-
element: `.${this.constructor.NAME}-arrow`
|
|
788
|
-
}
|
|
789
|
-
}, {
|
|
790
|
-
name: 'onChange',
|
|
791
|
-
enabled: true,
|
|
792
|
-
phase: 'afterWrite',
|
|
793
|
-
fn: data => this._handlePopperPlacementChange(data)
|
|
794
|
-
}],
|
|
795
|
-
onFirstUpdate: data => {
|
|
796
|
-
if (data.options.placement !== data.placement) {
|
|
797
|
-
this._handlePopperPlacementChange(data);
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
};
|
|
801
|
-
return { ...defaultBsPopperConfig,
|
|
802
|
-
...(typeof this.config.popperConfig === 'function' ? this.config.popperConfig(defaultBsPopperConfig) : this.config.popperConfig)
|
|
803
|
-
};
|
|
804
|
-
}
|
|
805
|
-
|
|
806
|
-
_addAttachmentClass(attachment) {
|
|
807
|
-
this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
_getContainer() {
|
|
811
|
-
if (this.config.container === false) {
|
|
812
|
-
return document.body;
|
|
813
|
-
}
|
|
814
|
-
|
|
815
|
-
if (isElement(this.config.container)) {
|
|
816
|
-
return this.config.container;
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
return SelectorEngine__default['default'].findOne(this.config.container);
|
|
820
|
-
}
|
|
821
|
-
|
|
822
|
-
_getAttachment(placement) {
|
|
823
|
-
return AttachmentMap[placement.toUpperCase()];
|
|
824
|
-
}
|
|
825
|
-
|
|
826
|
-
_setListeners() {
|
|
827
|
-
const triggers = this.config.trigger.split(' ');
|
|
828
|
-
triggers.forEach(trigger => {
|
|
829
|
-
if (trigger === 'click') {
|
|
830
|
-
EventHandler__default['default'].on(this._element, this.constructor.Event.CLICK, this.config.selector, event => this.toggle(event));
|
|
831
|
-
} else if (trigger !== TRIGGER_MANUAL) {
|
|
832
|
-
const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
|
|
833
|
-
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
|
|
834
|
-
EventHandler__default['default'].on(this._element, eventIn, this.config.selector, event => this._enter(event));
|
|
835
|
-
EventHandler__default['default'].on(this._element, eventOut, this.config.selector, event => this._leave(event));
|
|
836
|
-
}
|
|
837
|
-
});
|
|
838
|
-
|
|
839
|
-
this._hideModalHandler = () => {
|
|
840
|
-
if (this._element) {
|
|
841
|
-
this.hide();
|
|
842
|
-
}
|
|
843
|
-
};
|
|
844
|
-
|
|
845
|
-
EventHandler__default['default'].on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);
|
|
846
|
-
|
|
847
|
-
if (this.config.selector) {
|
|
848
|
-
this.config = { ...this.config,
|
|
849
|
-
trigger: 'manual',
|
|
850
|
-
selector: ''
|
|
851
|
-
};
|
|
852
|
-
} else {
|
|
853
|
-
this._fixTitle();
|
|
854
|
-
}
|
|
855
|
-
}
|
|
856
|
-
|
|
857
|
-
_fixTitle() {
|
|
858
|
-
const title = this._element.getAttribute('title');
|
|
859
|
-
|
|
860
|
-
const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
|
|
861
|
-
|
|
862
|
-
if (title || originalTitleType !== 'string') {
|
|
863
|
-
this._element.setAttribute('data-bs-original-title', title || '');
|
|
864
|
-
|
|
865
|
-
if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
|
|
866
|
-
this._element.setAttribute('aria-label', title);
|
|
867
|
-
}
|
|
868
|
-
|
|
869
|
-
this._element.setAttribute('title', '');
|
|
870
|
-
}
|
|
871
|
-
}
|
|
872
|
-
|
|
873
|
-
_enter(event, context) {
|
|
874
|
-
context = this._initializeOnDelegatedTarget(event, context);
|
|
875
|
-
|
|
876
|
-
if (event) {
|
|
877
|
-
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {
|
|
881
|
-
context._hoverState = HOVER_STATE_SHOW;
|
|
882
|
-
return;
|
|
883
|
-
}
|
|
884
|
-
|
|
885
|
-
clearTimeout(context._timeout);
|
|
886
|
-
context._hoverState = HOVER_STATE_SHOW;
|
|
887
|
-
|
|
888
|
-
if (!context.config.delay || !context.config.delay.show) {
|
|
889
|
-
context.show();
|
|
890
|
-
return;
|
|
891
|
-
}
|
|
892
|
-
|
|
893
|
-
context._timeout = setTimeout(() => {
|
|
894
|
-
if (context._hoverState === HOVER_STATE_SHOW) {
|
|
895
|
-
context.show();
|
|
896
|
-
}
|
|
897
|
-
}, context.config.delay.show);
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
_leave(event, context) {
|
|
901
|
-
context = this._initializeOnDelegatedTarget(event, context);
|
|
902
|
-
|
|
903
|
-
if (event) {
|
|
904
|
-
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
|
|
905
|
-
}
|
|
906
|
-
|
|
907
|
-
if (context._isWithActiveTrigger()) {
|
|
908
|
-
return;
|
|
909
|
-
}
|
|
910
|
-
|
|
911
|
-
clearTimeout(context._timeout);
|
|
912
|
-
context._hoverState = HOVER_STATE_OUT;
|
|
913
|
-
|
|
914
|
-
if (!context.config.delay || !context.config.delay.hide) {
|
|
915
|
-
context.hide();
|
|
916
|
-
return;
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
context._timeout = setTimeout(() => {
|
|
920
|
-
if (context._hoverState === HOVER_STATE_OUT) {
|
|
921
|
-
context.hide();
|
|
922
|
-
}
|
|
923
|
-
}, context.config.delay.hide);
|
|
924
|
-
}
|
|
925
|
-
|
|
926
|
-
_isWithActiveTrigger() {
|
|
927
|
-
for (const trigger in this._activeTrigger) {
|
|
928
|
-
if (this._activeTrigger[trigger]) {
|
|
929
|
-
return true;
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
return false;
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
_getConfig(config) {
|
|
937
|
-
const dataAttributes = Manipulator__default['default'].getDataAttributes(this._element);
|
|
938
|
-
Object.keys(dataAttributes).forEach(dataAttr => {
|
|
939
|
-
if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
|
|
940
|
-
delete dataAttributes[dataAttr];
|
|
941
|
-
}
|
|
942
|
-
});
|
|
943
|
-
|
|
944
|
-
if (config && typeof config.container === 'object' && config.container.jquery) {
|
|
945
|
-
config.container = config.container[0];
|
|
946
|
-
}
|
|
947
|
-
|
|
948
|
-
config = { ...this.constructor.Default,
|
|
949
|
-
...dataAttributes,
|
|
950
|
-
...(typeof config === 'object' && config ? config : {})
|
|
951
|
-
};
|
|
952
|
-
|
|
953
|
-
if (typeof config.delay === 'number') {
|
|
954
|
-
config.delay = {
|
|
955
|
-
show: config.delay,
|
|
956
|
-
hide: config.delay
|
|
957
|
-
};
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
if (typeof config.title === 'number') {
|
|
961
|
-
config.title = config.title.toString();
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
if (typeof config.content === 'number') {
|
|
965
|
-
config.content = config.content.toString();
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
|
969
|
-
|
|
970
|
-
if (config.sanitize) {
|
|
971
|
-
config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
|
|
972
|
-
}
|
|
973
|
-
|
|
974
|
-
return config;
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
_getDelegateConfig() {
|
|
978
|
-
const config = {};
|
|
979
|
-
|
|
980
|
-
if (this.config) {
|
|
981
|
-
for (const key in this.config) {
|
|
982
|
-
if (this.constructor.Default[key] !== this.config[key]) {
|
|
983
|
-
config[key] = this.config[key];
|
|
984
|
-
}
|
|
985
|
-
}
|
|
986
|
-
}
|
|
987
|
-
|
|
988
|
-
return config;
|
|
989
|
-
}
|
|
990
|
-
|
|
991
|
-
_cleanTipClass() {
|
|
992
|
-
const tip = this.getTipElement();
|
|
993
|
-
const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
|
|
994
|
-
|
|
995
|
-
if (tabClass !== null && tabClass.length > 0) {
|
|
996
|
-
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
|
997
|
-
}
|
|
998
|
-
}
|
|
999
|
-
|
|
1000
|
-
_handlePopperPlacementChange(popperData) {
|
|
1001
|
-
const {
|
|
1002
|
-
state
|
|
1003
|
-
} = popperData;
|
|
1004
|
-
|
|
1005
|
-
if (!state) {
|
|
1006
|
-
return;
|
|
1007
|
-
}
|
|
1008
|
-
|
|
1009
|
-
this.tip = state.elements.popper;
|
|
1010
|
-
|
|
1011
|
-
this._cleanTipClass();
|
|
1012
|
-
|
|
1013
|
-
this._addAttachmentClass(this._getAttachment(state.placement));
|
|
1014
|
-
} // Static
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
static jQueryInterface(config) {
|
|
1018
|
-
return this.each(function () {
|
|
1019
|
-
let data = Data__default['default'].get(this, DATA_KEY);
|
|
1020
|
-
|
|
1021
|
-
const _config = typeof config === 'object' && config;
|
|
1022
|
-
|
|
1023
|
-
if (!data && /dispose|hide/.test(config)) {
|
|
1024
|
-
return;
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
|
-
if (!data) {
|
|
1028
|
-
data = new Tooltip(this, _config);
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
if (typeof config === 'string') {
|
|
1032
|
-
if (typeof data[config] === 'undefined') {
|
|
1033
|
-
throw new TypeError(`No method named "${config}"`);
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
data[config]();
|
|
1037
|
-
}
|
|
1038
|
-
});
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
}
|
|
1042
|
-
/**
|
|
1043
|
-
* ------------------------------------------------------------------------
|
|
1044
|
-
* jQuery
|
|
1045
|
-
* ------------------------------------------------------------------------
|
|
1046
|
-
* add .Tooltip to jQuery only if jQuery is present
|
|
1047
|
-
*/
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
defineJQueryPlugin(NAME, Tooltip);
|
|
1051
|
-
|
|
1052
|
-
return Tooltip;
|
|
1053
|
-
|
|
1054
|
-
})));
|
|
1055
|
-
//# sourceMappingURL=tooltip.js.map
|