Преглед изворни кода

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 пре 21 часа
родитељ
комит
3910990f64
5 измењених фајлова са 12 додато и 12 уклоњено
  1. 3 5
      dist/js/adminlte.js
  2. 0 0
      dist/js/adminlte.js.map
  3. 0 0
      dist/js/adminlte.min.js
  4. 0 0
      dist/js/adminlte.min.js.map
  5. 9 7
      src/ts/accessibility.ts

+ 3 - 5
dist/js/adminlte.js

@@ -785,13 +785,11 @@
         }
         }
         handleEscapeKey(event) {
         handleEscapeKey(event) {
             const activeModal = document.querySelector('.modal.show');
             const activeModal = document.querySelector('.modal.show');
-            const activeDropdown = document.querySelector('.dropdown-menu.show');
             if (activeModal) {
             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"]');
                 const toggleButton = document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]');
                 toggleButton?.click();
                 toggleButton?.click();
                 event.preventDefault();
                 event.preventDefault();

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/adminlte.js.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/adminlte.min.js


Разлика између датотеке није приказан због своје велике величине
+ 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 {
   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 activeModal = document.querySelector('.modal.show')
-    const activeDropdown = document.querySelector('.dropdown-menu.show')
-    
+
     if (activeModal) {
     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
       const toggleButton = document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]') as HTMLElement
       toggleButton?.click()
       toggleButton?.click()
       event.preventDefault()
       event.preventDefault()

Неке датотеке нису приказане због велике количине промена