Calendario: il 19 e il 20 settembre non sono un buco, sono un evento e una chiusura

Quei due giorni non stanno in nessuna delle due griglie perche' non hanno class:
il 19 c'e' la presentazione della nuova apertura, il 20 si sta chiusi. Scritto
come avviso con la sua finestra, il vuoto smette di sembrare una trascrizione
incompleta e diventa un'informazione.

Gli avvisi compaiono in cima al popup e in fondo al PDF - e' il file che gira su
WhatsApp, e chi lo riceve non ha la pagina davanti. Spariscono da soli quando
sono passati: un avviso scaduto dice che il centro e' chiuso in un giorno gia'
trascorso, e chi legge non sa piu' se valga per quest'anno o per il prossimo.

Lo spazio riservato in fondo alla pagina cresce con gli avvisi, altrimenti la
griglia si allunga fino a spingerli su una seconda pagina.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-17 17:07:24 +02:00
parent 928de34c55
commit d03c62641e
6 changed files with 123 additions and 18 deletions
+6 -4
View File
@@ -1,5 +1,5 @@
import type { APIRoute } from 'astro';
import { calendari } from '../../data/calendari';
import { avvisiAttivi, calendari } from '../../data/calendari';
import { generaCalendarioPdf, nomeFilePdf } from '../../lib/calendario-pdf';
export const prerender = false;
@@ -15,7 +15,9 @@ export const GET: APIRoute = async ({ params }) => {
// credere che il calendario sia vuoto.
if (!cal) return new Response('Calendario inesistente.', { status: 404 });
const pdf = await generaCalendarioPdf(cal);
// Le giornate fuori griglia stanno anche nel PDF: è il file che gira su WhatsApp, e chi lo
// riceve non ha davanti la pagina dove sono scritte.
const pdf = await generaCalendarioPdf(cal, avvisiAttivi(new Date()));
return new Response(new Uint8Array(pdf), {
headers: {
'Content-Type': 'application/pdf',
@@ -23,8 +25,8 @@ export const GET: APIRoute = async ({ params }) => {
// scheda e su telefono resterebbe lì, senza finire fra i file.
'Content-Disposition': `attachment; filename="${nomeFilePdf(cal)}"`,
'Content-Length': String(pdf.length),
// Il calendario cambia solo quando cambia il dato, cioè con un deploy: un'ora di cache
// basta a non rigenerarlo a ogni click, e non abbastanza da servire un orario vecchio.
// Un'ora: basta a non rigenerarlo a ogni click, e non abbastanza perché un avviso ormai
// scaduto (le giornate fuori griglia spariscono da sole) resti in giro un giorno intero.
'Cache-Control': 'public, max-age=3600',
},
});