mirror of https://github.com/twbs/bootstrap.git
WIP bubbling events
This commit is contained in:
parent
d2d4581790
commit
48f6fb8135
|
@ -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]
|
||||
}
|
||||
|
||||
|
|
|
@ -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', () => {
|
||||
|
|
|
@ -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 = () => {
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue