<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://prendreuncafe.com/blog/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Prendre un Café - Tag - scriptaculous</title>
  <link>http://prendreuncafe.com/blog/</link>
  <atom:link href="http://prendreuncafe.com/blog/feed/tag/scriptaculous/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 01 Feb 2011 14:49:24 +0100</pubDate>
  <copyright>Contenus sous licence Creative Commons BY-SA</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Effets javascript avec Prototype et Scriptaculous</title>
    <link>http://prendreuncafe.com/blog/post/2006/03/19/410-effets-javascript-avec-prototype-et-scriptaculous</link>
    <guid isPermaLink="false">urn:md5:355ff902cfb1e787272138ff44918ab1</guid>
    <pubDate>Sun, 19 Mar 2006 13:19:00 +0000</pubDate>
    <dc:creator>NiKo</dc:creator>
        <category>Dev</category>
        <category>dev</category><category>effets</category><category>javascript</category><category>prototype</category><category>scriptaculous</category><category>tutoriel</category><category>web</category>    
    <description>&lt;p&gt;On a vu fleurir moult trolls velus à propos du web 2.0 et sa débauche d&amp;#8217;&lt;acronym&gt;AJAX&lt;/acronym&gt; et de javaScript inaccessibles, je ne les nourrirai pas ici. Par contre et pour ceux que ça interesse, les librairies &lt;a href=&quot;http://prototype.conio.net/&quot; hreflang=&quot;en&quot;&gt;prototype&lt;/a&gt; et &lt;a href=&quot;http://script.aculo.us/&quot; hreflang=&quot;en&quot;&gt;script.aculo.us&lt;/a&gt; proposent des outils et effets très sympathiques. Voici quelques exemples très simples d&amp;#8217;utilisation.&lt;/p&gt;    &lt;h3&gt;Installation&lt;/h3&gt;


&lt;p&gt;Le plus simple est de récupérer la &lt;a href=&quot;http://script.aculo.us/downloads&quot; hreflang=&quot;en&quot;&gt;dernière version de scriptaculous&lt;/a&gt; qui contient elle même une version toujours récente de prototype. Ceci fait, decompactez l&amp;#8217;archive et copiez les librairies dans un répertoires de votre serveur web. Pour ma part, je mets tout ça dans un répertoire &lt;code&gt;js&lt;/code&gt;. Il ne reste qu&amp;#8217;à les appeller dans l&amp;#8217;entête de votre document &lt;acronym&gt;HTML&lt;/acronym&gt;&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Mon test&amp;lt;/title&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/prototype.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/scriptaculous.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  ...
&lt;/pre&gt;


&lt;h3&gt;Utilisation&lt;/h3&gt;


