<?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>Way of Spark &#187; Web</title>
	<atom:link href="http://wayofspark.com/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://wayofspark.com</link>
	<description>problèmes et solutions de l&#039;informatique de tous les jours, pour nous, les devs.</description>
	<lastBuildDate>Sat, 14 Aug 2010 11:31:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>5 Générateurs de loader ajax</title>
		<link>http://wayofspark.com/2010/07/27/5-generateurs-de-loader-ajax/</link>
		<comments>http://wayofspark.com/2010/07/27/5-generateurs-de-loader-ajax/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 17:09:48 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Resources]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[loader]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=177</guid>
		<description><![CDATA[Comme j&#8217;ai du y a pas très longtemps rechercher ( encore une fois ) une image de chargement ajax spécifique pour un projet, je me suis décidé à enfin noter les sites qui me paraissent les plus intéressants dans le domaine de la génération d&#8217;images de chargement pour des appels ajax. Les voici donc : [...]]]></description>
			<content:encoded><![CDATA[<p>Comme j&#8217;ai du y a pas très longtemps rechercher ( encore une fois ) une image de chargement ajax spécifique pour un projet, je me suis décidé à enfin noter les sites qui me paraissent les plus intéressants dans le domaine de la génération d&#8217;images de chargement pour des appels ajax. Les voici donc :<span id="more-177"></span></p>
<p><strong>AjaxLoad.info</strong> &#8211; <a href="http://www.ajaxload.info/">http://www.ajaxload.info/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/ajaxLoad.png"><img class="size-full wp-image-185 aligncenter" title="ajaxLoad" src="http://wayofspark.com/wp-content/uploads/2010/07/ajaxLoad.png" alt="" width="417" height="414" /></a></p>
<p><strong>Chimply.com</strong> &#8211; <a href="http://www.chimply.com/">http://www.chimply.com/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/chimply.png"><img class="size-full wp-image-186 aligncenter" title="chimply" src="http://wayofspark.com/wp-content/uploads/2010/07/chimply.png" alt="" width="421" height="449" /></a></p>
<p><strong>Loadinfo.net</strong> -<a href="http://www.loadinfo.net/"> http://www.loadinfo.net/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/loadinfo.png"><img class="aligncenter size-full wp-image-187" title="loadinfo" src="http://wayofspark.com/wp-content/uploads/2010/07/loadinfo.png" alt="" width="499" height="343" /></a></p>
<p><strong>Preloaders.net</strong> &#8211; <a href="http://preloaders.net/">http://preloaders.net/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/preloaders.png"><img class="aligncenter size-full wp-image-188" title="preloaders" src="http://wayofspark.com/wp-content/uploads/2010/07/preloaders.png" alt="" width="531" height="448" /></a></p>
<p><strong>WebScriptLab</strong> &#8211; <a href="http://www.webscriptlab.com/ ">http://www.webscriptlab.com/ </a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/webscriptlab.png"><img class="aligncenter size-full wp-image-189" title="webscriptlab" src="http://wayofspark.com/wp-content/uploads/2010/07/webscriptlab.png" alt="" width="468" height="455" /></a></p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2010/07/27/5-generateurs-de-loader-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Positeo.com</title>
		<link>http://wayofspark.com/2009/06/18/positeocom/</link>
		<comments>http://wayofspark.com/2009/06/18/positeocom/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 17:47:30 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[référencement]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=10</guid>
		<description><![CDATA[Je sais plus trop comment je suis tombé sur le site, mais j&#8217;ai trouvé l&#8217;idée cool. Positeo propose un service de vérification de son référencement google. On choisi son mot clef, le site cible, et positeo nous indique la position du site sur une recherche du mot clef choisi. Par exemple avec le mot clef [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">
<p style="text-align: left;">Je sais plus trop comment je suis tombé sur le site, mais j&#8217;ai trouvé l&#8217;idée cool.</p>
<p style="text-align: left;"><a href="http://www.positeo.com/check-position/">Positeo</a> propose un service de vérification de son référencement google.</p>
<p style="text-align: left;">On choisi son mot clef, le site cible, et positeo nous indique la position du site sur une recherche du mot clef choisi.</p>
<p style="text-align: left;">Par exemple avec le mot clef &#8216;chaussures&#8217; positeo nous indique que le site sarenza.com  est en première position (quelle surprise !) et eram.fr en 8ème.</p>
<p style="text-align: left;">Autant pour des sites se trouvant en première page de google, on ne gagne pas spécialement de temps par rapport à une recherche à la main, autant si le site recherché se trouve plus loin, cela evite de se tapper le défilement des pages jusqu&#8217;à trouver le résultat voulu.</p>
<p style="text-align: left;">Autre détail pratique, les mots clefs et sites déjà utilisés sont mémorisés, ce qui permet d&#8217;eviter de les retapper à chaque fois.</p>
<p style="text-align: left;">A noter également que le service va vérifier les résultats sur plusieurs datacenter google ( 15 aléatoires par requête ), même si je suis pas sur de l&#8217;interet de la chose.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/positeo.jpg"><img class="alignnone size-medium wp-image-9 aligncenter" title="positeo" src="http://wayofspark.com/wp-content/uploads/2009/06/positeo.jpg" alt="" width="555" height="343" /></a></p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2009/06/18/positeocom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bien connaitre le type d&#8217;une variable javascript : les limites de typeof</title>
		<link>http://wayofspark.com/2008/07/17/bien-connaitre-le-type-dune-variable-javascript-les-limites-de-typeof/</link>
		<comments>http://wayofspark.com/2008/07/17/bien-connaitre-le-type-dune-variable-javascript-les-limites-de-typeof/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 13:39:23 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=3</guid>
		<description><![CDATA[Lorsqu&#8217;on commence à faire du javascript, il arrive forcement un moment ou l&#8217;on à besoin de connaitre le type d&#8217;une variable avec laquelle l&#8217;on travaille. Cela peut être par exemple pour du passage de paramètres multitypés, ou lors de l&#8217;utilisation de paramètres optionnels, Ou l&#8217;ont a parfois besoin de vérifier ce qui a réellement été [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsqu&#8217;on commence à faire du javascript, il arrive forcement un moment ou l&#8217;on à besoin de connaitre le type d&#8217;une variable avec laquelle l&#8217;on travaille. Cela peut être par exemple pour du passage de paramètres multitypés, ou lors de l&#8217;utilisation de paramètres optionnels, Ou l&#8217;ont a parfois besoin de vérifier ce qui a réellement été passé dans les args.</p>
<p>En recherchant sur google, on tombe vite sur ce qui semble être la solution au problème : en effet, javascript dispose d&#8217;une méthode typeof, retournant une string identifiant le type de l&#8217;élément.</p>
<p>exemples :</p>
<pre class="prettyprint">>>> typeof 1
"number"
>>> typeof "hello"
"string"
</pre>
<p>Jusque la, tout va bien. Cependant, les surprises arrivent dès qu&#8217;on pousse les tests un peu plus :</p>
<pre class="prettyprint">>>> typeof [1,2,3]
"object"
</pre>
<p>Tiens, il considère ma liste comme un objet !</p>
<pre class="prettyprint">>>> typeof new Date()
"object"
</pre>
<p>Et les dates aussi !</p>
<pre class="prettyprint">>>> typeof null
"object"
</pre>
<p>Même null est considéré comme étant du type object&#8230;<span id="more-3"></span></p>
<p>En effet, l&#8217;opérateur typeof n&#8217;identifie que les types suivants :</p>
<pre class="prettyprint">"number"
"string"
"function"
"boolean"
"object"
</pre>
<p>Dans la pratique, on a besoin de pouvoir faire la différence entre une liste et un objet, ou de savoir si un paramètre est une date, ou si le retour d&#8217;une méthode est une erreur, par exemple.</p>
<p>La solution consiste donc à bricoler sa propre méthode typeof, pour avoir une identification plus précise des variables. Concrètement, pour identifier un type, on va chercher une bidouille sur la variable à chaque fois.</p>
<p>Par exemple :</p>
<p>Pour les dates c&#8217;est très simple, on regarde si le constructeur est bien &#8216;Date&#8217;.</p>
<pre class="prettyprint">if( var.constructor==Date) // it's a date.</pre>
<p>Pour les listes, on pourrait faire pareil ( regarder si le constructeur est bien &#8216;Array&#8217; ), cependant cela peut poser problème dans certains cas. les selecteurs jQuery, par exemple, sont des listes (on peut faire selecteur[0]), mais sont crées à partir du constructeur object.<br />
Pour les identifier, on vérifie donc à la place la présence d&#8217;un attribut &#8216;length&#8217; sur la variable testée</p>
<pre class="prettyprint">if (el.length) // it's a list</pre>
<p>Pour null, on fait juste un test avec la variable null !</p>
<pre class="prettyprint">if (var==null) // it's null !</pre>
<p>Il reste deux autres pseudotypes, moins utilisés, mais qu&#8217;il peut être tout de même utile de dissocier :</p>
<p>Les erreurs (utile en cas de retour dans un catch par exemple)<br />
La classe erreur est spécifique au navigateur (evidemment), cependant, sous tous, elle dispose toujours de deux attributs : &#8216;message&#8217; et &#8216;name&#8217;. On verifie donc la présence de ces deux attributs, et pour bien faire, on vérifie bien la présence de &#8220;Error&#8221; dans l&#8217;attribut nom.</p>
<pre class="prettyprint">if(el.message!=null &amp;&amp; el.name!=null &amp;&amp; el.name.search("Error")>-1) return 'error';</pre>
<p>Et pour finir, les noeuds DOM. La aussi, c&#8217;est de la bidouille : on verifie l&#8217;existence d&#8217;un attribut nodeName ou tagName sur la variable.</p>
<pre class="prettyprint">if(el.nodeName || el.tagName) return 'node'; // it's a node</pre>
<p>Ce qui donne la méthode suivante :</p>
<pre class="prettyprint">/**
* Return 'advanced' type for an element
* Type can be of :
*  - 'null'
*  - 'string'
*  - 'number'
*  - 'boolean'
*  - 'function'
*  - 'list'
*  - 'node'
*  - 'date'
*  - 'error'
*  - 'object'
* @param el
**/
typeOf = function(el){
var elType = typeof el;

// null type
if(el==null) return 'null';

// basic types : number, string, function
if(elType=='number'||elType=='string'||elType=='function'||elType=='boolean')
    return elType;

// date
if(el.constructor==Date) return "date";

// domElem
if(el.nodeName || el.tagName) return 'node';

// list
if(el.length) return 'list';

// error
if(el.message!=null &amp;&amp; el.name!=null &amp;&amp; el.name.search("Error")>-1) return 'error';

// object
return 'object';
}
</pre>
<p>Et voila, une fonction typeOf qu&#8217;elle est mieux que l&#8217;originale !</p>
<pre class="prettyprint">>>> typeOf([1,2,3])
'list'
>>> typeOf(null)
'null'
>>> typeOf(document.body)
'node'
>>> typeOf(new Date())
'date'
</pre>
<p>Et les type originels sont identifiés aussi :</p>
<pre class="prettyprint">>>> typeOf(1)
'number'
>>> typeOf('hello')
'string'
>>> typeOf(String)
'function'
>>> typeOf(true)
'boolean'
</pre>
<p>Voila, comment gagner pas mal de temps sur les verifs avec une méthode de 10 lignes !</p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2008/07/17/bien-connaitre-le-type-dune-variable-javascript-les-limites-de-typeof/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
