<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>web-memento &#187; Javascript</title>
	<atom:link href="http://www.web-memento.fr/categories/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.web-memento.fr</link>
	<description>Cahier(s) d&#039;un développeur web</description>
	<lastBuildDate>Mon, 21 Jun 2010 08:08:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Créer ses propres évènements javascript avec Prototype</title>
		<link>http://www.web-memento.fr/creer-ses-propres-evenements-javascript-avec-prototype</link>
		<comments>http://www.web-memento.fr/creer-ses-propres-evenements-javascript-avec-prototype#comments</comments>
		<pubDate>Mon, 06 Jul 2009 21:25:07 +0000</pubDate>
		<dc:creator>Luc</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Prototype]]></category>
		<guid isPermaLink="false">http://www.web-memento.fr/?p=411</guid>
		<description><![CDATA[Dans certains développements javascript, il peut être utile de transmettre des évènements personnalisés dans le DOM. Une telle programmation permettrait par exemple à d&#8217;autres scripts d&#8217;attraper ces évènements afin de réaliser des opérations spécifiques à des moments précis. dom:loaded : l&#8217;évènement personnalisé de Prototype Quoi de plus naturel que de présenter le seul évènement personnalisé [...]]]></description>
			<content:encoded><![CDATA[<p>Dans certains <strong>développements javascript</strong>, il peut être utile de transmettre <strong>des évènements personnalisés</strong> dans le <acronym title="Document Object Model">DOM</acronym>. Une telle programmation permettrait par exemple à d&#8217;autres scripts d&#8217;attraper ces évènements afin de réaliser des opérations spécifiques à des moments précis.</p>
<h2><span class="code">dom:loaded</span> : l&#8217;évènement personnalisé de Prototype</h2>
<p>Quoi de plus naturel que de présenter <strong>le seul évènement personnalisé de Prototype</strong>, mais pas des moindres : <span class="code">dom:loaded</span>. Cet évènement est transmis par Prototype lorsque <strong>l&#8217;arbre <acronym title="Document Object Model">DOM</acronym> est chargé</strong>, ce qui permet de lancer des actions javascript sans avoir besoin d&#8217;attendre le téléchargement des éléments &laquo;&nbsp;lourds&nbsp;&raquo; de la page (images, flash, &#8230;). Son utilisation est très simple, puisqu&#8217;il suffit de placer un écouteur comme pour n&#8217;importe quel autre type d&#8217;évènement :</p>
<pre class="brush: jscript;">
function doAnything( event ) {
  // faire quelque chose
}
document.observe( 'dom:loaded', doAnything );
</pre>
<h2>Dans quel cas utiliser des évènements personnalisés ?</h2>
<p>Dans de nombreux développement basés sur javascript, on est souvent habitué à utilisé des <strong>fonctions de callback</strong>, qui permettent d&#8217;utiliser une fonction spécifique à un moment particulier du code. D&#8217;ailleurs bien souvent, cette fonction de callback est nécessaire <strong>au bon déroulement de l&#8217;application</strong>.</p>
<p>Dans d&#8217;autres cas, on peut préférer <strong>avertir qui veut bien</strong> que telle action s&#8217;est déroulée, libre aux autres scripts <strong>d&#8217;intercepter</strong> cette information et d&#8217;en faire ce que bon lui semble !</p>
<p>Prenons l&#8217;exemple d&#8217;un script générique permettant d&#8217;afficher ou de cacher un bloc selon son état :</p>
<pre class="brush: jscript;">
function toggleElement( element ) {
  element = $( element );
  if( element.visible() ) {
    element.hide();
    element.fire( 'element:hided' );
  }
  else {
    element.show();
    element.fire( 'element:showed' );
  }
}
</pre>
<p>On pourrait avoir <strong>aucun ou mille autres scripts</strong> qui auraient la possibilité d&#8217;utiliser les évènements transmis pour effectuer des opérations quelconques :</p>
<pre class="brush: jscript;">
$( 'elementId' ).observe( 'element:showed', function( event ){
  // doAnything
});
$( 'elementId' ).observe( 'element.hided', function( event ){
  // doAnything
});
toggleElement( 'elementId' );
</pre>]]></content:encoded>
			<wfw:commentRss>http://www.web-memento.fr/creer-ses-propres-evenements-javascript-avec-prototype/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développer en javascript avec Prototype</title>
		<link>http://www.web-memento.fr/developper-en-javascript-avec-prototype</link>
		<comments>http://www.web-memento.fr/developper-en-javascript-avec-prototype#comments</comments>
		<pubDate>Mon, 29 Jun 2009 23:04:01 +0000</pubDate>
		<dc:creator>Luc</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Prototype]]></category>
		<guid isPermaLink="false">http://www.web-memento.fr/?p=339</guid>
		<description><![CDATA[Prototype est le 1er framework javascript à avoir vu le jour. Son but est de faciliter le développement d&#8217;applications javascript &#171;&#160;cross-browser&#160;&#187;, c&#8217;est-à-dire sans avoir à se soucier du navigateur qui va exécuter le code, de faciliter l&#8217;utilisation d&#8217;AJAX et d&#8217;étendre les fonctions du DOM. Pour vous procurer la dernière version de Prototype,  rendez-vous sur la [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Prototype</strong> est le 1er <strong>framework javascript</strong> à avoir vu le jour. Son but est de faciliter le développement d&#8217;applications javascript <strong>&laquo;&nbsp;cross-browser&nbsp;&raquo;</strong>, c&#8217;est-à-dire sans avoir à se soucier du navigateur qui va exécuter le code, de <strong>faciliter l&#8217;utilisation d&#8217;<acronym title="Asynchronous JavaScript and XML">AJAX</acronym></strong> et d&#8217;<strong>étendre les fonctions du <acronym title="Document Object Model">DOM</acronym></strong>.</p>
<p>Pour vous procurer la dernière version de Prototype,  rendez-vous sur la <a title="Télécharger la dernière version de Prototype" href="http://www.prototypejs.org/download">page de téléchargement</a>.</p>
<h2>La fonction $() : la base de Prototype</h2>
<p>Prototype défini la fonction fondamentale <span class="code"><strong>$()</strong></span>. Pour bon nombre de débutants, cette fonction tend à être un raccourci du classic <span class="code">document.getElementByID();</span> si connu. Il n&#8217;en est rien !</p>
<p>Certes, elle réalise le même travail qui est de récupérer l&#8217;élément unique de la page ayant pour valeur d&#8217;attribut <span class="code">id</span> le paramètre passé à la fonction :</p>
<pre class="brush: jscript;">
&lt;div id=&quot;monDiv&quot;&gt;...&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
// Javascript standard
var monDiv = document.getElementById( 'monDiv' );
// Avec Prototype
var monDiv = $( 'monDiv' );
</pre>
<p>On a effectivement dans notre variable <span class="code">monDiv</span> l&#8217;élément <span class="code">div</span> sur lequel on peut effectuer des opérations grâce à javascript. Mais le fait de l&#8217;avoir récupéré avec la fonction de Prototype a permis de lui attribuer <strong>toutes les fonctionnalités</strong> offertes par le Framework, qui sont, je vous l&#8217;assure, <strong>aussi nombreuses que puissantes</strong> :</p>
<pre class="brush: jscript;">
// Cacher l'élément
monDiv.style.display = 'none'; // Standard
monDiv.hide(); // Prototype
/* Facile, je l'accorde ! */
// Afficher l'élément
monDiv.style.display = 'block; // Standard
monDiv.show(); // Prototype
/* Aussi simple ! */
/* Affiche ou cache un élément
* selon son état actuel
*/
function myToggle( el ) {
el = document.getElementById( el );
if( 'block' === el.style.display ) {
el.style.display = 'none';
}
else {
el.style.display = 'block';
}
}
// Prototype
monDiv.toggle();
&lt;div id=&quot;unDiv&quot;&gt;...&lt;/div&gt;
&lt;p id=&quot;unP&quot;&gt;...&lt;/p&gt;
&lt;ul id=&quot;unUl&quot;&gt;&lt;/ul&gt;
myToggle( 'unDiv' );
myToggle( 'unP');
myToggle( 'unUl' );
// Prototype
$( 'unDiv', 'unP', 'unUl' ).invoke( 'toggle' );
/* Ah ouai, quand même! */
</pre>
<p>Bien sûr, ces exemples ne sont là que pour vous présenter rapidement les fonctionnalités de Prototype et j&#8217;aurai tout le loisir de vous en proposer des biens plus élaborés afin de vous persuader de l&#8217;utilité d&#8217;une telle bibliothèque!</p>
<h2>$$(), presque comme $() &#8230; mais en mieux!</h2>
<p>la fonction <span class="code">$$()</span> de Prototype permet elle aussi de récupérer facilement des éléments du <acronym title="Document Object Model">DOM</acronym>. Sa particularité et qu&#8217;au lieu de lui passer l&#8217;identifiant d&#8217;un élément <acronym title="HyperText Markup Language">HTML</acronym>, on lui passe directement un sélecteur <acronym title="Cascading Style Sheets">CSS</acronym>. Je vous laisse imaginer toute la puissance de cette fonction :</p>
<pre class="brush: jscript;">
$$( 'p' ); // Tous les éléments &quot;p&quot; de la page
$$( 'ul#nav a.select' ); // Tous les liens possédant la class &quot;select&quot; de la liste identifiée par #nav
$$( 'a[href=&quot;#&quot;]' ); // tous les liens de la page dont la balise href vaut #
</pre>
<p>Depuis la version 1.5.1 de Prototype, tous les sélecteurs <a title="Sélecteurs CSS3" href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/#selectors">CSS3</a> sont émulés!</p>
<p>Comme avec <span class="code">$()</span>, tous les éléments renvoyés sont automatiquement étendu pour bénéficier des fonctionnalités de Prototype.</p>
<h2>Simplifiez-vous <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> avec Prototype</h2>
<p>Une autre particularité de Prototype est la <strong>facilité d&#8217;intégration d&#8217;<acronym title="Asynchronous JavaScript and XML">AJAX</acronym></strong> au sein de vos pages. Plus besoin d&#8217;effectuer autant de tests que de navigateurs existant pour instancier un objet <strong>XMLHttpRequest</strong>, Prototype s&#8217;occupe de tout !</p>
<pre class="brush: jscript; auto-links: false;">
new Ajax.Request( 'http://www.monsite.com/ajax_server.php', {
onComplete: function( oResponse ) {
// met à jour div#monDiv avec le texte renvoyé
$( 'monDiv' ).update( oResponse.responseText );
},
onFailure: function() {
alert( 'Oups! Il y a eu un petit problème !' );
}
});
</pre>
<h2>Gérer les événements javascript</h2>
<p><strong>La gestion des événements en javascript</strong> est peut-être ce qu&#8217;il y a de plus compliqué car vraiment différente selon les navigateurs. Prototype propose de résoudre cette difficulté à travers plusieurs fonctions dont vous ne pourrez plus vous passer :</p>
<pre class="brush: jscript; auto-links: false;">
// Une utilisation très répandu
&lt;a href=&quot;http://www.un-site-externe.com/&quot; onclick=&quot;window.open(this.href);return false;&quot;&gt;clic&lt;/a&gt;
// Avec Prototype
&lt;a href=&quot;http://www.un-site-externe.com/&quot;&gt;clic&lt;/a&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$$( 'a' ).each(function( link ) {
if(is_externe( link ) ) { // is_externe est a implémenter
link.observe( 'click', function( event ) {
// Stope la propagation et prévient de l'action par défaut
event.stop();
// Ouvre le lien dans une nouvelle fenêtre
window.open( event.element().href );
});
}
});
&lt;/script&gt;
</pre>
<p>Tout ceci n&#8217;est qu&#8217;une <strong>mise en bouche</strong> de tout ce que nous pourrons voir ensemble sur les fonctionnalités de Prototype. D&#8217;autres articles devraient bientôt suivre.</p>
<p>Une fois de plus, je vous renvoie vers <a title="Documentation officielle de Prototype" href="http://www.prototypejs.org/api">la documentation officielle</a>, contenant énormément d&#8217;exemples sur la mise en pratique de la librairie.</p>]]></content:encoded>
			<wfw:commentRss>http://www.web-memento.fr/developper-en-javascript-avec-prototype/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trouver son Lightbox</title>
		<link>http://www.web-memento.fr/trouver-son-lightbox</link>
		<comments>http://www.web-memento.fr/trouver-son-lightbox#comments</comments>
		<pubDate>Tue, 16 Jun 2009 20:25:53 +0000</pubDate>
		<dc:creator>Luc</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Lightbox]]></category>
		<guid isPermaLink="false">http://www.web-memento.fr/?p=250</guid>
		<description><![CDATA[Il existe aujourd&#8217;hui une quantité impressionnante de scripts permettant d&#8217;intégrer un lightbox sur son site. Pour ma part, il m&#8217;a toujours fallu faire beaucoup de recherche avant de trouver celui qui correspond le mieux à mes besoins. Le type de projet qu&#8217;on réalise, la plateforme utilisée, les librairies javascripts incluses dans son site, le type [...]]]></description>
			<content:encoded><![CDATA[<p>Il existe aujourd&#8217;hui une quantité impressionnante de scripts permettant d&#8217;intégrer un <strong>lightbox</strong> sur son site.</p>
<p>Pour ma part, il m&#8217;a toujours fallu faire <strong>beaucoup de recherche</strong> avant de trouver celui qui correspond le mieux à mes besoins. Le type de projet qu&#8217;on réalise, la plateforme utilisée, les librairies javascripts incluses dans son site, le type de données à afficher à l&#8217;aide de son <strong>lightbox</strong> sont autant de paramètres qui rentrent en compte dans ce choix et qui peut se révéler un véritable casse-tête!</p>
<p>Mais, récemment, je suis tombé sur <a title="Comparatif de plus de 30 scripts de Lightbox" href="http://planetozh.com/projects/lightbox-clones/">ce comparatif de Lightbox</a> qui va nous faire gagner un temps fou puisqu&#8217;il compare <strong>plus de 30 scripts de lightbox</strong> avec un sytème de filtrage très performant selon le framework javascript utilisé et les capacités du lightbox à afficher tel type d&#8217;élément.</p>
<p>A garder dans ses favoris !</p>]]></content:encoded>
			<wfw:commentRss>http://www.web-memento.fr/trouver-son-lightbox/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