&lt;p&gt;Réalisons un petit document &lt;acronym&gt;HTML&lt;/acronym&gt; pour commencer à utiliser quelques effets &lt;em&gt;scriptaculaires&lt;/em&gt;&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Mon test&amp;lt;/title&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/prototype.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/scriptaculous.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;h1 id=&amp;quot;title&amp;quot;&amp;gt;
      &amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Lorem ipsum dolor sit amet&amp;lt;/a&amp;gt;
    &amp;lt;/h1&amp;gt;
    &amp;lt;p id=&amp;quot;mytext&amp;quot; style=&amp;quot;display:none&amp;quot;&amp;gt;
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut 
    fringilla arcu at turpis. Fusce libero. Morbi libero dolor, 
    vestibulum id, facilisis quis, malesuada vel, mi. Curabitur 
    rutrum sapien at ante. Sed consectetuer accumsan sapien. 
    Suspendisse scelerisque malesuada magna. Ut laoreet, sapien 
    facilisis venenatis pharetra, metus libero malesuada purus, id 
    ultrices dolor odio id nunc. Nullam vestibulum. Vivamus lectus 
    lacus, volutpat ut, varius sit amet, gravida at, nisi. 
    Suspendisse sodales auctor mi. Mauris est.&amp;lt;/p&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Vous noterez que ce document fort simple n&amp;#8217;affiche pour l&amp;#8217;instant que le titre du document - nanti d&amp;#8217;un lien hypertexte vide - du fait du style &lt;code&gt;display:none&lt;/code&gt; appliqué au paragraphe principal. Pour que le texte de l&amp;#8217;article apparaisse en fondu lors d&amp;#8217;un clic sur le titre, il suffit d&amp;#8217;utiliser ce simple appel javascript sur le lien de la balise de titre&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;h1 id=&amp;quot;title&amp;quot;&amp;gt;
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Appear('mytext', 1)&amp;quot;&amp;gt;Lorem ipsum dolor sit amet&amp;lt;/a&amp;gt;
&amp;lt;/h1&amp;gt;
&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;Magique non&amp;#160;? Simple, assurément.&lt;/strong&gt; La méthode &lt;code&gt;Appear()&lt;/code&gt; de l&amp;#8217;objet &lt;code&gt;Effect&lt;/code&gt; accèpte deux arguments&amp;#160;: le premier est l&amp;#8217;identifiant unique de l&amp;#8217;objet &lt;acronym&gt;DOM&lt;/acronym&gt; de la page courante (dans notre exemple, l&amp;#8217;id &lt;code&gt;mytext&lt;/code&gt; est attribué à notre paragraphe). Le second paramètre est la durée en secondes de l&amp;#8217;effet. Amusez-vous à en modifier la valeur et à tester le résultat.&lt;/p&gt;


&lt;p&gt;De la même manière, vous pouvez appliquer d&amp;#8217;autres effets à ce pauvre bloc de texte&amp;#160;; pour en tester une grande partie, ajoutez cette portion de code à notre page de test&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;p&amp;gt;
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.BlindDown('mytext', 1)&amp;quot;&amp;gt;BlindDown&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.BlindUp('mytext', 1)&amp;quot;&amp;gt;BlindUp&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Highlight('mytext', 1)&amp;quot;&amp;gt;Highlight&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Grow('mytext', 1)&amp;quot;&amp;gt;Grow&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Shrink('mytext', 1)&amp;quot;&amp;gt;Shrink&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Squish('mytext', 1)&amp;quot;&amp;gt;Squish&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.SwitchOff('mytext', 1)&amp;quot;&amp;gt;SwitchOff&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Shake('mytext', 1)&amp;quot;&amp;gt;Shake&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Pulsate('mytext', 1)&amp;quot;&amp;gt;Pulsate&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.Fold('mytext', 1)&amp;quot;&amp;gt;Fold&amp;lt;/a&amp;gt; |
  &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;new Effect.DropOut('mytext', 1)&amp;quot;&amp;gt;DropOut&amp;lt;/a&amp;gt; |
  &amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;Reset&amp;quot; onclick=&amp;quot;new Effect.Appear('mytext', 1)&amp;quot; /&amp;gt;
&amp;lt;/p&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Voila une page vous permettant de tester les exemples&amp;#160;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://prendreuncafe.com/blog/share/scriptaculous-test/effects.html&quot; hreflang=&quot;fr&quot;&gt;Page de démonstration des différents effets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notez également la possibilité d&amp;#8217;utiliser un méthode de &lt;em&gt;scrolling doux&lt;/em&gt; lors de la navigation au sein d&amp;#8217;une même page grâce à l&amp;#8217;utilisation d&amp;#8217;ancres nommées, et ce grâce à l&amp;#8217;effet &lt;code&gt;ScrollTo&lt;/code&gt;&amp;#160;: encore une fois, un exemple vaut mieux qu&amp;#8217;un long discours&amp;#160;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://prendreuncafe.com/blog/share/scriptaculous-test/scrollto.html&quot; hreflang=&quot;fr&quot;&gt;Exemple de scrolling fluide entre ancres nommées&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La syntaxe de l&amp;#8217;appel à cette fonction est extrêmement simple&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;a href=&amp;quot;#nav1&amp;quot; onclick=&amp;quot;new Effect.ScrollTo('nav1',{duration:1});return false;&amp;quot;&amp;gt;Lorem ipsum dolor sit amet&amp;lt;/a&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Vous l&amp;#8217;aurez compris, il faut passer en premier argument l&amp;#8217;id &lt;acronym&gt;DOM&lt;/acronym&gt; que vous ciblez (qui fera office d&lt;em&gt;&amp;#8216;ancre nommée&lt;/em&gt;), et en second paramètre la durée du défilement.&lt;/p&gt;


