<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.alti.info/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Alt-I, des informations alternatives - Informatique, Cultures alternatives et Geekeries saupoudrées d'Ajax. - Balise - programmation</title>
  <link>http://www.alti.info/</link>
  <atom:link href="http://www.alti.info/feed/tag/programmation/rss2" rel="self" type="application/rss+xml"/>
  <description>Alt-I, des informations alternatives. Podcast causant d'informatique généraliste et de cultures alternatives avec un soupçon de XHTML, CSS, AJAX, Javascript, et autres outils web…</description>
  <language>fr</language>
  <pubDate>Sun, 12 Oct 2008 19:49:52 +0200</pubDate>
  <copyright>Creative Commons By-NC-SA</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Cocoa pour les JS Gurus</title>
    <link>http://www.alti.info/post/2008/10/10/Cocoa-pour-les-JS-Gurus</link>
    <guid isPermaLink="false">urn:md5:2344a55a0c0ac5da83b7e592a0e4a34d</guid>
    <pubDate>Fri, 10 Oct 2008 09:56:00 +0200</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Développement</category>
        <category>C</category><category>Cocoa</category><category>developpement</category><category>ECMAScript</category><category>innovation</category><category>JavaScript</category><category>logiciel</category><category>Mac</category><category>Obj-C</category><category>POO</category><category>programmation</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://inexdo.com/mediawiki/images/thumb/2/2a/JSCocoa-icon-512-noshadow.png/256px-JSCocoa-icon-512-noshadow.png&quot; alt=&quot;JSCocoa&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Voilà une news qu'elle me fait plaisir et qu'elle va faire plaisir à tout les web devs du coin qui aiment leur mac mais qui ont du mal avec l'Objective-C et autres langages systèmes.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://inexdo.com/JSCocoa&quot; hreflang=&quot;en&quot;&gt;JSCocoa&lt;/a&gt; est un framework qui permet d'écrire des application Cocoa, donc pour Mac OS X, en ECMAScript (Javascript) !! Ils se décrivent fort bien, donc laissons leur la parole&amp;nbsp;:&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;JSCocoa bridges Cocoa to JavascriptCore (WebKit's JS engine). It allows you to call C code, ObjC code, use C structs, and build Javascript classes inheriting from ObjC classes.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Donc, JSCocoa fait le lien entre Cocoa et JavascriptCore, qui est le moteur JS de Webkit et qui fait partie du système Mac OS X. Cette lib permet donc de faire des appels vers du code en C, Obj-C et de construire des classes javascript héritant d'objets obj-C :o Wahou&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Moi qui ai toujours galéré à faire le premier pas dans l'objective C, je vais peut être enfin pouvoir me mettre à la programmation avec XCode :D&lt;/p&gt;


&lt;p&gt;Je ne me priverais pas de faire des tutos si j'arrive à faire quelque chose de cette bibliothèque pleine d'avenir &lt;img src=&quot;/themes/Alt-I/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2008/10/10/Cocoa-pour-les-JS-Gurus#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2008/10/10/Cocoa-pour-les-JS-Gurus#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/409</wfw:commentRss>
      </item>
    
  <item>
    <title>Menu en colonne en Javascript</title>
    <link>http://www.alti.info/post/2008/02/10/Menu-en-colonne-en-Javascript-MenuCol</link>
    <guid isPermaLink="false">urn:md5:064ed3aabc6d7fb10273d8334fd82cc5</guid>
    <pubDate>Tue, 12 Feb 2008 12:55:00 +0100</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Développement</category>
        <category>accessibilité</category><category>AJAX</category><category>concept</category><category>developpement</category><category>ergonomie</category><category>free</category><category>GPL</category><category>GUI</category><category>JavaScript</category><category>Mac OS X</category><category>open source</category><category>programmation</category><category>projet</category><category>téléchargement</category>    
    <description>&lt;p&gt;&lt;a href=&quot;http://www.nicolas-guilhou.com/&quot; hreflang=&quot;fr&quot;&gt;Xylpho&lt;/a&gt; voulait pour son site, un menu en colonne comme le fait Mac OS X&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://www.alti.info/images/Scrinchoutes/Menu_Colonne_Mac_OS_X_piti.png&quot; alt=&quot;Menu Colonne Mac OS X&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Ce menu devait être à la fois accessible, référençable et dynamique. Donc, pas de flash&amp;nbsp;! Javascript à la rescousse. Je lui ai donc codé une classe JS qui construit un menu en colonne à partir de listes imbriquées…&lt;/p&gt;    &lt;p&gt;En gros, tout le plan du site est intégré dans la page et structuré avec des ul et des li imbriqués&amp;nbsp;:&lt;/p&gt;

&lt;a href=&quot;http://www.alti.info/post/2008/02/10/#&quot; onclick=&quot;document.getElementById('codeHTML').style.display = 'block'; return false;&quot;&gt;
Voir le code HTML
&lt;/a&gt;
&lt;pre id=&quot;codeHTML&quot; style=&quot;display: none;&quot;&gt;
&amp;lt;ul id=&quot;menuCol&quot;&amp;gt;
	&amp;lt;li&amp;gt;
		2005
		&amp;lt;ul&amp;gt;
			&amp;lt;li&amp;gt;
				July
				&amp;lt;ul&amp;gt;
					&amp;lt;li&amp;gt;
						27
						&amp;lt;ul&amp;gt;
							&amp;lt;li&amp;gt;
								&amp;lt;a href=&quot;http://www.alti.info/post/2008/02/10/?id=4&quot;&amp;gt;
									Joulie Interface
								&amp;lt;/a&amp;gt;
							&amp;lt;/li&amp;gt;
						&amp;lt;/ul&amp;gt;
					&amp;lt;/li&amp;gt;
				&amp;lt;/ul&amp;gt;
			&amp;lt;/li&amp;gt;
			&amp;lt;li&amp;gt;
				September
				&amp;lt;ul&amp;gt;
					&amp;lt;li&amp;gt;
						29
						&amp;lt;ul&amp;gt;
							&amp;lt;li&amp;gt;
								&amp;lt;a href=&quot;http://www.alti.info/post/2008/02/10/?id=11&quot;&amp;gt;
									Version Texte
								&amp;lt;/a&amp;gt;
							&amp;lt;/li&amp;gt;
						&amp;lt;/ul&amp;gt;
					&amp;lt;/li&amp;gt;
				&amp;lt;/ul&amp;gt;
			&amp;lt;/li&amp;gt;
			&amp;lt;li&amp;gt;
				October
				&amp;lt;ul&amp;gt;
					&amp;lt;li&amp;gt;
						29
						&amp;lt;ul&amp;gt;
							&amp;lt;li class=&quot;selected&quot;&amp;gt;
								&amp;lt;a href=&quot;http://www.alti.info/post/2008/02/10/?id=18&quot;&amp;gt;
									Qjelt Octobre en VideoCast
								&amp;lt;/a&amp;gt;
							&amp;lt;/li&amp;gt;
						&amp;lt;/ul&amp;gt;
					&amp;lt;/li&amp;gt;
				&amp;lt;/ul&amp;gt;
			&amp;lt;/li&amp;gt;
			&amp;lt;li&amp;gt;
				November
				&amp;lt;ul&amp;gt;
					&amp;lt;li&amp;gt;
						08
						&amp;lt;ul&amp;gt;
							&amp;lt;li&amp;gt;
								&amp;lt;a href=&quot;http://www.alti.info/post/2008/02/10/?id=19&quot;&amp;gt;
									www.alti.info
								&amp;lt;/a&amp;gt;
							&amp;lt;/li&amp;gt;
						&amp;lt;/ul&amp;gt;
					&amp;lt;/li&amp;gt;
				&amp;lt;/ul&amp;gt;
			&amp;lt;/li&amp;gt;
			&amp;lt;li&amp;gt;
				December
				&amp;lt;ul&amp;gt;
					&amp;lt;li&amp;gt;
						08
						&amp;lt;ul&amp;gt;
							&amp;lt;li&amp;gt;
								&amp;lt;a href=&quot;http://www.alti.info/post/2008/02/10/?id=20&quot;&amp;gt;
									OW Pick !!!
								&amp;lt;/a&amp;gt;
							&amp;lt;/li&amp;gt;
						&amp;lt;/ul&amp;gt;
					&amp;lt;/li&amp;gt;
				&amp;lt;/ul&amp;gt;
			&amp;lt;/li&amp;gt;
		&amp;lt;/ul&amp;gt;
	&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;



