<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-29226276</atom:id><lastBuildDate>Thu, 24 Oct 2024 12:13:20 +0000</lastBuildDate><title>Domino &amp; Web 2.0</title><description>Intégration de solutions Web 2.0 dans les applications Lotus Notes/Domino.&lt;br/&gt;&#xa;&lt;a href=&quot;http://webdomino.blogspot.com&quot;&gt;&lt;img src=&quot;http://photos1.blogger.com/blogger2/6158/133075702830881/400/gb.gif&quot; border=&quot;0&quot; alt=&quot;english version&quot; /&gt; English version&lt;/a&gt;</description><link>http://dominoweb.blogspot.com/</link><managingEditor>noreply@blogger.com (Anonymous)</managingEditor><generator>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-8017584677971754193</guid><pubDate>Thu, 12 Apr 2007 11:09:00 +0000</pubDate><atom:updated>2008-11-13T04:58:24.823+01:00</atom:updated><title>ASTUCE - Avertissement avant de quitter une page Web</title><description>Il arrive souvent qu&#39;un utilisateur, porté par la fougue de la navigation, clique sur un lien alors qu&#39;il est en train de rédiger un formulaire qu&#39;il n&#39;a pas encore enregistré. Il doit alors tout refaire et se retrouve aigri.&lt;br /&gt;&lt;br /&gt;Sous Lotus Notes, lorsque l&#39;on ferme un formulaire, le client lourd a la prévenance d&#39;avertir l&#39;utilisateur qu&#39;il devrait enregistrer ses données avant de quitter. Il est en fait assez simple de faire la même chose sur le Web.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://2.bp.blogspot.com/_yi4tWEd8Ewk/Rh4aGmHHu7I/AAAAAAAAAB0/Gwh9d3Z5MFs/s400/avertissement.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5052504532568226738&quot; /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Détection d&#39;une modification sur le formulaire&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Avant de l&#39;avertir, mieux vaut vérifier que celà en vaut vraiment la peine. Un moyen simple est de se baser sur un champ qui sera modifié dès qu&#39;un des champs a été modifié en se basant sur l&#39;évènement onChange. Ce champ de controle n&#39;a pas à être visible pour l&#39;utilisateur on peut donc le déclarer en type &quot;hidden&quot; soit :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;hidden&quot; name=&quot;isChanged&quot; id=&quot;isChanged&quot; value=&quot;0&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pour modifier la valeur du champ, on utilisera une fonction Javascript qui pourra être déclarée dans une librairie ou tout simplement dans &quot;l&#39;entête JS&quot; du masque.&lt;br /&gt;Cette fonction pourra être de la forme :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;function formChange(){&lt;br /&gt;  document.forms[0].isChanged.value=&quot;1&quot;;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;On peut alors appeler la fonction dans l&#39;évènement onChange de chaque champ que l&#39;on souhaite controler en ajoutant :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;formChange()&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://1.bp.blogspot.com/_yi4tWEd8Ewk/Rh4aUWHHu8I/AAAAAAAAAB8/wSFRLHiUqz0/s400/onchange.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5052504768791428034&quot; /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Détection que l&#39;utilisateur quitte le formulaire&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Il faut déclarer le nouvel évènement onBeforeUnload. Pour celà, dans l&#39;entête JS du masque, ajouter :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;window.onbeforeunload = confirmExit;&lt;/code&gt;&lt;/pre&gt;où confirmExit est une fonction Javascript permettant de vérifier s&#39;il faut afficher la boite d&#39;avertissement mais aussi de personnaliser un peu le message.&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;function confirmExit() {&lt;br /&gt;  if(document.forms[0].isChanged.value==&#39;1&#39;) &lt;br /&gt;    return &quot;Vous avez effectuez des modifications sans les enregistrer.&quot;;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;La première condition permet de vérifier s&#39;il est utile de lui présenter la fenêtre de confirmation en allant vérifier la valeur du champ caché.</description><link>http://dominoweb.blogspot.com/2007/04/astuce-avertissement-avant-de-quitter.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_yi4tWEd8Ewk/Rh4aGmHHu7I/AAAAAAAAAB0/Gwh9d3Z5MFs/s72-c/avertissement.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-8343515075933331812</guid><pubDate>Mon, 26 Mar 2007 11:08:00 +0000</pubDate><atom:updated>2008-11-13T04:58:25.300+01:00</atom:updated><title>Hors-Sujet - Idée lecture : &quot;Un dimanche avec Garbo&quot;</title><description>Une fois n&#39;est pas coutume, ceci n&#39;a rien à voir avec Lotus Domino, Ajax ou autres technologies dites &quot;Web 2.0&quot;. Juste une simple recommandation de lecture d&#39;un recueil de nouvelles écrit par quelqu&#39;un de très proche.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Un dimanche avec Garbo et autres histoires&lt;/span&gt;&lt;br /&gt;de Olivier Mony&lt;br /&gt;Editions Confluences&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&quot;Hemingway à Chantaco, Cocteau à Arcachon, tournage de Hôtel des Amériques de Téchiné à Biarritz, ce récit fait revivre les personnalités de passage dans le Sud-Ouest : écrivains, aventuriers, stars de cinéma, sur leurs lieux de tournage, sur les plages ou dans les citadelles.&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sur &lt;a href=&quot;http://www.amazon.fr/Un-dimanche-avec-Garbo-histoires/dp/2914240953/ref=sr_1_1/171-0646769-5857848?ie=UTF8&amp;s=books&amp;amp;qid=1174906808&amp;sr=8-1&quot; onClick=&quot;javascript:urchinTracker(&#39;/links/amazon_olivier&#39;);&quot;&gt;Amazon&lt;/a&gt; ou dans toutes les bonnes librairies.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_yi4tWEd8Ewk/Rgep6z52XpI/AAAAAAAAABo/bgLnEYpmc0I/s1600-h/un-dimanche-avec-garbo.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://3.bp.blogspot.com/_yi4tWEd8Ewk/Rgep6z52XpI/AAAAAAAAABo/bgLnEYpmc0I/s400/un-dimanche-avec-garbo.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5046188735322283666&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Au passage, un petit clin d&#39;oeil à &lt;a href=&quot;http://www.domlike.net/&quot;&gt;Julien &lt;/a&gt;notre célèbre expert Lotus du Sud-Ouest.&lt;br /&gt;&lt;br /&gt;PS : Olivier vient de recevoir le prix Hennessy du journalisme littéraire 2007. (Source : &lt;a href=&quot;http://www.tv5.org/TV5Site/info/article-Manifestation_et_prix_litteraires_au_Salon_du_livre.htm?idrub=5&amp;xml=070325132359.dpja3lh6.xml&quot;&gt;TV5.org&lt;/a&gt;)</description><link>http://dominoweb.blogspot.com/2007/03/hors-sujet-littraire-ide-lecture-un.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_yi4tWEd8Ewk/Rgep6z52XpI/AAAAAAAAABo/bgLnEYpmc0I/s72-c/un-dimanche-avec-garbo.gif" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-5745861249803355741</guid><pubDate>Sun, 11 Mar 2007 09:53:00 +0000</pubDate><atom:updated>2008-11-13T04:58:25.914+01:00</atom:updated><title>OUTILS - Représentation graphique de données Notes</title><description>&lt;div&gt;L&#39;une des principales demande de mes utilisateurs est la mise à disposition de graphiques à partir des données contenues dans une base Lotus Notes.&lt;br /&gt;&lt;br /&gt;Il existe aujourd&#39;hui de multiples méthodes permettant de faire celà à travers une applet ou une servlet JAVA, de &lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/css-graphiques-barres-horizontales-et.html&quot;&gt;feuilles de style CSS&lt;/a&gt;, en utilisant des API ou tout simplement en exportant les données vers un tableur comme OpenOffice Calc ou Microsoft Excel (voire Lotus 123 pour les nostalgique). Cependant je trouve qu&#39;aucune de ces solutions ne répondent à tous les besoins, à savoir : simplicité, rapidité, maintenabilité, personnalisation.&lt;br /&gt;&lt;br /&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5040619540933349410&quot; style=&quot;DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center&quot; alt=&quot;&quot; src=&quot;http://3.bp.blogspot.com/_yi4tWEd8Ewk/RfPgxCE5kCI/AAAAAAAAABQ/W_QvRQOWB7I/s400/analytics.gif&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;L&#39;interface de Google Analytics (outil de suivi de statistique d&#39;accès Web) présente une interface graphique avec de multiples graphiques de toute sorte que je trouve agréable. Ces graphiques sont générés grace à du Adobe Flash. Après de multiples recherches je pense avoir enfin trouvé LE package Flash gratuit de gestion des graphiques : &lt;a href=&quot;http://www.maani.us/xml_charts/&quot;&gt;XML/SWF Chart&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Le graphique est généré à partir de données fournies au format XML et les possibilités de personnalisation sont infinies. 20 type de graphiques sont disponibles, du simple graphique à barre aux graphiques mixtes en passant par les camemberts 3D. L&#39;ensemble des éléments du graphiques sont aramétrables à travers le fichier XML et le rendu est non seulement très propre mais en plus rapide.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;http://3.bp.blogspot.com/_yi4tWEd8Ewk/RfPhFCE5kDI/AAAAAAAAABY/neist0exi4Q/s400/graph1.gif&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5040619884530733106&quot; /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Comment intégrer XML/SWF Chart dans une application Lotus Domino&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Etape 1 : Intégration du package&lt;/span&gt;&lt;br /&gt;Le package comprend plusieurs fichiers SWF.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Télécharger &lt;a href=&quot;http://www.maani.us/xml_charts/index.php?menu=Download&quot;&gt;le package&lt;/a&gt; sur le site Web &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Décompresser le package&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ajouter les fichiers dans les ressources de votre base Notes. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Faire attention de reproduire l&#39;arborescence des fichiers en intégrant le nom du répertoire (exemple, depuis les ressources Notes, renommer arno.swf en charts_library/arno.swf)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Etape 2 : Préparation de la vue pour afficher les données à représenter&lt;/span&gt;&lt;br /&gt;Dans mon exemple je considère que les données peuvent âtre représentées à travers une vue Notes. On pourra aussi se baser sur des champs calculés si la méthode décrite ne peut répondre aux besoins.&lt;br /&gt;Les données doivent être présentées sous le format XML suivant :&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;row&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;string&amp;gt;Intitulé de ma colonne&amp;lt;/string&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;number&amp;gt;Valeur 1&amp;lt;number&amp;gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&amp;lt;number&amp;gt;Valeur n&amp;lt;number&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/row&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Ma vue pourra donc avoir la forme suivante :&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;1ère colonne - Intitulé : &amp;lt;row&amp;gt;, Valeur : &quot;&amp;lt;row&amp;gt;&quot;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2nde colonne - Intitulé : &amp;lt;null/&amp;gt;, Valeur : &quot;&amp;lt;string&amp;gt;&quot; + champ_titre + &quot;&amp;lt;/string&amp;gt;&quot; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;3ème colonne - Intilué : &amp;lt;string&amp;gt;Titre Valeur 1&amp;lt;/string&amp;gt;, Valeur : &quot;&amp;lt;number&amp;gt;&quot; + @text(champ_valeur1) + &quot;&amp;lt;/number&amp;gt;&quot; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Dernière colonne - Intitulé : &amp;lt;/row&amp;gt;, Valeur : &quot;&amp;lt;/row&amp;gt;&quot;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;Les données de la vue ne doivent pas être interprétées par le moteur Domino. Il faut donc absolument cocher l&#39;option &quot;Traiter contenucomme du code HTML&quot; depuis l&#39;avent dernier onglet des propriétés de la vue.&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;http://1.bp.blogspot.com/_yi4tWEd8Ewk/RfPhSiE5kEI/AAAAAAAAABg/VU8jxO8es24/s400/vue.gif&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5040620116458967106&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Etape 3 : Le masque de vue&lt;/span&gt;&lt;br /&gt;C&#39;est dans le masque associé à la vue que nous allons pouvoir définir toutes les options de représentation du graphique. Pour connaitre toutes ces options je ne peux que recommander de consulter l&#39;&lt;a href=&quot;http://www.maani.us/xml_charts/index.php?menu=Reference&quot;&gt;aide&lt;/a&gt; très complète disponible sur le site. Je ne donnerai ici qu&#39;une configuration mimale pour afficher un graphique.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Création d&#39;un masque nommé : $$ViewTemplate for nom_de_ma_vue_précédemment_créée&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Indiquer : &amp;lt;chart&amp;gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ajouter : &amp;lt;chart_type&amp;gt;&lt;a href=&quot;http://www.maani.us/xml_charts/index.php&quot;&gt;type de graphique souhaité&lt;/a&gt;&amp;lt/CHART_TYPE&amp;GT;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ajouter comme vue intégrée votre vue précédemment créée&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ajouter à la fin : &amp;lt;/chart&amp;gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Depuis le second onglet des propriétés du masque, indiquer Accès Web\Type de contenu\Autre : text/xml&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Etape 4 : Intégration du graphique dans une page Web&lt;br /&gt;&lt;/span&gt;Pour ajouter le graphique dans une page, indiquez le code suivant :&lt;br /&gt;&lt;/div&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;OBJECT classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot;&lt;br /&gt;&lt;br /&gt; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0&quot;&lt;br /&gt;&lt;br /&gt; WIDTH=&quot;400&quot;&lt;br /&gt;&lt;br /&gt; HEIGHT=&quot;270&quot;&lt;br /&gt;&lt;br /&gt; id=&quot;charts&quot;&lt;br /&gt;&lt;br /&gt; ALIGN=&quot;&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;PARAM NAME=movie VALUE=&quot;charts.swf?openfileresource&amp;library_path=charts_library&amp;amp;xml_source=nom_de_ma_vue&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;PARAM NAME=quality VALUE=high&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;PARAM NAME=bgcolor VALUE=#eeeeee&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;EMBED src=&quot;charts.swf?openfileresource&amp;library_path=charts_library&amp;amp;xml_source=nom_de_ma_vue?openview&quot;&lt;br /&gt;&lt;br /&gt;       quality=high&lt;br /&gt;&lt;br /&gt;       bgcolor=#eeeeee&lt;br /&gt;&lt;br /&gt;       WIDTH=&quot;400&quot;&lt;br /&gt;&lt;br /&gt;       HEIGHT=&quot;270&quot;&lt;br /&gt;&lt;br /&gt;       NAME=&quot;charts&quot;&lt;br /&gt;&lt;br /&gt;       ALIGN=&quot;&quot;&lt;br /&gt;&lt;br /&gt;       swLiveConnect=&quot;true&quot;&lt;br /&gt;&lt;br /&gt;       TYPE=&quot;application/x-shockwave-flash&quot;&lt;br /&gt;&lt;br /&gt;       PLUGINSPAGE=&quot;http://www.macromedia.com/go/getflashplayer&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/EMBED&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/OBJECT&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;color:#cc6600;&quot;&gt;Conclusions&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Vous pouvez voir un &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/chart&quot;&gt;exemple en ligne&lt;/a&gt; ainsi que télécharger une base Notes contenant &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/DW2-FlashCharts.zip&quot;&gt;un exemple un peu plus complet&lt;/a&gt; (Pour Lotus Notes 7+ pour le moment)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Il est aussi à noter que le site offre deux autres packages qui semblent interressants ou du moins amusants :&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;XML/SWF Gauge : pour créer des compteur graphiques&lt;/li&gt;&lt;br /&gt;&lt;li&gt;XML/SWF Slideshow : pour créer des animations réactives&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;Je n&#39;ai pas encore eut le temps de tester ces deux applications.&lt;/div&gt;</description><link>http://dominoweb.blogspot.com/2007/03/outils-reprsentation-graphique-de.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_yi4tWEd8Ewk/RfPgxCE5kCI/AAAAAAAAABQ/W_QvRQOWB7I/s72-c/analytics.gif" height="72" width="72"/><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-116180454439113837</guid><pubDate>Wed, 25 Oct 2006 19:19:00 +0000</pubDate><atom:updated>2006-10-25T21:29:04.410+02:00</atom:updated><title>INFO - Exemple d&#39;une site Web Lotus Domino intégrant Litebox et Smooth SlideShow entre autre</title><description>Après une longue absence, je vais commencer tranquillement par la présentation d&#39;un site Web hébergé sous Lotus Domino intégrant quelques techniques décrites ici.&lt;br /&gt;&lt;br /&gt;Le  nouveau site d&#39;une entreprise spécialiée dans l&#39;instrumentation de mesure et de surveillance intègre des &lt;a href=&quot;http://dominoweb.blogspot.com/2006/09/ajax-mes-photos-de-vacances-avec.html&quot;&gt;Litebox&lt;/a&gt; est un &lt;a href=&quot;http://dominoweb.blogspot.com/2006/08/ajax-photos-de-vacances.html&quot;&gt;Smooth Slideshow &lt;/a&gt;présenté sur ce blog :  &lt;a href=&quot;http://www.soldatagroup.com&quot;&gt;Site web de Sol Data&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://photos1.blogger.com/blogger/366/1667/1600/web-soldata.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/web-soldata.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</description><link>http://dominoweb.blogspot.com/2006/10/info-exemple-dune-site-web-lotus.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115826389524765652</guid><pubDate>Thu, 14 Sep 2006 19:28:00 +0000</pubDate><atom:updated>2006-09-14T21:58:15.313+02:00</atom:updated><title>GOOGLE API - Quelques compléments sur Google Maps</title><description>Je viens de découvrir deux nouvelles fonctions offertes par la version 2 de la l&#39;API de Google Maps, la géolocalisation à partir d&#39;une adresse postale et les boites d&#39;information multi onglets.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;La géolocalisation à partir d&#39;une adresse postale&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;J&#39;avais déjà proposée une solution pour &lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/google-api-la-recherche-dinformations.html&quot;&gt;retrouver la position géographique &lt;/a&gt;d&#39;un lieu à partir de son adresse postale dans l&#39;un des premiers messages de ce blog. Les deux éventuels problèmes posés par la méthode décrite était :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;l&#39;obligation de séparer chaque composante de l&#39;adresse (rue, ville et pays)&lt;/li&gt;&lt;li&gt;l&#39;utilisation d&#39;un service sans pérennité assurée&lt;/li&gt;&lt;/ol&gt;Ces deux problèmes sont résolus grace à  &lt;a href=&quot;http://www.google.com/apis/maps/documentation/#Geocoding_Examples&quot;&gt;Geocoder&lt;/a&gt; de Google Maps.&lt;br /&gt;&lt;br /&gt;L&#39;une des méthodes les plus simples pour récupérer les coordonnées d&#39;une adresse consiste à envoyer une requète http avec le format suivant :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;http://maps.google.com/maps/geo?q=adresse+recherchee&amp;output=csv&amp;amp;key=abcdefg&lt;/pre&gt;Où :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;q=&lt;/span&gt; : indiquer l&#39;adresse recherchée au format URL. Exemple : place+concorde+paris+france&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;output=&lt;/span&gt; : format de la réponse. On peut indiquer xml, kml, json ou csv selon le besoin. Le format csv est le plus simple à traiter puisqu&#39;il ne renvoie que quatre nombres séparées par des virgule en résultat.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;key=&lt;/span&gt; : votre clé Google Maps&lt;/li&gt;&lt;/ul&gt;Comme indiqué, le format CSV renvoie une réponse sous forme de quatre nombres correspondant au statut de la réponse (200 si tout va bien), le niveau de zoom, la latitude puis la longitude.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Plusieurs onglets dans la boite d&#39;informations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;J&#39;avais rapidement présenté comment &lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/google-api-lotus-notes-et-google-maps.html&quot;&gt;ajouter une bulle d&#39;information&lt;/a&gt; sur la carte GoogleMaps en utilisant &lt;span style=&quot;font-style: italic;&quot;&gt;marker.openInfoWindowHtml(bulle);&lt;/span&gt;.&lt;br /&gt;Pour ajouter une boite de dialogue avec plusieurs onglet il suffit d&#39;utiliser &lt;span style=&quot;font-style: italic;&quot;&gt;marker.openInfoWindowTabsHtml(infoTabs);  &lt;/span&gt;en ayant préalablement défini infoTabs comme ceci :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;var infoTabs = [&lt;br /&gt; new GInfoWindowTab(&quot;Titre Onglet 1&quot;, &quot;Contenu onglet 1&quot;),&lt;br /&gt; new GInfoWindowTab(&quot;Titre Onglet 2&quot;, &quot;Contenu onglet 2&quot;)&lt;br /&gt;];&lt;/code&gt;&lt;/pre&gt;</description><link>http://dominoweb.blogspot.com/2006/09/google-api-quelques-complments-sur.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115791694856321378</guid><pubDate>Sun, 10 Sep 2006 18:57:00 +0000</pubDate><atom:updated>2006-09-10T21:37:24.296+02:00</atom:updated><title>AJAX - Mes photos de vacances avec LightBox</title><description>Comme promis lors de la présentation du &quot;&lt;a href=&quot;http://dominoweb.blogspot.com/2006/08/ajax-photos-de-vacances.html&quot;&gt;Smooth Slideshox&lt;/a&gt;&quot;,  je vais présenter une seconde librairie Javascript permettant de présenter les photos. La bibliothèque LightBox est de plus en plus utilisé sur le Web. Il a l&#39;immense avantage d&#39;agrandir joliment une photo sans avoir à se soucier de la navigation. La bibliothèque s&#39;appuie sur le couple prototype.js/scriptaculous.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/lightbox.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Comment installer LightBox&lt;/span&gt;&lt;br /&gt;L&#39;installation et l&#39;utilisation de la bibliothèque LightBox dans une application Lotus Domino est similaire aux autres librairies déjà présentées sur ce blog :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Télécharger le package sur &lt;a href=&quot;http://www.huddletogether.com/projects/lightbox2/&quot;&gt;http://www.huddletogether.com/projects/lightbox2/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Décompresser le fichier ZIP sur le disque dur&lt;/li&gt;&lt;li&gt;Ajouter les fichiers prototype.js, scriptaculous.js, effect.js et lightbox.js et lightbox.css dans les ressources partagées de la base Notes&lt;/li&gt;&lt;li&gt;Ajouter les fichiers close.gif, loading.gif, blank.gif dans les ressources images partagées. On peut aussi ajouter les autres images présentées mais elle ne seront pas nécessaires dans l&#39;exemple décrit.&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Comment utiliser la bibliothèque Lightbox&lt;/span&gt;&lt;br /&gt;Depuis l&#39;élément de structure devant afficher les images LightBox (masque ou page), indiquer comme &quot;Contenu de titre HTML&quot; :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&quot;&amp;lt;link rel=\&quot;stylesheet\&quot;&lt;br /&gt;type=\&quot;text/css\&quot; href=\&quot;lightbox.css\&quot;&lt;br /&gt;media=\&quot;screen\&quot; title=\&quot;Normal\&quot; /&amp;gt;&lt;br /&gt;&amp;lt;script src=\&quot;script/prototype.js\&quot; type=\&quot;text/javascript\&quot;&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;script src=\&quot;script/scriptaculous.js\&quot; type=\&quot;text/javascript\&quot;&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=\&quot;script/lightbox.js\&quot; type=\&quot;text/javascript\&quot;&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&quot;&lt;/code&gt;&lt;/pre&gt;Ajouter aussi sur l&#39;évènement &quot;OnLoad&quot; :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;initLightbox();&lt;/code&gt;&lt;/pre&gt;Votre masque ou page est prête.&lt;br /&gt;&lt;br /&gt;Pour déclarer une image ou photo devant utiliser lightbox il faut utiliser la syntaxe suivante :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;path_de_l_image_agrandie&quot; rel=&quot;lightbox&quot; &amp;gt;&lt;br /&gt;&amp;lt;img src=&quot;path_de_l_imagette&quot; /&amp;gt;&lt;br /&gt;&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Une mini-galerie photo sous Lotus Domino à télécharger&lt;/span&gt;&lt;br /&gt;Pour l&#39;ocasion j&#39;ai créé une mini galerie photo sous Lotus Notes à télécharger. Ne vous attendez pas à une révolution. Cette application n&#39;a que comme unique but de présenter l&#39;intégration de LightBox dans une base Notes. Par contre, pour faire plaisir à Julien, les 3 photos fournies en exemple sont ... en couleur.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/dw_ajax_photos.zip&quot; onClick=&quot;javascript:urchinTracker(&#39;/download/galerie&#39;);&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/lightboxzoo.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Télécharger la &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/dw_ajax_photos.zip&quot; onClick=&quot;javascript:urchinTracker(&#39;/download/galerie&#39;);&quot;&gt;galerie photo Lightbox&lt;/a&gt;</description><link>http://dominoweb.blogspot.com/2006/09/ajax-mes-photos-de-vacances-avec.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115731685819409269</guid><pubDate>Sun, 03 Sep 2006 20:10:00 +0000</pubDate><atom:updated>2006-09-04T08:02:11.656+02:00</atom:updated><title>AJAX - Tag Clouds</title><description>Une fois n&#39;est pas coutume,  je vais profité du travail des autres !  Je cherchais en effet comment mettre en place un nuage de tags dans une application Lotus Notes. Avant de commencer le développement j&#39;ai recherché ce qui existait et j&#39;ai été étonné de trouver rapidement trois approches différentes d&#39;implémenter cette fonctionnalité Web 2.0 avec Lotus Domino. C&#39;est d&#39;autant plus interressant que ces trois méthodes utilisent chacune une approche différente typique de l&#39;évolution du développement des applications Domino pour le Web, formula avec Javascript, LotusScript et LotusScript avec DXL.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Qu&#39;est-ce qu&#39;un nuage de tags ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un nuage de tags est une représentation sous forme de liste de mots représentés de taille proportionnelle à leur importance. Cette importance est principalement lié au nombre d&#39;occurences du mot.&lt;br /&gt;On retrouve aujourd&#39;hi ces nuages de tags un peu partout sur les applications dites 2.0 comme &lt;a href=&quot;http://del.icio.us/tag/&quot;&gt;delicious&lt;/a&gt;, &lt;a href=&quot;http://www.flickr.com/photos/tags/&quot;&gt;Flickr&lt;/a&gt; ou encore &lt;a href=&quot;http://www.technorati.com/tag/&quot;&gt;Technorati&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ces nuages de tags sont aussi utilisés dans l&#39;application &lt;a href=&quot;http://aixtal.blogspot.com/2006/01/outil-le-nbuloscope.html&quot;&gt;Nébuloscope &lt;/a&gt;de Jean Veronis dont je ne peux que recommandé la lecture du blog &lt;a href=&quot;http://aixtal.blogspot.com/&quot;&gt;Technologies du langage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/cloudtag.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Cette forme de représentation permet de remplacer la visualisation catégorisée des vues et s&#39;interface très facilement avec les options de restriction des vues intégrées.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Trois approches d&#39;implémentation de la solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Comme indiqué en introduction les trois méthodes présentées utilisent chacune une approche originale est montrant bien les approches différentes de développement des application Lotus Domino.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Approche Formula/Javascript&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://www.ferdychristant.com/fchristant/production/fdm.nsf/archive/DOMM-6SKFQW&quot;&gt;Ferdy Christant&lt;/a&gt; propose de &lt;a href=&quot;http://www.ferdychristant.com/fchristant/production/fdm.nsf/archive/DOMM-6SKFQW&quot;&gt;générer un tableau Javascript à partir d&#39;une vue présentée en HTML&lt;/a&gt; et d&#39;un peu de formula. Le Javascript se charge après de représenter le nuage de tags sur le poste client.&lt;br /&gt;Cette approche ressemble énormément à de nombreux exemples que j&#39;ai présenté ici.&lt;br /&gt;&lt;br /&gt;L&#39;avantage d&#39;une telle méthode est d&#39;économiser la charge coté serveur. Seule une vue est appelée.&lt;br /&gt;&lt;br /&gt;Malheureusement cette méthode a aussi ces inconvénients :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le poste client doit supporter le Javascript. Même si quasimeent tous les navigateurs Web récents supporte le Javascript on peut le désactiver. De plus, même si le javascript peut s&#39;exécuter coté client il faut tout de même faire attention au volume de données à traiter. &lt;/li&gt;&lt;li&gt;Même si celà peut paraitre secondaire, cette méthode retire l&#39;attrait principal du nuage de tag pour le webmestre. En effet, l&#39;un des effets secondaire du nuage de tag est l&#39;indexation des pages web auprès des moteurs de recherche. Les liens d&#39;un nuage pointent non seulement sur des ensembles de pages du site mais en plus porte un nom cohérent, le tag, vers ce lien. Hors dans le cas d&#39;un traitement Javascript, les moteurs de recherche ne voient pas ce nuage.&lt;/li&gt;&lt;li&gt;Enfin, pour ceux qui voudraient encore développer des applications compatibles Web et Client Notes, il n&#39;est pas possible d&#39;utiliser cette méthode sur le client lourd.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Approche traditionnelle via LotusScript&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://www.notessidan.se/A55B53/blogg.nsf/blogg&quot;&gt;Thomas Adrian&lt;/a&gt; utilise une méthode plus &lt;span style=&quot;font-style: italic;&quot;&gt;traditionnelle &lt;/span&gt;en utilisant un &lt;a href=&quot;http://www.notessidan.se/A55B53/blogg.nsf/plink/TADN-6RPTKK&quot;&gt;agent LotusScript&lt;/a&gt;. Le nuage de tags est calculé en temps réel par un agent LotusScript se basant sur un &lt;span style=&quot;font-style: italic;&quot;&gt;NotesViewNavigator&lt;/span&gt; et renvoie le résultat via des &lt;span style=&quot;font-style: italic;&quot;&gt;print&lt;/span&gt;.  Le serveur est donc sollicité à chaque appel du nuage. Par contre, il génère une page Web qui pourra être proprement indexées auprès des moteurs de recherche. Bref les inconvénients de la première méthodes sont les avantages de celle-ci et inversement.&lt;br /&gt;&lt;br /&gt;S&#39;il fallait choisir une solution entre ces deux méthodes je privilégierai la première pour un Intranet avec un parc matériel et logiciel maitrisé, sans indexation auprès des moteurs de recherche et surtout où l&#39;important est la vitesse de réponse du serveur. Par contre, la seconde approche est préférable pour une application à vocation publique.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Approche LotusScript/DXL&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://smoki.atblogs.de/index.php?blogId=82&quot;&gt;Christian Mueller&lt;/a&gt; propose une troisième approche pouvant répondre à tous les besoins exprimés en utilisant du &lt;a href=&quot;http://smoki.atblogs.de/index.php?op=ViewArticle&amp;articleId=772&amp;amp;blogId=82&quot;&gt;LotusScript avec DXL&lt;/a&gt;. Le calcul du nuage de tag s&#39;appuie exactement sur la même méthode que celle proposée via agent LotusScript par Thomas Adrian. La différence est qu&#39;il n&#39;envoie pas directement le résultat au navigateur Web mais créé un nouveau masque via DXL contenant ce nuage. La mise à jour de ce masque peut alors être recalculé uniquement lorsqu&#39;un document est créé, modifié ou supprimé, bref lorsque le nuage est modifié.&lt;br /&gt;&lt;br /&gt;Donc non seulement le serveur n&#39;est pas sollicité lors de l&#39;appel de cette page, le nuage est présentée sous forme HTML pour les moteurs de recherche mais en plus il est facilement présentable pour les utilisateurs de clients Lotus Notes.&lt;br /&gt;&lt;br /&gt;Serait-ce la solution idéale ? Par rapport aux contraintes exposées précédemment, c&#39;est sans conteste la meilleure solution. Reste le problème d&#39;intégration et de maintenance de l&#39;application. Le nombre de développeurs Lotus Notes utilisant et surtout maitrisant DXL est encore rare (du moins je n&#39;en fait pas encore partie même si je prends des cours réguliers sur le blog de &lt;a href=&quot;http://darkmag.net/darkBlog/index.php&quot;&gt;Yogi&lt;/a&gt;).</description><link>http://dominoweb.blogspot.com/2006/09/ajax-tag-clouds.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115731421221231120</guid><pubDate>Sun, 03 Sep 2006 20:03:00 +0000</pubDate><atom:updated>2006-09-03T22:10:12.226+02:00</atom:updated><title>SITE - Version anglaise</title><description>Le peu d&#39;articles de ces derniers jours n&#39;est pas dût à manque d&#39;inspiration ou pire à un manque de motivation. J&#39;ai profité de la fin du mois d&#39;Août pour mettre en ligne une version allégée de ce &lt;a href=&quot;http://webdomino.blogspot.com/&quot;&gt;blog en anglais &lt;/a&gt;et en même temps tester la version Béta de la nouvelle version de Blogger.</description><link>http://dominoweb.blogspot.com/2006/09/site-version-anglaise.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115599371092579631</guid><pubDate>Sat, 19 Aug 2006 12:54:00 +0000</pubDate><atom:updated>2006-08-19T16:40:18.430+02:00</atom:updated><title>SITE - Modification d&#39;URL pour le fil RSS</title><description>Le fil RSS de ce blog change d&#39;URL. La nouvelle adresse est : &lt;a href=&quot;http://feeds.feedburner.com/DominoWeb20&quot;&gt;http://feeds.feedburner.com/DominoWeb20&lt;/a&gt;. En effet je viens de m&#39;inscrire sur &lt;a href=&quot;http://feeds.feedburner.com&quot;&gt;FeedBurner&lt;/a&gt; qui permet non seulement d&#39;assurer une meilleure compatibilité avec les aggrégateurs (au contraire du flux atom précédent) mais aussi pour suivre les statistiques d&#39;accès au site via ce média. Comme vient justement de le faire remarquer Julien sur &lt;a href=&quot;http://domlike.net/domlike/dl2.nsf/d6plinks/DOME-6SSAKH&quot;&gt;domlike.net&lt;/a&gt;, la majorité des accès sur un blog se fait à travers les aggrégateurs et non depuis un navigateur Web.&lt;br /&gt;&lt;br /&gt;L&#39;ancien fil atom restera encore actif quelques semaines. N&#39;hésitez pas à laisser un commentaire en cas de problème.&lt;br /&gt;&lt;br /&gt;[mise à jour]J&#39;ai aussi profité de l&#39;occasion pour offrir la possibilité de consulter le flux RSS du site au format PDF et pour Mobile via &lt;a href=&quot;http://www.xfruits.com&quot;&gt;xFruits&lt;/a&gt;. Ce site permet de transformer et d&#39;aggréger des flux RSS vers différents formats. De plus, l&#39;interface est simple, fluide et visuellement agréable. Bref, un outil indispensable que je vous recommande.</description><link>http://dominoweb.blogspot.com/2006/08/site-modification-durl-pour-le-fil-rss.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115584750812357245</guid><pubDate>Thu, 17 Aug 2006 20:18:00 +0000</pubDate><atom:updated>2006-08-17T23:12:14.906+02:00</atom:updated><title>ASTUCE - Garder une session Domino ouverte</title><description>L&#39;un des problèmes qui m&#39;ennuie le plus avec les application full-web est l&#39;expiration de session. Encore ce matin un utilisateur m&#39;a appelé paniqué car au moment d&#39;enregistrer son article, patiemment rédigé pour un blog interne de l&#39;entreprise, le serveur Domino lui a répondu que la session était expirée.&lt;br /&gt;&lt;br /&gt;En parcourrant l&#39;excellent blog de William Beh &quot;&lt;a href=&quot;http://notesweb2.blogspot.com/&quot;&gt;Lotus Notes on Web 2.0&lt;/a&gt;&quot; j&#39;ai enfin trouvé une solution simple et rapide à mettre en place. Il propose tout simplement d&#39;appeler en Ajax un fichier sur serveur périodiquement avec la classe &lt;a href=&quot;http://roberthanson.blogspot.com/2005/11/prototypejs-periodicalexecuter.html&quot;&gt;PeriodicalExecuter&lt;/a&gt; de prototype.js. Ceci permet de garder ouverte la session Domino.&lt;br /&gt;&lt;br /&gt;Cette méthode n&#39;est certes pas parfaite d&#39;un point de vue sécurité. L&#39;utilisateur doit absolument fermer son navigateur pour fermer la session. Le coutournement de ce problème sera l&#39;occasion de rédiger un nouvel article.</description><link>http://dominoweb.blogspot.com/2006/08/astuce-garder-une-session-domino.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115577710111569122</guid><pubDate>Thu, 17 Aug 2006 01:03:00 +0000</pubDate><atom:updated>2006-08-17T03:32:35.076+02:00</atom:updated><title>INFO - Nouvelle version de scriptaculous</title><description>La version 1.6.2 de scriptaculous vient de sortir. Elle corrige un certains nombre (voire un nombre certains) de bugs divers. La version 1.5.0 rc0 de prototype.js est aussi fournie  dans le nouveau package d&#39;installation que vous pouvez télécharger depuis la page &lt;a style=&quot;font-style: italic;&quot; href=&quot;http://script.aculo.us/downloads&quot;&gt;downloads&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pour rappel, la librairie scriptaculous est très régulièrement présenté dans ce blog. Elle est très pratique pour gérer notament le &lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/ajax-une-page-web-personnalisable-14.html&quot;&gt;drag &amp; drop&lt;/a&gt; ainsi que l&#39;&lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/ajax-autocompletion-avec-scriptaculous.html&quot;&gt;autocomplétion&lt;/a&gt;. Quelques exemples en ligne sont disponibles sur le site annexe &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/index?openview&quot;&gt;Domino &amp;amp; Web 2.0 : Exemples&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La bibliothèque prototype.js est elle utilisée dans de nombreuses bilbiothèques javascript comme &lt;a href=&quot;http://script.aculo.us/&quot;&gt;scriptaculous&lt;/a&gt;, mais aussi &lt;a href=&quot;http://openrico.org/rico/home.page&quot;&gt;Rico&lt;/a&gt; ou &lt;a href=&quot;http://moofx.mad4milk.net/&quot;&gt;moo.fx&lt;/a&gt; qui ont aussi été présentées ici (&lt;a href=&quot;http://dominoweb.blogspot.com/2006/07/ajax-rico-livegrid-pour-reprsenter-les.html&quot;&gt;livegrid &lt;/a&gt;et &lt;a href=&quot;http://dominoweb.blogspot.com/2006/07/ajax-rico-accordion-les-vues.html&quot;&gt;accordion&lt;/a&gt; pour Rico, &lt;a href=&quot;http://dominoweb.blogspot.com/2006/08/ajax-photos-de-vacances.html&quot;&gt;Smooth Slideshow&lt;/a&gt; pour moo.fx).</description><link>http://dominoweb.blogspot.com/2006/08/info-nouvelle-version-de-scriptaculous.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115575510506832910</guid><pubDate>Wed, 16 Aug 2006 19:05:00 +0000</pubDate><atom:updated>2006-08-17T03:33:53.993+02:00</atom:updated><title>AJAX - Photos de vacances</title><description>&lt;p&gt;De retour d&#39;un long week-end du 15 Août, il est temps d&#39;exposer les photos souvenir. Le but n&#39;est pas de présenter une application de gestion de photos mais plutôt de présenter deux solutions AJAX que je trouve esthétique et très facilement intégrable avec Lotus Domino. La première solution présentée dans cet article présente les photos sous forme de bandeau avec effet de transition fondu enchainé et la possibilité d&#39;ajouter un titre, une description ainsi qu&#39;un lien.  La seconde solution sera présentée dans le prochain article. Elle permet d&#39;ouvrir les photos depuis des imagettes sous forme de boite de dialogue modale. Cet effet est notamment utilisé sur &lt;a href=&quot;http://beta.zooomr.com&quot;&gt;zoomr&lt;/a&gt;. &lt;/p&gt;&lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/slide&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/diapo1.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0); font-weight: bold;&quot;&gt;Smooth Slideshow de Jonathan Schemoul&lt;/span&gt;&lt;br /&gt;&lt;p&gt;La bibliothèque &lt;a href=&quot;http://smoothslideshow.jondesign.net/&quot;&gt;JonDesign&#39;s Smooth SlideShow&lt;/a&gt; permet de créer rapidement un bandeau avec effet fondu enchainé comme on en trouve déjà beaucoup en Flash. Cette bibliothèque s&#39;appuie sur prototype.js et moo.fx. Le tout pèse 21,6 ko ce qui me semble très raisonnable surtout si l&#39;on utilise ces bibliothèques pour d&#39;autres usages sur le site. Pour comparaison, &lt;a href=&quot;http://www.estvideo.com/dew/index/2005/08/15/514-dewslider-20-le-retour-des-diaporamas-en-flash&quot;&gt;dewslider.swf&lt;/a&gt;, un excellent équivalent en flash, pèse 30,4 ko. Cependant, n&#39;y connaissant rien en Flash, je ne me permettrais pas d&#39;avancer d&#39;arguments pour ou contre l&#39;une de ces solutions. Le choix de cette bibliothèque est avant tout motivé par le but principal de ce blog, présenter des solutions AJAX pour Lotus Domino.&lt;/p&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0); font-weight: bold;&quot;&gt;Installation de la bibliothèque&lt;/span&gt; &lt;p&gt;Pour utiliser la bilbiothèque il faut tout d&#39;abord télécharger le package disponible sur la page de présentation de la bibliothèque. Une fois le fichier décompressé, ajouter les fichiers javascript et la feuille de style dans les ressources partagées de la base Lotus Notes. Les fichiers à ajouter sont :&lt;/p&gt; &lt;ul&gt; &lt;li&gt;moo.fx.js  &lt;/li&gt;&lt;li&gt;moo.fx.pack.js  &lt;/li&gt;&lt;li&gt;protoype.lite.js  &lt;/li&gt;&lt;li&gt;showcase.slideshow.js  &lt;/li&gt;&lt;li&gt;timed.slideshow.js  &lt;/li&gt;&lt;li&gt;jd.slideshow.css&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Si l&#39;on utilise déjà prototype.js, inutile d&#39;ajouter prototype.lite.js.&lt;/p&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0); font-weight: bold;&quot;&gt;Utilisation de la biliothèque&lt;/span&gt; &lt;p&gt;Comme décrit dans la documentation, il faut&lt;/p&gt; &lt;ol&gt; &lt;li&gt;déclarer les bibliothèques javascript et la feuille de style  &lt;/li&gt;&lt;li&gt;déclarer les images à présenter  &lt;/li&gt;&lt;li&gt;personnaliser la taille de la zone d&#39;affichage  &lt;/li&gt;&lt;li&gt;définir la zone d&#39;affichage dans la page&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;La déclaration des images à présenter se fait à travers un tableau déclaré en javascript sous la forme :&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;mySlideData[countArticle++] = new Array(&lt;br /&gt;&#39;image1.jpg&#39;,&lt;br /&gt;&#39;article1.html&#39;,&lt;br /&gt;&#39;Item 1 Title&#39;,&lt;br /&gt;&#39;Item 1 Description&#39;&lt;br /&gt;);&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0); font-weight: bold;&quot;&gt;Intégration dans Lotus Notes&lt;/span&gt;&lt;br /&gt;&lt;p&gt;Pour faciliter la mise à jour des photos, je passerais par un masque pour gérer les photos à afficher. Ce masque est défini avec les champs suivants :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Titre : champ texte libre&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lien : champ texte libre&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Description : champ texte libre&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Photo : champ texte riche&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Une fois le masque créé, reste à définir une vue &quot;Photos&quot;. Pour me faciliter la tache, la vue présentera directement le code Javascript à intégrer dans ma page. La formule de colonne sera :&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&quot;mySlideData[countArticle++] = new Array(&#39;&quot;&lt;br /&gt;+ &quot;0/&quot; + @Text(@DocumentUniqueID) + &quot;/$file/&quot;&lt;br /&gt;+ @subset(@attachmentnames; 1) + &quot;&#39;, &#39;&quot;&lt;br /&gt;+ Lien + &quot;&#39;, &#39;&quot;&lt;br /&gt;+ Titre + &quot;&#39;, &#39;&quot;&lt;br /&gt;+ Description + &quot;&#39;);&quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Ne pas oublier de trier la première colonne dans la vue pour pouvoir extraire les données avec @dbColumn.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pour créer ma page Web, je vais passer par une page Notes mais on peut aussi l&#39;intégrer dans un masque.&lt;/p&gt;&lt;p&gt;Comme&lt;span style=&quot;font-style: italic;&quot;&gt; contenu de titre HTML&lt;/span&gt; il faut intégrer les librairies javascript, ajouter un évenement Onload pour lancer le bandeau à l&#39;ouverture de la page puis définir les images à afficher à partir de la vue précédemment créée et enfin définir les options de style pour définir la taille du bandeau, soit :&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;Photos:= @DbColumn(&quot;&quot;:&quot;&quot;;&quot;&quot;;&quot;Photos&quot; 1);&lt;br /&gt;@If(@IsError(val); &quot;&quot; ;&lt;br /&gt;&quot;&amp;lt;script src=\&quot;prototype.lite.js\&quot; type=\&quot;text/javascript\&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=\&quot;moo.fx.js\&quot; type=\&quot;text/javascript\&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=\&quot;moo.fx.pack.js\&quot; type=\&quot;text/javascript\&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=\&quot;timed.slideshow.js\&quot; type=\&quot;text/javascript\&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;link rel=\&quot;stylesheet\&quot; href=\&quot;jd.slideshow.css\&quot;&lt;br /&gt;type=\&quot;text/css\&quot; media=\&quot;screen\&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type=\&quot;text/javascript\&quot;&amp;gt;&lt;br /&gt;function addLoadEvent(func) {&lt;br /&gt;var oldonload = window.onload;&lt;br /&gt;if (typeof window.onload != &#39;function&#39;) {&lt;br /&gt;window.onload = func; }&lt;br /&gt;else {&lt;br /&gt;window.onload = function() {&lt;br /&gt;oldonload();&lt;br /&gt;func();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;function startSlideshow() {&lt;br /&gt;initSlideShow($(&#39;mySlideshow&#39;), mySlideData);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;countArticle = 0;&lt;br /&gt;var mySlideData = new Array();&quot;&lt;br /&gt;+ @Implode(Photos) +&lt;br /&gt;&quot;addLoadEvent(startSlideshow); &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;#mySlideshow {&lt;br /&gt;width: 400px !important;&lt;br /&gt;height: 200px !important;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&quot;); &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Il ne reste plus qu&#39;à indiquer dans la page où afficher le bandeau en ajoutant en tant que texte HTML relais :&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;mySlideshow&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;C&#39;est fini, voici un exemple de résultat avec quelques &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/slide&quot;&gt;photos du Golfe du Morbihan&lt;/a&gt;.&lt;p&gt;&lt;/p&gt;</description><link>http://dominoweb.blogspot.com/2006/08/ajax-photos-de-vacances.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115507203660700847</guid><pubDate>Tue, 08 Aug 2006 20:08:00 +0000</pubDate><atom:updated>2006-08-08T23:20:36.780+02:00</atom:updated><title>ASTUCE - CSS dans Notes</title><description>J&#39;ai découvert très récemment que l&#39;on pouvait appliquer les feuilles CSS sur le client Lotus Notes 6. C&#39;était pourtant écrit dans l&#39;aide, mais je n&#39;avais même pas osé imaginer que celà était possible. Attention, cependant il y a de très fortes limitations. Pour le moment on ne peut appliquer un style CSS qu&#39;à quelques éléments, de plus les classes et style semblent ne pas être gérés sur le client.&lt;br /&gt;&lt;br /&gt;Une application qui peut être éventuellement intéressante est la personnalisation des tableaux créés dans  un champ texte riche.&lt;br /&gt;&lt;br /&gt;Pour appliquer un style à un masque, il faut commencer par créer sa feuille de style dans un fichier texte avec notepad, ou un autre éditeur de texte (j&#39;utilise &lt;a href=&quot;http://www.pspad.com/fr/&quot;&gt;PSPad&lt;/a&gt;). La feuille de style pourra par exemple ressembler à :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;TD {&lt;br /&gt;  border : 1px solid #ddd;&lt;br /&gt;  background : #eee;&lt;br /&gt;  color : #333;&lt;br /&gt;  font-family : tahoma;&lt;br /&gt;  font-size : 12px;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Une fois le fichier enregistré, il faut l&#39;intégrer dans une base Notes comme ressource &quot;Feuille de style&quot;.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/notes_ressource.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Pour appliquer la feuille de style à un masque :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ouvrir le masque,&lt;/li&gt;&lt;li&gt;Sélectionner dans le menu &quot;Création\Ressource\Insérer ressource&quot;&lt;/li&gt;&lt;li&gt;Sélectionner &quot;Feuille de style&quot; comme type de ressource&lt;/li&gt;&lt;li&gt;Sélectionner le fichier puis cliquer sur OK&lt;br/&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/notes_ressource2.0.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;&lt;/ul&gt;Un(e) icone symbolisant la ressource doit apparaitre dans le masque Notes.&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/notes_ressource3.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;Il ne reste plus qu&#39;à enregistrer le masque, c&#39;est terminé. Lorsqu&#39;un utilisateur créera un nouveau tableau dans un champ texte riche de ce masque, ce tableau s&#39;affichera avec les options de style définies.&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/notes_tableau.png&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;On peut aussi appliquer un style à la balise IMG pour ajouter automatiquement une bordure autour des images iportées ou collées. La feuille de style pourra alors être :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;IMG {&lt;br /&gt;  padding : 5px;&lt;br /&gt;  border : 4px solid #373;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/notes_image.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;Les possibilités semblent encore trop limitées pour être vraiment interressantes à exploiter. Il faudrait voir si le support des feuilles CSS évolue avec les prochaines versions de Notes.</description><link>http://dominoweb.blogspot.com/2006/08/astuce-css-dans-notes.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115497271168605829</guid><pubDate>Mon, 07 Aug 2006 17:32:00 +0000</pubDate><atom:updated>2006-08-07T21:04:12.316+02:00</atom:updated><title>ASTUCE - Forcer les propriétés de mise en forme du texte d&#39;un champ texte riche sur le Web</title><description>Rien de plus désagréable qu&#39;un site Web où les fontes de caractères diffèrent d&#39;une page à l&#39;autre. S&#39;il est possible de maitriser une charte graphique pour un site à vocation publique, il est beaucoup plus difficile, voire impossible,  de l&#39;imposer pour les importantes bases documentaires internes. A la décharge des utilisateurs, Lotus Notes préserve les propriétés de texte lors des copier/coller depuis les applications Office ou depuis les pages Web.&lt;br /&gt;&lt;br /&gt;Heureusement, le moteur de conversion Web Domino n&#39;est pas toujours propre. Il utilise toujours les &quot;vieilles&quot; balises HTML et plus particulièrement la balise &amp;lt;font&amp;gt; pour définir la police de caractère et sa taille. Pour maitriser le rendu du champ texte riche sur le Web il suffit donc de redéfinir le style de cette balise. Ainsi on peut par exemple ajouter en entête de la page web :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;&lt;br /&gt;font {&lt;br /&gt;font-family : tahoma, arial, helvetica, sans-serif;&lt;br /&gt;font-size : 1em;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Quelque soit la fonte utilisée et quelque soit sa taille définie dans Notes, le contenu du champ apparaitra toujours en fonte tahoma taille 1em. L&#39;utilisateur pourra par contre mettre en gras ou souligner les caractères afin d&#39;ajouter un peu d&#39;effets au contenu.&lt;br /&gt;&lt;br /&gt;On peut bien sûr aussi entourer le champ texte riche d&#39;un div avec une classe définie afin de limiter la portée de l&#39;effet à ce champ. On aura alors dans le masque :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;mybody&quot;&amp;gt;&lt;br /&gt;Champ texte riche&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;et pour la définition du style :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;&lt;br /&gt;#mybody font {&lt;br /&gt; font-family : georgia, &quot;Times New Roman&quot;, Times, Roman, serif;&lt;br /&gt; font-size : 12px;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description><link>http://dominoweb.blogspot.com/2006/08/astuce-forcer-les-proprits-de-mise-en.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115495753938702431</guid><pubDate>Mon, 07 Aug 2006 12:27:00 +0000</pubDate><atom:updated>2006-08-07T21:17:48.693+02:00</atom:updated><title>GRAPHISME - Amélioration des graphiques Excel</title><description>C&#39;est l&#39;été, il fait beau et chaud. Je vais donc profiter du mois d&#39;août, non pas pour faire une pause, mais pour aborder des sujets que certains pourront trouver plus futiles. Je commencerai par l&#39;aspect graphique lié au Web 2.0. Chaque décennies voit apparaitre une nouvelle mode graphique : les coins carrés, les coins arrondis, les ombres portées, etc... Avec le Web 2.0 (et aussi Apple) est arrivé l&#39;effet reflet.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/graph.0.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;Le mois d&#39;août étant le mois le moins chargé de l&#39;année, je profite toujours de cette période pour revoir ma documentation et les présentations que je suis amené à diffuser. J&#39;ai donc profiter de l&#39;occasion pour voir comment améliorer le rendu des graphiques générés par Excel. Même si le plus important reste le contenu, l&#39;auditeur est toujours plus attentif si le visuel est agréable.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;ETAPE 1 : Préparation du graphique sous Microsoft Excel (ou Calc avec Open Office)&lt;/span&gt;&lt;br /&gt;Je ne vais pas donner de cours d&#39;Excel étant très limité en ce domaine. Les seules recommandations que je donnerai est de ne pas se soucier des couleurs car elles pourront être modifiée sous Adobe Photoshop, mais faire très attention de supprimer les bordures des graphiques.&lt;br /&gt;Une fois le graphique prêt, supprimer la légende et agrandir le graphique le plus possible selon la mémoire que vous possédez sur votre ordinateur. L&#39;agrandissement du graphique permettra de supprimer l&#39;effet &quot;escalier&quot;. Copier le graphique et coller le comme nouvelle image dans votre éditeur graphique. J&#39;utiliserais Adobe Photoshop mais celà doit aussi pouvoir fonctionner avec Paint Shop Pro ou Gimp.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;ETAPE 2 : Préparation du graphique sous l&#39;éditeur graphique&lt;/span&gt;&lt;br /&gt;Je commence par modifier les couleurs de mon graphique. Photoshop m&#39;offre beaucoup plus de possibilités que la palette limitée d&#39;Excel. Je décommande d&#39;appliquer des dégradés sur les graphiques qui allourdissent un peu trop à mon goût.&lt;br /&gt;Pour coloriser mon graphique, j&#39;utilise la &quot;baguette magique&quot; pour sélectionner la zone à colorisée puis le pot de peiture pour appliquer la nouvelle couleur.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/baguettemagique.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;ETAPE 3 : Préparation de la zone de travail&lt;/span&gt;&lt;br /&gt;Avant de redimensionner l&#39;image, je supprime les zone de blanc en trop autour du graphique en utilisant l&#39;outil de recadrage. Il est maintenant possible de redimensionner l&#39;image à la taille souhaitée. Pour redimensionner l&#39;image sous photoshop il faut sélectionner l&#39;option du menu &quot;Image\Taille de l&#39;image&quot; puis indiquer la largeur et/ou la hauteur souhaitée. J&#39;utilise de nouveau la baguette magique pour sélectionner le fond bland et je le supprime. Il ne doit plus que rester le graphique et éventuellement l&#39;échelle dans le cas de graphiques à barres.&lt;br /&gt;&lt;br /&gt;L&#39;effet de reflet doit être affichée sous le graphique il faut donc agrandir la zone de travail. Sous Photoshop il faut sélectionner l&#39;option du menu &quot;Image\Taille de la zone de travail&quot;. Dans la boite de configuration j&#39;indique une hauteur deux fois plus importante que celle proposée et clique sur la case du haut pour lui indiquer d&#39;agrandir la zone vers le bas.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/zonedetravail.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;ETAPE 4 : Application de l&#39;effet reflet&lt;/span&gt;&lt;br /&gt;Depuis la zone de calque, click droit sur le calque du graphique puis sélectionner l&#39;option &quot;dupliquer calque&quot;.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/dupliquer.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;Sélection du nouveau calque créer puis sélectionner dans le menu &quot;Edition\Transformation\Symétrie axe vertical&quot;. Déplacer alors le graph retourné sous l&#39;autre graphique.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/move.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Sélectionner l&#39;option &quot;masque de fusion&quot; sur le calque du graphique retourné dans la boite de visualisation des calques.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/fusion.0.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Sélectionner l&#39;outil de dégradé en spécifiant comme type de dégradé noir vers transparent.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/degrade.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Appliquer le dégradé sur le graphique inversé en partant du milieu de ce graphique vers le haut du graphique.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/degradeapplique.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Vous devriez obtenir un résultat comme celui-ci :&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/degraderesult.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Il ne reste plus qu&#39;à règler l&#39;opacité du calque de reflet en le baissant à 15% par exemple puis en appliquant un fond sur un nouveau calque si nécessaire.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/transparence.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Cette méthode peut bien sûr s&#39;appliquer à tout type d&#39;image et de texte et pas seulement de graphiques Excel.</description><link>http://dominoweb.blogspot.com/2006/08/graphisme-amlioration-des-graphiques.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115366593491662328</guid><pubDate>Wed, 26 Jul 2006 17:19:00 +0000</pubDate><atom:updated>2006-07-26T20:11:35.303+02:00</atom:updated><title>AJAX - Rico Accordion : Les vues catégorisées</title><description>Le classe accordion de RICO offre une solution très simple de représentation des vues catégorisées sous forme d&#39;accordéon.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/accordion.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;La structure des données à représenter doit être sous le format suivant :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;un_identifiant_de_bloc_pour_rico&quot;&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;Titre de la catégorie&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;Contenu du panneau&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Préparation de la vue Notes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La vue Notes pourra être définie ainsi :&lt;ul&gt;&lt;li&gt;1ère colonne : Catégorisée avec pour formule &lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&quot;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;div&amp;gt;&quot; + champ_categorie + &quot;&amp;lt;/div&amp;gt;&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;colonnes suivantes : &lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&quot;&amp;lt;span&amp;gt;&quot; + valeur_affichée + &quot;&amp;lt;/span&amp;gt;&quot;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;Le &amp;lt;span&amp;gt; permet juste de séparer les valeurs affichées dans cet exemple. On pourra le remplacer par n&#39;importe quelle autre balise.&lt;br /&gt;Il faut aussi cocher &quot;Traiter contenu comme code HTML&quot; depuis le cinquième onglet des propriétés de la vue.&lt;br /&gt;&lt;br /&gt;Préparation du masque de vue&lt;br /&gt;Le masque associée à la vue précédente devra porter le nom $$ViewTemplate For nom_de_la_vue. Même si on peut coder le masque entièrement en HTML en cochant l&#39;option Type de contenu: HTML&quot; depuis le second onglet des propriétés du masque je vais porfiter de l&#39;occasion pour faire sans dans cet exemple.&lt;br /&gt;&lt;br /&gt;Pour commencer il faut inclure les librairies Javascript. Celà se fait normalement entre les balese HEAD de la page HTML. L&#39;équivalent Lotus Notes est la référence &quot;Contenu de titre HTML&quot; présent depuis le panneau présenté sous le masque. Il fautindiquer comme formule : &lt;pre class=&quot;code&quot;&gt;&lt;code&gt;{&amp;lt;script src=&quot;prototype-1.4.0.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;rico.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;}&lt;/code&gt;&lt;/pre&gt;Attention au chemin des libraires Javascript.&lt;br /&gt;&lt;br /&gt;Il faut ensuite instancier la casse accordion en lui spécifiant l&#39;ID de l&#39;élément à transformé. Ceci se fait généralement à l&#39;évènement OnLoad de la page. Toujours depuis le panneau de référence présent sous le masque, il faut cliquer sur &quot;OnLoad&quot; et indiquer le code Javascript : &lt;pre class=&quot;code&quot;&gt;&lt;code&gt;new Rico.Accordion( $(&#39;identifiant_bloc&#39;) );&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Enfin, dans le masque, il reste à intégrer la vue en ajoutant la déclaration du bloc accordéon comme ceci :&lt;pre class=&quot;code&amp;quot;&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;identifiant_code&quot;&amp;gt;&lt;br /&gt; &amp;lt;div&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt; &lt;span style=&quot;font-style: italic;&quot;&gt;insertion de la vue intégrée ici&lt;/span&gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;Ne pas oublier de déclarer le code HTML insérer comme HTML relais en le sélectionnant puis en cliquant sur l&#39;option du menu Texte\HTML Relais.&lt;br /&gt;&lt;br /&gt;Un &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/waccordion&quot;&gt;exemple en ligne&lt;/a&gt; permet de visualiser le résultat en présentant les articles de ce blog par thème. De plus vous pourrez trouver d&#39;autres exemples de l&#39;utilisation de cette classe sur le blog Malaisien (mais en anglais) &lt;a href=&quot;http://notesweb2.blogspot.com/&quot;&gt;Lotus Notes on Web 2.0&lt;/a&gt;.</description><link>http://dominoweb.blogspot.com/2006/07/ajax-rico-accordion-les-vues.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115356530661734107</guid><pubDate>Sat, 22 Jul 2006 10:36:00 +0000</pubDate><atom:updated>2006-07-24T23:30:32.373+02:00</atom:updated><title>AJAX - Rico LiveGrid : personnalisation Lotus Notes</title><description>En utilisant Firebug, on peut constater que Rico envoie une requète AJAX sous le format : data.xml?openview&amp;id=data_grid&amp;amp;page_size=70&amp;offset=149&amp;amp;sort_col=titre1&amp;sort_dir=ASC&amp;amp;_=. Il faut donc modifier le format de cette requète pour qu&#39;elle prenne en compte les paramètres d&#39;URL standard d&#39;appel des vues Notes.&lt;br /&gt;&lt;br /&gt;Pour rappel ces paramètres sont :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start : pour définir la ligne de départ. C&#39;est l&#39;équivalent du offset. Attention, le offset commence à 0 alors que le Start commence à 1.&lt;/li&gt;&lt;li&gt;Count : nombre de ligne à afficher. C&#39;est l&#39;équivalent du page_size.&lt;/li&gt;&lt;li&gt;ResortDescending=xx ou ResortAscending=xx : pour forcer un tri décroissant ou croissant sur la colonne xx. C&#39;est l&#39;équivalent de &amp;sort_col=titre1&amp;amp;sort_dir=ASC. Attention, Rico prend en compte le titre de la colonne alors que Notes attend le numéro de la colonne.&lt;/li&gt;&lt;/ul&gt;Pour plus d&#39;informations sur le format d&#39;URL de Domino, consulter la page &quot;&lt;a href=&quot;http://www-128.ibm.com/developerworks/lotus/library/ls-Domino_URL_cheat_sheet/&quot;&gt;Domino URL cheat sheet&lt;/a&gt;&quot; du site IBM Lotus.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Fonction prototype object.extend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Les paramètres de l&#39;URL sont codés dans la fonction fetchBuffer de la classe RICO.LiveGrid dans le fichier rico.js. Ne souhaitant pas modifier le fichier rico.js j&#39;ai préféré utiliser la fonction prototype Object.extend.&lt;br /&gt;Object.extend permet de redéfinir la fonction fetchBuffer sans avoir à toucher au fichier rico.js.&lt;br /&gt;Pour utiliser cette fonction avec Rico il faut pour le moment l&#39;appliquer sur une instance de la classe. Ceci devrait être corrigé dans la prochaine version de prototype.&lt;br /&gt;&lt;br /&gt;Dans la pratique celà va donner :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;var PobreLiveGrid = new Rico.LiveGrid (&quot;data_grid&quot;,18, 445,&lt;br /&gt; &quot;data.xml?openview&quot;, opts);&lt;br /&gt;Object.extend(PobreLiveGrid, {&lt;br /&gt;...&lt;br /&gt;});&lt;/code&gt;&lt;/pre&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Personnalisation de RICO.LiveGrid pour Notes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Je copie le code de la fonction définie dans RICO est ne modifie que la définition de QueryString dans le cas d&#39;un appel standard et dans le cas d&#39;un appel avec un tri sur colonne.&lt;br /&gt;&lt;br /&gt;Le code final est :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;Object.extend(PobreLiveGrid, {&lt;br /&gt; /**&lt;br /&gt;   * PobreLiveGrid : fetchBuffer&lt;br /&gt;   * LiveGrid pour IBM Lotus Notes/Domino&lt;br /&gt;   * -----------------------------------------------------------&lt;br /&gt;   * Modification de la création de l&#39;URL d&#39;appel de mise à jour&lt;br /&gt;   * des données de la table pour l&#39;adapter aux URL de contrôle&lt;br /&gt;   * des vues Lotus Notes.&lt;br /&gt;   *&lt;br /&gt;   * page_size &amp;lt;=&amp;gt;  count&lt;br /&gt;   * offset &amp;lt;=&amp;gt;  start&lt;br /&gt;   * sortcol=x&amp;sort_dir=ASC &amp;lt;=&amp;gt; ResortAscending=x&lt;br /&gt;   * sortcol=x&amp;sort_dir=DESC &amp;lt;=&amp;gt;  ResortDescending=x&lt;br /&gt;   *&lt;br /&gt;   * -----------------------------------------------------------&lt;br /&gt;   * Special thanks to Ross Lawley on Rico Forum&lt;br /&gt;   *&lt;br /&gt;   **/&lt;br /&gt; &lt;br /&gt;   fetchBuffer: function(offset) {&lt;br /&gt;     if ( this.buffer.isInRange(offset) &amp;&amp;amp;&lt;br /&gt;            !this.buffer.isNearingLimit(offset)) {&lt;br /&gt;       return;&lt;br /&gt;     }&lt;br /&gt;     if (this.processingRequest) {&lt;br /&gt;       this.unprocessedRequest = new Rico.LiveGridRequest(offset);&lt;br /&gt;       return;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     var bufferStartPos = this.buffer.getFetchOffset(offset);&lt;br /&gt;     this.processingRequest = new Rico.LiveGridRequest(offset);&lt;br /&gt;     this.processingRequest.bufferOffset = bufferStartPos;&lt;br /&gt;     var fetchSize = this.buffer.getFetchSize(offset);&lt;br /&gt;     var partialLoaded = false;&lt;br /&gt;&lt;br /&gt;     var queryString;&lt;br /&gt;     if (this.options.requestParameters)&lt;br /&gt;       queryString = this._createQueryString(this.options.requestParameters, 0);&lt;br /&gt;&lt;br /&gt;     queryString = (queryString == null) ? &#39;&#39; : queryString+&#39;&amp;&#39;;&lt;br /&gt;&lt;br /&gt;     queryString  = queryString+&#39;id=&#39;+this.tableId+&#39;&amp;Count=&#39;+&lt;br /&gt;       fetchSize+&#39;&amp;amp;Start=&#39;+(bufferStartPos+1)+&#39;&amp;offset=&#39;+bufferStartPos;&lt;br /&gt;&lt;br /&gt;     if (this.sortCol) {&lt;br /&gt;       var sortNotes =&lt;br /&gt;(this.sortDir==&quot;ASC&quot;?&quot;ResortAscending&quot;:&quot;ResortDescending&quot;);&lt;br /&gt;       queryString = queryString+&#39;&amp;&#39;+sortNotes+&#39;=&#39;+escape(this.sortCol);&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     this.ajaxOptions.parameters = queryString;&lt;br /&gt;&lt;br /&gt;     $(ajax_call).innerHTML = queryString;&lt;br /&gt;     ajaxEngine.sendRequest( this.tableId + &#39;_request&#39;, this.ajaxOptions);&lt;br /&gt;&lt;br /&gt;     this.timeoutHandler = setTimeout( this.handleTimedOut.bind(this),&lt;br /&gt;this.options.bufferTimeout);&lt;br /&gt;   }&lt;br /&gt; })&lt;/code&gt;&lt;/pre&gt;J&#39;ai gardé la références standard de Rico offset qui sert dans le code. Celà ne pose pas de problème à Lotus Notes qui ignore ce paramètre.&lt;br /&gt;Reste tout de même un problème. Nous souhaitons récupérer le numéro de la colonne à trier et non son nom. Heaureusement LiveGrid offre une option de paraméttrage de la classe très interressante qui non seulement va permettre de règler ce dernier soucis mais en plus permet de restreindre le nombre de colonnes que l&#39;on souhaite triable.&lt;br /&gt;&lt;br /&gt;Il faut modifier la définition de opts comme ceci :&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;var opts = {&lt;br /&gt;   prefetchBuffer: false,&lt;br /&gt;   onscroll : updateHeader,&lt;br /&gt;   sortAscendImg: &#39;sort_asc.gif&#39;,&lt;br /&gt;   sortDescendImg: &#39;sort_desc.gif&#39;,&lt;br /&gt;   columns : [[&quot;1&quot;,true],[&quot;3&quot;,true],[&quot;5&quot;,true],[&quot;7&quot;,true],[&quot;9&quot;,true]]&lt;br /&gt; };&lt;/code&gt;&lt;/pre&gt;Le paramètre columns : [[&quot;valeur de colonne&quot;,triable(vrai/faux)]] doit contenir toutes les références aux colonnes affichées. Il renvoi &quot;valeur de colonne&quot; comme identifiant de la colonne au lieu de son nom.&lt;br /&gt;&lt;br /&gt;Il faut faire très attention car les numéros de colonnes affichées sur la page Web ne correspondent pas obligatoirement aux numéro de colonne de la vue Lotus Notes. Ainsi dans l&#39;exemple présenté dans l&#39;article précédent (&lt;a href=&quot;http://dominoweb.blogspot.com/2006/07/ajax-rico-livegrid-pour-reprsenter-les.html&quot;&gt;AJAX - Rico LiveGrid pour représenter les vues Lotus Notes&lt;/a&gt;), une colonne sur deux permettait de définir les balises HTML qui sont par la suite interprétées.&lt;br /&gt;Les colonnes contenant les valeurs, sont les colonnes impaires dans ce cas (1, 3, 5, 7, 9). C&#39;est ce qu&#39;il faudra renvoyer à Lotus Notes.&lt;br /&gt;&lt;br /&gt;Pour voir le code complet, je vous invite à lire le code source de l&#39;&lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/livegrid?openpage&quot;&gt;exemple en ligne Rico LiveGrid&lt;/a&gt;.</description><link>http://dominoweb.blogspot.com/2006/07/ajax-rico-livegrid-personnalisation.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115355772560603905</guid><pubDate>Sat, 22 Jul 2006 08:31:00 +0000</pubDate><atom:updated>2006-07-22T11:36:12.193+02:00</atom:updated><title>AJAX - Rico LiveGrid pour représenter les vues Lotus Notes</title><description>Il existe un nombre de plus en plus important de librairies Javascript AJAX. Après avoir beaucoup parlé de Scriptaculous, il est temps d&#39;en présenter de nouvelles. &lt;a href=&quot;http://openrico.org/rico/home.page&quot;&gt;RICO&lt;/a&gt;, s&#39;appuie sur prototype.js, comme scriptaculous. Il offre la classe &lt;a href=&quot;http://openrico.org/rico/livegrid.page&quot;&gt;LiveGrid&lt;/a&gt; qui m&#39;a particulièrement interressé après avoir découvert le nouveau moteur de recherche de Microsoft, &lt;a href=&quot;http://www.live.com/&quot;&gt;live.com&lt;/a&gt;. Sur ce site, la barre de navigation pour accéder aux pages a disparu. Adieu &quot;page suivante&quot; ou &quot;page précédente&quot;. Les résultats de la recherche s&#39;affichent dans une longue liste qui se charge selon la position de l&#39;ascenceur. Hors, ce qui me dérange le plus dans la gestion des vues Notes sur le web est justement la gestion de la navigation entre pages. RICO apporterait il la solution ?&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/gridlive.gif&quot; border=&quot;0&quot; alt=&quot;Rico LiveGrid&quot; /&gt;&lt;br /&gt;La classe LiveGrid n&#39;est certes pas encore parfaite, cependant le résultat me semble interressant à suivre. Toutes les vues notes ne sont pas représentables sur ce type d&#39;interface, comme les vues catégorisées. Il est à noter que les vues catégorisées ne sont de toute façon pas vraiment utilisables sur le Web en natif non plus.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Installation de la librairie RICO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La librairie RICO ne comporte qu&#39;un seul fichier javascript. Il faudra, par contre,&lt;br /&gt;obligatoirement installer aussi la librairie prototype.js.&lt;ol&gt;&lt;li&gt;Télécharger la librairie RICO 1.1.2 sur la &lt;a href=&quot;http://openrico.org/rico/downloads.page&quot;&gt; page de téléchargement du site&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Télécharger la librairie prototype 1.4.0 sur le &lt;a href=&quot;http://prototype.conio.net/&quot;&gt; site de conio&lt;/a&gt; (sélectionner le lien &quot;Just the .js, please&quot;).&lt;/li&gt;&lt;li&gt;Intégrer les deux fichiers dans les ressources de la base Lotus Notes.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;La classe Rico.LiveGrid&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour utiliser LiveGrid, il va falloir définir une page Web appelant les librairies et initialisant un tableau permettant de représenter la vue. Ce tableau sera constitué de deux parties :&lt;ul&gt;&lt;li&gt;une entête : pour la définition des titres de colonnes&lt;/li&gt;&lt;li&gt;les données : pour bien s&#39;afficher, les premières lignes de données doivent être initialisées dans la page. Par la suite ces données seront directement extraites d&#39;un fichier XML.&lt;/li&gt;&lt;/ul&gt;Par rapport aux autres classes Javascript déjà présentées, l&#39;utilisation de LiveGrid est particulièrement contraignante. J&#39;espère que celà sera amélioré dans la version 2 de la librairie.&lt;br /&gt;Pour représenter une vue Lotus Notes avec LiveGrid, j&#39;utilise donc une page au format HTML et une vue avec un masque associé au format XML. On pourrait aussi passer par un agent pour générer le flux XML mais, comme déjà expliqué, l&#39;utilisation d&#39;une vue permet d&#39;économiser des ressources serveur.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Définition de la vue XML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Les données transmises à la classe LiveGrid devront avoir le format XML suivant :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;ajax-response&amp;gt;&lt;br /&gt;  &amp;lt;response type=&quot;object&quot; id=&quot;data_grid_updater&quot;&amp;gt;&lt;br /&gt;    &amp;lt;rows update_ui=&quot;true&quot;&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Valeur 1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Valeur 2...&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;      ...&lt;br /&gt;      &amp;lt;tr&amp;gt;...&amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;/rows&amp;gt;&lt;br /&gt;  &amp;lt;/response&amp;gt;&lt;br /&gt;&amp;lt;/ajax-response&amp;gt;&lt;/code&gt;&lt;/pre&gt;Pour arriver à une telle représentation j&#39;ai définie ma vue avec les paramètres suivants ;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Nom de la vue : data.xml&lt;/span&gt;&lt;br /&gt;Traiter contenu comme code HTML depuis l&#39;avant-dernier onglet des options de la vue.&lt;ul&gt;&lt;li&gt;Colonne 1 : &quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&quot;&lt;/li&gt;&lt;li&gt;Colonne 2 : Champ ou formule à représenter dans la grille&lt;/li&gt;&lt;li&gt;Colonne 3 : &quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&quot;&lt;/li&gt;&lt;li&gt;Colonne 4 : Champ ou formule à représenter dans la grille&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;li&gt;Colonne n : &quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&quot;&lt;/li&gt;&lt;/ul&gt;De plus, afin de pouvoir utiliser les options de tri de la vue il faut cocher &quot;Cliquer sur titre de colonne à trier&quot; avec la valeur &quot;Les deux&quot; pour chacune des colonnes représentant des valeurs à afficher.&lt;br /&gt;&lt;br /&gt;Il faut maintenant déclarer un masque de vue associé&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Nom du masque : $$ViewTemplate For data.xml&lt;/span&gt;&lt;br /&gt;Depuis le second onglet des propriétés du masque, cocher &quot;Type de contenu : Autre&quot; et indiquer comme valeur : application/xml&lt;br /&gt;Le contenu du masque est :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;ajax-response&amp;gt;&lt;br /&gt;&amp;lt;response type=&quot;object&quot; id=&quot;data_grid_updater&quot;&amp;gt;&lt;br /&gt;&amp;lt;rows update_ui=&quot;true&quot;&amp;gt;&lt;br /&gt;Ajout de la vue intégrée data.xml&lt;br /&gt;&amp;lt;/rows&amp;gt;&lt;br /&gt;&amp;lt;/response&amp;gt;&lt;br /&gt;&amp;lt;/ajax-response&amp;gt;&lt;/code&gt;&lt;/pre&gt;Le nombre de lignes affichées dans la vue intégrée n&#39;a aucune importance. Pour tester votre nouveau fichier XML, ouvrir la vue data.xml depuis un navigateur Web. Le format XML étant très contraigant il est possible que vous ayez un message d&#39;erreur selon le texte affiché. Il n&#39;est pas autorisé, par exemple, d&#39;afficher le caractère &#39;&amp;&#39;. Vous pouvez le supprimer ou le remplacer automatiquement, si nécessaire, à travers la formule de la colonne.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;La page Web&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;J&#39;ai déclarer le contenu de ma page comme étant au format HTML dans les options de la page. De plus, j&#39;ai volontairement supprimé toutes références au style dans le code fourni afin de ne pas l&#39;allourdir. Le contenu de la page doit ressembler à celà : &lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;body onload=&quot;javascript:bodyOnLoad();&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table id=&quot;data_grid_header&quot; class=&quot;fixedTable&quot; &lt;br /&gt;  cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; style=&quot;width:560px&quot;&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;th class=&quot;first tableCellHeader&quot;&amp;gt;Titre Colonne 1&amp;lt;/th&amp;gt;&lt;br /&gt;    &amp;lt;th class=&quot;tableCellHeader&quot;&amp;gt;Titre Colonne 2&amp;lt;/th&amp;gt;&lt;br /&gt;    &amp;lt;th class=&quot;tableCellHeader&quot;&amp;gt;Titre Colonne 3&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id=&quot;viewPort&quot; style=&quot;float:left&quot;&amp;gt;&lt;br /&gt;&amp;lt;table id=&quot;data_grid&quot; class=&quot;fixedTable&quot; &lt;br /&gt;  cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; style=&quot;float:left;width:560px;&quot;&amp;gt;&lt;br /&gt;  &lt;span style=&quot;font-style:italic;&quot;&gt;On ajoute ici la vue vue intégrée data.xml&lt;/span&gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;Attention, le nombre de lignes affichées dans la vue intégrée est très important ici. Il faut que ce nombre soit un peu supérieur au nombre de lignes à affichées.&lt;br /&gt;&lt;br /&gt;Il ne reste plus qu&#39;à déclarer l&#39;entête du fichier HTML afin d&#39;initialiser la LiveGrid.&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;fr&quot; lang=&quot;fr&quot;&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Domino &amp; Web 2.0 : Rico LiveGrid&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;prototype.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;rico.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script language=&quot;javascript&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;function bodyOnLoad(){&lt;br /&gt;  var opts = { &lt;br /&gt;    prefetchBuffer: false, &lt;br /&gt;    onscroll : updateHeader&lt;br /&gt;  };&lt;br /&gt;  new Rico.LiveGrid (&quot;data_grid&quot;,18, 445, &quot;data.xml?openview&quot;, opts);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function updateHeader( liveGrid, offset ) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/code&gt;&lt;/pre&gt;Les options de déclarations de la LiveGrid sont : &lt;ul&gt;&lt;li&gt;&quot;datagrid&quot; : ID du tableau où seront représenter les valeurs&lt;/li&gt;&lt;li&gt;18 : nombre de lignes à afficher à l&#39;écran&lt;/li&gt;&lt;li&gt;445 : nombre de lignes de la vue. Cette valeur devrait être calculée&lt;/li&gt;&lt;li&gt;&quot;data.xml?openview&quot; : URL du flux XML&lt;/li&gt;&lt;li&gt;opts : options complémentaires. Pour le moment celà ne sert pas&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;La page ainsi définie ne permet pas encore de trier la vue en cliquant sur une colonne ni de gérer le téléchargement des données en tâche de fond. Les paramètres d&#39;appel de la vue XML sont codés dans la librairie rico.js. Hors ces paramètres ne correspondent évidemment pas à la syntaxe d&#39;appel des vues Lotus Notes. Ceci sera corrigé dans le prochain article.&lt;br /&gt;&lt;br /&gt;En attendant, voici &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/livegrid?openpage&quot;&gt;un exemple complet en ligne&lt;/a&gt;. N&#39;ayant pas pu tester l&#39;application sur toutes les plateformes, merci de laisser un commentaire si vous constatez une incompatibilité.</description><link>http://dominoweb.blogspot.com/2006/07/ajax-rico-livegrid-pour-reprsenter-les.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115321485751802824</guid><pubDate>Tue, 18 Jul 2006 09:27:00 +0000</pubDate><atom:updated>2006-07-18T14:03:02.416+02:00</atom:updated><title>SITE - Le blog en PDF</title><description>A titre expérimental, j&#39;ai mis à disposition un fichier PDF regroupant tous les articles liés à l&#39;intégration des solutions Google Maps et Google Earth dans Lotus Notes/Domino.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/acrobatreader.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Pour le moment le fichier est accessible en cliquant sur la rubrique GOOGLE API depuis le panneau de droite. Si je continue l&#39;expérience je verrai à placer les liens de façon plus visible.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Mise à Jour :&lt;br /&gt;Le fichier PDF est maintenant réellement accessible. &lt;/span&gt;</description><link>http://dominoweb.blogspot.com/2006/07/site-le-blog-en-pdf.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115306421269092720</guid><pubDate>Sun, 16 Jul 2006 15:36:00 +0000</pubDate><atom:updated>2006-08-21T23:37:26.846+02:00</atom:updated><title>AJAX - Lire un fichier en dehors du domaine</title><description>Comme précédemment indiqué, les applications AJAX ne peuvent pas accèder aux fichiers en dehors du domaine Internet de la page appelante (il est toutefois à noter que cette limitation ne semble pas toucher Microsoft Internet Explorer). La méthode préconisée pour dépasser cette limite, quelque soit le navigateur Web utilisé, est de passer par un &quot;Cross-Domain Proxy&quot;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 153, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Cross-Domain Proxy&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un &quot;cross-domain proxy&quot; n&#39;est rien de plus qu&#39;une application hébergée dans le domaine , qui va télécharger le fichier extérieur souhaité et le renvoyer vers l&#39;application AJAX. Cette technique est notamment utilisée par &lt;a href=&quot;http://www.netvibes.com&quot;&gt;NetVibes&lt;/a&gt;. En ouvrant NetVibes avec l&#39;extension de Firefox &lt;a href=&quot;https://addons.mozilla.org/firefox/1843/&quot;&gt;Firebug&lt;/a&gt;, on constate que les fils RSS de la page sont appelés à travers une URL du type : &lt;span style=&quot;font-style: italic;&quot;&gt;http://www.netvibes.com/xmlProxy.php?url=http%3A//swww.acme.com/rss.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;L&#39;application PHP xmlProxy.php se contente de récupérer le fichier XML et de la transmettre au navigateur Web. Il ne traite pas d&#39;informations avant expédition. Celà permet de ne pas surcharger le serveur en laissant cette tâche au poste client.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Lotus Domino Cross-Domain Proxy&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Pour faire la même chose avec Lotus Notes j&#39;ai commencé par utiliser la méthode &quot;ALAX&quot; présentée dans l&#39;article &quot;&lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/google-api-la-recherche-dinformations_11.html&quot;&gt;La recherche d&#39;informations sur l&#39;Internet depuis un client Lotus Notes&lt;/a&gt;&quot;. Malheureusement il semble que la propriété responseText gère mal, voire pas du tout, les charset autres que UTF-8. Les principales sources d&#39;informations françaises étant codées en ISO-8859-1 je ne pouvais utiliser cette méthode.&lt;br /&gt;&lt;br /&gt;J&#39;ai donc décidé d&#39;en profiter pour développer un agent Lotus Notes en Java.&lt;br /&gt;L&#39;agent doit récupérer l&#39;URL cible en argument et renvoyer le contenu de cette URL.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/cross-domain-proxy.png&quot; alt=&quot;cross domain proxy&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Le code source de l&#39;agent est :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;import lotus.domino.*;&lt;br /&gt;import java.io.*;&lt;br /&gt;import java.net.*;&lt;br /&gt;&lt;br /&gt;public class JavaAgent extends AgentBase {&lt;br /&gt;&lt;br /&gt; public void NotesMain() {&lt;br /&gt;     try {&lt;br /&gt;       Session session = getSession();&lt;br /&gt;       AgentContext agentContext = session.getAgentContext();&lt;br /&gt;&lt;br /&gt;       // Récupération de l&#39;URL passé en argument de l&#39;agent&lt;br /&gt;       Document doc = agentContext.getDocumentContext();&lt;br /&gt;       String newurl = doc.getItemValueString(&quot;Path_Info_Decoded&quot;);&lt;br /&gt;       newurl = newurl.substring(newurl.indexOf(&quot;url=&quot;) + 4);&lt;br /&gt;       URL url = new URL (newurl);&lt;br /&gt;   &lt;br /&gt;     // Initialisation du résultat à renvoyer&lt;br /&gt;       String result = &quot;&quot;;&lt;br /&gt;   &lt;br /&gt;       // Les informations seront renvoyés vers le navigateur au format XML&lt;br /&gt;       PrintWriter pw = getAgentOutput();      &lt;br /&gt;       pw.println(&quot;Content-type: text/xml&quot;);&lt;br /&gt;&lt;br /&gt;     // Récupération du contenu de la page cible&lt;br /&gt;      BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));&lt;br /&gt;     String inputLine;&lt;br /&gt;     while ((inputLine = in.readLine()) != null) {&lt;br /&gt;         result += inputLine.toString();&lt;br /&gt;     }&lt;br /&gt; &lt;br /&gt;     // Envoi du résultat vers le navigateur Web&lt;br /&gt;     pw.println(result);&lt;br /&gt;     doc.recycle();&lt;br /&gt;&lt;br /&gt;     } catch(Exception e) {&lt;br /&gt;         e.printStackTrace();&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;Pour appeler l&#39;agent il faut utiliser un URL du type : &lt;span style=&quot;font-style: italic;&quot;&gt;http://serverlocal/path/base.nsf/agent?openagent&amp;url=http%3A//sitecible/path/fichier&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Intégration dans l&#39;aggrégateur RSS&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;On peut très facilement intégrer cette fonctionnalité dans &lt;a href=&quot;http://dominoweb.blogspot.com/2006/07/ajax-une-page-web-personnalisable-44.html&quot;&gt;l&#39;aggrégateur RSS&lt;/a&gt; précédemment présenté.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/ajaxcroosdomain.png&quot; alt=&quot;ajax rss&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Etape 1 : Intégration de l&#39;agent sur une base du domaine Web. L&#39;agent peut être déclaré dans la base elle même ou depuis n&#39;importe quelle autre base du domaine Internet.&lt;/li&gt;&lt;li&gt;Etape 2 : Déclaration des URL d&#39;ouverture de fil. Au lieu d&#39;indiquer directement l&#39;URL de la cible, on la fait précéder de l&#39;URL de l&#39;agent selon le format présenté. On pourra aussi prévoir un développement pour intégrer automatiquement cette syntaxe afin de simplifier la tâche de l&#39;utilisateur.&lt;/li&gt;&lt;/ul&gt;Attention, le javascript d&#39;interprétation des fils RSS présenté ne prend pas en charge le format ATOM pour le moment.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;[Mise à jour]&lt;/span&gt; Ajout de doc.recycle() suite à la remarque de Yogi, administrateur du &lt;span style=&quot;font-style: italic;&quot;&gt;sombre&lt;/span&gt; blog &lt;a href=&quot;http://darkmag.net/darkBlog&quot;&gt;DarkBlog&lt;/a&gt; à consulter sans hésitation.</description><link>http://dominoweb.blogspot.com/2006/07/ajax-lire-un-fichier-en-dehors-du.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115270539085434236</guid><pubDate>Wed, 12 Jul 2006 11:56:00 +0000</pubDate><atom:updated>2006-07-12T20:02:04.120+02:00</atom:updated><title>AJAX - Une page Web personnalisable (4/4) : Un peu d&#39;interactivité</title><description>Il est temps d&#39;ajouter un peu d&#39;interactivité à cet aggrégateur RSS. L&#39;utilisateur doit pouvoir ajouter un fil RSS, en supprimer, modifier ou mettre à jour le contenu du fil.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/rss_addnew.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;L&#39;ensemble des actions doit être géré sans raffraichissement de la fenêtre afin de préserver l&#39;aspect fluide de l&#39;application. Les actions seront transmises via AJAX (suppression d&#39;un fil ou actualisation) mais aussi à travers une boite de dialogue modale si une valeur doit être saisie (ajout et modification d&#39;un fil RSS).&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 102, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;&lt;b&gt;Boite de dialogue modale&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Pour la saisie d&#39;information je me suis basé sur la librairie Javascript de &lt;a href=&quot;http://www.subimage.com/&quot;&gt;subimage&lt;/a&gt; que l&#39;on peut trouver sur &lt;a href=&quot;http://www.subimage.com/sublog/subModal&quot;&gt;cette page&lt;/a&gt;. Cette librairie a l&#39;avantage de fonctionner sur Internet Explorer, Firefox et Opera (Je n&#39;ai pas testé d&#39;autres navigateurs). En plus d&#39;être simple à intégrer dans le code je trouve de résultat visuel esthétique.&lt;br /&gt;Pour utiliser cette librairie il faut télécharger le &lt;a href=&quot;http://www.subimage.com/dhtml/subModal/subModal.zip&quot;&gt;package&lt;/a&gt;, le décompresser puis ajouter dans la structure de la base Notes les fichiers &lt;i&gt;commons.js&lt;/i&gt;, &lt;i&gt;maskBG.png&lt;/i&gt;, &lt;i&gt;subModal.js&lt;/i&gt; et &lt;i&gt;loading.html&lt;/i&gt;, la feuille de style &lt;i&gt;subModal.css&lt;/i&gt; et enfin l&#39;image &lt;i&gt;close.gif&lt;/i&gt;. Il est à noter que j&#39;ai considéré &lt;i&gt;maskPG.png&lt;/i&gt; comme un fichier et non une image car Lotus Notes ne supporte pas encore l&#39;intégration des fichiers PNG dans la librairie d&#39;image.&lt;br /&gt;&lt;br /&gt;Pour utiliser cette librairie, il faut d&#39;abord insérer dans l&#39;entête HTML les fichiers javascript ainsi que la feuille de syle :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;subModal.css&quot; /&amp;gt;&lt;br /&gt;  &amp;lt;script type=&quot;text/javascript&quot; src=&quot;common.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;script type=&quot;text/javascript&quot; src=&quot;subModal.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Puis, appeler la fonction showPopWin(&#39;URL&#39;, largeur, hauteur, fonction_javascript). Par exemple pour ouvrir la boite de dialogue depuis un lien :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;javascript:showPopWin(&#39;RSSFeed?openform&amp;amp;action=add&#39;, 600, 400, null); &quot;&amp;gt;&lt;br /&gt;Ajouter un fil RSS&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Pour fermer la boite de dialogue utiliser la fonction window.top.hidePopWin();&lt;br /&gt;Normalement, si l&#39;on utilise cette dernière fonction avec l&#39;argurment &lt;i&gt;true&lt;/i&gt;, la fonction javascript définie dans l&#39;appel de la boite de dialogue s&#39;éxécute.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;&lt;b&gt;Supprimer un fil RSS&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Pour supprimer un fil RSS, il faut supprimer le document dans la base puis supprimer l&#39;élément sur la page pour ne pas avoir à raffraichir la fenêtre.&lt;br /&gt;&lt;br /&gt;Pour supprimer l&#39;élément affiché dans la page nous allons utiliser les fonctions DOM. La fonction sera :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;function deleteDiv(fieldname){&lt;br /&gt;  var obj;&lt;br /&gt;  var old;&lt;br /&gt;  if(obj = document.getElementById(&#39;NewOrder&#39;)){&lt;br /&gt;    if( old = document.getElementById(fieldname)){&lt;br /&gt;       obj.removeChild(old);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;où &#39;NewOrder&#39; est l&#39;ID de la div contenant tous les fils RSS et fieldname est l&#39;id du bloc à supprimer dans &#39;NewOrder&#39; passé en paramètre.&lt;br /&gt;&lt;br /&gt;Pour supprimer le document Notes on peut utiliser l&#39;URL http://serveur/path/base.nsf/vue/clé?deletedocument&lt;br /&gt;Toujours pour ne pas avoir à raffraichir la fenêtre je lance cette url via Ajax. La fonction de suppression sera donc :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;function deleteEntry(fieldname){&lt;br /&gt;  var myAjax = new Ajax.Request(&#39;RSSByFieldname/&#39; + fieldname + &#39;?deletedocument&#39;);&lt;br /&gt;  deleteDiv(fieldname)&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;où RSSByFieldname est une vue triée par &#39;fieldname&#39;.&lt;br /&gt;&lt;br /&gt;Le lien permettant de demander la suppression d&#39;un fil sera insérer dans chacun des blocs d&#39;affichage de fil RSS dans la fonction loadRSS, présentée dans le &lt;a href=&quot;http://dominoweb.blogspot.com/2006/07/ajax-une-page-web-personnalisable-34.html&quot;&gt;chapitre 3&lt;/a&gt;, sous la forme :&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;&amp;lt;a href=&quot;javascript:deleteEntry(\&#39;&#39; + fieldname +&#39;\&#39;) &quot;&amp;gt;Supprimer&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;&lt;b&gt;Actualisation d&#39;un fil RSS&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Pour actualiser un fil RSS il suffit de rappeler la fonction loadRSS en spécifiant le fieldname à recharger. Le lien sera lui aussi intégré au niveau de chaque bloc d&#39;affichage de fil RSS depuis la fonction LoadRSS :&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;&amp;lt;a href=&quot;javascript:loadRSS(\&#39;&#39; + url + &#39;\&#39;,\&#39;&#39; + fieldname + &#39;\&#39;,\&#39;&#39;+ nbentrees + &#39;\&#39;); &quot;&amp;gt;Actualiser&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;&lt;b&gt;Création et modification d&#39;un fil RSS&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Pour des raisons de simplification du code la fonction d&#39;ajout et de modification d&#39;un fil RSS sera la même. Pour celà il va falloir :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;supprimer le bloc d&#39;affichage du fil RSS s&#39;il existe (dans le cas d&#39;une modification)&lt;/li&gt;&lt;li&gt;créer un nouveau bloc d&#39;affichage du fil RSS sans l&#39;afficher&lt;/li&gt;&lt;li&gt;charger le contenu du fil RSS dans ce bloc&lt;/li&gt;&lt;li&gt;faire apparaitre le bloc&lt;/li&gt;&lt;li&gt;détruire l&#39;objet de gestion du drag &amp;amp;amp; drop qui ne gère pas ce nouveau bloc&lt;/li&gt;&lt;li&gt;reconstruire un nouvel objet de gestion du drag &amp;amp;amp; drop&lt;/li&gt;&lt;/ol&gt;Soit la fonction :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;function addEntry(url, fieldname, nbentrees){&lt;br /&gt; deleteDiv(fieldname);&lt;br /&gt;&lt;br /&gt; var newDiv = Builder.node(&#39;div&#39;,&lt;br /&gt;   {id: fieldname, className: &#39;rss&#39;, style: &#39;display:none;&#39; });&lt;br /&gt; $(&#39;NewOrder&#39;).appendChild(newDiv);&lt;br /&gt; loadRSS(url, fieldname, nbentrees);&lt;br /&gt; Effect.Appear(newDiv.id);&lt;br /&gt; Sortable.destroy(&#39;NewOrder&#39;);&lt;br /&gt; Sortable.create(&#39;NewOrder&#39;,{tag:&#39;div&#39;,onUpdate:updateOrder});&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;La fonction Builder.node permet de construire rapidement un nouvel objet DOM. Cette fonction est fournie dans la libraire scriptaculous.&lt;br /&gt;Effect.Appear permet de faire apparaitre le nouveau bloc avec un effet &#39;d&#39;apparition progressive&#39;. Cette fonction est aussi fournie dans la librairie scriptaculous.&lt;br /&gt;&lt;br /&gt;Il ne reste plus qu&#39;à appeler cette fonction depuis un masque Notes affiché dans une boite de dialogue modale.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Masque de création/modification&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Le masque doit contenir les champs URL (url du fil RSS) et entrees (le nom maximum de lignes à affichier). De plus, il va aussi falloir pouvoir accèder à la valeur du champ fieldname pour le passer en paramètre de la fonction.&lt;br /&gt;&lt;br /&gt;Le problème du champ fieldname est qu&#39;il se base sur l&#39;UniqueID du document Notes. Hors, si celà ne pose pas de problème pour la modification de documents existants, celà est beaucoup plus génant lors de la création d&#39;un document pour ajouter un nouveau fil RSS. L&#39;UniqueID du Document ne sera défini qu&#39;après enregistrement du document. Il doit exister de multiples façons de gérer ce problème.&lt;br /&gt;La solution retenue est de n&#39;appeler la fonction de création du nouveau fil RSS que sur l&#39;évènement &lt;i&gt;unload&lt;/i&gt; et si l&#39;URL et un champ fielldname_tmp ayant pour valeur fieldname étaient renseignées. Je l&#39;avoue c&#39;est un peu tiré par les cheveux...&lt;br /&gt;Le masque est défini ainsi :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;un champ $PublicAccess : texte calculé à la création avec pour formule &quot;1&quot; (celà permet d&#39;autoriser l&#39;accès Public)&lt;/li&gt;&lt;li&gt;un champ URL : texte modifiable&lt;/li&gt;&lt;li&gt;un champ entrees : nombre modifiable&lt;/li&gt;&lt;li&gt;une déclaration HTML de champ field_tmp avec pour valeur le champ &lt;i&gt;fieldname &lt;/i&gt;de type texte calculé avec pour formule &lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;@If(@IsNewDoc; &quot;&quot;; &quot;liste_&quot; + @Text(@DocumentUniqueID))&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;La déclaration HTML est : &lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;[&amp;lt;input type=&quot;hidden&quot; value=&quot;&amp;lt;Champ fieldname&amp;gt;&quot; name=&quot;fieldname_tmp&quot;&amp;gt;]&lt;/span&gt;&lt;br /&gt;On peut soit déclarer le contenu entre crochets comme ci-dessus ou déclarer la ligne en HTML relais.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/rss_addform.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;On ajoute trois boutons à ce masque&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Fermer&lt;/b&gt; (masquer si : @IsNewDoc) avec pour formule Web/Javascript :&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;window.top.hidePopWin();&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Enregistrer&lt;/b&gt; avec pour formule :&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;@Command([FileSave]);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;FIELD fieldname := &quot;liste_&quot; + @Text(@DocumentUniqueID);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;@Command([FileSave])&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Annuler&lt;/b&gt; avec pour formule Web/Javascript :&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;document.forms[0].fieldname_tmp.value = &quot;&quot;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;window.top.hidePopWin();&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Et enfin, à l&#39;évènement unLoad du masque :&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;if(document.forms[0].URL.value!=&#39;&#39; &amp; document.forms[0].fieldname_tmp.value!=&#39;&#39;){&lt;br /&gt; window.top.hidePopWin();&lt;br /&gt; window.top.addEntry(document.forms[0].URL.value,&lt;br /&gt;   document.forms[0].fieldname_tmp.value,document.forms[0].entrees.value);&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;On peut constater que le bouton &lt;i&gt;Annuler&lt;/i&gt; vide le champ fieldname_tmp ce qui permet de ne pas exécuter l&#39;appel à la fonction d&#39;ajout/modification.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Téléchargement et démonstration en ligne&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/dw_ajax_rssreader.zip&quot;&gt;Vous pouvez télécharger une base Notes&lt;/a&gt; permettant de tester toutes les fonctionnalités de cet aggrégateur RSS AJAX. La base contient en plus un module de création de flux RSS afin de pouvoir tester l&#39;application. N&#39;oubliez pas de signer la structure et de définir la LCA.&lt;br /&gt;&lt;br /&gt;Vous pouvez aussi tester en ligne &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/rss?openview&quot;&gt;ce module en version bridée&lt;/a&gt;, les actions sont visibles mais pas enregistrées dans la base. Si vous recharger la fenêtre vous reviendrez sur l&#39;environnement de base. De plus l&#39;ajout de nouveaux fils RSS est inactif.</description><link>http://dominoweb.blogspot.com/2006/07/ajax-une-page-web-personnalisable-44.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115248782146327210</guid><pubDate>Sun, 09 Jul 2006 23:03:00 +0000</pubDate><atom:updated>2006-07-10T01:41:30.623+02:00</atom:updated><title>SITE - Nouveau design pour le Blog</title><description>Je me suis essayé à la personnalisation des modèles de Blogger. Même si c&#39;est à la mode et que c&#39;est très pratique pour la gestion des résolutions écran, je n&#39;aime pas perdre inutilement la place dans des blocs de largeur fixe. Ceci est d&#39;autant plus important lorsque le contenu présenté est volumineux comme ce blog.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Tests de compatibilité&lt;/span&gt;&lt;br /&gt;Il ne devrait pas y avoir de gros problèmes de compatibilités pour les navigateurs, J&#39;ai testé la nouvelle interface sous Microsoft Internet Explorer 6 et 7 Beta 2, ainsi évidemment que sous Firefox 1.5.0.4 et Opera 9.0. BrowserShots ne semblant plus répondre, j&#39;ai aussi rapidement controlé la compatibilité avec Safari sur &lt;a href=&quot;http://danvine.com/icapture/&quot;&gt;iCapture&lt;/a&gt; et &lt;a href=&quot;http://www.snugtech.com/safaritest/&quot;&gt;Safaritest&lt;/a&gt; ainsi que sous Konqueror, Dillo et Lynx sur le site &lt;a href=&quot;http://www.scapture.com/&quot;&gt;Scapture&lt;/a&gt;. Ce dernier montre un résultat quelque peu tronqué.&lt;br /&gt;Si vous rencontrez un problème, n&#39;hésitez pas à poster une remarque en indiquant votre environnement.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Nouvelles fonctionnalités&lt;/span&gt;&lt;br /&gt;Il manque deux fonctionnalités, indispensables à mes yeux, sur Blogger  :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La recherche&lt;/li&gt;&lt;li&gt;La catégorisation des messages&lt;/li&gt;&lt;/ul&gt;Le simple tri par date peut être suffisant pour présenter des actualités mais il montre très vite ses limites dès que le contenu n&#39;a pas de lien temporel.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;La recherche&lt;/span&gt;&lt;br /&gt;Un module de recherche est maintenant mis à disposition en haut de ce blog. Il s&#39;agit de l&#39;API &lt;a href=&quot;http://code.google.com/apis/ajaxsearch/&quot;&gt;Google Ajax Search&lt;/a&gt;. C&#39;est très simple à mettre en place et à personnaliser. De plus, la mise à jour de l&#39;index est quasiment immédiate. Je pense que cette API doit se baser sur les résultats de &lt;a href=&quot;http://blogsearch.google.com/&quot;&gt;Google Blog Search&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/search.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;La catégorisation des messages&lt;/span&gt;&lt;br /&gt;Sans aller jusqu&#39;à implémenter un nuage de tags, je trouve interressant de pouvoir catégoriser les messages par thème. Pour pallier à ce manque, j&#39;ai développé ce que certains pourraient appeler une &quot;usine à gaz&quot;. Cependant, le résultat semble bien fonctionner et pour un effort minimum.&lt;br /&gt;&lt;br /&gt;Un agent LotusScript va récupérer le flux RSS du blog et en extraire le titre ainsi que le premier paragraphe. Il enregistre ces données sur la base Notes d&#39;exemples. La catégorie est automatiquement extraite par rapport au titre. En effet, la sytaxe actuelle des titres de ce blog est &lt;span style=&quot;font-style: italic;&quot;&gt;CATEGORIE - Titre&lt;/span&gt;. Il ne reste plus qu&#39;à afficher la liste des catégories sur le blog par une insertion de texte via javascript. Ces catégories pointent vers une vue de la base Notes qui présente les titres et le premier pargraphe des articles d&#39;une catégorie.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/shema_categorie.0.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Je reviendrais surement sur l&#39;agent d&#39;extraction qui est un exemple simple de récupération de flux RSS sous Lotus Notes.</description><link>http://dominoweb.blogspot.com/2006/07/site-nouveau-design-pour-le-blog.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115230988183309272</guid><pubDate>Fri, 07 Jul 2006 21:54:00 +0000</pubDate><atom:updated>2006-07-08T00:07:20.910+02:00</atom:updated><title>SITE - Creative Common et W3C</title><description>Comme vous aurez peut-être pu le remarquer dans la colonne de droite, les informations fournies sur ce blog et la base de démonstrations sont maintenant sous &lt;a href=&quot;http://fr.creativecommons.org/&quot;&gt;contrat Creative Common&lt;/a&gt;. Ceci signifie en fait que vous pouvez officiellement tout faire des informations fournies sur le blog et dans la base de démonstration à la seule et unique condition de citer l&#39;auteur. Ce n&#39;est pas pour flater mon égo mais il semble que le contrat Français impose cette condition.&lt;br /&gt;&lt;br /&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by/2.0/fr/&quot;&gt;&lt;img alt=&quot;Creative Commons License&quot; src=&quot;http://creativecommons.org/images/public/somerights20.fr.png&quot; border=&quot;0&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot;&gt;&lt;/a&gt;&lt;br /&gt;De plus j&#39;ai totalement redévelopper la base de démonstration. Ce n&#39;est pas très visible mais la page d&#39;accueil a brillament passé les tests XHTML 1.0 et CSS. Qui a dit que les serveurs Domino ne généraient pas de code propre ?&lt;span class=&quot;comment&quot;&gt;&lt;/span&gt;</description><link>http://dominoweb.blogspot.com/2006/07/site-creative-common-et-w3c.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115230805949716772</guid><pubDate>Fri, 07 Jul 2006 20:06:00 +0000</pubDate><atom:updated>2006-07-12T14:29:01.450+02:00</atom:updated><title>AJAX - Une page Web personnalisable (3/4) : Présentation des fils RSS</title><description>Maintenant que je peux utiliser le &lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/ajax-une-page-web-personnalisable-14.html&quot;&gt;drag &amp; drop&lt;/a&gt; et produire les &lt;a href=&quot;http://dominoweb.blogspot.com/2006/07/ajax-une-page-web-personnalisable-24.html&quot;&gt;fils RSS&lt;/a&gt;, reste à assembler les deux avec prototype, scriptaculous et un peu de DOM pour l&#39;interprétation du fichier RSS.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/rssdragdrop.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Traitement sur le serveur ou le client ?&lt;/span&gt;&lt;br /&gt;La récupération et l&#39;interpétation des fichiers RSS peut se faire soit sur le serveur, soit depuis le poste client. La solution exposée ici s&#39;appuiera sur un traitement au niveau du client. Celà permet de ne pas surcharger le serveur mais entraine des contraintes fortes liées à l&#39;AJAX. En effet, l&#39;AJAX ne permet pas de récupérer des fichiers situés en dehors du domaine de la page appelante (sauf avec Microsoft Internet Explorer). Je présenterais surement plus tard une méthode pour pallier à ce problème mais celà déborde du cadre de cet exposé.&lt;br /&gt;&lt;br /&gt;Pour l&#39;occasion j&#39;ai mis à disposition trois fichiers RSS, depuis la &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf&quot;&gt;base de test&lt;/a&gt;, à partir de vues comme décrit sur le chapitre précédent. Le flux RSS du blog se base sur des données enregistrée dans la base de test et non sur les données de BlogSpot, mais là encore je reviendrai sur ce sujet dans un prochain article.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0); font-weight: bold;&quot;&gt;Définir les fichiers RSS à récupérer&lt;/span&gt;&lt;br /&gt;Avant d&#39;afficher les fichiers RSS il va falloir stocker la liste des URLs des fichiers RSS à afficher. Pour celà je m&#39;appuie sur un masque Notes semblable à celui présenté lors de la présentation du Drag &amp; Drop&lt;br /&gt;J&#39;ai besoin de trois champs :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;L&#39;URL du fil RSS : un champ texte libre&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Le nombre d&#39;entrée à présenter : un champ nombre ou texte libre&lt;br /&gt;&lt;/li&gt;&lt;li&gt;La position du flux dans la liste : un champ nombre calculé avec pour formule : 0&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/formrssdragdrop.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Une vue pour présenter ces fils RSS&lt;/span&gt;&lt;br /&gt;La page d&#39;affichage des fils RSS sur le Web sera en fait une vue. Cette vue sera triée à partir du champ position. On ne souhaite pas afficher l&#39;URL du fil mais son contenu. La seconde colonne de la vue va donc présenter un appel à une fonction javascript affichant le contenu du fil en clair soit :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1ère colonne (trié croissant) : &lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;position&lt;/span&gt;&lt;/li&gt;&lt;li&gt;2de colonne : &lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;&quot;&amp;lt;div id=\&quot;liste_&quot; + @Text(@DocumentUniqueID) + &quot;\&quot; class=\&quot;rss\&quot;&amp;gt;&amp;lt;script type=\&quot;text/javascript\&quot;&amp;gt;loadRSS(&#39;&quot; + URL + &quot;&#39;, &#39;liste_&quot; + @Text(@DocumentUniqueID) + &quot;&#39;, &quot;+entrees+&quot;);&amp;lt;/script&amp;gt;&amp;lt;/div&amp;gt;&quot;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Pour rappel, la définition du &lt;span style=&quot;font-style: italic;&quot;&gt;div&lt;/span&gt; contenant l&#39;id du document va servir pour le drag &amp; drop. La fonction &lt;span style=&quot;font-style: italic;&quot;&gt;loadRSS&lt;/span&gt; prend trois arguments, l&#39;URL du fil RSS, l&#39;ID du &lt;span style=&quot;font-style: italic;&quot;&gt;div&lt;/span&gt; où afficher le résultat et enfin le nombre d&#39;entrée à afficher. La vue doit être définie avec l&#39;option &quot;Traiter contenu comme du code HTML&quot; accessible depuis le troisième onglet des propriétés de la vue.  La déclaration des fonctions ainsi que la gestion du drag &amp; drop seront définis dans le masque associée à cette vue.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(204, 102, 0);&quot;&gt;Un masque pour présenter la vue&lt;/span&gt;&lt;br /&gt;Le masque doit porter le nom &lt;span style=&quot;font-style: italic;&quot;&gt;$$ViewTemplate for MaVueRSS &lt;/span&gt;où &lt;span style=&quot;font-style: italic;&quot;&gt;MaVueRSS &lt;/span&gt;est le nom de la vue créée précédemment. Pour de simples raisons de simplification de présentation du code je vais définir ce masque avec l&#39;option &lt;span style=&quot;font-style: italic;&quot;&gt;type de contenu : HTML&lt;/span&gt; accessible depuis le second onglet des options du masque.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Gestion du drag &amp; drop&lt;/span&gt;&lt;br /&gt;Comme vue lors du premier article de cet exposé, la gestion du drag &amp;amp; drop avec Scriptaculous est vraiment très simple.&lt;br /&gt;&lt;div style=&quot;border: 1px dotted rgb(204, 102, 0); font-size: 10px; background-color: rgb(253, 249, 245); font-family: Lucida,Courier,MS Courier New,Prestige,Everson Mono;&quot;&gt;&lt;pre&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;scriptaculous/lib/prototype.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;scriptaculous/src/scriptaculous.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;div id=&quot;NewOrder&quot;&amp;gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;VUE INTEGREE&lt;/span&gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt; Sortable.create(&#39;NewOrder&#39;, {tag:&#39;div&#39;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/pre&gt;&lt;/div&gt;Par rapport au premier article on peut noter l&#39;option {tag:&#39;div&#39;} qui permet de définir que le drag &amp; drop ne s&#39;applique pas à une balise &amp;lt;li&amp;gt; comme par défaut mais à une balise &amp;lt;div&amp;gt; comme défini dans la vue.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Récupération du fil RSS&lt;/span&gt;&lt;br /&gt;L&#39;utilisation de protoype simplifie l&#39;appel AJAX pour récupérer le fil RSS :&lt;br /&gt;&lt;div style=&quot;border: 1px dotted rgb(204, 102, 0); font-size: 10px; background-color: rgb(253, 249, 245); font-family: Lucida,Courier,MS Courier New,Prestige,Everson Mono;&quot;&gt;&lt;pre&gt;function loadRSS(url, fieldname, nbentrees)&lt;br /&gt;{&lt;br /&gt;var myAjax = new Ajax.Request (&lt;br /&gt;url,&lt;br /&gt;{&lt;br /&gt; method : &#39;get&#39;,&lt;br /&gt;});&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Interprétation du fil RSS&lt;/span&gt;&lt;br /&gt;La fonction d&#39;interprétation du fil RSS doit être appelée lorsque le fichier a été récupéré, soit à l&#39;évènement onComplete. La fonction reçoit automatiquement en paramètre le résultat de la requète : &lt;span style=&quot;font-style: italic;&quot;&gt;originalRequest&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Un fichier RSS est un fichier XML, comme pour &lt;a href=&quot;http://dominoweb.blogspot.com/2006/06/google-api-lotus-notes-et-google-maps.html&quot;&gt;Google Maps&lt;/a&gt;. L&#39;avantage de ne pas pouvoir sortir du domaine est que l&#39;on peut maitriser la syntaxe de ce format et ainsi simplifier énormément le code. Un exemple de code Javascript permettant de récupérer les informations à afficher est :&lt;br /&gt;&lt;div style=&quot;border: 1px dotted rgb(204, 102, 0); font-size: 10px; background-color: rgb(253, 249, 245); font-family: Lucida,Courier,MS Courier New,Prestige,Everson Mono;&quot;&gt;&lt;pre&gt;function loadRSS(url, fieldname, nbentrees)&lt;br /&gt;{&lt;br /&gt;var myAjax = new Ajax.Request (&lt;br /&gt;url,&lt;br /&gt;{&lt;br /&gt;method : &#39;get&#39;,&lt;br /&gt;onComplete : function(originalRequest){&lt;br /&gt; items = originalRequest.responseXML;&lt;br /&gt; if(parseInt(nbentrees)==0) nbentrees=&#39;5&#39;;&lt;br /&gt; var items_count =&lt;br /&gt;  (parseInt(nbentrees)&amp;lt;items.getElementsByTagName(&#39;item&#39;).length)?&lt;br /&gt;   parseInt(nbentrees):items.getElementsByTagName(&#39;item&#39;).length;&lt;br /&gt;&lt;br /&gt; for(var i=0; i&amp;lt;items_count; i++) {&lt;br /&gt;  root_node = items.getElementsByTagName(&#39;item&#39;)[i];&lt;br /&gt;  titre =&lt;br /&gt;   root_node.getElementsByTagName(&#39;title&#39;)[0].firstChild.data;&lt;br /&gt;  lien =&lt;br /&gt;   root_node.getElementsByTagName(&#39;link&#39;)[0].firstChild.data;&lt;br /&gt;  publication =&lt;br /&gt;   root_node.getElementsByTagName(&#39;pubDate&#39;)[0].firstChild.data;&lt;br /&gt;  auteur =&lt;br /&gt;   root_node.getElementsByTagName(&#39;author&#39;)[0].firstChild.data;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;N&#39;étant pas expert Javascript, j&#39;accepte volontiers tous commentaires pour optimiser ce code.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;Affichage du résultat &lt;/span&gt;&lt;br /&gt;Pour afficher le résultat dans le &amp;lt;div&amp;gt; j&#39;utilise l&#39;une des plus indispensables fonctions de prototype à mon goût : $(&#39;&lt;span style=&quot;font-style: italic;&quot;&gt;id&lt;/span&gt;&#39;).&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;$(&#39;id&#39;)&lt;/span&gt; permet tout simplement de récupérer l&#39;élément d&#39;id &#39;id&#39;. Dans le cas présenter, &lt;span style=&quot;font-style: italic;&quot;&gt;&#39;id&#39;&lt;/span&gt; vaut &lt;span style=&quot;font-style: italic;&quot;&gt;fieldname&lt;/span&gt;. Pour intégrer du code HTML dans le &lt;span style=&quot;font-style: italic;&quot;&gt;div&lt;/span&gt; je vais utiliser &lt;span style=&quot;font-style: italic;&quot;&gt;innerHTML&lt;/span&gt;. Le code final de la fonction est donc :&lt;br /&gt;&lt;div style=&quot;border: 1px dotted rgb(204, 102, 0); font-size: 10px; background-color: rgb(253, 249, 245); font-family: Lucida,Courier,MS Courier New,Prestige,Everson Mono;&quot;&gt;&lt;pre&gt;function loadRSS(url, fieldname, nbentrees)&lt;br /&gt;{&lt;br /&gt;var myAjax = new Ajax.Request (&lt;br /&gt;url,&lt;br /&gt;{&lt;br /&gt; method : &#39;get&#39;,&lt;br /&gt; onComplete : function(originalRequest){&lt;br /&gt;  items = originalRequest.responseXML;&lt;br /&gt;  if(parseInt(nbentrees)==0) nbentrees=&#39;5&#39;;&lt;br /&gt;  var  items_count =&lt;br /&gt;  (parseInt(nbentrees)&amp;lt;items.getElementsByTagName(&#39;item&#39;).length)?&lt;br /&gt;   parseInt(nbentrees):items.getElementsByTagName(&#39;item&#39;).length;&lt;br /&gt;&lt;br /&gt;  var feed=&#39;&amp;lt;h1&amp;gt;&#39; +&lt;br /&gt;   items.getElementsByTagName(&#39;title&#39;)[0].firstChild.data + &#39;&amp;lt;/h1&amp;gt;&#39;;&lt;br /&gt;&lt;br /&gt;  for(var i=0; i&amp;lt;items_count; i++) {&lt;br /&gt;   root_node = items.getElementsByTagName(&#39;item&#39;)[i];&lt;br /&gt;   titre =&lt;br /&gt;    root_node.getElementsByTagName(&#39;title&#39;)[0].firstChild.data;&lt;br /&gt;   lien =&lt;br /&gt;    root_node.getElementsByTagName(&#39;link&#39;)[0].firstChild.data;&lt;br /&gt;   publication =&lt;br /&gt;    root_node.getElementsByTagName(&#39;pubDate&#39;)[0].firstChild.data;&lt;br /&gt;   auteur =&lt;br /&gt;    root_node.getElementsByTagName(&#39;author&#39;)[0].firstChild.data;&lt;br /&gt;&lt;br /&gt;   feed += &#39;&amp;lt;h2&amp;gt;&amp;lt;a href=&#39;+lien + &#39;&amp;gt;&#39; + titre +&lt;br /&gt;    &#39;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;h3&amp;gt;&#39; + auteur + &#39;, &#39; +&lt;br /&gt;    publication + &#39;&amp;lt;/h3&amp;gt;&#39;;&lt;br /&gt;  }&lt;br /&gt; $(fieldname).innerHTML = feed;&lt;br /&gt; }&lt;br /&gt;});&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;En ajoutant quelques lignes de style CSS on arrive au résultat présenté sur la &lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/RSSlight?openview&quot;&gt;base de démonstration&lt;/a&gt;.</description><link>http://dominoweb.blogspot.com/2006/07/ajax-une-page-web-personnalisable-34.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-29226276.post-115209879473702090</guid><pubDate>Wed, 05 Jul 2006 11:11:00 +0000</pubDate><atom:updated>2006-07-06T11:55:28.636+02:00</atom:updated><title>AJAX - Autocompletion V3 : Champ multivalué</title><description>En fouillant un peu dans les options de Autocompleter, j&#39;ai découvert l&#39;option &quot;&lt;span style=&quot;font-style: italic;&quot;&gt;tokens&lt;/span&gt;&quot; qui permet de définir un séparateur de valeur. Ceci permet alors de gérer une recherche sur un champ multivalué Lotus Notes.&lt;br /&gt;&lt;br /&gt;Les seules choses à modifier pour gérer la recherche sur un champ multivalué sont :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Déclarer le champs Notes avec l&#39;option &quot;&lt;span style=&quot;font-style: italic;&quot;&gt;Autoriser valeurs multiples&lt;/span&gt;&quot;&lt;/li&gt;&lt;li&gt;Dans la vue de recherche, spécifier dans la colonne affichant les noms d&#39;&quot;&lt;span style=&quot;font-style: italic;&quot;&gt;Afficher valeurs multiples comme entrées distinctes&lt;/span&gt;&quot;&lt;/li&gt;&lt;li&gt;Modifier le l&#39;appel à Autocompleter en ajoution l&#39;option tokens :&lt;pre&gt;&lt;span style=&quot;color: rgb(204, 102, 0);&quot;&gt;new Ajax.Autocompleter(&quot;autocomplete&quot;, &lt;br/&gt;&quot;autocomplete_choices&quot;,&lt;br/&gt;&quot;scriptaculous?createdocument&quot;, &lt;span style=&quot;font-weight: bold;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;tokens:&#39;,&#39;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;}&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;Dans cette configuration j&#39;ai défini la virgule comme séparateur de valeurs. On spécifier d&#39;autres caractères. Pour plus d&#39;informations consulter l&#39;&lt;a href=&quot;http://wiki.script.aculo.us/scriptaculous/show/Autocompleter.Base&quot;&gt;aide de script.aculo.us&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; src=&quot;http://photos1.blogger.com/blogger/366/1667/400/automulti.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;Pour tester l&#39;&lt;a href=&quot;http://free.dominoserver.de/it/dominoweb.nsf/autocompletewithoutls?openform&quot;&gt;autocompletion sur champ multivalué&lt;/a&gt;, c&#39;est toujours sur la même page.</description><link>http://dominoweb.blogspot.com/2006/07/ajax-autocompletion-v3-champ-multivalu.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item></channel></rss>