<?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>chez Syl</title>
	<atom:link href="http://chez-syl.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://chez-syl.fr</link>
	<description>Développement web</description>
	<lastBuildDate>Thu, 31 May 2012 10:20:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Opa, un nouveau langage Web client-serveur</title>
		<link>http://chez-syl.fr/2012/05/opa-un-nouveau-langage-web-client-serveur/</link>
		<comments>http://chez-syl.fr/2012/05/opa-un-nouveau-langage-web-client-serveur/#comments</comments>
		<pubDate>Thu, 31 May 2012 10:20:11 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[opa]]></category>
		<category><![CDATA[opalang]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=346</guid>
		<description><![CDATA[<p>J&#8217;ai découvert <a href="http://opalang.org/">Opa</a> totalement par hasard, c&#8217;est un langage de programmation d&#8217;applications et services web dont la première release est parue en 2011. Il a été &#171;&#160;influencé&#160;&#187; par OCaml et Erlang.</p> <p></p> <p>Il a la particularité d&#8217;être à la fois <strong>client</strong> et <strong>serveur</strong> (+ base de données). Aspect important également, c&#8217;est un langage compilé &#8230; </p><p><a class="more-link block-button" href="http://chez-syl.fr/2012/05/opa-un-nouveau-langage-web-client-serveur/">Lire la Suite &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai découvert <a href="http://opalang.org/">Opa</a> totalement par hasard, c&#8217;est un langage de programmation d&#8217;applications et services web dont la première release est parue en 2011. Il a été &laquo;&nbsp;influencé&nbsp;&raquo; par OCaml et Erlang.</p>
<p><img class="aligncenter" src="http://a0.twimg.com/profile_images/1817816253/opa-cloud-logo-sq.png" alt="" /></p>
<p>Il a la particularité d&#8217;être à la fois <strong>client</strong> et <strong>serveur</strong> (+ base de données). Aspect important également, c&#8217;est un langage compilé par OCaml et donc, non interprété.</p>
<p>Autres aspects :</p>
<ul>
<li>Support de HTML5 (Canvas 2D, WebGL 3D, SVG, File) et CSS3</li>
<li>Support de MongoDB en base de données</li>
<li>Typage fort</li>
<li>Syntaxe proche de Javascript</li>
<li>Le code client est compilé en jQuery !</li>
<li>Il intègre le <a href="http://twitter.github.com/bootstrap/">Bootstrap Twitter</a> pour faire facilement vos UI</li>
</ul>
<h2>Dans quel cas utiliser Opa ?</h2>
<p>Opa est conçu pour les applications Web en temps réel (chats, jeux, tout ce qu&#8217;on peut trouver en multi-utilisateurs).</p>
<h2>A quoi ressemble le code d&#8217;Opa ?</h2>
<p>Un <a href="http://fr.wikipedia.org/wiki/Hello_world">Hello world</a> vaut toujours mieux qu&#8217;un long discours&#8230;</p>
<pre class="brush: jscript; title: Opa; notranslate">Server.start(
	Server.http, {
		page: function() {
			&lt;h1&gt;Hello, world&lt;/h1&gt;
		},
		title: &quot;Hello, world&quot;
	}
)</pre>
<p>Ce code démarre un serveur HTTP, avec une page HTML dont le titre est &laquo;&nbsp;Hello, world&nbsp;&raquo; et en contenu, ce qu&#8217;on trouve dans la fonction anonyme de <span class="courier">page</span>.</p>
<h2>Comment l&#8217;installer et l&#8217;essayer ?</h2>
<p>Opa est depuis le 11 avril 2012 en version 0.9.2 et est utilisable dorénavant sur Windows.</p>
<p>Les OS compatibles pour installation :</p>
<ul>
<li>Mac OS X &#8211; x64</li>
<li>Windows &#8211; x64</li>
<li>Ubuntu &#8211; x64</li>
<li>Linux &#8211; x64</li>
</ul>
<p>Pour les plateformes x86 ce n&#8217;est pas encore disponible mais il est possible de compiler sa propre build.<br />
Idem pour FreeBSD.</p>
<div style="text-align:center;"><strong><a href="http://opalang.org/get.xmlt#opalang_package_view=stable">Page de téléchargement d&#8217;Opa</a></strong></div>
<p>J&#8217;ai personnellement essayé uniquement sur Windows, donc il suffit de lancer l&#8217;installeur et d&#8217;attendre la fin de l&#8217;installation.</p>
<p>Pour faire fonctionner notre &laquo;&nbsp;Hello world&nbsp;&raquo;, créer un fichier <span class="courier">hello.opa</span> de préférence dans le répertoire d&#8217;installation et y coller le contenu du code vu précédemment.</p>
<p>Il faut compiler ce fichier pour en faire un exécutable (*.exe). Pour ce faire, ouvrir une <strong>Invite de commandes</strong> et pointer vers le répertoire où se trouve le fichier <span class="courier">hello.opa</span> et lancer cette commande :</p>
<pre class="brush: bash; title: Console; notranslate">opa hello.opa --</pre>
<p>La compilation va prendre plusieurs secondes, une fois terminée, le serveur HTTP va démarrer automatiquement et le restera à moins que vous fermiez la fenêtre ou que vous fassiez <span class="courier">CTRL + C</span>.<br />
Vous pouvez voir le résultat sur <a href="http://localhost:8080">http://localhost:8080</a>.</p>
<h2>Peut-on voir un exemple d&#8217;application écrite en Opa ?</h2>
<p>Oui, l&#8217;équipe d&#8217;Opa a mis au point un chat (le plus simple qu&#8217;il soit) en&#8230; 20 lignes de code, mise en forme non comprise.</p>
<p>Voici leur code commenté :</p>
<pre class="brush: jscript; collapse: true; light: false; title: Opa; toolbar: true; notranslate">/**
 * {1 Import standard classes of bootstrap css}
 *
 * see http://twitter.github.com/bootstrap/
 */
import stdlib.themes.bootstrap
/**
 * {1 Network infrastructure}
 */
/**
 * The type of messages sent by a client to the chatroom
 */
type message = { string author /**The name of the author (arbitrary string)*/
               , string text  /**Content entered by the user*/
               }
/**
 * The chatroom.
 */
exposed Network.network(message) room = Network.cloud(&quot;room&quot;)
/**
 * {1 User interface}
 */
/**
 * Update the user interface in reaction to reception of a message.
 *
 * This function is meant to be registered with [room] as a callback.
 * Its sole role is to display the new message in [#conversation].
 *
 * @param x The message received from the chatroom
 */
function user_update(message x) {
    line = &lt;div class=&quot;row line&quot;&gt;
              &lt;div class=&quot;span1 columns userpic&quot; /&gt;
              &lt;div class=&quot;span2 columns user&quot;&gt;{x.author}:&lt;/div&gt;
              &lt;div class=&quot;span13 columns message&quot;&gt;{x.text}&lt;/div&gt;
            &lt;/div&gt;;
    #conversation =+ line;
    Dom.scroll_to_bottom(#conversation);
}
/**
 * Broadcast text to the [room].
 *
 * Read the contents of [#entry], clear these contents and send the message to [room].
 *
 * @param author The name of the author. Will be included in the message broadcasted.
 */
function broadcast(author) {
    text = Dom.get_value(#entry);
    message = ~{author, text};
    Network.broadcast(message, room);
    Dom.clear_value(#entry);
}
/**
 * Build the user interface for a client.
 *
 * Pick a random author name which will be used throughout the chat.
 *
 * @return The user interface, ready to be sent by the server to the client on connection.
 */
function start() {
    author = Random.string(8);
    &lt;div class=&quot;topbar&quot;&gt;
      &lt;div class=&quot;fill&quot;&gt;
        &lt;div class=&quot;container&quot;&gt;
          &lt;div id=#logo /&gt;
        &lt;/&gt;
      &lt;/&gt;
    &lt;/&gt;
    &lt;div id=#conversation class=&quot;container&quot;
      onready={function(_) { Network.add_callback(user_update, room) }}&gt;&lt;/&gt;
    &lt;div id=#footer&gt;
      &lt;div class=&quot;container&quot;&gt;
        &lt;input id=#entry class=&quot;xlarge&quot; onnewline={function(_) { broadcast(author) }} /&gt;
        &lt;div class=&quot;btn primary&quot; onclick={function(_) { broadcast(author) }}&gt;Post&lt;/&gt;
      &lt;/&gt;
    &lt;/&gt;
}
/**
 * {1 Application}
 */
/**
 * Main entry point.
 *
 * Construct an application called &quot;Chat&quot; (users will see the name in the title bar),
 * embedding statically the contents of directory &quot;resources&quot;, using the global stylesheet
 * &quot;resources/chat.css&quot; and the user interface defined in [start].
 */
Server.start(
    Server.http,
    [ {resources: @static_resource_directory(&quot;resources&quot;)}
      , {register: [&quot;resources/css.css&quot;]}
      , {title: &quot;Chat&quot;, page:start }
    ]
);</pre>
<ul>
<li><a href="http://chat.opalang.org/">Voir le résultat</a></li>
<li><a href="http://opalang.org/see.xmlt">Autres exemples sur le site officiel</a></li>
</ul>
<h2>Conclusion</h2>
<p>Personnellement je suis très content de cette découverte, ça fait du bien un peu de nouveauté dans ce monde qu&#8217;est le Web. Forcément, la communauté autour d&#8217;Opa est très faible car le projet est jeune mais très sérieux.</p>
<p>Je vous propose quelques liens si vous êtes intéressés :</p>
<ul>
<li><a href="http://doc.opalang.org/refcard">Commencer avec Opa</a></li>
<li><a href="http://doc.opalang.org/manual/A-tour-of-Opa">Tour d&#8217;horizon d&#8217;Opa + Guides (manual)</a></li>
<li><a href="http://opalang.org/faq.xmlt">Opa FAQ</a></li>
<li><a href="http://doc.opalang.org/api">Documentation API Opa</a></li>
<li><a href="http://opalang.org/opa_in_the_cloud.xmlt">Mettre en place &laquo;&nbsp;Opa in the cloud&nbsp;&raquo; sur votre site</a></li>
<li><a href="http://opalang.org/about.xmltt">About Opa</a></li>
</ul>
<p>Tous les liens pointent vers le site officiel, et en anglais.</p>
<p>Si vous souhaitez vous y mettre et que vous avez besoin d&#8217;aide, vous pouvez toujours poster sur <a href="http://stackoverflow.com/questions/tagged/opa">StackOverflow</a> avec le tag Opa.</p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/05/opa-un-nouveau-langage-web-client-serveur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site du zéro Notifications : version 1.4.0</title>
		<link>http://chez-syl.fr/2012/05/site-du-zero-notifications-version-1-4-0/</link>
		<comments>http://chez-syl.fr/2012/05/site-du-zero-notifications-version-1-4-0/#comments</comments>
		<pubDate>Fri, 11 May 2012 07:00:18 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[extension chrome sdz]]></category>
		<category><![CDATA[siteduzero notifications]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=344</guid>
		<description><![CDATA[<p>Nouvelle fonctionnalité en vue pour l&#8217;extension extra-populaire ! </p> <p>10/05/2012 &#8211; version 1.4.0</p> <ul> <li>Ajout d&#8217;un module de réponses pré-enregitrées [...]</li> </ul> <p>Cette fonctionnalité vous permet de créer des réponses depuis l&#8217;extension et les charger dans la zone de texte du Site du Zéro automatiquement. On y accède par la page Options et le bouton &#8230; </p><p><a class="more-link block-button" href="http://chez-syl.fr/2012/05/site-du-zero-notifications-version-1-4-0/">Lire la Suite &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Nouvelle fonctionnalité en vue pour l&#8217;extension <del datetime="2012-05-10T13:07:13+00:00">extra-populaire</del> ! </p>
<blockquote><p>10/05/2012 &#8211; version 1.4.0</p>
<ul>
<li>Ajout d&#8217;un module de réponses pré-enregitrées [...]</li>
</ul>
</blockquote>
<p>Cette fonctionnalité vous permet de créer des réponses depuis l&#8217;extension et les charger dans la zone de texte du Site du Zéro automatiquement. On y accède par la page Options et le bouton &laquo;&nbsp;Gérer les réponses pré-enregistrées&nbsp;&raquo;. Vous verrez une zForm et un tableau qui récapitule vos réponses.</p>
<p><center><img src="http://images.chez-syl.fr/projets/reponses_pre_enregistrees.png" /><br />
<i>Gestion des réponses pré-enregistrées</i></center></p>
<p>Ensuite lorsque l&#8217;on souhaite ajouter une réponse sur un sujet du forum (ou bien même en réponse rapide), un tableau apparaît vous permettant d&#8217;ajouter vos réponses dans la zone de texte !<br />
<center><img src="http://images.chez-syl.fr/projets/sdz_reponses_pre_enregistrees.png" /><br />
<i>Affichage des réponses pré-enregistrées directement sur le site</i></center></p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/05/site-du-zero-notifications-version-1-4-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>desoForm, un plugin jQuery léger pour vérifier vos inputs</title>
		<link>http://chez-syl.fr/2012/04/desoform-un-plugin-jquery-leger-pour-verifier-vos-inputs/</link>
		<comments>http://chez-syl.fr/2012/04/desoform-un-plugin-jquery-leger-pour-verifier-vos-inputs/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 07:30:18 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jquery validation input]]></category>
		<category><![CDATA[plugin jquery desoform]]></category>
		<category><![CDATA[plugin jquery regexp]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=338</guid>
		<description><![CDATA[<p>Ça faisait bien longtemps que je n&#8217;avais pas écrit, et pour cause je préparais quelque chose en douce ! Comme l&#8217;annonce le titre, on va parler de validation de formulaire. Parmi les questions qui reviennent souvent en dév. web côté client : </p> <p>Comment peut-on valider les entrées d&#8217;un formulaire avant son envoi ?</p> <p>En &#8230; </p><p><a class="more-link block-button" href="http://chez-syl.fr/2012/04/desoform-un-plugin-jquery-leger-pour-verifier-vos-inputs/">Lire la Suite &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Ça faisait bien longtemps que je n&#8217;avais pas écrit, et pour cause je préparais quelque chose en douce !<br />
Comme l&#8217;annonce le titre, on va parler de validation de formulaire.<span id="more-338"></span> Parmi les questions qui reviennent souvent en dév. web côté client : </p>
<blockquote><p>Comment peut-on valider les entrées d&#8217;un formulaire avant son envoi ?</p></blockquote>
<p>En s&#8217;y essayant, on est amené à créer &laquo;&nbsp;involontairement&nbsp;&raquo; un bout de code qui pourrait bien servir de plugin et c&#8217;est ce qui m&#8217;est arrivé, histoire de remplir une fois de plus ma liste de plugins. Et pour justifier le titre, il fait 1.7 KB !</p>
<p><img class="aligncenter" src="http://images.chez-syl.fr/projets/desoform.jpg" alt="" /></p>
<p>Voici un exemple de formulaire pouvant profiter de <span class="courier">desoForm</span> :</p>
<pre class="brush: xml; title: HTML; notranslate">&lt;form action=&quot;page.html&quot; method=&quot;post&quot; id=&quot;monForm&quot;&gt;
		&lt;label&gt;Date : &lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;date&quot; data-regexp=&quot;date&quot; data-error=&quot;Format date (jj/mm/aaaa)&quot; /&gt;
	&lt;hr /&gt;
		&lt;label&gt;Date SQL : &lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;datesql&quot; data-regexp=&quot;date-en&quot; data-required=&quot;false&quot; data-error=&quot;Format date SQL (aaaa-mm-jj)&quot; /&gt;
	&lt;hr /&gt;
		&lt;label&gt;Courriel : &lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;mail&quot; data-regexp=&quot;email&quot; data-error=&quot;Format email&quot; /&gt;
	&lt;hr /&gt;
		&lt;label&gt;Code postal : &lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;cp&quot; data-regexp=&quot;cp&quot; data-required=&quot;false&quot; data-error=&quot;Format code postal&quot; /&gt;
	&lt;hr /&gt;
		&lt;label&gt;Prénom : &lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;prenom&quot; data-regexp=&quot;^[a-zA-Z]{2,10}$&quot; data-error=&quot;Test de la regexp ^[a-zA-Z]{2,10}$&quot; /&gt;
	&lt;hr /&gt;
		&lt;input type=&quot;submit&quot; value=&quot;Valider&quot; /&gt;
&lt;/form&gt;</pre>
<p>Vous l&#8217;aurez compris, il s&#8217;agit d&#8217;utiliser l&#8217;attribut <span class="courier">data</span> pour indiquer les spécificités de chaque champ, à noter que c&#8217;est disponible uniquement pour les <span class="courier bleu">input[type="text"]</span>.</p>
<ul>
<li><span class="courier">data-regexp</span> : prend en valeur une expression régulière valide ou le mot clé d&#8217;une expression pré-écrite, il en existe pour l&#8217;instant 4 :
<ul>
<li><span class="courier">date</span> : <span class="courier">/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[0-9]{4}$/</span></li>
<li><span class="courier">date-en</span> : <span class="courier">/^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$/</span></li>
<li><span class="courier">email</span> : <span class="courier">/^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$/</span></li>
<li><span class="courier">cp</span> : <span class="courier">/^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$/</span></li>
</ul>
<li><span class="courier">data-error</span> : le message d&#8217;erreur à afficher si l&#8217;expression n&#8217;est pas bonne</li>
<li><span class="courier">data-required</span> : facultatif, si la valeur est <span class="courier vert">false</span>, le champ pourra être vide pour valider le formulaire</li>
</li>
</ul>
<p>Le gros avantage de ce système, est que vous pouvez mettre vos propres expressions ! Par défaut les champs sont tous obligatoires.</p>
<p>L&#8217;appel du plugin :</p>
<pre class="brush: jscript; title: jQuery; notranslate">$(document).ready(function() {
	$('#monForm').desoForm({
		'emptyField': 'Le champ est obligatoire',
		'submit': function($el, ok) {
			if(ok) {
				alert($el.selector + ' prêt à être envoyé avec $el[0].submit(); !');
				//$el[0].submit();
			}
		}
	});
});
</pre>
<p>Vous avez seulement 2 propriétés à votre disposition :</p>
<ul>
<li><span class="courier">emptyField</span> : le texte à afficher pour informer que le champ est obligatoire, par défaut &laquo;&nbsp;Le champ ne doit pas être vide&nbsp;&raquo;</li>
<li><span class="courier">submit</span> : le <span class="courier">callback</span> vous permettant d&#8217;envoyer par la suite le formulaire en AJAX, par défaut <span class="courier vert">false</span></li>
</ul>
<p><strong><a href="http://dev.chez-syl.fr/desoForm">Voir le plugin en action</a><br />
<a href="http://chez-syl.fr/jquery-plugin-desoform/">Voir la page du plugin</a> pour les consignes d&#8217;installation</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/04/desoform-un-plugin-jquery-leger-pour-verifier-vos-inputs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un callback quand on scroll au niveau d&#8217;un élément</title>
		<link>http://chez-syl.fr/2012/04/un-callback-quand-on-scroll-au-niveau-dun-element/</link>
		<comments>http://chez-syl.fr/2012/04/un-callback-quand-on-scroll-au-niveau-dun-element/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 07:30:00 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[desoscroll]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery scroll]]></category>
		<category><![CDATA[jquery scroll ajax]]></category>
		<category><![CDATA[jquery scroll div]]></category>
		<category><![CDATA[jquery scroll plugin]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=333</guid>
		<description><![CDATA[<p>Cette technique est de plus en plus répandue. Sur certains sites, on peut se rendre compte que des contenus sont chargés dynamiquement en fonction de notre scroll : Google Actualités, jQuery.com, Clubic&#8230;</p> <p>Pour ces deux derniers, les commentaires des articles sont chargés uniquement si on scroll &#171;&#160;à leur niveau&#160;&#187;. Quand on y réfléchit c&#8217;est plutôt &#8230; </p><p><a class="more-link block-button" href="http://chez-syl.fr/2012/04/un-callback-quand-on-scroll-au-niveau-dun-element/">Lire la Suite &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Cette technique est de plus en plus répandue. Sur certains sites, on peut se rendre compte que des contenus sont chargés dynamiquement en fonction de notre scroll : Google Actualités, jQuery.com, Clubic&#8230;</p>
<p>Pour ces deux derniers, les commentaires des articles sont chargés uniquement si on scroll &laquo;&nbsp;à leur niveau&nbsp;&raquo;.<br />
Quand on y réfléchit c&#8217;est plutôt normal, pourquoi charger dès le départ des éléments qui ne seront même pas lus par l&#8217;internaute ? Ceci permet d&#8217;économiser des ressources serveur, notamment des appels SQL.</p>
<p>Je vous propose de voir comment ceci peut fonctionner, c&#8217;est plutôt simple et après on ne s&#8217;en passe plus !</p>
<p>Je vais reprendre le système de commentaires, lorsque notre scroll va arriver au niveau de <span class="courier bleu">#comments</span>, on va uniquement changer son texte, on peut imaginer faire n&#8217;importe quoi.<br />
Le plus important est de récupérer ce fameux <span class="courier"><strong>callback</strong></span>.</p>
<pre class="brush: xml; title: HTML; notranslate">
&lt;div class=&quot;content&quot;&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ultrices dictum ante, nec interdum felis mollis vitae. Mauris porta urna nec lorem semper cursus. Etiam nec dignissim turpis. Integer a lobortis orci. Suspendisse rhoncus massa dapibus ligula tempor molestie. Etiam consectetur quam et felis interdum sit amet posuere quam fermentum. Suspendisse nibh nulla, auctor et auctor at, placerat sit amet erat.

Sed tempor mi id erat viverra vestibulum. Donec euismod justo metus. Integer eleifend lacus sit amet dui ullamcorper quis elementum tellus placerat. Quisque ac justo ligula. Ut molestie gravida risus ac vestibulum. Vivamus semper eros vitae dui fringilla eget bibendum odio interdum. Suspendisse non blandit augue. Fusce vitae velit metus, ac vestibulum dui. Fusce eget velit arcu. Aenean quis varius enim.

In viverra neque libero. Ut non pretium tortor. Duis nunc ipsum, aliquet varius dignissim nec, ullamcorper id arcu. Morbi nec cursus sem. Ut ac justo nulla, eu elementum diam. Suspendisse est elit, tincidunt eu mattis accumsan, placerat quis ipsum. Nunc tincidunt, arcu eu vulputate dapibus, lectus leo ullamcorper quam, id fermentum leo mi iaculis augue. Proin vitae odio pharetra nulla imperdiet aliquam. Aenean sed neque erat, non faucibus leo. Sed metus augue, imperdiet ut lobortis ac, pulvinar vel dolor. Curabitur dui quam, aliquam ac mattis quis, bibendum a mi. Sed viverra libero non risus dictum ac venenatis metus rutrum. Nulla consectetur mauris vitae nisl viverra adipiscing. Proin pellentesque erat a libero cursus sed laoreet velit aliquam. Mauris convallis semper quam, sit amet tempor nisl fermentum sit amet.

Donec fringilla pellentesque orci, ac pellentesque nunc dictum id. Fusce quis lectus mauris. Nunc mollis vulputate purus, vitae malesuada massa varius ac. Vivamus varius, massa sed dignissim laoreet, lorem magna luctus odio, eget sodales odio velit at felis. Nulla fringilla lacinia diam ac sagittis. Ut pharetra turpis id lectus porttitor at ultrices lorem accumsan. Etiam vitae congue nisl. Aenean non lectus nec lorem luctus pharetra. Proin malesuada, sem eget volutpat mollis, odio arcu fermentum ipsum, in vulputate sapien risus ut felis. Donec vulputate auctor mauris, in consequat eros accumsan sed. Fusce quis pharetra tortor. Aliquam ut dolor massa. Pellentesque id metus eu metus hendrerit elementum eu vel neque. Nullam tincidunt, libero sit amet interdum lobortis, risus ipsum ultricies urna, placerat iaculis eros lacus vitae mauris. Pellentesque nec lacus vel felis interdum egestas at a lacus.

Donec fringilla pellentesque orci, ac pellentesque nunc dictum id. Fusce quis lectus mauris. Nunc mollis vulputate purus, vitae malesuada massa varius ac. Vivamus varius, massa sed dignissim laoreet, lorem magna luctus odio, eget sodales odio velit at felis. Nulla fringilla lacinia diam ac sagittis. Ut pharetra turpis id lectus porttitor at ultrices lorem accumsan. Etiam vitae congue nisl. Aenean non lectus nec lorem luctus pharetra. Proin malesuada, sem eget volutpat mollis, odio arcu fermentum ipsum, in vulputate sapien risus ut felis. Donec vulputate auctor mauris, in consequat eros accumsan sed. Fusce quis pharetra tortor. Aliquam ut dolor massa. Pellentesque id metus eu metus hendrerit elementum eu vel neque. Nullam tincidunt, libero sit amet interdum lobortis, risus ipsum ultricies urna, placerat iaculis eros lacus vitae mauris. Pellentesque nec lacus vel felis interdum egestas at a lacus.

Etiam non arcu nec enim volutpat imperdiet. Mauris nec sem lacus. Etiam laoreet laoreet lacus non lacinia. Sed quis odio velit, id lobortis dolor. Nunc quam leo, tempor ac dapibus eget, commodo vel nulla. Sed aliquet, enim sit amet luctus egestas, nisi leo sollicitudin neque, non imperdiet urna ante in arcu. In ultrices sagittis orci egestas ultricies. Cras nisl mi, sodales vitae fringilla quis, vulputate convallis elit. Integer augue orci, vestibulum ut fermentum et, hendrerit ac diam. Nunc lectus sapien, molestie id posuere eget, sodales sit amet arcu. Mauris fringilla mi tincidunt urna porttitor porttitor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.&lt;/div&gt;

&lt;div id=&quot;comments&quot;&gt;Commentaires&lt;/div&gt;
</pre>
<pre class="brush: css; title: CSS; notranslate">.content {
    width: 300px;
}
</pre>
<p>Maintenant que la structure est en place, de quoi a-t-on besoin comme données pour créer notre <span class="courier">callback</span> ?</p>
<ul>
<li><span class="courier">$(&#8216;#comments&#8217;).offset().top</span> : la position &laquo;&nbsp;top&nbsp;&raquo; de l&#8217;élément par rapport au document</li>
<li><span class="courier">$(window).scrollTop()</span> : la position verticale du scroll</li>
<li><span class="courier">$(window).height()</span> : la hauteur de la fenêtre</li>
</ul>
<p><div class="notice_block message-block"><p class="printonly"><strong>Notice</strong></p>Le <span class="courier">.offset().top</span> vous retournera 0 si l&#8217;élément en question est caché !</div><br />
Avec seulement ces 3 données, on peut réaliser ce que l&#8217;on souhaite. Se pose maintenant la question : à quel moment récupérer ces informations ?</p>
<ul>
<li>au chargement du DOM</li>
<li>au scroll</li>
<li>au redimensionnement de la fenêtre</li>
</ul>
<p>Pour pas s&#8217;embêter, on sait déjà qu&#8217;on va créer une fonction.</p>
<p>Ce que vous attendez tous&#8230; la formule magique. Il faut <del datetime="2012-04-05T09:45:47+00:00">un peu</del> se creuser la tête.</p>
<blockquote><p>Si la taille de la fenêtre <strong>+</strong> la position verticale du scroll <strong>est supérieure</strong> à la position de l&#8217;élément (top), alors&#8230;</p></blockquote>
<pre class="brush: jscript; title: jQuery; notranslate">var top = $('#comments').offset().top;
var scrollTop = $(window).scrollTop();
var windowHeight = $(window).height();

if (windowHeight + scrollTop &gt; top) {
	// ...
}
</pre>
<p>On peut en faire une fonction <span class="courier">check()</span> par exemple puis l&#8217;appeler 3 fois :</p>
<pre class="brush: jscript; title: jQuery; notranslate">$(document).ready(function() {
	check();

	// quand on scroll
	$(window).scroll(function() {
		check();
	});

	// quand on redimensionne
	$(window).resize(function() {
		check();
	});
});</pre>
<p>Petite précision, en laissant tel quel, le <span class="courier">callback</span> sera déclenché à chaque fois que notre scroll se retrouvera &laquo;&nbsp;sous&nbsp;&raquo; l&#8217;élément puisque la condition sera exécutée. On peut rajouter une variable qui nous permettra de savoir si le <span class="courier">callback</span> a déjà été appelé ou non.<br />
Exemple : on initialise une variable <span class="courier">loaded</span> à <span class="courier vert">false</span>, on la met à <span class="courier vert">true</span> quand on passe dans la condition et on n&#8217;oublie pas de rajouter dans cette condition un <span class="courier">!loaded</span>.</p>
<p>Je n&#8217;ai pas pu résister à en créer un plugin, que j&#8217;ai appelé originalement &laquo;&nbsp;desoScroll&nbsp;&raquo;. <img src='http://chez-syl.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Voici l&#8217;appel du plugin :</p>
<pre class="brush: jscript; title: jQuery; notranslate">$(document).ready(function() {
	$('#comments').desoScroll({
		'callback': function(el) {
			el.hide().html('Chargement en cours...').fadeIn(1000);
		}
	});
});</pre>
<p>Regardez <a href="http://dev.chez-syl.fr/desoScroll/">l&#8217;exemple de l&#8217;article en démonstration</a> puis si vous êtes intéressés par le code du plugin, rendez-vous sur <a href="http://chez-syl.fr/jquery-plugin-desoscroll/">sa page</a> !</p>
<p>Ceux qui veulent faire la même chose mais avec les images, je vous conseille le plugin <a href="http://www.appelsiini.net/projects/lazyload">Lazy Load</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/04/un-callback-quand-on-scroll-au-niveau-dun-element/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Site du Zéro Notifications passe en 1.3.1</title>
		<link>http://chez-syl.fr/2012/03/site-du-zero-notifications-331/</link>
		<comments>http://chez-syl.fr/2012/03/site-du-zero-notifications-331/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 11:16:58 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[desolation site du zéro]]></category>
		<category><![CDATA[extension chrome sdz]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[siteduzero]]></category>
		<category><![CDATA[siteduzero mp]]></category>
		<category><![CDATA[siteduzero notifications]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=331</guid>
		<description><![CDATA[<p>Je ne vous avais pas donné de nouvelles depuis la version 1.2.1 de mon petit projet (perso) actuel qui est une extension Chrome pour le <a href="http://www.siteduzero.com/">Site du Zéro</a>.</p> <p>J&#8217;ai l&#8217;ai récemment mise à jour en 1.3.1, voici le changelog depuis la 1.2.1 :</p> <p>23/03/2012 &#8211; version 1.3.1</p> <ul> <li>Ajout de 8 sons supplémentaires dans &#8230; <p><a class="more-link block-button" href="http://chez-syl.fr/2012/03/site-du-zero-notifications-331/">Lire la Suite &#187;</a></p></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Je ne vous avais pas donné de nouvelles depuis la version 1.2.1 de mon petit projet (perso) actuel qui est une extension Chrome pour le <a href="http://www.siteduzero.com/">Site du Zéro</a>.</p>
<p>J&#8217;ai l&#8217;ai récemment mise à jour en 1.3.1, voici le changelog depuis la 1.2.1<span id="more-331"></span> :</p>
<blockquote><p>23/03/2012 &#8211; version 1.3.1</p>
<ul>
<li>Ajout de 8 sons supplémentaires dans les Options pour porter le total à 12 sons disponibles.</li>
<li>Ajout d&#8217;un paramètre supplémentaire pour les notifications, on peut être notifié pour : les MP, les interventions, ou les deux. Dans tous les cas le cumul des deux sera affiché au niveau de l&#8217;icône, comme avant.</li>
<li>Ajout d&#8217;un module de &laquo;&nbsp;liste noire&nbsp;&raquo;. Depuis la popup vous apercevrez une croix rouge en face du sujet survolé (uniquement pour les interventions), vous pourrez le mettre dans votre liste noire, c&#8217;est-à-dire que ce sujet ne sera plus comptabilisé, comme s&#8217;il avait été supprimé. Vous pouvez le rétablir depuis la page des Options.</li>
</ul>
<p>13/03/2012 &#8211; version 1.3.0</p>
<ul>
<li>Ajout d&#8217;un fond sonore à chaque notification (désactivé par défaut)</li>
<li>Correction d&#8217;un bug qui interprétait le HTML dans la popup si le titre du sujet en contenait</li>
</ul>
</blockquote>
<p><center><img src="http://images.chez-syl.fr/projets/options_co.png" /><br />
<i>La page &laquo;&nbsp;Options&nbsp;&raquo;</i></center></p>
<p>Retrouvez tous les détails sur :</p>
<ul>
<li><a href="http://chez-syl.fr/extension-google-chrome-site-du-zero/">la page du projet</a></li>
<li><a href="http://www.siteduzero.com/forum-83-724555-p1-extension-chrome-site-du-zero-mp.html">le sujet dédié sur le SdZ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/03/site-du-zero-notifications-331/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Bonnes pratiques jQuery</title>
		<link>http://chez-syl.fr/2012/03/bonnes-pratiques-jquery/</link>
		<comments>http://chez-syl.fr/2012/03/bonnes-pratiques-jquery/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 07:30:40 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[best practices jquery]]></category>
		<category><![CDATA[bonnes pratiques jquery]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=329</guid>
		<description><![CDATA[<p>Je vais essayer de faire un petit tour des bonnes pratiques dont la plupart concernent jQuery et d&#8217;autres le Javascript en général. Voici les différents chapitres abordés :</p> <ul> <li><a href="#ss_part_1">Utilisation du $</a></li> <li><a href="#ss_part_2">Les sélecteurs</a></li> <li><a href="#ss_part_3">Le chaînage</a></li> <li><a href="#ss_part_4">Mise à jour du DOM</a></li> <li><a href="#ss_part_5">Séparez votre code</a></li> <li><a href="#ss_part_6">Compressez votre code</a></li> </ul> <p>Tous &#8230; </p><p><a class="more-link block-button" href="http://chez-syl.fr/2012/03/bonnes-pratiques-jquery/">Lire la Suite &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Je vais essayer de faire un petit tour des bonnes pratiques dont la plupart concernent jQuery et d&#8217;autres le Javascript en général. Voici les différents chapitres abordés :<span id="more-329"></span></p>
<ul>
<li><a href="#ss_part_1">Utilisation du <span class="courier">$</span></a></li>
<li><a href="#ss_part_2">Les sélecteurs</a></li>
<li><a href="#ss_part_3">Le chaînage</a></li>
<li><a href="#ss_part_4">Mise à jour du DOM</a></li>
<li><a href="#ss_part_5">Séparez votre code</a></li>
<li><a href="#ss_part_6">Compressez votre code</a></li>
</ul>
<p>Tous les codes que je vais montrer sont fonctionnels, l&#8217;indication &laquo;&nbsp;pas bon&nbsp;&raquo; indique une perte une performance ou une mauvaise pratique.</p>
<h3 id="ss_part_1">Utilisation du <span class="courier">$</span></h3>
<p>Vous savez que le symbole dollar est aussi utilisé par d&#8217;autres librairies, par exemple Mootools ou Prototype. Pour éviter les éventuels conflits, on spécifie la variable <span class="courier">$</span> uniquement pour jQuery à l&#8217;intérieur du bloc.<br />
De plus, il est nécessaire que le DOM soit prêt afin de le manipuler et d&#8217;utiliser les gestionnaires d&#8217;événements. Pour cela on utilise la méthode <span class="courier">.ready()</span> de <span class="courier vert">document</span>.</p>
<pre class="brush: jscript; title: jQuery; notranslate">(function($) {
    // on peut utiliser le $ de jQuery

    $(document).ready(function() {
        // le DOM est chargé
    });
})(jQuery);​</pre>
<h3 id="ss_part_2">Les sélecteurs</h3>
<p>Lorsque vous êtes amené à utiliser un objet jQuery <strong>plus d&#8217;une fois</strong> dans votre fonction ou votre script entier, mettez cet objet dans une variable, et de préférence avec un dollar devant de sorte à tout de suite reconnaître un objet jQuery d&#8217;une variable classique qui contient une simple valeur.</p>
<pre class="brush: jscript; title: jQuery; notranslate">
​var $el = $('#element'); // bon
var el = $('#element'); // pas bon​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
</pre>
<p>C&#8217;est la même chose pour le <span class="courier">$(this)</span> :</p>
<pre class="brush: jscript; title: jQuery; notranslate">
​$('#element').on('click', function() {
    var $this = $(this); // bon
    var href = $this.attr('href'); // bon
    var text = $this.text(); // bon

    var href = $(this).attr('href'); // pas bon
    var text = $(this).text(); // pas bon

    return false;
});​
</pre>
<p>Si vous pouvez mettre un <span class="courier">id</span> à votre élément alors ne vous en privez pas ! En effet il reste le sélecteur le plus rapide. D&#8217;ailleurs, si l&#8217;on souhaite accéder à un <span class="courier">id</span>, il ne faut pas renseigner le nom de l&#8217;élément <strong>avant</strong> sinon le DOM utilisera d&#8217;abord <span class="courier">getElementsByTagName()</span> puis <span class="courier">getElementById()</span>.</p>
<pre class="brush: jscript; title: jQuery; notranslate">
​var $el = $('#element'); // bon
var $el = $('div#element'); // pas bon​​​​​​​​
</pre>
<p>Quand vous voulez sélectionnez plusieurs éléments, indiquez &#8211; si possible &#8211; l&#8217;<span class="courier">id</span> du parent le plus proche.</p>
<pre class="brush: jscript; title: jQuery; notranslate">
​var $div = $('#main div'); // bon
var $div = $('div'); // pas bon​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
</pre>
<p>Pour la sélection de <span class="courier">class</span>, il faut &#8211; contrairement à l&#8217;<span class="courier">id</span> &#8211; indiquer le nom de l&#8217;élément concerné. Encore mieux, indiquer également l&#8217;<span class="courier">id</span> du parent le plus proche.</p>
<pre class="brush: jscript; title: jQuery; notranslate">
​var $image = $('#main div.image'); // bon
var $image = $('div.image'); // pas bon
var $image = $('#main .image'); // pas bon
var $image = $('.image'); // pas bon​​​​​​​​​​​​​​​​​​​​​​​​​​​
</pre>
<h3 id="ss_part_3">Le chaînage</h3>
<p>Vous êtes censé savoir qu&#8217;une grande force de jQuery réside dans le <strong>chaînage</strong> des méthodes sur un sélecteur.</p>
<pre class="brush: jscript; title: jQuery; notranslate">
​// pas bon :
$('#element').hide();
$('#element').css('background-color', 'yellow');
$('#element').fadeIn('slow');

// pas bon :
var $el = $('#element');
$el.hide();
$el.css('background-color', 'yellow');
$el.fadeIn('slow');

// bon :
$('#element').hide().css('background-color', 'yellow').fadeIn('slow');
</pre>
<h3 id="ss_part_4">Mise à jour du DOM</h3>
<p>Injecter du HTML dans le DOM s&#8217;avère coûteux en ressources, surtout dans une boucle. Il est préférable de mettre le contenu à ajouter dans une variable et de l&#8217;ajouter une fois la boucle terminée.</p>
<pre class="brush: jscript; title: jQuery; notranslate">
var tableau = [...]; // des données

for (var i in tableau) {
    $('#liste').append('&lt;li&gt;' + tableau[i] + '&lt;/li&gt;'); // pas bon
}

/******************************************************/
var tableau = [...]; // des données
var puces = '';

for (var i in tableau) {
    puces += '&lt;li&gt;' + tableau[i] + '&lt;/li&gt;'; // bon
}
$('#liste').append(puces);​
</pre>
<h3 id="ss_part_5">Séparez votre code</h3>
<p>Etant donné que je prône la séparation des langages, il n&#8217;est pas propre de trouver du code JS dans des éléments HTML.</p>
<pre class="brush: xml; title: HTML; notranslate">
&lt;!-- pas bon --&gt;
&lt;a href=&quot;#&quot; id=&quot;lien&quot; onclick=&quot;maFonction();return false;&quot;&gt;lien&lt;a&gt;​​​​​​​​​​​​​​​​​​​​
</pre>
<p>On fera à la place :</p>
<pre class="brush: xml; title: HTML; notranslate">
&lt;!-- bon --&gt;
&lt;a href=&quot;#&quot; id=&quot;lien&quot;&gt;lien&lt;a&gt;​​​​​​​​​​​​​​​​​​​​​​​​​​​
</pre>
<pre class="brush: jscript; title: jQuery; notranslate">
​$('#lien').on('click', function() {
    // code
    return false;
});​
</pre>
<p>Cela me permet d&#8217;enchaîner sur un conseil d&#8217;ordre général dans le développement Web, je trouve qu&#8217;il est important d&#8217;avoir du code bien organisé et ainsi maintenir une séparation des langages.<br />
Il n&#8217;est pas rare de voir dans une page HTML du code CSS, JS ou encore PHP.<br />
Je vous recommande cette structure :</p>
<ul>
<li><strong>html/</strong> répertoire qui contient les fichiers HTML qui ne contiennent que du HTML</li>
<li><strong>css/</strong> répertoire qui contient les fichiers CSS, appelés par les pages HTML</li>
<li><strong>images/</strong> répertoire des images</li>
<li><strong>js/</strong> répertoire des fichiers JS/jQuery</li>
<li><strong>ajax/</strong> si vous utilisez beaucoup AJAX il peut être intéressant d&#8217;avoir ce dossier qui contiendra vos fichiers PHP (par exemple) qui sont appelés uniquement dans un contexte AJAX</li>
<li><strong>php/</strong> répertoire des fichiers PHP</li>
</ul>
<h3 id="ss_part_6">Compressez votre code</h3>
<p>Si vous êtes soucieux des performances, vous devriez toujours garder deux versions de vos fichiers <strong>.js</strong>.<br />
Un fichier pour le développement et un pour la production. En général on les nomme comme ceci :</p>
<ul>
<li>un_script.js : version de développement</li>
<li>un_script.<strong>min</strong>.js : version de production</li>
</ul>
<p>Le &laquo;&nbsp;min&nbsp;&raquo; signifie &laquo;&nbsp;minified&nbsp;&raquo; ou &laquo;&nbsp;minimized&nbsp;&raquo;.</p>
<p>Je vous conseille le site <a href="http://www.refresh-sf.com/yui/">YUI Compressor</a>, à noter qu&#8217;il supporte aussi le CSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/03/bonnes-pratiques-jquery/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>jQuery 1.7.2</title>
		<link>http://chez-syl.fr/2012/03/jquery-1-7-2/</link>
		<comments>http://chez-syl.fr/2012/03/jquery-1-7-2/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 08:24:35 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jquery 1.7.2]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=330</guid>
		<description><![CDATA[<p>Je vous parlais début février de la <a href="http://chez-syl.fr/2012/02/jquery-1-7-2-beta-1-sort-des-labos/">sortie de la version 1.7.2 Beta 1</a>. C&#8217;est donc depuis cette nuit que la version finale est disponible.</p> <p>Cette version apporte un lot de correctifs. Comme d&#8217;habitude, les nouveautés arriveront lors de la version 1.8.</p> Téléchargement <ul> <li><a href="http://code.jquery.com/jquery-1.7.2.min.js">http://code.jquery.com/jquery-1.7.2.min.js</a> (minified, production)</li> <li><a href="http://code.jquery.com/jquery-1.7.2.js">http://code.jquery.com/jquery-1.7.2.js</a> (unminified, debug)</li> </ul> <p>Je &#8230; </p><p><a class="more-link block-button" href="http://chez-syl.fr/2012/03/jquery-1-7-2/">Lire la Suite &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Je vous parlais début février de la <a href="http://chez-syl.fr/2012/02/jquery-1-7-2-beta-1-sort-des-labos/">sortie de la version 1.7.2 Beta 1</a>. C&#8217;est donc depuis cette nuit que la version finale est disponible.</p>
<p>Cette version apporte un lot de correctifs. Comme d&#8217;habitude, les nouveautés arriveront lors de la version 1.8.<span id="more-330"></span></p>
<h3>Téléchargement</h3>
<ul>
<li><a href="http://code.jquery.com/jquery-1.7.2.min.js">http://code.jquery.com/jquery-1.7.2.min.js</a> (minified, production)</li>
<li><a href="http://code.jquery.com/jquery-1.7.2.js">http://code.jquery.com/jquery-1.7.2.js</a> (unminified, debug)</li>
</ul>
<p>Je vous laisse découvrir le changelog :</p>
<h3>Ajax</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/4624">#4624</a>: Charset in default ajaxSettings.contentType</li>
<li><a href="http://bugs.jquery.com/ticket/10978">#10978</a>: jQuery.param() should allow non-native constructed objects as property values</li>
<li><a href="http://bugs.jquery.com/ticket/11264">#11264</a>: evalScript() uses defaults set by ajaxSetup()</li>
<li><a href="http://bugs.jquery.com/ticket/11426">#11426</a>: jQuery.ajax() always fails when requesting JPG images in IE</li>
</ul>
<h3>Attributes</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/5571">#5571</a>: Allow chaining when passing undefined to any setter in jQuery</li>
<li><a href="http://bugs.jquery.com/ticket/10828">#10828</a>: attr(“coords”) returns undefined in IE7</li>
<li><a href="http://bugs.jquery.com/ticket/10870">#10870</a>: Incorrect behaviour of $.removeAttr(“selected”)</li>
<li><a href="http://bugs.jquery.com/ticket/11316">#11316</a>: Consider looking through valHooks by element type first, then by nodeName instead of the other way around</li>
</ul>
<h3>Build</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10692">#10692</a>: Configure the jshint options to more accurately match the style guide</li>
<li><a href="http://bugs.jquery.com/ticket/10693">#10693</a>: generalize the “test something in an iframe” code in unit tests</li>
<li><a href="http://bugs.jquery.com/ticket/10901">#10901</a>: have unit tests fail if the tester is running from file:// or doesn’t have PHP</li>
<li><a href="http://bugs.jquery.com/ticket/10902">#10902</a>: ability to test a built version of jQuery in unit tests</li>
<li><a href="http://bugs.jquery.com/ticket/10931">#10931</a>: Unit tests shouldn’t require internet access</li>
</ul>
<h3>Core</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10466">#10466</a>: jQuery.param() mistakes wrapped primitives for deep objects</li>
</ul>
<h3>Css</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10639">#10639</a>: outerWidth(true) and css(‘margin’) returning % instead of px in Webkit</li>
<li><a href="http://bugs.jquery.com/ticket/10754">#10754</a>: have jQuery.swap return the return of the callback instead of just executing it</li>
<li><a href="http://bugs.jquery.com/ticket/10782">#10782</a>: Incorrect calculating width</li>
<li><a href="http://bugs.jquery.com/ticket/10796">#10796</a>: Bug in IE7 with $(‘#el’).css.(‘background-position’)</li>
<li><a href="http://bugs.jquery.com/ticket/10858">#10858</a>: css.js regular expressions are incomplete</li>
<li><a href="http://bugs.jquery.com/ticket/11119">#11119</a>: The curCSS function only need  2 arguments</li>
</ul>
<h3>Data</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11309">#11309</a>: hexadecimal-formatted data-* attributes parsed incorrectly</li>
</ul>
<h3>Deferred</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11306">#11306</a>: calling .disable() or .lock() on a $.Callbacks object breaks its fired() status</li>
</ul>
<h3>Dimensions</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/3838">#3838</a>: $(document).height() incorrect in IE6</li>
</ul>
<h3>Effects</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8498">#8498</a>: Animate Hooks</li>
<li><a href="http://bugs.jquery.com/ticket/10006">#10006</a>: method show is not working as expected in all browsers when called for document fragment</li>
<li><a href="http://bugs.jquery.com/ticket/10848">#10848</a>: Animation toggling loses state tracking in certain atomic edge cases</li>
<li><a href="http://bugs.jquery.com/ticket/11415">#11415</a>: Silently ignore negative CSS values where they are illegal</li>
<li><a href="http://bugs.jquery.com/ticket/11415">#11469</a>: Negative margin in animations (.animate)</li>
</ul>
<h3>Event</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/8165">#8165</a>: .live(‘click’, handler) fires on disabled buttons with child elements in Chrome</li>
<li><a href="http://bugs.jquery.com/ticket/10819">#10819</a>: Eliminate “this.on.call(this, “</li>
<li><a href="http://bugs.jquery.com/ticket/10878">#10878</a>: $(“select”).live(“change”, function(){ …broken in IE8 in jQuery 1.7</li>
<li><a href="http://bugs.jquery.com/ticket/10961">#10961</a>: Error in XRegExp using jQuery 1.7.1 in IE6-9</li>
<li><a href="http://bugs.jquery.com/ticket/10970">#10970</a>: The .on() selector parameter doesn’t work with :not(:first) selector</li>
<li><a href="http://bugs.jquery.com/ticket/10984">#10984</a>: Cannot off() custom events ($.event.special)</li>
<li><a href="http://bugs.jquery.com/ticket/11021">#11021</a>: Hover hack mangles a namespace named “hover”</li>
<li><a href="http://bugs.jquery.com/ticket/11076">#11076</a>: .clone(true) loses delegation filters</li>
<li><a href="http://bugs.jquery.com/ticket/11130">#11130</a>: jQuery.fn.on: binding map with null selector ignores data</li>
<li><a href="http://bugs.jquery.com/ticket/11145">#11145</a>: $(document).on() not working with name=”disabled”</li>
</ul>
<h3>Manipulation</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/9427">#9427</a>: Passing undefined to .text() does not trigger setter</li>
<li><a href="http://bugs.jquery.com/ticket/10753">#10753</a>: inline the evalScript function in manipulation.js as it’s only used once</li>
<li><a href="http://bugs.jquery.com/ticket/10864">#10864</a>: text() method on a document fragment always returns the empty string</li>
<li><a href="http://bugs.jquery.com/ticket/11055">#11055</a>: Update HTML5 Shim elements list to support latest html5shiv</li>
<li><a href="http://bugs.jquery.com/ticket/11217">#11217</a>: Append problem with webkit</li>
<li><a href="http://bugs.jquery.com/ticket/11291">#11291</a>: Cloning XMLDoc’s with HTML5 nodeName’s breaks on IE</li>
<li><a href="http://bugs.jquery.com/ticket/11323">#11323</a>: script tags with type=”text/ecmascript” leak into the DOM</li>
<li><a href="http://bugs.jquery.com/ticket/11356">#11356</a>: safeFragment memory leak</li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10952">#10952</a>: .fired() doesn’t work on Callbacks object when it is flagged with “once”</li>
<li><a href="http://bugs.jquery.com/ticket/11257">#11257</a>: Wrong path to source files in test suite if PHP missing</li>
</ul>
<h3>Queue</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/10967">#10967</a>: .promise() does not attach methods onto target</li>
</ul>
<h3>Support</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/7986">#7986</a>: Bug in $.support.boxModel if page has DIV-element CSS</li>
<li><a href="http://bugs.jquery.com/ticket/11048">#11048</a>: Support Tests affect layout for positioned elements in IE6-9</li>
<li><a href="http://bugs.jquery.com/ticket/11337">#11337</a>: Bug in $.support.reliableMarginRight</li>
</ul>
<h3>Traversing</h3>
<ul>
<li><a href="http://bugs.jquery.com/ticket/11370">#11370</a>: $(‘&lt;div&gt;’).siblings() throws exception</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/03/jquery-1-7-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La navigation AJAX avec jQuery</title>
		<link>http://chez-syl.fr/2012/03/navigation-ajax-avec-jquery/</link>
		<comments>http://chez-syl.fr/2012/03/navigation-ajax-avec-jquery/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 07:30:11 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ajax menu]]></category>
		<category><![CDATA[jquery navigation ajax]]></category>
		<category><![CDATA[menu jquery ajax]]></category>
		<category><![CDATA[nav ajax]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=325</guid>
		<description><![CDATA[<p>Avec la démocratisation de l&#8217;AJAX, beaucoup se demandent comment &#171;&#160;ajaxiser leur site&#160;&#187;. Outre le fait d&#8217;envoyer ses formulaires en AJAX, on sous-entend aussi le chargement des pages en AJAX, c&#8217;est ce que l&#8217;on va voir !</p> <p>Voici mon code HTML très simple pour faire un menu avec une partie qui est consacrée au contenu à &#8230; </p><p><a class="more-link block-button" href="http://chez-syl.fr/2012/03/navigation-ajax-avec-jquery/">Lire la Suite &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Avec la démocratisation de l&#8217;AJAX, beaucoup se demandent comment &laquo;&nbsp;<em>ajaxiser</em> leur site&nbsp;&raquo;. Outre le fait d&#8217;envoyer ses formulaires en AJAX, on sous-entend aussi le chargement des pages en AJAX, c&#8217;est ce que l&#8217;on va voir !<span id="more-325"></span></p>
<p>Voici mon code HTML très simple pour faire un menu avec une partie qui est consacrée au contenu à afficher :</p>
<pre class="brush: xml; title: HTML; notranslate">
&lt;div id=&quot;menu&quot;&gt;
	&lt;ul id=&quot;nav&quot;&gt;
		&lt;li&gt;&lt;a href=&quot;pages/?p=index&quot;&gt;Index&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;pages/?p=cours&quot;&gt;Cours&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;pages/?p=membres&quot;&gt;Membres&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;pages/?p=contact&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;

&lt;div id=&quot;contenu&quot;&gt;
	&lt;div&gt;Contenu de la page &quot;Index&quot;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Par défaut on arrive sur la page <em>Index</em> (accueil). Ici rien de bien compliqué, je mets volontairement des liens PHP pour montrer que cela fonctionne aussi avec un site dynamique.</p>
<p>Avant de vous balancer la réponse, voyons le schéma à suivre :</p>
<ol>
<li>Intercepter le clic sur un lien du menu</li>
<li>Récupérer la valeur du <span class="courier">href</span></li>
<li>Faire une requête AJAX sur cette page</li>
<li>Afficher la valeur renvoyée par le fichier PHP dans la div</li>
</ol>
<p>Ceci est la logique &laquo;&nbsp;classique&nbsp;&raquo;, cependant à l&#8217;utilisation, on remarquera qu&#8217;on ne souhaite pas forcément refaire une requête AJAX si c&#8217;est pour afficher le même contenu. Exemple : je suis sur la page des membres, si je reclique sur &laquo;&nbsp;Membres&nbsp;&raquo; il va me refaire une requête. Après c&#8217;est un choix personnel à faire, je vais moi, le prendre en considération dans mon code.<br />
Pour faire ça, on peut utiliser une variable classique.</p>
<p>Mon schéma précédent devient donc :</p>
<ol>
<li>Intercepter le clic sur un lien du menu</li>
<li>Récupérer la valeur du <span class="courier">href</span></li>
<li><mark>Récupérer le nom de la page</mark></li>
<li><mark>Comparer le nom de la page demandée et celle actuellement affichée</mark></li>
<li>Faire une requête AJAX sur la nouvelle page</li>
<li>Afficher la valeur renvoyée par le fichier PHP dans la div</li>
</ol>
<p>Maintenant place au code ! D&#8217;abord le PHP, pour changer.</p>
<pre class="brush: php; title: PHP; notranslate">
&lt;?php
if(isset($_GET['p']) &amp;&amp; !empty($_GET['p'])) {
	$p = htmlentities($_GET['p']);

	switch($p) {
		case 'index': $contenu = 'Contenu de la page &quot;Index&quot;';
		break;
		case 'cours': $contenu = 'Contenu de la page &quot;Cours&quot;';
		break;
		case 'membres': $contenu = 'Contenu de la page &quot;Membres&quot;';
		break;
		case 'contact': $contenu = 'Contenu de la page &quot;Contact&quot;';
		break;
		default: $contenu = 'Page inconnue';
		break;
	}

	echo $contenu;
}
?&gt;
</pre>
<p>Et le code jQuery commenté :</p>
<pre class="brush: jscript; title: jQuery; notranslate">
$(document).ready(function() {
	var $contenu_div = $('#contenu div');
	var page = $('#nav li a:first').text(); // par défaut c'est Index

	// au clic sur un lien du menu
	$('#nav li a').on('click', function() {
		var url = $(this).attr('href'); // on récupère le href

		// on récupère le nom de la page demandée
		var pageDemandee = $(this).text();

		// si on appelle une page qui n est pas celle affichée
		if(pageDemandee != page) { 

			// on met en mémoire la page
			page = pageDemandee;

			// chargement dans la div
			$.ajax({
				url: url,
				cache: false,
				success: function(html) {
					$contenu_div.hide().html(html).fadeIn();
				}
			});
		}
		return false;
	});
});
</pre>
<p>&#8230; Et c&#8217;est tout ! Avec un peu de mise en page, regardez la <strong><a href="http://dev.chez-syl.fr/article_navajax">démo</a></strong> !</p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/03/navigation-ajax-avec-jquery/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Sondage pour mes lecteurs</title>
		<link>http://chez-syl.fr/2012/03/sondage-pour-mes-lecteurs/</link>
		<comments>http://chez-syl.fr/2012/03/sondage-pour-mes-lecteurs/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 10:14:48 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[Le blog]]></category>
		<category><![CDATA[jquery poll]]></category>
		<category><![CDATA[sondage chez-syl]]></category>
		<category><![CDATA[sondage html5 css3]]></category>
		<category><![CDATA[sondage jquery]]></category>
		<category><![CDATA[sondage syl]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=324</guid>
		<description><![CDATA[<p>Vous pourrez voir sur la droite que j&#8217;ai ouvert un petit sondage pour vous.</p> <p>Voilà 4 mois maintenant que j&#8217;ai commencé ce blog et je me demande donc ce que vous attendez le plus, pour quoi êtes-vous là ?</p> <ul> <li>Vous êtes plutôt avide des scripts jQuery ou de bonnes méthodes ?</li> <li>Vous attendez des &#8230; <p><a class="more-link block-button" href="http://chez-syl.fr/2012/03/sondage-pour-mes-lecteurs/">Lire la Suite &#187;</a></p></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Vous pourrez voir sur la droite que j&#8217;ai ouvert un petit sondage pour vous.</p>
<p>Voilà 4 mois maintenant que j&#8217;ai commencé ce blog et je me demande donc ce que vous attendez le plus,<br />
pour quoi êtes-vous là ?<span id="more-324"></span></p>
<ul>
<li>Vous êtes plutôt avide des scripts jQuery ou de bonnes méthodes ?</li>
<li>Vous attendez des actus bien fraîches autour des prochains standards du Web ou de jQuery ?</li>
<li>Vous voulez que je raconte ma vie (ne votez pas ça, <em>please</em>) ?</li>
<li>Autre chose ? Faites-le moi savoir dans les commentaires ou depuis le formulaire de contact !</li>
</ul>
<p>Cela me permettra d&#8217;accentuer mes efforts sur un point si je vois qu&#8217;il ressort plus qu&#8217;un autre !</p>
<p>Merci à ceux qui voteront.</p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/03/sondage-pour-mes-lecteurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interview d&#8217;un passionné de Javascript : le Web de demain, HTML5, CSS3, jQuery&#8230;</title>
		<link>http://chez-syl.fr/2012/03/interview-javascript-le-web-de-demain-html5-css3-jquery/</link>
		<comments>http://chez-syl.fr/2012/03/interview-javascript-le-web-de-demain-html5-css3-jquery/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 07:30:41 +0000</pubDate>
		<dc:creator>Syl</dc:creator>
				<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[golmote interview]]></category>
		<category><![CDATA[interview html5 css3]]></category>
		<category><![CDATA[interview javascript]]></category>
		<category><![CDATA[interview siteduzéro]]></category>

		<guid isPermaLink="false">http://chez-syl.fr/?p=319</guid>
		<description><![CDATA[<p>Aujourd&#8217;hui je vous propose un article pas comme un autre. En effet, je suis allé interviewer un certain <a href="http://www.siteduzero.com/membres-294-123919.html">Golmote</a>, fidèle membre du Site du Zéro et très orienté développement Web côté client. Je me suis permis de lui poser quelques questions que vous laisse découvrir !</p> <h2>Afin de bien te connaître, une petite présentation &#8230; <p><a class="more-link block-button" href="http://chez-syl.fr/2012/03/interview-javascript-le-web-de-demain-html5-css3-jquery/">Lire la Suite &#187;</a></p></h2>]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui je vous propose un article pas comme un autre. En effet, je suis allé interviewer un certain <a href="http://www.siteduzero.com/membres-294-123919.html">Golmote</a>, fidèle membre du Site du Zéro et très orienté développement Web côté client. Je me suis permis de lui poser quelques questions que vous laisse découvrir !<span id="more-319"></span></p>
<h2>Afin de bien te connaître, une petite présentation de toi s&#8217;impose</h2>
<blockquote><p>Eh bien je me pseudonomme Golmote, j&#8217;ai 21 ans, actuellement développeur PHP et intégrateur web à Bordeaux. Mes passions sont la musique, les voyages et&#8230; l&#8217;informatique.</p></blockquote>
<h2>De ton point de vue, est-ce que le Javascript est devenu incontournable dans le Web d&#8217;aujourd&#8217;hui ?</h2>
<blockquote><p>Evidemment. Il est difficile d&#8217;imaginer aujourd&#8217;hui un site Web dépourvu de Javascript. L&#8217;amélioration de l&#8217;expérience utilisateur apportée par le Javascript est un atout : interfaces plus ergonomiques, applications plus rapides, compatibilité mobile, etc.</p>
<p>Néanmoins, il est important de garder à l&#8217;esprit que certains dispositifs ne sont pas en mesure d&#8217;interpréter le Javascript. Aussi, l&#8217;accès aux contenus clés d&#8217;un site devrait toujours pouvoir se faire sans Javascript.</p></blockquote>
<h2>Quelle est ta position par rapport à l&#8217;émergence des framewoks Javascript tels que jQuery ? Est-ce un véritable moteur dans la conception ou au contraire un frein sur la connaissance du Javascript même ?</h2>
<blockquote><p>Les frameworks sont d&#8217;excellents outils qui permettent un gain de temps considérable lors du développement d&#8217;un site Web. Il convient cependant de les utiliser avec parcimonie. Certaines réalisations ne nécessitent pas forcément l&#8217;utilisation d&#8217;un framework complet ! Il est parfois judicieux de regarder du côté des micro-librairies pour trouver l&#8217;outil réellement adapté au projet (<a href="http://microjs.com">Microjs</a> entre autre).</p>
<p>Par exemple, utiliser jQuery uniquement pour son sélecteur compatible CSS3 (à savoir <a href="http://sizzlejs.com/">Sizzle</a>), c&#8217;est tuer une mouche avec un tank&#8230; Il est bien plus approprié d&#8217;utiliser directement Sizzle sans s&#8217;encombrer du reste.</p>
<p>A mes yeux, l&#8217;utilisation d&#8217;un framework nécessite la connaissance du langage, même si les débutants ont parfois tendance à l&#8217;oublier. Se lancer tête baissée dans l&#8217;utilisation d&#8217;un framework comme jQuery sans la moindre notion de Javascript conduit rapidement à des catastrophes ; la plus flagrante étant souvent la perte de performance, due à une mauvaise compréhension et utilisation de l&#8217;outil.</p></blockquote>
<h2>Par rapport au Web de demain et des prochains standards HTML5 et CSS3, penses-tu que le Javascript sera de plus en plus dénigré pour laisser place aux nouvelles possibilités ?</h2>
<blockquote><p>Non, bien loin de là ! Le Javascript a encore de longues années devant lui. Le changement auquel on assiste actuellement se situe plus au niveau de l&#8217;utilisation qu&#8217;on fait du Javascript.</p>
<p>Le CSS3 offre son lot de nouvelles possibilités : transitions, animations, transformations (dont 3D), prochainement peut-être l&#8217;application de filtres (<a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html">Filter Effects 1.0</a>), voire même l&#8217;utilisation des <a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/custom/index.html">shaders</a>.</p>
<p>L&#8217;HTML5 nous apporte les vidéos et l&#8217;audio utilisables sans plugin, les canvas et de nombreuses balises de sémantique. Par ailleurs, le Javascript reste essentiel pour tirer pleinement partie des trois premiers.</p>
<p>Côté Javascript, il faut noter l&#8217;arrivée de nombreuses APIs : la géolocalisation, la 3D avec WebGL, les notifications web, la manipulation audio, le <a href="http://chez-syl.fr/2012/03/drag-and-drop-html5-jquery/">drag&#8217;n'drop</a> natif, les bases de données locales, la manipulation des fichiers, etc. Sans oublier le projet <a href="https://wiki.mozilla.org/WebAPI">WebAPI</a> de Mozilla qui offre des possibilités inestimables pour les applications : fonctionnalités téléphoniques, SMS, vibration, carnet d&#8217;adresses, appareil photo, batterie&#8230;</p>
<p>Le Javascript n&#8217;a pas été laissé en marge ! Même si, à l&#8217;heure actuelle, ces nouveautés sont encore pour beaucoup à l&#8217;état expérimental, on peut imaginer que l&#8217;utilisation du Javascript s&#8217;orientera rapidement sur toutes ces nouvelles possibilités de contrôle et d&#8217;interactions, laissant au CSS le soin d&#8217;animer les slideshows.</p></blockquote>
<h2>Le mot de la fin</h2>
<blockquote><p>Le Javascript connaît un regain de popularité qui le pousse vers de nouveaux horizons. Ces derniers temps ont été riches en nouveautés et le langage lui-même évolue (EcmaScript 5, EcmaScript 6 (Harmony)). On ne peut que souhaiter au Javascript de poursuivre sur sa lancée et espérer que les navigateurs s&#8217;accordent sur les spécifications. Il ne restera plus qu&#8217;à se débarasser des vieilles versions d&#8217;Internet Explorer.</p></blockquote>
<p>Un grand merci à Golmote de s&#8217;être pris au jeu ! <img src='http://chez-syl.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://chez-syl.fr/2012/03/interview-javascript-le-web-de-demain-html5-css3-jquery/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 829/964 objects using disk: basic

Served from: chez-syl.fr @ 2012-05-31 16:29:18 -->
