Promo: un'anteprima non applicata lo dice, invece di mostrare oggi in silenzio
Senza login (o con una data illeggibile) il parametro veniva ignorato e la pagina rispondeva con l'edizione corrente: due date diverse davano lo stesso risultato, e si legge come una funzione rotta invece che come un accesso mancante. Ora una barra rossa dichiara il motivo e come rimediare. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,7 +25,12 @@ const utente = token ? getSessionUser(getDb(), token) : null;
|
|||||||
// Una data secca (`2026-08-20`) sarebbe letta come UTC: la si porta a mezzogiorno italiano,
|
// Una data secca (`2026-08-20`) sarebbe letta come UTC: la si porta a mezzogiorno italiano,
|
||||||
// lontano dai confini di mezzanotte dove sta la differenza fra un'edizione e l'altra.
|
// lontano dai confini di mezzanotte dove sta la differenza fra un'edizione e l'altra.
|
||||||
const quandoParam = param && /^\d{4}-\d{2}-\d{2}$/.test(param) ? `${param}T12:00:00+02:00` : param;
|
const quandoParam = param && /^\d{4}-\d{2}-\d{2}$/.test(param) ? `${param}T12:00:00+02:00` : param;
|
||||||
const anteprima = Boolean(utente && quandoParam && !Number.isNaN(Date.parse(quandoParam)));
|
const dataLeggibile = Boolean(quandoParam && !Number.isNaN(Date.parse(quandoParam)));
|
||||||
|
const anteprima = Boolean(utente && dataLeggibile);
|
||||||
|
// Un'anteprima chiesta e non applicata va **detta**: altrimenti la pagina risponde con
|
||||||
|
// l'edizione di oggi e due date diverse danno lo stesso risultato — che si legge come «la
|
||||||
|
// funzione non funziona» invece che «non sei entrato».
|
||||||
|
const anteprimaIgnorata = !param || anteprima ? null : (!utente ? 'login' : 'data');
|
||||||
const quando = anteprima ? new Date(quandoParam!) : new Date();
|
const quando = anteprima ? new Date(quandoParam!) : new Date();
|
||||||
const ed = edizioneAttiva(quando);
|
const ed = edizioneAttiva(quando);
|
||||||
// La pagina cambia contenuto col passare del tempo: una copia in cache la congelerebbe alla
|
// La pagina cambia contenuto col passare del tempo: una copia in cache la congelerebbe alla
|
||||||
@@ -53,6 +58,16 @@ const countdownDeadline = ed ? t(tg('countdown.deadline')) : '';
|
|||||||
{ed ? ` edizione «${ed.id}»` : ' nessuna edizione attiva'}
|
{ed ? ` edizione «${ed.id}»` : ' nessuna edizione attiva'}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
{anteprimaIgnorata === 'login' && (
|
||||||
|
<div class="anteprima ignorata">
|
||||||
|
Anteprima non applicata: questa è la pagina di oggi. Entra da <a href="/admin/login">/admin/login</a> e ricarica.
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{anteprimaIgnorata === 'data' && (
|
||||||
|
<div class="anteprima ignorata">
|
||||||
|
Anteprima non applicata: «{param}» non è una data leggibile. Usa il formato 2026-08-25.
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{ed ? (
|
{ed ? (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
@@ -305,6 +320,10 @@ const countdownDeadline = ed ? t(tg('countdown.deadline')) : '';
|
|||||||
background: #8A6E3F; color: #FFFFFF; font-size: 12px; font-weight: 700; letter-spacing: 0.04em;
|
background: #8A6E3F; color: #FFFFFF; font-size: 12px; font-weight: 700; letter-spacing: 0.04em;
|
||||||
padding: 10px 16px; text-align: center;
|
padding: 10px 16px; text-align: center;
|
||||||
}
|
}
|
||||||
|
/* Anteprima chiesta e non applicata: colore diverso, perché il contenuto sotto è quello di
|
||||||
|
oggi e non quello della data richiesta. */
|
||||||
|
.lp .anteprima.ignorata { background: #8B2E2E; }
|
||||||
|
.lp .anteprima.ignorata a { color: #FFFFFF; }
|
||||||
|
|
||||||
/* FAQ */
|
/* FAQ */
|
||||||
.lp .faq-wrap { padding: 72px 64px; }
|
.lp .faq-wrap { padding: 72px 64px; }
|
||||||
|
|||||||
Reference in New Issue
Block a user