From 69b0e84f636755a7a48b4289b68d2d7fd09784f5 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Sat, 1 Aug 2026 23:48:54 +0100 Subject: [PATCH] fix(editor): whitelist the bar controls, not the whole bars content-header and pagination were exempt from click-away in full, so their large empty areas were dead: clicking beside the title or next to the page buttons left the editor open. Only the actual controls are exempt now. --- TEST_SCENARIOS.md | 6 ++++++ js/app.js | 11 ++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/TEST_SCENARIOS.md b/TEST_SCENARIOS.md index bbf60c7..e4883c4 100644 --- a/TEST_SCENARIOS.md +++ b/TEST_SCENARIOS.md @@ -198,6 +198,12 @@ plus bas. - **`inert` ne suffit pas seul** : il retire les contrôles du focus, mais **pas** le défilement. `Espace`, `Page haut/bas`, `Début/Fin` et les flèches font défiler le document **sans aucun élément focalisé** — la page bougeait encore sous l'overlay. Ces touches sont donc avalées en phase de capture tant que l'opération tourne. - **Vérifier aussi le défilement** : pendant l'overlay, `Espace` et `Page bas` ne doivent rien bouger ; après, le défilement clavier doit refonctionner. +### B19 · cliquer dans le vide ferme l'éditeur, y compris près des barres +- **ACTION** : `A` ouverte → cliquer dans l'**espace vide** à droite du titre « All items », puis dans l'espace vide de la barre de pagination. +- **ATTENDU** : l'éditeur se ferme (avec la modale de discard s'il est *dirty*), comme n'importe quel clic hors du panneau. +- **ATTENDU (non-régression)** : les **commandes** de ces barres ne ferment toujours pas l'éditeur — boutons de page, sélecteur `25 / page`, tri, barre de sélection, *Empty trash*. +- **Historique** : `.content-header` et `.pagination` étaient en liste blanche **en entier**, pour éviter que la barre de sélection et *Empty trash* ne ferment l'éditeur. Effet de bord : leurs grandes zones vides devenaient inertes, et un clic à côté du titre ne faisait plus rien. La liste blanche ne retient plus que les contrôles. + ### B14 · dialogues natifs ouverts par un clic programmatique ✅ - **ACTION** : `A` ouverte + **dirty** → (a) Settings → *Import vault* ; (b) télécharger une pièce jointe (fallback web) ; (c) *Upload icon* ; (d) joindre un fichier. - **ATTENDU** : **seul** le dialogue natif s'ouvre. Pas de « Discard unsaved changes? » par-dessus, l'éditeur reste ouvert et modifié. diff --git a/js/app.js b/js/app.js index d83101b..0b618f4 100644 --- a/js/app.js +++ b/js/app.js @@ -7558,12 +7558,13 @@ async function init() { // the editor. Same for the table column picker dropdown. if (e.target.closest('.topbar')) return; if (e.target.closest('.sidebar')) return; - if (e.target.closest('.pagination')) return; - // Selection toolbar + the view's title row (which carries buttons - // like Empty trash) are chrome as well — their actions decide for - // themselves what happens to the editor. + // Only the CONTROLS of the title row and the pager, not the whole bars: + // whitelisting them wholesale made their (large) empty areas dead to + // click-away, so clicking beside the title or next to the page buttons + // left the editor open with no way to tell why. + if (e.target.closest('.pagination button, .pagination select')) return; if (e.target.closest('.batch-bar')) return; - if (e.target.closest('.content-header')) return; + if (e.target.closest('#emptyTrashBtn')) return; // A toast or the busy spinner can land under the cursor mid-operation; // clicking one must not count as "clicked away from the editor". if (e.target.closest('.toast')) return;