<?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>Sofá Naranja &#187; JavaScript</title>
	<atom:link href="http://sofanaranja.com/category/codigo/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://sofanaranja.com</link>
	<description>el blog de Ale Muñoz, donde hay menos naranja de lo que uno podría esperar con un nombre como este</description>
	<lastBuildDate>Tue, 31 May 2011 10:30:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-alpha-19861</generator>
		<item>
		<title>TextMate JavaScript Bundle</title>
		<link>http://sofanaranja.com/2007/02/01/textmate-javascript-bundle/</link>
		<comments>http://sofanaranja.com/2007/02/01/textmate-javascript-bundle/#comments</comments>
		<pubDate>Thu, 01 Feb 2007 20:55:20 +0000</pubDate>
		<dc:creator>Ale Muñoz</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[TextMate]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://sofanaranja.com/2007/02/01/textmate-javascript-bundle/</guid>
		<description><![CDATA[Si programas JavaScript de una manera más o menos asidua, y usas TextMate, tienes que probar el bundle &#8220;JavaScript Tools&#8221; Javascript Tools pone a tu disposición dos herramientas que (dependiendo de tu nivel programando Javascript) pueden ser una bendición o &#8230; <a href="http://sofanaranja.com/2007/02/01/textmate-javascript-bundle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Si programas JavaScript de una manera más o menos asidua, y usas <a href="http://macromates.com/">TextMate</a>, <strong>tienes</strong> que probar el bundle &#8220;JavaScript Tools&#8221;</p>

<p><img src="http://sofanaranja.com/wp-content/uploads/2007/02/textmate-javascript-tools.png" alt="Textmate Javascript Tools" /></p>

<p>Javascript Tools pone a tu disposición dos herramientas que (dependiendo de tu nivel programando Javascript) pueden ser una bendición o una pesadilla:</p>

<p><strong><a href="http://www.javascriptlint.com/">JSLint</a></strong>, un verificador de sintaxis para Javascript. JSLint detecta errores tan comunes como:</p>

<ul>
<li>Los ; que siempre se te olvidan al final de una línea.</li>
<li>Código que nunca se ejecuta.</li>
<li><code>case</code> sin su <code>switch</code> correspondiente.</li>
<li>Comentarios dentro de comentarios.</li>
<li>Uso de = en comparaciones (en lugar de ==)</li>
<li>Etc, etc&#8230;</li>
</ul>

<p><strong><a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a></strong>, un compresor de ficheros .js que te ahorrará un pico en tu factura de hosting.</p>

<p>La gracia del asunto está en que las dos herramientas se integran perfectamente con TextMate, y si tienes un error en tu código, JSLint te dirá dónde está (con un bonito enlace que te lleva a la línea y columna donde está el error).</p>

<p><img src="http://sofanaranja.com/wp-content/uploads/2007/02/jslint-en-textmate.png" alt="Jslint en Textmate" /></p>

<p>De regalo, el bundle incluye un comando que verifica la sintaxis cada vez que guardas el fichero, mostrándote un tooltip si hay algún problema.</p>

<p><img src="http://sofanaranja.com/wp-content/uploads/2007/02/jslint-en-textmate-2.png" alt="Jslint en Textmate 2" /></p>

<p>Así que ya tardan en <a href="http://www.andrewdupont.net/2006/10/01/javascript-tools-textmate-bundle/">descargarse el bundle</a> y darle las gracias al <a href="http://www.andrewdupont.net/">autor</a> :)</p>

<p><div class="techtag"><span>Technorati tags:</span> <a href="http://technorati.com/tag/textmate" rel="tag">textmate</a>, <a href="http://technorati.com/tag/javascript" rel="tag">javascript</a>, <a href="http://technorati.com/tag/jslint" rel="tag">jslint</a></div><h3 class='related_post_title'>Contenido relacionado:</h3><ul class='related_post'><li>(aquí irían posts relacionados, pero creo que no tengo nada parecido a este&#8230;)</li></ul></p>
]]></content:encoded>
			<wfw:commentRss>http://sofanaranja.com/2007/02/01/textmate-javascript-bundle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Javascript no intrusivo con jQuery</title>
		<link>http://sofanaranja.com/2006/09/27/javascript-no-intrusivo-con-jquery/</link>
		<comments>http://sofanaranja.com/2006/09/27/javascript-no-intrusivo-con-jquery/#comments</comments>
		<pubDate>Tue, 26 Sep 2006 23:26:21 +0000</pubDate>
		<dc:creator>Ale Muñoz</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://sofanaranja.com/?p=101</guid>
		<description><![CDATA[Tenía a jQuery en mi lista de “cosas que tengo que probar un día de estos” desde hace tiempo. Para un proyecto que tenemos, he empezado a trastear con esta librería, y los resultados (inmediatos) me han dejado muy buen &#8230; <a href="http://sofanaranja.com/2006/09/27/javascript-no-intrusivo-con-jquery/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tenía a <a href="http://jquery.com">jQuery</a> en mi lista de “cosas que tengo que probar un día de estos” desde hace tiempo.</p>

<p>Para un proyecto que <a href="http://the-cocktail.com">tenemos</a>, he empezado a trastear con esta librería, y los resultados (inmediatos) me han dejado muy buen sabor de boca.</p>

<p>Vamos con unos ejemplitos de lo que sabe hacer jQuery:</p>

<h3>Lista de resultados “con pijama”&#8230;</h3>

<p>Este es un quebradero de cabeza clásico, para el que se han planteado muchas soluciones. La que he encontrado, usando los <a href="http://jquery.com/docs/">selectores CSS + DOM de jQuery</a> es tan simple que casi da miedo:</p>

<pre><code>$("#lista ul li:even").addClass("even");
</code></pre>

<p>Que viene a decir: “dentro del div #lista, me seleccione todos los li impares dentro de un ul, y les añada la clase &#8216;even&#8217;”</p>

<p>El HTML que estoy usando es bastante limpito:</p>

<pre><code>&lt;div id="lista"&gt;
    &lt;ul&gt;
        &lt;li&gt;Elemento 1&lt;/li&gt;
        &lt;li&gt;Elemento 2&lt;/li&gt;
        &lt;li&gt;Elemento 3&lt;/li&gt;
        &lt;li&gt;Elemento 4&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
</code></pre>

<p>Pero dejarlo así sería desaprovechar toda la potencia de jQuery (y manchar un poco el HTML, en realidad). Así que, después de mirar un rato (10 minutos) la documentación, me encuentro con que puedo dejar mi HTML tal que así:</p>

<pre><code>&lt;ul&gt;
    &lt;li&gt;Elemento 1&lt;/li&gt;
    &lt;li&gt;Elemento 2&lt;/li&gt;
    &lt;li&gt;Elemento 3&lt;/li&gt;
    &lt;li&gt;Elemento 4&lt;/li&gt;
&lt;/ul&gt;
</code></pre>

<p>¿Y entonces cómo sé a qué lista tengo que ponerle el pijama? Aquí es donde entra en juego toda la potencia de los pseudo-selectores de jQuery (el li:even) es uno de ellos, pero hay <a href="http://jquery.com/docs/Base/Expression/Custom/">muchos más</a></p>

<pre><code>$(body ul:first li:even).addClass("even");
</code></pre>

<p>Que es como decir: “le añada la clase &#8216;even&#8217;a los li impares de la primera ul que aparezca en el body” (en este caso he hecho trampa, porque sé que mi ul será la primera que aparezca en el documento)</p>

<h3>Añadir un icono a los enlaces externos&#8230;</h3>

<p>Este es un asunto que ya visitamos en un artículo anterior (<a href="/2005/12/31/destacando-enlaces-externos-en-wordpress/">Destacando enlaces externos en WordPress</a>)</p>

<p>Usando jQuery hay varias maneras de hacer esto, pero voy a elegir una particularmente curiosa: usar una expresión XPath.</p>

<pre><code>$("//a[not(contains(@href,'sofanaranja.com'))]").addClass("externo");
</code></pre>

<p>Esto sería el equivalente a “busca todos los elementos &#8216;a&#8217;cuyo atributo src no contenga la cadena &#8216;sofanaranja.com&#8217;, y les añades la clase &#8216;externo&#8217;”.</p>

<p>(Lo de escribir expresiones XPath se sale un poco de la temática del post&#8230; : )</p>

<h3>Javascript no intrusivo</h3>

<p>Como vemos con este par de ejemplitos, los selectores de jQuery nos permiten hacer toda clase de perrerías (tanto en presentación como en comportamiento) sobre el DOM de nuestro documento sin (practicamente) guarrear el HTML.</p>

<p>Usando jQuery no hay excusa para ese crimen que es</p>

<pre><code>... href="javascript:abreVentana()" ...
</code></pre>

<p>Me temo que seguiré comentando las bondades de jQuery una temporadita :D</p>

<h3>Por qué me gusta jQuery, personalmente</h3>

<ul>
<li>Porque ocupa poco (15Kb comprimida)</li>
<li>Porque no le sobra nada, y lo poco que le falta es, casi siempre, innecesario :)</li>
<li>Porque la <a href="http://jquery.com/docs/">documentación</a> está actualizada, bien escrita, y tiene ejemplos claros de qué se puede hacer y cómo.</li>
<li>Porque seleccionar elementos del DOM usando selectores CSS y <a href="http://www.w3.org/TR/xpath">XPath</a> es droga dura: una vez que lo pruebas no puedes vivir sin ello.</li>
</ul>

<h4>Recursos interesantes&#8230;</h4>

<p>Para trabajar con XPath, hace tiempo me encontré con <a href="http://www.ditchnet.org/aquapath/">AquaPath</a>, una utilidad para Mac que vale su peso en oro&#8230;<h3 class='related_post_title'>Contenido relacionado:</h3><ul class='related_post'><li>(aquí irían posts relacionados, pero creo que no tengo nada parecido a este&#8230;)</li></ul></p>
]]></content:encoded>
			<wfw:commentRss>http://sofanaranja.com/2006/09/27/javascript-no-intrusivo-con-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Efecto :hover sobre cualquier cosa, v2.0</title>
		<link>http://sofanaranja.com/2006/02/17/efecto-hover-sobre-cualquier-cosa-v20/</link>
		<comments>http://sofanaranja.com/2006/02/17/efecto-hover-sobre-cualquier-cosa-v20/#comments</comments>
		<pubDate>Fri, 17 Feb 2006 09:02:26 +0000</pubDate>
		<dc:creator>Ale Muñoz</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.sofanaranja.com/?p=50</guid>
		<description><![CDATA[En respuesta a un <a href="/2006/01/05/efecto-hover-en-cualquier-cosa/#comment-59">comentario</a> en el post sobre <a href="/2006/01/05/efecto-hover-en-cualquier-cosa/">"Efecto :hover en cualquier cosa"</a>, me puse a jugar con prototype.js para ver si se podía hacer lo mismo de una forma menos farragosa. <a href="http://sofanaranja.com/2006/02/17/efecto-hover-sobre-cualquier-cosa-v20/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En respuesta a un <a href="/2006/01/05/efecto-hover-en-cualquier-cosa/#comment-59">comentario</a> en el post sobre <a href="/2006/01/05/efecto-hover-en-cualquier-cosa/">&#8220;Efecto :hover en cualquier cosa&#8221;</a>, me puse a jugar con [prototype.js][1] para ver si se podía hacer lo mismo de una forma menos farragosa.</p>

<p>El resultado:</p>

<pre><code>function setHover(className,hoverClassName) {
    var hoverDivs = document.getElementsByClassName(className);
    hoverDivs = $A(hoverDivs);
    hoverDivs.each(
        function(div){
            div.onmouseover = function(){
                Element.addClassName(this,hoverClassName);
            }
            div.onmouseout = function(){
                Element.removeClassName(this,hoverClassName);
            }
        }
    );
    }
function init (){
    setHover('hover','hoverclass');
}
Event.observe(window, 'load', init, false);
</code></pre>

<p>La idea es que a todos los elementos que queramos hacerles un hover les asignamos la clase &#8220;hover&#8221;, y definimos en otra clase &#8220;hoverclass&#8221; los atributos del estado hover.</p>

<p>A pesar de que en el código se usa una variable llamada &#8216;div&#8217;, funciona con <em>cualquier</em> elemento de la página&#8230;</p>

<p>Lo que hacemos, igual que con el <a href="/2006/01/05/efecto-hover-en-cualquier-cosa/">método anterior</a>, es buscar elementos que contengan la clase &#8216;hover&#8217;, y les asignamos la clase &#8216;hoverclass&#8217;en el evento &#8216;onmouseover&#8217;.</p>

<p>Más cosillas&#8230; <div class="syhi_block"><code>Event.observe()</code></div> es la forma inteligente de asignar una función a un evento sin &#8220;manchar&#8221; el HTML de la página. En este caso le asigno la función &#8216;init()&#8217;, que se encarga de llamar a &#8216;setHover()&#8217;con los dos parámetros que necesita (el class que he usado para definir qué elementos tienen hover, y el class que quiero usar cuando se hace rollover).</p>

<p>Gracias a tutiplén a <a href="http://mildiez.net/">demimismo</a> por sugerir el uso de prototype.js. Creo que estoy enamorado de otra librería :D</p>

<p>[1]: http://prototype.conio.net/<h3 class='related_post_title'>Contenido relacionado:</h3><ul class='related_post'><li>(aquí irían posts relacionados, pero creo que no tengo nada parecido a este&#8230;)</li></ul></p>
]]></content:encoded>
			<wfw:commentRss>http://sofanaranja.com/2006/02/17/efecto-hover-sobre-cualquier-cosa-v20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Efecto :hover en cualquier cosa</title>
		<link>http://sofanaranja.com/2006/01/05/efecto-hover-en-cualquier-cosa/</link>
		<comments>http://sofanaranja.com/2006/01/05/efecto-hover-en-cualquier-cosa/#comments</comments>
		<pubDate>Thu, 05 Jan 2006 19:41:40 +0000</pubDate>
		<dc:creator>Ale Muñoz</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.sofanaranja.com/?p=45</guid>
		<description><![CDATA[Esta semana me preguntaron lo siguiente: ¿Cómo hacer un :hover en un DIV con Internet Explorer? No sé si se suponía que debía saberlo, pero la verdad es que me pilló un poco por sorpresa&#8230; ¿Con #iddeldiv:hover, no? (Comentario que &#8230; <a href="http://sofanaranja.com/2006/01/05/efecto-hover-en-cualquier-cosa/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Esta semana me preguntaron lo siguiente:</p>

<blockquote>
  <p>¿Cómo hacer un :hover en un DIV con Internet Explorer?</p>
</blockquote>

<p>No sé si se suponía que debía saberlo, pero la verdad es que me pilló un poco por sorpresa&#8230;</p>

<blockquote>
  <p>¿Con #id<em>del</em>div:hover, no?</p>
</blockquote>

<p>(Comentario que demuestra mi total ignorancia con respecto a las capacidades de Explorer)</p>

<blockquote>
  <p>Me temo que Explorer sólo soporta :hover en los &#8216;a&#8217;&#8230;</p>
</blockquote>

<p>Como uno es de naturaleza curiosa, me puse a trastear con el dilema, llegando a la siguiente solución (que no deja de ser una chapuza, pero que no sólo funciona en Explorer sino en Camino, Firefox y Safari):</p>

<pre><code>&lt;script&gt;
    function replaceHover(){
        var hoverDivs = document.getElementsByTagName("div");
        for(var i=0; i&lt;hoverDivs.length; i++){
            if(hoverDivs[i].className.indexOf('hover') != -1){
                //  ...guardamos las clases del DIV...
                var classes = hoverDivs[i].className;
                //  ...en onmouseover le añadimos una clase extra, 'hoverclass'...
                hoverDivs[i].onmouseover = function(){
                    this.className += ' hoverclass';
                }
                //  ...y se la quitamos en onmouseout
                hoverDivs[i].onmouseout = function(){
                    this.className = classes;
                }
            }
        }
    }
&lt;/script&gt;
</code></pre>

<p>Que quiere decir, en román paladino:</p>

<ul>
<li>Obtener todos los DIVs del documento</li>
<li>Mirar si el DIV tiene asignada una clase CSS &#8216;hover&#8217;</li>
<li>Si es así, le asignamos un evento &#8216;onmouseover&#8217;que le añade la clase &#8216;hoverclass&#8217;(que tendrá alguna pijadilla del estilo de background-color: rosachicle, o algo por el estilo)</li>
<li>Y ya puestos, se la quitamos cuando salga el ratón del DIV</li>
</ul>

<p>Para disparar el cambio se llama a la función &#8216;replaceHover&#8217;desde el &#8216;onload&#8217;de body:</p>

<pre><code>&lt;body onload="replaceHover()"&gt;
</code></pre>

<p>Obviamente, el código se puede usar con otros tags&#8230; sólo habría que cambiar el</p>

<pre><code>getElementsByTagName("div")
</code></pre>

<p>por</p>

<pre><code>getElementsByTagName("nombre_del_tag_que_quieras")
</code></pre>

<p>Pos eso&#8230; agradecimientos especiales a [Furilo][1] por darme algo en qué pensar&#8230; :D</p>

<p><strong>Update:</strong> <a href="/2006/02/17/efecto-hover-sobre-cualquier-cosa-v20/">un método mucho más elegante usando prototype.js</a></p>

<p>[1]: http://www.furilo.com<h3 class='related_post_title'>Contenido relacionado:</h3><ul class='related_post'><li>(aquí irían posts relacionados, pero creo que no tengo nada parecido a este&#8230;)</li></ul></p>
]]></content:encoded>
			<wfw:commentRss>http://sofanaranja.com/2006/01/05/efecto-hover-en-cualquier-cosa/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Destacando enlaces externos en WordPress</title>
		<link>http://sofanaranja.com/2005/12/31/destacando-enlaces-externos-en-wordpress/</link>
		<comments>http://sofanaranja.com/2005/12/31/destacando-enlaces-externos-en-wordpress/#comments</comments>
		<pubDate>Sat, 31 Dec 2005 20:15:49 +0000</pubDate>
		<dc:creator>Ale Muñoz</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.sofanaranja.com/?p=42</guid>
		<description><![CDATA[El viejo truco de destacar los enlaces externos de tu blog, con ejemplos de código para WordPress. <a href="http://sofanaranja.com/2005/12/31/destacando-enlaces-externos-en-wordpress/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<br />
<b>Fatal error</b>:  Maximum execution time of 30 seconds exceeded in <b>/home/sofanara/public_html/wp-content/plugins/syhi/libs/geshi.php</b> on line <b>2973</b><br />

