Advertisement
  1. Code
  2. HTML

Estendere HTML creando Tag personalizzati

Scroll to top
Read Time: 9 min

Italian (Italiano) translation by Francesco Turlon (you can also view the original English article)

In questo tutorial vi mostreremo quanto è facile estendere il linguaggio HTML con tag personalizzati. I tag personalizzati possono essere utilizzati per implementare diversi comportamenti, quindi sono un metodo molto comodo per scrivere meno codice e conservare i documenti HTML più facilmente.

Cos'è un Tag HTML personalizzato?

Con HTML si utilizza il tag <b>, ad esempio, per mostrare il testo in grassetto. Se avete bisogno di un elenco, utilizzerete il tag <ul> con relativo tag <li> per ogni elemento dell'elenco. I tags vengono interpretati dal browser e, insieme al CSS, determinano come viene visualizzato il contenuto di una pagina web e anche come si comportano parti del contenuto.

A volte, utilizzare semplicemente un tag HTML non è sufficiente per le funzionalità necessarie nelle applicazioni web. Di solito ciò è risolto utilizzando più tag HTML con JavaScript e CSS, ma questa soluzione non è troppo elegante.

Una soluzione più elegante sarebbe quella di utilizzare un tag personalizzato — un identificatore racchiuso tra <> che viene interpretato dal browser per eseguire il rendering della funzionalità desiderata. Come con i normali tags HTML, dovremmo essere in grado di utilizzare un tag personalizzato più volte in una pagina, e dovremmo anche essere in grado di disporre degli attributi di tag e sub-tag per aiutare la funzionalità del tag personalizzato. Vediamo quindi un esempio!

Esempio #1: Creazione di un Tag HTML Gravatar personalizzato

Creiamo un tag personalizzato che consente di visualizzare l'immagine Gravatar per un certo indirizzo e-mail. Chiameremo questo tag <codingdude-gravatar>, e passeremo l'indirizzo email come attributo chiamato email.

È possibile denominare i tags personalizzati nel modo che ritenete più opportuno, ma una cosa da notare è che in questo esempio il nome del tag personalizzato inizia con codingdude-. È consigliabile utilizzare i prefissi come questo per tags personalizzati al fine di evitare conflitti di nomi con altri tag personalizzati. Inoltre, è ovviamente una buona idea non utilizzare nomi di tag che sono già definiti da HTML.

Per implementare e testare il nostro tag, dovremo creare un paio di cose:

  • Una cartella contenente i file di progetto; chiamiamo questa cartella gravatar-custom-tag.
  • Un file HTML index.html all'interno della cartella gravatar-custom-tag. Questo file conterrà il codice HTML.
  • Un file JS codingdude-gravatar.js all'interno della cartella gravatar-custom-tag. Questo file conterrà codice JavaScript che implementerà il tag personalizzato.

Modifichiamo il file index.html e inseriamo il seguente contenuto:

1
<html>
2
    <head>
3
        <script type="text/javascript" src="codingdude-gravatar.js"></script>
4
    </head>
5
<body>
6
    This is my Gravatar picture: 
7
    <codingdude-gravatar email="admin@coding-dude.com"></codingdude-gravatar>
8
</body>
9
</html>

Se carichiamo ora index.html nel browser, il risultato non sarà granché perché dobbiamo ancora implementare il codice per il nostro tag personalizzato:

An example of the custom tagAn example of the custom tagAn example of the custom tag

Una cosa da notare è che il browser è molto indulgente, così sarà possibile avere tags sconosciuti in un documento e il browser semplicemente li ignorerà. Per fare in modo che il nostro tag personalizzato visualizzi l'immagine Gravatar per l'email, dobbiamo prima capire come funziona Gravatar.

Gravatar funziona convertendo un indirizzo di posta elettronica in un URL di un'immagine PNG che l'utente ha selezionato. La traduzione viene effettuata calcolando l'hash MD5 dell'indirizzo email. L'URL dell'immagine Gravatar assomiglia a questo: https://www.gravatar.com/avatar/EMAIL_MD5_HASH.png. Quindi prima abbiamo bisogno di una funzione per calcolare l'hash MD5 di una stringa. Per questo useremo una libreria open-source che aggiungeremo al file index.html in questo modo:

1
<html>
2
    <head>
3
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.7.0/js/md5.min.js"></script>
4
        <script type="text/javascript" src="codingdude-gravatar.js"></script>
5
    </head>
6
<body>
7
    This is my Gravatar picture: <codingdude-gravatar email="admin@coding-dude.com" />
8
</body>
9
</html>