&lt;p&gt;Ensuite, ma classe Javascript va masquer et afficher les bons ul selon les clicks sur les li. Le menu se crée en créant un nouvel objet de la sorte&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&amp;gt;
//&amp;lt;![CDATA[
	var test = new MenuCol.Menu('menuCol');
	MenuCol.Item.open();
//]]&amp;gt;
&amp;lt;/script&amp;gt;
&lt;/pre&gt;



&lt;p&gt;La statique open() permet d'initialiser le menu sur le li qui contient la classe 'selected' afin de revenir sur le menu correspondant après un chargement de page.&lt;/p&gt;


&lt;p&gt;Tout ceci fonctionne grâce au script MenuCol.js, que je rends disponible sous licence GPLv3. Faites en ce que voulez, mais souvenez vous de citer mon nom.&lt;/p&gt;

&lt;a href=&quot;http://www.alti.info/post/2008/02/10/#&quot; onclick=&quot;document.getElementById('codeJS').style.display = 'block'; return false;&quot;&gt;
Voir le code Javascript
&lt;/a&gt;
&lt;pre id=&quot;codeJS&quot; style=&quot;display: none;&quot;&gt;
// Global object
var MenuCol = {};

/**
 * Flag to stop propagation of event
 * @type Boolean
 */
MenuCol._stopPropagation = false;

/**
 Shortcut to document.getElementById
 * @param {String/Element} id Element or Element's id
 * @returns Element
 */
MenuCol.get = function(id)
{
	var elmt = document.getElementById(id);
	if (elmt)
	{
		return elmt;
	}
	return id;
};

// Objects collection
MenuCols = new Array();

/**
 * Menu class
 * @constructor
 * @param {String/Element} elmt UL menu Element or it's id
 * @author Hadrien Lanneau
 */
MenuCol.Menu = function(elmt)
{
	/**
	 * Element
	 * @type Element
	 */
	this.element = MenuCol.get(elmt);
	
	/**
	 * Items inside Menu
	 * @type Array
	 */
	this.items = new Array();
	
	MenuCols.push(this);
	
	this.init();
}
MenuCol.Menu.prototype =
{
	/**
	 * Initialize
	 */
	init: function()
	{
		// Make Item object with all li children
		var lis = this.element.getElementsByTagName('li');
		for (var i = 0; lis[i]; i++)
		{
			if (lis[i].parentNode == this.element)
			{
				var item = new MenuCol.Item(
					lis[i]
				);
				item.parent = this;
				this.items.push(
					item
				);
			}
		}
	},
	/**
	 * Hide menu
	 */
	hide: function()
	{
		this.element.style.display = 'none';
	},
	/**
	 * Show Menu
	 */
	show: function()
	{
		this.element.style.display = 'block';
	}
};

MenuCol.Items = new Array();
/**
 * MenuCol.Item class
 * @constructor
 * @param {String/Element} elmt UL menu Element or it's id
 * @author Hadrien Lanneau
 */
MenuCol.Item = function(elmt)
{
	/**
	 * Element
	 * @type Element
	 */
	this.element = MenuCol.get(elmt);
	
	/**
	 * Submenu
	 * @type MenuCol.Menu
	 */
	this.submenu = null;
	
	MenuCol.Items.push(this);
	
	this.init();
}
MenuCol.Item.prototype =
{
	/**
	 * Initialize
	 */
	init: function()
	{
		// Make Menu object with all UL children
		var uls = this.element.getElementsByTagName('ul');
		for (var i = 0; uls[i]; i++)
		{
			if (uls[i].parentNode == this.element)
			{
				this.submenu = new MenuCol.Menu(
					uls[i]
				);
				this.submenu.parent = this;
				this.submenu.hide();
			}
		}
		
		// Add on click Event on element
		this.element.parent = this;
		this.element.onclick = this.onclick;
	},
	/**
	 * onclick event
	 */
	onclick: function()
	{
		// Exec only on first fire
		if (!MenuCol._stopPropagation)
		{
			// If item hasn't submenu, we don't do anything
			if (!this.parent.submenu)
			{
				return true;
			}
			
			// Hiding all sub menus of same level
			for (var i = 0; this.parent.parent.items[i]; i++)
			{
				if (this.parent.parent.items[i].submenu)
				{
					this.parent.parent.items[i].submenu.hide();
					this.parent.parent.items[i].activate(
						true,
						true
					);
				}
			}
			
			// …and their children
			for (i = 0; this.parent.submenu.items[i]; i++)
			{
				this.parent.submenu.items[i].activate(true);
				if (this.parent.submenu.items[i].submenu)
				{
					this.parent.submenu.items[i].submenu.hide();
				}
			}
			
			// Show corresponding sub menu
			this.parent.submenu.show();
			
			// And its parents
			var parent = this.parent ?
				this.parent :
				null;
			while (parent)
			{
				parent.parent.show();
				parent.activate(
					false,
					false
				);
				parent = parent.parent ?
					parent.parent.parent :
					null;
			}
			
			// Activate item
			this.parent.activate(
				false,
				true
			);
			
			// Prevents event propagation on parent's elements
			MenuCol._stopPropagation = true;
			setTimeout(
				function()
				{
					MenuCol._stopPropagation = false;
				},
				20
			)
		}
	},
	/**
	 * activate element
	 * @param {Boolean} oupa True to deactivate
	 */
	activate: function(oupa, submenu)
	{
		// Activate item
		if (!oupa)
		{
			this.element.className = 'selected';
		}
		else
		{
			this.element.className = '';
		}
		// Activate submenu
		if (submenu)
		{
			if (!oupa)
			{
				this.submenu.element.className = 'selected';
			}
			else
			{
				this.parent.element.className = '';
			}
		}
	}
};

/**
 * Open menu on activated li. Will open on li with 'selected' class
 */
MenuCol.Item.open = function()
{
	for (var i = 0; MenuCol.Items[i]; i++)
	{
		if (MenuCol.Items[i].element.className == 'selected')
		{
			if (MenuCol.Items[i].submenu)
			{
				MenuCol.Items[i].element.onclick();
				
			}
			else
			{
				MenuCol.Items[i].parent.parent.element.onclick();
				MenuCol.Items[i].activate();
			}
		}
	}
}
&lt;/pre&gt;


&lt;pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Voici un exemple du résultat qui &lt;a href=&quot;http://www.hadrien.eu/Works/menuCol/&quot; hreflang=&quot;fr&quot;&gt;affiche les archives de ce blog&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.hadrien.eu/telechargements.html#cadre_content&quot; hreflang=&quot;en&quot;&gt;Télécharger le script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2008/02/10/Menu-en-colonne-en-Javascript-MenuCol#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2008/02/10/Menu-en-colonne-en-Javascript-MenuCol#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/238</wfw:commentRss>
      </item>
    
  <item>
    <title>L'iPhone est enfin parfait !</title>
    <link>http://www.alti.info/post/2007/10/17/LiPhone-est-enfin-parfait</link>
    <guid isPermaLink="false">urn:md5:2048bc10a1c94109f8a2ce8303252236</guid>
    <pubDate>Wed, 17 Oct 2007 19:51:00 +0200</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Général</category>
        <category>Apple</category><category>developpement</category><category>iPhone</category><category>iPod</category><category>programmation</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.mac4ever.com/images/images_actu/32570_619_apple_va_ouvrir_l_iphone_aux_developpeurs.jpg&quot; alt=&quot;iPhone SDK&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;Ça y est&amp;nbsp;! Apple a enfin décidé de se sortir les doigts du cul et de proposer un SDK officiel pour développer des applications pour l'iPhone&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Il ne manquait que ça à l'iPhone pour qu'il devienne (pour moi du moins) totalement indispensable. Apple nous avait fait doucement rigoler avec ses applications web 2.0 uniquement disponible avec une connexion internet. Et grassement avec le briquage des iPhones où étaient installées des applications développées avec le &lt;a href=&quot;http://www.iphonehacks.com/iphone_applications/index.html&quot; hreflang=&quot;en&quot;&gt;SDK non officiel&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Et bien, voilà, c'est fait. &lt;a href=&quot;http://www.apple.com/hotnews/&quot; hreflang=&quot;fr&quot;&gt;Apple l'a annoncé&lt;/a&gt;. Et &lt;a href=&quot;http://www.mac4ever.com/news/32570/apple_va_ouvrir_l_iphone_aux_developpeurs/&quot; hreflang=&quot;fr&quot;&gt;Mac4Ever nous l'a traduit&lt;/a&gt;. Un SDK officiel sera distribué par Apple en Février 2008&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2007/10/17/LiPhone-est-enfin-parfait#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2007/10/17/LiPhone-est-enfin-parfait#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/182</wfw:commentRss>
      </item>
    
  <item>
    <title>Nouvelle version de YUI (2.3.0)</title>
    <link>http://www.alti.info/post/2007/08/06/Nouvelle-version-de-YUI-230-YAHOO-User-Interface-javascript</link>
    <guid isPermaLink="false">urn:md5:1fb57931044ad8b27e16165e50223844</guid>
    <pubDate>Mon, 06 Aug 2007 01:29:00 +0200</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Développement</category>
        <category>AJAX</category><category>developpement</category><category>geek</category><category>Internet</category><category>JavaScript</category><category>libre</category><category>programmation</category><category>YUI</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://yuiblog.com/assets/skin.gif&quot; alt=&quot;YUI&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;&lt;a href=&quot;http://developer.yahoo.com/yui/&quot; hreflang=&quot;en&quot;&gt;YAHOO&lt;/a&gt; nous offre une nouvelle version de &lt;a href=&quot;http://developer.yahoo.com/yui/&quot; hreflang=&quot;en&quot;&gt;YUI&lt;/a&gt; (YAHOO User Interface) qui passe donc au numéro &lt;strong&gt;2.3.0&lt;/strong&gt; \o/&lt;/p&gt;


&lt;p&gt;Cette nouvelle version apporte 250 corrections de bugs et améliorations mais surtout de nouveaux éléments !!!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rich Text Editor&lt;/strong&gt; (beta)&amp;nbsp;: La nouvelle classe &lt;em&gt;YAHOO.widget.Editor&lt;/em&gt; propose d'ajouter en tout simplicité un &lt;strong&gt;éditeur de texte WYSIWYG&lt;/strong&gt; du même style que &lt;a href=&quot;http://www.fckeditor.net/&quot; hreflang=&quot;en&quot;&gt;FCKEditor&lt;/a&gt; ou &lt;a href=&quot;http://tinymce.moxiecode.com/&quot; hreflang=&quot;en&quot;&gt;TinyMCE&lt;/a&gt;. D'après &lt;a href=&quot;http://developer.yahoo.com/yui/examples/editor/switch_editor.html&quot; hreflang=&quot;en&quot;&gt;la démo&lt;/a&gt; que j'ai essayé, il a l'air carrément mieux que ces précédents&amp;nbsp;! Très prometteur !!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Base CSS&lt;/strong&gt;&amp;nbsp;: Le pack de CSS comporte maintenant &lt;strong&gt;Reset CSS&lt;/strong&gt; qui permet de supprimer tout les styles par default de tout les navigateurs. Bon, là, je suis pas trop partisan de cette idée, mais ça plaira à certain…&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YUI Loader&lt;/strong&gt; (beta)&amp;nbsp;: La nouvelle classe &lt;em&gt;YAHOO.util.YUILoader&lt;/em&gt; permet de &lt;strong&gt;charger des modules à la volée&lt;/strong&gt;. Du coup, on ne charge plus que le loader au début du script. Ensuite, en cours de script on appelle l'un ou l'autre module dont on a besoin (colorpicker, treeview…) et il seront chargé seulement s'ils ne le sont pas déjà. Ça peut être bien pratique.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ImageLoader&lt;/strong&gt; (expérimental)&amp;nbsp;: &lt;em&gt;YAHOO.util.ImageLoader&lt;/em&gt; permet de programmer le chargement des images dans la page. Avec cette classe, on peut déterminer que telles images qui ne sont pas forcément visibles au début ne seront chargées que quand on en aura besoin. Cela permet donc d'accélérer le chargement de la page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Color Picker Control&lt;/strong&gt; (beta)&amp;nbsp;: &lt;em&gt;YAHOO.widget.ColorPicker&lt;/em&gt; est un outil pour sélectionner facilement une couleur dans une palette.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test Utility&lt;/strong&gt; (beta)&amp;nbsp;: Voilà une classe très intéressante et très attendue&amp;nbsp;! &lt;em&gt;YAHOO.tool.TestCase&lt;/em&gt; permet de réaliser des &lt;strong&gt;tests unitaires&lt;/strong&gt; sur vos scripts. Je vais m'y pencher dès demain et vous faire un petit tutorial sur son utilisation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour finir, cette nouvelle version de YUI sera plus facilement skinnable et pour le prouver, un nouveau thème par defaut plus agréable est fourni (voir screenshot).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://developer.yahoo.com/yui/download/&quot; hreflang=&quot;en&quot;&gt;Vous pouvez télécharger YUI chez sourceforge immédiatement !&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://yuiblog.com/blog/2007/07/31/yui-2-3-0-released/&quot; hreflang=&quot;en&quot;&gt;Se tenir informé des nouvelles de YUI sur le YUI Blog&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2007/08/06/Nouvelle-version-de-YUI-230-YAHOO-User-Interface-javascript#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2007/08/06/Nouvelle-version-de-YUI-230-YAHOO-User-Interface-javascript#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/150</wfw:commentRss>
      </item>
    
  <item>
    <title>Complément sur JSON</title>
    <link>http://www.alti.info/post/2007/07/16/Complement-sur-JSON-javascript-recursive</link>
    <guid isPermaLink="false">urn:md5:4c9e7f1f9dda5696de5b6577bdac060a</guid>
    <pubDate>Mon, 16 Jul 2007 20:40:00 +0200</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Développement</category>
        <category>AJAX</category><category>developpement</category><category>JavaScript</category><category>programmation</category><category>web2.0</category>    
    <description>    &lt;p&gt;
	En complément de l'article sur JSON, voici une petite méthode récursive à laquelle je viens de réfléchir pour explorer les tréfonds d'un objet JSON. C'est cadeau &lt;img src=&quot;/themes/Alt-I/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;pre id=&quot;compJSON&quot; class=&quot;js&quot;&gt;
