From 5426772899c53ca78cf1c5c99f8fdadf298cbfa4 Mon Sep 17 00:00:00 2001 From: nathaninline Date: Mon, 6 Jul 2026 11:54:29 +0200 Subject: [PATCH] UI : modales natives au lieu de confirm()/prompt() du navigateur MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout d'un système de modale réutilisable askConfirm/askPrompt/askAlert (Promise-based, Échap/clic-dehors = annuler, Entrée = valider) qui remplace les 5 confirm()/prompt() natifs (auth, mode agent, switch preset, suppression, compactage). _openAsk est polymorphe : accepte (message, opts) [UI] et l'objet {title,msg,yes,no,placeholder} de e2e.js — sur ajean.link/server.html cette fonction remplace le window.askConfirm du bootstrap boîte noire, donc doit servir aussi les invites empreinte/appairage E2E. --- ui/index.html | 76 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 6 deletions(-) diff --git a/ui/index.html b/ui/index.html index 0265d0a..e6e0fce 100644 --- a/ui/index.html +++ b/ui/index.html @@ -50,6 +50,17 @@ h1{margin:0;font-size:18px;color:var(--accent)} .mem-list{max-height:240px;overflow-y:auto;overscroll-behavior:contain} .mem-list .preset{margin:3px 0;padding:5px 9px} .mem-more{font-size:11px;color:var(--dim);text-align:center;padding:6px 0 2px} +.ask-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:60;display:flex;align-items:center;justify-content:center;padding:20px} +.ask-box{background:var(--bg);border:1px solid var(--border);border-radius:10px;width:100%;max-width:420px;padding:20px;box-shadow:0 12px 40px rgba(0,0,0,.5);animation:askpop .12s ease-out} +@keyframes askpop{from{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}} +.ask-title{font-size:15px;font-weight:600;color:var(--text);margin-bottom:8px} +.ask-msg{font-size:13px;color:var(--dim);line-height:1.5;white-space:pre-wrap;word-break:break-word} +.ask-input{width:100%;box-sizing:border-box;margin-top:12px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:9px 11px;font:inherit;font-size:13px} +.ask-input:focus{outline:none;border-color:var(--accent)} +.ask-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px} +.ask-actions button{margin:0;padding:7px 16px} +.ask-ok{border-color:var(--accent);color:var(--accent)} +.ask-ok.danger{border-color:var(--err);color:var(--err)} #brand-a{display:inline-block;line-height:1;max-width:0;opacity:0;overflow:hidden;color:#fff;transition:max-width .35s ease,opacity .35s ease} #brand.agent #brand-a{max-width:1ch;opacity:1;margin-right:.04em} /* interrupteur (switch) */ @@ -250,6 +261,17 @@ button:disabled{opacity:.5;cursor:not-allowed} +