Skip to content

Commit 6ed1cdd

Browse files
GeoSotjulien-deramondXhmikosR
authoredFeb 18, 2024··
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>
1 parent 1bc85bf commit 6ed1cdd

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed
 

‎js/src/dom/selector-engine.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ const getSelector = element => {
2626
hrefAttribute = `#${hrefAttribute.split('#')[1]}`
2727
}
2828

29-
selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null
29+
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
3030
}
3131

32-
return selector
32+
return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null
3333
}
3434

3535
const SelectorEngine = {

‎js/tests/unit/dom/selector-engine.spec.js

+12
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,18 @@ describe('SelectorEngine', () => {
371371
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
372372
})
373373

374+
it('should get elements if several ids with special chars are given', () => {
375+
fixtureEl.innerHTML = [
376+
'<div id="test" data-bs-target="#j_id11:exampleModal,#j_id22:exampleModal"></div>',
377+
'<div class="target" id="j_id11:exampleModal"></div>',
378+
'<div class="target" id="j_id22:exampleModal"></div>'
379+
].join('')
380+
381+
const testEl = fixtureEl.querySelector('#test')
382+
383+
expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
384+
})
385+
374386
it('should get elements in array, from href if no data-bs-target set', () => {
375387
fixtureEl.innerHTML = [
376388
'<a id="test" href=".target"></a>',

‎js/tests/unit/modal.spec.js

+29
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,35 @@ describe('Modal', () => {
991991
trigger.click()
992992
})
993993
})
994+
995+
it('should open modal, having special characters in its id', () => {
996+
return new Promise(resolve => {
997+
fixtureEl.innerHTML = [
998+
'<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#j_id22:exampleModal">',
999+
' Launch demo modal',
1000+
'</button>',
1001+
'<div class="modal fade" id="j_id22:exampleModal" aria-labelledby="exampleModalLabel" aria-hidden="true">',
1002+
' <div class="modal-dialog">',
1003+
' <div class="modal-content">',
1004+
' <div class="modal-body">',
1005+
' <p>modal body</p>',
1006+
' </div>',
1007+
' </div>',
1008+
' </div>',
1009+
'</div>'
1010+
].join('')
1011+
1012+
const modalEl = fixtureEl.querySelector('.modal')
1013+
const trigger = fixtureEl.querySelector('[data-bs-toggle="modal"]')
1014+
1015+
modalEl.addEventListener('shown.bs.modal', () => {
1016+
resolve()
1017+
})
1018+
1019+
trigger.click()
1020+
})
1021+
})
1022+
9941023
it('should not prevent default when a click occurred on data-bs-dismiss="modal" where tagName is DIFFERENT than <a> or <area>', () => {
9951024
return new Promise(resolve => {
9961025
fixtureEl.innerHTML = [

0 commit comments

Comments
 (0)
Please sign in to comment.