var test = {
	truc : {
		truc1: 1,
		truc2: 2,
		grosTruc: {
			truc1: 3,
			truc2: 4
		}
	},
	muche : {
		muche1: 1,
		muche2: 2,
		grosMuche: {
			muche1: 3,
			muche2: 4
		}
	}
};

var foreach = function (obj)
{
	for (i in obj)
	{
		if (typeof obj[i] == 'object')
		{
			foreach(obj[i]);
		}
		else
		{
			window.console.log(i + ' - ' + obj[i]);
		}
	}
}
foreach(test);
&lt;/pre&gt;
&lt;p&gt;
	Résultat :
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		truc1 - 1
	&lt;/li&gt;
	&lt;li&gt;
		truc2 - 2
	&lt;/li&gt;
	&lt;li&gt;
		truc1 - 3
	&lt;/li&gt;
	&lt;li&gt;
		truc2 - 4
	&lt;/li&gt;
	&lt;li&gt;
		muche1 - 1
	&lt;/li&gt;
	&lt;li&gt;
		muche2 - 2
	&lt;/li&gt;
	&lt;li&gt;
		muche1 - 3
	&lt;/li&gt;
	&lt;li&gt;
		muche2 - 4
	&lt;/li&gt;
&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.alti.info/js/dp.SyntaxHighlighter/Scripts/shCore.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.alti.info/js/dp.SyntaxHighlighter/Scripts/shBrushJScript.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//&lt;![CDATA[
	document.getElementById('compJSON').setAttribute('name', 'code');
	dp.SyntaxHighlighter.ClipboardSwf = '/js/dp.SyntaxHighlighter/Scripts/clipboard.swf';
	dp.SyntaxHighlighter.HighlightAll('code');
	document.getElementById('compJSON').parentNode.removeChild(document.getElementById('compJSON'));
//]]&gt;
&lt;/script&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2007/07/16/Complement-sur-JSON-javascript-recursive#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2007/07/16/Complement-sur-JSON-javascript-recursive#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/140</wfw:commentRss>
      </item>
    
</channel>
</rss>