Compare commits

...

12 Commits

Author SHA1 Message Date
Son Tung Ngo
c4f8cc84cf
Merge 0546612a5f36c56cffc67131b5acb0a2b6bc1b0d into 0458e76ec1e51c3b8edcecfeb43feea58143f36d 2025-09-24 13:11:05 -07:00
Son Tung Ngo
0546612a5f
Fix syntax error in toggle between modals test 2022-10-04 21:29:20 +02:00
Son Tung Ngo
a67e31d8ef
Merge branch 'main' into fix-missing-modal-open-class 2022-10-04 21:10:28 +02:00
XhmikosR
9be9011887
Merge branch 'main' into fix-missing-modal-open-class 2022-09-09 18:12:41 +03:00
Son Tung Ngo
e0eac4c347
Shorten test case codes to check for modal-open class
Update code to review suggestion.

Co-authored-by: GeoSot <geo.sotis@gmail.com>
2022-09-08 21:21:32 +02:00
Son Tung Ngo
b38c18ecaf
Add test case when toggle between modals
Check for modal-open class when toggle between modals.
2022-09-06 22:04:57 +02:00
Son Tung Ngo
4d0c8fee96
remove modal-open class before backdrop is hidden 2022-09-06 21:52:07 +02:00
Son Tung Ngo
5b36b577c9
Add modal-open class when transition is complete 2022-09-02 11:54:56 +02:00
Son Tung Ngo
1617753be2
Merge branch 'main' into fix-missing-modal-open-class 2022-09-02 11:39:06 +02:00
XhmikosR
2f825f4323
Merge branch 'main' into fix-missing-modal-open-class 2022-07-20 18:10:45 +03:00
Son Tung Ngo
05e9eec142
Add test to check for modal-open class for modal
Make sure the `open-modal` class is removed or added to `body` when a modal is open or closed.
2022-07-20 10:22:57 +02:00
Son Tung Ngo
e4e92aae56
Fix missing modal-open class when toggle modals 2022-07-14 12:24:01 +02:00
2 changed files with 38 additions and 4 deletions

View File

@ -112,9 +112,6 @@ class Modal extends BaseComponent {
this._isTransitioning = true
this._scrollBar.hide()
document.body.classList.add(CLASS_NAME_OPEN)
this._adjustDialog()
this._backdrop.show(() => this._showElement(relatedTarget))
@ -190,6 +187,8 @@ class Modal extends BaseComponent {
this._element.classList.add(CLASS_NAME_SHOW)
const transitionComplete = () => {
document.body.classList.add(CLASS_NAME_OPEN)
if (this._config.focus) {
this._focustrap.activate()
}
@ -249,8 +248,9 @@ class Modal extends BaseComponent {
this._element.removeAttribute('role')
this._isTransitioning = false
this._backdrop.hide(() => {
document.body.classList.remove(CLASS_NAME_OPEN)
this._backdrop.hide(() => {
this._resetAdjustments()
this._scrollBar.reset()
EventHandler.trigger(this._element, EVENT_HIDDEN)

View File

@ -100,6 +100,7 @@ describe('Modal', () => {
expect(modalEl.getAttribute('aria-hidden')).toBeNull()
expect(modalEl.style.display).toEqual('block')
expect(document.querySelector('.modal-backdrop')).not.toBeNull()
expect(document.body).toHaveClasss('modal-open')
resolve()
})
@ -702,6 +703,7 @@ describe('Modal', () => {
expect(modalEl.getAttribute('aria-hidden')).toEqual('true')
expect(modalEl.style.display).toEqual('none')
expect(backdropSpy).toHaveBeenCalled()
expect(document.body).not.toHaveClass('modal-open')
resolve()
})
@ -1326,4 +1328,36 @@ describe('Modal', () => {
expect(modal2._config.backdrop).toBeTrue()
})
})
describe('toggle between modals', () => {
it('should toggle modal-open class on body', () => {
return new Promise(resolve => {
fixtureEl.innerHTML = [
'<button data-bs-toggle="modal" data-bs-target="#exampleModalToggle2"></button>',
'<div id="exampleModalToggle" class="modal fade"><div class="modal-dialog"></div></div>',
'<div id="exampleModalToggle2" class="modal"><div class="modal-dialog"></div></div>'
].join('')
const trigger = fixtureEl.querySelector('button')
const modalEl1 = document.querySelector('#exampleModalToggle')
const modalEl2 = document.querySelector('#exampleModalToggle2')
const modal1 = new Modal(modalEl1)
modalEl1.addEventListener('shown.bs.modal', () => {
expect(document.body).toHaveClass('modal-open')
setTimeout(() => trigger.click(), 10)
})
modalEl1.addEventListener('hidden.bs.modal', () => {
expect(document.body).not.toHaveClass('modal-open')
})
modalEl2.addEventListener('shown.bs.modal', () => {
expect(document.body).toHaveClass('modal-open')
resolve()
})
modal1.show()
})
})
})
})