<?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/">
<channel>
  <title>Alt-I, des informations alternatives - Informatique, Cultures alternatives et Geekeries saupoudrées d'Ajax. - ergonomie</title>
  <link>http://www.alti.info/</link>
  <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>Thu, 21 Aug 2008 20:15:46 +0200</pubDate>
  <copyright>Creative Commons By-NC-SA</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <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>Explorez la vidéo avec Youtube</title>
    <link>http://www.alti.info/post/2008/02/02/Explorez-la-video-avec-Youtube</link>
    <guid isPermaLink="false">urn:md5:ab5bf7424f135a2e52d9ad4a9f10669a</guid>
    <pubDate>Sat, 02 Feb 2008 12:47:00 +0100</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Général</category>
        <category>ergonomie</category><category>GUI</category><category>innovation</category><category>vidéos</category><category>web2.0</category><category>Youtube</category>    
    <description>    &lt;p&gt;Youtube nous propose une nouvelle fonctionnalité originale et amusante. Pour la trouver, visionnez une vidéo en plein écran. Le bouton étrange &lt;img src=&quot;http://www.alti.info/images/Scrinchoutes/youtube1.png&quot; alt=&quot;Youtube 1&quot; /&gt; apparaîtra en bas à gauche. Un clic sur celui-ci remplace la vidéo par un ensemble de cercles représentant d'autres vidéos relatives&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.alti.info/images/Scrinchoutes/youtube2.png&quot;&gt;&lt;img src=&quot;http://www.alti.info/images/Scrinchoutes/.youtube2_m.jpg&quot; alt=&quot;Youtube 2&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Cliquez sur l'un d'eux pour afficher la vidéo en question&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.alti.info/images/Scrinchoutes/youtube3.png&quot;&gt;&lt;img src=&quot;http://www.alti.info/images/Scrinchoutes/.youtube3_m.jpg&quot; alt=&quot;Youtube 3&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Au fil de votre exploration, de nouvelles relations apparaissent et vous voilà plongé dans une multitude de vidéos susceptible de vous interresser. Et voilà comment on arrive à Chicken Little en partant d'un clip de The Locos&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.alti.info/images/Scrinchoutes/youtube4.png&quot;&gt;&lt;img src=&quot;http://www.alti.info/images/Scrinchoutes/.youtube4_m.jpg&quot; alt=&quot;Youtube 4&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2008/02/02/Explorez-la-video-avec-Youtube#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2008/02/02/Explorez-la-video-avec-Youtube#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/232</wfw:commentRss>
      </item>
    
  <item>
    <title>Le degré Zéro de l'ergonomie</title>
    <link>http://www.alti.info/post/2007/11/17/Le-degre-Zero-de-lergonomie</link>
    <guid isPermaLink="false">urn:md5:8e66dfcbb7cb55cc090a84bb3d8edc4d</guid>
    <pubDate>Sat, 17 Nov 2007 21:40:00 +0100</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Général</category>
        <category>ergonomie</category><category>FAI</category><category>Free</category><category>service</category>    
    <description>    &lt;p&gt;Je viens de le trouver en vous uplodant les épisodes de &lt;a href=&quot;http://www.alti.info/post/2007/11/17/The-IT-crowd&quot; hreflang=&quot;fr&quot;&gt;IT Crowd&lt;/a&gt;. Il s'agit du site &lt;a href=&quot;http://dl.free.fr&quot; hreflang=&quot;fr&quot;&gt;dl.free.fr&lt;/a&gt;, le &lt;strong&gt;service de partage de fichiers de Free&lt;/strong&gt;. Moi qui suis quand même un geek habitué aux interfaces austères et à la ligne de commande, j'ai eu du mal à m'y retrouver là dedans. &lt;strong&gt;Un vrai bordel&lt;/strong&gt;. J'ai peur pour les utilisateurs lambda du genre de nos over-bloggers :p&lt;/p&gt;


&lt;p&gt;Un exemple, après un envoi de fichier auquel j'avais attribué un mot de passe, je reçois un mail me donnant l'url du fichier, et une url pour supprimer le fichier. Je me dit que cette url doit donner sur un formulaire de gestion du dit fichier, et que je pourrais y virer le mot de passe. Je clique. La page m'annonce que le fichier a bien été supprimé. Pas de confirmation, que dalle. Suppression directe en cliquant sur le lien.&lt;/p&gt;


&lt;p&gt;En plus, on peut se demander si l'interface des communautés a bien sa place en production. En l'utilisant, on a vraiment l'impression d'être sur une application en plein cours de développement, même pas au stade alpha. En témoigne les icônes des boutons d'action qui sont représentés par l'icone d'MSN :|&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://www.alti.info/images/Scrinchoutes/interface_dl_free_fr.png&quot; alt=&quot;Interface dl.free.fr&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://dl.free.fr/im/shoutbox/ico.gif&quot; hreflang=&quot;fr&quot;&gt;Voici l'image en question&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Bon sinon, le service techniquement parlant est nickel. 10Go d'espace de stockage, les fichiers restent en ligne pendant 30 jours après le dernier téléchargement, et on peut uploader par FTP. Mais c'est vraiment un outil d'initié.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2007/11/17/Le-degre-Zero-de-lergonomie#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2007/11/17/Le-degre-Zero-de-lergonomie#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/195</wfw:commentRss>
      </item>
    
  <item>
    <title>Ergonomy Test 1.0</title>
    <link>http://www.alti.info/post/2007/10/01/Ergonomy-Test-10</link>
    <guid isPermaLink="false">urn:md5:ac408070b0b6afc02c3d012cfecaa393</guid>
    <pubDate>Mon, 01 Oct 2007 15:42:00 +0200</pubDate>
    <dc:creator>Hadrien</dc:creator>
        <category>Général</category>
        <category>accessibilité</category><category>Apple</category><category>bébé</category><category>enfant</category><category>ergonomie</category><category>iPhone</category>    
    <description>    &lt;p&gt;L'iPhone vient de passer le test ultime de l'ergonomie&amp;nbsp;:&lt;/p&gt;

&lt;object width=&quot;425&quot; height=&quot;353&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/XrVt2ZcrWUY&amp;amp;rel=1&quot; /&gt;
&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
	//&lt;![CDATA[
		document.write('&lt;embed src=&quot;http:\/\/www.youtube.com\/v\/XrVt2ZcrWUY&amp;rel=1&quot; type=&quot;application\/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;353&quot;&gt;&lt;\/embed&gt;');
	//]]&gt;
&lt;/script&gt;
&lt;/object&gt;



&lt;p&gt;Un bébé de 1 ans arrive à l'utiliser sans aucun soucis. Après cette démonstration, seuls les trolls pourront affirmer que l'iPhone est mauvais.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.alti.info/post/2007/10/01/Ergonomy-Test-10#comment-form</comments>
      <wfw:comment>http://www.alti.info/post/2007/10/01/Ergonomy-Test-10#comment-form</wfw:comment>
      <wfw:commentRss>http://www.alti.info/feed/rss2/comments/169</wfw:commentRss>
      </item>
    
</channel>
</rss>