mirror of
https://github.com/twbs/bootstrap.git
synced 2025-08-11 08:04:59 +02:00
Prevent overflowing static backdrop modal animation (#30326)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
This commit is contained in:
@@ -409,10 +409,23 @@ class Modal {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
|
||||||
|
|
||||||
|
if (!isModalOverflowing) {
|
||||||
|
this._element.style.overflowY = 'hidden'
|
||||||
|
}
|
||||||
|
|
||||||
this._element.classList.add(CLASS_NAME_STATIC)
|
this._element.classList.add(CLASS_NAME_STATIC)
|
||||||
const modalTransitionDuration = getTransitionDurationFromElement(this._element)
|
const modalTransitionDuration = getTransitionDurationFromElement(this._dialog)
|
||||||
|
EventHandler.off(this._element, TRANSITION_END)
|
||||||
EventHandler.one(this._element, TRANSITION_END, () => {
|
EventHandler.one(this._element, TRANSITION_END, () => {
|
||||||
this._element.classList.remove(CLASS_NAME_STATIC)
|
this._element.classList.remove(CLASS_NAME_STATIC)
|
||||||
|
if (!isModalOverflowing) {
|
||||||
|
EventHandler.one(this._element, TRANSITION_END, () => {
|
||||||
|
this._element.style.overflowY = ''
|
||||||
|
})
|
||||||
|
emulateTransitionEnd(this._element, modalTransitionDuration)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
emulateTransitionEnd(this._element, modalTransitionDuration)
|
emulateTransitionEnd(this._element, modalTransitionDuration)
|
||||||
this._element.focus()
|
this._element.focus()
|
||||||
|
@@ -626,6 +626,25 @@ describe('Modal', () => {
|
|||||||
modal.show()
|
modal.show()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should not overflow when clicking outside of modal-content if backdrop = static', done => {
|
||||||
|
fixtureEl.innerHTML = '<div class="modal" data-backdrop="static"><div class="modal-dialog" style="transition-duration: 20ms;"></div></div>'
|
||||||
|
|
||||||
|
const modalEl = fixtureEl.querySelector('.modal')
|
||||||
|
const modal = new Modal(modalEl, {
|
||||||
|
backdrop: 'static'
|
||||||
|
})
|
||||||
|
|
||||||
|
modalEl.addEventListener('shown.bs.modal', () => {
|
||||||
|
modalEl.click()
|
||||||
|
setTimeout(() => {
|
||||||
|
expect(modalEl.clientHeight === modalEl.scrollHeight).toEqual(true)
|
||||||
|
done()
|
||||||
|
}, 20)
|
||||||
|
})
|
||||||
|
|
||||||
|
modal.show()
|
||||||
|
})
|
||||||
|
|
||||||
it('should not adjust the inline body padding when it does not overflow', done => {
|
it('should not adjust the inline body padding when it does not overflow', done => {
|
||||||
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
|
fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user