Przeglądaj źródła

fix(js): stop handleEscapeKey from bypassing Bootstrap modal keyboard option (#5993)

AdminLTE's accessibility Escape handler was overriding Bootstrap's
native modal keyboard behavior, ignoring keyboard: false and closing
all stacked modals. Now defers to Bootstrap when a modal is open.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Aigars Silkalns 20 godzin temu
rodzic
commit
3910990f64

+ 3 - 5
dist/js/adminlte.js

@@ -785,13 +785,11 @@
         }
         handleEscapeKey(event) {
             const activeModal = document.querySelector('.modal.show');
-            const activeDropdown = document.querySelector('.dropdown-menu.show');
             if (activeModal) {
-                const closeButton = activeModal.querySelector('[data-bs-dismiss="modal"]');
-                closeButton?.click();
-                event.preventDefault();
+                return;
             }
-            else if (activeDropdown) {
+            const activeDropdown = document.querySelector('.dropdown-menu.show');
+            if (activeDropdown) {
                 const toggleButton = document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]');
                 toggleButton?.click();
                 event.preventDefault();

Plik diff jest za duży
+ 0 - 0
dist/js/adminlte.js.map


Plik diff jest za duży
+ 0 - 0
dist/js/adminlte.min.js


Plik diff jest za duży
+ 0 - 0
dist/js/adminlte.min.js.map


+ 9 - 7
src/ts/accessibility.ts

@@ -159,15 +159,17 @@ export class AccessibilityManager {
   }
 
   private handleEscapeKey(event: KeyboardEvent): void {
-    // Close modals, dropdowns, etc.
+    // Close dropdowns, but let Bootstrap handle its own modal keyboard behavior
     const activeModal = document.querySelector('.modal.show')
-    const activeDropdown = document.querySelector('.dropdown-menu.show')
-    
+
     if (activeModal) {
-      const closeButton = activeModal.querySelector('[data-bs-dismiss="modal"]') as HTMLElement
-      closeButton?.click()
-      event.preventDefault()
-    } else if (activeDropdown) {
+      // Do not interfere — Bootstrap handles Escape for modals,
+      // including respecting keyboard: false and stacked modals
+      return
+    }
+
+    const activeDropdown = document.querySelector('.dropdown-menu.show')
+    if (activeDropdown) {
       const toggleButton = document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]') as HTMLElement
       toggleButton?.click()
       event.preventDefault()

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików