mirror of https://github.com/twbs/bootstrap.git
Selector Engine: fix multiple IDs (#39201)
* fix: regression of #38989 * Add unit test in selector-engine.spec.js --------- Co-authored-by: Julien Déramond <juderamond@gmail.com> Co-authored-by: XhmikosR <xhmikosr@gmail.com>
This commit is contained in:
parent
1bc85bfe2b
commit
6ed1cdd43e
|
@ -26,10 +26,10 @@ const getSelector = element => {
|
||||||
hrefAttribute = `#${hrefAttribute.split('#')[1]}`
|
hrefAttribute = `#${hrefAttribute.split('#')[1]}`
|
||||||
}
|
}
|
||||||
|
|
||||||
selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null
|
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
|
||||||
}
|
}
|
||||||
|
|
||||||
return selector
|
return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null
|
||||||
}
|
}
|
||||||
|
|
||||||
const SelectorEngine = {
|
const SelectorEngine = {
|
||||||
|
|
|
@ -371,6 +371,18 @@ describe('SelectorEngine', () => {
|
||||||
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
|
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should get elements if several ids with special chars are given', () => {
|
||||||
|
fixtureEl.innerHTML = [
|
||||||
|
'<div id="test" data-bs-target="#j_id11:exampleModal,#j_id22:exampleModal"></div>',
|
||||||
|
'<div class="target" id="j_id11:exampleModal"></div>',
|
||||||
|
'<div class="target" id="j_id22:exampleModal"></div>'
|
||||||
|
].join('')
|
||||||
|
|
||||||
|
const testEl = fixtureEl.querySelector('#test')
|
||||||
|
|
||||||
|
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
|
||||||
|
})
|
||||||
|
|
||||||
it('should get elements in array, from href if no data-bs-target set', () => {
|
it('should get elements in array, from href if no data-bs-target set', () => {
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
'<a id="test" href=".target"></a>',
|
'<a id="test" href=".target"></a>',
|
||||||
|
|
|
@ -991,6 +991,35 @@ describe('Modal', () => {
|
||||||
trigger.click()
|
trigger.click()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should open modal, having special characters in its id', () => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
fixtureEl.innerHTML = [
|
||||||
|
'<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#j_id22:exampleModal">',
|
||||||
|
' Launch demo modal',
|
||||||
|
'</button>',
|
||||||
|
'<div class="modal fade" id="j_id22:exampleModal" aria-labelledby="exampleModalLabel" aria-hidden="true">',
|
||||||
|
' <div class="modal-dialog">',
|
||||||
|
' <div class="modal-content">',
|
||||||
|
' <div class="modal-body">',
|
||||||
|
' <p>modal body</p>',
|
||||||
|
' </div>',
|
||||||
|
' </div>',
|
||||||
|
' </div>',
|
||||||
|
'</div>'
|
||||||
|
].join('')
|
||||||
|
|
||||||
|
const modalEl = fixtureEl.querySelector('.modal')
|
||||||
|
const trigger = fixtureEl.querySelector('[data-bs-toggle="modal"]')
|
||||||
|
|
||||||
|
modalEl.addEventListener('shown.bs.modal', () => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
trigger.click()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('should not prevent default when a click occurred on data-bs-dismiss="modal" where tagName is DIFFERENT than <a> or <area>', () => {
|
it('should not prevent default when a click occurred on data-bs-dismiss="modal" where tagName is DIFFERENT than <a> or <area>', () => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
fixtureEl.innerHTML = [
|
fixtureEl.innerHTML = [
|
||||||
|
|
Loading…
Reference in New Issue