From a95becd5825e9eeff5e1261cf3868485da1458b1 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Thu, 23 Jul 2026 19:17:45 +0100 Subject: [PATCH] fix(editor): Esc over the folder modal no longer closes the editor The folder modal is built dynamically with no id in the fallback Esc handler's modal list, so Esc fell straight through to the slideover close and shut the editor behind it. The capture handler already bails on any open .modal; mirror that in the fallback by closing a stray .modal before reaching the slideover branch. Covers every dynamically-built modal, not just this one. Co-Authored-By: Claude Opus 4.8 --- TEST_SCENARIOS.md | 6 +++--- js/app.js | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/TEST_SCENARIOS.md b/TEST_SCENARIOS.md index 820cc00..acb5074 100644 --- a/TEST_SCENARIOS.md +++ b/TEST_SCENARIOS.md @@ -50,15 +50,15 @@ Préparer : 3 entrées `A`, `B`, `C`, dont `A` dans le dossier `Work` avec le ta ### A6 · glisser une **multi-sélection** sur un dossier (`moveEntriesToFolder`) ⚠️ - **ACTION** : cocher `A` + `B` → glisser sur `Perso` → recharger (F5 impossible : relancer l'app) - **ATTENDU** : dossier changé **et** nom / username / site / tags **intacts**. -- **Historique** : ce chemin n'appelait pas `withEncryptedMeta` → il blanchissait les métadonnées chiffrées. Si des entrées ont été déplacées ainsi avant le fix, elles sont peut-être déjà vides — vérifier. +- **Historique** : ce chemin n'appelait pas `withEncryptedMeta` → il blanchissait les métadonnées chiffrées. Si des entrées ont été déplacées ainsi avant le fix, elles sont peut-être déjà vides — vérifier.✅ ### A7 · suppression du dossier de l'entrée éditée - **ACTION** : `A` (dossier `Work`) ouverte + dirty → sidebar → supprimer le dossier `Work` → Save -- **ATTENDU** : le select de l'éditeur passe à `All` ; après Save l'entrée est dans `All`, le dossier supprimé **ne réapparaît pas**. +- **ATTENDU** : le select de l'éditeur passe à `All` ; après Save l'entrée est dans `All`, le dossier supprimé **ne réapparaît pas**.✅ ### A8 · tags édités des deux côtés - **ACTION** : `A` ouverte, ajouter le chip `mine` dans l'éditeur (ne pas sauver) → batch *Add tag* `shared` sur `A` → Save -- **ATTENDU** : `old, mine, shared` — aucun des trois perdu. +- **ATTENDU** : `old, mine, shared` — aucun des trois perdu.✅ ### A9 · favori / épingle pendant l'édition (non-régression) - **ACTION** : `A` ouverte + dirty → cliquer ★ et 📌 sur la ligne `A` → Save diff --git a/js/app.js b/js/app.js index 9a2a69a..0680c57 100644 --- a/js/app.js +++ b/js/app.js @@ -8003,6 +8003,14 @@ async function init() { closeGen(); return; } + // Any other open modal — the folder modal is built dynamically and + // has no id in this list, so without this Esc fell through to the + // slideover close below and shut the editor behind it. Closing a + // stray .modal is just .remove() (how its backdrop click closes). + // The static modals above never reach here (their id checks return + // first), so this only ever catches the dynamic ones. + const strayModal = document.querySelector('.modal:not(.is-hidden)'); + if (strayModal) { strayModal.remove(); return; } if ($('#slideover').classList.contains('is-open')) { requestCloseSlideOver(); return;