&lt;p&gt;Vous trouverez sur le wiki officiel de la librairie une &lt;a href=&quot;http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo&quot; hreflang=&quot;en&quot;&gt;liste complète d&amp;#8217;exemples&lt;/a&gt; d&amp;#8217;utilisation des effets combinés.&lt;/p&gt;


&lt;h3&gt;Et l&amp;#8217;accessibilité dans tout ça&amp;#160;?&lt;/h3&gt;


&lt;p&gt;L&amp;#8217;influence de l&amp;#8217;utilisation d&amp;#8217;effets javascript sur l&amp;#8217;accessibilité &lt;strong&gt;n&amp;#8217;est que de votre ressort&lt;/strong&gt;. Dans notre exemple précédent, la page est potentiellement inaccessible puisque notre paragraphe &lt;code&gt;mytext&lt;/code&gt; possède un attribut de style &lt;code&gt;display:none&lt;/code&gt;, non lu par quelques lecteurs d&amp;#8217;écran du marché. Qu&amp;#8217;à cela ne tienne, il nous faut impérativement gérer le contenu de l&amp;#8217;attribut &lt;code&gt;href&lt;/code&gt; de nos balises de liens utilisant javascript, de manière à ce que &lt;strong&gt;javascript ne soit pas nécessaire à la consultation des informations&lt;/strong&gt; et qu&amp;#8217;un clic sur le lien nous amène à une page affichant le contenu de notre paragraphe. Par exemple, on pourrait imaginer&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;a href=&amp;quot;afficher_article.php?full=1&amp;quot; onclick=&amp;quot;new Effect.Appear('mytext', 1)&amp;quot;&amp;gt;Test d'accessibilit&amp;amp;eacute;&amp;lt;/a&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Parfait, notre lien est cliquable et nous redirige vers une autre page. Ah oui, mais nous avons un problème&amp;#160;: du coup ce lien prend la main sur notre effet javascript&amp;#8230; Qu&amp;#8217;à cela ne tienne, le problème est résolu en renvoyant la valeur &lt;code&gt;false&lt;/code&gt; lors de l&amp;#8217;execution de l&amp;#8217;action clic sur le lien&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;a href=&amp;quot;afficher_article.php?full=1&amp;quot; onclick=&amp;quot;new Effect.Appear('mytext', 1);return false&amp;quot;&amp;gt;Test d'accessibilit&amp;amp;eacute;&amp;lt;/a&amp;gt;
&lt;/pre&gt;


&lt;h3&gt;&lt;acronym&gt;AJAX&lt;/acronym&gt; rend vos pages plus brillantes&lt;/h3&gt;


