Abbonati al feed o alla newsletter,
ovviamente è gratis.

jQuery - un semplice tutorial per il vostro primo plugin

Uno degli errori che faccio solitamente è quello di scrivere codice su codice, e spesso quando devo riutilizzarlo penso che avrei potuto scrivere una libreria un poco generica.. un plugin da usare e da implementare man mano che lo sviluppo avanza. Di conseguenza ho cercato diversi tutorial su come crearne uno e devo ammettere che questo che vi sto per presentare è semplice ma efficace.

Il plugin che si vedrà è anche presente come funzionalità base nel repository di jQuery, il suo nome è: jTruncate che potete trovare sul sito dell'autore ossia qui oppure sul sito di jQuery Plugins dova ha il suo spazio (se avete necessità di utilizzare il truncate su lingue asiatiche c'è un plugin appositamente modificato: jTruncSubstr).

L'articolo originale in lingua inglese lo trovate sul sito di Jeremy Martin ma di seguito vi inserisco una traduzione libera con tutto il codice, esempi funzionanti e funzioni utilizzate. Buona lettura!



Titolo: Costruire il tuo primo plugin jQuery (Jeremy Martin)

L'architettura di jquery è così ben pensata e friendly che è possibile creare il proprio plugin molto facilmente. Prima di tutto è indispensabile avere preso confindeza col codice jQuery, sapere quindi bene la sintassi, le potenzialità e soprattutto cosa si vuole ottenere dal plugin (anche solo questo punto non è poi così semplice come sembra, ndt).

Questo tutorial passerà attraverso tutti i punti della creazione del tuo primo plugin, come esempio viene creato un plugin in grado di visualizzare il consiglio o messaggio del giorno da poter inserire nella propria pagina principale. Questo plugin dovrà troncare il messaggio a una specifica lunghezza se necessario e tramite un link espandere l'intero contenuto. Eccovi un esempio funzionante:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam fringilla, purus a ultrices blandit,
odio ante scelerisque neque, vitae imperdiet odio velit ac nisl. Sed tortor metus, placerat condimentum,
feugiat in, feugiat adipiscing, mi. Donec pulvinar sem vitae leo. Vestibulum eget lectus... et ligula hendrerit
pharetra. Sed porta justo ac nisl. Aliquam nisi erat, pellentesque sed, sagittis eu, fringilla sit amet,
dolor. Nam ac mi. Pellentesque pede purus, mattis aliquet, semper nec, cursus a, orci. Duis bibendum nibh
ac massa. Integer eu tortor. Aenean convallis quam at nunc. Nunc mollis tincidunt nisi. Suspendisse mauris
odio, iaculis ut, feugiat vitae, ultrices in, tortor. Quisque at elit. In hac habitasse platea dictumst.
more

Da notare che se Javascript risulta disabilitato (o non supportato) il contenuto sarà visualizzato interamente (quindi pienamente accessibile, ndt).
Ok iniziamo..

step 1
il primo passo è implementare in jQuery la funzione che vogliamo aggiungere. Nel nostro caso, la funzionalità di troncare "truncate". Così prima di tutto bisogna creare un file jquery.truncate.js dopodichè è possibile aggiungere il codice per estendere questa funzionalità, ossia:

$.fn.truncate = function(options) {  
  
   return this.each(function() {  
  
   });  
};  

Ora, se hai programmato con altri frameworks o hai una certa esperienza con jQuery sicuramente saprai che non sempre è possibile usare il $ come alias, perchè potrebbe risultare in conflitto con altri frameworks. Questo è parzialmente vero, per non incappare in questo problema è necessario ritoccare la definizione precedente permettendo di utilizzare un differente alias.
In pratica è sufficiente:

(function($){  
 $.fn.truncate = function() {  
  
    return this.each(function() {  
  
    });  
 };  
})(jQuery);

step 2
prima di continuare nella scrittura del nostro plugin è consigliato creare una pagina di prova per provare il plugin di volta in volta. Quindi, creiamo una pagina whatever_you_want.html e inseriamo il codice seguente come esempio:

