Di attributi globali (quelli cioè che si possono 
applicare a tutti gli elementi HTML) ce ne sono sempre stati: basti 
pensare al classico ‘id’, disponibile da sempre sulla totalità 
degli elementi. HTML5 formalizza questa definizione e arricchisce lo sparuto 
gruppo con nuovi membri che, come intuibile, possono essere applicati a un 
qualsiasi tag di queste specifiche. In questo capitolo dedicheremo qualche 
paragrafo ad ognuno dei nuovi arrivati, alcuni dei quali, vedrete, sono 
decisamente interessanti.
TinyMCE, CKEditor e WYMeditor sono solo tre di una lunga lista di librerie studiate per offrire uno strumento di editing testuale su web che superi le classiche textarea. I risultati sono già ad oggi eccellenti, vicini a prodotti desktop come Microsoft Word, ma le soluzioni implementate fanno tutte uso di escamotage più o meno furbi per ottenere questo livello di interazione in quanto l’HTML 4 non prevede alcun modo esplicito di generare controlli del genere.
Durante la stesura delle specifiche HTML5 questo problema è stato affrontato 
e si è deciso di sviluppare un approccio comune al rich-editing di un documento 
re-introducendo un set di specifiche
implementate in sordina da Microsoft nella versione 5.5 di Internet 
Explorer. Questo lavoro ha portato alla creazione di un nuovo attributo globale:
contenteditable, che impostato a true 
su di un qualsiasi elemento lo rende modificabile da browser; lo stesso destino 
subiscono tutti gli elementi in esso contenuti a meno che non espongano un 
esplicito contenteditable=false.
Ma... cosa significa esattamente modificabile da browser? 
Che tipo di feedback visivo ci si dovrebbe aspettare? E come si comporterebbe il 
markup a fronte delle modifiche? Sfortunatamente qui le specifiche non sono 
troppo chiare e sanciscono semplicemente che qualsiasi cosa venga concessa 
all’utente il risultato deve comunque restare conforme all’HTML5: questa libertà 
operativa ha prodotto comportamenti diversi da browser a browser; ad esempio c’è 
chi traduce il tasto invio com un <br> e chi invece crea un nuovo 
paragrafo con <p>. Parallelamente è disponibile anche un
set 
di API utilissime per insistere sulla zona modificabile con comandi attivati 
dall’esterno, come ad esempio da una toolbar. Un pulsante che volesse 
attivare/disattivare il grassetto sulla selezione corrente dovrebbe invocare la 
seguente funzione:
| 
				 
					1 
				 | 
				
				document.execCommand('bold') | 
			
Prima di passare oltre sappiate che l’attributo 
contenteditable è stato applicato con valore true a 
all’intera sezione precedente con l’esclusione di questo paragrafo, 
permettendovi così di editarla e sperimentare l’interazione di questa nuova 
interessante caratteristica! (e se selezionate del testo e
cliccate qui, potrete 
renderlo grassetto!).
L’attributo globale contextmenu serve ad associare a un elemento un menu contestuale; questa forma di interazione è poco comune sul web ma molto praticata sul desktop dove, ad esempio, su di una cartella di sistema ci si aspetta di poter operare azioni quali ‘copia’, ‘elimina’ e ‘rinomina’. Vediamo un esempio:
| 
				 
					1 
				
					2 
				
					3 
				
					4 
				
					5 
				
					6 
				 | 
				
				<img
						src="http://farm4.static.flickr.com/3623/3527155504_6a47fb4988_d.jpg"contextmenu="image_menu">
						<menu
						type="context"
						id="image_menu">    <command
						label="Modifica 
						il contrasto" onclick="contrastDialog();">    <command
						label="Negativo"
						onclick="negativo();">
						</menu> | 
			
Cliccando con il tasto destro del mouse sull’immagine il browser dovrebbe mostrare un menu contenente le due azioni disponibili. Purtroppo ad oggi non esiste ancora nessuna implementazione funzionante di questa feature, che resta al momento relegata a semplice specifica.
L’HTML5 predispone la possibilità di associare ad ogni elemento che compone 
la pagina un numero arbitrario di attributi il cui nome può essere definito 
dall’utente sulla base di esigenze personali, a patto che venga mantenuto il 
suffisso ‘data-’; ad esempio:
| 
				 
					1 
				
					2 
				
					3 
				
					4 
				
					5 
				
					6 
				 | 
				
				<img
						id="ombra"    class="cane"    data-cane-razza="mastino 
						corso”     data-cane-eta="5"    data-cane-colore="nero"    src="la_foto_del_mio_cane.jpg"> | 
			
È inoltre interessante notare come queste informazioni, che arricchiscono e danno valore semantico all’elemento, siano accessibili anche attraverso un comodo metodo Javascript:
| 
				 
					1 
				 | 
				
				alert("Ombra 
						ha :" + 
						document.getElementById("ombra").dataset.caneEta 
						+ " anni"); | 
			
L’attributo globale hidden è stato introdotto per 
offrire un’alternativa all’utilizzo del predicato ‘style="display:none"’ 
che ha subito una proliferazione incontrollata soprattutto a seguito della 
diffusione di librerie Javascript come jQuery o Prototype. Un elemento marcato 
come hidden deve essere considerato dallo user agent come non 
rilevante e quindi non visualizzato a schermo.
La quasi totalità dei browser oggi in commercio contiene un motore di 
verifica della sintassi grammaticale. Le specifiche HTML5 introducono un 
meccanismo per abilitare o disabilitare il controllo della sintassi 
su porzioni della pagina modificabili dall’utente. L’attributo in questione si 
chiama spellcheck e, quando impostato a true, 
ordina al browser di attivare il proprio correttore sull’elemento corrente e su 
tutti i suoi figli.
Laddove invece non venga impostata nessuna preferenza, le specifiche prevedono che il browser utilizzi un proprio comportamento di default.
Ci sono un paio di altri attributi globali introdotti dalle specifiche e non 
trattati in questa sede, draggable e aria-*; entrambi 
sottendono un discorso che si estende ben al di là della semplice 
implementazione di markup e verranno trattati più avanti nella guida.
Ecco comunque la lista di tutti gli attributi globali previsti dalla specifica:
| 
				 
					1 
				
					2 
				 | 
				
				accesskey, class, 
						contenteditable, contextmenu, dir, draggable 
					hidden, id, lang, spellcheck, 
						style, tabindex, title | 
			
In questa lezione abbiamo appreso che la nuova configurazione di markup dell’HTML5 è stata studiata per ovviare a tutti i problemi emersi in anni sviluppo di siti web e applicazioni con la precedente versione delle specifiche. Nelle prossime lezione introdurremo il nuovo content model, pensato non più nella forma binaria ‘block’ e ‘inline’ ma articolato in una serie di modelli di comportamento complessi ed interessanti.