WIP bubbling events

This commit is contained in:
Nathan Sarang-Walters 2024-06-20 16:04:41 -07:00
parent d2d4581790
commit 48f6fb8135
No known key found for this signature in database
GPG Key ID: D5486C14E4309B0E
6 changed files with 31 additions and 39 deletions

View File

@ -181,7 +181,7 @@ function addHandler(element, originalTypeEvent, handler, delegationFunction, one
fn.uidEvent = uid
handlers[uid] = fn
element.addEventListener(typeEvent, fn, isDelegated)
element.addEventListener(typeEvent, fn, false)
}
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
@ -191,7 +191,7 @@ function removeHandler(element, events, typeEvent, handler, delegationSelector)
return
}
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))
element.removeEventListener(typeEvent, fn, false)
delete events[typeEvent][fn.uidEvent]
}

View File

@ -514,28 +514,20 @@ describe('Collapse', () => {
describe('data-api', () => {
it('should prevent url change if click on nested elements', () => {
return new Promise(resolve => {
fixtureEl.innerHTML = [
'<a role="button" data-bs-toggle="collapse" class="collapsed" href="#collapse">',
' <span id="nested"></span>',
'</a>',
'<div id="collapse" class="collapse"></div>'
].join('')
fixtureEl.innerHTML = [
'<a role="button" data-bs-toggle="collapse" class="collapsed" href="#collapse">',
' <span id="nested"></span>',
'</a>',
'<div id="collapse" class="collapse"></div>'
].join('')
const triggerEl = fixtureEl.querySelector('a')
const nestedTriggerEl = fixtureEl.querySelector('#nested')
const nestedTriggerEl = fixtureEl.querySelector('#nested')
const spy = spyOn(Event.prototype, 'preventDefault').and.callThrough()
const spy = spyOn(Event.prototype, 'preventDefault').and.callThrough()
triggerEl.addEventListener('click', event => {
expect(event.target.isEqualNode(nestedTriggerEl)).toBeTrue()
expect(event.delegateTarget.isEqualNode(triggerEl)).toBeTrue()
expect(spy).toHaveBeenCalled()
resolve()
})
nestedTriggerEl.click()
nestedTriggerEl.click()
})
expect(spy).toHaveBeenCalled()
})
it('should show multiple collapsed elements', () => {

View File

@ -1567,7 +1567,7 @@ describe('Dropdown', () => {
})
triggerDropdown.addEventListener('shown.bs.dropdown', () => {
const keydown = createEvent('keydown')
const keydown = createEvent('keydown', { bubbles: true })
keydown.key = 'Escape'
triggerDropdown.dispatchEvent(keydown)
@ -1782,7 +1782,7 @@ describe('Dropdown', () => {
})
})
const keydown = createEvent('keydown')
const keydown = createEvent('keydown', { bubbles: true })
keydown.key = 'ArrowUp'
triggerDropdown.dispatchEvent(keydown)
})
@ -1810,7 +1810,7 @@ describe('Dropdown', () => {
})
})
const keydown = createEvent('keydown')
const keydown = createEvent('keydown', { bubbles: true })
keydown.key = 'ArrowDown'
triggerDropdown.dispatchEvent(keydown)
})
@ -1919,14 +1919,14 @@ describe('Dropdown', () => {
const textarea = fixtureEl.querySelector('textarea')
const test = (eventKey, elementToDispatch) => {
const event = createEvent('keydown')
const event = createEvent('keydown', { bubbles: true })
event.key = eventKey
elementToDispatch.focus()
elementToDispatch.dispatchEvent(event)
expect(document.activeElement).toEqual(elementToDispatch, `${elementToDispatch.tagName} still focused`)
}
const keydownEscape = createEvent('keydown')
const keydownEscape = createEvent('keydown', { bubbles: true })
keydownEscape.key = 'Escape'
triggerDropdown.addEventListener('shown.bs.dropdown', () => {
@ -2348,10 +2348,10 @@ describe('Dropdown', () => {
const triggerDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]')
const dropdown = fixtureEl.querySelector('.dropdown')
const keydown = createEvent('keydown')
const keydown = createEvent('keydown', { bubbles: true })
keydown.key = 'ArrowDown'
const keyup = createEvent('keyup')
const keyup = createEvent('keyup', { bubbles: true })
keyup.key = 'ArrowUp'
const handleArrowDown = () => {

View File

@ -246,7 +246,7 @@ describe('Toast', () => {
resolve()
})
const mouseOverEvent = createEvent('mouseover')
const mouseOverEvent = createEvent('mouseover', { bubbles: true })
toastEl.dispatchEvent(mouseOverEvent)
}, toast._config.delay / 2)
@ -309,7 +309,7 @@ describe('Toast', () => {
})
toastEl.addEventListener('focusin', () => {
const mouseOutEvent = createEvent('mouseout')
const mouseOutEvent = createEvent('mouseout', { bubbles: true })
toastEl.dispatchEvent(mouseOutEvent)
})
@ -323,7 +323,7 @@ describe('Toast', () => {
resolve()
})
const mouseOverEvent = createEvent('mouseover')
const mouseOverEvent = createEvent('mouseover', { bubbles: true })
toastEl.dispatchEvent(mouseOverEvent)
}, toast._config.delay / 2)
@ -362,7 +362,7 @@ describe('Toast', () => {
resolve()
})
const mouseOverEvent = createEvent('mouseover')
const mouseOverEvent = createEvent('mouseover', { bubbles: true })
toastEl.dispatchEvent(mouseOverEvent)
}, toast._config.delay / 2)
@ -392,7 +392,7 @@ describe('Toast', () => {
})
toastEl.addEventListener('focusin', () => {
const mouseOutEvent = createEvent('mouseout')
const mouseOutEvent = createEvent('mouseout', { bubbles: true })
toastEl.dispatchEvent(mouseOutEvent)
})
@ -401,7 +401,7 @@ describe('Toast', () => {
resolve()
})
const mouseOverEvent = createEvent('mouseover')
const mouseOverEvent = createEvent('mouseover', { bubbles: true })
toastEl.dispatchEvent(mouseOverEvent)
}, toast._config.delay / 2)

