exl100

Émulateur Exelvision EXL 100 (1984) dans le navigateur : dsp-cpp en WebAssembly, cartouches et cassettes BASIC
git clone https://git.schurger.org/exl100.git
Log | Files | Refs | README

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:
Atest/modal-close.mjs | 21+++++++++++++++++++++
Mweb/shell.html.in | 4++--
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; }