Ora passiamo all'implementazione del tag personalizzato. Avremo bisogno di implementare il codice che identifica innanzitutto il nostro tag personalizzato nel documento, e quindi avremo bisogno di implementare la funzionalità del nostro tag personalizzato. Tutto ciò andrà nel nostro file codingdude-gravatar.js e sarà simile a questo:

1
function customTag(tagName,fn){
2
  document.createElement(tagName);
3
  //find all the tags occurrences (instances) in the document

4
  var tagInstances = document.getElementsByTagName(tagName);
5
  	//for each occurrence run the associated function

6
		for ( var i = 0; i < tagInstances.length; i++) {
7
            fn(tagInstances[i]);
8
		}
9
}
10
11
function codingdudeGravatar(element){
12
		//code for rendering the element goes here

13
		if (element.attributes.email){
14
			//get the email address from the element's email attribute

15
			var email = element.attributes.email.value;
16
			var gravatar = "http://www.gravatar.com/avatar/"+md5(email)+".png";
17
			element.innerHTML = "<img src='"+gravatar+"'>";
18
		}
19
}	
20
21
customTag("codingdude-gravatar",codingdudeGravatar);

Guardando il codice, vediamo la funzione customTag() che cerca le occorrenze di un tag personalizzato dal nome (il parametro tagName) ed esegue la funzionalità connessa con quel tag personalizzato (tramite il parametro fn).

La chiamata a document.createElement(tagName) è necessaria per alcuni browser (IE in particolare) per informare il browser che si utilizzerà un tag personalizzato con il nome tagName, altrimenti il tag potrebbe non funzionare.

Il parametro fn è la funzione che implementa quello che dovrebbe fare il tag personalizzato. Nel nostro caso, fn è codingdudeGravatar(). Questa funzione accetta come parametro un riferimento all'elemento di tag personalizzato. Se il tag personalizzato ha un attributo denominato email passerà tale valore alla funzione md5() dalla nostra libreria open-source. Il risultato verrà quindi utilizzato per comporre l'URL dell'immagine Gravatar, che verrà aggiunto tramite un elemento <img> all'interno del nostro elemento tag personalizzato.

L'ultima riga dello script chiama la funzione customTag() con il nome del tag personalizzato e la sua funzione di implementazione associata. La funzione di tag personalizzato può essere riutilizzata per qualsiasi tipo di tag personalizzato; si dovrà solo implementare la funzione che fa quello che volete.

Ora, se carichiamo il nostro file index.html in un browser, vedremo il Gravatar per la nostra e-mail:

Viewing the Gravatar with the textViewing the Gravatar with the textViewing the Gravatar with the text

Esempio #2: Tag HTML personalizzato avanzato per disegnare un grafico a torta

Nell'esempio precedente, abbiamo visto una semplice implementazione personalizzata di tag HTML. È possibile utilizzare lo stesso approccio per implementare qualsiasi tag personalizzato desideriate.

Vediamo come implementare un tag personalizzato più avanzato, uno che possiamo usare per disegnare un grafico a torta. Creiamo i file necessari per questo tag personalizzato:

  • Create una cartella e nominatela piechart-custom-tag. Questa sarà la nostra cartella di progetto.
  • All'interno della cartella piechart-custom-tag, create un file HTML e nominatelo index.html. Questo file conterrà il codice HTML.
  • Create inoltre un file JavaScript codingdude-piechart.js che conterrà l'implementazione del nostro tag personalizzato.

I tags personalizzati sono molto spesso utilizzati come contenitori per varie funzionalità. Nel nostro caso, utilizzeremo il tag <codingdude-piechart> come contenitore per disegnare un grafico a torta. Se avete perso il tutorial How to Draw Charts Using JavaScript and HTML5 Canvas, vorrete dargli una rapida occhiata. Useremo il codice da quel tutorial per dare funzionalità al nostro tag personalizzato.

Modificate il file codingdude-piechart.js e aggiungete le seguenti funzioni dal tutorial:

  • drawLine()
  • drawArc()
  • drawPieSlice()
  • Piechart()

Ora modificate il file index.html e inserite il tag personalizzato per disegnare il grafico a torta in questo modo:

1
<html>
2
    <head>
3
        <script type="text/javascript" src="codingdude-piechart.js"></script>
4
    </head>
5
<body>
6
    <codingdude-piechart width="200" height="200" colors="#fde23e,#f16e23, #57d9ff,#937e88">
7
      <codingdude-data category="Classical music">10</codingdude-data>
8
      <codingdude-data category="Alternative rock">14</codingdude-data>
9
      <codingdude-data category="Pop">2</codingdude-data>
10
      <codingdude-data category="Jazz">12</codingdude-data>
11
    </codingdude-piechart>
12
</body>
13
</html>