<html>  
<head>  
 <title>Truncation Plugin Test</title>  
 <script src="js/jquery.js" type="text/javascript"></script>  
 <script src="js/jquery.truncate.js" type="text/javascript"></script>  
   
 <script type="text/javascript">  
  $().ready(function() {  
   $('.tip').truncate();  
  });  
 </script>  
</head>  
<body>  
 <div class="tip" style="width:200px;background-color:#ccc;padding:10px;">  
  Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam fringilla, purus a ultrices blandit,  
  odio ante scelerisque neque, vitae imperdiet odio velit ac nisl. Sed tortor metus, placerat condimentum,  
  feugiat in, feugiat adipiscing, mi. Donec pulvinar sem vitae leo. Vestibulum eget lectus et ligula hendrerit  
  pharetra. Sed porta justo ac nisl. Aliquam nisi erat, pellentesque sed, sagittis eu, fringilla sit amet,  
  dolor. Nam ac mi. Pellentesque pede purus, mattis aliquet, semper nec, cursus a, orci. Duis bibendum nibh  
  ac massa. Integer eu tortor. Aenean convallis quam at nunc. Nunc mollis tincidunt nisi. Suspendisse mauris  
  odio, iaculis ut, feugiat vitae, ultrices in, tortor. Quisque at elit. In hac habitasse platea dictumst.  
 </div>  
</body>  
</html>  

Guardando il codice è possibile notare che sono presenti sia la libreria jQuery sia quella da noi creata (ossia jquery.truncate.js) entrambe sono presenti in una cartella js. Nello script successivo abbiamo invocato il metodo che abbiamo definito nella classe, anche se di fatto non abbiamo ancora inserito del codice nella funzione truncate.

step 3
Il prossimo passo è inserire un meccanismo per personalizzare il plugin e il suo comportamento, anche perché altrimenti non avrebbe senso creare un plugin. L'ideale sarebbe creare il plugin il più flessibile possibile, dobbiamo anche prevedere dei defaults così che l'utente non sia costretto a inserire ogni volta una lunga lista di parametri. Per fare questo possiamo usare il metodo extend di jQuery e applicandolo al nostro plugin trasformiamo il contenuto del file jquery.truncate.js in:

(function($){  
 $.fn.truncate = function(options) {  
  
  var defaults = {  
   length: 300,  
   minTrail: 20,  
   moreText: "more",  
   lessText: "less",  
   ellipsisText: "..."  
  };  
  var options = $.extend(defaults, options);  
      
  return this.each(function() {  
  
  });  
 };  
})(jQuery);  

I default inseriti sono sufficienti per visualizzare l'esempio, di conseguenza per ora non modificheremo nessuno di questi parametri ma lo faremo alla fine per dimostrarne la funzionalità.

step 4
Prendendosi cura e il tempo necessario epr eseguire tutti i passi precedenti è possibile iniziare a scrivere il codice funzionale, il vero è proprio core del nostr o plugin. Guardando l'ultimo blocco di codice si vede che viene restituito this.each( ... )

Questa linea eseguirà una funzione per ogni elemento dell'array jQuery passato. Così, se per esempio noi chiamiamo $('p').truncate() il codice che scriveremo verrà eseguito su tutti i tag p presenti!!

Dal momento che ipotizzo una certa conoscenza di jQuery, non vi mostrerò nel dettaglio come vengono gestite attualmente le chiamate ai metodi e alle funzioni. Se qualcosa nel codice non è chiaro bisognerebbe far riferimento alla documentazione. Per completare il plugin viene implementato proprio la linea this.each( ... ) aggiungendoci il codice necessario per far funzionare il nostro plugin di esempio:

