Sezione finale

Sezione 08 / 08

LINE-DOM

Come integrare LINE direttamente in una pagina HTML: scrivere su elementi, leggere input, reagire a click e usare localStorage — tutto senza scrivere JavaScript.

8.1 Cos'è LINE-DOM

LINE-DOM è un layer JavaScript che permette di usare LINE come linguaggio per controllare il DOM di una pagina HTML. Si include con un singolo file line-dom.js.

Una volta incluso, si scrive codice LINE direttamente dentro tag <script> con type="text/line". LINE-DOM si occupa di compilare ed eseguire il codice, collegandolo agli elementi HTML.

inclusione<!-- Interprete LINE --> <script src="interpreter.js"></script> <!-- Bridge DOM --> <script src="line-dom.js"></script>
Regola fondamentale: nei tag <script type="text/line"> va solo codice LINE. Zero JavaScript inline. Tutta la logica di bridge sta in line-dom.js.

8.2 Attributi del tag script

Il tag <script type="text/line"> accetta attributi speciali che controllano quando e come viene eseguito:

AttributoEffetto
trigger="id"Esegue il codice al click sull'elemento con quell'id
autorunEsegue il codice al caricamento della pagina
replaceSovrascrive il contenuto dell'elemento target invece di aggiungerlo in fondo
counter="id"Inietta la variabile speciale __N__ con il numero di esecuzioni, e scrive il contatore nell'elemento indicato
body-class="id"Osserva l'elemento indicato e applica il suo testo come className del body
esempio<script type="text/line" trigger="btn-invia" replace> risposta = Hai cliccato! <risultato>TALK @risposta</risultato> </script> <button id="btn-invia">Invia</button> <div id="risultato"></div>

8.3 Scrivere su elementi HTML

Per inviare testo a un elemento HTML si racchiude il codice LINE tra tag con l'id dell'elemento:

SintassiEffetto
<id>TALK testo</id>Sostituisce o aggiunge il testo nell'elemento
<id=after>TALK testo</id>Appende in fondo al contenuto esistente
<id=before>TALK testo</id>Inserisce all'inizio del contenuto esistente
<.classe>TALK testo</.classe>Scrive su tutti gli elementi con quella classe CSS

Il carattere \n dentro i tag DOM diventa automaticamente un <br> nell'HTML (non vale per gli input).

esempio<output id="log"></output> <script type="text/line" trigger="btn"> <log=after>TALK Nuova riga\n</log> <.stato>TALK aggiornato</.stato> </script>

8.4 Leggere input HTML

LINE-DOM inietta automaticamente il valore di ogni <input>, <textarea> e <select> che ha un id come variabile LINE prima di ogni esecuzione.

Basta che l'elemento esista nella pagina — il valore è già disponibile con @id:

html<input id="nome" type="text"> <button id="btn">Saluta</button> <div id="output"></div> <script type="text/line" trigger="btn" replace> <output>TALK Ciao, @nome!</output> </script>

Non serve dichiarare nome — LINE-DOM lo prepende automaticamente prima di eseguire il codice.

Gli input hidden funzionano come memoria persistente tra un'esecuzione e l'altra: il loro valore viene iniettato ad ogni run, quindi possono conservare lo stato.

8.5 Gestire click da codice LINE

È possibile registrare click su elementi HTML direttamente nella sintassi LINE, senza uscire dallo script:

SintassiSignificato
THEN:btn-idIl blocco THEN viene eseguito al click su quell'id
GO:btn-id @{cond} @{...}GO inline eseguito al click
esempio<script type="text/line" autorun> THEN:btn-maiuscolo <output>TALK CIAO</output> THEND GO:btn-conta @{V} @{ <contatore=after>TALK •</contatore> } </script>
Nota: i tag <id> dentro un corpo @{...} inline non funzionano — il preprocessore non li gestisce in quel contesto. Per blocchi che scrivono su elementi, usa sempre un THEN con nome.

8.6 LocalStorage

LINE-DOM aggiunge il supporto al localStorage del browser tramite un tag speciale. I dati sopravvivono al ricaricamento della pagina.

sintassi<ls>nomevar = valore</ls>

Salva valore nel localStorage con chiave line_nomevar. Ad ogni esecuzione successiva, LINE-DOM inietta automaticamente il valore salvato come variabile LINE — esattamente come fa con gli input HTML.

esempio — nome che persiste tra ricaricamenti<input id="nome"> <button id="btn-salva">Salva</button> <div id="benvenuto"></div> <script type="text/line" autorun> <benvenuto>TALK Ciao, @nome!</benvenuto> </script> <script type="text/line" trigger="btn-salva"> <ls>nome = @nome</ls> </script>

8.7 Temi dinamici con body-class

L'attributo body-class su uno script crea un MutationObserver: osserva l'elemento indicato e applica automaticamente il suo testo come classe del <body>. Combinato con variabili CSS, permette di cambiare tema senza JavaScript.

esempio<!-- Elemento nascosto che contiene il tema attivo --> <span id="tema" hidden></span> <script type="text/line" trigger="btn" replace body-class="tema"> <tema>TALK dark</tema> </script> /* CSS */ body.dark { --bg: #111; --fg: #eee; } body.light { --bg: #fff; --fg: #111; }

Quiz — Sezione 8

6 domande · serve l'80% per completare il manuale

Domanda 01

Come si specifica che uno script LINE deve essere eseguito al caricamento della pagina?

Atrigger="load"
Bautorun
Conload="true"
DSi esegue sempre da solo

Domanda 02 — Completamento

Scrivi il tag che appende il testo "fatto" all'elemento con id log.

1

Domanda 03

Un <input id="eta"> è presente nella pagina. Come si usa il suo valore nel codice LINE?

ABisogna dichiarare eta = document.getElementById('eta').value
BCon @eta — LINE-DOM lo inietta automaticamente
CCon INP @eta
DNon è possibile leggere input HTML da LINE

Domanda 04

Cosa fa <ls>punteggio = 100</ls>?

ACrea una variabile LINE chiamata punteggio che vale 100
BSalva il valore 100 nel localStorage con chiave line_punteggio, disponibile ad ogni run successivo
CScrive "100" nell'elemento con id "punteggio"
DErrore di sintassi

Domanda 05 — Completamento

Scrivi un blocco THEN che si attiva al click su btn-reset e scrive "0" nell'elemento score.

1
2  
3

Domanda 06

A cosa serve l'attributo body-class="id" su uno script LINE-DOM?

AAggiunge una classe CSS al body quando lo script viene caricato
BOsserva l'elemento indicato e applica il suo testo come className del body, permettendo temi dinamici via CSS
CApplica la classe dell'elemento al body una sola volta
DÈ un alias di trigger