fix(web): tema partajata landing<->aplicatie (cheie theme + 8 teme + icon unic)
- Landing foloseste aceeasi cheie localStorage 'theme' ca aplicatia (era 'lp-theme'), deci preferinta de tema se pastreaza intre landing si aplicatie. - Landing capata cele 8 teme din aplicatie (adaugate light/dark/petrol; auto se rezolva la light/dark), aceeasi ordine de ciclare. - Selector tema: acelasi icon FIX (SVG semicerc din landing) in ambele locuri; aplicatia nu mai schimba glifa per tema. Eticheta temei curente ramane. - Init-ul selectorului din landing nu mai scrie in localStorage (nu mai suprascrie alegerea facuta in aplicatie la simpla vizitare). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -869,12 +869,14 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{# US-011 (PRD 5.16): selector tema = pill cu icon + eticheta temei curente.
|
||||
Eticheta ascunsa pe <=560px via CSS. JS actualizeaza .tema-icon si #tema-label. #}
|
||||
{# US-011 (PRD 5.16): selector tema = pill cu icon FIX (acelasi SVG ca landing) +
|
||||
eticheta temei curente. Eticheta ascunsa pe <=560px via CSS. JS actualizeaza
|
||||
doar #tema-label (iconita nu se mai schimba per tema — consecventa cu landing). #}
|
||||
<button id="tema-toggle" class="tema-btn"
|
||||
aria-label="Comuta tema"
|
||||
title="Comuta tema">
|
||||
<span class="tema-icon" aria-hidden="true">☀</span>
|
||||
<svg class="tema-icon" width="17" height="17" viewBox="0 0 24 24" fill="none"
|
||||
stroke="currentColor" stroke-width="1.6" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 3a9 9 0 0 0 0 18z" fill="currentColor" stroke="none"/></svg>
|
||||
<span id="tema-label">Light</span>
|
||||
</button>
|
||||
<span class="muted" style="font-size:var(--fs-xs);">v{{ version }}</span>
|
||||
@@ -951,7 +953,7 @@
|
||||
</div>
|
||||
<script>
|
||||
// Comutator tema ciclic (DRY E2 — PRD 5.15): config traieste intr-o singura structura
|
||||
// sursa-de-adevar THEMES din care se DERIVA CYCLE/VALID/ICONS/LABELS/NEXT.
|
||||
// sursa-de-adevar THEMES din care se DERIVA CYCLE/VALID/LABELS/NEXT.
|
||||
// Adaugarea unei teme noi = O singura intrare in THEMES.
|
||||
// Ciclu: Light->Dark->Petrol->Grafit->Cobalt->Cupru->Hartie->Auto->(inapoi la Light).
|
||||
// 'auto' se rezolva la paint prin anti-FOUC (dark OS -> 'dark', light OS -> 'light').
|
||||
@@ -959,21 +961,20 @@
|
||||
var btn = document.getElementById('tema-toggle');
|
||||
if (!btn) return;
|
||||
// SURSA DE ADEVAR UNICA: adaugarea unei teme = o singura intrare aici.
|
||||
// Iconite: ☀ Light | ☾ Dark | ◐ Petrol | ◑ Grafit | ◆ Cobalt | ◇ Cupru | ○ Hartie | ◉ Auto
|
||||
// Iconita e FIXA (acelasi SVG ca landing) — nu se mai deriva din tema.
|
||||
var THEMES = [
|
||||
{id:'light', label:'Light', icon:'☀'},
|
||||
{id:'dark', label:'Dark', icon:'☾'},
|
||||
{id:'petrol', label:'Petrol', icon:'◐'},
|
||||
{id:'grafit', label:'Grafit', icon:'◑'},
|
||||
{id:'cobalt', label:'Cobalt', icon:'◆'},
|
||||
{id:'cupru', label:'Cupru', icon:'◇'},
|
||||
{id:'hartie', label:'Hartie', icon:'○'},
|
||||
{id:'auto', label:'Auto', icon:'◙'},
|
||||
{id:'light', label:'Light'},
|
||||
{id:'dark', label:'Dark'},
|
||||
{id:'petrol', label:'Petrol'},
|
||||
{id:'grafit', label:'Grafit'},
|
||||
{id:'cobalt', label:'Cobalt'},
|
||||
{id:'cupru', label:'Cupru'},
|
||||
{id:'hartie', label:'Hartie'},
|
||||
{id:'auto', label:'Auto'},
|
||||
];
|
||||
// Derivate din THEMES (nu literali separati — DRY E2):
|
||||
var CYCLE = THEMES.map(function(t) { return t.id; });
|
||||
var VALID = THEMES.reduce(function(a, t) { a[t.id] = 1; return a; }, {});
|
||||
var ICONS = THEMES.reduce(function(a, t) { a[t.id] = t.icon; return a; }, {});
|
||||
var LABELS = THEMES.reduce(function(a, t) { a[t.id] = t.label; return a; }, {});
|
||||
var NEXT = (function() {
|
||||
var n = {};
|
||||
@@ -989,9 +990,7 @@
|
||||
}
|
||||
function _syncButton(stored) {
|
||||
var s = VALID[stored] ? stored : 'auto';
|
||||
// US-011: actualizeaza iconita si eticheta separat (btn e pill, nu se inlocuieste innerHTML intreg)
|
||||
var icon = btn.querySelector('.tema-icon');
|
||||
if (icon) icon.innerHTML = ICONS[s];
|
||||
// US-011: iconita e fixa (nu se schimba per tema); actualizam doar eticheta.
|
||||
var label = document.getElementById('tema-label');
|
||||
if (label) label.textContent = LABELS[s];
|
||||
btn.setAttribute('aria-label', 'Tema: ' + LABELS[s] + ', apasa pentru ' + NEXT[s]);
|
||||
|
||||
Reference in New Issue
Block a user