<?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>l'indicible blog &#187; Javascript</title>
	<atom:link href="http://www.lindicible.com/blog/category/dev/js/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lindicible.com/blog</link>
	<description>&#60;!--:en--&#62;the details of the inexpressible&#60;!--:--&#62;&#60;!--:fr--&#62;les détails de l'ineffable&#60;!--:--&#62;</description>
	<lastBuildDate>Fri, 02 Sep 2011 19:30:56 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>BkgSlider</title>
		<link>http://www.lindicible.com/blog/2011/02/24/bkgslider/</link>
		<comments>http://www.lindicible.com/blog/2011/02/24/bkgslider/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 20:26:34 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.lindicible.com/blog/?p=702</guid>
		<description><![CDATA[BkgSlider est un plugin jQuery qui vous permet d&#8217;avoir une galerie d&#8217;image pour vos background CSS. Démo Vous pouvez en voir un exemple sur la page de démonstration. Utilisation Pour utiliser BkgSlide, rien de plus simple : il vous suffit d&#8217;inclure la librairie jQuery et le plugin BkgSlide dans votre page et d&#8217;instancier le plugin [...]]]></description>
			<content:encoded><![CDATA[<p>BkgSlider est un plugin jQuery qui vous permet d&#8217;avoir une galerie d&#8217;image pour vos background CSS.</p>
<h3>Démo</h3>
<p>Vous pouvez en voir un exemple sur <a rel="external" href="http://blog.lindicible.com/wp-content/_custom/bkgslide/">la page de démonstration</a>.</p>
<h3>Utilisation</h3>
<p>Pour utiliser BkgSlide, rien de plus simple : il vous suffit d&#8217;inclure la librairie jQuery et le plugin BkgSlide dans votre page et d&#8217;instancier le plugin avec ses options.</p>
<pre>&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.bkgslide.js"&gt; &lt;/script&gt;
&lt;script type="text/javascript"&gt;
$(document).ready(function(){
    $('#target').bkgSlide({
        images: ['images/img1.jpg', 'images/img2.jpg']
    });
});</pre>
<h3>Options</h3>
<h4>images</h4>
<p>Un tableau contenant le nom des images à utiliser.</p>
<h4>imagePath</h4>
<p>Le chemin où trouver les images.<br />
Le script ajoute automatiquement le slash final si nécessaire.</p>
<h4>speed</h4>
<p>La durée en millisecondes entre deux changements d&#8217;image.<br />
<strong>Défaut :</strong> 7000<br />
Si vous ne voulez pas que les images de fond changent automatiquement, mettez cette valeur à 0.</p>
<h4>direction</h4>
<p>La direction dans laquelle aller lors d&#8217;un changement d&#8217;image.<br />
<strong>Valeurs possibles :</strong> &#8216;random&#8217;, &#8216;next&#8217;, &#8216;prev&#8217;<br />
<strong>Défaut :</strong> &#8216;random&#8217;</p>
<h4>wrap</h4>
<p>Défini s&#8217;il faut reprendre à l&#8217;autre extrémité lorsqu&#8217;on atteint le bout de la liste d&#8217;images.<br />
<strong>Défaut :</strong> true</p>
<h4>nav</h4>
<p>Défini les outils de navigation.<br />
<strong>Valeurs possibles :</strong> true, une option sous forme de chaîne texte, un tableau des éléments de navigation souhaités dans l&#8217;ordre où vous voulez les voir apparaître</p>
<p>true / &#8216;all&#8217; : tous les éléments de navigation<br />
&#8216;list&#8217;       : liste de raccourcis vers chacune des images<br />
&#8216;prev&#8217;       : bouton pour aller à l&#8217;image précédente<br />
&#8216;next&#8217;       : bouton pour aller à l&#8217;image suivante<br />
&#8216;toggle&#8217;     : bouton permettant de démarrer ou d&#8217;arrêter le défilement automatique</p>
<p><strong>Défault :</strong> ['prev', 'list', 'next', 'toggle']</p>
<h4>stopOnNav</h4>
<p>Défini s&#8217;il faut arrêter le défilement automatique lorsque l&#8217;utilisateur utilise l&#8217;un des outils de navigation.<br />
<strong>Défaut :</strong> false</p>
<h4>width</h4>
<p>La largeur à donner aux conteneurs d&#8217;image.<br />
Avec la valeur &#8216;auto&#8217;, le script utilise la largeur de l&#8217;élément ciblé.<br />
<strong>Défaut :</strong> &#8216;auto&#8217;</p>
<h4>height</h4>
<p>La hauteur à donner aux conteneurs d&#8217;image.<br />
Avec la valeur &#8216;auto&#8217;, le script utilise la hauteur de l&#8217;élément ciblé.<br />
<strong>Défaut :</strong> &#8216;auto&#8217;</p>
<h4>containersClass</h4>
<p>Permet d&#8217;ajouter la classe souhaitée aux conteneurs d&#8217;image.<br />
<strong>Défaut :</strong> null</p>
<h4>effect</h4>
<p>L&#8217;effet appliqué lors de la transition entre deux images.<br />
<strong>Valeurs possibles :</strong>  &#8216;fadeOut&#8217;, &#8216;slideUp&#8217;, &#8216;hide&#8217;<br />
<strong>Défaut :</strong> &#8216;fadeOut&#8217;</p>
<h4>duration</h4>
<p>La durée de transition entre deux images (en millisecondes)<br />
</strong>Défaut :</strong> 500</p>
<h4>afterInit</h4>
<p>Une fonction de retour permettant d&#8217;agir après l&#8217;initialisation du BkgSlider.<br />
Cette fonction aura pour paramètres l&#8217;élément ciblé et son BkgSlider.</p>
<h3>Méthodes</h3>
<h4>move</h4>
<p>Se déplacer dans la liste d&#8217;images.<br />
</strong>Valeurs possibles :</strong> &#8216;next&#8217;, &#8216;prev&#8217;, &#8216;random&#8217;<br />
Si aucun paramètre n&#8217;est passé, la direction donnée dans les options est utilisée.</p>
<h4>changeTo</h4>
<p>Allez à l&#8217;image de l&#8217;index spécifié.<br />
Cette méthode requiert en paramètre l&#8217;index de l&#8217;image dans le tableau d&#8217;images (un nombre entre 0 et le nombre d&#8217;images -1).</p>
<h4>play</h4>
<p>Commencer l&#8217;animation automatique.<br />
Cette méthode accepte un nombre de millisecondes en paramètre, représentant l&#8217;interval de temps entre deux changements d&#8217;image.<br />
Si aucun paramètre n&#8217;est passé, la vitesse donnée dans les options est utilisée.</p>
<h4>stop</h4>
<p>Arrêter l&#8217;animation automatique.</p>

<div class="like">
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.lindicible.com%2Fblog%2F2011%2F02%2F24%2Fbkgslider%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:62px; "></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lindicible.com/blog/2011/02/24/bkgslider/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Comment détecter quand la souris quitte la fenêtre du navigateur en Javascript</title>
		<link>http://www.lindicible.com/blog/2009/09/29/comment-detecter-quand-la-souris-quitte-la-fenetre-du-navigateur-en-javascript/</link>
		<comments>http://www.lindicible.com/blog/2009/09/29/comment-detecter-quand-la-souris-quitte-la-fenetre-du-navigateur-en-javascript/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 15:57:13 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutoriaux]]></category>

		<guid isPermaLink="false">http://www.lindicible.com/blog/?p=421</guid>
		<description><![CDATA[Javascript est un langage très utile pour beaucoup de choses de nos jours. Malheureusement, chaque navigateur l&#8217;implémente à sa façon, et évidemment ils ne proposent pas la même gestion des évènements ! Prenons un exemple : vous venez de faire un div que l&#8217;on peut déplacer à volonté avec la souris. On clique, le déplacement [...]]]></description>
			<content:encoded><![CDATA[<p>Javascript est un langage très utile pour beaucoup de choses de nos jours.<br />
Malheureusement, chaque navigateur l&#8217;implémente à sa façon, et évidemment ils ne proposent pas la même gestion des évènements !</p>
<p>Prenons un exemple : vous venez de faire un div que l&#8217;on peut déplacer à volonté avec la souris. On clique, le déplacement commence&#8230; on relâche, le déplacement s&#8217;arrête. Mais voila, si on relâche en dehors de la fenêtre du navigateur, aucun événement n&#8217;est déclenché, et on continue à déplacer notre div indéfiniment !</p>
<p>Le meilleur moyen d&#8217;éviter ça est de stopper le déplacement dès l&#8217;instant où l&#8217;on quitte la fenêtre du navigateur. Seulement voila : javascript ne déclenche aucun événement lorsque c&#8217;est le cas. Il faut tricher&#8230;</p>
<p>On commence par se dire que si l&#8217;on cesse de survoler l&#8217;objet que l&#8217;on déplace, on arrête le déplacement&#8230; Et l&#8217;on se rend vite compte que ce n&#8217;est pas pratique du tout ! En effet, la souris va presque toujours bouger plus vite que la div et le déplacement cessera instantanément, sauf si l&#8217;on bouge au ralenti.</p>
<p>Pour éviter ça, on peut chercher à déterminer vers quel élément la souris à quitté la div, et n&#8217;arrêter le déplacement que si ce n&#8217;est pas un élément inclus dans la balise html.<br />
Facile&#8230; en théorie. Mais tous les navigateurs n&#8217;utilisent pas les mêmes attributs de l&#8217;événement, et évidemment IE va encore nous poser problème !</p>
<p>Sans plus d&#8217;introduction, voici un morceau de code jQuery (&laquo;&nbsp;code less do more&nbsp;&raquo;) qui vous aidera grandement à résoudre ce problème :</p>
<pre>
$('div#dragged').bind('mouseleave.dragged',function(e) {
	var ev = e || window.event;
	if(ev.relatedTarget){
		if(ev.relatedTarget == $('html').get(0)){
			stopDrag();
		}
	} else {
	// IE
		if(!ev.toElement){
			stopDrag();
		} else if(ev.toElement.tagName == "HTML"){
			stopDrag();
		}
	}
})
</pre>
<h3>Maintenant, les explications :</h3>
<pre>$('div#dragged').bind('mouseleave.dragged',function(e) {</pre>
<p>On associe une fonction à l&#8217;événement &#8216;mouseleave&#8217; sur la div déplaçable.<br />
Notez au passage que jQuery nous permet d&#8217;associer un nom à cette fonction (ici : &#8216;.dragged&#8217;), ce qui est très pratique pour gérer ensuite les événement nominativement, surtout dans le cas ou plusieurs événement du même type sont associés à cet objet.</p>
<pre>	var ev = e || window.event;</pre>
<p>On récupère ensuite l&#8217;événement déclenché. Firefox et les browsers respectueux des standards le trouveront en paramètre de la fonction (ici : &#8216;e&#8217;), pour Internet Explorer il faudra aller le chercher dans window.event.<br />
Le double pipe (&#8216;||&#8217;) permet d&#8217;attribuer à la variable &#8216;ev&#8217; la valeur de &#8216;e&#8217; si elle existe, et la valeur de &#8216;window.event&#8217; si ce n&#8217;est pas le cas.</p>
<pre>	if(ev.relatedTarget){
		if(ev.relatedTarget == $('html').get(0)){
			stopDrag();
		}</pre>
<p>Pour les navigateurs standards, l&#8217;événement contient une propriété &#8216;relatedTarget&#8217;.<br />
Si elle existe, on est dans le cas d&#8217;un navigateur standard, sinon on est probablement sous IE.</p>
<p>Cette propriété retourne l&#8217;élément &#8216;html&#8217; quand on quitte la div en sortant du navigateur.<br />
On utilise ici une syntaxe jQuery pour comparer le contenu de cette propriété avec le contenu html (&#8216;get(0)&#8217; sur l&#8217;objet jQuery) de la balise &#8216;html&#8217;. S&#8217;ils sont identiques, on peut arrêter le déplacement.</p>
<pre>	} else {
	// IE</pre>
<p>Si la propriété &#8216;relatedTarget&#8217; n&#8217;existe pas, on est alors dans le cas d&#8217;IE. Deux cas se présentent alors :</p>
<pre>		if(!ev.toElement){
			stopDrag();</pre>
<p>Pour certaines versions d&#8217;IE, la propriété &#8216;toElement&#8217; de l&#8217;événement est indéfinie. C&#8217;est un critère suffisant pour arrêter le déplacement.</p>
<pre>		} else if(ev.toElement.tagName == "HTML"){
			stopDrag();
		}
	}
})</pre>
<p>Pour d&#8217;autres versions d&#8217;IE, la propriété &#8216;toElement&#8217; existe. On devra dans ce cas vérifier que la propriété &#8216;tagName&#8217; de &#8216;toElement&#8217; est bien &#8216;HTML&#8217;. Si c&#8217;est le cas, on arrête le déplacement.</p>
<p>Voila, j&#8217;espère que ces quelques explications pourront vous aider, il n&#8217;est pas toujours évident de trouver sur internet les ressources nécessaires pour arriver à faire cette chose pourtant si basique !</p>

<div class="like">
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.lindicible.com%2Fblog%2F2009%2F09%2F29%2Fcomment-detecter-quand-la-souris-quitte-la-fenetre-du-navigateur-en-javascript%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:62px; "></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lindicible.com/blog/2009/09/29/comment-detecter-quand-la-souris-quitte-la-fenetre-du-navigateur-en-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Désactiver une option de select avec jQuery</title>
		<link>http://www.lindicible.com/blog/2009/04/08/disable-a-select-option-in-ie-with-jquerydesactiver-une-option-de-select-avec-jquery/</link>
		<comments>http://www.lindicible.com/blog/2009/04/08/disable-a-select-option-in-ie-with-jquerydesactiver-une-option-de-select-avec-jquery/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 18:29:58 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.lindicible.com/blog/?p=99</guid>
		<description><![CDATA[Que ferions nous si nous n’avions pas Internet Explorer pour nous aider à nous torturer les méninges ? On risquerait de s’ennuyer ! Il semblerait que dans la version 7 de ce navigateur cher aux développeurs masochistes, on n’aie toujours pas la possibilité pourtant bien utile de désactiver une des options d’un ’select’. Heureusement, javascript [...]]]></description>
			<content:encoded><![CDATA[<p>Que ferions nous si nous n’avions pas Internet Explorer pour nous aider à nous torturer les méninges ? On risquerait de s’ennuyer !</p>
<p>Il semblerait que dans la version 7 de ce navigateur cher aux développeurs masochistes, on n’aie toujours pas la possibilité pourtant bien utile de désactiver une des options d’un ’select’.</p>
<p>Heureusement, javascript (boosté par jQuery) permet de régler pas mal des lacunes du navigateur que l’on adore détester.</p>
<p>Voici un petit script trouvé sur internet qui peut vous dépanner si vous êtes confronté à ce problème :</p>
<pre class="javascript" style="font-family: monospace;">$<span style="color: #009900;">(</span>document<span style="color: #009900;">)</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
  <span style="color: #006600; font-style: italic;">// Disabled options fix for Internet Explorer</span>
  $<span style="color: #009900;">(</span><span style="color: #3366cc;">'select'</span><span style="color: #009900;">)</span>.<span style="color: #660066;">each</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">rejectDisabled</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
      <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">options</span><span style="color: #009900;">[</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">selectedIndex</span><span style="color: #009900;">]</span>.<span style="color: #660066;">disabled</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">lastSelectedIndex</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
          <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">selectedIndex</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">lastSelectedIndex</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">{</span>
          <span style="color: #003366; font-weight: bold;">var</span> first_enabled <span style="color: #339933;">=</span> $<span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">)</span>.<span style="color: #660066;">children</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'option:not(:disabled)'</span><span style="color: #009900;">)</span>.<span style="color: #660066;">get</span><span style="color: #009900;">(</span><span style="color: #cc0000;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
          <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">selectedIndex</span> <span style="color: #339933;">=</span> first_enabled <span style="color: #339933;">?</span> first_enabled.<span style="color: #660066;">index</span> <span style="color: #339933;">:</span> <span style="color: #cc0000;">0</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span>
      <span style="color: #009900;">}</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">{</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">lastSelectedIndex</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">selectedIndex</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">}</span>
    <span style="color: #009900;">}</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">rejectDisabled</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">lastSelectedIndex</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">selectedIndex</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">)</span>.<span style="color: #660066;">children</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'option[disabled]'</span><span style="color: #009900;">)</span>.<span style="color: #660066;">each</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
      $<span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">)</span>.<span style="color: #660066;">css</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'color'</span><span style="color: #339933;">,</span> <span style="color: #3366cc;">'#CCC'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">(</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">)</span>.<span style="color: #660066;">change</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
      <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">rejectDisabled</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;
</span></pre>
<p>Merci jQuery <img src='http://www.lindicible.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="like">
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.lindicible.com%2Fblog%2F2009%2F04%2F08%2Fdisable-a-select-option-in-ie-with-jquerydesactiver-une-option-de-select-avec-jquery%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:62px; "></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lindicible.com/blog/2009/04/08/disable-a-select-option-in-ie-with-jquerydesactiver-une-option-de-select-avec-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pickwhip jQuery</title>
		<link>http://www.lindicible.com/blog/2008/10/28/pickwhip-jquery/</link>
		<comments>http://www.lindicible.com/blog/2008/10/28/pickwhip-jquery/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 20:02:01 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[after effects]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[pickwhip]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.lindicible.com/blog/?p=7</guid>
		<description><![CDATA[Dans le monde informatique comme ailleurs, il y a de bonnes idées qui se répandent moins bien que d&#8217;autres. Le &#8216;pickwhip&#8217; utilisé dans l&#8217;application Adobe After Effects est de celles-là. C&#8217;est un outil qui permet en toute simplicité de lier un élément à un autre. Cela peut servir par exemple à lier la couleur d&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<p>Dans le monde informatique comme ailleurs, il y a de bonnes idées qui se répandent moins bien que d&#8217;autres. Le &#8216;pickwhip&#8217; utilisé dans l&#8217;application Adobe After Effects est de celles-là. C&#8217;est un outil qui permet en toute simplicité de lier un élément à un autre. Cela peut servir  par exemple à lier la couleur d&#8217;un élément graphique à la rotation d&#8217;un autre&#8230; ou un projet à une catégorie. Et c&#8217;est très pratique !</p>
<p>N&#8217;ayant pas trouvé d&#8217;équivalent à implémenter dans une administration web, j&#8217;ai décidé d&#8217;en écrire un moi-même. J&#8217;ai donc utilisé la commodité de jQuery pour écrire un plug-in javascript simulant le fonctionnement du pickwhip.</p>
<h3>Démo</h3>
<p>Basiquement, on attribue à un élément source une liste d&#8217;éléments cible auxquels il a le droit de se lier. Lorsque l&#8217;on cliquera sur cet élément source, on activera un pickwhip qui réagira différemment au survol d&#8217;éléments cible, d&#8217;éléments cible déjà lié, ou d&#8217;éléments non-cible, et qui bien sûr effectuera le lien demandé.</p>
<p>Une démonstration valant mieux qu&#8217;un long discours, vous pouvez <a rel="external" href="http://blog.lindicible.com/wp-content/_custom/the_whip/">tester le pickwhip</a>.</p>
<h3>En pratique</h3>
<p>Pour utiliser le pickwhip, vous devrez tout d&#8217;abord avoir chargé <a rel="external" href="http://docs.jquery.com/Downloading_jQuery#Current_Release">jquery.js</a> et <a rel="external" href="http://blog.lindicible.com/wp-content/_custom/the_whip/jquery.pickwhip.js">jquery.pickwhip.js</a>, de préférence dans la balise &lt;head&gt; de votre page.</p>
<pre>&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.pickwhip.js"&gt; &lt;/script&gt;</pre>
<p>Il faut ensuite initialiser le pickwhip en lui indiquant une url où trouver ses images :</p>
<pre>$(document).ready(function(){
	$.pickWhip.init({
		imageDir: 'whipImg/'
	});
});</pre>
<p>Si vous souhaitez déplacer les images du pickwhip, vous pouvez remplacer &#8216;whipImg/&#8217; par leur emplacement actuel, sinon vous pouvez juste lancer $.pickWhip.init() sans paramètre.</p>
<p>Il ne reste plus qu&#8217;à définir les cibles et les options de chaque pickwhip, comme dans l&#8217;exemple ci-dessous :</p>
<pre>$('#src1').pickWhip('.dropzone, .dropzone2',{
	unlinkedHoverClass	: 'whipHover1',
	linkedHoverClass	: 'whipHoverLinked1',
	linkList		: Array( $('#drop2') ),
	showLinks		: true,
	linkedClass		: 'whipLinked1',
	unlinkedClass		: 'whipUnlinked1',
	callback		: function(source, target){
		alert("The link between the source " + source.attr('id') + " and the target " + target.attr('id') + " has been updated.";
	}
});</pre>
<p>Ce code attribue un pickWhip à l&#8217;élément dont l&#8217;id est &#8216;src1&#8242;.</p>
<p>Le premier paramètre passé à la méthode pickWhip() est une String à faire interpréter par le sélecteur jQuery.</p>
<p>Ici, on demande à ce que les éléments de classe &#8216;dropzone&#8217; et de classe &#8216;dropzone2&#8242; soient réactifs à ce pickwhip.</p>
<p>Le second paramètre est une liste d&#8217;options au format json&#8230;</p>
<h3>Options disponibles :</h3>
<ul>
<li><strong>linkedHoverClass</strong> : classe css à donner à un élément cible <em>déjà lié</em> à cette source lors de son survol.<br />
Type : String<br />
par défaut: linkedWhipHoverTarget</li>
<li><strong>unlinkedHoverClass</strong> : classe css à donner à un élément cible <em>non lié</em> à cette source lors de son survol.<br />
Type : String<br />
Par défaut: unlinkedWhipHoverTarget</li>
<li><strong>linkedClass</strong> : classe css à donner à un élément cible <em>déjà lié</em> à cette source lorsque showLink est actif.<br />
Type : String<br />
Par défaut : linkedWhipTarget</li>
<li><strong>unlinkedClass</strong>s : classe css à donner à un élément cible  <em>non lié</em> à cette source lorsque showLink est actif.<br />
Type : String<br />
Par défaut : unlinkedWhipTarget</li>
<li><strong>showLinks</strong> : appliquer les classes linkedClass/unlinkedClass aux cibles lorsque l&#8217;utilisateur active le pickwhip.<br />
Type : Boolean<br />
Par défaut : true</li>
<li><strong>linkList</strong> : liste d&#8217;éléments jQuery déjà associés à cette source ou de tableaux associatifs (source, cible) .<br />
Type : Array( [jQuery Object target], [Array( jQuery Object source, jQuery Object target)], [...] )</li>
<li><strong>callback</strong> : fonction à executer après l&#8217;association<br />
Type : Function<br />
Note : cette fonction peut prendre 2 paramètres, qui seront respectivement la source et la cible liés.</li>
</ul>
<p>L&#8217;option linkList s&#8217;avérera très utile pour initialiser l&#8217;état actuel des associations. Vous pouvez lui fournir des cibles pour ce pickwhip, la source du pickwhip leur sera associée. Mais vous pouvez aussi fournir un tableau d&#8217;association de type Array(source, cible), car ce n&#8217;est pas forcément à la source du pickwhip elle même que vous souhaitez associer la cible. Par exemple, vous voulez peut-être associer la cible à l&#8217;élément parent du pickwhip&#8230;ou exploiter plus directement les associations faites dans votre base de données !</p>
<p>Pour connaitre à tout moment l&#8217;état des associations, vous pouvez interroger la liste globale $.pickWhip.allLinks comme dans l&#8217;exemple ci-dessous :</p>
<pre>function showLinks(){
	var links = '&lt;p&gt;Current associations are :&lt;\/p&gt;
&lt;ul&gt;';
	for (var i=0; i&lt;$.pickWhip.allLinks.length; i++) {
		for (var j=0; j&lt;$.pickWhip.allLinks[i].length; j++) {
			links += '&lt;li&gt;source : '+$.pickWhip.allLinks[i][j][0].html()+' _ dest : '+$.pickWhip.allLinks[i][j][1].html()+'&lt;\/li&gt;';
		}
	}
	links +='&lt;\/ul&gt;';
	$('#links').html(links);
}</pre>

<div class="like">
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.lindicible.com%2Fblog%2F2008%2F10%2F28%2Fpickwhip-jquery%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:62px; "></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lindicible.com/blog/2008/10/28/pickwhip-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Préchargement d&#8217;images avec jQuery</title>
		<link>http://www.lindicible.com/blog/2008/05/23/prechargement-dimages-avec-jquery/</link>
		<comments>http://www.lindicible.com/blog/2008/05/23/prechargement-dimages-avec-jquery/#comments</comments>
		<pubDate>Fri, 23 May 2008 19:54:01 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[préchargement]]></category>
		<category><![CDATA[preload]]></category>
		<category><![CDATA[preloading]]></category>

		<guid isPermaLink="false">http://www.lindicible.com/blog/?p=5</guid>
		<description><![CDATA[Pour ceux qui ne connaîtraient pas encore, jquery est une librairie javascript très puissante qui permet de faire beaucoup de choses en peu de lignes de code. Elle porte fièrement sa devise de &#171;&#160;code less, do more&#160;&#187;, qui est tout à fait appropriée ! Par ailleurs, jquery permet de développer des plugins de manière assez [...]]]></description>
			<content:encoded><![CDATA[<p>Pour ceux qui ne connaîtraient pas encore, jquery est une librairie javascript très puissante qui permet de faire beaucoup de choses en peu de lignes de code. Elle porte fièrement sa devise de &laquo;&nbsp;code less, do more&nbsp;&raquo;, qui est tout à fait appropriée !</p>
<p>Par ailleurs, jquery permet de développer des plugins de manière assez simple, afin de rajouter des fonctionnalités au module de base. Mais nous y reviendrons une autre fois&#8230;</p>
<p>Le sujet du jour est le préchargement d&#8217;images, un concept relativement basique et régulièrement utile.</p>
<p>Voici une méthode simple pour l&#8217;effectuer :</p>
<pre>$.preloadImages = function(arguments)
{
    for (var i = 0; i &lt; arguments.length; i++) {
        $('&lt;img/&gt;').attr('src', arguments[i]);
    }
}

var imagesToPreload = Array(\
    'image1.gif',\
    '/repertoire/des/images/image2.gif',\
    'http://www.example.com/repertoire/image3.gif');

$.preloadImages(imagesToPreload);</pre>
<p>Notes:</p>
<ul>
<li>$ est un raccourci pour l&#8217;objet de base jQuery. En cas de conflit (par exemple avec Prototype, une autre lib assez répandue), il est possible de le redéfinir.</li>
<li>imagesToPreload contient une liste (Array) d&#8217;images sous forme de texte (String).</li>
<li>Les \ en fin de lignes permettent de continuer à la ligne du dessous en rendant le retour à la ligne invisible au parser javascript, et donc d&#8217;avoir une liste d&#8217;images plus agréable à lire si l&#8217;on aligne verticalement le début du nom de chaque image.</li>
<li>La fonction preloadImages() prend chacun des arguments donnés par le tableau (Array) et crée à la volée une balise html &lt;img&gt; puis donne à l&#8217;attribut &laquo;&nbsp;src&nbsp;&raquo; de cette balise le nom de l&#8217;image. Du coup, l&#8217;image est appelée et chargée dans le cache du navigateur.</li>
<li>Comme on n&#8217;insère pas cet objet dans le DOM, rien n&#8217;est affiché.</li>
</ul>
<p>Et voila. C&#8217;est simple et efficace, à l&#8217;image de jQuery !</p>

<div class="like">
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.lindicible.com%2Fblog%2F2008%2F05%2F23%2Fprechargement-dimages-avec-jquery%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:62px; "></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lindicible.com/blog/2008/05/23/prechargement-dimages-avec-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

