1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-09-26 13:29:06 +02:00

Move get element functionality to a helper (#33327)

Looking around on js components I found out many checks, different expressed but with same purpose.
Some of them are trying to parse string to element, others, jQuery element to js simple nodeElement etc

With this Pr, I am trying to give a standard way to parse an element

So this pr:

* Creates `getElement` helper that tries to parse an argument to element or null
* Changes `isElement` to make  explicit checks and return Boolean 
* fixes tests deficiencies
This commit is contained in:
GeoSot
2021-05-13 18:17:20 +03:00
committed by GitHub
parent e376142d85
commit 6e1c9096f0
8 changed files with 85 additions and 49 deletions

View File

@@ -10,6 +10,7 @@ import * as Popper from '@popperjs/core'
import {
defineJQueryPlugin,
findShadowRoot,
getElement,
getUID,
isElement,
isRTL,
@@ -256,7 +257,7 @@ class Tooltip extends BaseComponent {
const attachment = this._getAttachment(placement)
this._addAttachmentClass(attachment)
const container = this._getContainer()
const { container } = this._config
Data.set(tip, this.constructor.DATA_KEY, this)
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
@@ -385,10 +386,8 @@ class Tooltip extends BaseComponent {
return
}
if (typeof content === 'object' && isElement(content)) {
if (content.jquery) {
content = content[0]
}
if (isElement(content)) {
content = getElement(content)
// content is a DOM node or a jQuery
if (this._config.html) {
@@ -518,18 +517,6 @@ class Tooltip extends BaseComponent {
this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`)
}
_getContainer() {
if (this._config.container === false) {
return document.body
}
if (isElement(this._config.container)) {
return this._config.container
}
return SelectorEngine.findOne(this._config.container)
}
_getAttachment(placement) {
return AttachmentMap[placement.toUpperCase()]
}
@@ -664,16 +651,14 @@ class Tooltip extends BaseComponent {
}
})
if (config && typeof config.container === 'object' && config.container.jquery) {
config.container = config.container[0]
}
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 = {
show: config.delay,