<?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>dojotoolkit-fr.org &#187; Blog</title>
	<atom:link href="http://www.dojotoolkit-fr.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dojotoolkit-fr.org</link>
	<description>Great experiences for everyone</description>
	<lastBuildDate>Tue, 01 May 2012 06:47:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>HighCharts : Dojo Adapter</title>
		<link>http://www.dojotoolkit-fr.org/2012/04/highcharts-dojo-adapter/</link>
		<comments>http://www.dojotoolkit-fr.org/2012/04/highcharts-dojo-adapter/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 05:47:11 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<guid isPermaLink="false">http://www.dojotoolkit-fr.org/?p=5883</guid>
		<description><![CDATA[Pour ceux qui ne connaissent pas, Highcharts est une librairie très complète écrite en pure JavaScript et permettant de générer des graphiques. Elle offre un des graphs intuitifs et interactifs. Highcharts supporte de nombreux formats de graphs : line, spline, area, areaspline, column, bar, pie et scatter. &#8230; <a href="http://www.dojotoolkit-fr.org/2012/04/highcharts-dojo-adapter/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dojotoolkit-fr.org/wp-content/uploads/hc.jpg"><img class="size-medium wp-image-5888 alignleft" title="HighCharts" src="http://www.dojotoolkit-fr.org/wp-content/uploads/hc-300x290.jpg" alt="" width="300" height="290" /></a>Pour ceux qui ne connaissent pas, <a href="http://www.highcharts.com/" target="_blank">Highcharts</a> est une librairie très complète écrite en pure JavaScript et permettant de générer des graphiques.</p>
<p>Elle offre un des graphs intuitifs et interactifs.</p>
<p><a href="http://www.highcharts.com/" target="_blank">Highcharts</a> supporte de nombreux formats de graphs : line, spline, area, areaspline, column, bar, pie et scatter.</p>
<p>Cette librairie fonctionne nativement avec jQuery, mais est conçut pour s&#8217;interfacer avec d&#8217;autres libraires, en utilisant un Adapter.</p>
<p>Les releases actuelles (<a href="http://www.highcharts.com/download" target="_blank">Highcharts 2.2.1</a> / <a href="http://www.highcharts.com/download" target="_blank">Highstock 1.1.5</a>) sont livrées avec un adapter Mootools et Prototype mais rien pour Dojo&#8230;</p>
<p>Alors&#8230; Je m&#8217;en suis occupé.<br />
Et voici donc sans plus attendre, l&#8217;Adapter Dojo pour <a href="http://www.highcharts.com/" target="_blank">Highcharts</a> : <a href="http://www.dojotoolkit-fr.org/wp-content/uploads/dojo-adapter1.js">dojo-adapter.js</a></p>
<p>Et n&#8217;oubliez pas, <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=4RR68K6J9GBR8" target="_blank">si vous aimez, donnez</a> <img src='http://www.dojotoolkit-fr.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2012/04/highcharts-dojo-adapter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo version 1.6</title>
		<link>http://www.dojotoolkit-fr.org/2011/07/dojo-version-1-6/</link>
		<comments>http://www.dojotoolkit-fr.org/2011/07/dojo-version-1-6/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 14:28:24 +0000</pubDate>
		<dc:creator>blr</dc:creator>
				<category><![CDATA[1.6]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.dojotoolkit-fr.org/?p=5681</guid>
		<description><![CDATA[&#160; Depuis le début de l&#8217;année 2011, deux versions de DojoToolkit sont sorties : la version 1.6.0 et la version 1.6.1. &#160; Principales nouveautés et changements de la version 1.6.0 &#160; Navigateurs supportés Il n&#8217;y a pas de changement par rapport &#8230; <a href="http://www.dojotoolkit-fr.org/2011/07/dojo-version-1-6/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Depuis le début de l&#8217;année 2011, deux versions de DojoToolkit sont sorties : la version 1.6.0 et la version 1.6.1.</p>
<p>&nbsp;</p>
<h2>Principales nouveautés et changements de la version 1.6.0</h2>
<p>&nbsp;</p>
<p><span style="text-decoration: underline">Navigateurs supportés</span><em> </em></p>
<p>Il n&#8217;y a pas de changement par rapport à la version 1.5 excepté pour Chrome où 	l&#8217;on passe de la version 5 à la version 8 :</p>
<ul>
<li>Firefox 3.6</li>
</ul>
<ul>
<li>Safari 4/Safari 5 and Chrome 8</li>
</ul>
<ul>
<li>IE6, IE7, IE8</li>
</ul>
<ul>
<li>Opera 10.50 and later (Dojo core seulement)</li>
</ul>
<p>&nbsp;</p>
<p><em><span style="text-decoration: underline">AMD</span></em></p>
<p>Préparation au support de AMD( <a href="http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition"><span style="text-decoration: underline">Modules/AsynchronousDefinition</span></a>). Cette fonctionnalité sera effective dans la version 1.7.</p>
<p>&nbsp;</p>
<p><em><span style="text-decoration: underline">djConfig</span></em></p>
<p>L&#8217;utilisation de la variable djConfig n&#8217;est plus recommandée. Son utilisation ne sera plus possible à partir de <span style="text-decoration: underline"><span style="color: #ffff00">Dojo v2.0</span></span>. Il faut remplacer djConfig par dojoConfig.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="kw2">var</span> dojoConfig <span class="sy0">=</span> <span class="br0">&#123;</span> parseOnLoad<span class="sy0">:</span><span class="kw2">true</span> <span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<p><em><span style="text-decoration: underline">Les attributs data de HTML5 </span></em></p>
<p>Dojo permet de déclarer des widgets et d&#8217;indiquer d&#8217;autres informations directement dans  le HTML. Afin d&#8217;être compatible avec la syntaxe HTML 5, ces attributs sont préfixés par data-dojo- (cf <a title="cf. spécification HTML5" href="http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data-with-the-data-attributes" target="_blank">spec HTML 5</a>).</p>
<p>djConfig est remplacé par data-dojo-config</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li></ol></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<p><cite>L&#8217;attribut jsId</cite> est remplacé par  <cite>data-dojo-id</cite></p>
<pre><cite></cite><em> </em>

<em>&lt;div data-dojo-id="bar" data-dojo-type="some.Thinger"&gt;I am exported to window.bar by reference&lt;/div&gt;</em></pre>
<p>&nbsp;</p>
<p><cite>L&#8217;attribut </cite><cite>dojoType</cite> est remplacé par  <cite>data-dojo-type</cite></p>
<pre><em>&lt;div data-dojo-type="dijit.form.Button" data-dojo-props="disabled:true, onClick: someNamedFunction"&gt;Click&lt;/div&gt;</em></pre>
<p>&nbsp;</p>
<p>remarque : Tous les anciens attributs sont opérationnels jusqu&#8217;à la version 2.0</p>
<p>&nbsp;</p>
<p><em><span style="text-decoration: underline">Graphiques</span></em></p>
<p>Deux nouveaux types de graphique ont été ajoutés : le graphique en radar (ou toile d’araignée)  et le diagramme de Gantt.</p>

<a href='http://www.dojotoolkit-fr.org/2011/07/dojo-version-1-6/spider-2d/' title='Diagramme Spider '><img width="150" height="150" src="http://www.dojotoolkit-fr.org/wp-content/uploads/Spider-2D-150x150.png" class="attachment-thumbnail" alt="Diagramme Spider" title="Diagramme Spider" /></a>
<a href='http://www.dojotoolkit-fr.org/2011/07/dojo-version-1-6/zoomouttimezone/' title='Diagramme de Gantt'><img width="150" height="150" src="http://www.dojotoolkit-fr.org/wp-content/uploads/zoomOutTimezone-150x150.png" class="attachment-thumbnail" alt="Diagramme de Gantt" title="Diagramme de Gantt" /></a>

<p><em><span style="text-decoration: underline">Dojo Websockets</span></em></p>
<p>Dojo version 1.6 introduit une nouvelle api permettant une communication en temps réelle du style Comet. Cette api est basé sur la WebSocket api qui permet de réaliser une connexion bi-directionnelle idéale pour envoyé (push) en temps réel des messages du serveur vers le client.</p>
<p>&nbsp;</p>
<p><em><span style="text-decoration: underline">Thème</span></em></p>
<p>L&#8217;adoption du framework <a title="Less" href="http://lesscss.org/" target="_blank">Less</a> va rendre plus facile et plus rapide la personnalisation des feuilles de style.</p>
<p>&nbsp;</p>
<p><em><span style="text-decoration: underline">Object store</span></em></p>
<p>La réécriture des classes de stockage rend plus facile à utiliser dans la classe data.store</p>
<p>&nbsp;</p>
<p><em> </em></p>
<h2>Changements de la version 1.6.1</h2>
<p>Cette version étant une version mineure, elle apporte des corrections de bugs et quelques améliorations mineures. Cependant, il faut noter que Dojo supporte maintenant Internet Explorer 9 et Firefox 4.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2011/07/dojo-version-1-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>utiliser Dojo pour un site en plusieurs langues</title>
		<link>http://www.dojotoolkit-fr.org/2010/08/utiliser-de-dojo-pour-un-site-en-plusieurs-langues/</link>
		<comments>http://www.dojotoolkit-fr.org/2010/08/utiliser-de-dojo-pour-un-site-en-plusieurs-langues/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 15:01:24 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[1.6]]></category>
		<category><![CDATA[addclass]]></category>
		<category><![CDATA[byid]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici un petit tutoriel pour vous expliquer comment utiliser « requireLocalization » de Dojo pour un site en plusieurs langues. Merci à ManiT4c 1. Création des fichiers langues La première étape consiste à créer les fichiers langues et à les &#8230; <a href="http://www.dojotoolkit-fr.org/2010/08/utiliser-de-dojo-pour-un-site-en-plusieurs-langues/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--break-->Voici un petit tutoriel pour vous expliquer comment utiliser « requireLocalization » de Dojo pour un site en plusieurs langues.<br />
<a href="http://www.blog.manit4c.com/2010/08/19/gerer-plusieurs-langues-avec-dojo/">Merci à ManiT4c</a></p>
<h1>1. Création des fichiers langues</h1>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/arborescence.jpg" style="float:left"/><br />
La première étape consiste à créer les fichiers langues et à les placer dans les bons dossiers. Pour notre exemple le site ne comportera que deux langues: l’Anglais et le Français.</p>
<ul>
<li> Dans le dossier « dojo » créez un dossier nommé « langue » puis un sous dossier « nls » puis enfin un sous dossier par langue c’est à dire « en » et « fr » dans notre cas.
</li>
<li> Dans chaque dossier « nls », « en » et « fr » vous devrez placer un fichier « langue.js »
</li>
</ul>
<p>Les fichiers « langue.js » contenu dans les dossiers « en » et « fr » seront respectivement utilisés pour les visiteurs anglophone et francophone, tandis que le fichier « langue.js » placé dans le dossier « nls » sera le fichier langue par défaut. C’est à dire celui qui sera utilisé si aucune langue n’est détectée.</p>
<h1>2. Modification du djConfig</h1>
<p>Maintenant il faut préciser à dojo la langue utilisée, vous avez pour cela deux possibilités: soit vous laissez dojo  détecter la langue du navigateur, soit vous l’indiquez directement lors du chargement de dojo.<br />
<br/><br />
Pour ma part je préfère utiliser la seconde méthode. Pour cela il suffit de préciser lors de l’appel de dojo la langue utilisée dans l’attribut « djConfig ».</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> src<span class="sy0">=</span><span class="st0">&quot;dojo/dojo/dojo.js&quot;</span> djConfig<span class="sy0">=</span><span class="st0">&quot;parseOnLoad: true, locale:'fr'&quot;</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Il faut ici préciser la langue entre les guillemets ‘fr’ pour français ‘en’ pour anglais. Cela correspond au dossiers que vous avez précédemment créé dans ‘dojo/langue/nls’.</p>
<h1>3. dojo.requireLocalization et dojo.i18n</h1>
<p>Il faut maintenant demander à dojo de prendre en compte la localisation afin de charger le bon fichier de langue. Il suffit pour cela de rajouter (après avoir charger dojo bien sûr) les lignes suivantes.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dojo.i18n&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;langue&quot;</span><span class="sy0">,</span> <span class="st0">&quot;langue&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Pour « requireLocalization » le premier argument sera le nom du dossier que vous avez créé dans « dojo ». Le second argument sera le nom du fichier à appeler (sans l’extension « .js »). C’est ce qui permettra à dojo de savoir où trouver le fichier langue adéquate.<br />
<br/><br />
Il cherchera donc le fichier « langue.js » dans « dojo/langue/nls » (« nls » étant ajouté automatiquement par dojo) et dans le dossier correspondant à la langue de l’utilisateur.<br />
<br/><br />
A noter: Il est important que les dossiers de langue (« en », « fr »,etc..) correspondent à la localisation indiquée dans « djConfig ».</p>
<h1>4. Contenu des fichiers langues</h1>
<p>Il faut maintenant remplir vos fichiers langues avec vos différents termes. Nous allons ici n’en ajouter que deux mais vous n’aurez bien évidemment aucune limite à ce niveau.<br />
<br/><br />
Contenu du fichier « langue.js » du dossier « fr »</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">bonjour<span class="sy0">:</span><span class="st0">&quot;Bonjour&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">toi<span class="sy0">:</span><span class="st0">&quot;toi&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Contenu du fichier « langue.js » du dossier « en »</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">bonjour<span class="sy0">:</span><span class="st0">&quot;Hello&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">toi<span class="sy0">:</span><span class="st0">&quot;you&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Pour le fichier « langue.js » contenu dans le dossier « nls » je vous propose de copier la même chose que pour le fichier compris dans le dossier « fr ». Nous considérerons ainsi que la langue par défaut sera le français.</p>
<h1>5. Création et utilisation de l’objet « lang »</h1>
<p>Maintenant que tout est prêt, vous pouvez utiliser vos différents fichiers de langue.<br />
<br/><br />
Voici une petite fonction pour tester tous ça:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="kw2">function</span> testLangue<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> lang <span class="sy0">=</span> dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;langue&quot;</span><span class="sy0">,</span> <span class="st0">&quot;langue&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw3">alert</span><span class="br0">&#40;</span>lang.<span class="me1">bonjour</span><span class="sy0">+</span><span class="st0">&quot; &quot;</span><span class="sy0">+</span>lang.<span class="me1">you</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Et voila il ne vous reste plus qu’à lancer cette fonction en faisant varier à chaque fois la localisation dans « djConfig » pour constater que le texte de l’alerte change.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2010/08/utiliser-de-dojo-pour-un-site-en-plusieurs-langues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer un formulaire d&#8217;inscription avec dojo</title>
		<link>http://www.dojotoolkit-fr.org/2009/05/creer-un-formulaire-dinscription-avec-dojo/</link>
		<comments>http://www.dojotoolkit-fr.org/2009/05/creer-un-formulaire-dinscription-avec-dojo/#comments</comments>
		<pubDate>Fri, 15 May 2009 11:59:29 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dojo est particulièrement efficace lorsqu'il s'agit de faire de la validation de formulaire.
Je vais ici vous proposer un tutoriel étape par étape qui va vous permettre de créer un formulaire d'inscription basique, avec les vérifications nécessaires.
Le formulaire en question ne comportera que 4 champs: Email, vérification de l'email, mot de passe et vérification du mot de passe.
 <a href="http://www.dojotoolkit-fr.org/2009/05/creer-un-formulaire-dinscription-avec-dojo/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dojo est particulièrement efficace lorsqu&#8217;il s&#8217;agit de faire de la validation de formulaire.<br />
Je vais ici vous proposer un tutoriel étape par étape qui va vous permettre de créer un formulaire d&#8217;inscription basique, avec les vérifications nécessaires.<br />
Le formulaire en question ne comportera que 4 champs: Email, vérification de l&#8217;email, mot de passe et vérification du mot de passe.<br />
<!--break--><br />
Pour info: Je suis un <a href="http://www.op-art.info">webmaster indépendant</a> situé en Normandie.</p>
<h3>Etape 1</h3>
<p>Téléchargez la dernière version de dojo (<a href="http://www.dojotoolkit.org/downloads">ici</a>) et la décompresser dans le dossier comprenant votre site. Pour plus de simplicité je renomme le dossier « dojo-release-x.x.x » en dojo pour me retrouver avec comme arborescence:<br />
monsite/dojo/dijit<br />
monsite/dojo/dojo<br />
monsite/dojo/dojox</p>
<h3>Etape 2</h3>
<p>Je créé mon fichier « acces_pro.php » (ouai, pour le coup, je vous fait le tuto en temps réel car je développe un site avec un accès professionnel. Libre à vous de renommer les fichiers comme bon vous semblera) et j&#8217;y insère les entêtes HTML nécessaires</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;!</span>DOCTYPE html <span class="kw2">PUBLIC</span> <span class="st0">&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span> <span class="st0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>html xmlns<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml<span class="sy0">:</span>lang<span class="sy0">=</span><span class="st0">&quot;fr&quot;</span> lang<span class="sy0">=</span><span class="st0">&quot;fr&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>meta http<span class="sy0">-</span>equiv<span class="sy0">=</span><span class="st0">&quot;Content-Type&quot;</span> content<span class="sy0">=</span><span class="st0">&quot;text/html; charset=UTF-8&quot;</span> <span class="sy0">/&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>title<span class="sy0">&gt;&lt;/</span>title<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>meta <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;description&quot;</span> content<span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="sy0">/&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>meta <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;keywords&quot;</span> content<span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="sy0">/&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>body<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>D&#8217;avance pour pas oublier je referme mes balises à la fin de mon fichier</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>Etape 3</h3>
<p>J&#8217;appelle mon fichier dojo.js  pour pouvoir utiliser les fonctions qu&#8217;il contiens, Pour cela je place entre les balises <head> et </head> de mon fichier le code suivant</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> src<span class="sy0">=</span><span class="st0">&quot;dojo/dojo.js&quot;</span> djConfig<span class="sy0">=</span><span class="st0">&quot;parseOnLoad: true&quot;</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>djConfig= « parseOnLoad:true » indique à dojo  de scanner le fichier une fois celui-ci chargé pour trouver des instructions « dojo ».</p>
<h3>Etape 4</h3>
<p>J&#8217;indique ensuite qu&#8217;elles sont les fonctions qui vont être utilisées dans mon fichier. Je rajoute donc le code suivant entre les balises</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p> et</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">   dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.form.ValidationTextBox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">   dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dojox.validate.regexp&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">   dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.form.Form&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">   dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.form.Button&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>dijit.form.ValidationTextBox permet d&#8217;utiliser les fonctions de validation des champ de texte.<br />
dojox.validate.regexp contient des expression régulière toute faites (très utile dans notre cas).<br />
dijit.form.Form permet de transformer le formulaire en widget.<br />
dojo.require(&laquo;&nbsp;dijit.form.Button&nbsp;&raquo;) permet d&#8217;utiliser les widget bouton.</p>
<h3>Etape 5</h3>
<p>On ajoute maintenant les fichiers css nécessaires en plaçant ce code entre les balises</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p> et</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>link rel<span class="sy0">=</span><span class="st0">&quot;stylesheet&quot;</span> href<span class="sy0">=</span><span class="st0">&quot;dojo/dojo/resources/dojo.css&quot;</span> <span class="sy0">/&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>link rel<span class="sy0">=</span><span class="st0">&quot;stylesheet&quot;</span> href<span class="sy0">=</span><span class="st0">&quot;dojo/dijit/themes/tundra/tundra.css&quot;</span> <span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>tundra.css correspond au fichier css du thème tundra il en existe d&#8217;autre et vous pouvez créer vous même votre propre thème css.</p>
<h3>Etape 6</h3>
<p>On applique le thème tundra au document en ajoutant la class tundra sur la balise body</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>body <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;tundra&quot;</span><span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>Etape 7</h3>
<p>On ajoute les balises qui vont créer le formulaire</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>form action<span class="sy0">=</span><span class="st0">&quot;acces_pro.php&quot;</span> method<span class="sy0">=</span><span class="st0">&quot;post&quot;</span> enctype<span class="sy0">=</span><span class="st0">&quot;multipart/form-data&quot;</span> id<span class="sy0">=</span><span class="st0">&quot;formInscription&quot;</span> dojoType<span class="sy0">=</span><span class="st0">&quot;dijit.form.Form&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>form<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>l&#8217;id nous servira par la suite lors de la validation globale du formulaire<br />
le dojoType permet de signaler à dojo que cet élément est un formulaire.</p>
<p>On placera les codes qui vont suivre à l&#8217;intérieur des balise</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>form<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p> et</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>form<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>Etape 8</h3>
<p>On place notre premier champ email en utilisant le code dojo suivant:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">Email<span class="sy0">:</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>input id<span class="sy0">=</span><span class="st0">&quot;email1&quot;</span> type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;email1&quot;</span> <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;long&quot;</span> value<span class="sy0">=</span><span class="st0">&quot;&quot;</span></pre></li><li class="li1"><pre class="de1">    dojoType<span class="sy0">=</span><span class="st0">&quot;dijit.form.ValidationTextBox&quot;</span></pre></li><li class="li1"><pre class="de1">    regExpGen<span class="sy0">=</span><span class="st0">&quot;dojox.validate.regexp.emailAddress&quot;</span></pre></li><li class="li1"><pre class="de1">    trim<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">    required<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">    invalidMessage<span class="sy0">=</span><span class="st0">&quot;Email non valide.&quot;</span> <span class="sy0">/&gt;&lt;</span>br <span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>- dojoType permet de signaler à dojo à quel type de champ on à a faire.<br />
- RegExpGen permet de vérifier le format de ce qui sera tapé dans ce champ (ici un email)<br />
- trim permet de supprimer les espaces avant et après le texte tapé dans le champ<br />
- required indique que le champ ne peut rester vide<br />
- invalidMessage vous permet d&#8217;indiquer le texte qui sera affiché si le champ est mal rempli.</p>
<h3>Etape 9</h3>
<p>On place le second champ email en ajoutant une vérification par rapport au premier.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">Confirmation email<span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">    <span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;email2&quot;</span> <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;long&quot;</span> value<span class="sy0">=</span><span class="st0">&quot;&quot;</span></pre></li><li class="li1"><pre class="de1">	    dojoType<span class="sy0">=</span><span class="st0">&quot;dijit.form.ValidationTextBox&quot;</span></pre></li><li class="li1"><pre class="de1">	    trim<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">	    required<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">	    validator<span class="sy0">=</span><span class="st0">&quot;return this.getValue() == dijit.byId('email1').getValue()&quot;</span></pre></li><li class="li1"><pre class="de1">	    invalidMessage<span class="sy0">=</span><span class="st0">&quot;Retapez votre email à l'identique ici&quot;</span> <span class="sy0">/&gt;&lt;</span>br <span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>- On a supprimer le regExpGen qui devient inutile (car on fait une vérification sur un champ sensé être valide)<br />
- validator permet de vérifier que la valeur du champ est identique à celle du champ email précédent. On fait référence au premier champ email en utilisant l&#8217;id « email1 »</p>
<h3>Etape 10</h3>
<p>On ajoute notre premier champ mot de passe.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"> mot de passe<span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">    <span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;password&quot;</span></pre></li><li class="li1"><pre class="de1">    	id<span class="sy0">=</span><span class="st0">&quot;mdp1&quot;</span></pre></li><li class="li1"><pre class="de1">    	<span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;mdp1&quot;</span></pre></li><li class="li1"><pre class="de1">    	dojoType<span class="sy0">=</span><span class="st0">&quot;dijit.form.ValidationTextBox&quot;</span></pre></li><li class="li1"><pre class="de1">    	required<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">    	trim<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">    	invalidMessage<span class="sy0">=</span><span class="st0">&quot;Le mot de passe est nécessaire&quot;</span> <span class="sy0">/&gt;&lt;</span>br <span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Rien de nouveau ici.</p>
<h3>Etape 11</h3>
<p>On ajoute notre champ de confirmation de mot de passe.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">Confirmation mot de passe<span class="sy0">:</span>  </pre></li><li class="li1"><pre class="de1">	<span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;password&quot;</span></pre></li><li class="li1"><pre class="de1">    	<span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;mdp2&quot;</span></pre></li><li class="li1"><pre class="de1">    	dojoType<span class="sy0">=</span><span class="st0">&quot;dijit.form.ValidationTextBox&quot;</span></pre></li><li class="li1"><pre class="de1">    	required<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">    	trim<span class="sy0">=</span><span class="st0">&quot;true&quot;</span></pre></li><li class="li1"><pre class="de1">    	validator<span class="sy0">=</span><span class="st0">&quot;return this.getValue() == dijit.byId('mdp1').getValue()&quot;</span></pre></li><li class="li1"><pre class="de1">     	invalidMessage<span class="sy0">=</span><span class="st0">&quot;Retapez votre mot de passe à l'identique ici&quot;</span> <span class="sy0">/&gt;&lt;</span>br <span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Ici on utilise à nouveau validator pour vérifier que les champs mot de passe son identiques. L&#8217;idée utilisée pour faire référence au premier champ mot de passe est ici « mdp1 »</p>
<h3>Etape 12</h3>
<p>On ajoute un bouton qui va soumettre le formuaire après avoir vérifié que tous les champs étaient correctement remplis.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> label<span class="sy0">=</span><span class="st0">&quot;inscription&quot;</span> dojoType<span class="sy0">=</span><span class="st0">&quot;dijit.form.Button&quot;</span> onClick<span class="sy0">=</span><span class="st0">&quot;dijit.byId('formInscription').validate();&quot;</span><span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>l&#8217;instruction dijit.byId(&#8216;formInscription&#8217;).validate() ajouté dans le onclick permet de vérifier la validité de tous les champs du formulaire dont l&#8217;id est « formInscription » au moment du clic sur le bouton.</p>
<p>Voilà votre formulaire est terminé et les validations sont en place.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2009/05/creer-un-formulaire-dinscription-avec-dojo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tutoriel : Ma première application Dojo</title>
		<link>http://www.dojotoolkit-fr.org/2009/03/tutoriel-ma-premiere-application-dojo/</link>
		<comments>http://www.dojotoolkit-fr.org/2009/03/tutoriel-ma-premiere-application-dojo/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 17:09:32 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Création d'une application Dojo à partir de plusieurs widgets
 <a href="http://www.dojotoolkit-fr.org/2009/03/tutoriel-ma-premiere-application-dojo/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--break--><br />
Tutoriel original par <a href="http://www.life-behind-the-mirror.com">Cyril Berthenet</a></p>
<h1>Pour bien commencer&#8230;</h1>
<p>Avant de commencer à implémenter l&#8217;exemple présenté dans ce tutoriel, il vous faut tout d&#8217;abord :</p>
<ol>
<li>Avoir fait le tutoriel <a href="http://www.dojotoolkit-fr.org/2009/03/tutoriel-mon-premier-widget-dojo/">&laquo;&nbsp;mon premier widget Dojo&nbsp;&raquo;</a> (où au moins avoir télécharger le code source du tutoriel)</li>
<li># Copier les librairies dijit, dojo et dojox du framework Dojo dans le répertoire tutoDojo<br />
Télécharger le framework Dojo à cette adresse http://download.dojotoolkit.org/</li>
<li>Créer ensuite le répertoire exemple2 en effectuant un simple copier/coller du dossier exemple1.<br />
<img title="Arborescence du projet." src="http://www.dojotoolkit-fr.org/sites/default/files/arbo_ex2.png" alt="Arborescence du projet." /></li>
<li>Editer les fichiers Search.js et searchWidget.html pour modifier le namespace<br />
<h3>Search.js</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Widget : Search                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Author : Berthenet Cyril                   */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">provide</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Templated&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Widget&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.form.Button&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.Menu&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Locale&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Class: Search */</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">declare</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span>dijit._Widget<span class="sy0">,</span>dijit._Templated<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Object: _nls</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">stockage du wording et des ressources du widget */</span></pre></li><li class="li1"><pre class="de1">_nls<span class="sy0">:</span><span class="br0">&#123;</span>locale<span class="sy0">:</span><span class="kw2">null</span><span class="sy0">,</span>ressources<span class="sy0">:</span><span class="kw2">null</span><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* String: templatePath</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">chemin d'acces vers le template du widget */</span></pre></li><li class="li1"><pre class="de1">templatePath<span class="sy0">:</span> dojo.<span class="me1">moduleUrl</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget&quot;</span><span class="sy0">,</span> <span class="st0">&quot;template/Search.html&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Object: _dropdown</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Bouton de selection du moteur de recherche */</span></pre></li><li class="li1"><pre class="de1">_dropdown<span class="sy0">:</span><span class="kw2">null</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Array: _engines</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Liste des moteurs de recherche */</span></pre></li><li class="li1"><pre class="de1">_engines<span class="sy0">:</span><span class="kw2">null</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: constructor</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Constructeur */</span></pre></li><li class="li1"><pre class="de1">constructor<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::constructor&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._nls.<span class="me1">locale</span><span class="sy0">=</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span><span class="st0">&quot;Locale&quot;</span><span class="br0">&#41;</span>.<span class="me1">searchWidget</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._nls.<span class="me1">ressources</span><span class="sy0">=</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span><span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span>.<span class="me1">searchWidget</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._engines<span class="sy0">=</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">engines</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._dropdown<span class="sy0">=</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: destroy</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Destructeur */</span></pre></li><li class="li1"><pre class="de1">destroy<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::destroy&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">inherited</span><span class="br0">&#40;</span><span class="st0">&quot;destroy&quot;</span><span class="sy0">,</span>arguments<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>._dropdown<span class="br0">&#41;</span><span class="br0">&#123;</span><span class="kw1">this</span>._dropdown.<span class="me1">destroy</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">delete</span> <span class="kw1">this</span>._nls<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">delete</span> <span class="kw1">this</span>._engines<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: startup</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Methode publique appelee apres l'instanciation du widget et la creation de tous</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">ses noeuds DOM dans document.body */</span></pre></li><li class="li1"><pre class="de1">startup<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::startup&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">inherited</span><span class="br0">&#40;</span><span class="st0">&quot;startup&quot;</span><span class="sy0">,</span>arguments<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">==</span><span class="kw2">null</span><span class="sy0">||</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">==</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">?</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span><span class="sy0">:</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> menu <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">Menu</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">forEach</span><span class="br0">&#40;</span><span class="kw1">this</span>._engines<span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>engine<span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> menuItem <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">MenuItem</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">label<span class="sy0">:</span> engine<span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">onClick<span class="sy0">:</span> dojo.<span class="me1">hitch</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>param<span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._dropdown.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;label&quot;</span><span class="sy0">,</span>param<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._dropdown.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;engine&quot;</span><span class="sy0">,</span>param<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span>engine<span class="br0">&#41;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">menu.<span class="me1">addChild</span><span class="br0">&#40;</span>menuItem<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._dropdown <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">form</span>.<span class="me1">DropDownButton</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">label<span class="sy0">:</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">engine<span class="sy0">:</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">dropDown<span class="sy0">:</span> menu</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">id</span><span class="sy0">+</span><span class="st0">&quot;Selector&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._dropdown.<span class="me1">startup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: _onKeyPress</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Methode privee executee lors de la saisie d'un caractere dans le champs de recherche */</span></pre></li><li class="li1"><pre class="de1">_onKeyPress<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="coMULTI">/*Object*/</span>evt<span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::_onKeyPress&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>evt.<span class="me1">keyCode</span> <span class="sy0">==</span> dojo.<span class="me1">keys</span>.<span class="me1">ENTER</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._search<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">stopEvent</span><span class="br0">&#40;</span>evt<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">return</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: _clear</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Methode privee permettant d'effacer le texte du champs de saisie */</span></pre></li><li class="li1"><pre class="de1">_clear<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::_clear&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">==</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span><span class="sy0">||</span><span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">==</span><span class="kw1">this</span>.<span class="me1">text</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: _search</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Methode privee executant la recherche */</span></pre></li><li class="li1"><pre class="de1">_search<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::_search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>  <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">!=</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span> <span class="sy0">&amp;&amp;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">!=</span><span class="kw1">this</span>.<span class="me1">text</span> <span class="sy0">&amp;&amp;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> url <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> fieldValue <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> engines <span class="sy0">=</span> <span class="kw1">this</span>._nls.<span class="me1">ressources</span>.<span class="me1">engines</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">switch</span><span class="br0">&#40;</span><span class="kw1">this</span>._dropdown.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">'engine'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">case</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">url <span class="sy0">=</span> engines.<span class="me1">google</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">break</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">case</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">url <span class="sy0">=</span> engines.<span class="me1">yahoo</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">break</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">case</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">url <span class="sy0">=</span> engines.<span class="me1">wikipedia</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">break</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;viewer&quot;</span><span class="br0">&#41;</span>.<span class="me1">src</span><span class="sy0">=</span>url<span class="sy0">+</span>escape<span class="br0">&#40;</span>fieldValue<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">else</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> dialogbox <span class="sy0">=</span> dijit.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;dialogbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw2">var</span> content <span class="sy0">=</span> <span class="kw1">this</span>._nls.<span class="me1">ressources</span>.<span class="me1">popup</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dialogbox.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;title&quot;</span><span class="sy0">,</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">popup</span>.<span class="me1">title</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dialogbox.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;content&quot;</span><span class="sy0">,</span>dojo.<span class="me1">string</span>.<span class="me1">substitute</span><span class="br0">&#40;</span>content<span class="sy0">,</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">message<span class="sy0">:</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">popup</span>.<span class="me1">message</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">btnLabel<span class="sy0">:</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">popup</span>.<span class="me1">btnLabel</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dialogbox.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>searchWidget.html</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span><span class="co1">// &lt;![CDATA[</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dojo.i18n&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.Dialog&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	  dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">addOnLoad</span><span class="br0">&#40;</span>init<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        <span class="kw2">var</span> _search <span class="sy0">=</span> <span class="kw2">new</span> exemple2.<span class="me1">widget</span>.<span class="me1">Search</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		  id<span class="sy0">:</span><span class="st0">&quot;search&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">          text<span class="sy0">:</span><span class="st0">&quot;saisir votre texte ici...&quot;</span></pre></li><li class="li1"><pre class="de1">        <span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;search&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        _search.<span class="me1">startup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        <span class="kw2">var</span> dialog <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">Dialog</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">          title<span class="sy0">:</span> <span class="st0">&quot;title&quot;</span> </pre></li><li class="li1"><pre class="de1">		<span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;dialogbox&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        dialog.<span class="me1">startup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="co1">// ]]&gt;&lt;/script&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


</li>
</ol>
<h3>Conventions de codage adoptées dans ce tutoriel</h3>
<ol>
<li>commentaires : /* commentaire sur une ou plusieurs lignes */</li>
<li>ajout d&#8217;une ligne console.log en début de fonction pour identifier les méthodes appelées lors de l&#8217;exécution du code</li>
<li>les méthodes privées sont préfixées par un underscore</li>
<li>afin d&#8217;éviter les problèmes d&#8217;encodage, les caractères accentués sont proscrit du code Dojo</li>
</ol>
<h1>Définition du template du widget &#8216;Viewer&#8217;</h1>
<p>Ce composant graphique va nous permettre d&#8217;afficher le résultat de la recherche sous forme d&#8217;une page HTML.<br />
Il est composé des éléments suivants :</p>
<ol>
<li> un div container qui nous permettra par la suite de définir le style de notre widget</li>
<li> d&#8217;une iframe pour l&#8217;affichage</li>
</ol>
<h3>Viewer.html</h3>
<p>&nbsp;</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;viewer&quot;</span><span class="sy0">&gt;</span><span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;iframe&quot;</span><span class="sy0">&lt;</span>br <span class="sy0">/&gt;</span>           src<span class="sy0">=</span><span class="st0">&quot;${_nls.ressources.defaultPage}&quot;</span><span class="sy0">&lt;</span>br <span class="sy0">/&gt;</span>           dojoAttachPoint<span class="sy0">=</span><span class="st0">&quot;viewer&quot;</span><span class="sy0">&lt;</span>br <span class="sy0">/&gt;</span>           scrolling<span class="sy0">=</span><span class="st0">&quot;yes&quot;</span><span class="sy0">&lt;</span>br <span class="sy0">/&gt;</span>           frameborder<span class="sy0">=</span><span class="st0">&quot;no&quot;</span><span class="sy0">&gt;&lt;</span>br <span class="sy0">/&gt;&lt;/</span>div<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
4 : url de la page qui sera affichée par défaut dans le viewer (gestion du lien dans les ressources)</p>
<h2>Modification des ressources</h2>
<h3>nls/Ressources.js et nls/fr/Ressources.js</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1"><span class="st0">&quot;viewerWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">&quot;defaultPage&quot;</span><span class="sy0">:</span> <span class="st0">&quot;static/empty.html&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Définition du style du widget &#8216;Viewer&#8217;</h1>
<h3>viewer.css</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">.<span class="me1">viewer</span> .<span class="me1">iframe</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">width<span class="sy0">:</span> 800px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">height<span class="sy0">:</span> 400px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">border<span class="sy0">:</span>3px solid #B0B0B0<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Modification de la page statique</h1>
<h3>empty.html</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">Le résultat de votre recherche s<span class="st0">'affichera dans ce viewer</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Définition de la classe &#8216;Viewer&#8217;</h1>
<h2>Diagramme de classe</h2>
<h3>Viewer</h3>
<p>- _nls : object<br />
- templatePath : string<br />
- _topics : array<br />
+ constructor()<br />
+ destroy()<br />
+ postCreate()<br />
+ setContent()<br />
+ reset()</p>
<h3>Viewer.js</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Widget : Viewer                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Author : Berthenet Cyril                   */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">provide</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Templated&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Widget&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Class: Search */</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">declare</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span>dijit._Widget<span class="sy0">,</span>dijit._Templated<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Object: _nls</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">stockage du wording et des ressources du widget */</span></pre></li><li class="li1"><pre class="de1">_nls<span class="sy0">:</span><span class="br0">&#123;</span>ressources<span class="sy0">:</span><span class="kw2">null</span><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* String: templatePath</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">chemin d'acces au template du widget */</span></pre></li><li class="li1"><pre class="de1">templatePath<span class="sy0">:</span> dojo.<span class="me1">moduleUrl</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget&quot;</span><span class="sy0">,</span> <span class="st0">&quot;template/Viewer.html&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: constructor</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Constructeur */</span></pre></li><li class="li1"><pre class="de1">constructor<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer::constructor&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._nls.<span class="me1">ressources</span><span class="sy0">=</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span><span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span>.<span class="me1">viewerWidget</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: destroy</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Destructeur */</span></pre></li><li class="li1"><pre class="de1">destroy<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::destroy&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">delete</span> <span class="kw1">this</span>._nls<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: setContent</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Modification du contenu du viewer */</span></pre></li><li class="li1"><pre class="de1">setContent<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="coMULTI">/*String*/</span>url<span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer::setContent&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">viewer</span>.<span class="me1">src</span><span class="sy0">=</span>url<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: reset</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Remise a zero du contenu du viewer */</span></pre></li><li class="li1"><pre class="de1">reset<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer::setContent&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>.<span class="me1">setContent</span><span class="br0">&#40;</span><span class="kw1">this</span>._nls.<span class="me1">ressources</span>.<span class="me1">defaultPage</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
30 et 31 : chargement des ressources du widget<br />
43 à 46 : méthode permettant de modifier le contenu de l&#8217;iframe avec une url passée en paramètre<br />
50 à 53 : remise à zéro du contenu du viewer par l&#8217;affichage de la page par défaut</p>
<h1>Création d&#8217;un sample de test</h1>
<h3>viewerWidget.html</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span><span class="co1">// &lt;![CDATA[</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="kw2">var</span> djConfig <span class="sy0">=</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        parseOnLoad<span class="sy0">:</span> <span class="kw2">false</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        isDebug<span class="sy0">:</span> <span class="kw2">true</span></pre></li><li class="li1"><pre class="de1">      <span class="br0">&#125;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="co1">// ]]&gt;&lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&lt;script src=&quot;../dojo/dojo.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span><span class="co1">// &lt;![CDATA[</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dojo.i18n&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">addOnLoad</span><span class="br0">&#40;</span>init<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">         <span class="kw2">var</span> _viewer <span class="sy0">=</span> <span class="kw2">new</span> exemple2.<span class="me1">widget</span>.<span class="me1">Viewer</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">          id<span class="sy0">:</span><span class="st0">&quot;viewer&quot;</span></pre></li><li class="li1"><pre class="de1">        <span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;viewer&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        _viewer.<span class="me1">setContent</span><span class="br0">&#40;</span><span class="st0">&quot;http://www.google.fr&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>        </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="co1">// ]]&gt;&lt;/script&gt;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
8 : chargement du style<br />
31 à 33 : instanciation du widget &laquo;&nbsp;Viewer&nbsp;&raquo;<br />
35 : affichage par défaut du moteur google</p>
<h1>Définition de la classe de notre application</h1>
<p>Nous avons fait le choix dans ce tutoriel de construire notre exemple à partir d&#8217;une classe appelant un template regroupant les widgets de base de notre application. Les widgets qui pourraient avoir d&#8217;autres fonctions que celle de la rechercher dans une application plus complète seront déportés vers le sample de test (ex: la boîte de dialogue)</p>
<h3>MonAppli.js</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Widget : Mon application                   */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Author : Berthenet Cyril                   */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">provide</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.MonAppli&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Templated&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Widget&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.layout.ContentPane&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.layout.BorderContainer&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.Dialog&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Class: Search */</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">declare</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.MonAppli&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span>dijit._Widget<span class="sy0">,</span>dijit._Templated<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Boolean: widgetsInTemplate</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">affichage de widgets dans un template (false par defaut) */</span></pre></li><li class="li1"><pre class="de1">widgetsInTemplate<span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* String: templatePath</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">chemin d'acces au template du widget */</span></pre></li><li class="li1"><pre class="de1">templatePath<span class="sy0">:</span> dojo.<span class="me1">moduleUrl</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget&quot;</span><span class="sy0">,</span> <span class="st0">&quot;template/MonAppli.html&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: constructor</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Constructeur */</span></pre></li><li class="li1"><pre class="de1">constructor<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.MonAppli::constructor&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>ligne :</strong><br />
27 : la variable widgetsInTemplate est très importante car elle permet l&#8217;interprétation des widgets à l&#8217;intérieur d&#8217;un template</p>
<h1>Définition du template de notre application</h1>
<p>Le template de notre application regroupe les composants graphiques permettant la mise en page (dijit.layout) et ceux liés à la fonction de recherche (Search et Viewer).</p>
<h3>MonAppli.html</h3>
<p>&nbsp;</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="sy0">&amp;</span>nbsp<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="sy0">&amp;</span>nbsp<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<h1>Distribution des données dans l&#8217;application</h1>
<p>Les widgets publient leurs données et/ou s&#8217;abonnent pour en obtenir.<br />
remplacer la ligne :</p>
<h3>Search.js</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;viewer&quot;</span><span class="br0">&#41;</span>.<span class="me1">src</span><span class="sy0">=</span>url<span class="sy0">+</span>escape<span class="br0">&#40;</span>fieldValue<span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>par :</p>
<h3>Search.js</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">publish</span><span class="br0">&#40;</span><span class="st0">&quot;displayResult&quot;</span><span class="sy0">,</span><span class="br0">&#91;</span>url<span class="sy0">+</span>escape<span class="br0">&#40;</span>fieldValue<span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>Viewer.js</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/* Array: topics */</span></pre></li><li class="li1"><pre class="de1">_topics<span class="sy0">:</span><span class="kw2">null</span><span class="sy0">,</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: constructor</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Constructeur */</span></pre></li><li class="li1"><pre class="de1">constructor<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Viewer::constructor&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._nls.<span class="me1">ressources</span><span class="sy0">=</span>dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2&quot;</span><span class="sy0">,</span><span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">viewerWidget</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._topics<span class="sy0">=</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*Function: destroy</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Destructeur */</span></pre></li><li class="li1"><pre class="de1">destroy<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.Search::destroy&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">delete</span> <span class="kw1">this</span>._nls<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">delete</span> <span class="kw1">this</span>._topics<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"> <span class="coMULTI">/* Function: postCreate</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">Methode appelee apres la creation du widget */</span></pre></li><li class="li1"><pre class="de1">postCreate<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="kw1">this</span>._topics<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">=</span>dojo.<span class="me1">subscribe</span><span class="br0">&#40;</span><span class="st0">&quot;displayResult&quot;</span><span class="sy0">,</span> <span class="kw1">this</span><span class="sy0">,</span> <span class="st0">&quot;setContent&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
27 : définition d&#8217;un tableau pour le stockage des topics.<br />
35 : initialisation du tableau de topics.<br />
43 : destruction du tableau de topics.<br />
48 à 50 : méthode appelée automatiquement après la création du widget.<br />
49 : déclenchement de la méthode setContent() du Viewer lorsque un topic &laquo;&nbsp;displayResult&nbsp;&raquo; est publié dans l&#8217;application.</p>
<p><strong>note : le widget &#8216;Search&#8217; envoi un topic &laquo;&nbsp;displayResult&nbsp;&raquo; avec l&#8217;url de recherche dans toute l&#8217;application. Le widget &#8216;Viewer&#8217; qui a souscrit à ce topic va exécuter sa méthode setContent() avec l&#8217;url passée en argument du topic</strong></p>
<h1>Modification des styles</h1>
<p>Séparation des styles propres à chacun des widgets et ceux pouvants être réutilisé dans toute l&#8217;application. On a préféré faire ici plusieurs fichiers css qui seront compressés en un seul fichier css par le processus de buid.</p>
<h3>search.css</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">.<span class="me1">search</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">height<span class="sy0">:</span>30px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">search</span> .<span class="me1">btn</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">background<span class="sy0">:</span> url<span class="br0">&#40;</span>..<span class="sy0">/</span>images<span class="sy0">/</span>loupe.<span class="me1">png</span><span class="br0">&#41;</span> no<span class="sy0">-</span>repeat<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">width<span class="sy0">:</span>20px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">height<span class="sy0">:</span>19px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">border<span class="sy0">-</span>left<span class="sy0">:</span>0px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">cursor<span class="sy0">:</span>pointer<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">search</span> input<span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">height<span class="sy0">:</span>21px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">font<span class="sy0">:</span>13px verdana<span class="sy0">,</span> sans<span class="sy0">-</span>serif<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>monappli.css</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">.<span class="me1">floatLeft</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">float<span class="sy0">:</span>left<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">greyBorder</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">border<span class="sy0">:</span>1px solid #B0B0B0<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/****************************************/</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*    Surcharge theme nihilo de Dojo       */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/****************************************/</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitDropDownButton</span> .<span class="me1">dijitReset</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">height<span class="sy0">:</span>16px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitDropDownButton</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">float<span class="sy0">:</span> left<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">margin<span class="sy0">:</span><span class="nu0">0</span> <span class="sy0">!</span>important<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitDropDownButton</span> span <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">font<span class="sy0">:</span>10px verdana<span class="sy0">,</span> sans<span class="sy0">-</span>serif<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitButtonNode</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">width<span class="sy0">:</span>80px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">border<span class="sy0">:</span>1px solid #B0B0B0 <span class="sy0">!</span>important<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">border<span class="sy0">-</span>right<span class="sy0">:</span>0px <span class="sy0">!</span>important<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Test&nbsp;</h1>
<h3>monApplication.html</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"> &lt;!--       @import &quot;../dijit/themes/dijit.css&quot;;       @import &quot;../dijit/themes/nihilo/nihilo.css&quot;;      --&gt;<span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span><span class="co1">// &lt;![CDATA[</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="kw2">var</span> djConfig <span class="sy0">=</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        parseOnLoad<span class="sy0">:</span> <span class="kw2">false</span><span class="sy0">,</span>        </pre></li><li class="li1"><pre class="de1">		isDebug<span class="sy0">:</span> <span class="kw2">true</span></pre></li><li class="li1"><pre class="de1">      <span class="br0">&#125;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="co1">// ]]&gt;&lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&lt;script src=&quot;../dojo/dojo.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span><span class="co1">// &lt;![CDATA[</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dojo.i18n&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>      </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;exemple2.widget.MonAppli&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">addOnLoad</span><span class="br0">&#40;</span>init<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	  <span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        <span class="kw2">var</span> _appli <span class="sy0">=</span> <span class="kw2">new</span> exemple2.<span class="me1">widget</span>.<span class="me1">MonAppli</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;appli&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        <span class="kw2">var</span> dialog <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">Dialog</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;dialogbox&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">        dialog.<span class="me1">startup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="co1">// ]]&gt;&lt;/script&gt;</span></pre></li></ol></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
8 : chargement du style du widget &#8216;Viewer&#8217;<br />
9 : chargement du style du widget &#8216;Search&#8217;<br />
10 : chargement des styles communs partagés par toute l&#8217;application<br />
12 à 15 : chargement des thèmes dijit et nihilo pour la création du bouton à menu déroulant<br />
38 : instanciation de l&#8217;application<br />
40 : instanciation de la boîte de dialogue pour l&#8217;affichage des erreurs. On aurait pu inclure ce widgets dans le template de notre application en imaginant qu&#8217;il puisse avoir une autre fonction que l&#8217;affichage des erreurs liées à la recherche dans une application plus complète.</p>
<p><img title="L'application finale est composée des widgets 'Search' et 'Viewer'. " src="http://www.dojotoolkit-fr.org/sites/default/files/appli_ex2.png" alt="L'application finale est composée des widgets 'Search' et 'Viewer'. " /></p>
<hr />
<p>Berthenet Cyril</p>
<p>http://www.life-behind-the-mirror.com/codes/tutoDojo/myFirstDojoAppli.php</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2009/03/tutoriel-ma-premiere-application-dojo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Générer une table des matieres</title>
		<link>http://www.dojotoolkit-fr.org/2009/03/generer-une-table-des-matieres/</link>
		<comments>http://www.dojotoolkit-fr.org/2009/03/generer-une-table-des-matieres/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 14:55:53 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Générer une table des matières automatiquement en parcourant le DOM
 <a href="http://www.dojotoolkit-fr.org/2009/03/generer-une-table-des-matieres/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--break--></p>
<h1>La table des matières (toc)</h1>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/toc.png" /><br />
Une table des matières peut être généré côté serveur où côté client.<br />
Si comme moi vous préférez utiliser Dojo pour la créer, voici de quoi vous ravir.</p>
<h1>Fonctionnement</h1>
<p>Le script va lire le contenu du DOM à la recherche de balise (par défaut les h1 et h2 mais cela est paramétrable).<br />
Ces balises vont ensuite être utilisées pour générer une suite de balise LI.</p>
<h1>Utilisation</h1>
<p>Il ne suffit que de deux lignes pour générer votre table des matières :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="co1">//charge le code de création de la toc</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dojox.toc&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">addOnLoad</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="co1">//creation de la toc</span></pre></li><li class="li1"><pre class="de1">    dojox.<span class="me1">toc</span>.<span class="me1">create</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Note : Utilisé sans argument, dojox.toc.create() va générer la TOC en parcourant tous les enfants du body de la page à la recherche de h1 et h2.</p>
<h2>Les arguments</h2>
<p>dojox.toc.create() accepte un argument de type objet :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">	<span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		rootNode <span class="sy0">:</span> dojo.<span class="me1">body</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="coMULTI">/*Racine a parcourir. La recherche se fait à l'intérieur de cette balise*/</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		classToIgnore <span class="sy0">:</span> <span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="coMULTI">/*Tableau listant les classes à ignorer. Un élément qui comporte l'une de ces classes sera ignoré.*/</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		appendNode <span class="sy0">:</span> dojo.<span class="me1">body</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="coMULTI">/*Noeud de référence autour duquel sera ajouté la table des matières. S'il vaut nul, le noeud ne sera pas ajouté au DOM*/</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		position <span class="sy0">:</span> <span class="st0">&quot;before&quot;</span> <span class="coMULTI">/*Position à laquelle le noeud de la TOC sera ajouté autour du noeud défini par appendNode*/</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		<span class="st0">&quot;class&quot;</span> <span class="sy0">:</span> <span class="st0">&quot;toc&quot;</span> <span class="coMULTI">/*Classe ajoutée au UL de la TOC*/</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		query <span class="sy0">:</span> <span class="st0">&quot;h1,h2&quot;</span> <span class="coMULTI">/*Noeuds qui seront recherché pour générer la TOC*/</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		stripHtml <span class="sy0">:</span> <span class="kw2">true</span> <span class="coMULTI">/*Supprime l'HTML trouvé dans les noeuds utilisés pour la TOC*/</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		rootAnchor <span class="sy0">:</span> <span class="st0">&quot;dojox.toc.&quot;</span> <span class="coMULTI">/*Texte ajouté dans les ancres (avant la position numérique de l'ancre)*/</span></pre></li><li class="li1"><pre class="de1">	<span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Exemple et téléchargement</h1>
<p>Vous trouverez le code à télécharger ainsi qu&#8217;un exemple ici :</p>
<p>http://ben.dojotoolkit-fr.org/test_toc.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2009/03/generer-une-table-des-matieres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutoriel : Mon premier widget Dojo</title>
		<link>http://www.dojotoolkit-fr.org/2009/03/tutoriel-mon-premier-widget-dojo/</link>
		<comments>http://www.dojotoolkit-fr.org/2009/03/tutoriel-mon-premier-widget-dojo/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 14:42:44 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Création d'un composant graphique Dojo pour interfacer l'accès à plusieurs moteurs de recherche (Compatible Dojo 1.2.3)
 <a href="http://www.dojotoolkit-fr.org/2009/03/tutoriel-mon-premier-widget-dojo/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--break--></p>
<h1>Création d&#8217;un composant graphique Dojo pour interfacer l&#8217;accès à plusieurs moteurs de recherche</h1>
<p>tutoriel original écrit par <a href="http://www.life-behind-the-mirror.com/">Berthenet Cyril</a></p>
<h2>Partie 1 : Le widget &#8216;Search&#8217; simplifié</h2>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/widget0_ex1.png" alt="Le widget 'Search' simplifié est composé d’un champ de saisie et d’un bouton pour exécuter la recherche." title="Le widget 'Search' simplifié est composé d’un champ de saisie et d’un bouton pour exécuter la recherche."/></p>
<h2>Partie 2 : Le widget &#8216;Search&#8217; avancé</h2>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/widget1_ex1.png" alt="Le widget 'Search' avancé comporte un bouton supplémentaire à menu déroulant pour la sélection du moteur de recherche" title="Le widget 'Search' avancé comporte un bouton supplémentaire à menu déroulant pour la sélection du moteur de recherche"/></p>
<h1>Pour bien commencer&#8230;</h1>
<ol>
<li>Créer dans le répertoire servant de localhost à votre serveur web (par défaut www pour easyphp, wamp,&#8230;) le dossier tutoDojo.<br />
      Ce répertoire servira de racine à notre tutoriel.
</li>
<li>Copier les librairies dijit, dojo et dojox du framework Dojo dans le répertoire<br />
      Télécharger le framework Dojo à cette adresse http://download.dojotoolkit.org/<br />
(Préférer le package src du framework, contenant l&#8217;ensemble des sources de la distribution, pour vos futurs développements)
</li>
<li>Créer ensuite le dossier exemple1 en respectant l&#8217;arborescence présentée sur la figure ci-dessous.</li>
</ol>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/arbo_ex1.png" alt="Arborescence du projet." title="Arborescence du projet."/></p>
<h2>Conventions de codage adoptées dans ce tutoriel</h2>
<ol>
<li> commentaires : /* commentaire sur une ou plusieurs lignes */</li>
<li> ajout d&#8217;une ligne console.log en début de fonction pour identifier les méthodes appelées lors de l&#8217;exécution du code</li>
<li> les méthodes privées sont préfixées par un underscore</li>
<li> afin d&#8217;éviter les problèmes d&#8217;encodage, les caractères accentués sont proscrit du code Dojo </li>
</ol>
<h1>Définition du template</h1>
<p>Nous aurons besoin des éléments suivants :</p>
<ul>
<li> un div container qui nous permettra par la suite de définir le style de notre widget</li>
<li> une balise input type=&nbsp;&raquo;text&nbsp;&raquo; pour le champ de saisie</li>
<li> un div que nous utiliserons comme bouton pour lancer la recherche</li>
</ul>
<h3>Search.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;Field&quot;</span> </pre></li><li class="li1"><pre class="de1">         value<span class="sy0">=</span><span class="st0">&quot;saisir le texte ici...&quot;</span> </pre></li><li class="li1"><pre class="de1">  <span class="sy0">/&gt;</span>    <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;Button&quot;</span> </pre></li><li class="li1"><pre class="de1">       label<span class="sy0">=</span><span class="st0">&quot;lancer la recherche&quot;</span> </pre></li><li class="li1"><pre class="de1">       title<span class="sy0">=</span><span class="st0">&quot;lancer la recherche&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Définition du widget</h1>
<p>Pour créer un widget Dojo, notre classe &laquo;&nbsp;Search&nbsp;&raquo; doit hériter des méthodes et propriétés des classes _Widget et _Templated de la librairie dijit.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">declare</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span>dijit._Widget<span class="sy0">,</span>dijit._Templated<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<h2>Diagramme de classe</h2>
<h4>Search</h4>
<p>- _nls : object<br />
- templatePath : string<br />
- _dropdown : object<br />
- _engines : array<br />
+ constructor()<br />
+ destroy()<br />
+ startup()<br />
- _onKeyPress(evt object)<br />
- _clear()<br />
- _search()</p>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Widget : Search                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Author : Berthenet Cyril                   */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            *</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">//**********************************************/</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">provide</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Templated&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Widget&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Class: Search */</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">declare</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span>dijit._Widget<span class="sy0">,</span>dijit._Templated<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">   <span class="coMULTI">/* String: templatePath</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    chemin d'acces vers le template du widget */</span></pre></li><li class="li1"><pre class="de1">  templatePath<span class="sy0">:</span> dojo.<span class="me1">moduleUrl</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget&quot;</span><span class="sy0">,</span> <span class="st0">&quot;template/Search.html&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: constructor     Constructeur */</span></pre></li><li class="li1"><pre class="de1">  constructor<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::constructor&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"> <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
10. importation de la classe _Templated<br />
11. importation de la classe _Widget<br />
18. chemin d&#8217;accès vers le template du widget<br />
22. constructeur de notre classe </p>
<h1>Définition du style</h1>
<h3>search.css :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">.<span class="me1">floatLeft</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  float<span class="sy0">:</span>left<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">greyBorder</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  border<span class="sy0">:</span>1px solid #B0B0B0<span class="sy0">;</span><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">search</span> .<span class="me1">btn</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  background<span class="sy0">:</span> url<span class="br0">&#40;</span>..<span class="sy0">/</span>images<span class="sy0">/</span>loupe.<span class="me1">png</span><span class="br0">&#41;</span> no<span class="sy0">-</span>repeat<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  width<span class="sy0">:</span>20px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  height<span class="sy0">:</span>19px<span class="sy0">;</span>  border<span class="sy0">-</span>left<span class="sy0">:</span>0px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  cursor<span class="sy0">:</span>pointer<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">search</span> input<span class="br0">&#123;</span>  </pre></li><li class="li1"><pre class="de1">  height<span class="sy0">:</span>21px<span class="sy0">;</span>  font<span class="sy0">:</span>13px verdana<span class="sy0">,</span> sans<span class="sy0">-</span>serif<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
1 à 6 : styles génériques qui pourront être déportés vers le fichier css de l&#8217;application<br />
7 à 13 : définition du style du bouton<br />
14 à 17 : définition du style du champ de saisie </p>
<p>Le fichier loupe.png est disponible en bas de page</p>
<h2>Modification du code du template de notre widget afin d&#8217;appliquer le style défini dans le fichier css</h2>
<h3>Search.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;search&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;floatLeft greyBorder&quot;</span></pre></li><li class="li1"><pre class="de1">         <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;Field&quot;</span> </pre></li><li class="li1"><pre class="de1">         value<span class="sy0">=</span><span class="st0">&quot;saisir le texte ici...&quot;</span> </pre></li><li class="li1"><pre class="de1">  <span class="sy0">/&gt;</span>  </pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;Button&quot;</span> </pre></li><li class="li1"><pre class="de1">       <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;btn greyBorder floatLeft&quot;</span></pre></li><li class="li1"><pre class="de1">       label<span class="sy0">=</span><span class="st0">&quot;lancer la recherche&quot;</span> </pre></li><li class="li1"><pre class="de1">       title<span class="sy0">=</span><span class="st0">&quot;lancer la recherche&quot;</span><span class="sy0">&gt;</span>  <span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
3 et 8 : ajout des classes définies dans le fichier css </p>
<h1>Création d&#8217;un sample de test</h1>
<h3>searchWidget.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;!</span>DOCTYPE HTML <span class="kw2">PUBLIC</span> <span class="st0">&quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>html<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">    <span class="sy0">&lt;</span>meta http<span class="sy0">-</span>equiv<span class="sy0">=</span><span class="st0">&quot;Content-Type&quot;</span> content<span class="sy0">=</span><span class="st0">&quot;text/html; charset=&quot;</span>utf<span class="sy0">-</span><span class="nu0">8</span><span class="st0">&quot; /&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">            &lt;title&gt;Search&lt;/title&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;link rel=&quot;</span>stylesheet<span class="st0">&quot; type=&quot;</span>text<span class="sy0">/</span>css<span class="st0">&quot; href=&quot;</span>.<span class="sy0">/</span>css<span class="sy0">/</span>search.<span class="me1">css</span><span class="st0">&quot; /&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;script&gt;        </span></pre></li><li class="li1"><pre class="de1"><span class="st0">      var djConfig = {</span></pre></li><li class="li1"><pre class="de1"><span class="st0">        parseOnLoad: false,</span></pre></li><li class="li1"><pre class="de1"><span class="st0">        isDebug: true</span></pre></li><li class="li1"><pre class="de1"><span class="st0">      };        </span></pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;script type=&quot;</span>text<span class="sy0">/</span>javascript<span class="st0">&quot; src=&quot;</span>..<span class="sy0">/</span>dojo<span class="sy0">/</span>dojo.<span class="me1">js</span><span class="st0">&quot; charset=&quot;</span>utf<span class="sy0">-</span><span class="nu0">8</span><span class="st0">&quot;&gt;&lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">                    &lt;script type=&quot;</span>text<span class="sy0">/</span>javascript<span class="st0">&quot; language=&quot;</span>javascript<span class="st0">&quot;&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">      dojo.require(&quot;</span>exemple1.<span class="me1">widget</span>.<span class="me1">Search</span><span class="st0">&quot;);</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">      dojo.addOnLoad(init);        </span></pre></li><li class="li1"><pre class="de1"><span class="st0">      function init(){</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">        var _search = new exemple1.widget.Search({</span></pre></li><li class="li1"><pre class="de1"><span class="st0">          id:&quot;</span>search<span class="st0">&quot;        }, dojo.byId(&quot;</span>search<span class="st0">&quot;));</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">        _search.startup();</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">      }    </span></pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">  &lt;/head&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">  &lt;body&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;div id=&quot;</span>search<span class="st0">&quot;&gt;&lt;/div&gt;  &lt;/body&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">&lt;/html&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
lignes 8 : chargement du style du widget<br />
12 à 15 : paramètres qui seront utilisés au chargement du framework<br />
19 : chargement du framework Dojo<br />
23 : importation du widget &#8216;Search&#8217;<br />
25 : chargement de la fonction init après la création de tous les noeuds DOM<br />
29 à 31 : instanciation du widget &#8216;Search&#8217;<br />
30 : l&#8217;ajout d&#8217;un id n&#8217;est pas obligatoire car Dojo crée des identifiants uniques lors de l&#8217;exécution du code. nous utilisons ici un id &laquo;&nbsp;fixe&nbsp;&raquo; que nous réutiliserons plus tard.<br />
31 : une fois créé, le widget remplacera le div &laquo;&nbsp;search&nbsp;&raquo; dans la page HTML (ligne 40)<br />
33 : exècution de la mèthode startup() de la classe &#8216;Search&#8217; </p>
<h1>Test du widget &#8216;Search&#8217;</h1>
<p>Afin de debbuger, afficher les message de Log ou observer le chargement des classes Dojo de notre code, nous allons activer le plugin firebug avant d&#8217;exécuter le sample.<br />
Si vous ne l&#8217;avez pas, téléchargez firebug sur le site http://getfirebug.com/</p>
<h2>Exécution du sample</h2>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">http<span class="sy0">:</span><span class="co1">//localhost/tutoDojo/exemple1/searchWidget.html</span></pre></li></ol></div></div></div></div></div></div></div>


<p>vous devez obtenir le résultat suivant :<br />
<img src="http://www.dojotoolkit-fr.org/sites/default/files/firebug0_ex1.png" alt="Visualisation du chargement des classes de notre projet. Sur les 2 dernières lignes de la console, on observe que le constructeur et le template du widget sont bien chargés." title="Visualisation du chargement des classes de notre projet. Sur les 2 dernières lignes de la console, on observe que le constructeur et le template du widget sont bien chargés." /></p>
<h1>Internationalisation</h1>
<p>Gestion des langues pour le wording de notre widget.</p>
<h2>Modification du template</h2>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;search&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;floatLeft greyBorder&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;${id}Field&quot;</span></pre></li><li class="li1"><pre class="de1">         value<span class="sy0">=</span><span class="st0">&quot;&quot;</span></pre></li><li class="li1"><pre class="de1">         dojoAttachPoint<span class="sy0">=</span><span class="st0">&quot;searchField&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">/&gt;</span>  </pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;${id}Button&quot;</span></pre></li><li class="li1"><pre class="de1">       <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;btn greyBorder floatLeft&quot;</span> </pre></li><li class="li1"><pre class="de1">       label<span class="sy0">=</span><span class="st0">&quot;${_nls.locale.send}&quot;</span></pre></li><li class="li1"><pre class="de1">        title<span class="sy0">=</span><span class="st0">&quot;${_nls.locale.send}&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
4 et 8 : création d&#8217;identifiants uniques pour les éléments du template à partir de l&#8217;id du widget fixé dans le sample par exemple ${id}Field deviendra searchField<br />
6 : utilisation d&#8217;un attachPoint pour accéder directement au noeud DOM dans la classe : this.searchField<br />
10 et 11 : utilisation d&#8217;un fichier de wording Locale.js pour le label et le titre du bouton</p>
<p><strong>note : nous traiterons uniquement la langue française dans ce tutoriel </strong></p>
<h2>Modification de la classe</h2>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Widget : Search                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Author : Berthenet Cyril                   */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">provide</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Templated&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Widget&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Locale&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Class: Search */</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">declare</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span>dijit._Widget<span class="sy0">,</span> dijit._Templated<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Object : _nls</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp; stockage du wording */</span>  </pre></li><li class="li1"><pre class="de1">  _nls<span class="sy0">:</span><span class="br0">&#123;</span>locale<span class="sy0">:</span><span class="kw2">null</span><span class="br0">&#125;</span><span class="sy0">,</span>  </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* String: templatePath</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    chemin d'acces au template du widget */</span></pre></li><li class="li1"><pre class="de1">  templatePath<span class="sy0">:</span> dojo.<span class="me1">moduleUrl</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget&quot;</span><span class="sy0">,</span> <span class="st0">&quot;template/Search.html&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">   <span class="coMULTI">/* Function: constructor</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    Constructeur */</span></pre></li><li class="li1"><pre class="de1">  constructor<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::constructor&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>._nls.<span class="me1">locale</span><span class="sy0">=</span>dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1&quot;</span><span class="sy0">,</span><span class="st0">&quot;Locale&quot;</span><span class="br0">&#41;</span>.<span class="me1">searchWidget</span><span class="sy0">;</span>  </pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: destroy     </span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp; Destructeur */</span>  </pre></li><li class="li1"><pre class="de1">  destroy<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::destroy&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>.<span class="me1">inherited</span><span class="br0">&#40;</span><span class="st0">&quot;destroy&quot;</span><span class="sy0">,</span>arguments<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">	<span class="kw1">delete</span> <span class="kw1">this</span>._nls<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	<span class="coMULTI">/* Function: startup</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">	Methode publique appelee apres l'instanciation du widget et</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">	la creation de tous ses noeuds DOM dans document.body */</span>  </pre></li><li class="li1"><pre class="de1">  startup<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::startup&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>    </pre></li><li class="li1"><pre class="de1">	<span class="kw1">this</span>.<span class="me1">inherited</span><span class="br0">&#40;</span><span class="st0">&quot;startup&quot;</span><span class="sy0">,</span>arguments<span class="br0">&#41;</span><span class="sy0">;</span>    </pre></li><li class="li1"><pre class="de1">	<span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span> <span class="sy0">=</span> <span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span><span class="sy0">;</span>  </pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
13 : définit le dossier où se trouve le répertoire &laquo;&nbsp;nls&nbsp;&raquo; pour la gestion des langues (native language support).<br />
20 : objet qui contiendra l&#8217;ensemble du wording de notre widget.<br />
30 : chargement du wording correspondant à la langue du navigateur. Nous avons choisi ici d&#8217;optimiser le code en ne chargeant que le wording de notre widget (.searchWidget).<br />
35 : création d&#8217;un destructeur héritant des propriétés de _Widget.<br />
38 : destruction de l&#8217;objet contenant le wording<br />
44 à 48 : méthode startup() héritant des propriétés de _Widget. Elle est appelée après l&#8217;instanciation du widget dans le sample.<br />
47 : remplissage du champ de saisie avec une chaîne de caractères définie dans les locales. </p>
<p><strong>note : attention de bien ajouter une virgule entre chaque déclaration de fonctions (lignes 31 et 39).</strong></p>
<h2>Création des fichiers pour le wording</h2>
<h3>nls/fr/Locale.js :</h3>
<p>Ce fichier sera utilisé par Dojo si la langue de votre navigateur est le français :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;search&quot;</span><span class="sy0">:</span> <span class="st0">&quot;rechercher&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;send&quot;</span><span class="sy0">:</span> <span class="st0">&quot;lancer la recherche&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;text&quot;</span><span class="sy0">:</span> <span class="st0">&quot;saisir le texte ici...&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>nls/Locale.js :</h3>
<p>Dans le cas où votre navigateur n&#8217;est pas en langue française, Dojo utilisera ce fichier de langue. Il s&#8217;agit donc de mettre ici la langue la plus internationale possible (à savoir, l&#8217;anglais) :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;search&quot;</span><span class="sy0">:</span> <span class="st0">&quot;search&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;send&quot;</span><span class="sy0">:</span> <span class="st0">&quot;go&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;text&quot;</span><span class="sy0">:</span> <span class="st0">&quot;enter your keywords here...&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>note: les fichiers Locale.js doivent être complétés au format JSON.</strong></p>
<h2>Modification du sample</h2>
<h3>searchWidget.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> language<span class="sy0">=</span><span class="st0">&quot;javascript&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dojo.i18n&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
24 : importation de la classe Dojo &laquo;&nbsp;i18n&nbsp;&raquo; pour l&#8217;internationalisation. </p>
<h2>Test</h2>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/firebug1_ex1.png" alt="Chargement des locales du widget. " title="Chargement des locales du widget. " /></p>
<h1>Gestion d&#8217;un évènement &laquo;&nbsp;souris&nbsp;&raquo;</h1>
<p>Exécution de la recherche lors d&#8217;un clic de souris sur le bouton &laquo;&nbsp;loupe&nbsp;&raquo;</p>
<h3>Search.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;${id}Button&quot;</span> </pre></li><li class="li1"><pre class="de1">     <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;btn greyBorder floatLeft&quot;</span> </pre></li><li class="li1"><pre class="de1">     label<span class="sy0">=</span><span class="st0">&quot;${_nls.locale.send}&quot;</span> </pre></li><li class="li1"><pre class="de1">     title<span class="sy0">=</span><span class="st0">&quot;${_nls.locale.send}&quot;</span> </pre></li><li class="li1"><pre class="de1">     dojoAttachEvent<span class="sy0">=</span><span class="st0">&quot;onclick:_search&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
12 : ajout d&#8217;un évènement onclick sur le div que nous utiliserons comme bouton.</p>
<p><strong> note : attention en Dojo les méthodes pour la gestion des évènements DOM sont toujours écrites en minuscule : onclick </strong></p>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: _search</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    Methode privee executant la recherche */</span></pre></li><li class="li1"><pre class="de1">  _search<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::_search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">     <span class="kw1">if</span><span class="br0">&#40;</span> <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">!=</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span> <span class="sy0">&amp;&amp;</span></pre></li><li class="li1"><pre class="de1">         <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        console.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;lancer la recherche sur : &quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">else</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">      console.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;vous devez saisir une chaine de caracteres...&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
55 et 56 : on exécute la recherche si la chaîne de caractères est différente de celle affichée par défaut dans le champ de recherche et si la chaîne de caractères n&#8217;est pas vide</p>
<h1>Gestion d&#8217;un évènement &laquo;&nbsp;clavier&nbsp;&raquo;</h1>
<p>Exécution de la recherche lorsque l&#8217;utilisateur appuie sur la touche &laquo;&nbsp;entrée&nbsp;&raquo; dans le champ de saisie.</p>
<h3>Search.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;floatLeft greyBorder&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;${id}Field&quot;</span> </pre></li><li class="li1"><pre class="de1">         value<span class="sy0">=</span><span class="st0">&quot;&quot;</span> </pre></li><li class="li1"><pre class="de1">         dojoAttachPoint<span class="sy0">=</span><span class="st0">&quot;searchField&quot;</span></pre></li><li class="li1"><pre class="de1">         dojoAttachEvent<span class="sy0">=</span><span class="st0">&quot;onkeypress:_onKeyPress&quot;</span></pre></li><li class="li1"><pre class="de1"> <span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
7 : ajout d&#8217;un évènement &laquo;&nbsp;onkeypress&nbsp;&raquo; sur le champ de saisie</p>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: _onKeyPress</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    Methode privee executee lors de la saisie d'un caractere dans le champ</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;     de recherche */</span></pre></li><li class="li1"><pre class="de1">  _onKeyPress<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="coMULTI">/*Object*/</span>evt<span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::_onKeyPress&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">if</span><span class="br0">&#40;</span>evt.<span class="me1">keyCode</span> <span class="sy0">==</span> dojo.<span class="me1">keys</span>.<span class="me1">ENTER</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">      console.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;vous avez appuye sur la touche ENTREE&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      <span class="kw1">this</span>._search<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      dojo.<span class="me1">stopEvent</span><span class="br0">&#40;</span>evt<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      <span class="kw1">return</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
55 à 60 : exécute la recherche si l&#8217;utilisateur appuie sur la touche &laquo;&nbsp;entrée&nbsp;&raquo; lorsque le focus est sur le champ de saisie</p>
<h1>Suppression du contenu du champ de saisie</h1>
<p>Suppression du contenu par défaut du champ de saisie à la prise du focus.</p>
<h3>Search.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;floatLeft greyBorder&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;${id}Field&quot;</span> </pre></li><li class="li1"><pre class="de1">         value<span class="sy0">=</span><span class="st0">&quot;&quot;</span> </pre></li><li class="li1"><pre class="de1">         dojoAttachPoint<span class="sy0">=</span><span class="st0">&quot;searchField&quot;</span></pre></li><li class="li1"><pre class="de1">         dojoAttachEvent<span class="sy0">=</span><span class="st0">&quot;onkeypress:_onKeyPress,onclick:_clear&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">/&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
7 : ajout d&#8217;un évènement &laquo;&nbsp;onclick&nbsp;&raquo; sur le champ de saisie </p>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: _clear</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    Methode privee permettant d'effacer le texte du champ de saisie */</span></pre></li><li class="li1"><pre class="de1">  _clear<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::_clear&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">==</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">       <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
65 à 67 : si le texte dans le champ de saisie est identique au texte affiché par défaut, on efface le contenu </p>
<h1>Valeur par défaut</h1>
<p>Mettre une valeur par défaut dans le champ de recherche à l&#8217;initialisation du widget.</p>
<h3>searchWidget.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="kw2">var</span> _search <span class="sy0">=</span> <span class="kw2">new</span> exemple1.<span class="me1">widget</span>.<span class="me1">Search</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">      id<span class="sy0">:</span><span class="st0">&quot;search&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">      text<span class="sy0">:</span><span class="st0">&quot;test&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;search&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong> lignes :</strong><br />
34 : passage d&#8217;un argument type chaîne de caractères au widget </p>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: startup</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;   Methode publique appelee apres l'instanciation du widget et </span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;   la creation de tous ses noeuds DOM dans document.body */</span></pre></li><li class="li1"><pre class="de1">  startup<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::startup&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>.<span class="me1">inherited</span><span class="br0">&#40;</span><span class="st0">&quot;startup&quot;</span><span class="sy0">,</span>arguments<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">==</span><span class="kw2">null</span><span class="sy0">||</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">==</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">?</span></pre></li><li class="li1"><pre class="de1">                            <span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span><span class="sy0">:</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
46 : si aucune valeur n&#8217;a été passée en argument lors de l&#8217;instanciation du champ de saisie<br />
47 : on affiche la valeur définie dans le fichier de wording sinon on affiche la valeur passée en argument</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: _clear</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;   Methode privee permettant d'effacer le texte du champ de saisie */</span></pre></li><li class="li1"><pre class="de1">  _clear<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::_clear&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">if</span><span class="br0">&#40;</span> <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">==</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span> <span class="sy0">||</span></pre></li><li class="li1"><pre class="de1">	<span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">==</span><span class="kw1">this</span>.<span class="me1">text</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	<span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: _search</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;   Methode privee executant la recherche */</span></pre></li><li class="li1"><pre class="de1">  _search<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::_search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	<span class="kw1">if</span><span class="br0">&#40;</span>  <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">!=</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span> <span class="sy0">&amp;&amp;</span></pre></li><li class="li1"><pre class="de1">         <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">!=</span><span class="kw1">this</span>.<span class="me1">text</span> <span class="sy0">&amp;&amp;</span></pre></li><li class="li1"><pre class="de1">		 <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">         console.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;lancer la recherche sur : &quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">else</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">      console.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;vous devez saisir une chaine de caracteres...&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Sélection du moteur de recherche</h1>
<p>Sélection du moteur de recherche dans un bouton avec liste déroulante.</p>
<h2>Modification du template</h2>
<h3>Search.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;search&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;${id}Selector&quot;</span><span class="sy0">&gt;&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;floatLeft greyBorder&quot;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;${id}Field&quot;</span></pre></li><li class="li1"><pre class="de1">		 value<span class="sy0">=</span><span class="st0">&quot;&quot;</span> </pre></li><li class="li1"><pre class="de1">         dojoAttachPoint<span class="sy0">=</span><span class="st0">&quot;searchField&quot;</span> </pre></li><li class="li1"><pre class="de1">         dojoAttachEvent<span class="sy0">=</span><span class="st0">&quot;onkeypress:_onKeyPress,onclick:_clear&quot;</span> </pre></li><li class="li1"><pre class="de1">  <span class="sy0">/&gt;</span>  </pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;${id}Button&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;btn greyBorder floatLeft&quot;</span> </pre></li><li class="li1"><pre class="de1">       label<span class="sy0">=</span><span class="st0">&quot;${_nls.locale.send}&quot;</span> </pre></li><li class="li1"><pre class="de1">       title<span class="sy0">=</span><span class="st0">&quot;${_nls.locale.send}&quot;</span> </pre></li><li class="li1"><pre class="de1">       dojoAttachEvent<span class="sy0">=</span><span class="st0">&quot;onclick:_search&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>div<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
2 : ajout d&#8217;un div qui sera remplacé par le widget drop-down button de Dojo</p>
<h2>Modification du widget</h2>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Widget : Search                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Author : Berthenet Cyril                   */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/*                                            */</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/**********************************************/</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">provide</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Templated&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit._Widget&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.form.Button&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">require</span><span class="br0">&#40;</span><span class="st0">&quot;dijit.Menu&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Locale&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">requireLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* Class: Search */</span></pre></li><li class="li1"><pre class="de1">dojo.<span class="me1">declare</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span>dijit._Widget<span class="sy0">,</span>dijit._Templated<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#123;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Object: _nls</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    stockage du wording et des ressources du widget */</span></pre></li><li class="li1"><pre class="de1">  _nls<span class="sy0">:</span><span class="br0">&#123;</span>locale<span class="sy0">:</span><span class="kw2">null</span><span class="sy0">,</span>ressources<span class="sy0">:</span><span class="kw2">null</span><span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* String: templatePath</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    chemin d'acces vers le template du widget */</span></pre></li><li class="li1"><pre class="de1">  templatePath<span class="sy0">:</span> dojo.<span class="me1">moduleUrl</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget&quot;</span><span class="sy0">,</span> <span class="st0">&quot;template/Search.html&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Object: _dropdown</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp; bouton de selection du moteur de recherche */</span></pre></li><li class="li1"><pre class="de1">  _dropdown<span class="sy0">:</span><span class="kw2">null</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Array: _engines</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp; liste des moteurs de recherche */</span></pre></li><li class="li1"><pre class="de1">  _engines<span class="sy0">:</span><span class="kw2">null</span><span class="sy0">,</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: constructor</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    Constructeur */</span></pre></li><li class="li1"><pre class="de1">  constructor<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::constructor&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>._nls.<span class="me1">locale</span><span class="sy0">=</span>dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1&quot;</span><span class="sy0">,</span><span class="st0">&quot;Locale&quot;</span><span class="br0">&#41;</span>.<span class="me1">searchWidget</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>._nls.<span class="me1">ressources</span><span class="sy0">=</span></pre></li><li class="li1"><pre class="de1">     	dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1&quot;</span><span class="sy0">,</span><span class="st0">&quot;Ressources&quot;</span><span class="br0">&#41;</span>.<span class="me1">searchWidget</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">	<span class="kw1">this</span>._engines<span class="sy0">=</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">engines</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>._dropdown<span class="sy0">=</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: destroy</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    Destructeur */</span>  </pre></li><li class="li1"><pre class="de1">  destroy<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::destroy&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>.<span class="me1">inherited</span><span class="br0">&#40;</span><span class="st0">&quot;destroy&quot;</span><span class="sy0">,</span>arguments<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>._dropdown<span class="br0">&#41;</span><span class="br0">&#123;</span><span class="kw1">this</span>._dropdown.<span class="me1">destroy</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">delete</span> <span class="kw1">this</span>._nls<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">delete</span> <span class="kw1">this</span>._engines<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="coMULTI">/* Function: startup</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;    Methode publique appelee apres l'instanciation du widget et</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">	 la creation de tous ses noeuds DOM dans document.body */</span></pre></li><li class="li1"><pre class="de1">  startup<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::startup&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>.<span class="me1">inherited</span><span class="br0">&#40;</span><span class="st0">&quot;startup&quot;</span><span class="sy0">,</span>arguments<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">    <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">==</span><span class="kw2">null</span><span class="sy0">||</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">==</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">?</span></pre></li><li class="li1"><pre class="de1">                           <span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span><span class="sy0">:</span><span class="kw1">this</span>.<span class="me1">text</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">    <span class="kw2">var</span> menu <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">Menu</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	dojo.<span class="me1">forEach</span><span class="br0">&#40;</span><span class="kw1">this</span>._engines<span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>engine<span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">    	<span class="kw2">var</span> menuItem <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">MenuItem</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		label<span class="sy0">:</span> engine<span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">		onClick<span class="sy0">:</span> dojo.<span class="me1">hitch</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>param<span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">			<span class="kw1">this</span>._dropdown.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;label&quot;</span><span class="sy0">,</span>param<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">			<span class="kw1">this</span>._dropdown.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;engine&quot;</span><span class="sy0">,</span>param<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="br0">&#125;</span><span class="sy0">,</span>engine<span class="br0">&#41;</span></pre></li><li class="li1"><pre class="de1">	<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	menu.<span class="me1">addChild</span><span class="br0">&#40;</span>menuItem<span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="kw1">this</span>._dropdown <span class="sy0">=</span> <span class="kw2">new</span> dijit.<span class="me1">form</span>.<span class="me1">DropDownButton</span><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">     label<span class="sy0">:</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">	 engine<span class="sy0">:</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">	 dropDown<span class="sy0">:</span> menu</pre></li><li class="li1"><pre class="de1">   <span class="br0">&#125;</span><span class="sy0">,</span> dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">id</span><span class="sy0">+</span><span class="st0">&quot;Selector&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">   <span class="kw1">this</span>._dropdown.<span class="me1">startup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span><span class="sy0">,</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong> lignes : </strong><br />
13 : importation de la classe bouton de Dojo<br />
14 : importation de la classe menu de Dojo pour la liste déroulante du bouton<br />
17 : chargement des ressources<br />
24 : ajout des ressources à l&#8217;objet _nls<br />
32 : objet bouton<br />
36 : liste des moteurs de recherche<br />
43 : sélection des ressources en fonction de la langue du navigateur<br />
45 : création du tableau avec la liste des moteurs de recherche<br />
54 : destruction du bouton lors de la destruction de notre widget<br />
56 : destruction du tableau<br />
69 : instanciation d&#8217;un menu dojo<br />
71 : pour chacun des moteurs de recherche on va créer un item dans le menu<br />
75 à 78 : en cliquant sur un item du menu on va sélectionner un moteur et changer le label du bouton<br />
81 : ajout des items au menu<br />
85 à 89 : instanciation d&#8217;un bouton drop-down à partir du menu créé précédemment<br />
89 : le bouton va remplacer div &laquo;&nbsp;searchSelector&nbsp;&raquo; dans le template<br />
91 : affichage du bouton </p>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="coMULTI">/* Function: _search</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">&nbsp;   Methode privee executant la recherche */</span></pre></li><li class="li1"><pre class="de1">  _search<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;exemple1.widget.Search::_search&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">     <span class="kw1">if</span><span class="br0">&#40;</span>  <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">!=</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">text</span> <span class="sy0">&amp;&amp;</span></pre></li><li class="li1"><pre class="de1">         <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">!=</span><span class="kw1">this</span>.<span class="me1">text</span> <span class="sy0">&amp;&amp;</span> </pre></li><li class="li1"><pre class="de1">         <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">      <span class="kw2">var</span> url <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      <span class="kw2">var</span> fieldValue <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">searchField</span>.<span class="me1">value</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      <span class="kw2">var</span> engines <span class="sy0">=</span> <span class="kw1">this</span>._nls.<span class="me1">ressources</span>.<span class="me1">engines</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	  <span class="kw1">switch</span><span class="br0">&#40;</span><span class="kw1">this</span>._dropdown.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">'engine'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	  <span class="kw1">case</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">		url <span class="sy0">=</span> engines.<span class="me1">google</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="kw1">break</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      <span class="kw1">case</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">		url <span class="sy0">=</span> engines.<span class="me1">yahoo</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="kw1">break</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">      <span class="kw1">case</span> <span class="kw1">this</span>._engines<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">:</span></pre></li><li class="li1"><pre class="de1">		url <span class="sy0">=</span> engines.<span class="me1">wikipedia</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="kw1">break</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">	  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	  console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;url pour la recherche : &quot;</span><span class="sy0">,</span> url<span class="sy0">+</span>escape<span class="br0">&#40;</span>fieldValue<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>                        </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw1">else</span> <span class="br0">&#123;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
123 : url utilisée pour lancer la recherche<br />
124 : chaîne de caractère saisie dans le champ de recherche<br />
125 : url des moteurs de recherche sans les paramètres<br />
127 à 137 : construction de l&#8217;url en fonction du moteur sélectionné dans le bouton drop-down<br />
139 : affichage de l&#8217;url complète avec la chaîne à rechercher au format http </p>
<h2>Ajout des moteurs de recherche dans les locales</h2>
<h3>nls/Locale.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#91;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Google&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Yahoo&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Wikipedia&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;search&quot;</span><span class="sy0">:</span> <span class="st0">&quot;search&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;send&quot;</span><span class="sy0">:</span> <span class="st0">&quot;go&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;text&quot;</span><span class="sy0">:</span> <span class="st0">&quot;enter your keywords here...&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>nls/fr/Locale.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#91;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Google&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Yahoo&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Wikipedia&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;search&quot;</span><span class="sy0">:</span> <span class="st0">&quot;rechercher&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;send&quot;</span><span class="sy0">:</span> <span class="st0">&quot;lancer la recherche&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;text&quot;</span><span class="sy0">:</span> <span class="st0">&quot;saisir le texte ici...&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
4 à 8 : liste des moteurs de recherche disponibles dans notre tutoriel </p>
<h2>Ajout des url de recherche dans les ressources</h2>
<h3>nls/Ressources.js :</h3>
<p> :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;google&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://www.google.com/search?q=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;yahoo&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://uk.search.yahoo.com/search?p=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;wikipedia&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://en.wikipedia.org/wiki/Special:Recherche?search=&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"> <span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
4 à 8 : url anglaises de recherche sur les moteurs google, yahoo et wikipédia sans la chaîne à rechercher </p>
<h3>nls/fr/Ressources.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;google&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://www.google.fr/search?q=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;yahoo&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://fr.search.yahoo.com/search?p=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;wikipedia&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://fr.wikipedia.org/wiki/Special:Recherche?search=&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"> <span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
4 à 8 : url française de recherche sur les moteurs google, yahoo et wikipédia sans la chaîne à rechercher </p>
<h2>Ajout du style au sample de test</h2>
<h3>searchWidget.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>style type<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> title<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">    <span class="sy0">@</span><span class="kw2">import</span> <span class="st0">&quot;../dijit/themes/dijit.css&quot;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    <span class="sy0">@</span><span class="kw2">import</span> <span class="st0">&quot;../dijit/themes/nihilo/nihilo.css&quot;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;/</span>style<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
10 : ajout des thèmes css &laquo;&nbsp;dijit&nbsp;&raquo; et &laquo;&nbsp;nihilo&nbsp;&raquo; du framework Dojo pour le design des boutons</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>body <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;nihilo&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;search&quot;</span><span class="sy0">&gt;&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
54 : ajout de la class &laquo;&nbsp;nihilo&nbsp;&raquo; à la balise body du sample </p>
<h2>Définition du style du bouton à liste déroulante</h2>
<h3>search.css :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">.<span class="me1">floatLeft</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  float<span class="sy0">:</span>left<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">greyBorder</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  border<span class="sy0">:</span>1px solid #B0B0B0<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">search</span> <span class="br0">&#123;</span>  </pre></li><li class="li1"><pre class="de1">  height<span class="sy0">:</span>30px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">search</span> .<span class="me1">btn</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  background<span class="sy0">:</span> url<span class="br0">&#40;</span>..<span class="sy0">/</span>images<span class="sy0">/</span>loupe.<span class="me1">png</span><span class="br0">&#41;</span> no<span class="sy0">-</span>repeat<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  width<span class="sy0">:</span>20px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  height<span class="sy0">:</span>19px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  border<span class="sy0">-</span>left<span class="sy0">:</span>0px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  cursor<span class="sy0">:</span>pointer<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">search</span> input<span class="br0">&#123;</span>  </pre></li><li class="li1"><pre class="de1">  height<span class="sy0">:</span>21px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  font<span class="sy0">:</span>13px verdana<span class="sy0">,</span> sans<span class="sy0">-</span>serif<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitDropDownButton</span> .<span class="me1">dijitReset</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  height<span class="sy0">:</span>16px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitDropDownButton</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  float<span class="sy0">:</span> left<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  margin<span class="sy0">:</span><span class="nu0">0</span> <span class="sy0">!</span>important<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitDropDownButton</span> span <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  font<span class="sy0">:</span>10px verdana<span class="sy0">,</span> sans<span class="sy0">-</span>serif<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">.<span class="me1">nihilo</span> .<span class="me1">dijitButtonNode</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">  width<span class="sy0">:</span>80px<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  border<span class="sy0">:</span>1px solid #B0B0B0 <span class="sy0">!</span>important<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">  border<span class="sy0">-</span>right<span class="sy0">:</span>0px <span class="sy0">!</span>important<span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
8. ajout d&#8217;un espace entre le widget de recherche et la zone d&#8217;affichage<br />
21 à 35. surcharge du style &laquo;&nbsp;nihilo&nbsp;&raquo; de Dojo </p>
<h1>Affichage du résultat de la recherche</h1>
<p>Affichage du résultat de la recherche dans une iframe.</p>
<h2>Ajout de l&#8217;iframe au sample</h2>
<h3>searchWidget.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>body <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;nihilo&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>div id<span class="sy0">=</span><span class="st0">&quot;search&quot;</span><span class="sy0">&gt;&lt;/</span>div<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>iframe id<span class="sy0">=</span><span class="st0">&quot;viewer&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;viewer&quot;</span></pre></li><li class="li1"><pre class="de1">    src<span class="sy0">=</span><span class="st0">&quot;./static/empty.html&quot;</span></pre></li><li class="li1"><pre class="de1">    scrolling<span class="sy0">=</span><span class="st0">&quot;yes&quot;</span></pre></li><li class="li1"><pre class="de1">    height<span class="sy0">=</span><span class="st0">&quot;400&quot;</span></pre></li><li class="li1"><pre class="de1">    width<span class="sy0">=</span><span class="st0">&quot;100%&quot;</span></pre></li><li class="li1"><pre class="de1">    frameborder<span class="sy0">=</span><span class="st0">&quot;yes&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;/</span>iframe<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<h2>Définition du contenu par défaut de l&#8217;iframe</h2>
<h3>empty.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>html<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>body<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">    Le r<span class="sy0">&amp;</span>eacute<span class="sy0">;</span>sultat s<span class="st0">'affichera dans cette iframe</span></pre></li><li class="li1"><pre class="de1"><span class="st0">  &lt;/body&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">&lt;/html&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<h2>Affichage du résultat de la recherche dans l&#8217;iframe</h2>
<h3>Search.js :</h3>
<p>remplacer :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;url pour la recherche : &quot;</span><span class="sy0">,</span> url<span class="sy0">+</span>escape<span class="br0">&#40;</span>fieldValue<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>par :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;viewer&quot;</span><span class="br0">&#41;</span>.<span class="me1">src</span><span class="sy0">=</span>url<span class="sy0">+</span>escape<span class="br0">&#40;</span>fieldValue<span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<h1>Affichage des erreurs</h1>
<p>Création d&#8217;une popup pour l&#8217;affichage des erreurs.</p>
<h2>Affichage de la popup si la recherche ne peut être exécutée</h2>
<h3>Search.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="kw1">else</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">    <span class="kw2">var</span> dialogbox <span class="sy0">=</span> dijit.<span class="me1">byId</span><span class="br0">&#40;</span><span class="st0">&quot;dialogbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">    <span class="kw2">var</span> content <span class="sy0">=</span> <span class="kw1">this</span>._nls.<span class="me1">ressources</span>.<span class="me1">popup</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    dialogbox.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;title&quot;</span><span class="sy0">,</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">popup</span>.<span class="me1">title</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">    dialogbox.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;content&quot;</span><span class="sy0">,</span>dojo.<span class="me1">string</span>.<span class="me1">substitute</span><span class="br0">&#40;</span>content<span class="sy0">,</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        message<span class="sy0">:</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">popup</span>.<span class="me1">message</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        btnLabel<span class="sy0">:</span><span class="kw1">this</span>._nls.<span class="me1">locale</span>.<span class="me1">popup</span>.<span class="me1">btnLabel</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>                        </pre></li><li class="li1"><pre class="de1">    dialogbox.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>  </pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
144 : on stock le noeud DOM du sample sur lequel on affichera la boîte de dialogue<br />
146 : wording correspondant à la popup<br />
147 : titre de la popup<br />
148 à 151 : ajout du contenu sous forme d&#8217;un template<br />
153 : affichage de la boîte de dialogue </p>
<h2>Ajout des propriétés de la popup dans le wording</h2>
<h3>nls/Locale.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#91;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Google&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Yahoo&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Wikipedia&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;popup&quot;</span><span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;btnLabel&quot;</span><span class="sy0">:</span><span class="st0">&quot;OK&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;message&quot;</span><span class="sy0">:</span> <span class="st0">&quot;you must write more than one character&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;title&quot;</span><span class="sy0">:</span> <span class="st0">&quot;Error&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;search&quot;</span><span class="sy0">:</span> <span class="st0">&quot;search&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;send&quot;</span><span class="sy0">:</span> <span class="st0">&quot;go&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;text&quot;</span><span class="sy0">:</span> <span class="st0">&quot;enter your keywords here...&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>nls/fr/Locale.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#91;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Google&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Yahoo&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;Wikipedia&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#93;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;popup&quot;</span><span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;btnLabel&quot;</span><span class="sy0">:</span><span class="st0">&quot;OK&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;message&quot;</span><span class="sy0">:</span> <span class="st0">&quot;Veuillez saisir au moins un caract<span class="es0">\u</span>00e8re&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;title&quot;</span><span class="sy0">:</span> <span class="st0">&quot;Erreur&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;search&quot;</span><span class="sy0">:</span> <span class="st0">&quot;rechercher&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;send&quot;</span><span class="sy0">:</span> <span class="st0">&quot;lancer la recherche&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;text&quot;</span><span class="sy0">:</span> <span class="st0">&quot;saisir le texte ici...&quot;</span></pre></li><li class="li1"><pre class="de1">  <span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
10 : label du bouton de la boîte de dialogue<br />
11 : message d&#8217;erreur<br />
12 : titre de la popup</p>
<p><strong>note : encodage des accents en unicode.</strong></p>
<h2>Création du template de la popup dans les ressources</h2>
<h3>nls/Ressources.js :</h3>
<p> :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;google&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://www.google.com/search?q=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;yahoo&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://uk.search.yahoo.com/search?p=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;wikipedia&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://en.wikipedia.org/wiki/Special:Recherche?search=&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;popup&quot;</span> <span class="sy0">:</span> <span class="st0">&quot;&lt;table&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">			&lt;td&gt;${message}&lt;/td&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;/tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">			&lt;td align=<span class="es0">\&quot;</span>center<span class="es0">\&quot;</span>&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">				&lt;button dojoType=<span class="es0">\&quot;</span>dijit.form.Button<span class="es0">\&quot;</span> type=<span class="es0">\&quot;</span>submit<span class="es0">\&quot;</span>&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">					${btnLabel}<span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">				&lt;/button&gt;&lt;/td&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;/tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">	&lt;/table&gt;&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"> <span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<h3>nls/fr/Ressources.js :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="br0">&#40;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">  <span class="st0">&quot;searchWidget&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;engines&quot;</span> <span class="sy0">:</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;google&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://www.google.fr/search?q=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;yahoo&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://fr.search.yahoo.com/search?p=&quot;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">        <span class="st0">&quot;wikipedia&quot;</span><span class="sy0">:</span> <span class="st0">&quot;http://fr.wikipedia.org/wiki/Special:Recherche?search=&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></pre></li><li class="li1"><pre class="de1">    <span class="st0">&quot;popup&quot;</span> <span class="sy0">:</span> <span class="st0">&quot;&lt;table&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">			&lt;td&gt;${message}&lt;/td&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;/tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">			&lt;td align=<span class="es0">\&quot;</span>center<span class="es0">\&quot;</span>&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">				&lt;button dojoType=<span class="es0">\&quot;</span>dijit.form.Button<span class="es0">\&quot;</span> type=<span class="es0">\&quot;</span>submit<span class="es0">\&quot;</span>&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">					${btnLabel}<span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">				&lt;/button&gt;&lt;/td&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">		&lt;/tr&gt; <span class="es0">\</span></span></pre></li><li class="li1"><pre class="de1"><span class="st0">	&lt;/table&gt;&quot;</span></pre></li><li class="li1"><pre class="de1">    <span class="br0">&#125;</span> </pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes :</strong><br />
9 à 20 : template de la boîte de dialogue. Le message d&#8217;erreur et le label du bouton peuvent être modifiés dynamiquement.</p>
<p><strong>note : par simplicité, nous avons basé notre template sur un tableau HTML. Afin de respecter les normes WAI (Web Accessibility Initiative) pour l&#8217;accessibilité, préférez des balises div pour vos templates.</strong></p>
<h2>Ajout de la boîte de dialogue au sample de test</h2>
<h3>searchWidget.html :</h3>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;!</span>DOCTYPE HTML <span class="kw2">PUBLIC</span> <span class="st0">&quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span><span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>html<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">  <span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">    <span class="sy0">&lt;</span>meta http<span class="sy0">-</span>equiv<span class="sy0">=</span><span class="st0">&quot;Content-Type&quot;</span> content<span class="sy0">=</span><span class="st0">&quot;text/html; charset=&quot;</span>utf<span class="sy0">-</span><span class="nu0">8</span><span class="st0">&quot; /&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">	&lt;title&gt;Search&lt;/title&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;link rel=&quot;</span>stylesheet<span class="st0">&quot; type=&quot;</span>text<span class="sy0">/</span>css<span class="st0">&quot; href=&quot;</span>.<span class="sy0">/</span>css<span class="sy0">/</span>search.<span class="me1">css</span><span class="st0">&quot; /&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;style type=&quot;</span>text<span class="sy0">/</span>css<span class="st0">&quot; title=&quot;</span>text<span class="sy0">/</span>css<span class="st0">&quot;&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">      @import &quot;</span>..<span class="sy0">/</span>dijit<span class="sy0">/</span>themes<span class="sy0">/</span>dijit.<span class="me1">css</span><span class="st0">&quot;;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">      @import &quot;</span>..<span class="sy0">/</span>dijit<span class="sy0">/</span>themes<span class="sy0">/</span>nihilo<span class="sy0">/</span>nihilo.<span class="me1">css</span><span class="st0">&quot;;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;/style&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;script&gt; </span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">	  var djConfig = {</span></pre></li><li class="li1"><pre class="de1"><span class="st0">        parseOnLoad: false,</span></pre></li><li class="li1"><pre class="de1"><span class="st0">        isDebug: true</span></pre></li><li class="li1"><pre class="de1"><span class="st0">      }; </span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;script type=&quot;</span>text<span class="sy0">/</span>javascript<span class="st0">&quot; src=&quot;</span>..<span class="sy0">/</span>dojo<span class="sy0">/</span>dojo.<span class="me1">js</span><span class="st0">&quot; charset=&quot;</span>utf<span class="sy0">-</span><span class="nu0">8</span><span class="st0">&quot;&gt;&lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">	&lt;script type=&quot;</span>text<span class="sy0">/</span>javascript<span class="st0">&quot; language=&quot;</span>javascript<span class="st0">&quot;&gt;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">      dojo.require(&quot;</span>dojo.<span class="me1">i18n</span><span class="st0">&quot;);</span></pre></li><li class="li1"><pre class="de1"><span class="st0">      dojo.require(&quot;</span>dijit.<span class="me1">Dialog</span><span class="st0">&quot;);</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">	  dojo.require(&quot;</span>exemple1.<span class="me1">widget</span>.<span class="me1">Search</span><span class="st0">&quot;);</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">      dojo.addOnLoad(init);</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">      function init(){ </span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">        var _search = new exemple1.widget.Search({</span></pre></li><li class="li1"><pre class="de1"><span class="st0">          id:&quot;</span>search<span class="st0">&quot;,</span></pre></li><li class="li1"><pre class="de1"><span class="st0">          text:&quot;</span>toto<span class="st0">&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">        }, dojo.byId(&quot;</span>search<span class="st0">&quot;));                                </span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">        _search.startup();</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">        var dialog = new dijit.Dialog({</span></pre></li><li class="li1"><pre class="de1"><span class="st0">			title: &quot;</span>title<span class="st0">&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">		}, dojo.byId(&quot;</span>dialogbox<span class="st0">&quot;));</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">		dialog.startup();                                        </span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">      } </span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;/script&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">  &lt;/head&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">  &lt;body class=&quot;</span>nihilo<span class="st0">&quot;&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;div id=&quot;</span>search<span class="st0">&quot;&gt;&lt;/div&gt;    </span></pre></li><li class="li1"><pre class="de1"><span class="st0">	&lt;iframe id=&quot;</span>viewer<span class="st0">&quot; </span></pre></li><li class="li1"><pre class="de1"><span class="st0">            name=&quot;</span>viewer<span class="st0">&quot; </span></pre></li><li class="li1"><pre class="de1"><span class="st0">            src=&quot;</span>.<span class="sy0">/</span>static<span class="sy0">/</span>empty.<span class="me1">html</span><span class="st0">&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">            scrolling=&quot;</span>yes<span class="st0">&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">            height=&quot;</span><span class="nu0">400</span><span class="st0">&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">            width=&quot;</span><span class="nu0">100</span><span class="sy0">%</span><span class="st0">&quot;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">            frameborder=&quot;</span>yes<span class="st0">&quot;&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;/iframe&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">    &lt;div id=&quot;</span>dialogbox<span class="st0">&quot;&gt;&lt;/div&gt;  </span></pre></li><li class="li1"><pre class="de1"><span class="st0">&lt;/body&gt;</span></pre></li><li class="li1"><pre class="de1"><span class="st0">&lt;/html&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p><strong>lignes : </strong><br />
29 : importation de la classe Dialog de la librairie dijit.<br />
44 à 46 : instanciation de la boîte de dialogue.<br />
48 : affichage de la boîte de dialogue.<br />
64 : div qui sera remplacé par le widget Dialog. </p>
<h1>Résultat final</h1>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/widget2_ex1.png" alt="Résultat final." title="Résultat final." /></p>
<hr />
Berthenet Cyril</p>
<p>http://www.life-behind-the-mirror.com/codes/tutoDojo/myFirstWidget.php</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2009/03/tutoriel-mon-premier-widget-dojo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tracer les dojo.publish pour faciliter le développement et le debug</title>
		<link>http://www.dojotoolkit-fr.org/2009/03/tracer-les-dojo-publish-pour-faciliter-le-developpement-et-le-debug/</link>
		<comments>http://www.dojotoolkit-fr.org/2009/03/tracer-les-dojo-publish-pour-faciliter-le-developpement-et-le-debug/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 10:17:23 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Un petit bookmarklet qui va vous faciliter la programmation et le debug des widgets qui utilisent fortement le système de publication d'évènement de Dojo.
 <a href="http://www.dojotoolkit-fr.org/2009/03/tracer-les-dojo-publish-pour-faciliter-le-developpement-et-le-debug/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--break--><br />
Je rebondis sur un article publié ici http://www.vodori.com/vodori/archives/277 pour vous proposer moi aussi un petit bookmarklet qui va vous permettre d&#8217;afficher dans la console de firebug tous les dojo.publish qui seront exécuté dans votre application Web.</p>
<h1>Installer le bookmarklet</h1>
<p>Pour installer le bookmarklet, faites simplement glisser le lien suivant dans vos marques-pages :<br />
<a href="javascript:(function(){if(typeof dojo=='undefined'){console.error('Dojo est ind\u00e9fini');return;}else{dojo['connect'](dojo,'publish',function() {console.warn('dojo. publish(', arguments,')');});console.info('Trace de dojo. publish activ\u00e9e');};})();">Afficher les dojo. publish</a>.</p>
<h1>L&#8217;utiliser</h1>
<p>Une fois installé, l&#8217;utilisation est simple. Il vous suffit de charger la page qui utilise Dojo et de cliquer sur le marque-page que vous venez d&#8217;ajouter.</p>
<h1>Comprendre le bookmarklet</h1>
<p>Celui-ci se décompose en 2 parties :</p>
<ul>
<li> Ce qui transforme votre code javascript en bookmarklet :


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">javascript<span class="sy0">:</span><span class="br0">&#40;</span></pre></li><li class="li1"><pre class="de1"><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1"><span class="coMULTI">/* code qui va activer les traces*/</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


</li>
<li>Et ce qui va ajouter des informations de trace aux méthodes Dojo.</li>
</ul>
<h1>Tracer les méthodes de Dojo</h1>
<p>Pour tracer une méthode Dojo, nous allons simplement utiliser un dojo.connect et ajouter une ligne dans la console.<br />
Pour notre bookmarklet, c&#8217;est dojo.publish qui nous intéresse donc :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">connect</span><span class="br0">&#40;</span>dojo<span class="sy0">,</span><span class="st0">'publish'</span><span class="sy0">,</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	console.<span class="me1">warn</span><span class="br0">&#40;</span><span class="st0">'dojo.publish('</span><span class="sy0">,</span> arguments<span class="sy0">,</span><span class="st0">')'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>De la même façon, vous pourriez afficher des traces à chaque fois qu&#8217;un dojo.connect est exécuté :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">connect</span><span class="br0">&#40;</span>dojo<span class="sy0">,</span><span class="st0">'connect'</span><span class="sy0">,</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	console.<span class="me1">warn</span><span class="br0">&#40;</span><span class="st0">'dojo.connect('</span><span class="sy0">,</span> arguments<span class="sy0">,</span><span class="st0">')'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Note : Afin d&#8217;éviter les fuites mémoire, il est important que tous les dojo.connect de votre application soit ensuite déconnectés.<br />
Ces traces peuvent donc vous aider à vérifier que chaque dojo.connect a son opposé (dojo.disconnect).</p>
<h1>Le code complet du bookmarklet</h1>
<p>Finalement, votre bookmarklet devrait ressembler à ceci :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">javascript<span class="sy0">:</span><span class="br0">&#40;</span></pre></li><li class="li1"><pre class="de1"><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	dojo.<span class="me1">connect</span><span class="br0">&#40;</span>dojo<span class="sy0">,</span><span class="st0">'publish'</span><span class="sy0">,</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		console.<span class="me1">warn</span><span class="br0">&#40;</span><span class="st0">'dojo.publish('</span><span class="sy0">,</span> arguments<span class="sy0">,</span><span class="st0">')'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">	<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Un peu de fioriture plus loin, votre bookmarklet est fin prêt :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">javascript<span class="sy0">:</span><span class="br0">&#40;</span></pre></li><li class="li1"><pre class="de1"><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">typeof</span> dojo<span class="sy0">==</span><span class="st0">'undefined'</span><span class="br0">&#41;</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		console.<span class="me1">error</span><span class="br0">&#40;</span><span class="st0">'Dojo est ind<span class="es0">\u</span>00e9fini'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="kw1">return</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">	<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		dojo.<span class="me1">connect</span><span class="br0">&#40;</span>dojo<span class="sy0">,</span><span class="st0">'publish'</span><span class="sy0">,</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">			console.<span class="me1">warn</span><span class="br0">&#40;</span><span class="st0">'dojo.publish('</span><span class="sy0">,</span> arguments<span class="sy0">,</span><span class="st0">')'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		console.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">'Trace de dojo.publish activ<span class="es0">\u</span>00e9e'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">	<span class="br0">&#125;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Il ne reste plus qu&#8217;a adapter ceci selon vous besoin pour créer vos propres bookmarklet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2009/03/tracer-les-dojo-publish-pour-faciliter-le-developpement-et-le-debug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Démystifier Dojo Toolkit</title>
		<link>http://www.dojotoolkit-fr.org/2009/02/demystifier-dojo-toolkit/</link>
		<comments>http://www.dojotoolkit-fr.org/2009/02/demystifier-dojo-toolkit/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 08:45:58 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dojo Toolkit existe depuis plus de 4 ans et a subît des changements significatifs, certains énormes d'autres plus petit, pour devenir un grand toolkit JavaScript. Cet article a pour but de supprimer les mythes et a priori (aussi grotesque que faux) qui entourent Dojo depuis le début de son développement
 <a href="http://www.dojotoolkit-fr.org/2009/02/demystifier-dojo-toolkit/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--break--><br />
Traduit de : http://www.sitepen.com/blog/2008/10/27/debunking-dojo-toolkit-myths/</p>
<p><strong><a href="http://dojotoolkit.org/">Dojo Toolkit</a> existe depuis plus de 4 ans et a subît des changements significatifs, certains énormes d&#8217;autres plus petit, pour devenir un grand toolkit JavaScript. Cet article a pour but de supprimer les mythes et a priori (aussi grotesque que faux) qui entourent Dojo depuis le début de son développement.</strong></p>
<h2>Dojo n&#8217;est pas documenté</h2>
<p>Loin s&#8217;en faut ! Au tout départ, la documentation de Dojo était le code source. Aujourd&#8217;hui nous avons une énorme quantité d&#8217;information disponible, et nous travaillons sur une meilleure organisation ainsi qu&#8217;un affinage de ces dernières.<br />
Pour commencer, vous pouvez regarder <a href="http://sitepen.com/labs/guides/?guide=DojoQuickStart">Dojo QuickStart Guide</a>, <a href="http://api.dojotoolkit.org/">Dojo API Viewer</a> et le <a href="http://docs.dojocampus.org/">projet de documentation de Dojo Campus</a> (qui remplacera prochainement le vénérable <a href="http://dojotoolkit.org/book">Dojo Book</a>)<br />
Vous voulez une doc hors-ligne ? Utilisez Dojo Toolbox pour le moment et bientôt le projet de documentation de Dojo Campus sera aussi disponible.<br />
Besoin d&#8217;un livre ? Vous pouvez choisir parmi <a href="http://astore.amazon.com/dylanschie-20">4 grands livres traitants exclusivement de Dojo</a>.<br />
Besoin d&#8217;un tutoriel ou d&#8217;un article ? Essayez l&#8217;un des <a href="http://dojotoolkit.org/key-links">cent et quelques liens</a>.<br />
Vous voulez voir des démos ? Faites un tour sur le <a href="http://dojocampus.org/explorer/">Dojo Campus Feature Explorer</a> ou sur le <a href="http://dojotoolkit.org/spotlight">Dojo Spotlight</a>.<br />
Besoin de travaux pratiques ? <a href="http://sitepen.com/training">Contactez l&#8217;assistance SitePen</a>.<br />
Est-ce que Dojo va continuer de simplifier et d&#8217;enrichir sa documentation ? Absolument, et nous apprécierons toutes <a href="http://docs.dojocampus.org/">votre aide et vos retours</a>.</p>
<h2>Dojo est lent</h2>
<p>Toutes les librairies JavaScript peuvent être <a href="http://www.jedi.be/blog/2008/10/10/is-your-jquery-or-javascript-getting-slow-or-bad-performance/">lentes si elles sont mal utilisées</a>. Durant la période Dojo 0.4, il était très simple de créer une application lente car le parseur était activé par défaut et qu&#8217;il incluait tout un tas de fichiers externes et de codes source.<br />
Aujourd&#8217;hui, le parseur est uniquement dans Dijit et n&#8217;est le problème que de ce dernier. Dojo est différent de Dijit, et aujourd&#8217;hui vous ne subissez les baisses de performance du parseur (qui sont bien plus faible qu&#8217;a l&#8217;époque de Dojo 0.4) que si vous avez besoin d&#8217;un environnement de widget complet.</p>
<p>Depuis les 18 derniers mois, Dojo a rendu simple la création de chose légère et rapide. Toutes les fonctionnalités de qui était dans Dojo 0.4 sont au moins 100% plus rapide dans le Dojo actuel, et certaines parties sont même 1000% plus rapide, voire plus. Les mesures de performance effectués avec <a href="http://jamesdonaghue.com/static/peppy/profile/slickspeed/">SlickSpeed test suite</a> sur les requêtes montre que <a href="http://alex.dojotoolkit.org/2008/08/dojos-query-system-no-really-its-that-fast/">dojo.query est aussi rapide, sinon plus</a>, que la plus part des autres toolkits majeurs.</p>
<p>Et Dojo offre une pléthore de <a href="http://tagneto.blogspot.com/2008/10/dojo-12-loader-and-build-system.html">techniques et de suggestions d&#8217;optimisation</a> pour faire gagner quelques Ko et millisecondes à votre code source. Être performant, fiable et cross-browser est un art guidé par les données qui requiert de laisser beaucoup d&#8217;idées reçues devant la porte, d&#8217;écouter les données, et faire des compromis si nécessaire.</p>
<h2>Dojo est gonflé, plus gros et plus complexe que Prototype, jQuery, MooTools, YUI, etc.</h2>
<p>Dojo est conçu pour vous fournir les outils nécessaires pour résoudre de problèmes complexes, tout en gardant simple les choses simples. Ce mythe existe uniquement parce que nous utilisons un système que packaging et que nous encourageons les développeurs à utiliser notre système de packaging pour optimiser les performances. Si vous téléchargez le code source complet de Dojo vous allez voir beaucoup de fichiers. De tous ces fichiers, vous ne devez en inclure qu&#8217;un seul avec une balise script dans votre code.<br />
Nous avons rendu simple vos premiers pas en permettant d&#8217;inclure simplement dojo.js depuis les serveurs de contenu AOL ou Google. Nous appelons <a href="http://dev.aol.com/dojo">dojo.js</a> &laquo;&nbsp;Dojo Base&nbsp;&raquo;. Il fait 26Ko (gzippé) et est comparable en taille, caractéristique, performances et fonctionnalités aux autres toolkit majeur.<br />
Dojo Base fourni un set de fonctionnalités extrêmement riche et léger, utile à tous les développeurs web. Je pense qu&#8217;il vous sera difficile de trouver plus de fonctionnalités et de puissance dans moins de Ko.<br />
Si 26Ko est encore trop vous pouvez aussi utiliser <a href="http://www.sitepen.com/blog/2008/07/01/dojo-in-6k/">une version réduite de Dojo qui tient dans 5.5 Ko</a>. Elle n&#8217;intègre que le module de chargement d&#8217;éléments de Dojo puis ajoute au fur et à mesure les fonctionnalités exactes dont vous avez besoin. Vous pouvez aussi prendre le <a href="http://www.sitepen.com/blog/2008/04/02/dojo-mini-optimization-tricks-with-the-dojo-toolkit"/>Dojo SDK complet et le réduire à ce dont vous avez besoin</a>.</p>
<p>Dans un navigateur, toutes les fonctionnalités ajoutent une légère baisse de performance, c&#8217;est pourquoi Dojo offre la flexibilité nécessaire pour n&#8217;inclure que ce dont vous avez besoin et rien de plus tout en offrant une énorme quantité de fonctionnalités, de manière organisé et cohérente. Si vous désirez utiliser plus de fonctionnalités de Dojo &#8212; c&#8217;est complètement optionnel &#8212; vous n&#8217;avez qu&#8217;à utiliser dojo.require pour ajouter ce dont vous avez besoin. La structure des classes, dans la plus part des cas, suit la structure logique des répertoires de votre projet. Par exemple, dijit.foo.Bar devrait se trouver dans /dijit/foo/Bar.js.</p>
<p>Ce système simple <a href="http://api.dojotoolkit.org/jsdoc/dojo/1.2/dojo.provide">de namespace et d&#8217;inclusion</a> facilite l&#8217;utilisation des codes Dojo et de ceux qui suivent ces règles. Ceci facilite la création d&#8217;applications avancées et puissantes autant que celle de fonctionnalités simples telles que le <a href="http://www.sitepen.com/blog/2008/06/23/replacing-the-flash-flickr-badge-with-dojo/">Dojo Flickr Badge</a>.</p>
<p>Le système de package Dojo, s&#8217;il ajoute une légère complexité qui ne prend que 2 minutes à comprendre pour un nouveau développeur, le rend plus lisible et organisé. Il vous offre aussi la capacité de gérer simplement votre code quand la quantité de dépendance et d&#8217;inclusions auraient pu le rendre peu maniable. Dojo est une librairie et se comporte comme tel. Comme Java et beaucoup d&#8217;autre langage, nous n&#8217;incluons automatiquement que le strict minimum de code, et mettons a votre disposition une quantité d&#8217;autre package que vous pouvez inclure manuellement.<br />
A l&#8217;intérieur de Dojo se trouve divers framework. Le plus largement connu étant Dijit. Les widgets de Dijit ont des dépendances avec le code du framework. Cette sorte de longue chaine de dépendance est rare dans Dojo, mais existe lorsque l&#8217;on a besoin de fournir des fonctionnalités plus riche.</p>
<h2>Dojo à besoin de Java</h2>
<p>Pas du tout, même s&#8217;il est vrai que le SDK complet de Dojo inclut quelques fichier jar.<br />
En plus des capacités natives au navigateur, Dojo fourni de manière complètement optionnelles des outils (basé sur Rhino) d&#8217;optimisation de votre code, pour gagner en performance lors du processus de packaging. <a href="http://www.mozilla.org/rhino/">Rhino</a> est le moteur JavaScript de la Fondation Mozilla, implémenté en Java.<br />
Pourquoi voulons-nous toujours &laquo;&nbsp;builder&nbsp;&raquo; le JavaScript ? Pour réduire la taille de votre code, optimiser le cache, et réduire le nombre d&#8217;appel au serveur. Par exemple, vous pouvez fusionner les règles CSS, et incorporer les ressources HTML utilisées par les widgets directement dans le code JavaScript, en tant que chaine de caractère. Tous ça pour réduire le nombre de requête HTTP, la taille des fichiers et bien plus.</p>
<h2>Dojo est verbeux et est &laquo;&nbsp;du Java pour JavaScript&nbsp;&raquo;</h2>
<p>La seule chose dans Dojo qui ressemble à Java est notre désir d&#8217;inclure les éléments dans des namespaces. Notre structure de librairie encourage toujours la brièveté d&#8217;écriture, en mettant les fonctionnalités de Dojo Base directement dans le namespace Dojo*.<br />
Dojo préfère dojo.byId et dojo.query plutôt que &#36;, <a href="http://www.sitepen.com/blog/2008/03/14/dojo-storage-and-dojo-bling/">bien qu&#8217;il soit très facile d&#8217;utiliser votre propre fonction si vous le désirez</a>.</p>
<p>Dojo préfère tout placer dans des namespaces pour réduire notre présence dans le namespace global, et ceci afin de permettre à Dojo de coexister avec d&#8217;autres librairies ou bout de code sans jamais avoir de problème de conflit de nommage. De plus, Dojo minimise la surcharge de fonction, ainsi l&#8217;utilisation complète des APIs n&#8217;entrave pas la maintenance du code.<br />
Par souci de rapidité, tous ce qui est fortement utilisé est typiquement dans le namespace le plus haut d&#8217;une manière courte et simple à retenir, exemple dojo.connect et dojo.attr. La concision de notre API et la structure des namespaces ont tendance à étonner les gens qui n&#8217;ont pas utilisé Dojo depuis la 0.4 ou même avant.<br />
Chaque composant est une &laquo;&nbsp;chose&nbsp;&raquo; distincte et nos seules options sont de l&#8217;adresser dans le namespace global (ce qui pourrait engendrer des conflits) ou de l&#8217;accrocher dans Dojo.<br />
On peut admettre que certains toolkit n&#8217;ont pas de namespace simplement parce qu&#8217;ils ne fournissent pas assez de code pour en avoir besoin.<br />
Les développeurs Java aiment vraiment Dojo (ou <a href="http://directwebremoting.org/">DWR</a> ou même GWT ou Ext), vraisemblablement pour la largeur, la profondeur, et l&#8217;organisation des ses API.</p>
<p>Une grande partie de l&#8217;inspiration de Dojo est dérivée du Python, <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">d&#8217;AOP</a>, de PHP, de Java, ainsi que variété de construction fonctionnelle telle que hitch, mixins, delegation, et plus. De plus, nous refusons explicitement l&#8217;utilisation de quelconques patterns provenant d&#8217;autre langage, et nous faisons d&#8217;énorme effort pour faire de notre JavaScript un pattern unique.</p>
<p>Les constructeurs du Toolkit tels que dojo.declare() peuvent être considéré comme identique à Java, quoi que la plus part des librairies ont une sorte de modèle de constructeur et d&#8217;héritage. Dojo tire avantage de la flexibilité du JavaScript plutôt que d&#8217;essayer de fournir une gestion spécifique issue d&#8217;un autre langage que le JavaScript.</p>
<h2>Dojo est uniquement utile pour les applications d&#8217;entreprise et surement pas pour de petits sites ou des blogs</h2>
<p>Ce mythe existe parce que Dojo n&#8217;était pas aussi petit et simple dans Dojo 0.4 qu&#8217;il ne l&#8217;est aujourd&#8217;hui. Dojo Base fait 26Ko gzippé et Dojo Mini descend jusqu&#8217;à 5.5Ko. Les deux disposent de la même facilité d&#8217;utilisation des API, ce qui rend possible de faire facilement des améliorations progressives, du JavaScript non intrusif, de la récupération d&#8217;événements, de l&#8217;Ajax, des animations, du DOM, du querying, et bien plus.</p>
<h2>Dojo n&#8217;est pas pour des applications sur une seule page</h2>
<p>Les développeurs de Cappuccino, Objective-J et Sprout Core, argue qu&#8217;ils ont créé leur toolkit parce que les autres ne sont pas optimisé pour de réelle application dans un navigateur. Selon nous, c&#8217;est n&#8217;importe quoi.<br />
Dojo est grandement utilisé dans des applications riches par une foule de société comme <a href="http://www.sun.com/software/convergence/">Sun Convergence</a>, <a href="http://www.webex.com/partners/webex-connect.html">WebEx Connect de Cisco</a> et <a href="http://www.projectzero.org/">Project Zero d&#8217; IBM</a>. Dojo est aussi très fortement utilisé pour créer des applications intranet, dans ce que j&#8217;appelle <a href="http://www.sitepen.com/blog/2007/04/19/ajax-dark-matter/">Ajax Dark Matter</a>.</p>
<h2>Dojo n&#8217;est pas pour les applications multipages et pour les sites web</h2>
<p>Alors qu&#8217;il est peu probable qu&#8217;une personne croit en ce mythe et au précédent en même temps, ce point de vue n&#8217;est que perspective. Étant donné la taille du toolkit, certaines personnes ont supposée que Dojo ne devrait pas être utilisé pour des sites multipages, mais les options étendues d&#8217;optimisation de Dojo font de ce cas d&#8217;usage une force. <a href="http://www.sitepen.com/blog/2007/11/11/eye-fi-launches/">L&#8217;Eye-Fi Manager</a> ainsi que le <a href="http://dojofoundation.org/">site de la fondation Dojo</a> lui-même montre combien sont rapides (à la fois d&#8217;éxécution et de chargement) ces applications et sites.</p>
<h2>Dojo c&#8217;est juste pour les widgets</h2>
<p>Dojo à un système de widgets hautement flexible, et extrêmement rapide appelé <a href="http://dojotoolkit.org/projects/dijit">Dijit</a>. Il s&#8217;agit d&#8217;un package complètement optionnel pour les gens qui ont besoin d&#8217;utiliser et de créer leurs propres widgets. C&#8217;est conçus pour répondre à une variété de cas d&#8217;utilisation de manière modulaire, en incluant l&#8217;accessibilité, l&#8217;internationalisation, la mise en page, la gestion de conteneur, les templates et bien plus. Le concept sous-jacent est que chaque widgets est simplement un template HTML, un template CSS et un fichier JavaScript pour la logique.<br />
La plus part des utilisateurs n&#8217;ont jamais touché à Dijit.<br />
Il existe d&#8217;autre moyen d&#8217;obtenir des comportements légers et réutilisables comme le montre <a href="http://dojotoolkit.org/book/dojo-book-0-9/part-5-dojox/dojox-dtl">l&#8217;implémentation de Django Templating Language (DTL) dans Dojo</a>.</p>
<h2>L&#8217;intérêt pour Dojo décline</h2>
<p>Pourquoi les gens pensent ça ? Peut-être une mauvaise interprétation des stats. Les gens comparent les stats Google pour des recherches comme &laquo;&nbsp;jQuery JavaScript&nbsp;&raquo; &laquo;&nbsp;Prototype JavaScript&nbsp;&raquo; &laquo;&nbsp;Dojo JavaScript&nbsp;&raquo;, etc. parce que les mots qu&#8217;ils contiennent sont en conflit avec des termes de recherche généraux. Mensonge, foutu mensonge, et les statistiques d&#8217;utilisation, hein ?<br />
Tandis que l&#8217;intérêt des autres grands toolkit a grossi de façon significative, l&#8217;utilisation de Dojo en fait de même. En se basant sur le nombre d&#8217;applications déployées, le nombre de téléchargement, le trafic sur le site, les livres vendus et quantité d&#8217;autre statistique, on peut dire que Dojo continu de grossir très rapidement. De part chaque mesure, on constate que l&#8217;intérêt en Dojo croit plus vite que jamais.<br />
Ajax est devenu de plus en plus populaire et l&#8217;on considère maintenant JavaScript comme un vrai langage. Dojo à toujours traiter JavaScript comme un langage de première classe, et c&#8217;est concentré strictement sur l&#8217;utilité plus que sur un aspect particulier du workflow, comme le DOM.</p>
<h2>Dojo n&#8217;est pas valide</h2>
<p>Une longue et persistante plainte est que Dojo n&#8217;est pas valide. DTD != d&#8217;HTML valide. Les attributs personnalisés ont toujours été de l&#8217;HTML valide, c&#8217;est juste qu&#8217;ils ne sont pas validé lorsqu&#8217;on les teste avec une DTD.<br />
Si la validation DTD est véritablement importante pour votre projet, il aussi bien simple d&#8217;utiliser Dojo avec <a href="http://higginsforpresident.net/2008/08/dojo-degradability/">élégante dégradation</a> ; l&#8217;utilisation <a href="http://www.easy-reader.net/archives/2007/09/10/alex-russell-is-not-a-heretic/">des attributs personnalisés</a> est un pattern d&#8217;implémentation uniquement, pas un pré-requis pour Dojo. Sinon, vous pouvez toujours créer votre propre DTD.<br />
En plus des bénéfices de performance et de l&#8217;efficacité des attributs personnalisés, ils sont bien plus utilisables et proche de notre compréhension que les autres options. Par exemple, certain toolkit utilise l&#8217;attribut rel et le remplisse de data. Le populaire meta plugin de jQuery ressemble à ça :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div <span class="kw2">class</span><span class="sy0">=</span><span class="st0">&quot;hilight { background: 'red', foreground: 'white' }&quot;</span><span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>. Pourquoi est-ce mieux que la syntaxe Dojo qui aurait put être :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1"><span class="sy0">&lt;</span>div jQueryType<span class="sy0">=</span><span class="st0">&quot;hilight&quot;</span> background<span class="sy0">=</span><span class="st0">&quot;red&quot;</span> foreground<span class="sy0">=</span><span class="st0">&quot;white&quot;</span><span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>?<br />
La spécification HTML fait état que tout les attributs non reconnu sont ignoré par les moteurs de rendu HTML dans les applications, et Dojo profite optionnellement des ces avantages pour améliorer la facilité de développement.</p>
<h2>Dojo est laid</h2>
<p>Créer de belles applications web demande une grande connaissance du style, de l&#8217;interactivité, de l&#8217;expérience utilisateur et des possibilités graphique. Dojo fourni 3 thème professionnel : <a href="http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/themes/themeTester.html?theme=tundra">Tundra</a>, <a href="http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/themes/themeTester.html?theme=soria">Soria</a> et <a href="http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/themes/themeTester.html?theme=nihilo">Nihilo</a>. Si vous voulez les améliorer ou créer votre propre thème alors soyez impliqué!<br />
Les thèmes de Dojo sont délibérément minimaliste pour rendre facilement adaptable les composants à des designs ou des marques existantes. Mais chez SitePen, dans nos travaux pour des clients nous avons appliqué nos CSS et nos designs sur des applications basés sur Dojo afin de créer d&#8217;excellent design et des expériences époustouflantes.<br />
<img src="http://www.dojotoolkit-fr.org/sites/default/files/k3_2-Convergence-Calendar.jpg" /></p>
<p>http://www.sun.com/software/convergence/</p>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/eyefiConfig.jpg" /></p>
<p>http://www.sitepen.com/blog/2007/11/11/eye-fi-launches/</p>
<p><img src="http://www.dojotoolkit-fr.org/sites/default/files/sensei-intro.jpg" /></p>
<p>http://www.sitepen.com/blog/2008/10/14/dojo-sensei-reader/</p>
<p>Beaucoup d&#8217;autre société ont aussi réussit à appliquer leur propre thème à des applications basé sur Dojo.<br />
<img src="http://www.dojotoolkit-fr.org/sites/default/files/esri.jpg" /></p>
<p>http://dojotoolkit.org/spotlight/esri</p>
<h2>Dojo n&#8217;offre pas certaines fonctionnalités fournis par une librairie particulière</h2>
<p>C&#8217;est peut-être le cas, ou c&#8217;est peut être appelé autrement, ou disponible dans une API différente. Mais Dojo offre une extrême flexibilité. Par exemple, consultez le travail de Peter Higgins pour <a href="http://higginsforpresident.net/2008/10/dojoshow-hide-toggle-and-more/">ajouter l&#8217;API de footprint de jQuery qu&#8217;il aime et qui manque dans Dojo en mois de 1Ko</a>.</p>
<h2>Dojo ne fonctionne pas avec un toolkit, un environnement ou un serveur particulier</h2>
<p>Nous faisons tout pour nous assurer que Dojo fonctionne avec tout, même si un toolkit ou un serveur ne dispose pas de ce que nous souhaiterions. Si quelque chose ne fonctionne pas pour vous, posez la question du <a href="http://dojotoolkit.org/forum">les forums Dojo</a> ou au support SitePen, et s&#8217;il s&#8217;agit d&#8217;un bug, <a href="http://bugs.dojotoolkit.org/">ouvrez un ticket</a> et il sera fixé au plus vite. Nous avons poussé très loin pour être sur que Dojo fonctionne bien avec tous les toolkit populaire, aussi bien que dans une variété d&#8217;environnement tel que : XUL, ligne de commande, Jaxer, Air, etc., le support des préconisations de l&#8217;alliance OpenAjax autant que l&#8217;intégration avec DWR, Persevere, Zend Framework, IBM Websphere, Django, Ruby On Rails, et beaucoup, beaucoup plus.<br />
Dojo a été initialement conçut pour arrêté de réinventé la roue du DHTML, avec un code source original significativement basé sur le travail de toolkit plus anciens comme netWindows, BurstLib, et f(m).</p>
<h2>Les gens chez Dojo n&#8217;aiment pas de projet en particulier</h2>
<p>En général, d&#8217;un point de vue interpersonnel, nous sommes amis avec les gens qui on créé jQuery, Prototype, YUI, MooTools, et autre. Même si bien sûr les développeurs de Dojo ont des opinions différentes sur la meilleure approche pour le développement (les grands développeurs devrais toujours être en désaccord, tant qu&#8217;ils gardent le débat centré sur le mérite plus que sur la forme du message). Nous avons trouvé des fans de Dojo et d&#8217;autre toolkits qui essaye de créer une plus grande rivalité que les auteurs de toolkit ne le font. Après tout, nous sommes en train de parler de toolkit open source qui sont sous licence libre (BSD, AFL, MIT, Apache, etc.), donc il est dur pour nous de pas s&#8217;étendre. Alex Russel, Peter Higgins et moi sommes aussi sur un enregistrement pour inviter les autres toolkit à collaborer et coopérer pour encore une fois arrêter de réinventer la roue.<br />
<img src="http://www.dojotoolkit-fr.org/sites/default/files/ajaxconf.jpg" /></p>
<p><a href="http://www.flickr.com/photos/codepo8/2902388592/sizes/m/"><img src="http://farm4.static.flickr.com/3275/2902388592_fb31532766.jpg" alt="The Ajax Experience Browser incompatibility panel" width="500" height="375" /></a></p>
<p>Dans la plus part des cas, c&#8217;est un problème de perspective. Je sais que beaucoup d&#8217;entre nous restent bloqués non par parce que quelqu&#8217;un a mal fait son travail mais parce que certaines personnes critiquent les fonctionnalités d&#8217;un toolkit au profit d&#8217;un autre s&#8217;en même comprendre pourquoi cette fonctionnalité existe.</p>
<h2>Il est difficile de contribuer à Dojo ou d&#8217;être impliqué</h2>
<p>A la différence de beaucoup de toolkit, Dojo <a href="http://dojofoundation.org/about/cla/">requiert une CLA</a> qui protège les droits de votre IP, et aussi requiert que pour contribuer au code, vous en aillez le droit. La fondation Dojo fait cela pour être certaine que nous seront capable de redistribuer chaque partie du code présent dans le Toolkit de manière complètement gratuite, et sous licence libre. C&#8217;est un processus simple qui doit prendre maximum 15 minutes et il vaut bien ce petit effort.<br />
Pour plus d&#8217;informations sur <a href="http://dojofoundation.org/about/get-involved/">comment s&#8217;impliquer</a>, <a href="http://dojofoundation.org/about/contribute/">contribuer</a>, <a href="http://dojofoundation.org/about/donate/">faire un don</a>, visitez le site de la fondation Dojo et celui de Dojo Toolkit ou venez sur le salon irc de Dojo sur irc.freenode.net dans #dojo</p>
<h2>Dojo manque de support commercial</h2>
<p>Un certain nombre de société, en incluant SitePen, offre <a href="http://sitepen.com/services">des services de développement, d&#8217;entrainement et de support pour Dojo</a>. La communauté Dojo offre un magnifique support gratuit, mais quand les problèmes dépasse ce qu&#8217;il est raisonnable de demandé à un bénévole, ou ont besoin d&#8217;être pris en compte immédiatement et/ou sous un accord de non divulgation, les sociétés comme SitePen sont disponible pour vous aider à être productif, du fixe de bug dans Dojo jusqu&#8217;à packager et designer votre application.</p>
<h2>Résumé</h2>
<p>Comme vous pouvez le voir, Dojo a parcouru un long chemin depuis sa création initiale il y a plus de 4 ans. Pendant les prochains mois, les développeurs de Dojo vont continuer à améliorer les sources du toolkit, la documentation, et le marketing afin de rendre Dojo simple a utilisé sur tous types d&#8217;application ou de site web que vous développez.</p>
<p>J&#8217;espère que vous prendrez la décision d&#8217;utiliser, ou pas, Dojo en vous basant sur le mérite plutôt que sur des mythes ou des informations qui ne sont plus ou n&#8217;ont jamais été exactes.</p>
<p><a href="http://www.sitepen.com/blog/author/Dylan">Dylan Schiemann</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2009/02/demystifier-dojo-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom build, singleton et fichier de localisation</title>
		<link>http://www.dojotoolkit-fr.org/2009/02/custom-build-singleton-et-fichier-de-localisation/</link>
		<comments>http://www.dojotoolkit-fr.org/2009/02/custom-build-singleton-et-fichier-de-localisation/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 17:59:29 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<guid isPermaLink="false"></guid>
		<description><![CDATA[Custom build, singleton et fichier de localisation : le cauchemar ?
 <a href="http://www.dojotoolkit-fr.org/2009/02/custom-build-singleton-et-fichier-de-localisation/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><!--break--><br />
Pour le projet sur lequel je travaille, nous avons découpé notre application en widgets et en singleton.<br />
La différence entre les deux est minime.<br />
Alors qu&#8217;un fichier de widget se termine par &laquo;&nbsp;});&nbsp;&raquo; (pour clôturer le dojo.declare), le singleton ajoute 2 lignes qui servent à le créer :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>ext.<span class="me1">mySingleton</span><span class="br0">&#41;</span></pre></li><li class="li1"><pre class="de1">	ext.<span class="me1">mySingleton</span> <span class="sy0">=</span> <span class="kw2">new</span> ext.<span class="me1">MySingleton</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Cela ne pose aucun problème à la build&#8230; sauf si votre singleton à besoin d&#8217;accéder aux localisations.<br />
Au chargement de votre page, vous obtenez à peu près l&#8217;erreur suivante :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"> 	Error<span class="sy0">:</span> Bundle not found<span class="sy0">:</span> loading <span class="kw1">in</span> dijit <span class="sy0">,</span> locale<span class="sy0">=</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Il faut savoir que lors de la build, tous vos widgets sont packagé en un seul fichier et à la fin de se fichier est ajouté une ligne pour charger les localisations.<br />
Et tous le problème est la&#8230;<br />
Comme votre singleton se crée (et donc demande à dojo les localisations) AVANT que celles-ci ne soient effectivement disponible (puisque chargées en fin de fichier) tout se met à planter.<br />
Pour éviter ce problème, voici la la seule solution que j&#8217;ai trouvé :</p>
<ul>
<li>Utiliser les même localisations dans les widgets et dans les singletons


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol start="0"><li class="li1"><pre class="de1">dojo.<span class="me1">i18n</span>.<span class="me1">getLocalization</span><span class="br0">&#40;</span><span class="st0">&quot;ext.myWidgets.lang&quot;</span><span class="sy0">,</span><span class="st0">&quot;locale&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//pour les widgets et les singletons</span></pre></li></ol></div></div></div></div></div></div></div>


</li>
<li> Créer, lors de la build, 2 fichiers JS : un qui inclus les widgets, le second les singletons.</li>
<li> Charger (via une balise script normale) le fichier des widgets puis celui des singletons</li>
</ul>
<p>Avec ça tout devrait bien se passer. Le chargement du fichier des widgets appelle le fichier de localisation qui sera réutilisé indirectement par le fichier des singletons.</p>
<p>Évidement il doit exister mieux. Donc si quelqu&#8217;un connais une meilleur façon de faire, je suis preneur <img src='http://www.dojotoolkit-fr.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojotoolkit-fr.org/2009/02/custom-build-singleton-et-fichier-de-localisation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

