From d8f4f19041e8b5de73b76de602d60509e66630b8 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Thu, 17 Sep 2026 06:08:37 +0100 Subject: [PATCH] fix(licence): Register ne clignote plus avant d'etre masque MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les onglets etaient visibles par defaut puis masques a la reponse de /ping : Register restait affiche quelques millisecondes. Ils naissent maintenant invisibles (visibility, place reservee) et ne sont reveles qu'une fois la reponse connue — licence valide, ils apparaissent sans rien decaler ; licence refusee, Register n'est jamais montre. Co-Authored-By: Claude Opus 5 --- css/style.css | 5 +++++ index.html | 2 +- js/app.js | 18 ++++++++++++------ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/css/style.css b/css/style.css index ea7920c..168ee02 100644 --- a/css/style.css +++ b/css/style.css @@ -293,6 +293,11 @@ input[type="range"]::-webkit-slider-thumb { color: var(--text); box-shadow: 0 1px 3px rgba(0,0,0,0.1); } +/* Invisibles MAIS presents tant que la 2e couche de licence n'a pas repondu + (applyRegisterVisibility) : visibles par defaut, ils laissaient voir Register + quelques millisecondes avant d'etre masques. visibility et non display : la + place reste reservee, donc rien ne saute quand ils apparaissent. */ +.auth-tabs.is-pending { visibility: hidden; } .auth-form { display: flex; flex-direction: column; } .auth-form .btn-block { margin-top: 8px; } diff --git a/index.html b/index.html index b14b078..92659e8 100644 --- a/index.html +++ b/index.html @@ -121,7 +121,7 @@

Your passwords, encrypted locally.

-
+
diff --git a/js/app.js b/js/app.js index 9f2d89c..91e7715 100644 --- a/js/app.js +++ b/js/app.js @@ -7037,14 +7037,20 @@ async function ensureLicence() { // Pas d'await chez l'appelant : l'ecran d'authentification ne doit pas // attendre ce test pour s'afficher. async function applyRegisterVisibility() { - if (!Bridge.active) return; let refused = false; - try { await api('/ping'); } - // Le 404 JSON exact de la 2e couche, pas n'importe quel 404 : le verrou du - // jeton repond aussi 404, mais sans corps JSON. - catch (e) { refused = (e.status === 404 && e.body && e.body.error === 'Not found'); } + if (Bridge.active) { + try { await api('/ping'); } + // Le 404 JSON exact de la 2e couche, pas n'importe quel 404 : le verrou + // du jeton repond aussi 404, mais sans corps JSON. + catch (e) { refused = (e.status === 404 && e.body && e.body.error === 'Not found'); } + } const tabs = document.querySelector('.auth-tabs'); - if (tabs) tabs.classList.toggle('is-hidden', refused); + // Les onglets naissent invisibles (is-pending) : on ne les revele qu'une + // fois la reponse connue, sinon Register clignote avant d'etre masque. + if (tabs) { + tabs.classList.toggle('is-hidden', refused); + tabs.classList.remove('is-pending'); + } if (refused) { $$('.auth-tab').forEach(x => x.classList.toggle('is-active', x.dataset.tab === 'login')); $('#loginForm').classList.remove('is-hidden');