View File

@ -39,7 +39,7 @@ describe('Plugin functions', () => {
const spyTest = spyOn(DummyClass2.prototype, 'testMethod')
const componentWrapper = fixtureEl.querySelector('#foo')
const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]')
const event = createEvent('click')
const event = createEvent('click', { bubbles: true })
enableDismissTrigger(DummyClass2, 'testMethod')
btnClose.dispatchEvent(event)
@ -59,7 +59,7 @@ describe('Plugin functions', () => {
const spyHide = spyOn(DummyClass2.prototype, 'hide')
const componentWrapper = fixtureEl.querySelector('#foo')
const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]')
const event = createEvent('click')
const event = createEvent('click', { bubbles: true })
enableDismissTrigger(DummyClass2)
btnClose.dispatchEvent(event)
@ -77,7 +77,7 @@ describe('Plugin functions', () => {
const spy = spyOn(DummyClass2, 'getOrCreateInstance').and.callThrough()
const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]')
const event = createEvent('click')
const event = createEvent('click', { bubbles: true })
enableDismissTrigger(DummyClass2)
btnClose.dispatchEvent(event)
@ -93,7 +93,7 @@ describe('Plugin functions', () => {
].join('')
const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]')
const event = createEvent('click')
const event = createEvent('click', { bubbles: true })
enableDismissTrigger(DummyClass2)
const spy = spyOn(Event.prototype, 'preventDefault').and.callThrough()

View File

@ -107,7 +107,7 @@ describe('FocusTrap', () => {
first.addEventListener('focusin', focusInListener)
const keydown = createEvent('keydown')
const keydown = createEvent('keydown', { bubbles: true })
keydown.key = 'Tab'
document.dispatchEvent(keydown)
@ -146,7 +146,7 @@ describe('FocusTrap', () => {
last.addEventListener('focusin', focusInListener)
const keydown = createEvent('keydown')
const keydown = createEvent('keydown', { bubbles: true })
keydown.key = 'Tab'
keydown.shiftKey = true