From a5c853891f5d5561eecd1401ddd70712756cbb56 Mon Sep 17 00:00:00 2001 From: Lukas <38840142+lukasstorck@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:52:57 +0100 Subject: [PATCH] fix: focus cancel or ok button on confirm and alert modals when opening the modal: - remember previously focused element - set focused element to the ok or cancel button when closing the modal: - restore the focus to the previously focused element --- src/js/logic/bookmark-pdf.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/js/logic/bookmark-pdf.ts b/src/js/logic/bookmark-pdf.ts index c8c3e94..0425718 100644 --- a/src/js/logic/bookmark-pdf.ts +++ b/src/js/logic/bookmark-pdf.ts @@ -822,6 +822,7 @@ document.addEventListener('DOMContentLoaded', () => { function showConfirmModal(message: string): Promise { return new Promise((resolve) => { + const previousActiveEl = document.activeElement as HTMLButtonElement | null; const overlay = document.createElement('div'); overlay.className = 'modal-overlay'; @@ -842,19 +843,30 @@ function showConfirmModal(message: string): Promise { overlay.appendChild(modal); modalContainer?.appendChild(overlay); - modal.querySelector('#modal-cancel')?.addEventListener('click', () => { + const modalCancelBtn = modal.querySelector( + '#modal-cancel' + ) as HTMLButtonElement | null; + const modalConfirmBtn = modal.querySelector( + '#modal-confirm' + ) as HTMLButtonElement | null; + modalCancelBtn?.focus(); + + modalCancelBtn?.addEventListener('click', () => { modalContainer?.removeChild(overlay); + previousActiveEl?.focus(); resolve(false); }); - modal.querySelector('#modal-confirm')?.addEventListener('click', () => { + modalConfirmBtn?.addEventListener('click', () => { modalContainer?.removeChild(overlay); + previousActiveEl?.focus(); resolve(true); }); overlay.addEventListener('click', (e: MouseEvent) => { if (e.target === overlay) { modalContainer?.removeChild(overlay); + previousActiveEl?.focus(); resolve(false); } }); @@ -863,6 +875,7 @@ function showConfirmModal(message: string): Promise { function showAlertModal(title: string, message: string): Promise { return new Promise((resolve) => { + const previousActiveEl = document.activeElement as HTMLButtonElement | null; const overlay = document.createElement('div'); overlay.className = 'modal-overlay'; @@ -882,14 +895,19 @@ function showAlertModal(title: string, message: string): Promise { overlay.appendChild(modal); modalContainer?.appendChild(overlay); - modal.querySelector('#modal-ok')?.addEventListener('click', () => { + const okBtn = modal.querySelector('#modal-ok') as HTMLButtonElement | null; + okBtn?.focus(); + + okBtn?.addEventListener('click', () => { modalContainer?.removeChild(overlay); + previousActiveEl?.focus(); resolve(true); }); overlay.addEventListener('click', (e: MouseEvent) => { if (e.target === overlay) { modalContainer?.removeChild(overlay); + previousActiveEl?.focus(); resolve(true); } });