&lt;p&gt;Prototype et Scriptaculous proposent des outils qui vous simplifient la vie pour faire de l&amp;#8217;&lt;acronym&gt;AJAX&lt;/acronym&gt;. Par exemple, la fameuse autocompletion du champ recherche relève du jeu d&amp;#8217;enfant. Imaginons que vous souhaitiez proposer l&amp;#8217;autocompletion d&amp;#8217;un champ de formulaire pour le choix d&amp;#8217;un prénom. Voici le formulaire de base&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
  &amp;lt;label for=&amp;quot;prenom&amp;quot;&amp;gt;Quel est votre pr&amp;amp;eacute;nom ?&amp;lt;/label&amp;gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;30&amp;quot; name=&amp;quot;prenom&amp;quot; id=&amp;quot;prenom&amp;quot; /&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Scriptaculous propose un objet &lt;code&gt;Ajax&lt;/code&gt; très pratique et disposant nativement d&amp;#8217;une méthode &lt;code&gt;Updater()&lt;/code&gt; permettant de s&amp;#8217;acquitter de la tâche qui nous interesse. Voici le code final&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
  &amp;lt;label for=&amp;quot;prenom&amp;quot;&amp;gt;Quel est votre pr&amp;amp;eacute;nom ?&amp;lt;/label&amp;gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;30&amp;quot; name=&amp;quot;prenom&amp;quot; id=&amp;quot;prenom&amp;quot; /&amp;gt;
  &amp;lt;div id=&amp;quot;prn_update&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
new Ajax.Autocompleter (
  'prenom',      // ID of the source field
  'prn_update',  // ID of the DOM element to update
  'prenoms.php', // Remote script URI
  {method: 'post', paramName: 'prenom'}
);
&amp;lt;/script&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Je pense que le code parle de lui-même, mais au cas où cela ne soit pas clair pour tout le monde, détaillons ensemble les différents éléments&amp;#160;:&lt;/p&gt;

&lt;pre&gt; xml
&amp;lt;div id=&amp;quot;prn_update&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Cet élément sera le &lt;em&gt;receptacle&lt;/em&gt; de nos appels asynchrones au script &lt;code&gt;prenoms.php&lt;/code&gt;&amp;#160;; c&amp;#8217;est dans cet élément que seront inscrites les informations reçues, en l&amp;#8217;occurence ici la liste des prénoms correspondants aux lettres saisies dans l&amp;#8217;élément de formulaire &lt;code&gt;prenom&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt; javascript
new Ajax.Autocompleter (
  'prenom',      // ID of the source field
&lt;/pre&gt;


&lt;p&gt;Le premier argument de notre objet sera l&amp;#8217;identifiant &lt;acronym&gt;DOM&lt;/acronym&gt; du champ de formulaire à qui l&amp;#8217;on destine l&amp;#8217;autocompletion.&lt;/p&gt;

&lt;pre&gt; javascript
  'prn_update',  // ID of the DOM element to update
&lt;/pre&gt;


&lt;p&gt;Ce deuxième argument est l&amp;#8217;identifiant &lt;acronym&gt;DOM&lt;/acronym&gt; du receptacle des informations reçues.&lt;/p&gt;

&lt;pre&gt; javascript
  'prenoms.php', // Remote script URI
&lt;/pre&gt;


&lt;p&gt;Le troisième argument n&amp;#8217;est autre que l&amp;#8217;&lt;acronym&gt;URI&lt;/acronym&gt; du script qui nous fournira nos données. A titre d&amp;#8217;exemple, pour notre liste de prénoms, le script &lt;acronym&gt;PHP&lt;/acronym&gt; pourrait être&amp;#160;:&lt;/p&gt;

&lt;pre&gt; php
&amp;lt;?php
$p = array(&amp;quot;Aaron&amp;quot;, &amp;quot;Abdallah&amp;quot;, &amp;quot;Abdel&amp;quot;, &amp;quot;Vous pouvez completer cette liste a votre guise...&amp;quot;, &amp;quot;Yvon&amp;quot;, &amp;quot;Zoubida&amp;quot;, &amp;quot;Zouhir&amp;quot;, &amp;quot;Zorobabel&amp;quot;);
$q = $_POST['prenom']; $i = 0;
if ($q != &amp;quot;&amp;quot;) {
  echo '&amp;lt;ul&amp;gt;';
  foreach($p as $prn) {
    if (substr(strtolower($prn),0,strlen($q)) == strtolower(stripslashes($q))) {
      echo '&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;return false&amp;quot;&amp;gt;'.htmlentities($prn).'&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;';
      if (++$i &amp;gt;= 10) die('&amp;lt;li&amp;gt;...&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;');
    }
  }
  echo '&amp;lt;/ul&amp;gt;';
}
?&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Enfin, le quatrième argument de notre objet &lt;code&gt;Ajax.Updater&lt;/code&gt; est un objet javascript de paramétrage de la requête&amp;#160;:&lt;/p&gt;

&lt;pre&gt; javascript
  {method: 'post', paramName: 'prenom'}
);
&lt;/pre&gt;


