Skip to content

Commit

Permalink
Force tooltip and popover to recreate content every time it opens (#3…
Browse files Browse the repository at this point in the history
  • Loading branch information
GeoSot committed Jun 27, 2022
1 parent f14c58f commit 4f4b42d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 16 deletions.
28 changes: 14 additions & 14 deletions js/src/tooltip.js
Expand Up @@ -115,6 +115,7 @@ class Tooltip extends BaseComponent {
this._activeTrigger = {}
this._popper = null
this._templateFactory = null
this._newContent = null

// Protected
this.tip = null
Expand Down Expand Up @@ -205,6 +206,12 @@ class Tooltip extends BaseComponent {
return
}

// todo v6 remove this OR make it optional
if (this.tip) {
this.tip.remove()
this.tip = null
}

const tip = this._getTipElement()

this._element.setAttribute('aria-describedby', tip.getAttribute('id'))
Expand All @@ -219,7 +226,7 @@ class Tooltip extends BaseComponent {
if (this._popper) {
this._popper.update()
} else {
this._createPopper(tip)
this._popper = this._createPopper(tip)
}

tip.classList.add(CLASS_NAME_SHOW)
Expand Down Expand Up @@ -305,7 +312,7 @@ class Tooltip extends BaseComponent {

_getTipElement() {
if (!this.tip) {
this.tip = this._createTipElement(this._getContentForTemplate())
this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())
}

return this.tip
Expand Down Expand Up @@ -335,17 +342,11 @@ class Tooltip extends BaseComponent {
}

setContent(content) {
let isShown = false
if (this.tip) {
isShown = this._isShown()
this._newContent = content
if (this._isShown()) {
this.tip.remove()
this.tip = null
}

this._disposePopper()
this.tip = this._createTipElement(content)

if (isShown) {
this._disposePopper()
this.show()
}
}
Expand Down Expand Up @@ -373,7 +374,7 @@ class Tooltip extends BaseComponent {
}

_getTitle() {
return this._config.title
return this._resolvePossibleFunction(this._config.title) || this._config.originalTitle
}

// Private
Expand All @@ -394,7 +395,7 @@ class Tooltip extends BaseComponent {
this._config.placement.call(this, tip, this._element) :
this._config.placement
const attachment = AttachmentMap[placement.toUpperCase()]
this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))
return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))
}

_getOffset() {
Expand Down Expand Up @@ -592,7 +593,6 @@ class Tooltip extends BaseComponent {
}

config.originalTitle = this._element.getAttribute('title') || ''
config.title = this._resolvePossibleFunction(config.title) || config.originalTitle
if (typeof config.title === 'number') {
config.title = config.title.toString()
}
Expand Down
6 changes: 4 additions & 2 deletions js/tests/unit/tooltip.spec.js
Expand Up @@ -185,7 +185,7 @@ describe('Tooltip', () => {
const tooltipEl = fixtureEl.querySelector('a')
const tooltip = new Tooltip(tooltipEl)

expect(tooltip._config.title).toEqual('Another tooltip')
expect(tooltip._getTitle()).toEqual('Another tooltip')
})
})

Expand Down Expand Up @@ -848,7 +848,7 @@ describe('Tooltip', () => {
}, 100)

setTimeout(() => {
expect(insertedFunc).toHaveBeenCalledTimes(1)
expect(insertedFunc).toHaveBeenCalledTimes(2)
resolve()
}, 200)
}, 0)
Expand Down Expand Up @@ -1166,6 +1166,7 @@ describe('Tooltip', () => {
tooltip.setContent({ '.tooltip-inner': 'foo' })

expect(tip()).not.toHaveClass('show')
tooltip.show()
expect(tip().querySelector('.tooltip-inner').textContent).toEqual('foo')
})

Expand Down Expand Up @@ -1229,6 +1230,7 @@ describe('Tooltip', () => {
})

tooltip.setContent({ '.tooltip': { 0: childContent, jquery: 'jQuery' } })
tooltip.show()

expect(childContent.parentNode).toEqual(tooltip._getTipElement())
})
Expand Down

0 comments on commit 4f4b42d

Please sign in to comment.