diff options
Diffstat (limited to 'vendor/twbs/bootstrap/js/src/popover.js')
-rw-r--r-- | vendor/twbs/bootstrap/js/src/popover.js | 56 |
1 files changed, 49 insertions, 7 deletions
diff --git a/vendor/twbs/bootstrap/js/src/popover.js b/vendor/twbs/bootstrap/js/src/popover.js index 71c50daf9..5a3b32631 100644 --- a/vendor/twbs/bootstrap/js/src/popover.js +++ b/vendor/twbs/bootstrap/js/src/popover.js @@ -1,11 +1,12 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.1): popover.js + * Bootstrap (v5.0.2): popover.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import { defineJQueryPlugin } from './util/index' +import SelectorEngine from './dom/selector-engine' import Tooltip from './tooltip' /** @@ -18,6 +19,7 @@ const NAME = 'popover' const DATA_KEY = 'bs.popover' const EVENT_KEY = `.${DATA_KEY}` const CLASS_PREFIX = 'bs-popover' +const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') const Default = { ...Tooltip.Default, @@ -50,6 +52,9 @@ const Event = { MOUSELEAVE: `mouseleave${EVENT_KEY}` } +const CLASS_NAME_FADE = 'fade' +const CLASS_NAME_SHOW = 'show' + const SELECTOR_TITLE = '.popover-header' const SELECTOR_CONTENT = '.popover-body' @@ -84,19 +89,56 @@ class Popover extends Tooltip { return this.getTitle() || this._getContent() } - setContent(tip) { - this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE) - this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT) + getTipElement() { + if (this.tip) { + return this.tip + } + + this.tip = super.getTipElement() + + if (!this.getTitle()) { + SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove() + } + + if (!this._getContent()) { + SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove() + } + + return this.tip + } + + setContent() { + const tip = this.getTipElement() + + // we use append for html objects to maintain js events + this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle()) + let content = this._getContent() + if (typeof content === 'function') { + content = content.call(this._element) + } + + this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content) + + tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW) } // Private + _addAttachmentClass(attachment) { + this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`) + } + _getContent() { - return this._resolvePossibleFunction(this._config.content) + return this._element.getAttribute('data-bs-content') || this._config.content } - _getBasicClassPrefix() { - return CLASS_PREFIX + _cleanTipClass() { + const tip = this.getTipElement() + const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX) + if (tabClass !== null && tabClass.length > 0) { + tabClass.map(token => token.trim()) + .forEach(tClass => tip.classList.remove(tClass)) + } } // Static |