if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event)
+ context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])
context.toggle()
})
} else if (trigger !== TRIGGER_MANUAL) {
import EventHandler from '../../src/dom/event-handler.js'
import Popover from '../../src/popover.js'
-import { clearFixture, getFixture, jQueryMock } from '../helpers/fixture.js'
+import {
+ clearFixture, getFixture, jQueryMock, createEvent
+} from '../helpers/fixture.js'
describe('Popover', () => {
let fixtureEl
popover.show()
})
})
+
+ it('should keep popover open when mouse leaves after click trigger', () => {
+ return new Promise(resolve => {
+ fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://x.com/getbootstrap" data-bs-trigger="hover click">BS X</a>'
+
+ const popoverEl = fixtureEl.querySelector('a')
+ new Popover(popoverEl) // eslint-disable-line no-new
+
+ popoverEl.addEventListener('shown.bs.popover', () => {
+ popoverEl.dispatchEvent(createEvent('mouseout'))
+
+ popoverEl.addEventListener('hide.bs.popover', () => {
+ throw new Error('Popover should not hide when mouse leaves after click')
+ })
+
+ expect(document.querySelector('.popover')).not.toBeNull()
+ resolve()
+ })
+
+ popoverEl.click()
+ })
+ })
})
describe('hide', () => {