commit 199733e0fedfdcec0b7ccb47b9ff48bd1b0ae291
parent 80f9591301c79d03987a5c677c933431623fd013
Author: Jean Schurger <jean@schurger.org>
Date: Thu, 5 Nov 2026 15:55:43 -0500
Modales : display flex seulement ouvertes (fermées, elles restaient visibles)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9
Diffstat:
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/test/modal-close.mjs b/test/modal-close.mjs
@@ -0,0 +1,21 @@
+// Les dialogues s'ouvrent ET se ferment (croix) : Programmes, Exelmémoire, Disquette ; fermés = invisibles.
+// node test/modal-close.mjs [base-url]
+import { open, sleep } from './cdp.mjs';
+const base = process.argv[2] ?? 'http://127.0.0.1:8196';
+const page = await open(base + '/', { width: 900, height: 900 });
+await sleep(6000);
+const vis = (id) => page.evaluate(`(() => { const d = document.getElementById(${JSON.stringify(id)}); const r = d.getBoundingClientRect(); return { open: d.open, visible: getComputedStyle(d).display !== 'none' && r.height > 0 }; })()`);
+console.log('au départ :', JSON.stringify({ programmes: await vis('modal'), exelmem: await vis('cram-modal'), disque: await vis('disk-modal') }));
+await page.evaluate("document.getElementById('pick').click()"); await sleep(300);
+const o1 = await vis('modal');
+await page.evaluate("document.querySelector('#modal .x').click()"); await sleep(300);
+const c1 = await vis('modal');
+await page.evaluate("document.getElementById('cram-open').click()"); await sleep(300);
+const o2 = await vis('cram-modal');
+await page.evaluate("document.getElementById('cram-modal-close').click()"); await sleep(300);
+const c2 = await vis('cram-modal');
+console.log('Programmes ouverte/fermée :', JSON.stringify(o1), JSON.stringify(c1));
+console.log('Exelmémoire ouverte/fermée :', JSON.stringify(o2), JSON.stringify(c2));
+const ok = o1.visible && !c1.visible && o2.visible && !c2.visible;
+console.log(ok ? 'OK : les dialogues se ferment' : 'PROBLÈME');
+page.close();
diff --git a/web/shell.html.in b/web/shell.html.in
@@ -96,8 +96,8 @@
.chip.active { background: var(--cyan); color: #06282a; border-color: var(--cyan); font-weight: 600; }
/* Le défilement reste dans la liste (pas de chaînage vers la page) */
.programs { max-height: 56vh; overflow-y: auto; overscroll-behavior: contain; background: #17181c; }
- .modal { overscroll-behavior: contain; display: flex; flex-direction: column; }
- .modal[open] { display: flex; }
+ .modal { overscroll-behavior: contain; }
+ .modal[open] { display: flex; flex-direction: column; } /* seulement ouverte : fermée, le navigateur la cache */
/* Corps des modales Exelmémoire / Disquette : c'est lui qui défile, pas la page derrière. */
.cram-body { overflow-y: auto; flex: 1 1 auto; min-height: 0; overscroll-behavior: contain; }
body:has(dialog[open]) { overflow: hidden; }