(function($){  
 $.fn.truncate = function(options) {  
      
  var defaults = {  
   length: 300,  
   minTrail: 20,  
   moreText: "more",  
   lessText: "less",  
   ellipsisText: "..."  
  };  
    
  var options = $.extend(defaults, options);  
      
  return this.each(function() {  
   obj = $(this);  
   var body = obj.html();  
     
   if(body.length > options.length + options.minTrail) {  
    var splitLocation = body.indexOf(' ', options.length);  
    if(splitLocation != -1) {  
     // truncate tip  
     var splitLocation = body.indexOf(' ', options.length);  
     var str1 = body.substring(0, splitLocation);  
     var str2 = body.substring(splitLocation, body.length - 1);  
     obj.html(str1 + '<span class="truncate_ellipsis">' + options.ellipsisText +   
      '</span>' + '<span  class="truncate_more">' + str2 + '</span>');  
     obj.find('.truncate_more').css("display", "none");  
       
     // insert more link  
     obj.append(  
      '<div class="clearboth">' +  
       '<a href="#" class="truncate_more_link">' +  options.moreText + '</a>' +   
      '</div>'  
     );  
  
     // set onclick event for more/less link  
     var moreLink = $('.truncate_more_link', obj);  
     var moreContent = $('.truncate_more', obj);  
     var ellipsis = $('.truncate_ellipsis', obj);  
     moreLink.click(function() {  
      if(moreLink.text() == options.moreText) {  
       moreContent.show('normal');  
       moreLink.text(options.lessText);  
       ellipsis.css("display", "none");  
      } else {  
       moreContent.hide('normal');  
       moreLink.text(options.moreText);  
       ellipsis.css("display", "inline");  
      }  
      return false;  
       });  
    }  
   } // end if  
     
  });  
 };  
})(jQuery);  

Ti accorgerai che ovunque ho avuto la necessità di selezionare un elemento all'interno del plugin, ho sempre usato obj come contesto (per esempio moreLink = $('.truncate_more_link', obj)). Questo è necessario per limitare le selezioni nell'attuale elemento troncato, senza avresti dei risultati imprevedibili.

Ecco, questo è il vostro primo plugin! Anche se, non abbiamo completamente finito dal momento che vi avevo promesso di mostrarvi come modificare le opzioni predefinite.

Nell'esempio successivo - infatti - ogni opzione è stata sovrascritta, anche se era comunque possibile modificare solo una o più opzioni a seconda delle necessità.

$().ready(function() {  
 $('.tip').truncate( {  
  length: 120,  
  minTrail: 10,  
  moreText: 'show more',  
  lessText: 'show less',  
  ellipsisText: " [there's more...]"  
 });  
});  

E' sufficiente sostituire lo script precedente nella pagina di test ottenendo quindi:

<html>  
<head>  
 <title>Truncation Plugin Test</title>  
 <script src="js/jquery.js" type="text/javascript"></script>  
 <script src="js/jquery.truncate.js" type="text/javascript"></script>  
   
 <script type="text/javascript">  
$().ready(function() {  
 $('.tip').truncate( {  
  length: 120,  
  minTrail: 10,  
  moreText: 'show more',  
  lessText: 'show less',  
  ellipsisText: " [there's more...]"  
 });  
}); 
 </script>  
</head>  
<body>  
 <div class="tip" style="width:200px;background-color:#ccc;padding:10px;">  
  Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam fringilla, purus a ultrices blandit,  
  odio ante scelerisque neque, vitae imperdiet odio velit ac nisl. Sed tortor metus, placerat condimentum,  
  feugiat in, feugiat adipiscing, mi. Donec pulvinar sem vitae leo. Vestibulum eget lectus et ligula hendrerit  
  pharetra. Sed porta justo ac nisl. Aliquam nisi erat, pellentesque sed, sagittis eu, fringilla sit amet,  
  dolor. Nam ac mi. Pellentesque pede purus, mattis aliquet, semper nec, cursus a, orci. Duis bibendum nibh  
  ac massa. Integer eu tortor. Aenean convallis quam at nunc. Nunc mollis tincidunt nisi. Suspendisse mauris  
  odio, iaculis ut, feugiat vitae, ultrices in, tortor. Quisque at elit. In hac habitasse platea dictumst.  
 </div>  
