<?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>La Case de l&#039;Oncle Tom &#187; Accessibilité</title>
	<atom:link href="http://case.oncle-tom.net/categorie/web/accessibilite/feed/" rel="self" type="application/rss+xml" />
	<link>http://case.oncle-tom.net</link>
	<description>Développement Web, bonnes pratiques et performances</description>
	<lastBuildDate>Tue, 06 Jul 2010 14:50:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<atom:link rel="search"
           href="http://case.oncle-tom.net/opensearch"
           type="application/opensearchdescription+xml"
           title="Content Search" />		<item>
		<title>Paris-Web 2009 : le Web en offline avec Gears et HTML 5</title>
		<link>http://case.oncle-tom.net/2009/paris-web-2009-le-web-en-offline-avec-gears-et-html-5/</link>
		<comments>http://case.oncle-tom.net/2009/paris-web-2009-le-web-en-offline-avec-gears-et-html-5/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 10:00:42 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[gears]]></category>
		<category><![CDATA[google gears]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1460</guid>
		<description><![CDATA[Paris-Web c'est chaque année une dose de bonheur en barre pour tous les professionnels du Web : conférences, ateliers et orateurs de qualité. Je rempile cette année en tant que spectateur et orateur, notamment pour un atelier technique présentant Gears, la boîte à outil du Web pour faire du <em>offline</em>.]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1461" title="Paris-Web 2009" src="http://case.oncle-tom.net/images/2009/10/pw2009-400x150-3.gif" alt="Paris-Web 2009" width="300" height="150" /><a href="http://www.paris-web.fr/">Paris-Web</a> est LE rendez-vous Web de l&#8217;année pour tous les professionnels intéressés par le webdesign, la qualité et l&#8217;accessibilité. <a href="http://www.paris-web.fr/2008/">L&#8217;édition 2008</a> (la première à laquelle j&#8217;assistais) m&#8217;a particulièrement plu alors je rempile cette année, à la fois en tant que spectacteur et orateur d&#8217;atelier technique.</p>
<h3><span id="more-1460"></span>Des conférences de choix</h3>
<p>Les thématiques abordées sont une nouvelle fois intéressantes. Si leur titre n&#8217;est pas forcément attirant, la qualité des intervenants fait qu&#8217;à n&#8217;en pas douter, on va encore en prendre plein les yeux : suffit de lire le <a title="Programme de Paris-Web 2009" href="http://www.paris-web.fr/2009/-Programme-">programme</a>.</p>
<p>Parmi celles qui retiennent toute mon attention :</p>
<ul>
<li><strong>Intégrateurs, montez au front !</strong><br />
Notamment parce que j&#8217;ai participé à l&#8217;enquête sur le dialogue entre webdesigner et intégrateur et qu&#8217;il s&#8217;agit d&#8217;une pierre angulaire de la réussite graphique d&#8217;un projet.</li>
<li><strong>Un seul Web</strong><br />
Car l&#8217;an dernier j&#8217;avais été épaté par la présentation des nouveautés CSS3 de <a href="http://www.glazman.org/weblog/">Daniel Glazman</a>.</li>
<li><strong><acronym title="Cascading Style Sheets">CSS</acronym> peut-il être orienté objet ?</strong><br />
Parce que je crois beaucoup aux nouvelles méthodes de réutilisation et de conception <acronym title="Cascading Style Sheets">CSS</acronym> ; cette approche combinée à d&#8217;autres outils <acronym title="Cascading Style Sheets">CSS</acronym> est à mon avis la meilleure qui soit.</li>
<li><strong>CSS3 : Future Style Now</strong><br />
Parce qu&#8217;il est toujours bon de savoir comment utiliser les technos que l&#8217;on utilisera dans pas trop longtemps.</li>
<li><strong>WCAG 2.0, Flash, <acronym title="Portable Document Format">PDF</acronym>, Javascript et les autres sont dans un bateau</strong><br />
Une bonne piqûre de rappel sur l&#8217;accessibilité et les différentes boîtes noires qui sont devenus des standards <em>de facto</em>.</li>
<li><strong>Les nouveaux standards du web et leur implémentation dans les navigateurs modernes</strong><br />
Le titre parle de lui-même <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<p>C&#8217;est sans compter sur les ateliers techniques où là, je n&#8217;ai pas encore fait mon choix &#8230; la concurrence est rude <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Atelier technique sur Gears</h3>
<p>Il y a toutefois un atelier où je suis sûr d&#8217;être présent, c&#8217;est celui-ci : <strong>le Web en Offline avec Gears et <acronym title="HyperText Markup Language">HTML</acronym> 5</strong>, à 14h00 pour la digestion <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . Et pour cause, je l&#8217;animerai &#8230; enfin, encore faut-il que j&#8217;en termine la présentation. En voici la description officielle :</p>
<blockquote><p><a class="spip_out" href="http://tools.google.com/gears/">Gears</a> est un outil Open Source, majoritairement connu pour permettre à une page Web d’être consultable en étant déconnecté du réseau. Ce plugin pour navigateur Web propose pourtant d’autres briques utiles dans d’autres contextes, notamment les performances et le traitement d’un nombre important de données. C’est un outil unique permettant de créer des applications fonctionnelles hors-ligne et cross-brower sans avoir à recours à du client lourd (type application iPhone).</p>
<p>La présentation se focalisera sur la présentation des composants, des exemples d’utilisation mais aussi sur les contraintes et les choix de stratégie à adopter dans son code pour éviter la création d’usines à gaz.</p>
<p>L’atelier concluera sur l’avenir et <acronym title="HyperText Markup Language">HTML</acronym> 5 dans la mesure où les travaux de Gears sont désormais intégrés à la spécification <acronym title="HyperText Markup Language">HTML</acronym> 5.</p></blockquote>
<p>Mais globalement, l&#8217;atelier s&#8217;articulera autour des points suivants :</p>
<ul>
<li>présentation des modules de Gears</li>
<li>contraintes d&#8217;ergonomie</li>
<li>implications en terme d&#8217;architecture de code</li>
<li>débat ouvert avec l&#8217;assemblée</li>
</ul>
<p>Le choix sera difficile avec en même temps un atelier de David Larlet et Charles McCathieNeville &#8230; où j&#8217;aurais aimé également être présent.</p>
<p>À samedi &#8230; et jeudi et vendredi pour d&#8217;autres <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2007/google-gears-efficace/" title="Google Gears efficace (31 mai 2007)">Google Gears efficace</a> (0 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2009/ajouter-tinymce-plugin-wordpress/" title="Ajouter TinyMCE dans un plugin WordPress (3 février 2009)">Ajouter TinyMCE dans un plugin WordPress</a> (13 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/widget-jaiku-netvibes-presentation-bilan-developpement/" title="Widget Jaiku pour Netvibes : présentation et bilan du développement (20 août 2008)">Widget Jaiku pour Netvibes : présentation et bilan du développement</a> (5 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/widget-jaiku-pour-netvibes-14/" title="Widget Jaiku pour Netvibes 1.4 (25 septembre 2008)">Widget Jaiku pour Netvibes 1.4</a> (1 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/critique-transcender-css-sublimez-design-web/" title="Transcender CSS : sublimez le design Web ! (11 décembre 2007)">Transcender CSS : sublimez le design Web !</a> (15 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2009/paris-web-2009-le-web-en-offline-avec-gears-et-html-5/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Paris-Web 2008 : au nom du webdesign, de la qualité et des standards</title>
		<link>http://case.oncle-tom.net/2008/paris-web-2008-webdesign-qualite-standards/</link>
		<comments>http://case.oncle-tom.net/2008/paris-web-2008-webdesign-qualite-standards/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 06:00:13 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Logiciels libres]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[paris]]></category>
		<category><![CDATA[parisweb]]></category>
		<category><![CDATA[performances]]></category>
		<category><![CDATA[pw2008]]></category>
		<category><![CDATA[qualité]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1203</guid>
		<description><![CDATA[J&#8217;ai enfin pu assister à mon premier Paris-Web à Paris du 13 au 15 novembres 2008 inclus. C&#8217;était bien, très bien mais que dis-je : excellent ! J&#8217;ai rarement eu aussi peu envie de rentrer chez moi après cette multitude de rencontres dans un état d&#8217;esprit des plus respectueux. Y&#8217;a même pas de troll pendant [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1204" title="Badge Paris-Web 2008" src="http://case.oncle-tom.net/images/2008/11/badge-paris-web-2008.jpg" alt="" width="327" height="500" /></p>
<p>J&#8217;ai <em>enfin</em> pu assister à mon premier <a href="http://www.paris-web.fr/">Paris-Web</a> à Paris du 13 au 15 novembres 2008 inclus. C&#8217;était bien, très bien mais que dis-je : excellent ! J&#8217;ai rarement eu aussi peu envie de rentrer chez moi après cette multitude de rencontres dans un état d&#8217;esprit des plus respectueux.</p>
<p>Y&#8217;a même pas de troll pendant la conférence <em>Internet Explorer 8</em>, c&#8217;est dire.</p>
<p><span id="more-1203"></span></p>
<h3>Les conférences en quelques mots</h3>
<p>Les <a href="http://www.paris-web.fr/2008/-programme-">conférences de Paris-Web 2008</a> étaient réparties du jeudi au vendredi. Je souhaitais intituler cette partie &laquo;&nbsp;mes conférences préférées&nbsp;&raquo; mais en faisant le décompte, j&#8217;en citerais au moins 75% :</p>
<ul>
<li><a href="http://www.slideshare.net/elirene/sp-parisweb2008-20081113-presentation/">Qualité et accessibilité Web : vers l’amélioration continue</a></li>
<li><a href="http://www.slideshare.net/cheilmann/working-in-the-now-presentation">Travailler dans le présent</a></li>
<li><strong>Accessibilité, des volontaires ?</strong></li>
<li>Internationalisation</li>
<li><strong>La mode se démode, le &lt;style&gt; jamais</strong></li>
<li>Identité 2.0 et Web sémantique</li>
<li>IE8 et les standards du Web</li>
<li><strong>Performances côté client</strong></li>
</ul>
<div class="wp-caption aligncenter" style="width: 344px"><a class="tt-flickr tt-flickr-Medium" title="Stéphane Deschamps" href="http://www.flickr.com/photos/the-jedi/3034676683/"><img src="http://farm4.static.flickr.com/3237/3034676683_5eedcfdbb4.jpg" alt="Stéphane Deschamps" width="334" height="500" /></a><p class="wp-caption-text">Stéphane Deschamps</p></div>
<p>Ce qu&#8217;il faut retenir c&#8217;est que désormais, nous sommes dans une époque où nombre d&#8217;outils sont à notre disposition. Il faut <strong>maximiser l&#8217;utilisation d&#8217;outils déjà existants</strong> et s&#8217;en servir pour bâtir nos applications, interfaces et présentations.</p>
<p>Il faut également qu&#8217;on en finisse avec notre approche trop technique et intégriste de travailleurs du Web : <strong>le client se fiche éperdument de la techno employée</strong> ou de la fonctionnalité en elle-même. Ce qui compte c&#8217;est ce qu&#8217;elle apporte ainsi que le résultat final.<br />
Bien entendu, si la solution employée tient compte des performances et est facile à mettre en œuvre, c&#8217;en n&#8217;est que mieux.</p>
<p>Élie me faisait la remarque : <strong>il faut vendre de la qualité et pas de l&#8217;accessibilité</strong>. Il faut vendre un site qui rassure et guide le client. Si le site n&#8217;est déjà pas adapté aux individus sans déficiences, à quoi bon s&#8217;acharner à le rendre accessible ?<br />
Mieux vaut beaucoup de sites accessibles à 60% qu&#8217;une infime proportion de sites accessibles à 99%.</p>
<p>Bon nombre de conseils sur l&#8217;optimisation des sites Web étaient déjà cités dans l&#8217;excellentissime <a href="http://case.oncle-tom.net/2008/07/15/high-performance-web-sites/">livre High Performances Websites</a>. L&#8217;équipe <em>Exceptional Performance</em> de Yahoo! s&#8217;est toutefois penchée à fond sur l&#8217;optimisation des images.<br />
J&#8217;y reviendrai d&#8217;ailleurs car j&#8217;ai découvert <em>pngnq</em> et <em>pngcrush</em>. Ces 2 programmes sont d&#8217;une utilité redoutable pour compresser et optimiser vos <acronym title="Portable Network Graphics">PNG</acronym>, notamment pour faciliter la transparence <acronym title="Internet Explorer 6">IE6</acronym> sans douleur.</p>
<div class="wp-caption aligncenter" style="width: 348px"><a class="tt-flickr tt-flickr-Medium" title="Chris Wilson" href="http://www.flickr.com/photos/the-jedi/3043455147/"><img src="http://farm4.static.flickr.com/3135/3043455147_016c2baa1d.jpg" alt="Chris Wilson" width="338" height="500" /></a><p class="wp-caption-text">Chris Wilson</p></div>
<p>On terminera également avec une perspective du futur.<br />
Daniel Glazman a fait un show exceptionnel sur les <strong>nouveautés de CSS3</strong> avec tout plein de bonnes choses. J&#8217;ai vraiment hâte qu&#8217;on puisse jouer avec &#8230; peut-être dans pas si longtemps que ça vu que les navigateurs intègrent ces nouveautés par anticipation.</p>
<p>De son côté, Chris Wilson (qui faisait déjà partie de l&#8217;équipe de développement de Mozaïc) a abordé les standards et Internet Explorer 8. En toute honnêteté, j&#8217;admire la bravoure de cet homme &laquo;&nbsp;seul&nbsp;&raquo; face à une assemblée pro-standards qui passe sa journée à jeter des cailloux sur Internet Explorer.<br />
Pour avoir un peu discuté avec lui après coup, il représente une chance exceptionnelle d&#8217;enfin avoir Internet Explorer au niveau des autres navigateurs.</p>
<p>Si fonctionnellement je me fiche éperdument du navigateur puisque je ne l&#8217;utiliserai plus, le monde a tout à gagner à avoir <strong>un navigateur de plus à respecter les standards</strong>.<br />
Bon courage à Chris car ça ne doit pas être évident tous les jours pour lui. Je n&#8217;ose pas imaginer les montages qu&#8217;il a dû déplacer pour imposer ce choix du respect.</p>
<h3>Du côté des ateliers</h3>
<p>Le samedi c&#8217;était ateliers : 2 sessions le matin et 2 l&#8217;après-midi. Je me suis d&#8217;ailleurs vite retrouvé avec des choix cornéliens puisque pour chaque horaire, il y avait 5 sujets qui se faisaient concurrence.</p>
<p>J&#8217;ai pour ma part assisté à :</p>
<ul>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-redaction_et_referencement_naturel">Rédaction Web et référencement naturel</a></li>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-validation_formulaires">Validation avancée des formulaires</a></li>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-frameworks_CSS">Développement efficace avec les <span lang="en">frameworks <acronym title="Cascading Style Sheet"><acronym title="Cascading Style Sheets">CSS</acronym></acronym></span></a></li>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-rdf_vs_microformats"><acronym title="Resource Description Framework" lang="en"><acronym title="Resource Description Framework">RDF</acronym></acronym>a <abbr class="discret" title="versus" lang="en">vs</abbr> Microformats</a></li>
</ul>
<p>La <strong>rédaction Web était intéressante</strong> même si je n&#8217;ai pas appris grand chose et j&#8217;en profitais pour terminer mes <em>slides</em>. Vous retrouverez tout le contenu de cette présentation dans le livre <a href="http://case.oncle-tom.net/2008/01/08/ecrit-web-traitement-information-sur-internet/">l&#8217;écrit Web</a>.</p>
<p>La <strong>validation avancée des formulaires partait d&#8217;un bon principe</strong> mais s&#8217;enfonçait inutilement dans certaines parties. À mon avis, expliquer chaque fonction (y compris celles du <acronym title="Document Object Model">DOM</acronym>) était une perte de temps.<br />
Conseil : charger ses slides ne rend pas pour autant l&#8217;information digeste. C&#8217;est pas un document Word.<br />
C&#8217;était néanmoins intéressant pour le raisonnement et la satisfaction de mettre en place son propre validateur. Toutefois en production autant utiliser de l&#8217;existant. Il y a des <em>plugins</em> pour tous les bons frameworks JavaScript qui se respectent.</p>
<p>Je passe sur l&#8217;atelier des <strong>frameworks <acronym title="Cascading Style Sheets">CSS</acronym></strong> puisque je l&#8217;animais. J&#8217;y reviendrai dans un prochain article pour appuyer ma présentation et fournir des explications à ceux qui n&#8217;ont pas pu y assister.<br />
J&#8217;étais en revanche étonné qu&#8217;ils soient si peu connus. J&#8217;ai par contre été enchanté de les voir cités à plusieurs reprises dans mes conférences préférées <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Rien à redire sur <strong>RDFa vs. Microformats</strong> même si on aurait pu éjecter les microformats rapidements et plonger encore plus loin dans la pratique de RDFa. Ça sera prétexte à une suite plus technique l&#8217;an prochain <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div class="wp-caption aligncenter" style="width: 510px"><a class="tt-flickr tt-flickr-Medium" title="Amélie Boucher" href="http://www.flickr.com/photos/the-jedi/3035518848/"><img src="http://farm4.static.flickr.com/3175/3035518848_5670eddbfa.jpg" alt="Amélie Boucher" width="500" height="334" /></a><p class="wp-caption-text">La sublime Amélie Boucher</p></div>
<h3>Sans oublier les gens !</h3>
<p>Paris-Web c&#8217;est aussi l&#8217;occasion de <a href="http://www.biologeek.com/2008/11/paris-web-2008-retours-chaud/">rencontrer la moitié de son aggrégateur</a> et de ses <em>followers</em> Twitter <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Et Dieu sait s&#8217;il y avait tout un tas de pointures du Web à notre disposition dans une ambiance exceptionnellement cordiale :</p>
<ul>
<li>Sophie Major, big boss du Yahoo! Developer Network</li>
<li><a href="http://www.stubbornella.org/">Nicole Sullivan</a>, de l&#8217;équipe Yahoo! <em>Exceptional Performance</em></li>
<li><a href="http://www.wait-till-i.com/">Christian Heilmann</a> et son incroyable bonne humeur pragmatique ; je suis fan !</li>
<li><a href="http://glazman.org">Daniel Glazman</a>, du <acronym title="Cascading Style Sheets">CSS</acronym> Working Group ; franc, direct et j&#8217;aime ça</li>
<li>Sans oublier pêle-mêle <a href="http://www.sutekidane.net/">Than</a>, <a href="http://www.tentatives-accessibles.eu">Sébastien Delorme</a>, <a href="http://blog.webatou.info/">Monique</a>, <a href="http://www.jeuxdemaux.com/">La Lène</a>, <a href="http://www.ergolab.net">Amélie Boucher</a>, <a href="http://redisdead.net">Hellgy</a>, <a href="http://goetter.fr">Raphaël Goetter</a>, <a href="http://openweb.eu.org/">Fabrice Bonny</a>, <a href="http://www.netvibes.com/znarf">François Hodierne</a>, <a href="http://xavier.borderie.net/blog/">Xavier Borderie</a> &#8230; et en oubliant très certainement plein d&#8217;autres :&#8217;(</li>
<li>Et d&#8217;excellentes découvertes : <a href="http://hanblog.info/blog/">Anthony Ricaud</a>, <a href="http://blog.virgule.info/">Mathieu Pillard</a> et toute l&#8217;<strong>équipe Paris-Web</strong> !</li>
</ul>
<div class="wp-caption aligncenter" style="width: 510px"><a class="tt-flickr tt-flickr-Medium" title="Table ronde du jeudi" href="http://www.flickr.com/photos/the-jedi/3034679191/"><img src="http://farm4.static.flickr.com/3270/3034679191_d551c06a85.jpg" alt="Table ronde du jeudi" width="500" height="334" /></a><p class="wp-caption-text">La brochette des meilleurs !</p></div>
<h3>Conclusion</h3>
<p>Bref, <strong>Paris-Web c&#8217;est bien</strong>. Tellement bien que l&#8217;attente de l&#8217;édition 2009 me paraît déjà insoutenable !</p>
<p>Je ne regrette au final qu&#8217;une chose : 3 jours ça paraît long mais ça passe teeeeeeeeeeeeellement vite en compagnie de personnes de qualité avec un programme chargé.<br />
J&#8217;ai essayé de discuter avec un maximum de personnes, que je connaissais ou pas, mais des fois c&#8217;est très insuffisant.</p>
<p>Les tables rondes étaient également exceptionnelles &#8230; désolé ça frise le billet sponsorisé mais il est difficile de ne pas déborder d&#8217;enthousiasme après un tel évènement.</p>
<p>C&#8217;est l&#8217;<strong>effet Paris-Web</strong>. Rendez-vous est pris.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="François Yergeau nous parle d'internationalisation" href="http://www.flickr.com/photos/the-jedi/3039040472/"><img class="aligncenter" src="http://farm4.static.flickr.com/3020/3039040472_65bfdecfbd.jpg" alt="François Yergeau nous parle d'internationalisation" width="500" height="334" /></a></p>
	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2008/rendez-vous-octobre-novembre-web2-paris-web/" title="Mes rendez-vous d&#8217;octobre/novembre : Web2, Paris-Web &#038; cie (3 octobre 2008)">Mes rendez-vous d&#8217;octobre/novembre : Web2, Paris-Web &#038; cie</a> (4 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/developpement-efficace-frameworks-css/" title="Développement efficace avec les frameworks CSS (25 novembre 2008)">Développement efficace avec les frameworks CSS</a> (25 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/webdeuxconnect-20-les-400-coups-du-reseau/" title="Webdeux.connect 2.0, les 400 coups du réseau (14 octobre 2008)">Webdeux.connect 2.0, les 400 coups du réseau</a> (8 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/critique-transcender-css-sublimez-design-web/" title="Transcender CSS : sublimez le design Web ! (11 décembre 2007)">Transcender CSS : sublimez le design Web !</a> (15 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/sites-web-les-bonnes-pratiques/" title="Sites Web : les bonnes pratiques (26 février 2007)">Sites Web : les bonnes pratiques</a> (12 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/paris-web-2008-webdesign-qualite-standards/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>L&#8217;annuaire Service-Public (r)évolue !</title>
		<link>http://case.oncle-tom.net/2008/annuaire-service-public-evolue/</link>
		<comments>http://case.oncle-tom.net/2008/annuaire-service-public-evolue/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 05:00:55 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[redirection]]></category>
		<category><![CDATA[utilisabilité]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1192</guid>
		<description><![CDATA[Je suis tombé nez à nez sur l&#8217;annuaire des sites Internet publics la semaine dernière en cherchant l&#8217;adresse de la CPAM de Gironde. Il se trouve que la page de cette dite organisation était affublée d&#8217;un message explicite &#8230; ou en fait pas vraiment. Ou comment un message partant d&#8217;un bon sentiment peut ruiner une [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1200" title="Logo Service-public.fr" src="http://case.oncle-tom.net/images/2008/11/service_public.jpg" alt="" width="228" height="51" /></p>
<p>Je suis tombé nez à nez sur l&#8217;<a href="http://lessites.service-public.fr/">annuaire des sites Internet publics</a> la semaine dernière en cherchant l&#8217;adresse de la <acronym title="Caisse Primaire d\'Assurance Maladie">CPAM</acronym> de Gironde. Il se trouve que <a title="CPAM de Gironde sur l'annuaire des sites Internet publics" href="http://lessites.service-public.fr/cgi-bin/annusite/annusite.fcgi/loc7?lang=fr&amp;orga=11712">la page de cette dite organisation</a> était affublée d&#8217;un message explicite &#8230; ou en fait pas vraiment.</p>
<p>Ou comment un message partant d&#8217;<strong>un bon sentiment peut ruiner une navigation</strong>.</p>
<p><span id="more-1192"></span></p>
<h3>Manque de clarté du message</h3>
<p>Voici la disposition de l&#8217;alerte une fois sur la fiche de l&#8217;organisation recherchée :</p>
<div id="attachment_1193" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-1193" title="Message d'alerte de Service-public.fr" src="http://case.oncle-tom.net/images/2008/10/cpam-gironde-service-public.png" alt="Message d'alerte de Service-public.fr" width="500" height="352" /><p class="wp-caption-text">Message d&#39;alerte de Service-public.fr</p></div>
<p>On est sur du simple et direct : message puis information recherchée.</p>
<p>Le problème c&#8217;est qu&#8217;on est confronté à plusieurs messages :</p>
<ul>
<li><cite>la partie locale de l&#8217;annuaire va fermer.</cite><br />
Suis-je sur la partie locale ? Je proviens d&#8217;une recherche Google et franchement, je n&#8217;en sais rien. Un petit &laquo;&nbsp;locaux&nbsp;&raquo; en rouge aurait tendance à me le faire croire.<br />
Résultat des courses : j&#8217;ai eu besoin de chercher à vérifier si j&#8217;étais concerné par le message.</li>
<li><cite>Elle est remplacée par l&#8217;annuaire de l&#8217;administration / services locaux.</cite><br />
Le premier message vraiment utile est là : cette partie va être remplacée et j&#8217;ai un lien d&#8217;accès à la nouvelle ressource.</li>
<li><strong>Les mises à jour ne sont plus effectuées.</strong><br />
Donc si je comprends bien, je suis en train de consulter des données sans aucune garantie qu&#8217;elles soient encore fiables. Autant dire que je n&#8217;ai qu&#8217;un seul intérêt : me rendre sur le site de remplacement.<br />
Un effort cognitif de plus.</li>
<li><strong>Un message d&#8217;information pour les administrations locales.</strong><br />
Est-ce ce message concerne l&#8217;utilisateur lambda ? Pas vraiment. Surcharge de texte inutile sauf s&#8217;il n&#8217;y a aucun autre moyen d&#8217;avertir ces fameuses administrations locales de mettre à jour leurs procédures.</li>
</ul>
<p>L&#8217;information principale se retrouve noyée dans la masse et laisse à penser qu&#8217;on n&#8217;aura pas les informations souhaitées sur la page courante.</p>
<p>Alors soit, cliquons sur le <a href="http://lannuaire.service-public.fr/navigation/accueil_sl.html">seul lien de rechange que l&#8217;on ait</a>.</p>
<h3>Perte de l&#8217;information et de la navigation</h3>
<p>Je pense qu&#8217;en terme de perte d&#8217;information de substitution, <em>on ne peut pas faire pire</em> (sauf à avoir un lien cassé).</p>
<p>En effet, alors que j&#8217;étais sur une page d&#8217;information très précise, je reviens au point de départ : l&#8217;échelle nationale sans aucun repère.<br />
En clair :</p>
<ul>
<li><em>j&#8217;ai perdu l&#8217;information</em> dont j&#8217;étais en possession</li>
<li><em>je dois à nouveau la retrouver</em> dans une disposition différente de l&#8217;origine</li>
</ul>
<p>La bonne chose à faire serait de taper à nouveau ma recherche (<em><acronym title="Caisse Primaire d\'Assurance Maladie">CPAM</acronym> gironde</em>) dans le champ de saisie mais préférant la facilité, j&#8217;use de la carte de France et clique sur la région Aquitaine.</p>
<p>Enfer et damnation, je dois retrouver la <acronym title="Caisse Primaire d\'Assurance Maladie">CPAM</acronym> dans une liste à 5 niveaux de défilement. 2 solutions :</p>
<ul>
<li>cliquer sur un département : l&#8217;affichage de la longue liste se retrouve filtré au département en question. À nouveau recherche de l&#8217;information.</li>
<li>scanner la page pour y trouver ce que je veux. Heureusement que l&#8217;occurence <acronym title="Caisse Primaire d\'Assurance Maladie">CPAM</acronym> est affichée, ce qui m&#8217;évite d&#8217;avoir à tout lire.</li>
</ul>
<p>Et comme si je n&#8217;avais pas assez cherché, je me retrouve confronté à un choix difficile : choisir parmi 8 liens hypertexte au même libellé. Jugez-en par vous-même :</p>
<div id="attachment_1194" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-1194" title="Quel lien choisir ?" src="http://case.oncle-tom.net/images/2008/10/liste-cpam-gironde.png" alt="Quel lien choisir ?" width="500" height="255" /><p class="wp-caption-text">Quel lien choisir ?</p></div>
<p>Le pifomètre m&#8217;a fait cliquer sur le premier des 8 liens et coup de bol &#8230; c&#8217;est bon.</p>
<p>J&#8217;ai désormais l&#8217;information souhaitée &#8230; différente de la page initiale sur le futur-ex annuaire local de Service-public.fr. Mais après combien de manipulations et de réflexion ?</p>
<h3>Conclusion</h3>
<p>Trop de manipulations c&#8217;est certain. Résumons les erreurs principales :</p>
<ul>
<li>présentation d&#8217;un message peu clair</li>
<li>renvoi vers une page détruisant l&#8217;information en notre possession</li>
<li>obligation de rechercher à nouveau l&#8217;information en notre possession</li>
</ul>
<p>Cela aurait pu être évité par l&#8217;un de ces 2 moyens :</p>
<ul>
<li><strong>redirection automatique permanente.</strong><br />
On ne voit pas de message, on tombe directement sur une information à jour et on ne perd pas un seul instant. La meilleure solution et de loin.</li>
<li><strong>afficher un message plus clair avec un hyperlien direct vers la ressource de remplacement.</strong><br />
C&#8217;est un chouilla moins bien mais si on tient vraiment à faire passer un message, c&#8217;est très bien.</li>
</ul>
<p>Avec la méthode présentée, on a un peu l&#8217;impression de faire le boulot à la place des mainteneurs du site. Est-ce vraiment si pratique ?</p>
<p><strong>L&#8217;accessibilité passe aussi par une présentation réduisant les efforts cognitifs</strong>. Et ça ne vaut pas que pour des personnes handicapées, ça vaut également pour des utilisateurs peu avertis du Web, pour votre référencement mais aussi pour le simple respect de votre clientèle.</p>
	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2010/reussir-son-blog-professionnel-%e2%88%92-deuxieme-edition/" title="Réussir son blog professionnel − deuxième édition (10 juin 2010)">Réussir son blog professionnel − deuxième édition</a> (9 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2010/twitter-quand-arreter-tweeter/" title="Quand faut-il s&#8217;arrêter de tweeter ? (4 février 2010)">Quand faut-il s&#8217;arrêter de tweeter ?</a> (6 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2009/prochainement-reussir-son-blog-professionnel/" title="Prochainement : réussir son blog professionnel (20 juillet 2009)">Prochainement : réussir son blog professionnel</a> (28 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/netvibes-ginger-bien-mais-pas-top/" title="Netvibes Ginger : bien mais pas top (22 février 2008)">Netvibes Ginger : bien mais pas top</a> (5 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/high-performance-web-sites/" title="High Performance Web Sites (15 juillet 2008)">High Performance Web Sites</a> (5 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/annuaire-service-public-evolue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configuration optimale, délire maximal</title>
		<link>http://case.oncle-tom.net/2008/configuration-optimale-delire-maximal/</link>
		<comments>http://case.oncle-tom.net/2008/configuration-optimale-delire-maximal/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 05:00:19 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[carton rouge]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[ooshop]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1159</guid>
		<description><![CDATA[Hier Sébastien Delorme s&#8217;est fendu d&#8217;un petit twit qui m&#8217;a fait sourire sur le site de vente en ligne Ooshop. Cependant après réflexion, je me suis dis que c&#8217;était particulièrement grave. En 2008 on vous demande encore de venir en smoking sur un site Web et qui plus est, avec des recommandations liées à des [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1162" title="Site optimisé pour ..." src="http://case.oncle-tom.net/images/2008/10/site-optimise-pour.png" alt="" width="500" height="58" /></p>
<p>Hier <a href="http://www.tentatives-accessibles.eu/">Sébastien Delorme</a> s&#8217;est <a href="http://twitter.com/sebcbien/statuses/948211570">fendu d&#8217;un petit twit</a> qui m&#8217;a fait sourire sur le site de vente en ligne <a href="http://ooshop.fr">Ooshop</a>. Cependant après réflexion, je me suis dis que c&#8217;était particulièrement grave.</p>
<p>En 2008 on vous demande encore de venir en smoking sur un site Web et qui plus est, avec des recommandations liées à des logiciels <span style="text-decoration: line-through;">périmés, à savoir Internet Explorer 6 et Firefox 1.5</span> à jour (<a href="http://case.oncle-tom.net/2008/10/07/configuration-optimale-delire-maximal/#comment-27861">le site a été mis à jour suite à cet article</a>).</p>
<p>Entrevue d&#8217;une configuration optimale tout sauf accessible et acceptable.</p>
<p><span id="more-1159"></span></p>
<p>Avant toute chose, prenez connaissance de cette <a title="la configuration optimale selon Ooshop" href="http://www.ooshop.com/Content/FR/PreHome/Conf.html">fameuse configuration optimale</a>. Y&#8217;aurait de quoi écrire une thèse dessus.</p>
<h3>Navigateur optimal</h3>
<blockquote><p>Ooshop recommande d&#8217;utiliser               la résolution d&#8217;écran suivante : 1024&#215;768.</p>
<p>Ooshop recommande pour une navigation optimale d&#8217;utiliser les navigateurs               suivants :</p>
<p><strong>Pour PC :</strong><br />
Internet Explorer 6 &#8211; <a class="ooshop11BUgreen1" href="http://download.microsoft.com/download/ie6sp1/finrel/6_sp1/W98NT42KMeXP/EN-US/ie6setup.exe">Télécharger</a><br />
Firefox 1.5 &#8211; <a class="ooshop11BUgreen1" href="http://www.mozilla-europe.org/fr/products/firefox/">Télécharger</a></p>
<p><strong>Pour Mac :</strong><br />
Firefox 1.5 &#8211; <a class="ooshop11BUgreen1" href="http://www.mozilla-europe.org/fr/products/firefox/">Télécharger</a><br />
Safari 2.0.3 &#8211; Ce navigateur est installé par defaut par               Apple</p>
<p>Les navigateurs Konqueror, Opéra, Avant Browser ne sont pas               encore entièrement compatibles sur notre site.</p></blockquote>
<p>Tout est critiquable mais je suis joueur.</p>
<p><strong>La résolution optimale, je pense qu&#8217;à peu près tout le monde s&#8217;en fiche</strong> :</p>
<ul>
<li>ceux qui ont la bonne résolution n&#8217;en auront que faire (et je les comprends)</li>
<li>ceux qui n&#8217;ont pas la bonne &#8230; et bien ils s&#8217;en apercevront et surtout, que peuvent-ils faire ?</li>
</ul>
<p>Combien de personnes ont diminué leur résolution pour cause de problème de vision ? Vont-ils augmenter la résolution uniquement parce que ça a été voulu sur ce site Web ? C&#8217;est un peu comme si en allant au supermarché on regardait la taille de votre coffre de voiture en refoulant tous les possesseurs de Smart.<br />
<strong>Personne ne le fera, faut arrêter de rêver</strong>. Et surtout si les personnes ne savent pas régler leur résolution (tant et si bien que ça leur parle).</p>
<p>Plusieurs cas de figure :</p>
<ul>
<li>si on a vraiment besoin de ces 1024, on s&#8217;arrange pour placer au moins la navigation principale dans la partie qui sera toujours visible sans avoir à scroller horizontalement</li>
<li>ou alors on opte pour un <a href="http://css.alsacreations.com/Tutoriels-et-articles-divers/Faire-un-site-pour-toutes-les-resolutions">site à largeur variable, fluide ou élastique</a></li>
</ul>
<p>Et pour le navigateur ? J&#8217;ai un PC mais je ne comprends pas, je ne peux pas avoir Internet Explorer 6 dessus. Ah je suis sous Linux ? Je comprends pas pourquoi je ne me sens pas concerné.<br />
Hé les gars : faut faire la différence entre Windows (système verrouillé par conception) et <a href="http://fr.wikipedia.org/wiki/Compatible_PC">PC</a> (architecture basée sur x86, dont les Mac feraient même partie aujourd&#8217;hui si on reste large).</p>
<p>Et à côté de ça on me cite Konqueror, un des navigateurs avec les plus faibles part de marché (et compatible Linux uniquement). Y&#8217;a franchement de quoi se marrer.</p>
<p><strong>Solution</strong> : virer ce bout de texte et opter pour un code compatible avec des navigateurs modernes, d&#8217;Internet Explorer 7 à Safari en passant par Firefox.</p>
<h3>Configuration optimale</h3>
<p>J&#8217;adore ce genre de pots-pourris façon Internet de la bulle Internet des années 2000. Et vas-y qu&#8217;y a du <em>simple pixel gif</em> et que je te parle de ce qu&#8217;il faut configurer sans image aucune (ben ouais, c&#8217;est pas optimisé les images).</p>
<p>La configuration des cookies est tellement bien expliquée, à tel point qu&#8217;on te dit :</p>
<ul>
<li>que ça ne fait «que» mémoriser des informations</li>
<li>que ça ne permet pas de lire des informations sur le disque dur (à moitié vrai, les cookies c&#8217;est pas sur le disque ?)</li>
<li>mais qu&#8217;à côté de ça, ça permet de créer une base de données sur les visiteurs (c&#8217;est beau la transparence ceci dit)</li>
<li>et surtout le plus fun, que les <strong>cookies sont gérés automatiquement</strong> par les sites de commerce électronique</li>
</ul>
<p>Alors 2 possibilités :</p>
<ul>
<li>Ooshop n&#8217;est pas un site de commerce électronique, ce qui explique la procédure de configuration des cookies expliquées juste en-dessous</li>
<li>Ooshop se fiche éperdument de la tête de ses visiteurs et compte sur leur aptitude à ne pas lire cette même pas (et là ils ont raison, personne ne la lit/lira/a lu)</li>
</ul>
<p>Mon conseil : <strong>vérifier que les cookies sont activés sur le navigateur</strong>. C&#8217;est pas comme si on pouvait le faire de manière automatique mais presque &#8230; En cas d&#8217;erreur, lui présenter en image les manipulations à effectuer sur son navigateur.<br />
À quoi bon parler de la configuration d&#8217;Internet Explorer si on utilise Konqueror &#8230;</p>
<p>Je passe également le volet sur le <acronym title="Secure Sockets Layer">SSL</acronym>. Quand on vient faire des courses, c&#8217;est certainement pas pour prendre des cours de crypto. J&#8217;entends déjà mon médecin m&#8217;expliquer que les données sur ma carte Vitale sont accessibles car non protégées lors d&#8217;une visite médicale.<br />
<a href="http://fr.wikipedia.org/wiki/Carte_Vitale#Big_Brother_Awards">Ah non pardon, ça c&#8217;est vrai</a>.</p>
<h3>Conclusion</h3>
<p>Au lieu de s&#8217;évertuer à pondre une pleine page en <em>popup</em> pour expliquer comment paramétrer un navigateur dans un language peu compréhensible, il faudrait glisser du <em>il faut</em> à <em>nous allons</em>.<br />
Oui, <strong>optimiser au lieu d&#8217;expliquer</strong> comment optimiser son navigateur pour un site donné.</p>
<p>Imaginez qu&#8217;on doive paramétrer son butineur favori/imposé pour chaque site.<br />
C&#8217;est le reflet d&#8217;une mauvaise conception ou d&#8217;un vice assumé.</p>
<p>Je n&#8217;aurais qu&#8217;une chose à dire, le slogan d&#8217;Ooshop, il est parfait !</p>
<div id="attachment_1161" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-1161" title="Ooshop, la vie optimisée" src="http://case.oncle-tom.net/images/2008/10/ooshop-vie-optimise.png" alt="Je te le fais pas dire" width="500" height="54" /><p class="wp-caption-text">Je te le fais pas dire ...</p></div>
	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2007/twitter-gtwitter/" title="Twitter, la mini-messagerie (1 juin 2007)">Twitter, la mini-messagerie</a> (6 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/quand-jaiku-surpassera-twitter/" title="Quand Jaiku surpassera Twitter (24 juin 2008)">Quand Jaiku surpassera Twitter</a> (6 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2010/twitter-quand-arreter-tweeter/" title="Quand faut-il s&#8217;arrêter de tweeter ? (4 février 2010)">Quand faut-il s&#8217;arrêter de tweeter ?</a> (6 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/netvibes-ginger-bien-mais-pas-top/" title="Netvibes Ginger : bien mais pas top (22 février 2008)">Netvibes Ginger : bien mais pas top</a> (5 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/la-generation-y-bouscule-le-monde-du-travail/" title="La génération Y bouscule le monde du travail (16 septembre 2008)">La génération Y bouscule le monde du travail</a> (7 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/configuration-optimale-delire-maximal/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>colorblind-applet : des filtres pour daltonien sous Linux</title>
		<link>http://case.oncle-tom.net/2008/colorblind-applet-des-filtres-pour-daltonien-sous-linux/</link>
		<comments>http://case.oncle-tom.net/2008/colorblind-applet-des-filtres-pour-daltonien-sous-linux/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 05:00:25 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Logiciels libres]]></category>
		<category><![CDATA[applet]]></category>
		<category><![CDATA[color oracle]]></category>
		<category><![CDATA[colorblind-applet]]></category>
		<category><![CDATA[daltonisme]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gnome-mag]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1038</guid>
		<description><![CDATA[J&#8217;ai découvert totalement par hasard un jeu de filtres pour daltonien fonctionnant sur l&#8217;environnement de bureau Gnome. Son petit nom ? colorblind-applet. Il est livré en standard sous Debian et plus péniblement, sous Ubuntu. Cette dernière distribution englobe pourtant Gnome Magnifier (paquet gnome-mag), le projet père mais allez savoir pourquoi, sans l&#8217;applet pour daltonien. Petit [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1056" title="Colorblind-applet" src="http://case.oncle-tom.net/images/2008/08/colorblind-applet-credits.png" alt="" width="360" height="282" /></p>
<p>J&#8217;ai découvert totalement par hasard un jeu de filtres pour daltonien fonctionnant sur l&#8217;environnement de bureau Gnome. Son petit nom ? <strong>colorblind-applet</strong>.<br />
Il est livré en standard sous Debian et <a title="installer colorblind-applet sous Ubuntu" href="http://news.softpedia.com/news/How-To-Install-the-Colorblind-Applet-on-GNOME-91323.shtml">plus péniblement, sous Ubuntu</a>. Cette dernière distribution englobe pourtant Gnome Magnifier (paquet <em>gnome-mag</em>), le projet père mais allez savoir pourquoi, sans l&#8217;applet pour daltonien.</p>
<p>Petit tour du propriétaire et mise en application dans le cas du développement Web.</p>
<p><span id="more-1038"></span></p>
<h3>Présentation rapide du daltonisme</h3>
<p>Se mettre dans la peau d&#8217;un daltonien, ou voir à travers ses yeux, est une chose difficile. Comment imaginer le rendu des couleurs ? Et surtout, comment l&#8217;imaginer en fonction du daltonisme ?<br />
Il faut savoir qu&#8217;il existe plusieurs variations de cette anomalie de perception de couleurs :</p>
<ul>
<li><strong>mauvaise perception</strong> du rouge</li>
<li><strong>pas de perception</strong> du rouge</li>
<li>mauvaise perception du vert</li>
<li>pas de perception du vert</li>
<li>mauvaise perception du bleu</li>
<li>pas de perception du bleu</li>
</ul>
<p>À cela s&#8217;ajoutent également des combinaisons possibles entre ces différentes variantes. Pour plus d&#8217;informations, je vous invite à consulter l&#8217;<a href="http://fr.wikipedia.org/wiki/Daltonisme">article sur le daltonisme sur Wikipédia</a>.<br />
Et pour votre gouverne, <strong>être daltonien ne signifie pas être handicapé</strong>. Les personnes atteintes de cette anomalie (environ 8% des hommes en France, même pas 1% de femmes) ne peuvent donc pas être reconnues comme telles.</p>
<div class="wp-caption aligncenter" style="width: 210px"><img title="Chiffre 37, invisible pour les personnes atteintes de protanopie" src="http://upload.wikimedia.org/wikipedia/commons/5/55/Colorblind3.png" alt="Chiffre 37, invisible pour les personnes atteintes de protanopie" width="200" height="200" /><p class="wp-caption-text">Chiffre 37, invisible pour les personnes atteintes de protanopie</p></div>
<p>Pour savoir savoir si on est daltonien, il suffit de regarder les images des <a href="http://daltonien.free.fr/daltonien/article.php3?id_article=6">planches du test d&#8217;Ishihara</a>. Peut-être la &laquo;&nbsp;mauvaise&nbsp;&raquo; nouvelle du jour ?</p>
<h3>Présentation de colorblind-applet</h3>
<p>Mais alors, que vient faire <em>colorblind-applet</em> dans tout ça ?<br />
Cet applet pour <a href="http://gnome.org">Gnome</a> est un &laquo;&nbsp;simple&nbsp;&raquo; filtre de visualisation. En clair, il altère la colorimétrie de votre écran pour l&#8217;afficher comme si vous étiez daltonien.<br />
Jusqu&#8217;à présent j&#8217;utilisais <a href="http://colororacle.cartography.ch/">Color Oracle</a> puisque <a title="présentation de Color Oracle sur Ergophile" href="http://www.ergophile.com/2008/02/13/le-daltonisme-vu-par-color-oracle/">présenté avec conviction sur Ergophile</a>.</p>
<p><em>colorblind-applet</em> me convient toutefois davantage pour les raisons suivantes :</p>
<ul>
<li>il peut se piloter entièrement via des <strong>raccourcis clavier</strong> (activation, désactivation, navigation entre les filtres)</li>
<li>son <strong>utilisation est persistante</strong> : il reste actif tant qu&#8217;on ne le désactive pas (Color Oracle enlève le filtre au moindre clic de mémoire)</li>
<li>il demande <strong>peu de ressources machine</strong>, intégration directe dans Gnome oblige (Color Oracle est en Java)</li>
</ul>
<p>En clair je résumerais comme suit :</p>
<ul>
<li>vous êtes sous Linux et plus particulièrement dans un bureau à base de GTK ? Utilisez <em>colorblind-applet</em></li>
<li>dans les autres cas, utilisez <em>Color Oracle</em> (compatible Linux, MacOS X et Windows)</li>
</ul>
<div id="attachment_1055" class="wp-caption aligncenter" style="width: 508px"><img class="size-full wp-image-1055" title="Colorblind-applet : contrôles" src="http://case.oncle-tom.net/images/2008/08/colorblind-applet-controls.png" alt="Colorblind-applet : contrôles" width="498" height="437" /><p class="wp-caption-text">Colorblind-applet : contrôles</p></div>
<h3>colorblind-applet en action</h3>
<p>Puisqu&#8217;une image vaut davantage qu&#8217;un long discours (trop tard me direz-vous <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ), voici une série d&#8217;images présentant mon bureau de travail ainsi qu&#8217;un navigateur Web ouvert sur la page de <a href="http://planete-accessibilite.com/">Planète Accessibilité</a>.</p>
<div id="attachment_1058" class="wp-caption aligncenter" style="width: 310px"><a href="http://case.oncle-tom.net/images/2008/08/original.jpg"><img class="size-medium wp-image-1058" title="Capture d'écran d'origine" src="http://case.oncle-tom.net/images/2008/08/original-300x187.jpg" alt="Capture d'écran d'origine" width="300" height="187" /></a><p class="wp-caption-text">Capture d&#39;écran d&#39;origine</p></div>
<div id="attachment_1059" class="wp-caption aligncenter" style="width: 310px"><a href="http://case.oncle-tom.net/images/2008/08/selective-green-desaturation.jpg"><img class="size-medium wp-image-1059" title="Filtre réglé sur &quot;Selective Green Desaturation&quot;" src="http://case.oncle-tom.net/images/2008/08/selective-green-desaturation-300x187.jpg" alt="Filtre réglé sur &quot;Selective Green Desaturation&quot;" width="300" height="187" /></a><p class="wp-caption-text">Filtre réglé sur &quot;Selective Green Desaturation&quot;</p></div>
<div id="attachment_1057" class="wp-caption aligncenter" style="width: 310px"><a href="http://case.oncle-tom.net/images/2008/08/negative-hue-shift.jpg"><img class="size-medium wp-image-1057" title="Filtre réglé sur &quot;Negative Hue Shift&quot;" src="http://case.oncle-tom.net/images/2008/08/negative-hue-shift-300x187.jpg" alt="Filtre réglé sur &quot;Negative Hue Shift&quot;" width="300" height="187" /></a><p class="wp-caption-text">Filtre réglé sur &quot;Negative Hue Shift&quot;</p></div>
<p><strong> Plusieurs choses à noter</strong> :</p>
<ul>
<li>les teintes blanches sont épargnées</li>
<li>les autres couleurs changent en revanche du tout au tout en fonction du type de daltonisme</li>
<li>jouer sur les couleurs n&#8217;est pas suffisant pour faire passer un message aux utilisateurs</li>
<li>ça ne doit pas être évident de parcourir le Web et ses multiples couleurs tous les jours : la désaturation de vert pique particulièrement les yeux</li>
<li>et par extension, il me paraît très difficile de produire une charte graphique convenant à tous les types de daltonisme</li>
</ul>
<p>Je serais curieux d&#8217;avoir des retours de personnes ayant déjà eu à travailler avec cette déficience, les bonnes pratiques de conception et tout autre conseil avisé.</p>
	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2008/modifier-emplacement-donnees-serveur-mysql/" title="Modifier l&#8217;emplacement des données d&#8217;un serveur MySQL (4 mai 2008)">Modifier l&#8217;emplacement des données d&#8217;un serveur MySQL</a> (36 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/configuration-apache-mysql-php-symlinks/" title="Configuration d&#8217;Apache, MySQL et PHP à base de liens symboliques (11 décembre 2008)">Configuration d&#8217;Apache, MySQL et PHP à base de liens symboliques</a> (12 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/bon-client-ftp-gnome-filezilla/" title="Un bon client FTP pour Gnome : Filezilla (1 mai 2007)">Un bon client FTP pour Gnome : Filezilla</a> (4 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/ubuntu-feisty-fawn-configurer-effets-graphiques/" title="Ubuntu 7.04 : configurer les effets graphiques (20 avril 2007)">Ubuntu 7.04 : configurer les effets graphiques</a> (4 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/renouveau-reverse-engineer-nouveau/" title="REnouveau : Reverse Engineer nouveau (9 mars 2007)">REnouveau : Reverse Engineer nouveau</a> (6 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/colorblind-applet-des-filtres-pour-daltonien-sous-linux/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Menu déroulant en rollover semi-accessible avec jQuery</title>
		<link>http://case.oncle-tom.net/2008/menu-deroulant-accessible-en-rollover-avec-jquery/</link>
		<comments>http://case.oncle-tom.net/2008/menu-deroulant-accessible-en-rollover-avec-jquery/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 05:00:50 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Logiciels libres]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[bonne pratique]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[rollover]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/?p=919</guid>
		<description><![CDATA[Joie : je fais maintenant partie de Planète Accessibilité en plus de Planet Libre. C&#8217;est l&#8217;occasion pour ce premier article dédié d&#8217;allier à la fois logiciels libres et accessibilité pour le plus grand bien du Web Le but de cette explication sera de développer la méthode et le raisonnement pour mettre en place un menu [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img class="aligncenter size-full wp-image-834" title="Logo jQuery" src="http://case.oncle-tom.net/images/2007/12/jquery-logo.png" alt="Logo jQuery" width="117" height="32" /></p>
<p>Joie : je fais maintenant partie de <a href="http://planete-accessibilite.com/">Planète Accessibilité</a> en plus de <a href="http://www.planet-libre.org/">Planet Libre</a>. C&#8217;est l&#8217;occasion pour ce premier article dédié d&#8217;allier à la fois logiciels libres et accessibilité pour le plus grand bien du Web <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Le but de cette explication sera de <strong>développer la méthode et le raisonnement</strong> pour mettre en place un menu en rollover accessible. La difficulté tient essentiellement au fait que tout élément masqué par le biais des <acronym title="Cascading Style Sheets">CSS</acronym> est masqué pour de nombreux clients Web.</p>
<p>Nous verrons aussi pourquoi il est <strong>important de dissocier la présentation et les artifices graphiques</strong> grâce à une dégradation propre du JavaScript. Nous utiliserons pour cela <a href="http://jquery.com">jQuery</a>, <a href="http://case.oncle-tom.net/tag/jquery/">ma librairie JavaScript favorite</a>.<br />
<span id="more-919"></span></p>
<h3>Buts et objectifs de l&#8217;exercice</h3>
<p>J&#8217;ai eu besoin d&#8217;appliquer cette technique sur le site <a href="http://www.emunova.net">Emu Nova</a>. Je souhaitais plusieurs choses :</p>
<ul>
<li>disposer d&#8217;un menu en rollover en haut de page (facilite la navigation sur toutes les pages)</li>
<li>placer le contenu avant les menus dans le flux <acronym title="HyperText Markup Language">HTML</acronym> de la page (améliore le référencement)</li>
<li>une navigation possible sans JavaScript (pour cause de bug ou autre)</li>
</ul>
<p>Autrement dis, j&#8217;ai besoin d&#8217;un <strong>contenu en fin de flux mais visible avant tout le reste</strong>. J&#8217;ai opté pour la solution JavaScript pour éviter un positionnement absolu pénible à gérer (pour cause de conteneur centré) mais aussi pour respecter le <a href="http://code.google.com/p/blueprintcss/">colonnage de Blueprint</a> (puis toutes façons j&#8217;ai raison <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> )</p>
<p>En une image, cela se résume ainsi :</p>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/06/emunova-menu-accessible.png"><img class="aligncenter size-medium wp-image-920" title="Tentative de menu accessible" src="http://case.oncle-tom.net/images/2008/06/emunova-menu-accessible-150x300.png" alt="Tentative de menu accessible" width="150" height="300" /></a></p>
<p>Nous allons aborder les 3 phases de ce tracé de flèche :</p>
<ol>
<li>la construction du menu (la zone verte)</li>
<li>le déplacement du contenu (la flèche)</li>
<li>la construction de notre nouveau menu (la zone bleue)</li>
</ol>
<h3>Étape 1 : construire le menu en <acronym title="HyperText Markup Language">HTML</acronym></h3>
<p>C&#8217;est l&#8217;étape essentielle. De sa structure dépend le reste de l&#8217;application. On doit <strong>d&#8217;abord penser à présenter le contenu de manière dégradée</strong>. C&#8217;est ainsi que le verront les utilisateur et c&#8217;est important de penser d&#8217;abord au pire des cas avant de mettre en place les paillettes et les artifices.</p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-921" title="Menu accessible (Étape 1)" src="http://case.oncle-tom.net/images/2008/06/menu-accessible-etape-1.png" alt="Menu accessible (Étape 1)" width="427" height="178" /></p>
<p>Cette structure est représentée ainsi en <acronym title="HyperText Markup Language">HTML</acronym> :</p>
<pre><code class="html">&lt;div id="contenu-secondaire"&gt;
  &lt;ul id="navigation"&gt;
    &lt;li class="first column span-6"&gt;
      &lt;h2&gt;Actualités&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="..."&gt;Actualités&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Newsletter&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Flux <acronym title="Really Simple Syndication">RSS</acronym>&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Twitter&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Réactions à chaud&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li class="column span-6"&gt;
      &lt;h2&gt;Émulation&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="..."&gt;Émulation&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Tutoriaux&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Foire aux Questions&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</code></pre>
<p>Cette version est volontairement tronquée pour faciliter sa lecture.<br />
L&#8217;idée générale de tout ça c&#8217;est de transporter directement la liste <code>#navigation</code> en dehors de son conteneur, <code>#extra-content</code>. C&#8217;est en effet plus rapide et plus performant de transporter une partie du <acronym title="Document Object Model">DOM</acronym> dans un autre endroit que de la recréer séquentiellement.</p>
<p>Ça aura également l&#8217;avantage de limiter au maximum le travail à effectuer en JavaScript par derrière. On notera que jusqu&#8217;à présent, on n&#8217;a pas encore touché à jQuery.</p>
<p>Avec cette structure, on peut dores et déjà deviner que les &lt;ul&gt; de second niveau seront masqués et affichés à la demande.</p>
<h3>Étape 2 : préparer le menu <acronym title="HyperText Markup Language">HTML</acronym></h3>
<p>La deuxième reste assez simple : on transporte <code>#navigation</code> dans son nouveau conteneur (déjà existant) : <code>#welcome-bar.</code></p>
<p>Pour éviter tout aléas graphique, l&#8217;idéal est de masquer tout ce qu&#8217;on ne veut pas voir maintenant. Nous rentrons maintenant dans la partie pure JavaScript.</p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-922" title="Menu accessible (Étape 2)" src="http://case.oncle-tom.net/images/2008/06/menu-accessible-etape-2.png" alt="Menu accessible (Étape 2)" width="304" height="72" /></p>
<p>Pour atteindre ce résultat, on pourrait envisager le code suivant :</p>
<pre><code class="javascript">(function($){
  $(function(){
    /*
     * Étape 2 : préparation du menu
     */
    $('#navigation &gt; li &gt; ul').hide();
    $('#navigation').appendTo('#welcome-bar');
  });
})(jQuery);</code></pre>
<p>En soi, ce n&#8217;est pas excessif du tout :</p>
<ol>
<li>on masque tous les sous-menus</li>
<li>on transporte le contenu de #navigation dans #welcome-bar</li>
</ol>
<p>Tout le travail se situait dans la réflexion il faut croire <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Étape 3 : assigner les évènements</h3>
<p>Maintenant le plus dur c&#8217;est de donner vie à tout ça. C&#8217;est bien beau d&#8217;avoir des menus mais encore faut-il les animer. Là encore nous avons plusieurs contraintes à subir :</p>
<ul>
<li>les <strong>titres doivent être cliquables</strong>. Certaines personnes cliqueront en effet avant de réaliser qu&#8217;il y a un menu déroulant. Par principe, on prendre le premier lien de la liste et on l&#8217;assignera au titre correspondant ;</li>
<li>le <strong>menu doit se dérouler lors du survol du titre</strong> &#8230;</li>
<li>mais il ne doit pas se masquer tant qu&#8217;on n&#8217;a pas quitté le titre NI la liste déroulante</li>
</ul>
<p>La difficulté tient à ces 2 dernières contraintes. On pourrait tout d&#8217;abord penser à l&#8217;utilisation des évènements <code>mouseover</code> et <code>mouseout</code> MAIS, parce qu&#8217;il y a bien un mais, <code>mouseout</code> est un peu capricieux.</p>
<p>Si on imagine un <code>mouseover</code> directement sur <code>li.column</code>, le problème c&#8217;est que survoler un élément comme <em>Actualités</em> ou <em>Newsletter</em> activera le <code>mouseover</code> de ces derniers &#8230; et désactivera, un temps minime certes, le survol de <code>li.column</code>. Autrement dit le menu se repliera alors qu&#8217;on tentera de l&#8217;utiliser.</p>
<p>Heureusement pour nous, jQuery a introduit les évènements <code>mouseenter</code> et <code>mouseleave</code> (présents dans Internet Explorer depuis des lustres, c&#8217;est bien le seul avantage de cette atrocité) depuis la <a title="Notes de version de jQuery 1.2.2" href="http://docs.jquery.com/Release:jQuery_1.2">version 1.2.2</a>. Ces évènements correspondent exactement à ce que l&#8217;on souhaite : maintenir une zone survolée malgré le survol de ses enfants.<br />
Tout est histoire de couches <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-923" title="Menu accessible (Étape 3)" src="http://case.oncle-tom.net/images/2008/06/menu-accessible-etape-3.png" alt="Menu accessible (Étape 3)" width="301" height="180" /></p>
<p>Côté code, ça se complique :</p>
<pre><code class="javascript">(function($){
  $(function(){
    /*
     * Étape 3 : assignation des évènements et transformation
     */
    $('#navigation &gt; li')
      .each(function(){
        var title = $('h2:first', this);
        var href = $('a:first', this).clone();
        href.text(title.text()).wrapInner('&lt;span&gt;&lt;/span&gt;');
        title.html(href);
       })
      .find('h2 &gt; a').bind('mouseenter', function(){
        $(this).parents('li.column').find('&gt; ul').slideDown('fast');
      }).end()
      .bind('mouseleave', function(){
        $('&gt; ul', this).slideUp();
      });
  });
})(jQuery);</code></pre>
<p>Plusieurs remarques sur ce code :</p>
<ul>
<li>j&#8217;utilise les <strong>chaînes de jQuery</strong> pour gagner du temps et reparcourir des tableaux déjà connus (le sélecteur n&#8217;est pas réexécuté)</li>
<li>j&#8217;utilise également la <strong>méthode end()</strong> pour revenir au précédent état du sélecteur. Très pratique pour naviguer dans un jeu d&#8217;éléments et gagner en performances</li>
</ul>
<p>Et pour les explications :</p>
<ol>
<li>Pour chaque élément de liste
<ol>
<li>on met de côté le titre de la liste</li>
<li>on clone le premier élément du sous-menu</li>
<li>on modifie le libellé du lien du clone</li>
<li>on remplace le titre par le code <acronym title="HyperText Markup Language">HTML</acronym> du clone</li>
</ol>
</li>
<li>Pour ces liens hypertextes nouvellement créés (plus faciles à styler sans <acronym title="JavaScript">JS</acronym> au rollover), on leur demande de déplier le sous-menu voisin</li>
<li>Ce sous-menu ne sera replié que lorsqu&#8217;on quittera le li.column</li>
</ol>
<h3>Conclusion</h3>
<p>La <strong>mise en œuvre de ce menu est relativement aisée</strong> et surtout, suffisamment souple pour que vous puissiez l&#8217;adapter à vos besoins.<br />
Dans tous les cas on remarquera que les clés de la réussite sont :</p>
<ul>
<li>un <strong>code <acronym title="HyperText Markup Language">HTML</acronym> propre</strong> (facile les sélections <acronym title="JavaScript">JS</acronym> et le stylage <acronym title="Cascading Style Sheets">CSS</acronym>)</li>
<li>une évolution d&#8217;une <strong>base sans artifices vers une interface améliorée</strong> en JavaScript</li>
<li>un <strong>code simple</strong>, facilement maintenable et adaptable</li>
</ul>
<p>Ceci n&#8217;est qu&#8217;un exemple où le JavaScript peut servir à conserver des interfaces accessibles tout en augmentant leur utilisabilité. Qui a dit que le JavaScript c&#8217;était nul ?</p>
<p>Le seul reproche que l&#8217;on peut faire à ce menu accessible c&#8217;est le <em>manque de navigation au clavier</em>. L&#8217;idéal serait de pouvoir naviguer dans le choix des menus entièrement avec les flèches de son clavier.<br />
Rendez-vous dans un autre billet pour ce point ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>

	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2008/emu-nova-21-coulisses-dune-refonte-ergonomique-et-visuelle/" title="Emu Nova 2.1 : coulisses d&#8217;une refonte ergonomique et visuelle (22 avril 2008)">Emu Nova 2.1 : coulisses d&#8217;une refonte ergonomique et visuelle</a> (5 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/widget-jaiku-netvibes-presentation-bilan-developpement/" title="Widget Jaiku pour Netvibes : présentation et bilan du développement (20 août 2008)">Widget Jaiku pour Netvibes : présentation et bilan du développement</a> (5 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/critique-transcender-css-sublimez-design-web/" title="Transcender CSS : sublimez le design Web ! (11 décembre 2007)">Transcender CSS : sublimez le design Web !</a> (15 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/modifier-html-non-intrusif/" title="Modifier du HTML à la volée de manière non intrusive (10 septembre 2007)">Modifier du HTML à la volée de manière non intrusive</a> (1 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/microformats-comment-microformater-du-contenu-deja-existant/" title="Microformats : comment microformater du contenu déjà existant ? (3 avril 2008)">Microformats : comment microformater du contenu déjà existant ?</a> (2 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/menu-deroulant-accessible-en-rollover-avec-jquery/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Modifier du HTML à la volée de manière non intrusive</title>
		<link>http://case.oncle-tom.net/2007/modifier-html-non-intrusif/</link>
		<comments>http://case.oncle-tom.net/2007/modifier-html-non-intrusif/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 11:00:55 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/2007/09/10/modifier-html-non-intrusif/</guid>
		<description><![CDATA[Lors de la refonte de ce blog, j&#8217;ai concocté un petit script JavaScript (non intrusif bien entendu) affichant et modifiant le contenu d&#8217;un bandeau sous la forme d&#8217;une classe statique reponsant sur jQuery. J&#8217;explique aujourd&#8217;hui comment ces 48 petits lignes de code (en comptant commentaires, sauts de lignes et accolades) fonctionnent, comment il est aisé [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/09/javascript.png" alt="Javascript" /></p>
<p><a href="http://case.oncle-tom.net/2007/07/27/blog-nouveau-look/">Lors de la refonte de ce blog</a>, j&#8217;ai concocté un petit script JavaScript (non intrusif bien entendu) affichant et modifiant le contenu d&#8217;un bandeau sous la forme d&#8217;une classe statique reponsant sur <a href="http://jquery.com/">jQuery</a>. J&#8217;explique aujourd&#8217;hui comment ces 48 petits lignes de code (en comptant commentaires, sauts de lignes et accolades) fonctionnent, comment il est aisé de mettre en place de telles routines de manière intelligente, souple et non intrusive.</p>
<p>Et comme l&#8217;indique le slogan de <cite>jQuery</cite> : <q>Write less, do more</q>.<br />
<span id="more-769"></span></p>
<h3>Le besoin</h3>
<p>Avant de se lancer tête baissée dans le code, <strong>prenons le temps d&#8217;exprimer avec des mots ce que l&#8217;on aimerait faire</strong>.</p>
<p>On souhaite disposer d&#8217;une <strong>liste de liens</strong>. <strong>Lors d&#8217;un clic</strong> sur un lien de cette liste, l&#8217;<strong>encart correspondant doit s&#8217;afficher</strong> pour illustrer davantage son sens. Eventuellement, lorsque l&#8217;on <strong>reclique sur ce même lien</strong>, le visiteur est transporté sur la page en question.</p>
<p>J&#8217;ai grassé les mots importants de ce besoin. Vous le verrez par la suite, ils vont régir le comportement du script.</p>
<h3>La structure <acronym title="HyperText Markup Language">HTML</acronym></h3>
<p>Nous allons donc nous retrouver avec trois grosses parties dans le code :</p>
<ul>
<li><strong>la liste de liens</strong>, une balise <code>ul</code> semble toute indiquée)</li>
<li><strong>une liste de textes correspondants</strong>, il n&#8217;a pas lieu d&#8217;être visible pour l&#8217;utilisateur final concerné par le code</li>
<li>un <strong>bloc conteneur neutre</strong> destiné à recevoir les textes d&#8217;enrichissement de manière visuelle</li>
</ul>
<p>Des mots au code, voici ce que donnerait la structure balisée :</p>
<pre><code class="html">&lt;body&gt;
&lt;!-- (...) --&gt;

	&lt;div id="conteneur_cible"&gt;&lt;/div&gt;

	&lt;!-- (...) --&gt;

	&lt;ul id="liens_etendus"&gt;
		&lt;li&gt;&lt;a href="page1.html" class="page1"&gt;Page 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="page2.html" class="page2"&gt;Page 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="page3.html" class="page3"&gt;Page 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;!-- (...) --&gt;

	&lt;div id="conteneur_source"&gt;
		&lt;h2&gt;Titre&lt;/h2&gt;
		&lt;p&gt;Texte explicatif apportant de la cohérence aux utilisateurs dépourvus de JavaScript et d'interprétation des feuilles de style.&lt;/p&gt;

		&lt;ul&gt;
			&lt;li class="page1"&gt;Texte page 1&lt;/li&gt;
			&lt;li class="page2"&gt;Texte page 2&lt;/li&gt;
			&lt;li class="page3"&gt;Texte page 3&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/div&gt;

&lt;!-- (...) --&gt;
&lt;/body&gt;
</code></pre>
<p><strong>L&#8217;ordre de la structure importe peu</strong> mais dans tous les cas, leur position dans le flux <acronym title="HyperText Markup Language">HTML</acronym> dépend avant tout de leur importance au sein de celui-ci. De manière générale, <strong>il vaut mieux disposer le contenu principal tout en haut du flux et le faire suivre par le contenu secondaire</strong> tels que les menus de navigation et les textes supplémentaires.<br />
Je pense que le code parle de lui-même, posez vos questions en commentaires si jamais il y a besoin d&#8217;explications plus poussées.</p>
<p>Côté <acronym title="HyperText Markup Language">HTML</acronym> tout est réglé avec ceci. <strong>Il ne restera éventuellement que du travail de stylage pour lui donner une apparence plus conviviale</strong>.<br />
Vous remarquerez qu&#8217;il n&#8217;y a aucune mention à du JavaScript à l&#8217;intérieur de ce code et ce sera le cas jusqu&#8217;au bout. C&#8217;est tout l&#8217;intérêt de séparer fond et forme et donc, du <strong>JavaScript non intrusif</strong>.</p>
<h3>Le code Javascript</h3>
<p>J&#8217;ai pris la décision d&#8217;écrire ce code pour <em>jQuery</em> car cette bibliothèque (ou <em>framework</em>) est embarquée dans WordPress et réduit drastiquement la quantité de code à écrire pour produire des résultats.</p>
<p>Dans la pratique, le code va se charger dès que possible (c&#8217;est à dire dès que le <acronym title="Document Object Model"><acronym title="Document Object Model">DOM</acronym></acronym> est prêt) et exécutera une méthode en se servant des paramètres prédéfinis ou passés manuellement à la classe. Le code suivant est structuré et suffisamment commenté pour le comprendre sans trop de difficulté. J&#8217;expliquerai en-dessous sa logique :</p>
<pre><code class="javascript">/*////////////////////////////////////////
// Classe statique 'oncletom_text_grabber'
// # Permet d'afficher un slide d'informations en cliquant sur un lien
// # C'est rigolo et en plus ça sert à quelque chose
// @ parametres (objet, optionnel) : objet de clé:valeur paramétrant le comportement
////////////////////////////////////////*/
function oncletom_text_grabber()
{
	var parametres = arguments.length == 1 &amp;&amp; typeof arguments[0] == 'object' ? arguments[0] : {};

	//Paramétrage de la fonction
	//# permet un lancement de la classe avec un paramétrage par défaut
	parametres.source = typeof parametres.source == 'undefined' ? '#conteneur_source &gt; ul &gt; li' : parametres.source;
	parametres.bindto = typeof parametres.bindto == 'undefined' ? '#liens_etendus a' : parametres.bindto;
	parametres.target = typeof parametres.target == 'undefined' ? '#conteneur_cible' : parametres.target;

	/*////////////////////////////////////////
	// Méthode publique 'ot_text_caller'
	// # Récupère le contenu associé à l'attribut 'rel'
	// # Méthode à appeler sur un évènement
	////////////////////////////////////////*/
	function ot_text_caller()
	{
		//sélection de l'élément à récupérer
		var id = $(this).attr('class');

		//hop ! on vérifie c'est déjà ouvert. Auquel cas le lien redevient cliquable
		if( $( parametres.target ).attr('class') == id )
		{
			return true;
		}

		//on nettoie le contenu de la destination
		$( parametres.target ).empty();
		$( parametres.target ).attr({ 'class' : '' });

		//on remplit la destination avec le bon contenu
		//on le fait en utilisant une expression régulières pour récupérer l'élément voulu
		$( parametres.target ).fadeIn( 'slow' ).append(  $( parametres.source+"."+id ).html() ).toggleClass( id );

		//évite que le lien soit cliqué
		return false;
	}

	//On greffe les différentes méthodes
	$( parametres.bindto ).click( ot_text_caller );
}

//exécution automatique de fonctions au lancement du document
$( oncletom_text_grabber );

//FACULTATIF
//pour assigner une deuxième liste de liens, il suffirait d'écrire le code ci-contre, par exemple :
//tous les paramètres non renseignés prennent la valeur par défaut de la classe
$( function(){ oncletom_text_grabber({ 'target' : '#nouveau_conteneur_cible', 'bindto' : '#exemple_entete ol a[@rel]', 'source' : '#liste_source2' }); } );
</code></pre>
<ol>
<li>Dans un premier temps, je m&#8217;applique toujours à pouvoir <strong>proposer une utilisation de la classe sans avoir à fournir de paramètre lors de son appel</strong>. C&#8217;est un côté pratique qui permet en plus de documenter les différentes options possibles. Ces options correspondent aux différents <a href="http://docs.jquery.com/DOM/Traversing/Selectors">sélecteurs jQuery</a> dont on aura besoin par la suite ;</li>
<li>Dans un deuxième temps, je déclare une méthode interne à la classe. <em>La cascade des accolades</em> fait qu&#8217;elle n&#8217;est accessible que depuis la classe. Cette méthode sera assignée à l&#8217;évènement <code>onclick</code> de tous les éléments concernés par <code>parametre.bindto</code>. En clair, des liens hypertextes. Le <code>this</code> y fait référence.
<ol>
<li>On stocke dans la variable interne <code>id</code> le nom de la classe. En effet, la classe du lien permet de récupérer le bon texte dans el conteneur source (<code>parametre.source</code>),</li>
<li>On vérifie que le conteneur cible ne porte pas le même nom de classe : si oui, on suit le lien, si non, on affiche d&#8217;abord le texte complémentaire (la suite),</li>
<li>Le passage le plus délicat consiste à extraire ce qu&#8217;il faut et le placer où il faut. Heureusement jQuery dispose de deux fonctions magiques : <code>append()</code> et <code>html()</code>. La première rajoute du <acronym title="HyperText Markup Language">HTML</acronym> à la suite du sélecteur tandis que la deuxième extrait le <acronym title="HyperText Markup Language">HTML</acronym> par sélection. Le fonctionnement en chaîne de jQuery permet de réaliser tout ceci en une ligne,</li>
<li>Pourquoi un <code>return false;</code> pour terminer ? Tout simplement pour éviter que le lien hypertexte contenu dans l&#8217;attribut <code>href</code> du lien soit suivi.</li>
</ol>
</li>
<li>Dans un troisième temps, on assigne la méthode déclarée juste avant. A chaque clic de chaque élément, elle sera appelée et surtout, aura accès à tous les paramètres de la classe ;</li>
<li>Enfin, après avoir clôturé la classe, on l&#8217;exécute dès que le <acronym title="Document Object Model">DOM</acronym> est chargé.</li>
</ol>
<h3>Conclusion et résultat</h3>
<p>Pour que ce code soit effectif, il faut bien évidemment l&#8217;insérer à même la page ou bien en appelant un script externe (cette méthode est recommandée justement pour dissocier fond et forme). Il faut aussi penser à inclure jQuery dans votre page sans quoi le compilateur JavaScript va tirer la tête.</p>
<p>Pour résumer, je résume la pensée des <strong>bonnes pratiques du JavaScript non intrusif</strong>, prouvant si besoin en était que JavaScript est loin d&#8217;être le Diable :</p>
<ol>
<li>définir sa structure <acronym title="HyperText Markup Language">HTML</acronym></li>
<li>styler le <acronym title="HyperText Markup Language">HTML</acronym></li>
<li>ajouter le JavaScript en surcouche</li>
</ol>
<p>Ainsi, <strong>on ne pénalise personne</strong> (y compris en cas d&#8217;erreur de programmation), <strong>on conserve un code lisible</strong> tout en <strong>facilitant sa réutilisation</strong> dans un autre document.</p>

	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2007/sites-web-les-bonnes-pratiques/" title="Sites Web : les bonnes pratiques (26 février 2007)">Sites Web : les bonnes pratiques</a> (12 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/microformats-republier-donner-sens-aux-contenus/" title="Microformats : republier et donner du sens aux contenus (29 janvier 2008)">Microformats : republier et donner du sens aux contenus</a> (8 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/jquery-optimisation-selecteurs-css/" title="jQuery : optimiser l&#8217;utilisation des sélecteurs CSS (18 décembre 2007)">jQuery : optimiser l&#8217;utilisation des sélecteurs CSS</a> (5 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/" title="Conventions de programmation : la nécessaire maturité (23 juillet 2008)">Conventions de programmation : la nécessaire maturité</a> (19 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/critique-transcender-css-sublimez-design-web/" title="Transcender CSS : sublimez le design Web ! (11 décembre 2007)">Transcender CSS : sublimez le design Web !</a> (15 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/modifier-html-non-intrusif/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tableau auto-extensible en JavaScript</title>
		<link>http://case.oncle-tom.net/2007/tableau-auto-extensible-en-javascript/</link>
		<comments>http://case.oncle-tom.net/2007/tableau-auto-extensible-en-javascript/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 11:59:32 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[bonne pratique]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/2007/06/26/tableau-auto-extensible-en-javascript/</guid>
		<description><![CDATA[Bon nombre de clients utilisant les sites Internet de mon employeur passent des commandes en saisissant directement les codes articles de leur choix. Ce n&#8217;est pas anodin : pour du réassort de magasin, ils savent exactement ce qu&#8217;ils veulent. Et un beau jour on vient me voir en me disant qu&#8217;ils ne peuvent saisir qu&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<p>Bon nombre de clients utilisant les sites Internet de mon employeur passent des commandes en saisissant directement les codes articles de leur choix. Ce n&#8217;est pas anodin : pour du réassort de magasin, ils savent exactement ce qu&#8217;ils veulent. Et un beau jour on vient me voir en me disant qu&#8217;<cite>ils ne peuvent saisir qu&#8217;un code et une seule quantité à la fois</cite>, qu&#8217;il faudrait changer ça.</p>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/06/articles-autoexpand-mini.png" alt="Ligne article" /></p>
<p>Voici donc mon constat de départ :</p>
<ul>
<li>un client doit pouvoir saisir <em>un seul article</em> s&#8217;il le veut</li>
<li>un client doit pouvoir saisir <em>10 articles</em> s&#8217;il le veut</li>
<li>un client doit pouvoir saisir <em>100 articles</em> s&#8217;il le veut</li>
<li>mais <strong>celui qui n&#8217;en saisit que 10 ne doit pas être gêné par 100 lignes de formulaire à remplir</strong></li>
<li>un <em>débutant</em> doit pouvoir saisir 100 lignes sans avoir de mode d&#8217;emploi sous la main</li>
</ul>
<p>Donc ma solution a été très simple : <strong>je ne mettrai qu&#8217;une ligne</strong>.<br />
<span id="more-680"></span></p>
<h3>L&#8217;idée</h3>
<p>Comment faire pour satisfaire tout le monde, les gros donneurs d&#8217;ordre comme les petits ?<br />
<strong>En faisant en sorte que le formulaire s&#8217;adapte à leur besoin.</strong> Je voulais donc qu&#8217;à chaque ligne complétée s&#8217;en ajoute une autre avant de passer à la validation finale. Place au combo <strong>JavaScript + <acronym title="Document Object Model">DOM</acronym> = Ajax</strong>.</p>
<h3>La version dégradée</h3>
<p>Une <em>bonne pratique de l&#8217;Ajax</em> est de partir du cas particulier : celui où les conditions ne sont pas requises. En clair, une personne qui n&#8217;a pas JavaScript d&#8217;activé ou pas de JavaScript tout court.<br />
Conclusion, j&#8217;ai décidé de générer un tableau en <acronym title="HyperText Markup Language">HTML</acronym> de 10 lignes. 10 est un choix arbitraire, modifiable à tout moment et qui ne doit donc pas gêner la version dynamique en cas de changement (ajout de colonne, ajout de lignes).</p>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/06/articles-autoexpand.png" alt="Tableau auto-extansible dégradé" /></p>
<h3>La version Ajax</h3>
<p>On peut manipuler le document à loisir grâce à JavaScript. <strong>Avec un code propre et ordonné c&#8217;est d&#8217;autant plus simple</strong>. Alors voici la logique à mettre en oeuvre :</p>
<ol>
<li>éliminer toutes les lignes dont on ne veut pas et n&#8217;en garder qu&#8217;une</li>
<li>assigner à chaque champ de formulaire de la ligne (<code>input</code>, <code>select</code>, <code>textarea</code>) une fonction de vérification : si tous les éléments de la ligne sont remplis / cochés et qu&#8217;il n&#8217;y a pas de ligne après, on clonera la ligne</li>
<li>cloner la ligne en la vidant de ses valeurs, en modifiant les noms de champ pour les rendre exploitable après coup</li>
</ol>
<p><strong><br />
Ce qu&#8217;on l&#8217;on veut étant relativement simple, <em>le code doit l&#8217;être également</em></strong> ! Le résultat aussi, la preuve en mouvement.</p>
<div style="text-align:center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="372" height="188" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://case.oncle-tom.net/images/2007/06/articles-autoexpand.swf" /><embed type="application/x-shockwave-flash" width="372" height="188" src="http://case.oncle-tom.net/images/2007/06/articles-autoexpand.swf"></embed></object></div>
<p>Au final, <strong>50 lignes de JavaScript ont suffit</strong> à transformer un tableau complètement statique en tableau dynamique, s&#8217;adaptant à la demande de n&#8217;importe quel client. Client qui pourra également utiliser le clavier pour davantage d&#8217;efficacité de saisie.</p>
<p>C&#8217;est à dire <strong>exactement ce que l&#8217;on souhaitait au départ</strong>.</p>
<h3>Le code</h3>
<h4>Le tableau <acronym title="HyperText Markup Language">HTML</acronym></h4>
<pre><code class="html">&lt;table cellspacing="0" id="ajout_multi_articles"&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Code article&lt;/th&gt;
      &lt;th&gt;Quantité&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[1][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[1][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[2][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[2][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[3][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[3][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[4][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[4][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[5][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[5][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[6][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[6][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[7][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[7][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[8][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[8][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[9][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[9][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr class="article"&gt;
      &lt;th&gt;&lt;input type="text" name="article[10][ref]" maxlength="10" /&gt;&lt;/th&gt;
      &lt;td&gt;&lt;input type="text" name="article[10][qte]" maxlength="5" size="5" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</code></pre>
<h4>La fonction JavaScript</h4>
<pre><code class="javascript">/**
 * Transforme un tableau multi-lignes en un tableau mono-ligne mais auto-extensible
 * Renomme également les noms de champ en suivant un masque paramétrable ; par défaut article[]
 *
 * @usage articlesMultiRows([{'css_id': ?, 'css_row_class': ?, 'check_inputs': ?}])
 * @param {Object} params Objet contenant (ou pas) les paramètres de contrôle de la classe
 */
function articlesMultiRows(params)
{
  this.row_number = 0;

  /*
   * Extension des paramètres par défaut
   */
  var params = params || {};
  params.css_id = params.css_id || 'ajout_multi_articles';
  params.css_row_class = params.css_row_class || 'article';
  params.check_inputs = params.check_inputs || 'input,select,textarea';

  /**
   * Initialise le tableau de données et accroche les méthodes dynamiques
   */
  this.init = function(){
    //aucun ID détecté, pas la peine de continuer plus loin
    if (!$(params.css_id))
    {
      return false;
    }

    //on récupère les lignes, on enlève la première du tableau et on supprime les autres
    var rows = $(params.css_id).getElements('tr.'+params.css_row_class);
    var row_first = rows.shift();
    rows.removeElements();
    rows = null;

    /*
     * On assigne l'évènement aux champs paramétrés de la ligne
     * On place le focus sur le premier champ
     */
    $ES(params.check_inputs, row_first).addEvent('blur', rowCheck);
    $(row_first).getElement('input').focus();
    row_number = 1;

    /*
     * On écrit un petit message sympathique indiquant le fonctionnement du bazar
     * On le fait via JavaScript car un utilisateur sans <acronym title="JavaScript">JS</acronym> ne pourrait justement pas suivre les infos
     * Il est placé juste avant le tableau
     */
    new Element('p',{
          'class' : 'message'
          }).setHTML("Dès qu'un code article et une quantité sont saisis ci-dessous, &lt;strong&gt;une nouvelle ligne s'ajoute automatiquement&lt;/strong&gt;.&lt;br /&gt;Afin d'accélérer votre saisie, &lt;em&gt;utilisez la touche de tabulation de votre clavier&lt;/em&gt; pour passer d'un champ à l'autre. Vous verrez, c'est facile et surtout efficace !").injectBefore(params.css_id);
  };

  /**
   * Vérifie si la ligne a entièrement été complétée et le cas échéant, déclenche l'ajout de ligne
   */
  this.rowCheck = function(){
    var row = { 'inputs' : 0, 'completed' : 0, 'dom' : $(this).getParent().getParent() };

    $ES(params.check_inputs, row.dom).each(function(input){
      //Un élément de plus ...
      ++row.inputs;

      //... dont on vérifie s'il est bien complété
      switch (input.getTag())
      {
        case 'input':
        case 'textarea':
          if (input.value.clean())
          {
            ++row.completed;
          }
        break;

        case 'select':
          if (input.selectedIndex &gt;= 0 &amp;&amp; input.selectedIndex &lt; input.length)
          {
            ++row.completed;
          }
        break;
      }
    });

    /*
     * Pour insérer une nouvelle ligne, on doit avoir :
     * - autant de champs complétés que de champs existants
     * - aucun élément suivant
     */
    if (row.inputs === row.completed &amp;&amp; !row.dom.getNext())
    {
      rowInsert(row.dom);
    }
  };

  /**
   * Insère une nouvelle ligne en clonant la dernière du tableau et la purgeant de ses valeurs
   *
   * @param {Object} row Noeud <acronym title="Document Object Model">DOM</acronym> correspondant à la ligne à cloner
   */
  this.rowInsert = function( row ){
    //On incrémente le nombre de lignes dispo
    //Ce numéro sert à changer les masques de nom de champ
    ++row_number;
    var row_clone = row.clone();

    //Clonage de la ligne
    $ES('input[type=text],input[type=password],input[type=hidden],textarea', row_clone).setProperty('value', '');
    $ES(params.check_inputs, row_clone).removeEvents('blur'); /* obligé car <acronym title="Internet Explorer 5">IE5</acronym>+ clone aussi les évènements ... alors qu'il ne le devrait pas */
    $ES(params.check_inputs, row_clone).addEvent('blur', rowCheck); /* oui oui, <acronym title="Internet Explorer 5">IE5</acronym>+ ne rassignait pas cet évènement comme il fallait malgré ça */
    //On remplace les noms des champs pour que permettre une utilisation des résultats $_POST
    $ES(params.check_inputs, row_clone).each(function(input){
      input.name = input.name.replace(new RegExp('^'+params.css_row_class+'\[[0-9]+\]'), params.css_row_class+'['+row_number+']');
    });

    //Injection de la ligne, une fois tout le travail terminé
    row_clone.injectAfter(row);

    //Nettoyage, le clonage, ça salit
    row_clone = null;
    row = null;
  };

  /*
   * Initialisation de la classe
   */
  this.init();
}

/*
 * Initialisation du tableau multi-lignes avec les options par défaut
 */
window.addEvent('domready', articlesMultiRows);</code></pre>

	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/" title="Conventions de programmation : la nécessaire maturité (23 juillet 2008)">Conventions de programmation : la nécessaire maturité</a> (19 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/wordpress-svn-external/" title="WordPress en tant que dépendance SVN (23 décembre 2008)">WordPress en tant que dépendance SVN</a> (7 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/modifier-html-non-intrusif/" title="Modifier du HTML à la volée de manière non intrusive (10 septembre 2007)">Modifier du HTML à la volée de manière non intrusive</a> (1 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2009/ajouter-tinymce-plugin-wordpress/" title="Ajouter TinyMCE dans un plugin WordPress (3 février 2009)">Ajouter TinyMCE dans un plugin WordPress</a> (13 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/widget-jaiku-netvibes-presentation-bilan-developpement/" title="Widget Jaiku pour Netvibes : présentation et bilan du développement (20 août 2008)">Widget Jaiku pour Netvibes : présentation et bilan du développement</a> (5 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/tableau-auto-extensible-en-javascript/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Sites Web : les bonnes pratiques</title>
		<link>http://case.oncle-tom.net/2007/sites-web-les-bonnes-pratiques/</link>
		<comments>http://case.oncle-tom.net/2007/sites-web-les-bonnes-pratiques/#comments</comments>
		<pubDate>Mon, 26 Feb 2007 19:37:35 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[livres]]></category>
		<category><![CDATA[opquast]]></category>
		<category><![CDATA[pro]]></category>
		<category><![CDATA[temesis]]></category>

		<guid isPermaLink="false">http://case.oncle-tom.net/2007/02/26/sites-web-les-bonnes-pratiques/</guid>
		<description><![CDATA[Lorsqu&#8217;on crée son premier site ou bien lorsqu&#8217;on navigue sur Internet, on est loin de se douter de l&#8217;étendue des conventions implicites qui facilitent la vie de tout le monde. Et pourtant, passé l&#8217;apprentissage de la soupe de balises HTML et éventuellement des feuilles de style, il y a tout un tas de règles à [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img id="image475" src="http://case.oncle-tom.net/images/2007/02/sites-web-bonnes-pratiques.jpg" alt="Sites Web : les bonnes pratiques" /></p>
<p>Lorsqu&#8217;on crée son premier site ou bien lorsqu&#8217;on navigue sur Internet, on est loin de se douter de l&#8217;étendue des conventions implicites qui facilitent la vie de tout le monde.<br />
Et pourtant, passé l&#8217;apprentissage de la soupe de balises <acronym title="HyperText Markup Language">HTML</acronym> et éventuellement des feuilles de style, il y a tout un tas de <em>règles à respecter</em> pour rendre la navigation aisée et non bloquante. Car oui, <strong>mal concevoir un site peut en bloquer</strong>, qu&#8217;il s&#8217;agisse de personnes atteintes de déficiences (physiques, mentales) ou pas.<br />
<span id="more-476"></span><br />
Pour se sensibiliser à ces bonnes pratiques de la conception des sites Web, il existe depuis peu le guide <a href="http://www.eyrolles.com/Informatique/Livre/9782212121018/livre-memento-sites-web-les-bonnes-pratiques.php">Sites Web : les bonnes pratiques</a> édité dans la collection <a href="http://www.eyrolles.com/Informatique/Collection/4143/memento.php">Memento</a> d&#8217;<a href="http://www.eyrolles.com/">Eyrolles</a>. Les habitués de l&#8217;initiative <a href="http://fr.opquast.com/">Opquast</a> ne seront pas dépaysés étant donné qu&#8217;il en reprend les quelques <strong>153 bonnes pratiques</strong>.</p>
<p>Mais au final, c&#8217;est quoi une <em>bonne pratique</em> ? Quelques règles que certains appliquent sans se rendre compte alors que d&#8217;autres sont au contraire bien loin de pouvoir ne serait-ce que les imaginer.</p>
<p>Exemples de bonnes pratiques simples que n&#8217;importe qui peut mettre en oeuvre :</p>
<ul>
<li><cite>Le nom du site et/ou le nom de l&#8217;auteur sont indiqués sur chaque page</cite> ;</li>
<li><cite>Le soulignement est réservé aux hyperliens</cite> ;</li>
<li><cite>Le site propose au moins un moyen de contacter l&#8217;auteur et/ou le webmestre</cite>.</li>
</ul>
<p>D&#8217;autres sont plus tordues au premier abord mais totalement justifiée, certaines abordant le délicat sujet de l&#8217;<a href="http://css.alsacreations.com/Accessibilite-du-Web/">accessibilité</a> :</p>
<ul>
<li><cite>Les hyperliens sont visuellement différenciés du reste du contenu</cite> ;</li>
<li><cite>L&#8217;emplacement du menu principal de navigation est identique sur toutes les pages</cite> ;</li>
<li><cite>La navigation reste possible sur l&#8217;ensemble du site en utilisant exclusivement le clavier</cite>.</li>
</ul>
<p>Comme vous pouvez le constater, ça n&#8217;a rien de bien sorcier. C&#8217;est un peu comme dire <cite>bonjour</cite> en se présentant à un inconnu : c&#8217;est le minimum à fournir pour établir une conversation. Lorsqu&#8217;on crée un site Web, c&#8217;est une conversation avec le monde que l&#8217;on établit <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>

	<h2>Articles relatifs</h2>
	<ul class="st-related-posts">
	<li><a href="http://case.oncle-tom.net/2007/modifier-html-non-intrusif/" title="Modifier du HTML à la volée de manière non intrusive (10 septembre 2007)">Modifier du HTML à la volée de manière non intrusive</a> (1 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/microformats-republier-donner-sens-aux-contenus/" title="Microformats : republier et donner du sens aux contenus (29 janvier 2008)">Microformats : republier et donner du sens aux contenus</a> (8 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/ecrit-web-traitement-information-sur-internet/" title="L&#8217;écrit Web : traitement de l&#8217;information sur Internet (8 janvier 2008)">L&#8217;écrit Web : traitement de l&#8217;information sur Internet</a> (5 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/" title="Conventions de programmation : la nécessaire maturité (23 juillet 2008)">Conventions de programmation : la nécessaire maturité</a> (19 commentaires)</li>
	<li><a href="http://case.oncle-tom.net/2007/critique-transcender-css-sublimez-design-web/" title="Transcender CSS : sublimez le design Web ! (11 décembre 2007)">Transcender CSS : sublimez le design Web !</a> (15 commentaires)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/sites-web-les-bonnes-pratiques/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
