b913a2bf90
Refs gitea:Adriano/AI-OS#310 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 KiB
Task 10 — Report: badge GUID + modal modifica inline
Cosa è stato fatto
Sostituito integralmente il blocco {showTags && (...)} in src/layouts/Base.astro (righe ~76-101) con il
codice verbatim del brief: badge overlay (nome tag + guid abbreviato + pulsante matita ✎) e modal #tag-modal
con textarea/select per contenuti testuali, upload/rimozione file per contenuti immagine.
Build e test automatici
npm run build→ OK, nessun errore.npm test→ 13 file di test, 64 test, tutti verdi.
Verifica funzionale (runtime reale, non solo build statica)
Ho creato un utente admin locale (super/prova1234, ruolo admin — lo script create-user accetta solo
admin/editor, non superuser; canTags in Base.astro accetta sia superuser sia admin, quindi admin è
sufficiente per attivare i tag).
Avviato il build di produzione (node dist/server/entry.mjs, porta 4399) e verificato via curl:
- Pagina anonima (nessun cookie):
grep -c 'tag-modal'sul body → 0. Overlay assente per utenti non autorizzati, come atteso. - Login via POST form a
/logincon headerOrigin(richiesto dal check CSRF di Astro) → 302 + cookiesession(flagSecure, quindi passato manualmente negli header successivi visto che il server gira su http in locale). - Attivazione tag: POST
/api/admin/showtags {"on":true}con cookie di sessione → 200, cookieshowtags=1impostato. - Pagina con showtags attivo: GET
/con cookiesession+showtags=1→ il body contiene:tag-modal(14 occorrenze: markup + CSS + script)tag-badge__edit(classe pulsante matita)STYLE_GROUPS(oggetto opzioni di stile nello script inline)- 111 elementi con
data-tag
- Ciclo GET→PUT identico a quello del modal: preso un tag reale dal DOM (
home.hero.title-line-1):GET /api/admin/content/home.hero.title-line-1→ 200, JSON con{tag, guid, type:"text", value, styleOptions}— esattamente la forma consumata daopenModal().PUTcon nuovovalue→ 200,{ok:true, value:"PERFORMANCE-TEST-EDIT."}.- Rilettura via GET → valore effettivamente cambiato in DB.
PUTdi ripristino al valore originale ("PERFORMANCE.") → 200, verificato con GET finale che il valore originale è tornato. Nessun dato di produzione lasciato alterato.
- Server fermato (
fuser -k 4399/tcp) a fine verifica.
Cosa NON è stato verificato
- Non ho un browser headless disponibile in questo ambiente, quindi non ho eseguito il JS del badge/modal nel
DOM reale (creazione dinamica dei badge posizionati, apertura modal via click, aggiornamento in-place del
testo senza reload, upload/rimozione immagine, comportamento dei
<select>di stile). Ho verificato che lo script sorgente sia presente e sintatticamente corretto (build Astro non fallisce, contiene le funzioniopenModal/closeModal/listenertm-save) e che le API che il modal chiama rispondano nel formato atteso (GET/PUT verificati manualmente sopra). Il percorso "clic reale su ✎ → modal si apre → salvo → testo cambia senza reload" resta da confermare in un browser vero. - Non ho testato il ramo immagine (
POST/DELETE /api/admin/content/[tag]/image) end-to-end nel modal, solo che gli endpoint esistono da task precedenti.
Commit
git commit -m "feat(inline): badge con guid + modal di modifica contenuti in pagina" su
src/layouts/Base.astro.