</body>  
</html>  

Questo codice produrrà un risultato leggermente diverso dal primo mostrato, eccovi l'esempio funzionante:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam fringilla, purus a ultrices blandit,
odio ante scelerisque [there's more...] neque, vitae imperdiet odio velit ac nisl. Sed tortor metus, placerat condimentum,
feugiat in, feugiat adipiscing, mi. Donec pulvinar sem vitae leo. Vestibulum eget lectus et ligula hendrerit
pharetra. Sed porta justo ac nisl. Aliquam nisi erat, pellentesque sed, sagittis eu, fringilla sit amet,
dolor. Nam ac mi. Pellentesque pede purus, mattis aliquet, semper nec, cursus a, orci. Duis bibendum nibh
ac massa. Integer eu tortor. Aenean convallis quam at nunc. Nunc mollis tincidunt nisi. Suspendisse mauris
odio, iaculis ut, feugiat vitae, ultrices in, tortor. Quisque at elit. In hac habitasse platea dictumst.
show more

Questo è quanto, complimenti il vostro primo plugin è pronto per essere utilizzato!

Collegamenti esterni: jTruncate Plugin (jeremymartin.name) | jTruncate Plugin (jQuery.com) | jTruncSubstr Plugin (jQuery.com) | Tutorial originale (jeremymartin.name, in inglese) | jQuery

Pubblicato da: nickel il sabato 24 gennaio 2009 alle 01:00
Argomenti: Informatica, jQuery, jTruncate, Tutorial
 

Post più recente Post più vecchio Home page

ondare

là, quando ondando vanno le campane

Link List 2

  • AdSense
  • Android
  • Apple
  • Arte
  • Attualità
  • blockUI
  • blog
  • Email
  • Fax
  • Feste
  • Festività
  • Film
  • FloatingDialog
  • Free
  • Freeware
  • Giochi
  • Google
  • Graffiti
  • idTabs
  • Impresa
  • Informatica
  • Java
  • jNice
  • jQuery
  • jTruncate
  • Libri
  • Lightbox
  • Marketing
  • Masterizzare
  • Medicina
  • Microsoft
  • nofollow
  • Notizie
  • Olocausto
  • Opensource
  • PHP
  • progressBar
  • Recensioni
  • Running
  • Salute
  • SEO
  • Sicurezza
  • Skype
  • Sports
  • Storia
  • tags
  • Torino
  • Traduttore
  • Tutorial
  • Varie
  • Video
  • Voip
  • web2.0
  • Webdesign

Link List 1

  • AdSense
  • Android
  • Apple
  • Arte
  • Attualità
  • blockUI
  • blog
  • Email
  • Fax
  • Feste
  • Festività
  • Film
  • FloatingDialog
  • Free
  • Freeware
  • Giochi
  • Google
  • Graffiti
  • idTabs
  • Impresa
  • Informatica
  • Java
  • jNice
  • jQuery
  • jTruncate
  • Libri
  • Lightbox
  • Marketing
  • Masterizzare
  • Medicina
  • Microsoft
  • nofollow
  • Notizie
  • Olocausto
  • Opensource
  • PHP
  • progressBar
  • Recensioni
  • Running
  • Salute
  • SEO
  • Sicurezza
  • Skype
  • Sports
  • Storia
  • tags
  • Torino
  • Traduttore
  • Tutorial
  • Varie
  • Video
  • Voip
  • web2.0
  • Webdesign
  • no image Blog - aggregatori web sono gioie o dolori?
  • Android AVD lento? Mettigli le ali col RAMDisk Android AVD lento? Mettigli le ali col RAMDisk
  • no image Internet - Libertà e sicurezza nella rete? Amore e odio.
  • no image Freeware - Codec unico per film e video: CCCP
  • no image Oops, il Natale si avvicina..
  • no image Colpire il presidente, si può... e non è il primo attentato!
  • no image Capodanno Due Zero Zero Nove
  • no image Salute - AIDS / HIV: anche i virus tremano
  • no image jQuery: slideshow su blogger? semplice e implementabile!
  • no image Blog - essere o non essere nofollow questo è il dilemma!
  • Home page

Link List 4

  • AdSense
  • Android
  • Apple
  • Arte
  • Attualità
  • blockUI
  • blog
  • Email
  • Fax
  • Feste
  • Festività
  • Film
  • FloatingDialog
  • Free
  • Freeware
  • Giochi
  • Google
  • Graffiti
  • idTabs
  • Impresa
  • Informatica
  • Java
  • jNice
  • jQuery
  • jTruncate
  • Libri
  • Lightbox
  • Marketing
  • Masterizzare
  • Medicina
  • Microsoft
  • nofollow
  • Notizie
  • Olocausto
  • Opensource
  • PHP
  • progressBar
  • Recensioni
  • Running
  • Salute
  • SEO
  • Sicurezza
  • Skype
  • Sports
  • Storia
  • tags
  • Torino
  • Traduttore
  • Tutorial
  • Varie
  • Video
  • Voip
  • web2.0
  • Webdesign

Link List 3

  • AdSense
  • Android
  • Apple
  • Arte
  • Attualità
  • blockUI
  • blog
  • Email
  • Fax
  • Feste
  • Festività
  • Film
  • FloatingDialog
  • Free
  • Freeware
  • Giochi
  • Google
  • Graffiti
  • idTabs
  • Impresa
  • Informatica
  • Java
  • jNice
  • jQuery
  • jTruncate
  • Libri
  • Lightbox
  • Marketing
  • Masterizzare
  • Medicina
  • Microsoft
  • nofollow
  • Notizie
  • Olocausto
  • Opensource
  • PHP
  • progressBar
  • Recensioni
  • Running
  • Salute
  • SEO
  • Sicurezza
  • Skype
  • Sports
  • Storia
  • tags
  • Torino
  • Traduttore
  • Tutorial
  • Varie
  • Video
  • Voip
  • web2.0
  • Webdesign


In evidenza

Ti è piaciuto qualcosa del mio blog?
Hai trovato degli articoli interessanti?

Allora perché non fai una donazione? ad esempio a una di queste organizzazioni:

Ultimi articoli e commenti

Ultimi commenti

Argomenti

  • Arte (1)
  • Attualità (10)
  • Film (2)
  • Free (9)
  • Informatica (24)
  • Notizie (7)
  • Recensioni (10)
  • Salute (4)
  • Storia (1)
  • Tutorial (10)
  • Varie (21)

Contattami

Se avete suggerimenti, consigli, segnalazioni di errori o semplicemente mi volete scrivere.. potete farlo a
QUESTO INDIRIZZO

Oppure se volete potete leggervi qualcosa in più su questo sito e in particolare
SU DI ME

Qualcosa da leggere

  • jQuery - Semplici panelli spostabili
  • jQuery - Il fai da te dei tags
  • PHP - Sicurezza: Captcha e le macchine ribelli!
  • Android AVD lento? Mettigli le ali col RAMDisk
  • SEO - Le varie emozioni del Web(design)
  • Disqus - il commento conviene
  • Java - Tutorial sui Microsoft Tags
  • Internet - Libertà e sicurezza nella rete? Amore e odio.
  • jQuery: slideshow su blogger? semplice e implementabile!
  • jQuery - lightBox e Blogger anche in galleria

Da non perdere


www.dizionariodellacorsa.it

2008-2012 / ondare.org, theme designed and pimped by nickel / Ondare Blog

Vuoi abbonarti tramite feed?
Vuoi pubblicare un tuo articolo?
Vuoi aggiornarti tramite email?
Vuoi inviare dei suggerimenti?

Vuoi tornare alla pagina principale?
Vuoi collaborare con ondare?
Vuoi scaricare l'antipixel?
Vuoi conoscermi meglio?