<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kodono &#187; javascript</title>
	<atom:link href="http://blog.kodono.info/wordpress/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kodono.info/wordpress</link>
	<description>Pour tous les technophiles</description>
	<lastBuildDate>Fri, 03 Feb 2012 08:15:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Trouver les paramètres dans l&#8217;url [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2012/02/02/trouver-les-parametres-dans-lurl-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2012/02/02/trouver-les-parametres-dans-lurl-javascript/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 14:53:27 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=926</guid>
		<description><![CDATA[[niveau débutant] Voici une fonction courte pour récupérer l&#8217;ensemble des paramètres passés dans l&#8217;URL : function getUrlVars(a,b,c,d){b=[];if(a=location.search.split('#')[0].match(/\?(.*)(#.*)?/)){d=a[1].split('&#038;');for(i=d.length;i--;){c=d[i].split('=');b[i]=c[0];b[c[0]]=c[1]}}return b} var params=getUrlVars(); // si on a http://blog.kodono.info/?foo=bar&#038;gniii=ok#something alors : params[0]; // -> 'foo' params[1]; // -> 'gniii' params["foo"]; // -> 'bar' params["gniii"]; // -> 'ok']]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>Voici une fonction courte pour récupérer l&#8217;ensemble des paramètres passés dans l&#8217;URL :</p>
<pre class="brush:javascript">function getUrlVars(a,b,c,d){b=[];if(a=location.search.split('#')[0].match(/\?(.*)(#.*)?/)){d=a[1].split('&#038;');for(i=d.length;i--;){c=d[i].split('=');b[i]=c[0];b[c[0]]=c[1]}}return b}

var params=getUrlVars();
// si on a http://blog.kodono.info/?foo=bar&#038;gniii=ok#something alors :
params[0]; // -> 'foo'
params[1]; // -> 'gniii'
params["foo"]; // -> 'bar'
params["gniii"]; // -> 'ok'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/02/02/trouver-les-parametres-dans-lurl-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un algorithme court et rapide pour Array.unique() [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/26/un-algorithme-court-et-rapide-pour-array-unique-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/26/un-algorithme-court-et-rapide-pour-array-unique-javascript/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 15:03:09 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=908</guid>
		<description><![CDATA[Voici un simple algorithme, et apparemment rapide, trouvé sur http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/ et que j&#8217;ai raccourci légèrement : Array.prototype.unique=[].unique&#124;&#124;function(){var o={},i,l=this.length,r=[];for(i=0;i&#60;l;i++)o[this[i]]=this[i];for(i in o)r.push(o[i]);return r} // exemple var tab=[1, 5, 2, 4, 1, 5, 4, 1, 5, 6, 8 ]; tab.unique(); // [1, 5, 2, 4, 6, 8]]]></description>
			<content:encoded><![CDATA[<p>Voici un simple algorithme, et apparemment rapide, trouvé sur <a href="http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/" title="http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/">http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/</a> et que j&#8217;ai raccourci légèrement :</p>
<pre class="brush: javascript">Array.prototype.unique=[].unique||function(){var o={},i,l=this.length,r=[];for(i=0;i&lt;l;i++)o[this[i]]=this[i];for(i in o)r.push(o[i]);return r}

// exemple
var tab=[1, 5, 2, 4, 1, 5, 4, 1, 5, 6, 8 ];
tab.unique(); // [1, 5, 2, 4, 6, 8]
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/26/un-algorithme-court-et-rapide-pour-array-unique-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alternatives à IMNRC() et ProcessImn() pour déterminer la présence d&#8217;une personne [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/23/alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/23/alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 15:59:23 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=904</guid>
		<description><![CDATA[Avec Sharepoint (2003 &#038; 2007) on peut voir la présence (sur IM/MSN/Microsoft Messenger/Office Messenger/Microsoft Lynk) des utilisateurs directement dans une page Web grâce à des petites bulles de couleur. Quand on place le curseur au-dessus on aperçoit un popup avec diverses informations et possibilités. Cela n&#8217;est disponible que pour Internet Explorer puisqu&#8217;on utilise ici de [...]]]></description>
			<content:encoded><![CDATA[<p>Avec Sharepoint (2003 &#038; 2007) on peut voir la présence (sur IM/MSN/Microsoft Messenger/Office Messenger/Microsoft Lynk) des utilisateurs directement dans une page Web grâce à des petites bulles de couleur. Quand on place le curseur au-dessus on aperçoit un popup avec diverses informations et possibilités. Cela n&#8217;est disponible que pour Internet Explorer puisqu&#8217;on utilise ici de l&#8217;ActiveX (et en particulier <a href="http://msdn.microsoft.com/en-us/library/ms455335.aspx" title="Lien vers la documentation Microsoft pour NameCtrl">NameCtrl</a>).</p>
<p>Je force le mode standard d&#8217;IE dans mon Sharepoint, et j&#8217;ai remarqué que les fonctions <code>ProcessImn()</code> et <code>IMNRC()</code> (l&#8217;une appelant l&#8217;autre) causaient un plantage d&#8217;IE avec un CPU qui montait en charge, et cela pour les pages qui contiennent un grand nombre de personnes et donc de bulles de présence (typiquement une liste AllItems avec des colonnes qui montrent cette information).<br />
J&#8217;ai donc décidé de créer une alternative à l&#8217;affichage de la présence dans Sharepoint en utilisant mes propres fonctions.</p>
<p>Le résultat est le suivant :</p>
<pre class="brush: javascript">
/* on commence par supprimer les deux fonctions qui posent problèmes */
function IMNRC() {}
function ProcessImn() {}
var nameCtrl; // on s'assure de définir nameCtrl
var presence={}; // on crée un objet presence qui va nous servir à mettre en cache l'état de chaque individu
// Cette fonction fait apparaitre un menu/popup avec les informations de présence de l'utilisateur
function showIMMenu() {
  var el=window.event.srcElement;
  var pos=el.getBoundingClientRect();
  // on place le menu en question à la position pos.left et pos.top
  nameCtrl.ShowOOUI(el.getAttribute("sip"), 0, pos.left, pos.top);
}

// Cette fonction va cacher le menu
function hideIMMenu() { nameCtrl.HideOOUI() }

// Cette fonction va permettre de modifier la bulle avec celle qui correspond à l'état de présence de l'utilisateur
function ChangeIMPresence(sip, state, imgID) {
  if (presence[imgID] == state) return;
  presence[imgID]=state;
  var imgIM=document.getElementsByName(imgID);
  for (var i=0; i&lt;imgIM.length; i++) {
    var alt="",src="imnhdr.gif"; // default image (grey)
    switch(state) {
      case 0: alt="Online"; src="imnon.png"; break;
      case 1: alt="Offline"; src="imnoff.png"; break;
      case 2: alt="Away"; src="imnaway.png"; break;
      case 4: alt="Be Right Back"; src="imnaway.png"; break;
      case 3: alt="Busy"; src="imnbusy.png"; break;
      case 5: alt="On the Phone"; src="imnbusy.png"; break;
      case 6: alt="Out to Lunch"; src="imnaway.png"; break;
      default: alt="Unknown"; src="imnhdr.gif";
    }
    imgIM[i].src="http://your_sharepoint/_layouts/images/"+src;
    imgIM[i].alt=alt;
  }
}

// Maintenant on initialise l'objet ActiveX
function initIMPresence() {
  if (typeof ActiveXObject == "function") { // seulement pour IE
    if (typeof nameCtrl=="undefined") nameCtrl=new ActiveXObject('Name.NameCtrl.1');
    var imgIM=document.getElementsByName("imnmark"); // toutes les bulles de présence ont le nom "imnmark"
    for (var i=0; i&lt;imgIM.length; i++) {
      var sip=imgIM[i].getAttribute("sip"); // l'attribut "sip" retourne l'information que l'on souhaite
      if (sip!=null) {
        sip=sip.slice(4);
        var state=nameCtrl.GetStatus(sip, "imnmark_"+sip); // retourne la présence basée sur le SIP (adresse email)
        nameCtrl.OnStatusChange=ChangeIMPresence;
        imgIM[i].src="http://your_sharepoint/_layouts/images/imnhdr.gif";
        imgIM[i].alt="Unknown";
        imgIM[i].name+="_"+sip;
        imgIM[i].onclick=showIMMenu;
        imgIM[i].onmouseover=showIMMenu; // quand on passe la souris au-dessus d'une bulle on verra le menu
        imgIM[i].onmouseout=hideIMMenu;
      }
    }
  }
}

// et on lance tout ça !
initIMPresence();
</pre>
<p>En ajoutant ce bout de code à ma masterpage j&#8217;ai pu conserver les bulles de présence tout en évitant un plantage d&#8217;IE <img src='http://blog.kodono.info/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/23/alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DOMContentLoaded pour cross browser (multi-navigateurs) [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 14:57:18 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=899</guid>
		<description><![CDATA[Après avoir parcouru le Net pour un évènement DOMContentLoaded (qui s&#8217;enclenche avant window.onload) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j&#8217;ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : http://javascript.info/tutorial/onload-ondomcontentloaded Pour résumer la fonction à utiliser est : function bindReady(handler){ var called = false [...]]]></description>
			<content:encoded><![CDATA[<p>Après avoir parcouru le Net pour un évènement <code>DOMContentLoaded</code> (qui s&#8217;enclenche avant <code>window.onload</code>) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j&#8217;ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : <a href="http://javascript.info/tutorial/onload-ondomcontentloaded" title="DOMContentLoaded cross browser article">http://javascript.info/tutorial/onload-ondomcontentloaded</a></p>
<p>Pour résumer la fonction à utiliser est :</p>
<pre class="brush: javascript">function bindReady(handler){
  var called = false
  function ready() {
    if (called) return
    called = true
    handler()
  }
  if ( document.addEventListener ) { // native event
    document.addEventListener( "DOMContentLoaded", ready, false )
  } else if ( document.attachEvent ) {  // IE
    try { var isFrame = window.frameElement != null } catch(e) {}

    // IE, the document is not inside a frame
    if ( document.documentElement.doScroll &#038;&#038; !isFrame ) {
      function tryScroll(){
        if (called) return
        try {
          document.documentElement.doScroll("left")
          ready()
        } catch(e) {
          setTimeout(tryScroll, 10)
        }
      }
      tryScroll()
    }

    // IE, the document is inside a frame
    document.attachEvent("onreadystatechange", function(){
      if ( document.readyState === "complete" ) {
        ready()
      }
    })
  }

  // Old browsers
  if (window.addEventListener)
    window.addEventListener('load', ready, false)
  else if (window.attachEvent)
    window.attachEvent('onload', ready)
  else {
    var fn = window.onload // very old browser, copy old onload
    window.onload = function() { // replace by new onload and call the old one
      fn &#038;&#038; fn()
      ready()
    }
  }
}</pre>
<p>A partir de là vous pouvez appeler votre fonction avec :</p>
<pre class="brush: javascript">bindReady(function() {
  /* quelque chose qui doit se lancer après le chargement du DOM */
});</pre>
<p>Dans le cas où vous voudriez appeler plusieurs fonctions, alors vous pouvez simplement faire quelque chose comme :</p>
<pre class="brush: javascript">
var fonctionsACharger=[];
bindReady(function() {
  for (var i=0; i&lt;functionsACharger.length;i++) functionsACharger[i]();
});

/* on ajoute les fonctions à charger dans notre tableau */
fonctionsACharger.push(function() {
  /* première chose à faire */
});
fonctionsACharger.push(function() {
  alert("Toutes les fonctions sont maintenant chargées !");
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE9 en mode standard et Sharepoint&#8230; bug du bouton OK [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/18/ie9-en-mode-standard-et-sharepoint-2003-bug-du-bouton-ok-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/18/ie9-en-mode-standard-et-sharepoint-2003-bug-du-bouton-ok-sharepoint/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 17:59:16 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=892</guid>
		<description><![CDATA[[niveau expert] Si vous passez IE9 en mode standard avec Sharepoint vous risquez d&#8217;avoir le bouton OK des formulaires qui ne fonctionne plus&#8230; Après avoir debuggué le bazar j&#8217;ai découvert qu&#8217;un des fichiers (&#171;&#160;/_layouts/1033/form.js&#160;&#187;) Javascript utilise document.frames() au lieu de document.frames[]. Si cela fonctionne sur les anciens navigateurs, ce n&#8217;est plus le cas pour IE9 [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau expert]</p>
<p>Si vous passez IE9 en mode standard avec Sharepoint vous risquez d&#8217;avoir le bouton OK des formulaires qui ne fonctionne plus&#8230; Après avoir debuggué le bazar j&#8217;ai découvert qu&#8217;un des fichiers (&laquo;&nbsp;/_layouts/1033/form.js&nbsp;&raquo;) Javascript utilise <code>document.frames()</code> au lieu de <code>document.frames[]</code>. Si cela fonctionne sur les anciens navigateurs, ce n&#8217;est plus le cas pour IE9 en mode standard, du coup il retourne un &laquo;&nbsp;Function expected&nbsp;&raquo;.</p>
<p>Il y a deux fonctions incriminées <code>RTE_GetEditorIFrame()</code> et <code>RTE_DD_GetMenuFrame()</code>. Il suffit d&#8217;utiliser les commentaires conditionnels pour indiquer que lorsqu&#8217;on utilise IE9 alors on remplace ces deux fonctions par :</p>
<pre class="brush: javascript">function RTE_GetEditorIFrame(strBaseElementID)
{
	var ifmEditor=null;
	var doc=document;
	if ((null !=doc.frames) &#038;&#038; (doc.frames.length==0) &#038;&#038; (doc.parentWindow.parent !=null))
	{
		doc=doc.parentWindow.parent.document;
	}
	if ((null !=doc.frames) &#038;&#038; (doc.frames.length > 0))
	{
		var ifmContainer=doc.getElementById(RTE_GetEditorIFrameID(strBaseElementID));
		if (ifmContainer !=null)
		{
			ifmEditor=doc.frames[RTE_GetEditorIFrameID(strBaseElementID)];
		}
	}
	return ifmEditor;
}
function RTE_DD_GetMenuFrame()
{
	var ifmMenu=null;
	var elemMenu=RTE_DD_GetMenuElement();
	if (null !=elemMenu)
	{
		if (document.frames.length > 0)
		{
			ifmMenu=document.frames[g_strRTETextEditorPullDownMenuID];
		}
		else
		{
			if ((document.parentWindow !=null) &#038;&#038; (document.parentWindow.frames !=null))
			{
				ifmMenu=document.parentWindow.parent.document.frames[g_strRTETextEditorPullDownMenuID];
			}
		}
	}
	if (null==ifmMenu)
	{
		if (g_fRTEFirstCallToGetMenu)
		{
			g_fRTEFirstCallToGetMenu=false;
			return null;
		}
	}
	return ifmMenu;
}
</pre>
<p>Ainsi <code>document.frames</code> est bien appelé comme un objet et non comme une fonction !</p>
<p><strong>A noter cependant qu&#8217;il existe des tonnes de bugs avec IE9 et Sharepoint 2003/2007. Il est donc conseillé d&#8217;utiliser le mode de compatibilité en IE8</strong> si vous ne voulez pas passer des heures à trouver l&#8217;origine des problèmes et à les corriger :</p>
<pre class="brush: html">&lt;meta http-equiv="X-UA-Compatible" content="IE=8"/></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/18/ie9-en-mode-standard-et-sharepoint-2003-bug-du-bouton-ok-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retrouver les styles CSS appliqués à un élément du DOM [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 13:55:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=814</guid>
		<description><![CDATA[[niveau intermédiaire] Voici une fonction (qui mériterait quelques optimisations) qui va vous permettre de trouver tous les styles appliqués à un élément : function getStyle(e) { var arr=(typeof window.getComputedStyle == "function" ? window.getComputedStyle(e) : e.currentStyle ); // IE will use the "currentStyle" var res=[]; $.each(arr, function(k,v) { // ici j'utilise le "each" de jQuery simplement [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Voici une fonction (qui mériterait quelques optimisations) qui va vous permettre de trouver tous les styles appliqués à un élément :</p>
<pre class="brush: javascript">
function getStyle(e) {
    var arr=(typeof window.getComputedStyle == "function" ? window.getComputedStyle(e) : e.currentStyle ); // IE will use the "currentStyle"
    var res=[];
    $.each(arr, function(k,v) { // ici j'utilise le "each" de jQuery simplement parce que c'est plus pratique/simple que le for-in
      if (typeof window.getComputedStyle == "undefined") {
        var kNoCamel=k.replace(/([A-Z])/g, "-$1").toLowerCase(); // sous IE on a des noms de propriétés au format camelCase
        k=v;
        v=kNoCamel;
      }
      if (v.charAt(0) != "-") {
        var vSlice = v.slice(0,7);
        // ici on va chercher à conserver que quelques propriétés CSS bien particulières
        var ok = (vSlice=="border-"||vSlice=="margin-"||vSlice=="padding");
        switch(v) {
          case "background-color":
          case "color":
          case "font-style":
          case "font-weight":
          case "font-size":
          case "font-family":
          case "width":
          case "height":
          case "vertical-align":
          case "text-align":
          case "text-decoration": ok=true;
        }
        if (ok) {
          if (typeof window.getComputedStyle == "function") {
            var vCamel=(v.search("-") != -1 ? v.replace(/(-)(.)/g,function(c) { return c[1].toUpperCase();}) : v); // pour trouver les valeurs associés aux propriétés on se change en camelCase
            res.push(v+":"+arr[vCamel]);
          } else {
            res.push(v+":"+k);
          }
      }
    }
  });
  return res.join(";");
};

alert(getStyle(document.getElementById('test')));
/* qui retournera par exemple:
background-color:transparent;border-bottom-color:rgb(128, 128, 128);
border-bottom-left-radius:0px;border-bottom-right-radius:0px;
border-bottom-style:none;border-bottom-width:0px;border-collapse:collapse;
border-left-color:rgb(128, 128, 128);border-left-style:none;
border-left-width:1px;border-right-color:rgb(128, 128, 128);
border-right-style:none;border-right-width:0px;border-spacing:2px 2px;
border-top-color:rgb(128, 128, 128);border-top-left-radius:0px;
border-top-right-radius:0px;border-top-style:none;border-top-width:1px;
color:rgb(0, 0, 0);font-family:verdana;font-size:16px;font-style:normal;
font-weight:400;height:3738px;margin-bottom:0px;margin-left:0px;margin-right:0px;
margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;
padding-top:0px;text-align:start;text-decoration:none;vertical-align:baseline;width:1756px
*/
</pre>
<p><strong>Edit:</strong> J&#8217;ai découvert qu&#8217;il existe un plugin pour jQuery qui fait un peu près la même chose (sauf qu&#8217;il retourne TOUTES les propriétés et qu&#8217;il est bien <a href="http://jsperf.com/copycss-vs-mine" title="Test comparatif fait sur jsperf.com">plus lent à l&#8217;exécution</a>) : <a href="http://upshots.org/javascript/jquery-copy-style-copycss" title="jQuery CopyCSS plugin">http://upshots.org/javascript/jquery-copy-style-copycss</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a file into Sharepoint document librairies with the Copy.asmx web service [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/21/create-a-file-into-sharepoint-document-librairies-with-the-copy-asmx-web-service-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/21/create-a-file-into-sharepoint-document-librairies-with-the-copy-asmx-web-service-javascript/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:33:19 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=808</guid>
		<description><![CDATA[This is the English version of my previous article Did you know it&#8217;s possible to create a file from scratch and to add it into a shared documents library of Sharepoint, and only with Javascript ? To do it we&#8217;ll use the &#171;&#160;copy.asmx&#160;&#187; web service with the &#171;&#160;CopyIntoItems&#160;&#187; function. If you check http://your_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems you&#8217;ll see [...]]]></description>
			<content:encoded><![CDATA[<div lang="en"><strong><em>This is the English version of my previous article</em></strong></p>
<p>Did you know it&#8217;s possible to create a file from scratch and to add it into a shared documents library of Sharepoint, and only with Javascript ?</p>
<p>To do it we&#8217;ll use the &laquo;&nbsp;copy.asmx&nbsp;&raquo; web service with the &laquo;&nbsp;CopyIntoItems&nbsp;&raquo; function.<br />
If you check <strong>http://your_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems</strong> you&#8217;ll see that we have several details about the &laquo;&nbsp;CopyIntoItems&nbsp;&raquo; function. Unfortunately it&#8217;s very difficult to find any information regarding this on the Web, and specially for Javascript&#8230;</p>
<p>So, here is the solution to create a file, e.g. an Excel file (.xls) with a regular HTML table, and we&#8217;re going to save it to this library: &laquo;&nbsp;http://your_sharepoint/Shared Documents/&nbsp;&raquo; (Note: I&#8217;m using jQuery for the AJAX requests).</p>
<pre class="brush: javascript">
// The file content must be encoded into Base64. To do it I use the function available on my blog (http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/)
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c='=';for(d=f='';e&#038;=3,a.charAt(d++)||(b=';=',e);f+=b.charAt(63&#038;c>>++e*2))c=c&lt;&lt;8|a.charCodeAt(d-=!e);return f}

// "Upload" is the name of our function to do the job
// txtContent is a plain text, the content of our file
// destinationUrl is the full path URL to the document library (with the filename included)
function Upload(txtContent, destinationUrl) {
    var jsStream = encode_b64(txtContent);
    var soapEnv  = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?>&quot;
                  +&quot;&lt;soap:Envelope xmlns:xsi=\&quot;http://www.w3.org/2001/XMLSchema-instance\&quot; xmlns:xsd=\&quot;http://www.w3.org/2001/XMLSchema\&quot; xmlns:soap=\&quot;http://schemas.xmlsoap.org/soap/envelope/\&quot;>&quot;
                  +&quot;&lt;soap:Body>&quot;
                  +&quot;&lt;CopyIntoItems xmlns=\&quot;http://schemas.microsoft.com/sharepoint/soap/\&quot;>&quot;
                  +&quot;&lt;SourceUrl>http://null&lt;/SourceUrl>&quot;
                  +&quot;&lt;DestinationUrls>&lt;string>&quot;+destinationUrl+&quot;&lt;/string>&lt;/DestinationUrls>&quot;
                  +&quot;&lt;Fields>&lt;FieldInformation Type=&apos;File&apos; />&lt;/Fields>&quot;
                  +&quot;&lt;Stream>&quot;+jsStream+&quot;&lt;/Stream>&quot;
                  +&quot;&lt;/CopyIntoItems>&quot;
                  +&quot;&lt;/soap:Body>&quot;
                  +&quot;&lt;/soap:Envelope>&quot;;
    jQuery.ajax({
        url: &quot;http://your_sharepoint/_vti_bin/copy.asmx&quot;,
        type: &quot;POST&quot;,
        dataType: &quot;xml&quot;,
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader(&apos;SOAPAction&apos;, &apos;http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems&apos;); },
        contentType: &quot;text/xml; charset=\&quot;utf-8\&quot;&quot;
    });
}

Upload("&lt;html>&lt;table>&lt;tr>&lt;th>Colonne 1&lt;/th>&lt;th>Colonne B&lt;/th>&lt;/tr>&lt;tr>&lt;td>Total:&lt;/td>&lt;td>1500&lt;/td>&lt;/tr>&lt;/table>&lt;/html>","http://your_sharepoint/Shared Documents/test.xls");
</pre>
<p>Then, when you&#8217;ll click on the new &laquo;&nbsp;test.xls&nbsp;&raquo; file, your web browser will want to open it with Excel. MS Excel should show you a warning message, but just click YES and you&#8217;ll see your table inside the sheet !</p>
<p>Of course you can create any type of files (.txt, .jpg, .doc, &#8230;) and with any content.</p>
<p>Related links:</p>
<ul>
<li><a href="http://blog.stuartwhiteford.com/?p=86">http://blog.stuartwhiteford.com/?p=86</a></li>
<li><a href="http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c">http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx">http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/21/create-a-file-into-sharepoint-document-librairies-with-the-copy-asmx-web-service-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer un fichier dans une librairie Sharepoint grâce au web service Copy.asmx [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/21/creer-un-fichier-dans-une-librairie-sharepoint-grace-au-web-service-en-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/21/creer-un-fichier-dans-une-librairie-sharepoint-grace-au-web-service-en-javascript/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:12:45 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=792</guid>
		<description><![CDATA[Saviez-vous qu&#8217;il est possible de créer un document de toute pièce et de l&#8217;ajouter dans une librairie (&#171;&#160;Shared Document&#160;&#187;) de Sharepoint seulement avec Javascript ? Pour cela nous utiliserons le web service &#171;&#160;copy.asmx&#160;&#187; avec la fonction &#171;&#160;CopyIntoItems&#160;&#187;. Si vous pointez vers l&#8217;adresse http://votre_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems vous remarquerez qu&#8217;on vous fournit un certain nombre de détails quant aux [...]]]></description>
			<content:encoded><![CDATA[<p>Saviez-vous qu&#8217;il est possible de créer un document de toute pièce et de l&#8217;ajouter dans une librairie (&laquo;&nbsp;Shared Document&nbsp;&raquo;) de Sharepoint seulement avec Javascript ?</p>
<p>Pour cela nous utiliserons le web service &laquo;&nbsp;copy.asmx&nbsp;&raquo; avec la fonction &laquo;&nbsp;CopyIntoItems&nbsp;&raquo;.<br />
Si vous pointez vers l&#8217;adresse <strong>http://votre_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems</strong> vous remarquerez qu&#8217;on vous fournit un certain nombre de détails quant aux informations qu&#8217;il faut envoyer. Malheureusement c&#8217;est plutôt très mal documenté, surtout pour Javascript&#8230;</p>
<p>Voici donc la solution pour créer un fichier, par exemple un fichier Excel (en .xls) dans lequel on va mettre un tableau HTML banal et qui sera enregistré (dans notre exemple) dans la librairie &laquo;&nbsp;http://votre_sharepoint/Shared Documents/&nbsp;&raquo; (à noter que j&#8217;utilise jQuery pour la requête ajax).</p>
<pre class="brush: javascript">
// le contenu de notre fichier doit être encodé en Base64. Pour cela j'utilise la fonction disponible sur mon blog (http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/)
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c='=';for(d=f='';e&#038;=3,a.charAt(d++)||(b=';=',e);f+=b.charAt(63&#038;c>>++e*2))c=c&lt;&lt;8|a.charCodeAt(d-=!e);return f}

// Notre fonction qu'on va appeler &quot;Upload&quot;
// txtContent est du plain text qui est donc le contenu de notre fichier
// destinationUrl est l&apos;URL complète vers la librairie où le fichier va être stocké (avec le nom du fichier à créer)
function Upload(txtContent, destinationUrl) {
    var jsStream = encode_b64(txtContent);
    var soapEnv  = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?>&quot;
                  +&quot;&lt;soap:Envelope xmlns:xsi=\&quot;http://www.w3.org/2001/XMLSchema-instance\&quot; xmlns:xsd=\&quot;http://www.w3.org/2001/XMLSchema\&quot; xmlns:soap=\&quot;http://schemas.xmlsoap.org/soap/envelope/\&quot;>&quot;
                  +&quot;&lt;soap:Body>&quot;
                  +&quot;&lt;CopyIntoItems xmlns=\&quot;http://schemas.microsoft.com/sharepoint/soap/\&quot;>&quot;
                  +&quot;&lt;SourceUrl>http://null&lt;/SourceUrl>&quot;
                  +&quot;&lt;DestinationUrls>&lt;string>&quot;+destinationUrl+&quot;&lt;/string>&lt;/DestinationUrls>&quot;
                  +&quot;&lt;Fields>&lt;FieldInformation Type=&apos;File&apos; />&lt;/Fields>&quot;
                  +&quot;&lt;Stream>&quot;+jsStream+&quot;&lt;/Stream>&quot;
                  +&quot;&lt;/CopyIntoItems>&quot;
                  +&quot;&lt;/soap:Body>&quot;
                  +&quot;&lt;/soap:Envelope>&quot;;
    jQuery.ajax({
        url: &quot;http://votre_sharepoint/_vti_bin/copy.asmx&quot;,
        type: &quot;POST&quot;,
        dataType: &quot;xml&quot;,
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader(&apos;SOAPAction&apos;, &apos;http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems&apos;); },
        contentType: &quot;text/xml; charset=\&quot;utf-8\&quot;&quot;
    });
}

Upload("&lt;html>&lt;table>&lt;tr>&lt;th>Colonne 1&lt;/th>&lt;th>Colonne B&lt;/th>&lt;/tr>&lt;tr>&lt;td>Total:&lt;/td>&lt;td>1500&lt;/td>&lt;/tr>&lt;/table>&lt;/html>","http://votre_sharepoint/Shared Documents/test.xls");
</pre>
<p>Ensuite si vous cliquez sur le fichier &laquo;&nbsp;test.xls&nbsp;&raquo; nouvellement créé, votre navigateur va vouloir l&#8217;ouvrir avec Excel. Celui-ci va vous donner un warning, mais il suffit d&#8217;accepter et votre tableau va apparaitre dans votre Excel !<br />
Bien sur on peut créer tout type de fichier (.txt, .jpg, .doc, etc) et avec le contenu que l&#8217;on souhaite.</p>
<p>Liens additionnels:</p>
<ul>
<li><a href="http://blog.stuartwhiteford.com/?p=86">http://blog.stuartwhiteford.com/?p=86</a></li>
<li><a href="http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c">http://stackoverflow.com/questions/7976329/sharepoint-copyintoitems-soap-message-in-objective-c</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx">http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems%28v=office.12%29.aspx</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/21/creer-un-fichier-dans-une-librairie-sharepoint-grace-au-web-service-en-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trouver l&#8217;heure et la date en Javascript d&#8217;un autre timezone [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/11/02/trouver-lheure-et-la-date-en-javascript-dun-autre-timezone-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/11/02/trouver-lheure-et-la-date-en-javascript-dun-autre-timezone-programmation/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 15:49:41 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=766</guid>
		<description><![CDATA[Pour récupérer l&#8217;heure courante d&#8217;un autre timezone voici comment faire (ici je prends l&#8217;exemple de CST qui est UTC-5, c&#8217;est-à-dire -300 minutes) : new Date(new Date(new Date().toUTCString()).setMinutes(-300)); Ensuite il faudra utiliser les fonctions getUTC* pour avoir les informations relatives à la nouvelle heure : var dLocal = new Date(); // -> Thu Nov 03 2011 [...]]]></description>
			<content:encoded><![CDATA[<p>Pour récupérer l&#8217;heure courante d&#8217;un autre timezone voici comment faire (ici je prends l&#8217;exemple de CST qui est UTC-5, c&#8217;est-à-dire -300 minutes) :</p>
<pre class="brush: javascript">new Date(new Date(new Date().toUTCString()).setMinutes(-300));</pre>
<p>Ensuite il faudra utiliser les fonctions <em>getUTC*</em> pour avoir les informations relatives à la nouvelle heure :</p>
<pre class="brush: javascript">var dLocal = new Date(); // -> Thu Nov 03 2011 09:50:19 GMT+0100
var dOffset = new Date(new Date(new Date().toUTCString()).setMinutes(-300));
var offsetHours = dOffset.getUTCHours(); // -> 3</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/11/02/trouver-lheure-et-la-date-en-javascript-dun-autre-timezone-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Supprimer les tags &lt;script&gt; d&#8217;une chaine de caractères [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/10/18/supprimer-les-tags-script-dune-chaine-de-caracteres-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/10/18/supprimer-les-tags-script-dune-chaine-de-caracteres-javascript/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 12:05:11 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=749</guid>
		<description><![CDATA[Il suffit d&#8217;utiliser la chaine RegEx suivante : var myText = 'blah blah &#60;script type="text/javascript">foo=bar;&#60;/script>blah blah'; var myStripText = myText.replace(/&#60;script.*?>[\s\S]*?&#60;\/.*?script>/gi,""); console.log(myStripText); // -> 'blah blah blah blah' On peut également utiliser une expression régulière pour supprimer les liens javascripts : var myText = 'blah blah &#60;a href="javascript:alert(gniii)">foo&#60;/a>blah blah'; var myStripText = myText.replace(/javascript.*:[^"]*/gi,""); console.log(myStripText); // -> [...]]]></description>
			<content:encoded><![CDATA[<p>Il suffit d&#8217;utiliser la chaine RegEx suivante :</p>
<pre class="brush:javascript">var myText = 'blah blah &lt;script type="text/javascript">foo=bar;&lt;/script>blah blah';
var myStripText = myText.replace(/&lt;script.*?>[\s\S]*?&lt;\/.*?script>/gi,"");
console.log(myStripText); // -> 'blah blah blah blah'</pre>
<p>On peut également utiliser une expression régulière pour supprimer les liens javascripts :</p>
<pre class="brush:javascript">var myText = 'blah blah &lt;a href="javascript:alert(gniii)">foo&lt;/a>blah blah';
var myStripText = myText.replace(/javascript.*:[^"]*/gi,"");
console.log(myStripText); // -> 'blah blah &lt;a href="">foo</a>blah blah'</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/10/18/supprimer-les-tags-script-dune-chaine-de-caracteres-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment déboguer son code Javascript ? [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/19/comment-deboguer-son-code-javascript-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/19/comment-deboguer-son-code-javascript-programmation/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 14:04:19 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Debug]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=716</guid>
		<description><![CDATA[Évidemment vous pouvez utiliser Firebug (add-on Firefox) pour trouver les problèmes dans votre code, que ce soit des erreurs de syntax (syntax error) ou autre. Même s&#8217;il semble qu&#8217;avec la version de Firebug 1.8.x l&#8217;information fournie ne soit plus autant utile (mais espérons que ce ne soit que temporaire). Il existe des sites web qui [...]]]></description>
			<content:encoded><![CDATA[<p>Évidemment vous pouvez utiliser <a href="http://getfirebug.com/">Firebug</a> (add-on Firefox) pour trouver les problèmes dans votre code, que ce soit des erreurs de syntax (<i>syntax error</i>) ou autre. Même s&#8217;il semble qu&#8217;avec la version de Firebug 1.8.x l&#8217;information fournie ne soit plus autant utile (mais espérons que ce ne soit que temporaire).</p>
<p>Il existe des sites web qui fournissent un débogage du Javascript, et mon préféré est <a href="http://www.javascriptlint.com/online_lint.php">http://www.javascriptlint.com/</a>. Il vous montrera rapidement ce qu&#8217;il ne va pas dans ce que vous avez entré : oubli de parenthèse, de point-virgule, mauvaise déclaration, &#8230;</p>
<p>De plus si vous utilisez <a href="http://notepad-plus-plus.org/fr/">Notepad++</a> ou un autre éditeur, il est facile d&#8217;adjoindre la puissance de <a href="http://www.javascriptlint.com/download.htm">JSLint à votre programme préféré</a>. Dans ce <a href="http://stackoverflow.com/questions/1046810/using-jslint-in-notepad">thread</a> on vous explique tout.<br />
En l&#8217;occurrence voici comment faire pour Notepad++ :</p>
<ol>
<li>Télécharger <a href="http://www.javascriptlint.com/download.htm">la version pour Windows</a>, puis dézippez le fichier;</li>
<li>Maintenant ouvrez Notepad++, puis dans le menu <em>Plugins</em> vous trouvez <em>NppExec</em>, et après <em>Execute&#8230;</em> (ou touche F6);</li>
<li>Dans la zone qui apparait entrez la commande suivante (en supposant que vous ayez mis le fichier dézipppé dans &laquo;&nbsp;C:\Program Files\JavascriptLint\&nbsp;&raquo;) :<br />
<code>"C:\Program Files\JavascriptLint\jsl.exe" -conf "C:\Program Files\JavascriptLint\jsl.default.conf" -process "$(FULL_CURRENT_PATH)"</code></li>
<li>Cliquez sur &laquo;&nbsp;Save&#8230;&nbsp;&raquo; et donnez un nom à cette commande;</li>
<li>Vous pouvez désormais utilisez JSLint directement dans Notepad++</li>
<li>Dans le fichier <em>jsl.default.conf</em> vous trouverez les options et les warnings à supprimer</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/19/comment-deboguer-son-code-javascript-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tester les performances d&#8217;un code Javascript via un benchmark [performance]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 13:50:10 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=709</guid>
		<description><![CDATA[Je vous conseille de tester régulièrement votre code Javascript pour voir les performances par rapport à d&#8217;autres commandes. Il arrive qu&#8217;on hésite entre deux (ou plus!) façons de faire. Il existe le populaire http://jsperf.com/ qui offre la possibilité de tester autant de bouts de code que l&#8217;on souhaite, en appelant même quelques framework bien connus [...]]]></description>
			<content:encoded><![CDATA[<p>Je vous conseille de tester régulièrement votre code Javascript pour voir les performances par rapport à d&#8217;autres commandes. Il arrive qu&#8217;on hésite entre deux (ou plus!) façons de faire.</p>
<p>Il existe le populaire <a href="http://jsperf.com/">http://jsperf.com/</a> qui offre la possibilité de tester autant de bouts de code que l&#8217;on souhaite, en appelant même quelques framework bien connus (comme jQuery).</p>
<p>Mais si vous avez des besoins un peu plus particulier, ou vous devez travailler sur un environnement restreint, alors il est possible d&#8217;utiliser <a href="http://www.broofa.com/Tools/JSLitmus/">JSLitmus</a>. La façon de l&#8217;utiliser est <strong>incroyablement simple</strong> :</p>
<pre class="brush:javascript">&lt;script src="JSLitmus.js">&lt;/script>
&lt;script>
JSLitmus.test('Mon premier test', function() { /* do something */ });
JSLitmus.test('Mon second test', function() { /* do something else */ });
&lt;/script></pre>
<p>Cela fait apparaître un bouton &laquo;&nbsp;Run tests&nbsp;&raquo; avec un petit tableau. Une fois le test fini le tableau et un graphique vous donnent les informations nécessaires, et en l&#8217;occurrence plus le chiffre (nombre d&#8217;opérations/sec) est grand et mieux c&#8217;est.</p>
<p>Voici un exemple qui montre que l&#8217;utilisation de <code>search</code> est bien plus rapide que de déclarer une <code>RegExp</code> puis appeler <code>match</code> :</p>
<pre class="brush:javascript">&lt;html>
&lt;head>
&lt;script src="http://www.broofa.com/Tools/JSLitmus/JSLitmus.js">&lt;/script>
&lt;/head>
&lt;body>
&lt;script>
JSLitmus.test('Mon premier test', function() { var regExp = new RegExp("pouet$"); var ok = ("pouet".match(regExp) != null); });
JSLitmus.test('Mon deuxième test', function() { var ok = ("pouet".search("pouet") != -1); });
&lt;/script>
&lt;/body>&lt;/html></pre>
<p>Résultat :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/08/JSLitmus-238x300.png" alt="" title="JSLitmus" width="238" height="300" class="aligncenter size-medium wp-image-710" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE8 Developer Toolbar qui ne s&#8217;affiche plus [astuce]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/17/ie8-developer-toolbar-qui-ne-saffiche-plus-astuce/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/17/ie8-developer-toolbar-qui-ne-saffiche-plus-astuce/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 09:20:29 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=704</guid>
		<description><![CDATA[Avec Internet Explorer il est possible d&#8217;utiliser un débogueur qu&#8217;ils nomment &#171;&#160;IE Developer Toolbar&#160;&#187;. C&#8217;est très peu puissant, mais quand on doit travailler sur ce navigateur ça peut être utile&#8230; Pour l&#8217;activer il faut appuyer sur la touche F12, seulement, dans mon cas, même si elle apparaissait bien dans la liste des fenêtres ouvertes, quand [...]]]></description>
			<content:encoded><![CDATA[<p>Avec Internet Explorer il est possible d&#8217;utiliser un débogueur qu&#8217;ils nomment &laquo;&nbsp;IE Developer Toolbar&nbsp;&raquo;. C&#8217;est très peu puissant, mais quand on doit travailler sur ce navigateur ça peut être utile&#8230;</p>
<p>Pour l&#8217;activer il faut appuyer sur la touche F12, seulement, dans mon cas, même si elle apparaissait bien dans la liste des fenêtres ouvertes, quand je cliquais dessus rien ne se passait : elle ne s&#8217;ouvrait pas ! La solution consiste à faire un <strong>SHIFT + Clic Droit</strong> sur la fenêtre puis choisir <strong>&laquo;&nbsp;Maximize&nbsp;&raquo;</strong> (ou &laquo;&nbsp;Agrandir&nbsp;&raquo; en français), et là votre Developer Toolbar va s&#8217;ouvrir en grand. Les pré-réglages étant mauvais, la fenêtre s&#8217;ouvre dans un étrange mode.</p>
<p>Simple, mais il fallait y penser&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/17/ie8-developer-toolbar-qui-ne-saffiche-plus-astuce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#8217;opérateur typeof en Javascript [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/14/loperateur-typeof-en-javascript-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/14/loperateur-typeof-en-javascript-programmation/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 18:49:56 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=687</guid>
		<description><![CDATA[Si vous avez déjà essayé d&#8217;utiliser typeof en Javascript pour trouver le type d&#8217;un objet, vous avez dû vous rendre compte que cet opérateur n&#8217;aide pas beaucoup&#8230;. Le typeof par défaut de Javascript Déjà, comme typeof est un opérateur, vous n&#8217;avez pas besoin d&#8217;utiliser des parenthèses ou une quelconque autre décoration. Ainsi on aura : [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous avez déjà essayé d&#8217;utiliser <code>typeof</code> en Javascript pour trouver le type d&#8217;un objet, vous avez dû vous rendre compte que cet opérateur n&#8217;aide pas beaucoup&#8230;.</p>
<h1>Le typeof par défaut de Javascript</h1>
<p>Déjà, comme <code>typeof</code> est un opérateur, vous n&#8217;avez pas besoin d&#8217;utiliser des parenthèses ou une quelconque autre décoration.<br />
Ainsi on aura :</p>
<pre class="brush:javascript">typeof 2; // -> "number"
typeof "Kodono"; // -> "string"</pre>
<p>On peut remarquer qu&#8217;ici <code>typeof</code> nous a bien donné ce qu&#8217;on attendait&#8230; mais voilà ce qu&#8217;il se passe avec d&#8217;autres exemples :</p>
<pre class="brush:javascript">typeof []; // -> "object"
typeof new Boolean(true); // -> "object"
typeof /a/; // -> "object"
typeof new Date(); // -> "object"
typeof null; // -> "object"</pre>
<p>Comme on peut le voir, l&#8217;opérateur va fournir un &laquo;&nbsp;object&nbsp;&raquo; dans de nombreuses situations, ce qui n&#8217;aide pas du tout.</p>
<h1>Créer un meilleur typeof</h1>
<p>Pour faire court, on peut appliquer <code>Object.prototype.toString.call</code> à un objet qui va retourner une chaine au format &laquo;&nbsp;[object <i>Class</i>]&laquo;&nbsp;. Quelques exemples :</p>
<pre class="brush:javascript">Object.prototype.toString.call(new Number(2)); // -> [object Number]
Object.prototype.toString.call(new Date()); // -> [object Date]
Object.prototype.toString.call(/a/); // -> [object RegExp]</pre>
<p>Maintenant que l&#8217;on sait ça on peut créer notre propose fonction <code>typeOf</code> (en sachant que <code>Object.prototype</code> peut se raccourcir par <code>({})/</code>).<br />
On trouve sur Internet différentes façons de faire que je vais vous proposer.</p>
<h2 style="float:none; padding-top:10px">La plus lente</h2>
<p>Elle n&#8217;est pas très rapide (dûe à l&#8217;utilisation des expressions régulières), mais elle est très courte :</p>
<pre class="brush:javascript">function typeOf(obj){return({}).toString.call(obj).match(/\s(\w+)/)[1]}

console.log(typeOf(new Number(2))); // -> Number
console.log(typeOf(new Date())); // -> Date
console.log(typeOf("test")); // -> String
console.log(typeOf(null)); // -> Null
console.log(typeOf(/a/)); // -> RegExp
console.log(typeOf([])); // -> Array
console.log(typeOf(function(){})); // -> Function</pre>
<h2 style="float:none; padding-top:10px">jQuery.type</h2>
<p>Si vous utilisez déjà <em>jQuery</em>, vous pouvez utiliser la fonction <a href="http://api.jquery.com/jQuery.type/">jQuery.type</a> qui propose une fonction assez rapide et efficace.<br />
Ils utilisent la méthode suivante :</p>
<pre class="brush:javascript">
function typeOf(obj){
  var c2t={"[object Boolean]":"Boolean","[object Number]":"Number","[object String]":"String","[object Function]":"Function","[object Array]":"Array","[object Date]":"Date","[object RegExp]":"RegExp","[object Object]":"Object"};
  return obj==null?String(obj):c2t[({}).toString.call(obj)]||"object";
}

console.log(typeOf(new Number(2))); // -> Number
console.log(typeOf(new Date())); // -> Date
console.log(typeOf("test")); // -> String
console.log(typeOf(null)); // -> Null
console.log(typeOf(/a/)); // -> RegExp
console.log(typeOf([])); // -> Array
console.log(typeOf(function(){})); // -> Function</pre>
<h2 style="float:none; padding-top:10px">La plus courte et rapide</h2>
<p>Celle-ci ne prend que quelques caractères, et se veut <a href="http://jsperf.com/typeof-test-case">rapide en plus</a> !</p>
<pre class="brush:javascript">function typeOf(obj) {return({}).toString.call(obj).slice(8,-1)}

console.log(typeOf(new Number(2))); // -> Number
console.log(typeOf(new Date())); // -> Date
console.log(typeOf("test")); // -> String
console.log(typeOf(null)); // -> Null
console.log(typeOf(/a/)); // -> RegExp
console.log(typeOf([])); // -> Array
console.log(typeOf(function(){})); // -> Function</pre>
<h1>Conclusion</h2>
<p>Si vous utilisez déjà jQuery dans votre code, alors vous pouvez faire confiance à <code>jQuery.type</code>, sinon je vous conseille la dernière fonction proposée :</p>
<pre class="brush:javascript">function typeOf(obj) {return({}).toString.call(obj).slice(8,-1)}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/14/loperateur-typeof-en-javascript-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Function Scroll To [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/29/function-scroll-to-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/29/function-scroll-to-javascript/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 08:12:07 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=646</guid>
		<description><![CDATA[[niveau débutant] &#60;EDIT&#62;: A noter qu&#8217;il existe la fonction HTMLElement.scrollIntoView() qui fait la même chose et qui semble être compatible avec tous les navigateurs contrairement à ce qu&#8217;il se dit sur divers forums (j&#8217;ai testé sur les navigateurs récents en tout cas, mais j&#8217;ai aussi testé d&#8217;IE6 à IE9 et ça semble fonctionner).&#60;/EDIT&#62; Pour se [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p><strong>&lt;EDIT&gt;</strong>: A noter qu&#8217;il existe la fonction <a href="https://developer.mozilla.org/en/DOM/element.scrollIntoView">HTMLElement.scrollIntoView()</a> qui fait la même chose et qui semble être compatible avec <a href="http://help.dottoro.com/ljovandh.php">tous les navigateurs</a> contrairement à ce qu&#8217;il se dit sur divers forums (j&#8217;ai testé sur les navigateurs récents en tout cas, mais j&#8217;ai aussi testé d&#8217;IE6 à IE9 et ça semble fonctionner).<strong>&lt;/EDIT&gt;</strong></p>
<p>Pour se déplacement dans votre page jusqu&#8217;à un élément, pas besoin de jQuery.scrollTo() car vous pouvez le faire en quelques lignes de code.</p>
<p>Pour cela, on va calculer la position (coordonnées) de notre élément où on souhaite se rendre; on utilise les propriétés <code>offsetLeft</code> et <code>offsetTop</code>. Il faudra aussi tenir compte de l&#8217;<code>offsetParent</code> pour avoir une position correcte.</p>
<div class="code script">
<pre class="js">
var elem = document.getElementById('footer_bg');
var left = 0;
var top = 0;
do {
  left += elem.offsetLeft;
  top  += elem.offsetTop;
} while (elem = elem.offsetParent);
// on a maintenant les coordonnées X=left et Y=top de notre élément
// on peut donc se déplacement dans le document grâce à window.scrollTo(X,Y)
window.scrollTo(left,top);</pre>
</div>
<p>Vous pouvez <a href="#nogo" onclick="var elem=document.getElementById('footer_bg'),left=0,top=0;do{left+=elem.offsetLeft;top+=elem.offsetTop;}while(elem=elem.offsetParent);window.scrollTo(left,top);">tester ce code</a>, ce qui devrait vous amener jusqu&#8217;en bas de cette page.</p>
<p>Vous pouvez trouver une version de cette fonction qui fait ~100 caractères sur <a href="https://gist.github.com/1114275">https://gist.github.com/1114275</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/29/function-scroll-to-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mini code Encoder/Decoder en Base64 pour Javascript [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 10:05:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=638</guid>
		<description><![CDATA[[niveau débutant] Il existe plusieurs scripts sur le Net pour encoder/decoder en Base64 avec Javascript, mais c&#8217;est sur http://140byt.es/ que j&#8217;ai trouvé les plus courts, car ils font moins de 140 caractères ! Cependant, je les ai modifié légèrement pour qu&#8217;ils fonctionnent avec IE7 (et plus vieux) : function decode_b64(d,b,c,u,r,q,x){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(r=q=x='';c=d.charAt(x++);~c&#038;&#038;(u=q%4?u*64+c:c,q++%4)?r+=String.fromCharCode(255&#038;u>>(-2*q&#038;6)):0)c=b.indexOf(c);return r} function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c="=";for(d=f='';e&#038;=3,a.charAt(d++)&#124;&#124;(b='=',e);f+=b.charAt(63&#038;c>>++e*2))c=c]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>Il existe plusieurs scripts sur le Net pour encoder/decoder en Base64 avec Javascript, mais c&#8217;est sur <a href="http://140byt.es/">http://140byt.es/</a> que j&#8217;ai trouvé les plus courts, car ils font moins de 140 caractères !<br />
Cependant, je les ai modifié légèrement pour qu&#8217;ils fonctionnent avec IE7 (et plus vieux) :</p>
<div class="code script">
<pre class="js">
function decode_b64(d,b,c,u,r,q,x){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(r=q=x='';c=d.charAt(x++);~c&#038;&#038;(u=q%4?u*64+c:c,q++%4)?r+=String.fromCharCode(255&#038;u>>(-2*q&#038;6)):0)c=b.indexOf(c);return r}
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c="=";for(d=f='';e&#038;=3,a.charAt(d++)||(b='=',e);f+=b.charAt(63&#038;c>>++e*2))c=c<<8|a.charCodeAt(d-=!e);return f}</pre>
</div>
<p>Soit un <strong>total de 436 bytes</strong> pour les deux fonctions.</p>
<p>Pour l'utiliser :</p>
<div class="code script">
<pre class="js">alert(decode_b64(encode_b64("foobar")));</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evénement sur la fermeture d&#8217;une fenêtre (window close) [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 13:14:59 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=634</guid>
		<description><![CDATA[[niveau: intermédiaire] Il est possible d&#8217;effectuer une action sur la page avant que l&#8217;utilisateur ne quitte la page (en la fermant, la rechargeant, en navigant dans l&#8217;historique, ou en cliquant sur un lien). Pour cela utilisez la méthode ci-dessous (via MDN) : window.onbeforeunload = function (e) { e = e &#124;&#124; window.event; // For IE [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Il est possible d&#8217;effectuer une action sur la page avant que l&#8217;utilisateur ne quitte la page (en la fermant, la rechargeant, en navigant dans l&#8217;historique, ou en cliquant sur un lien). Pour cela utilisez la méthode ci-dessous (via <a href="https://developer.mozilla.org/En/DOM/Window.onbeforeunload">MDN</a>) :</p>
<div class="code script">
<pre class="js">window.onbeforeunload = function (e) {
  e = e || window.event;
  // For IE and Firefox prior to version 4
  if (e) e.returnValue = 'Any string';

  // For Safari
  return 'Any string';
};</pre>
</div>
<p>Si vous ne voulez pas ce comportement pour un clic sur un lien, alors il faudra gérer une variable qui sera activée lors d&#8217;un clic sur un tag A (exemple avec jQuery) :</p>
<div class="code script">
<pre class="js">
__okForClosing = false;
window.onbeforeunload = function (e) {
  if (!__okForClosing) {
    e = e || window.event;
    // For IE and Firefox prior to version 4
    if (e) e.returnValue = 'Any string';

    // For Safari
    return 'Any string';
  }
};
$('a').click(function() { __okForClosing=true; });</div>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple effet highlight sur un element avec jQuery [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 15:48:59 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=612</guid>
		<description><![CDATA[[niveau: intermédiaire] Si vous souhaitez créer un effet highlight sur un élément (en passant le background en jaune par exemple), voici comment il faut s&#8217;y prendre : jQuery.prototype.highlight = function() { jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() { jQuery(this).fadeTo('slow', 1.0, function() { jQuery(this).css("background-color","white"); }); }); }; jQuery('#mon-element').highlight(); A tester ici : Hello, I&#8217;m an example Highlight Total 31337 [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Si vous souhaitez créer un effet  highlight sur un élément (en passant le background en jaune par exemple), voici comment il faut s&#8217;y prendre :</p>
<div class="code script">
<pre class="js">
jQuery.prototype.highlight = function() {
  jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() {
    jQuery(this).fadeTo('slow', 1.0, function() {
      jQuery(this).css("background-color","white");
    });
  });
};

jQuery('#mon-element').highlight();
</pre>
</div>
<p><script>
jQuery.prototype.highlight = function() { 
  jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() {
    jQuery(this).fadeTo('slow', 1.0, function() {
      jQuery(this).css("background-color","white");
    });
  });
};
</script></p>
<div style="display:none">
A tester ici :</p>
<div>
<table border="1">
<tr>
<td colspan="2">Hello, I&#8217;m an example</td>
<td><a href="#nogo" onclick="jQuery(this).closest('tr').find('td').highlight()">Highlight</a></td>
</tr>
<tr>
<td>Total</td>
<td>31337</td>
<td><a href="#nogo" onclick="jQuery(this).closest('tr').find('td').highlight()">Highlight</a></td>
</tr>
</table>
<p>Ceci est pour le test. <a href="#nogo" onclick="jQuery(this).parent().highlight()">Highlight</a></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mettre en majuscule la première lettre d&#8217;un mot/phrase [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/06/24/mettre-en-majuscule-la-premiere-lettre-dun-motphrase-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/06/24/mettre-en-majuscule-la-premiere-lettre-dun-motphrase-javascript/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 14:46:12 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=606</guid>
		<description><![CDATA[[niveau: débutant] Il suffit d&#8217;utiliser ce petit code pour transformer &#171;&#160;paris&#160;&#187; en &#171;&#160;Paris&#160;&#187; grâce à Javascript : "paris".replace(/^\w/, function($0) { return $0.toUpperCase(); })]]></description>
			<content:encoded><![CDATA[<p>[niveau: débutant]</p>
<p>Il suffit d&#8217;utiliser ce petit code pour transformer &laquo;&nbsp;paris&nbsp;&raquo; en &laquo;&nbsp;Paris&nbsp;&raquo; grâce à Javascript :</p>
<div class="code script">
<pre class="js">"paris".replace(/^\w/, function($0) { return $0.toUpperCase(); })</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/06/24/mettre-en-majuscule-la-premiere-lettre-dun-motphrase-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Limite de caractères dans un mailto/href sous IE [internet explorer limit]</title>
		<link>http://blog.kodono.info/wordpress/2011/06/15/limite-de-caracteres-dans-un-mailtohref-sous-ie-internet-explorer-limit/</link>
		<comments>http://blog.kodono.info/wordpress/2011/06/15/limite-de-caracteres-dans-un-mailtohref-sous-ie-internet-explorer-limit/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 08:59:33 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=598</guid>
		<description><![CDATA[[niveau débutant] Je me suis retrouvé dans la situation où dans un mailto je devais inscrire plusieurs informations (subject, cc, body) afin de créer une sorte de template qui s&#8217;ouvrirait avec Outlook. Je l&#8217;avais incorporé dans un href d&#8217;un lien classique. Si le lien fonctionnait parfaitement sous Firefox, il apparait que sous Internet Explorer j&#8217;avais [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>Je me suis retrouvé dans la situation où dans un mailto je devais inscrire plusieurs informations (subject, cc, body) afin de créer une sorte de template qui s&#8217;ouvrirait avec Outlook. Je l&#8217;avais incorporé dans un <em>href</em> d&#8217;un lien classique. Si le lien fonctionnait parfaitement sous Firefox, il apparait que sous Internet Explorer j&#8217;avais droit à une page blanche (<em>about:blank</em>)&#8230; <a href="http://havingfunyet.wordpress.com/2010/09/30/long-mailto-link-does-not-work-in-ie-8/">Après quelques recherches</a>, j&#8217;ai découvert qu&#8217;IE en &laquo;&nbsp;Protected Mode: Off&nbsp;&raquo; se limite à 508 caractères pour le mailto&#8230;. allez savoir d&#8217;où vient cette limite ?!</p>
<p>Pour outrepasser ce problème, vous avez deux solutions :<br />
1) Demander à vos utilisateurs de passer en &laquo;&nbsp;Protected Mode: On&nbsp;&raquo; (non envisageable)<br />
<strong>2) Utiliser Javascript en associant un <em>window.location.href</em> à votre ligne <em>mailto:email?subject=xxx&#038;cc=xxx&#038;body=xxxx</em>, qui fonctionnera pour tout le monde !</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/06/15/limite-de-caracteres-dans-un-mailtohref-sous-ie-internet-explorer-limit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajout/Suppression/Modification d&#8217;un SELECT dans IE6 qui ne se rafraîchit pas [IE6 Exception]</title>
		<link>http://blog.kodono.info/wordpress/2011/03/10/ajoutsuppressionmodification_select_ie6/</link>
		<comments>http://blog.kodono.info/wordpress/2011/03/10/ajoutsuppressionmodification_select_ie6/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 17:10:30 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[rendu]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=548</guid>
		<description><![CDATA[[niveau: débutant] J&#8217;ai remarqué la chose suivante : j&#8217;utilise jQuery pour ajouter/supprimer des éléments dans une liste déroulante SELECT, cependant sous IE6 le rendu de la liste n&#8217;est pas mis à jour, et de fait les modifications apparaissent de façon partielle. Pour résoudre ce problème j&#8217;ai découvert qu&#8217;il faut ajouter un élément FRAME sur la [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: débutant]</p>
<p>J&#8217;ai remarqué la chose suivante : j&#8217;utilise jQuery pour ajouter/supprimer des éléments dans une liste déroulante SELECT, cependant sous IE6 le rendu de la liste n&#8217;est pas mis à jour, et de fait les modifications apparaissent de façon partielle. Pour résoudre ce problème j&#8217;ai découvert qu&#8217;il faut ajouter un élément FRAME sur la page pour que le rendu soit mis à jour ! Si on utilise jQuery, cela ne fonctionne pas, il faut donc utiliser la bonne vieille méthode :</p>
<div class="code">
<pre class="JavaScript script">if (jQuery.browser.msie &amp;&amp; parseInt(jQuery.browser.version, 10) == 6) {
      var f=document.createElement('frame');
      f.display="none";
      document.body.appendChild(f);
 }</pre>
</div>
<p>Ainsi après ma modification, j&#8217;ajoute une FRAME invisible qui va forcer IE6 à rafraîchir le rendu de la page et ainsi à mettre à jour la dropdown box.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/03/10/ajoutsuppressionmodification_select_ie6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Equivalent de ModalBox de okonet.ru en jQuery [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/02/16/modalbox-jquery/</link>
		<comments>http://blog.kodono.info/wordpress/2011/02/16/modalbox-jquery/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 11:25:16 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[modal]]></category>
		<category><![CDATA[popup]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=518</guid>
		<description><![CDATA[J&#8217;ai longuement cherché un équivalent en jQuery de ModalBox qui est, lui, basé sur PrototypeJS. Je voulais avoir cet effet MacOS X qu&#8217;il donne à ses fenêtres popup. Après d&#8217;infructueuses recherches je suis finalement tombé sur SimpleModal qui propose exactement le même effet de popup basé sur un style MacOS X, et le tout pour [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai longuement cherché un équivalent en jQuery de <a href="http://okonet.ru/projects/modalbox/">ModalBox</a> qui est, lui, basé sur PrototypeJS. Je voulais avoir cet effet MacOS X qu&#8217;il donne à ses fenêtres popup.</p>
<p>Après d&#8217;infructueuses recherches je suis finalement tombé sur <a href="http://www.ericmmartin.com/projects/simplemodal/">SimpleModal</a> qui propose exactement le même <a href="http://www.ericmmartin.com/projects/simplemodal-demos/#osx-dialog">effet de popup basé sur un style MacOS X</a>, et le tout pour jQuery !</p>
<p>J&#8217;espère que ce post servira à ceux qui cherchent comme moi un équivalent jQuery à ModalBox <img src='http://blog.kodono.info/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/02/16/modalbox-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery.ready() avant le chargement des images [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2010/11/19/jquery-ready-avant-le-chargement-des-images-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2010/11/19/jquery-ready-avant-le-chargement-des-images-javascript/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 17:01:41 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Niveau débutant]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=511</guid>
		<description><![CDATA[[niveau: intermédiaire] Pour ma société je dois travailler sur IE7. Il se trouve que j&#8217;utilise jQuery (1.4.4) avec Microsoft Sharepoint pour customizer certaines pages. J&#8217;ai remarqué que sous mon IE7 la fonction jQuery(document).ready() n&#8217;était appelée que lorsque les images étaient complètement chargées; cependant ce comportement ralentissait grandement les modifications que je cherchais à faire. Après [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Pour ma société je dois travailler sur IE7. Il se trouve que j&#8217;utilise jQuery (1.4.4) avec Microsoft Sharepoint pour customizer certaines pages. J&#8217;ai remarqué que sous mon IE7 la fonction <code>jQuery(document).ready()</code> n&#8217;était appelée que lorsque les images étaient complètement chargées; cependant ce comportement ralentissait grandement les modifications que je cherchais à faire.</p>
<p>Après quelques recherches j&#8217;ai découvert une solution qui fonctionne pour moi sur le <a href="https://nexxar.wordpress.com/2010/10/07/speeding-up-jquery-ready-on-ie/">blog de Nexxar</a> : il suffit d&#8217;ajouter <code>try { jQuery.ready(); } catch {}</code> à la fin de la page HTML pour que notre fonction <em>ready</em> soit activée avant que toutes les images ne soient pleinement téléchargées !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/11/19/jquery-ready-avant-le-chargement-des-images-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser la première occurrence dans une regexp [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/</link>
		<comments>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 10:04:51 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=458</guid>
		<description><![CDATA[[niveau: intermédiaire] Lorsque vous utilisez une expression régulière, cela va vous retourner un maximum de caractères, ainsi si nous prenons la chaine &#171;&#160;foo:bar:gniii&#160;&#187; avec la regexp /^(.*):(.*)$/, on va avoir &#171;&#160;foo:bar&#160;&#187; d&#8217;une part et &#171;&#160;gniii&#160;&#187; d&#8217;autre part. Alors comment faire pour obtenir la première occurrence de &#171;&#160;:&#160;&#187; dans notre chaine ? Il suffit d&#8217;ajouter le [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Lorsque vous utilisez une expression régulière, cela va vous retourner un maximum de caractères, ainsi si nous prenons la chaine &laquo;&nbsp;foo:bar:gniii&nbsp;&raquo; avec la regexp <i>/^(.*):(.*)$/</i>, on va avoir &laquo;&nbsp;foo:bar&nbsp;&raquo; d&#8217;une part et &laquo;&nbsp;gniii&nbsp;&raquo; d&#8217;autre part.<br />
Alors comment faire pour obtenir la première occurrence de &laquo;&nbsp;:&nbsp;&raquo; dans notre chaine ? Il suffit d&#8217;ajouter le caractère clé &laquo;&nbsp;?&nbsp;&raquo;.<br />
Ainsi dans notre exemple il faut écrire : <i>/^(.*<b>?</b>):(.*)$/</i>, qui retournera &laquo;&nbsp;foo&nbsp;&raquo; et &laquo;&nbsp;bar:gniii&nbsp;&raquo;.</p>
<p>A noter que cela est valable pour la fonction &laquo;&nbsp;match&nbsp;&raquo; de Javascript, mais aussi pour les autres langages comme PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connaître la version d&#8217;Internet Explorer [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2009/11/05/connaitre-la-version-dinternet-explorer-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2009/11/05/connaitre-la-version-dinternet-explorer-javascript/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 06:33:33 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=378</guid>
		<description><![CDATA[(niveau intermédiaire) Il est possible de connaître la version d&#8217;Internet Explorer en Javascript en utilisant le User Agent. Cependant, IE8, lorsqu&#8217;il est en mode compatibilité, va retourner IE7 quand on l&#8217;interroge. Cela peut poser problème. Il existe une solution qui permet de détecter IE8 même dans ce mode spécial, et sans utiliser les commentaires conditionnels [...]]]></description>
			<content:encoded><![CDATA[<p>(niveau intermédiaire)</p>
<p>Il est possible de connaître la version d&#8217;Internet Explorer en Javascript en utilisant le User Agent. Cependant, IE8, lorsqu&#8217;il est en mode compatibilité, va retourner IE7 quand on l&#8217;interroge. Cela peut poser problème. Il existe une solution qui permet de détecter IE8 même dans ce mode spécial, et sans utiliser les <a href="http://www.alsacreations.com/astuce/lire/48-commentaires-conditionnels.html">commentaires conditionnels</a> :</p>
<div class="code script">
<pre class="js">
// retourne un entier (5, 6, 7 ou 8), ou false si ce n'est pas IE
function getIEVersion() {
  if (!!(window.attachEvent &#038;&#038; navigator.userAgent.indexOf('Opera') === -1)) {
    var ver = navigator.userAgent.match(/MSIE ([0-9.]+);/);
    if (ver != null &#038;&#038; ver[1] != undefined) {
      ver = parseInt(ver[1]);
      if (ver == 7) {
        if (typeof (window.external.AddToFavoritesBar) != "undefined" ||
            typeof (window.external.AddService) != "undefined" ||
            typeof (window.external.AddService) != "undefined") return 8;
      }
      return ver;
    }
  }
  return false;
}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/11/05/connaitre-la-version-dinternet-explorer-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simuler un click sur un bouton ou un lien [Programmation]</title>
		<link>http://blog.kodono.info/wordpress/2009/09/04/simuler-un-click-sur-un-bouton-ou-un-lien-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2009/09/04/simuler-un-click-sur-un-bouton-ou-un-lien-programmation/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 17:51:05 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=312</guid>
		<description><![CDATA[[niveau débutant] En Javascript on peut facilement simuler un clic sur un élément d&#8217;une page HTML. Pour cela on utilisera la fonction suivante : function fireEventClick(elem){ if(document.createEvent){ var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', /* Event type */ true, /* Can bubble */ true, /* Cancelable */ document.defaultView, /* View */ 1, /* Mouse clicks */ 0, [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>En Javascript on peut facilement simuler un clic sur un élément d&#8217;une page HTML. Pour cela on utilisera la fonction suivante :</p>
<div class="code script">
<pre class="js">
function fireEventClick(elem){
    if(document.createEvent){
      var e = document.createEvent('MouseEvents');
      e.initMouseEvent('click', /* Event type */
      true, /* Can bubble */
      true, /* Cancelable */
      document.defaultView, /* View */
      1, /* Mouse clicks */
      0, /* Screen x */
      0, /* Screen y */
      0, /* Client x */
      0, /* Client y */
      false, /* Ctrl */
      false, /* Alt */
      false, /* Shift */
      false, /* Meta */
      0, /* Button */
      null); /* Related target */
      elem.dispatchEvent(e);
    } else { // pour IE
      elem.click();
    }
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/09/04/simuler-un-click-sur-un-bouton-ou-un-lien-programmation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Stopper la propagation d&#8217;une action [Programmation]</title>
		<link>http://blog.kodono.info/wordpress/2009/07/28/stopper-la-propagation-dune-action/</link>
		<comments>http://blog.kodono.info/wordpress/2009/07/28/stopper-la-propagation-dune-action/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 16:37:34 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=265</guid>
		<description><![CDATA[[niveau: expert] Lorsque vous avez un bouton &#60;button&#62; quelque part dans un formulaire HTML, alors que vous cliquez dessus avec Firefox, ce dernier va vouloir envoyer le formulaire, alors même que le bouton n&#8217;a pas cet objectif. En effet, supposons que vous vouliez que l&#8217;action onclick actionne une quelconque fonction javascript de votre cru. Pour [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: expert]</p>
<p>Lorsque vous avez un bouton <em>&lt;button&gt;</em> quelque part dans un formulaire HTML, alors que vous cliquez dessus avec Firefox, ce dernier va vouloir envoyer le formulaire, alors même que le bouton n&#8217;a pas cet objectif. En effet, supposons que vous vouliez que l&#8217;action <em>onclick</em> actionne une quelconque fonction javascript de votre cru.</p>
<p>Pour éviter ce comportement avec Firefox, on peut essayer d&#8217;insérer un <em>return false</em> qui aura plus ou moins de succès:</p>
<div class="code">
<pre class="xml html">&lt;button id="myButton" onclick="myFunction(); return false;"&gt;do it!&lt;/button&gt;</pre>
</div>
<p>Le <em>return false</em> donnera un résultat très aléatoire, et c&#8217;est pourquoi je conseille plutôt d&#8217;utiliser une fonction qui va stopper la propagation de l&#8217;évènement :</p>
<div class="code">
<pre class="xml html">&lt;button id="myButton" onclick="stopAction(event); myFunction();"&gt;do it!&lt;/button&gt;</pre>
</div>
<div class="code script">
<pre class="js">function stopAction(e) {
  if (!e) e = window.event;
  if (e.cancelBubble != undefined)
    e.cancelBubble = true;
  if (typeof e.stopPropagation != "undefined") {
    e.stopPropagation();
    e.preventDefault();
  }
  return false;
}</pre>
</div>
<p>Avec ça, lorsque vous cliquez sur le bouton, la page ne devrait pas être rechargée.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/07/28/stopper-la-propagation-dune-action/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Débogage Javascript et PHP dans Firebug [Programmation]</title>
		<link>http://blog.kodono.info/wordpress/2009/04/16/debogage-javascript-et-php-dans-firebug-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2009/04/16/debogage-javascript-et-php-dans-firebug-programmation/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 06:28:47 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Debug]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=55</guid>
		<description><![CDATA[[niveau: expert] Sur l&#8217;excellent blog Ajaxian je viens de découvrir qu&#8217;il existe un plugin au module Firebug (dont je parlais justement hier) qui permet de déboguer du PHP en console ! Cette petite merveille se nomme FirePHP et m&#8217;a l&#8217;air prometteur au vue des images: Je ne code actuellement pas en PHP, mais je dois [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: expert]</p>
<p>Sur l&#8217;excellent blog <a href="http://ajaxian.com/archives/firephp-tying-together-firebug-and-php">Ajaxian</a> je viens de découvrir qu&#8217;il existe un plugin au module Firebug (<a href="http://blog.kodono.info/wordpress/2009/04/15/les-extensions-a-avoir-firefox/">dont je parlais justement hier</a>) qui permet de déboguer du PHP en console ! Cette petite merveille se nomme <a href="http://www.christophdorn.com/Blog/2009/04/03/how-to-integrate-firephp-for-ajax-development/">FirePHP</a> et m&#8217;a l&#8217;air prometteur au vue des images:<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2009/04/20090416_firephp.png" alt="firephp" title="firephp" width="422" height="457" class="aligncenter size-full wp-image-56" /></p>
<p>Je ne code actuellement pas en PHP, mais je dois bientôt retravailler sur un projet avec ce langage, je pourrai alors vous en dire un peu plus !</p>
<p>A noter qu&#8217;il existe d&#8217;autres moyens de débugguer, comme <a href="http://particletree.com/features/php-quick-profiler/">PHP Quick Profiler (en)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/04/16/debogage-javascript-et-php-dans-firebug-programmation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