L'intento qui è quello di impostare la larghezza e l'altezza del grafico a torta utilizzando gli attributi width e height. L'attributo colors consente di impostare i colori utilizzati per le sezioni del grafico a torta.

Come accennato prima, questo tag personalizzato è un po' più complesso dal momento che utilizzeremo delle sub-tags. Utilizzeremo i sub-tags <codingdude-data> per impostare i dati per il grafico. Diamo ora un'occhiata a come implementare il codice per questo tag personalizzato.

Modificate il file codingdude-piechart.js e, dopo le funzioni prelevate dal tutorial del grafico a torta, inserite il codice seguente:

1
//here you should add the function from the tutorial

2
//How to Draw Charts Using JavaScript and HTML5 Canvas

3
//...

4
function customTag(tagName,fn){
5
  document.createElement(tagName);
6
        //find all the tags occurrences (instances) in the document

7
        var tagInstances = document.getElementsByTagName(tagName);
8
		//for each occurrence run the associated function

9
		for ( var i = 0; i < tagInstances.length; i++) {
10
            fn(tagInstances[i]);
11
		}
12
}
13
14
function PiechartTag(element){
15
    //add the canvas where to draw the piechart

16
    var canvas = document.createElement("canvas"); 
17
    //get the width and height from the custom tag attributes

18
    canvas.width = element.attributes.width.value;
19
    canvas.height = element.attributes.height.value;
20
    element.appendChild(canvas);
21
    
22
    //get the colors for the slices from the custom tag attribute

23
    var colors = element.attributes.colors.value.split(",");
24
    
25
    //load the chart data from the <codingdude-data> sub-tags

26
    var chartData = {};
27
    var chartDataElements = element.querySelectorAll("codingdude-data");
28
    for (var i=0;i<chartDataElements.length;i++){
29
        chartData[chartDataElements[i].attributes.category.value] = parseFloat(chartDataElements[i].textContent);
30
        //remove the data sub-tags

31
        chartDataElements[i].parentNode.removeChild(chartDataElements[i]);
32
    }
33
  
34
    //call the draw() function

35
    new Piechart(
36
        {
37
        canvas:canvas,
38
        data:chartData,
39
        colors:colors
40
        }
41
    ).draw();
42
}
43
44
customTag("codingdude-piechart",PiechartTag);

La funzione customTag() è la stessa utilizzata nell'Esempio #1. L'implementazione del tag personalizzato <codingdude-piechart> è contenuta nella funzione PiechartTag(). Questa funzione si occupa dei seguenti aspetti:

  • Crea l'elemento <canvas> dove il grafico verrà disegnato, e lo aggiunge all'interno del tag personalizzato. La larghezza e l'altezza del canvas sono ricavati dagli attributi del tag personalizzato.
  • Cerca l'attributo colors dell'elemento e lo trasforma in un array di colori usati per le sezioni del grafico a torta.
  • Carica gli elementi <codingdude-data> uno a uno nella struttura dati passata al grafico a torta. Dal momento che gli elementi hanno contenuto di testo, il browser ne farà il rendering e il testo verrà mostrato. Dal momento che non vogliamo ciò, possiamo semplicemente rimuovere gli elementi dopo aver preso i dati.
  • Infine, chiameremo il costruttore Piechart() con le opzioni richieste e chiameremo poi la funzione draw() per disegnare il grafico a torta.

Se caricate index.html potete vedere che il tag personalizzato viene renderizzato come grafico a torta e dovrebbe assomigliare a questo:

The custom tag is rendered as a pie chartThe custom tag is rendered as a pie chartThe custom tag is rendered as a pie chart

Ed ecco un bellissimo grafico a torta. Cambiando gli attributi di <codingdude-data> cambierà in accordo anche il grafico a torta. Questa tecnica di tag personalizzati è stata utilizzata per lo sviluppo della libreria Infographic Charts & Graphics HTML Tags Library di CodeCanyon.

Infographic charts and graphics HTML tags libraryInfographic charts and graphics HTML tags libraryInfographic charts and graphics HTML tags library
Libreria di grafici di CodeCanyon

La libreria contiene tag personalizzati non solo per i grafici a torta, ma anche per i grafici a linee, grafici a barre e altri tipi di grafici.

Considerazioni finali

In questo tutorial, abbiamo visto due esempi su come creare tag HTML personalizzati per due differenti funzionalità. Utilizzando la funzione customTag(), si può facilmente sviluppare il proprio tag personalizzato.

Se vi è piaciuto questo tutorial, abbiamo anche una vasta gamma di tutorial riguardanti HTML5 e le tecnologie correlate, quindi non esitate a controllare.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.