diff options
Diffstat (limited to 'js/dist/tooltip.js')
| -rw-r--r-- | js/dist/tooltip.js | 862 |
1 files changed, 355 insertions, 507 deletions
diff --git a/js/dist/tooltip.js b/js/dist/tooltip.js index 19f7784fa..4bcf1860b 100644 --- a/js/dist/tooltip.js +++ b/js/dist/tooltip.js @@ -1,5 +1,5 @@ /*! - * Bootstrap tooltip.js v5.0.0-beta2 (https://getbootstrap.com/) + * Bootstrap tooltip.js v5.1.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ @@ -38,69 +38,17 @@ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine); var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent); - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); - } - - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - - _setPrototypeOf(subClass, superClass); - } - - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); - } - /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0-beta2): util/index.js + * Bootstrap (v5.1.0): util/index.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ - var MAX_UID = 1000000; - var MILLISECONDS_MULTIPLIER = 1000; - var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) + const MAX_UID = 1000000; - var toType = function toType(obj) { + const toType = obj => { if (obj === null || obj === undefined) { - return "" + obj; + return `${obj}`; } return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); @@ -112,7 +60,7 @@ */ - var getUID = function getUID(prefix) { + const getUID = prefix => { do { prefix += Math.floor(Math.random() * MAX_UID); } while (document.getElementById(prefix)); @@ -120,75 +68,51 @@ return prefix; }; - var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) { - if (!element) { - return 0; - } // Get transition-duration of the element - - - var _window$getComputedSt = window.getComputedStyle(element), - transitionDuration = _window$getComputedSt.transitionDuration, - transitionDelay = _window$getComputedSt.transitionDelay; - - var floatTransitionDuration = Number.parseFloat(transitionDuration); - var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found - - if (!floatTransitionDuration && !floatTransitionDelay) { - return 0; - } // If multiple durations are defined, take the first - - - transitionDuration = transitionDuration.split(',')[0]; - transitionDelay = transitionDelay.split(',')[0]; - return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; - }; + const isElement = obj => { + if (!obj || typeof obj !== 'object') { + return false; + } - var triggerTransitionEnd = function triggerTransitionEnd(element) { - element.dispatchEvent(new Event(TRANSITION_END)); - }; + if (typeof obj.jquery !== 'undefined') { + obj = obj[0]; + } - var isElement = function isElement(obj) { - return (obj[0] || obj).nodeType; + return typeof obj.nodeType !== 'undefined'; }; - var emulateTransitionEnd = function emulateTransitionEnd(element, duration) { - var called = false; - var durationPadding = 5; - var emulatedDuration = duration + durationPadding; + const getElement = obj => { + if (isElement(obj)) { + // it's a jQuery object or a node element + return obj.jquery ? obj[0] : obj; + } - function listener() { - called = true; - element.removeEventListener(TRANSITION_END, listener); + if (typeof obj === 'string' && obj.length > 0) { + return document.querySelector(obj); } - element.addEventListener(TRANSITION_END, listener); - setTimeout(function () { - if (!called) { - triggerTransitionEnd(element); - } - }, emulatedDuration); + return null; }; - var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) { - Object.keys(configTypes).forEach(function (property) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = value && isElement(value) ? 'element' : toType(value); + const typeCheckConfig = (componentName, config, configTypes) => { + Object.keys(configTypes).forEach(property => { + const expectedTypes = configTypes[property]; + const value = config[property]; + const valueType = value && isElement(value) ? 'element' : toType(value); if (!new RegExp(expectedTypes).test(valueType)) { - throw new TypeError(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); + throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); } }); }; - var findShadowRoot = function findShadowRoot(element) { + const findShadowRoot = element => { if (!document.documentElement.attachShadow) { return null; } // Can find the shadow root otherwise it'll return the document if (typeof element.getRootNode === 'function') { - var root = element.getRootNode(); + const root = element.getRootNode(); return root instanceof ShadowRoot ? root : null; } @@ -204,13 +128,12 @@ return findShadowRoot(element.parentNode); }; - var noop = function noop() { - return function () {}; - }; + const noop = () => {}; - var getjQuery = function getjQuery() { - var _window = window, - jQuery = _window.jQuery; + const getjQuery = () => { + const { + jQuery + } = window; if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { return jQuery; @@ -219,27 +142,37 @@ return null; }; - var onDOMContentLoaded = function onDOMContentLoaded(callback) { + const DOMContentLoadedCallbacks = []; + + const onDOMContentLoaded = callback => { if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', callback); + // add listener on the first call when the document is in loading state + if (!DOMContentLoadedCallbacks.length) { + document.addEventListener('DOMContentLoaded', () => { + DOMContentLoadedCallbacks.forEach(callback => callback()); + }); + } + + DOMContentLoadedCallbacks.push(callback); } else { callback(); } }; - var isRTL = document.documentElement.dir === 'rtl'; + const isRTL = () => document.documentElement.dir === 'rtl'; - var defineJQueryPlugin = function defineJQueryPlugin(name, plugin) { - onDOMContentLoaded(function () { - var $ = getjQuery(); + const defineJQueryPlugin = plugin => { + onDOMContentLoaded(() => { + const $ = getjQuery(); /* istanbul ignore if */ if ($) { - var JQUERY_NO_CONFLICT = $.fn[name]; + const name = plugin.NAME; + const JQUERY_NO_CONFLICT = $.fn[name]; $.fn[name] = plugin.jQueryInterface; $.fn[name].Constructor = plugin; - $.fn[name].noConflict = function () { + $.fn[name].noConflict = () => { $.fn[name] = JQUERY_NO_CONFLICT; return plugin.jQueryInterface; }; @@ -249,29 +182,29 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0-beta2): util/sanitizer.js + * Bootstrap (v5.1.0): util/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ - var uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); - var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; + const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); + const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; /** * A pattern that recognizes a commonly useful subset of URLs that are safe. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ - var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi; + const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i; /** * A pattern that matches safe data URLs. Only matches image, video and audio types. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ - var 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; + 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; - var allowedAttribute = function allowedAttribute(attr, allowedAttributeList) { - var attrName = attr.nodeName.toLowerCase(); + const allowedAttribute = (attr, allowedAttributeList) => { + const attrName = attr.nodeName.toLowerCase(); if (allowedAttributeList.includes(attrName)) { if (uriAttrs.has(attrName)) { @@ -281,11 +214,9 @@ return true; } - var regExp = allowedAttributeList.filter(function (attrRegex) { - return attrRegex instanceof RegExp; - }); // Check if a regular expression validates the attribute. + const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute. - for (var i = 0, len = regExp.length; i < len; i++) { + for (let i = 0, len = regExp.length; i < len; i++) { if (regExp[i].test(attrName)) { return true; } @@ -294,7 +225,7 @@ return false; }; - var DefaultAllowlist = { + const DefaultAllowlist = { // Global attributes allowed on any supplied element below. '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], a: ['target', 'href', 'title', 'rel'], @@ -328,8 +259,6 @@ ul: [] }; function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) { - var _ref; - if (!unsafeHtml.length) { return unsafeHtml; } @@ -338,55 +267,50 @@ return sanitizeFn(unsafeHtml); } - var domParser = new window.DOMParser(); - var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); - var allowlistKeys = Object.keys(allowList); - - var elements = (_ref = []).concat.apply(_ref, createdDocument.body.querySelectorAll('*')); + const domParser = new window.DOMParser(); + const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); + const allowlistKeys = Object.keys(allowList); + const elements = [].concat(...createdDocument.body.querySelectorAll('*')); - var _loop = function _loop(i, len) { - var _ref2; - - var el = elements[i]; - var elName = el.nodeName.toLowerCase(); + for (let i = 0, len = elements.length; i < len; i++) { + const el = elements[i]; + const elName = el.nodeName.toLowerCase(); if (!allowlistKeys.includes(elName)) { - el.parentNode.removeChild(el); - return "continue"; + el.remove(); + continue; } - var attributeList = (_ref2 = []).concat.apply(_ref2, el.attributes); - - var allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []); - attributeList.forEach(function (attr) { + const attributeList = [].concat(...el.attributes); + const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []); + attributeList.forEach(attr => { if (!allowedAttribute(attr, allowedAttributes)) { el.removeAttribute(attr.nodeName); } }); - }; - - for (var i = 0, len = elements.length; i < len; i++) { - var _ret = _loop(i); - - if (_ret === "continue") continue; } return createdDocument.body.innerHTML; } /** + * -------------------------------------------------------------------------- + * Bootstrap (v5.1.0): tooltip.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * -------------------------------------------------------------------------- + */ + /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'tooltip'; - var DATA_KEY = 'bs.tooltip'; - var EVENT_KEY = "." + DATA_KEY; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); - var DefaultType = { + const NAME = 'tooltip'; + const DATA_KEY = 'bs.tooltip'; + const EVENT_KEY = `.${DATA_KEY}`; + const CLASS_PREFIX = 'bs-tooltip'; + const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); + const DefaultType = { animation: 'boolean', template: 'string', title: '(string|element|function)', @@ -405,14 +329,14 @@ allowList: 'object', popperConfig: '(null|object|function)' }; - var AttachmentMap = { + const AttachmentMap = { AUTO: 'auto', TOP: 'top', - RIGHT: isRTL ? 'left' : 'right', + RIGHT: isRTL() ? 'left' : 'right', BOTTOM: 'bottom', - LEFT: isRTL ? 'right' : 'left' + LEFT: isRTL() ? 'right' : 'left' }; - var Default = { + const Default = { animation: true, template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', trigger: 'hover focus', @@ -431,83 +355,93 @@ allowList: DefaultAllowlist, popperConfig: null }; - var Event$1 = { - HIDE: "hide" + EVENT_KEY, - HIDDEN: "hidden" + EVENT_KEY, - SHOW: "show" + EVENT_KEY, - SHOWN: "shown" + EVENT_KEY, - INSERTED: "inserted" + EVENT_KEY, - CLICK: "click" + EVENT_KEY, - FOCUSIN: "focusin" + EVENT_KEY, - FOCUSOUT: "focusout" + EVENT_KEY, - MOUSEENTER: "mouseenter" + EVENT_KEY, - MOUSELEAVE: "mouseleave" + EVENT_KEY + const Event = { + HIDE: `hide${EVENT_KEY}`, + HIDDEN: `hidden${EVENT_KEY}`, + SHOW: `show${EVENT_KEY}`, + SHOWN: `shown${EVENT_KEY}`, + INSERTED: `inserted${EVENT_KEY}`, + CLICK: `click${EVENT_KEY}`, + FOCUSIN: `focusin${EVENT_KEY}`, + FOCUSOUT: `focusout${EVENT_KEY}`, + MOUSEENTER: `mouseenter${EVENT_KEY}`, + MOUSELEAVE: `mouseleave${EVENT_KEY}` }; - var CLASS_NAME_FADE = 'fade'; - var CLASS_NAME_MODAL = 'modal'; - var CLASS_NAME_SHOW = 'show'; - var HOVER_STATE_SHOW = 'show'; - var HOVER_STATE_OUT = 'out'; - var SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; - var TRIGGER_HOVER = 'hover'; - var TRIGGER_FOCUS = 'focus'; - var TRIGGER_CLICK = 'click'; - var TRIGGER_MANUAL = 'manual'; + const CLASS_NAME_FADE = 'fade'; + const CLASS_NAME_MODAL = 'modal'; + const CLASS_NAME_SHOW = 'show'; + const HOVER_STATE_SHOW = 'show'; + const HOVER_STATE_OUT = 'out'; + const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; + const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; + const EVENT_MODAL_HIDE = 'hide.bs.modal'; + const TRIGGER_HOVER = 'hover'; + const TRIGGER_FOCUS = 'focus'; + const TRIGGER_CLICK = 'click'; + const TRIGGER_MANUAL = 'manual'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ - var Tooltip = /*#__PURE__*/function (_BaseComponent) { - _inheritsLoose(Tooltip, _BaseComponent); - - function Tooltip(element, config) { - var _this; - + class Tooltip extends BaseComponent__default['default'] { + constructor(element, config) { if (typeof Popper__namespace === 'undefined') { throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); } - _this = _BaseComponent.call(this, element) || this; // private + super(element); // private - _this._isEnabled = true; - _this._timeout = 0; - _this._hoverState = ''; - _this._activeTrigger = {}; - _this._popper = null; // Protected - - _this.config = _this._getConfig(config); - _this.tip = null; + this._isEnabled = true; + this._timeout = 0; + this._hoverState = ''; + this._activeTrigger = {}; + this._popper = null; // Protected - _this._setListeners(); + this._config = this._getConfig(config); + this.tip = null; - return _this; + this._setListeners(); } // Getters - var _proto = Tooltip.prototype; + static get Default() { + return Default; + } + + static get NAME() { + return NAME; + } + + static get Event() { + return Event; + } + + static get DefaultType() { + return DefaultType; + } // Public - // Public - _proto.enable = function enable() { + + enable() { this._isEnabled = true; - }; + } - _proto.disable = function disable() { + disable() { this._isEnabled = false; - }; + } - _proto.toggleEnabled = function toggleEnabled() { + toggleEnabled() { this._isEnabled = !this._isEnabled; - }; + } - _proto.toggle = function toggle(event) { + toggle(event) { if (!this._isEnabled) { return; } if (event) { - var context = this._initializeOnDelegatedTarget(event); + const context = this._initializeOnDelegatedTarget(event); context._activeTrigger.click = !context._activeTrigger.click; @@ -525,36 +459,24 @@ this._enter(null, this); } - }; + } - _proto.dispose = function dispose() { + dispose() { clearTimeout(this._timeout); - EventHandler__default['default'].off(this._element, this.constructor.EVENT_KEY); - EventHandler__default['default'].off(this._element.closest("." + CLASS_NAME_MODAL), 'hide.bs.modal', this._hideModalHandler); + EventHandler__default['default'].off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); - if (this.tip && this.tip.parentNode) { - this.tip.parentNode.removeChild(this.tip); + if (this.tip) { + this.tip.remove(); } - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; - if (this._popper) { this._popper.destroy(); } - this._popper = null; - this.config = null; - this.tip = null; - - _BaseComponent.prototype.dispose.call(this); - }; - - _proto.show = function show() { - var _this2 = this; + super.dispose(); + } + show() { if (this._element.style.display === 'none') { throw new Error('Please use show on visible elements'); } @@ -563,49 +485,52 @@ return; } - var showEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOW); - var shadowRoot = findShadowRoot(this._element); - var isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element); + const showEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOW); + const shadowRoot = findShadowRoot(this._element); + const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element); if (showEvent.defaultPrevented || !isInTheDom) { return; } - var tip = this.getTipElement(); - var tipId = getUID(this.constructor.NAME); + const tip = this.getTipElement(); + const tipId = getUID(this.constructor.NAME); tip.setAttribute('id', tipId); this._element.setAttribute('aria-describedby', tipId); - this.setContent(); - - if (this.config.animation) { + if (this._config.animation) { tip.classList.add(CLASS_NAME_FADE); } - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this._element) : this.config.placement; + const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; - var attachment = this._getAttachment(placement); + const attachment = this._getAttachment(placement); this._addAttachmentClass(attachment); - var container = this._getContainer(); - - Data__default['default'].setData(tip, this.constructor.DATA_KEY, this); + const { + container + } = this._config; + Data__default['default'].set(tip, this.constructor.DATA_KEY, this); if (!this._element.ownerDocument.documentElement.contains(this.tip)) { - container.appendChild(tip); + container.append(tip); + EventHandler__default['default'].trigger(this._element, this.constructor.Event.INSERTED); + } + + if (this._popper) { + this._popper.update(); + } else { + this._popper = Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment)); } - EventHandler__default['default'].trigger(this._element, this.constructor.Event.INSERTED); - this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment)); tip.classList.add(CLASS_NAME_SHOW); - var customClass = typeof this.config.customClass === 'function' ? this.config.customClass() : this.config.customClass; - if (customClass) { - var _tip$classList; + const customClass = this._resolvePossibleFunction(this._config.customClass); - (_tip$classList = tip.classList).add.apply(_tip$classList, customClass.split(' ')); + if (customClass) { + tip.classList.add(...customClass.split(' ')); } // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS @@ -613,60 +538,56 @@ if ('ontouchstart' in document.documentElement) { - var _ref; - - (_ref = []).concat.apply(_ref, document.body.children).forEach(function (element) { - EventHandler__default['default'].on(element, 'mouseover', noop()); + [].concat(...document.body.children).forEach(element => { + EventHandler__default['default'].on(element, 'mouseover', noop); }); } - var complete = function complete() { - var prevHoverState = _this2._hoverState; - _this2._hoverState = null; - EventHandler__default['default'].trigger(_this2._element, _this2.constructor.Event.SHOWN); + const complete = () => { + const prevHoverState = this._hoverState; + this._hoverState = null; + EventHandler__default['default'].trigger(this._element, this.constructor.Event.SHOWN); if (prevHoverState === HOVER_STATE_OUT) { - _this2._leave(null, _this2); + this._leave(null, this); } }; - if (this.tip.classList.contains(CLASS_NAME_FADE)) { - var transitionDuration = getTransitionDurationFromElement(this.tip); - EventHandler__default['default'].one(this.tip, 'transitionend', complete); - emulateTransitionEnd(this.tip, transitionDuration); - } else { - complete(); - } - }; + const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE); - _proto.hide = function hide() { - var _this3 = this; + this._queueCallback(complete, this.tip, isAnimated); + } + hide() { if (!this._popper) { return; } - var tip = this.getTipElement(); + const tip = this.getTipElement(); + + const complete = () => { + if (this._isWithActiveTrigger()) { + return; + } - var complete = function complete() { - if (_this3._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); + if (this._hoverState !== HOVER_STATE_SHOW) { + tip.remove(); } - _this3._cleanTipClass(); + this._cleanTipClass(); - _this3._element.removeAttribute('aria-describedby'); + this._element.removeAttribute('aria-describedby'); - EventHandler__default['default'].trigger(_this3._element, _this3.constructor.Event.HIDDEN); + EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDDEN); - if (_this3._popper) { - _this3._popper.destroy(); + if (this._popper) { + this._popper.destroy(); - _this3._popper = null; + this._popper = null; } }; - var hideEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDE); + const hideEvent = EventHandler__default['default'].trigger(this._element, this.constructor.Event.HIDE); if (hideEvent.defaultPrevented) { return; @@ -676,71 +597,72 @@ // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { - var _ref2; - - (_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (element) { - return EventHandler__default['default'].off(element, 'mouseover', noop); - }); + [].concat(...document.body.children).forEach(element => EventHandler__default['default'].off(element, 'mouseover', noop)); } this._activeTrigger[TRIGGER_CLICK] = false; this._activeTrigger[TRIGGER_FOCUS] = false; this._activeTrigger[TRIGGER_HOVER] = false; + const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE); - if (this.tip.classList.contains(CLASS_NAME_FADE)) { - var transitionDuration = getTransitionDurationFromElement(tip); - EventHandler__default['default'].one(tip, 'transitionend', complete); - emulateTransitionEnd(tip, transitionDuration); - } else { - complete(); - } + this._queueCallback(complete, this.tip, isAnimated); this._hoverState = ''; - }; + } - _proto.update = function update() { + update() { if (this._popper !== null) { this._popper.update(); } } // Protected - ; - _proto.isWithContent = function isWithContent() { + + isWithContent() { return Boolean(this.getTitle()); - }; + } - _proto.getTipElement = function getTipElement() { + getTipElement() { if (this.tip) { return this.tip; } - var element = document.createElement('div'); - element.innerHTML = this.config.template; - this.tip = element.children[0]; + const element = document.createElement('div'); + element.innerHTML = this._config.template; + const tip = element.children[0]; + this.setContent(tip); + tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW); + this.tip = tip; return this.tip; - }; + } - _proto.setContent = function setContent() { - var tip = this.getTipElement(); - this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle()); - tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW); - }; + setContent(tip) { + this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER); + } + + _sanitizeAndSetContent(template, content, selector) { + const templateElement = SelectorEngine__default['default'].findOne(selector, template); + + if (!content && templateElement) { + templateElement.remove(); + return; + } // we use append for html objects to maintain js events + + + this.setElementContent(templateElement, content); + } - _proto.setElementContent = function setElementContent(element, content) { + setElementContent(element, content) { if (element === null) { return; } - if (typeof content === 'object' && isElement(content)) { - if (content.jquery) { - content = content[0]; - } // content is a DOM node or a jQuery - + if (isElement(content)) { + content = getElement(content); // content is a DOM node or a jQuery - if (this.config.html) { + if (this._config.html) { if (content.parentNode !== element) { element.innerHTML = ''; - element.appendChild(content); + element.append(content); } } else { element.textContent = content.textContent; @@ -749,28 +671,24 @@ return; } - if (this.config.html) { - if (this.config.sanitize) { - content = sanitizeHtml(content, this.config.allowList, this.config.sanitizeFn); + if (this._config.html) { + if (this._config.sanitize) { + content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn); } element.innerHTML = content; } else { element.textContent = content; } - }; - - _proto.getTitle = function getTitle() { - var title = this._element.getAttribute('data-bs-original-title'); + } - if (!title) { - title = typeof this.config.title === 'function' ? this.config.title.call(this._element) : this.config.title; - } + getTitle() { + const title = this._element.getAttribute('data-bs-original-title') || this._config.title; - return title; - }; + return this._resolvePossibleFunction(title); + } - _proto.updateAttachment = function updateAttachment(attachment) { + updateAttachment(attachment) { if (attachment === 'right') { return 'end'; } @@ -781,50 +699,39 @@ return attachment; } // Private - ; - _proto._initializeOnDelegatedTarget = function _initializeOnDelegatedTarget(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || Data__default['default'].getData(event.delegateTarget, dataKey); - if (!context) { - context = new this.constructor(event.delegateTarget, this._getDelegateConfig()); - Data__default['default'].setData(event.delegateTarget, dataKey, context); - } - - return context; - }; - - _proto._getOffset = function _getOffset() { - var _this4 = this; + _initializeOnDelegatedTarget(event, context) { + return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); + } - var offset = this.config.offset; + _getOffset() { + const { + offset + } = this._config; if (typeof offset === 'string') { - return offset.split(',').map(function (val) { - return Number.parseInt(val, 10); - }); + return offset.split(',').map(val => Number.parseInt(val, 10)); } if (typeof offset === 'function') { - return function (popperData) { - return offset(popperData, _this4._element); - }; + return popperData => offset(popperData, this._element); } return offset; - }; + } - _proto._getPopperConfig = function _getPopperConfig(attachment) { - var _this5 = this; + _resolvePossibleFunction(content) { + return typeof content === 'function' ? content.call(this._element) : content; + } - var defaultBsPopperConfig = { + _getPopperConfig(attachment) { + const defaultBsPopperConfig = { placement: attachment, modifiers: [{ name: 'flip', options: { - altBoundary: true, - fallbackPlacements: this.config.fallbackPlacements + fallbackPlacements: this._config.fallbackPlacements } }, { name: 'offset', @@ -834,93 +741,74 @@ }, { name: 'preventOverflow', options: { - boundary: this.config.boundary + boundary: this._config.boundary } }, { name: 'arrow', options: { - element: "." + this.constructor.NAME + "-arrow" + element: `.${this.constructor.NAME}-arrow` } }, { name: 'onChange', enabled: true, phase: 'afterWrite', - fn: function fn(data) { - return _this5._handlePopperPlacementChange(data); - } + fn: data => this._handlePopperPlacementChange(data) }], - onFirstUpdate: function onFirstUpdate(data) { + onFirstUpdate: data => { if (data.options.placement !== data.placement) { - _this5._handlePopperPlacementChange(data); + this._handlePopperPlacementChange(data); } } }; - return _extends({}, defaultBsPopperConfig, typeof this.config.popperConfig === 'function' ? this.config.popperConfig(defaultBsPopperConfig) : this.config.popperConfig); - }; - - _proto._addAttachmentClass = function _addAttachmentClass(attachment) { - this.getTipElement().classList.add(CLASS_PREFIX + "-" + this.updateAttachment(attachment)); - }; - - _proto._getContainer = function _getContainer() { - if (this.config.container === false) { - return document.body; - } - - if (isElement(this.config.container)) { - return this.config.container; - } + return { ...defaultBsPopperConfig, + ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) + }; + } - return SelectorEngine__default['default'].findOne(this.config.container); - }; + _addAttachmentClass(attachment) { + this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`); + } - _proto._getAttachment = function _getAttachment(placement) { + _getAttachment(placement) { return AttachmentMap[placement.toUpperCase()]; - }; + } - _proto._setListeners = function _setListeners() { - var _this6 = this; + _setListeners() { + const triggers = this._config.trigger.split(' '); - var triggers = this.config.trigger.split(' '); - triggers.forEach(function (trigger) { + triggers.forEach(trigger => { if (trigger === 'click') { - EventHandler__default['default'].on(_this6._element, _this6.constructor.Event.CLICK, _this6.config.selector, function (event) { - return _this6.toggle(event); - }); + EventHandler__default['default'].on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event)); } else if (trigger !== TRIGGER_MANUAL) { - var eventIn = trigger === TRIGGER_HOVER ? _this6.constructor.Event.MOUSEENTER : _this6.constructor.Event.FOCUSIN; - var eventOut = trigger === TRIGGER_HOVER ? _this6.constructor.Event.MOUSELEAVE : _this6.constructor.Event.FOCUSOUT; - EventHandler__default['default'].on(_this6._element, eventIn, _this6.config.selector, function (event) { - return _this6._enter(event); - }); - EventHandler__default['default'].on(_this6._element, eventOut, _this6.config.selector, function (event) { - return _this6._leave(event); - }); + const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN; + const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT; + EventHandler__default['default'].on(this._element, eventIn, this._config.selector, event => this._enter(event)); + EventHandler__default['default'].on(this._element, eventOut, this._config.selector, event => this._leave(event)); } }); - this._hideModalHandler = function () { - if (_this6._element) { - _this6.hide(); + this._hideModalHandler = () => { + if (this._element) { + this.hide(); } }; - EventHandler__default['default'].on(this._element.closest("." + CLASS_NAME_MODAL), 'hide.bs.modal', this._hideModalHandler); + EventHandler__default['default'].on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); - if (this.config.selector) { - this.config = _extends({}, this.config, { + if (this._config.selector) { + this._config = { ...this._config, trigger: 'manual', selector: '' - }); + }; } else { this._fixTitle(); } - }; + } - _proto._fixTitle = function _fixTitle() { - var title = this._element.getAttribute('title'); + _fixTitle() { + const title = this._element.getAttribute('title'); - var originalTitleType = typeof this._element.getAttribute('data-bs-original-title'); + const originalTitleType = typeof this._element.getAttribute('data-bs-original-title'); if (title || originalTitleType !== 'string') { this._element.setAttribute('data-bs-original-title', title || ''); @@ -931,9 +819,9 @@ this._element.setAttribute('title', ''); } - }; + } - _proto._enter = function _enter(event, context) { + _enter(event, context) { context = this._initializeOnDelegatedTarget(event, context); if (event) { @@ -948,23 +836,23 @@ clearTimeout(context._timeout); context._hoverState = HOVER_STATE_SHOW; - if (!context.config.delay || !context.config.delay.show) { + if (!context._config.delay || !context._config.delay.show) { context.show(); return; } - context._timeout = setTimeout(function () { + context._timeout = setTimeout(() => { if (context._hoverState === HOVER_STATE_SHOW) { context.show(); } - }, context.config.delay.show); - }; + }, context._config.delay.show); + } - _proto._leave = function _leave(event, context) { + _leave(event, context) { context = this._initializeOnDelegatedTarget(event, context); if (event) { - context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false; + context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); } if (context._isWithActiveTrigger()) { @@ -974,41 +862,40 @@ clearTimeout(context._timeout); context._hoverState = HOVER_STATE_OUT; - if (!context.config.delay || !context.config.delay.hide) { + if (!context._config.delay || !context._config.delay.hide) { context.hide(); return; } - context._timeout = setTimeout(function () { + context._timeout = setTimeout(() => { if (context._hoverState === HOVER_STATE_OUT) { context.hide(); } - }, context.config.delay.hide); - }; + }, context._config.delay.hide); + } - _proto._isWithActiveTrigger = function _isWithActiveTrigger() { - for (var trigger in this._activeTrigger) { + _isWithActiveTrigger() { + for (const trigger in this._activeTrigger) { if (this._activeTrigger[trigger]) { return true; } } return false; - }; + } - _proto._getConfig = function _getConfig(config) { - var dataAttributes = Manipulator__default['default'].getDataAttributes(this._element); - Object.keys(dataAttributes).forEach(function (dataAttr) { + _getConfig(config) { + const dataAttributes = Manipulator__default['default'].getDataAttributes(this._element); + Object.keys(dataAttributes).forEach(dataAttr => { if (DISALLOWED_ATTRIBUTES.has(dataAttr)) { delete dataAttributes[dataAttr]; } }); - - if (config && typeof config.container === 'object' && config.container.jquery) { - config.container = config.container[0]; - } - - config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); + config = { ...this.constructor.Default, + ...dataAttributes, + ...(typeof config === 'object' && config ? config : {}) + }; + config.container = config.container === false ? document.body : getElement(config.container); if (typeof config.delay === 'number') { config.delay = { @@ -1032,37 +919,41 @@ } return config; - }; + } - _proto._getDelegateConfig = function _getDelegateConfig() { - var config = {}; + _getDelegateConfig() { + const config = {}; - if (this.config) { - for (var key in this.config) { - if (this.constructor.Default[key] !== this.config[key]) { - config[key] = this.config[key]; - } + for (const key in this._config) { + if (this.constructor.Default[key] !== this._config[key]) { + config[key] = this._config[key]; } - } + } // In the future can be replaced with: + // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) + // `Object.fromEntries(keysWithDifferentValues)` + return config; - }; + } - _proto._cleanTipClass = function _cleanTipClass() { - var tip = this.getTipElement(); - var tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX); + _cleanTipClass() { + const tip = this.getTipElement(); + const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g'); + const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex); if (tabClass !== null && tabClass.length > 0) { - tabClass.map(function (token) { - return token.trim(); - }).forEach(function (tClass) { - return tip.classList.remove(tClass); - }); + tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass)); } - }; + } - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { - var state = popperData.state; + _getBasicClassPrefix() { + return CLASS_PREFIX; + } + + _handlePopperPlacementChange(popperData) { + const { + state + } = popperData; if (!state) { return; @@ -1074,66 +965,23 @@ this._addAttachmentClass(this._getAttachment(state.placement)); } // Static - ; - Tooltip.jQueryInterface = function jQueryInterface(config) { - return this.each(function () { - var data = Data__default['default'].getData(this, DATA_KEY); - var _config = typeof config === 'object' && config; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Tooltip(this, _config); - } + static jQueryInterface(config) { + return this.each(function () { + const data = Tooltip.getOrCreateInstance(this, config); if (typeof config === 'string') { if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); + throw new TypeError(`No method named "${config}"`); } data[config](); } }); - }; - - _createClass(Tooltip, null, [{ - key: "Default", - get: function get() { - return Default; - } - }, { - key: "NAME", - get: function get() { - return NAME; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY; - } - }, { - key: "Event", - get: function get() { - return Event$1; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType; - } - }]); + } - return Tooltip; - }(BaseComponent__default['default']); + } /** * ------------------------------------------------------------------------ * jQuery @@ -1142,7 +990,7 @@ */ - defineJQueryPlugin(NAME, Tooltip); + defineJQueryPlugin(Tooltip); return Tooltip; |
