]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
fix: change dismiss handler, listening to key down, instead of click (#36401)
authorGeoSot <geo.sotis@gmail.com>
Tue, 21 Jun 2022 08:03:57 +0000 (11:03 +0300)
committerGitHub <noreply@github.com>
Tue, 21 Jun 2022 08:03:57 +0000 (11:03 +0300)
js/src/modal.js
js/tests/unit/modal.spec.js

index d3f0540bb8b9c3c91ff3c71810e671d65c16d698..6efb13d9d585d0d5e1873016c765796756596e71 100644 (file)
@@ -30,7 +30,7 @@ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
 const EVENT_SHOW = `show${EVENT_KEY}`
 const EVENT_SHOWN = `shown${EVENT_KEY}`
 const EVENT_RESIZE = `resize${EVENT_KEY}`
-const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
+const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
 const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
 const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
 
@@ -221,7 +221,7 @@ class Modal extends BaseComponent {
       }
     })
 
-    EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
+    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
       if (event.target !== event.currentTarget) { // click is inside modal-dialog
         return
       }
index 318410a8c4c17a26d3903cde45af61bc6632d96c..9e463d2be3bb1f73899f001ecf1d45bc8e915dc8 100644 (file)
@@ -641,9 +641,10 @@ describe('Modal', () => {
 
         modalEl.addEventListener('shown.bs.modal', () => {
           const spy = spyOn(modal, '_queueCallback').and.callThrough()
+          const mouseDown = createEvent('mousedown')
 
-          modalEl.click()
-          modalEl.click()
+          modalEl.dispatchEvent(mouseDown)
+          modalEl.dispatchEvent(mouseDown)
 
           setTimeout(() => {
             expect(spy).toHaveBeenCalledTimes(1)
@@ -709,13 +710,19 @@ describe('Modal', () => {
         fixtureEl.innerHTML = '<div class="modal"><div class="modal-dialog"></div></div>'
 
         const modalEl = fixtureEl.querySelector('.modal')
+        const dialogEl = modalEl.querySelector('.modal-dialog')
         const modal = new Modal(modalEl)
+
+        spyOn(modal, 'hide')
+
         modalEl.addEventListener('shown.bs.modal', () => {
-          modalEl.click()
-        })
+          const mouseDown = createEvent('mousedown')
 
-        modalEl.addEventListener('hidden.bs.modal', () => {
-          expect(document.querySelector('.modal-backdrop')).toBeNull()
+          dialogEl.dispatchEvent(mouseDown)
+          expect(modal.hide).not.toHaveBeenCalled()
+
+          modalEl.dispatchEvent(mouseDown)
+          expect(modal.hide).toHaveBeenCalled()
           resolve()
         })