Struttura dei contenuti¶
Questa sezione descrive l'architettura dei file e il formato JSON che compone uno scenario. La conoscenza di questa struttura non è necessaria per usare lo Scenario Editor, ma è utile per modifiche avanzate, debugging, o per generare scenari programmaticamente.
Architettura dei file¶
ChoiceMap separa nettamente il framework (codice) dai contenuti (dati). I file HTML contengono l'applicazione e non vanno modificati; tutte le personalizzazioni avvengono tramite file JSON.
File HTML (framework)¶
I tre file HTML sono applicazioni complete che non richiedono modifiche:
| File | Funzione |
|---|---|
choicemap.html |
Visualizza gli scenari per l'utente finale |
scenario-editor.html |
Editor per creare e modificare scenari |
theme-editor.html |
Editor per personalizzare l'aspetto |
Questi file caricano React e Tailwind CSS da CDN e leggono i contenuti dai file JSON. Non è necessario (né consigliato) modificarli.
config.json (il regista)¶
Il file config.json è il punto di ingresso che dice al Navigator cosa caricare:
{
"scenario": "scenario-mio-progetto.json",
"theme": "theme.json",
"showCredits": true
}
| Campo | Funzione |
|---|---|
scenario |
Nome del file JSON dello scenario da visualizzare |
theme |
Nome del file JSON del tema da applicare |
showCredits |
Mostra/nasconde il footer con i crediti dell'autore |
Cambiando il valore di scenario e ricaricando il Navigator, si passa a uno scenario diverso senza modificare altro.
Lo stesso per theme.
defaults.json (valori predefiniti)¶
Contiene tutti i valori di default per il tema: colori, font, configurazione del branding. È il "tema base" da cui partono tutti gli altri.
{
"brand": {
"name": "",
"logo": "",
"website": ""
},
"colors": {
"background": "#ffffff",
"text": "#1f2937",
"accent": "#6366f1"
}
}
Questo file non va modificato. Per personalizzare l'aspetto, si crea un file tema separato.
theme.json (personalizzazioni)¶
Il file tema contiene solo le personalizzazioni rispetto ai default. Il Navigator legge prima defaults.json, poi sovrascrive con i valori presenti in theme.json.
Se theme.json contiene solo il logo aziendale, tutti gli altri valori (colori, font) vengono presi da defaults.json:
{
"brand": {
"name": "Azienda XYZ",
"logo": "images/logo.png"
}
}
Questo approccio permette di creare temi minimali che specificano solo ciò che cambia.
shared-styles.css (solo per gli editor)¶
Contiene stili CSS condivisi tra Scenario Editor e Theme Editor. Non viene usato dal Navigator e non serve includerlo quando si pubblica uno scenario per gli utenti finali.
Il file scenario¶
Ogni scenario è un file JSON con una struttura ben definita:
{
"meta": {
"title": "Titolo dello scenario",
"description": "Descrizione opzionale",
"author": "Nome autore"
},
"translations": {
"step": "Passo",
"restart": "Ricomincia",
"endOfPath": "Fine del percorso",
"resources": "Risorse",
"viewMap": "Vedi mappa",
"mapOf": "Mappa di",
"back": "Indietro",
"download": "Scarica",
"openLink": "Apri",
"watchVideo": "Guarda"
},
"startNode": "start",
"nodes": {
"start": {
"content": "# Benvenuto\n\nContenuto in **Markdown**.",
"choices": [
{ "text": "Prima opzione", "next": "nodo_a" },
{ "text": "Seconda opzione", "next": "nodo_b" }
],
"resources": []
}
}
}
Sezione meta¶
La sezione meta contiene le informazioni descrittive dello scenario.
| Campo | Obbligatorio | Uso |
|---|---|---|
title |
Sì | Appare nell'intestazione del Navigator |
description |
No | Note per chi gestisce lo scenario |
author |
No | Mostrato nel footer se showCredits è attivo |
Sezione translations¶
Definisce le etichette dell'interfaccia, permettendo di localizzare lo scenario in qualsiasi lingua.
| Chiave | Uso | Esempio italiano |
|---|---|---|
step |
Indicatore di progresso | Passo |
restart |
Pulsante ricomincia | Ricomincia |
endOfPath |
Messaggio fine percorso | Fine del percorso |
resources |
Titolo sezione risorse | Risorse |
viewMap |
Pulsante apri mappa | Vedi mappa |
mapOf |
Titolo della mappa | Mappa di |
back |
Pulsante indietro | Indietro |
download |
Etichetta download | Scarica |
openLink |
Etichetta link | Apri |
watchVideo |
Etichetta video | Guarda |
Per un quiz, si potrebbe usare "Domanda" invece di "Passo" e "Riprova" invece di "Ricomincia".
Campo startNode¶
Indica quale nodo è il punto di partenza dello scenario. Il valore deve corrispondere a una chiave presente nell'oggetto nodes.
Tipicamente si usa "start" per convenzione, ma può essere qualsiasi identificativo valido.
Sezione nodes¶
Un oggetto dove ogni chiave è l'identificativo di un nodo e il valore contiene i dati del nodo.
Identificativo del nodo: la chiave di ogni nodo è il suo ID univoco, usato internamente per i collegamenti. Convenzioni consigliate:
- Solo lettere minuscole, numeri e underscore
- Nomi descrittivi ma brevi: intro, domanda_1, risposta_ok
- Evitare spazi e caratteri speciali
Contenuto del nodo: il campo content contiene il testo in formato Markdown. Per la sintassi supportata, vedi Content.
Per andare a capo nel JSON, usare \n:
"content": "Prima riga\n\nSeconda riga dopo uno spazio"
Scelte del nodo: il campo choices è un array di oggetti che definiscono i pulsanti di scelta:
"choices": [
{ "text": "Testo del pulsante", "next": "id_nodo_destinazione" }
]
text: quello che l'utente legge sul pulsantenext: l'identificativo del nodo di destinazione
Un nodo senza scelte (array vuoto []) è un nodo finale.
Risorse del nodo: il campo resources è opzionale e definisce allegati:
"resources": [
{ "type": "download", "label": "Scarica il PDF", "url": "docs/guida.pdf" },
{ "type": "link", "label": "Approfondisci", "url": "https://esempio.com" },
{ "type": "video", "label": "Video tutorial", "url": "https://youtube.com/watch?v=..." }
]
| Tipo | Comportamento |
|---|---|
download |
Scarica il file |
link |
Apre in nuova scheda |
video |
Apre in nuova scheda |
Validazione¶
Il Navigator mostra errori se qualcosa non funziona nei file JSON. Errori comuni:
- JSON malformato (virgole mancanti, virgolette non chiuse)
startNodeche punta a un nodo inesistente- Scelte che puntano a nodi inesistenti
- Sezione
translationsmancante o incompleta
Lo Scenario Editor genera sempre JSON valido, ma modifiche manuali possono introdurre errori. In caso di problemi, verificare la sintassi con un validatore JSON online.