&lt;p&gt;La propriété &lt;code&gt;method&lt;/code&gt; spécifie la méthode &lt;acronym&gt;HTTP&lt;/acronym&gt; que vous souhaitez utiliser pour interroger votre script (dans notre cas, &lt;code&gt;post&lt;/code&gt;) et &lt;code&gt;paramName&lt;/code&gt; déclare le nom de la variable à passer au script pour l&amp;#8217;interrogation&amp;#160;; dans notre cas nous passons &lt;code&gt;prenom&lt;/code&gt; qui sera ainsi correctement interprétée et traitée par notre script PHP en utilisant &lt;code&gt;$_POST['prenom']&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Bien évidemment, il est possible de grandement améliorer l&amp;#8217;esthétique du menu généré grâce à l&amp;#8217;utilisation de règles &lt;acronym&gt;CSS&lt;/acronym&gt; appropriées. Par exemple&amp;#160;:&lt;/p&gt;

&lt;pre&gt; css
  #prn_update {
    border: 1px solid #999;
    background: #fafafa;
  }
  #prn_update ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  #prn_update a {
    display: block;
    padding: .2em .3em;
    text-decoration: none;
    color: #333;
  }
  .selected {
    background: lightyellow;
  }
&lt;/pre&gt;


&lt;p&gt;Enfin, voila un lien vers l&amp;#8217;exemple en live&amp;#160;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://prendreuncafe.com/blog/share/scriptaculous-test/autocomplete.html&quot; hreflang=&quot;fr&quot;&gt;Test de l&amp;#8217;autocompletion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;


&lt;p&gt;Nous avons à peine survolé un dixième des capacités de ces librairies au potentiel pour le moins énorme. Et comme vous avez pu le constater, la facilité de mise en place et d&amp;#8217;utilisation sont au rendez-vous, les résultats spéctaculaires et améliorant de façon significative la navigation et la consultation des informations.&lt;/p&gt;


&lt;p&gt;Attention toutefois à ne pas surcharger vos pages d&amp;#8217;effets et veillez toujours à ce que ces derniers restent au service de l&amp;#8217;efficacité et de l&amp;#8217;utilisabilité de vos interfaces, en n&amp;#8217;oubliant jamais de garder les problématiques d&amp;#8217;accessibilité à l&amp;#8217;esprit &lt;img src=&quot;/blog/themes/battlestar/smilies/wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p style=&quot;margin:.5em 0;padding:.5em;border:1px solid #333;background:#eee;color:#222&quot;&gt;&lt;small&gt;Ce billet intitulé &lt;a href=&quot;http://prendreuncafe.com/blog/post/2006/03/19/410-effets-javascript-avec-prototype-et-scriptaculous&quot;&gt;Effets javascript avec Prototype et Scriptaculous&lt;/a&gt; a été rédigé par &lt;a href=&quot;http://prendreuncafe.com/cv&quot;&gt;Nicolas Perriault&lt;/a&gt; et publié sur le blog &lt;a href=&quot;http://prendreuncafe.com/blog/&quot;&gt;Prendre un Café&lt;/a&gt; sous licence &lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.5/&quot;&gt;Creative Commons BY-NC-SA&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>

