0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-02-26 23:54:23 +01:00

Fix popover doesn't show if its content or title is set dynamically after init

This commit is contained in:
Dmitry Sergienko 2024-09-19 12:36:59 +04:00
parent 523493d096
commit 6579b9a674
2 changed files with 22 additions and 2 deletions

View File

@ -186,14 +186,14 @@ class Tooltip extends BaseComponent {
throw new Error('Please use show on visible elements')
}
if (!(this._isWithContent() && this._isEnabled)) {
if (!((this._isWithContent() || this._newContent != null) && this._isEnabled)) {
return
}
const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))
const shadowRoot = findShadowRoot(this._element)
const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)
if (showEvent.defaultPrevented || !isInTheDom) {
return
}

View File

@ -56,6 +56,26 @@ describe('Popover', () => {
})
describe('show', () => {
fit('should show a popover with no content after setContent', () => {
return new Promise(resolve => {
fixtureEl.innerHTML = '<a href="#">BS twitter</a>'
const popoverEl = fixtureEl.querySelector('a')
const popover = Popover.getOrCreateInstance(popoverEl)
popoverEl.addEventListener('shown.bs.popover', () => {
expect(document.querySelector('.popover')).not.toBeNull()
resolve()
})
popover.setContent({
'.popover-body': 'some content'
})
popover.show()
})
})
it('should toggle a popover after show', () => {
return new Promise(resolve => {
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://twitter.com/getbootstrap">BS twitter</a>'