<?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>pon css en tu vida! &#187; Cómo se hizo</title>
	<atom:link href="http://blog.joanfernandez.es/category/como-se-hizo/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.joanfernandez.es</link>
	<description>css, html, javascript, php y mucho mas...</description>
	<lastBuildDate>Fri, 23 Jul 2010 12:28:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>¡Estrenando portfolio!</title>
		<link>http://blog.joanfernandez.es/2010/07/%c2%a1estrenando-portfolio/</link>
		<comments>http://blog.joanfernandez.es/2010/07/%c2%a1estrenando-portfolio/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 12:28:26 +0000</pubDate>
		<dc:creator>Joan</dc:creator>
				<category><![CDATA[Cómo se hizo]]></category>
		<category><![CDATA[divagaciones]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[portfolio]]></category>

		<guid isPermaLink="false">http://blog.joanfernandez.es/?p=395</guid>
		<description><![CDATA[Más de cuatro años después de empezar en esta profesión y tras varias versiones que nunca llegaron a ver la luz, hace tan solo unos días que esta online mi portfolio.

Este portfolio nace sin ninguna pretensión profesional, simplemente por la obligación moral de tener mi propio espacio en internet, de tener esa presencia &#8220;física&#8221; en [...]]]></description>
			<content:encoded><![CDATA[<p>Más de cuatro años después de empezar en esta profesión y tras varias versiones que nunca llegaron a ver la luz, hace tan solo unos días que esta online <a title="Joan Fernández. Maquetación web, programación web, PHP, HTML, CSS, usabilidad y accesibilidad" href="http://joanfernandez.es/">mi portfolio</a>.</p>
<p><a title="Joan Fernández. Maquetación web, programación web, PHP, HTML, CSS, usabilidad y accesibilidad" href="http://joanfernandez.es/"><img class="aligncenter" title="Joan Fernández" src="http://blog.joanfernandez.es/wp-content/uploads/2010/07/logo.jpg" alt="" width="554" height="341" /></a></p>
<p>Este portfolio nace sin ninguna pretensión profesional, simplemente por la obligación moral de tener mi propio espacio en internet, de tener esa presencia &#8220;física&#8221; en internet y no estar escondido detrás de un nick (aunque bien es cierto que nunca renunciaré ni renegaré de él).</p>
<p>Entrando un poco en la parte técnica, el portfolio esta montado bajo un <a title="Drupal CMS" href="http://drupal.org/">Drupal</a> con un tema &#8220;personalizado&#8221;, creado a partir del tema <a title="Tema Zen para drupal" href="http://drupal.org/project/zen">Zen</a>. Este tema utiliza al 100% HTML5 y muchas de las características de CSS3 que ya están disponibles para los navegadores <em>decentes</em> (sacándole partido a aquellas <a title="Presentación de Jose Florido sobre HTML5 y CSS3" href="http://www.flickr.com/photos/frontdays/3949557063/">ocho horas</a> en las que Jose Florido estuvo &#8220;<a title="Presentación de Jose Florido sobre HTML5 y CSS3" href="http://www.slideshare.net/frontdays/html5-y-css3-como-sacarles-partido-hoy">dándonos la brasa</a>&#8220;).  Se me queda la espinita de no haber utilizado una versión más reciente de jQuery, pero hasta que no salga la versión 7 de Drupal, tendremos que seguir conformándonos con la 1.2.6.</p>
<p><img class="aligncenter" title="Captura del portfolio" src="http://blog.joanfernandez.es/wp-content/uploads/2010/07/captura-portfolio-2010.jpg" alt="" width="554" height="359" /></p>
<p>Y por el momento, poco más&#8230; Contento por el trabajo realizado y por un diseño medio decente para ser <em>&#8220;made in me&#8221;</em>.</p>
<p>Espero que este sea el principio para retomar las actualizaciones del blog, pues la última actualización fue en diciembre de 2009, aunque no prometo nada. Tengo varios temas en la cabeza, me gustaria encontrar el tiempo y las ganas suficientes para poder dejarlos aquí plasmados.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joanfernandez.es/2010/07/%c2%a1estrenando-portfolio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mostrar/Ocultar contraseña mediante un checkbox con jQuery</title>
		<link>http://blog.joanfernandez.es/2009/12/mostrar-ocultar-contrasena-checkbox-jquery/</link>
		<comments>http://blog.joanfernandez.es/2009/12/mostrar-ocultar-contrasena-checkbox-jquery/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 07:30:43 +0000</pubDate>
		<dc:creator>Joan</dc:creator>
				<category><![CDATA[Cómo se hizo]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Usabilidad]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[contraseñas]]></category>

		<guid isPermaLink="false">http://blog.joanfernandez.es/?p=359</guid>
		<description><![CDATA[
Hace unos meses, a raíz de un de un artículo de Jakob Nielsen, comentaba la posibilidad de hacer más usables los formularios de login mediante un checkbox para mostrar y ocultar la contraseña.
Y aunque la idea no me parecía descabellada, pasó de largo por mi cabeza como tantas y tantas cosas que vemos al día [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-371" title="mostrar-ocultar-password-jquery" src="http://blog.joanfernandez.es/wp-content/uploads/2009/12/mostrar-ocultar-password-jquery.png" alt="mostrar-ocultar-password-jquery" width="515" height="269" /></p>
<p>Hace unos meses, a raíz de un de un artículo de <a title="Jakob Nielsen en Wikipedia" href="http://es.wikipedia.org/wiki/Jakob_Nielsen">Jakob Nielsen</a>, comentaba la posibilidad de hacer más usables los formularios de login mediante un <a title="Jakob Nielsen: No ocultes la contraseñas" href="http://blog.joanfernandez.es/2009/06/jakob-nielsen-no-ocultes-las-contrasenas/">checkbox para mostrar y ocultar la contraseña</a>.</p>
<p>Y aunque la idea no me parecía descabellada, pasó de largo por mi cabeza como tantas y tantas cosas que vemos al día por Internet.</p>
<p>Sin embargo, después de tener la posibilidad utilizar un móvil para conectarme a Internet, me doy cuenta de cuan engorroso puede llegar a ser meter nuestra contraseña utilizando el teclado del móvil, y lo frustrante que es no saber si lo que has introducido es la contraseña correcta.</p>
<p>El resultado de todo esto es un pequeño script en jQuery que nos permite <strong>mostrar y ocultar el valor de un input de tipo password</strong>.</p>
<p><a title="DEMO | Mostrar/Ocultar contraseña con jQuery" href="http://blog.joanfernandez.es/ejemplos/mostrar-ocultar-password/">DEMO</a> | <a title="Descargar la demo | Mostrar/Ocultar contraseña con jQuery" href="http://blog.joanfernandez.es/ejemplos/password.v02.rar">DESCARGAR EJEMPLO</a></p>
<p>Más info, después del salto <img src='http://blog.joanfernandez.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-359"></span>La forma de hacerlo es muy sencilla. Simplemente creamos un input de tipo &#8220;text&#8221; donde copiaremos lo que se escriba en el password, y viceversa. Mediante el checkbox, mostraremos u ocultaremos ese input con la contraseña &#8220;legible&#8221;.</p>
<p>Mediante el HTML, creamos el típico formulario de login, con sus campos usuario y contraseña:</p>
<pre class="brush: php;">
&lt;form action=&quot;#&quot;&gt;
     &lt;fieldset&gt;
          &lt;p&gt;
               &lt;label for=&quot;user&quot;&gt;Usuario&lt;/label&gt;
               &lt;input type=&quot;text&quot; id=&quot;user&quot; /&gt;
          &lt;/p&gt;
          &lt;p&gt;
               &lt;label for=&quot;password-hide&quot;&gt;Contraseña&lt;/label&gt;
               &lt;input type=&quot;password&quot; id=&quot;password-hide&quot; /&gt;
          &lt;/p&gt;
          &lt;p&gt;
               &lt;input type=&quot;submit&quot; id=&quot;send&quot; value=&quot;Enviar&quot; /&gt;
          &lt;/p&gt;
     &lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<p>Con jQuery hacemos el resto.</p>
<pre class="brush: jscript;">
jQuery(document).ready(function() {
     var passwText = jQuery('#password-hide');

     // Creamos el input que contendrá la contraseña &amp;amp;quot;visible&amp;amp;quot;
     // y el checkbox
     passwText.after('&lt;span class=&quot;showpass&quot;&gt;&lt;input type=&quot;text&quot; id=&quot;password-show&quot; /&gt;&lt;input type=&quot;checkbox&quot; id=&quot;toogle-check&quot;/&gt;&lt;label for=&quot;toogle-check&quot;&gt;Mostrar Contraseña&lt;/label&gt;&lt;/span &gt;');
     var toogCheck = jQuery('#toogle-check');
     var inputText = jQuery('#password-show');

     inputText.hide();

     // Recogemos los caracteres introducidos como contraseña
     // y los compiamos al otro campo
     inputText.keyup(function() { passwText.attr('value', inputText.attr('value')); });
     passwText.keyup(function() { inputText.attr('value', passwText.attr('value')); });

     // Click sobre el checkbox
     $(toogCheck).click(function() {
          if( toogCheck.is(':checked') ) {
               inputText.show(); passwText.hide();
          } else {
               inputText.hide(); passwText.show();
          }
     });
});
</pre>
<p>Creamos el campo que contendrá la contraseña visible (#password-show) y el checkbox que los habilitará. Es necesario crearlos con jQuery, ya que si el usuario no tiene activado javascript en su navegador, no le aparecerán campos inservibles en el formulario de login que le  puedan confundir.</p>
<p>Con el evento keyup de jQuery, recogeremos los caracteres de la contraseña para tener exactamente igual ambos campos (#password-hide y #password-show). Mapeamos el evento keyup de los dos input, ya que el usuario también puede introducir su contraseña en &#8220;modo visible&#8221;.</p>
<p>Por último, con el evento <strong>click</strong> controlamos el checkbox, para mostrar el &#8220;input password&#8221;, o el &#8220;input text&#8221;.</p>
<p><a title="DEMO | Mostrar/Ocultar contraseña con jQuery" href="http://blog.joanfernandez.es/ejemplos/mostrar-ocultar-password/">DEMO</a> | <a title="Descargar la demo | Mostrar/Ocultar contraseña con jQuery" href="http://blog.joanfernandez.es/ejemplos/password.v02.rar">DESCARGAR EJEMPLO</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joanfernandez.es/2009/12/mostrar-ocultar-contrasena-checkbox-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gestión de incidencias en Eclipse con Mantis y Mylyn</title>
		<link>http://blog.joanfernandez.es/2009/12/gestion-de-incidencias-en-eclipse-con-mantis-y-mylyn/</link>
		<comments>http://blog.joanfernandez.es/2009/12/gestion-de-incidencias-en-eclipse-con-mantis-y-mylyn/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 06:30:12 +0000</pubDate>
		<dc:creator>Joan</dc:creator>
				<category><![CDATA[Cómo se hizo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Bug Tracking]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Mantis]]></category>
		<category><![CDATA[Mylyn]]></category>

		<guid isPermaLink="false">http://blog.joanfernandez.es/?p=331</guid>
		<description><![CDATA[A raiz del post de Brandon Savage &#8220;Why tracking bugs in personal projects matters&#8220;, he decidido seguir su recomendación y montar mi propio Bug Tracker para mis proyectos personales.
A través de los comentarios he conocido Mylyn, una herramienta para integrar los gestores de incidencias en Eclipse, el IDE que utilizo para desarrollar.
Para completar el círculo, [...]]]></description>
			<content:encoded><![CDATA[<p>A raiz del post de Brandon Savage &#8220;<a title="Why tracking bugs in personal projects matters" href="http://www.brandonsavage.net/why-tracking-bugs-in-personal-projects-matters/" target="_self">Why tracking bugs in personal projects matters</a>&#8220;, he decidido seguir su recomendación y montar mi propio Bug Tracker para mis proyectos personales.</p>
<p>A través de los comentarios he conocido <a title="Mylyn para Eclipse" href="http://www.eclipse.org/mylyn/">Mylyn</a>, una herramienta para integrar los gestores de incidencias en Eclipse, el IDE que utilizo para desarrollar.</p>
<p>Para completar el círculo, y como Bug Tracker utilizaré <a title="Mantis Bug Tracker" href="http://www.mantisbt.org/">Mantis</a>, un gestor de incidencias desarrollado en PHP que utiliza MySQL como motor de bases de datos. Podría haberme decantado por <a title="Bugzilla" href="http://www.bugzilla.org/">Bugzilla</a>, <a title="JIRA Bug Tracking" href="http://www.atlassian.com/software/jira/">Jira</a> o <a title="Trac Bug Tracker" href="http://trac.edgewall.org/">Trac</a>, pero el hecho de conocer ya el funcionamiento de Mantis, así como que esté desarrollado en PHP, han decantado la balanza. Quizás no sea el mejor, pero para lo que necesito por el momento, cumplirá su función.</p>
<h2>La instalación</h2>
<h3>Instalando Mantis</h3>
<p>Empezaremos instalando el gestor de incidencias Mantis. Para ello, nos bajamos la última versión estable del proyecto (en estos momentos, la 1.1.8), desde aquí: <a title="Descarga MantisBT" href="http://www.mantisbt.org/download.php">http://www.mantisbt.org/download.php</a></p>
<p>La instalación de Mantis es sencilla:</p>
<p>1. Creamos la base de datos que utilizará la aplicación en MySQL.</p>
<p>2. Modificamos el archivo <strong>config_inc.php.sample</strong>, concretamente a partir de la línea 40:</p>
<pre class="brush: php;">
# --- database variables ---------

# set these values to match your setup
$g_hostname      = &quot;localhost&quot;;
$g_db_username   = &quot;mantisdbuser&quot;;
$g_db_password   = &quot;&quot;;
$g_database_name = &quot;bugtracker&quot;;
$g_db_type       = &quot;mysql&quot;;

# --- email variables -------------
$g_administrator_email  = 'administrator@example.com';
$g_webmaster_email      = 'webmaster@example.com';

# the &quot;From: &quot; field in emails
$g_from_email           = 'noreply@example.com';

# the return address for bounced mail
$g_return_path_email    = 'admin@example.com';
</pre>
<p>Las variables <strong>$g_hostname</strong>, <strong>$g_db_username</strong>, <strong>$g_db_password</strong> y <strong>$g_database_name</strong>, son las típicas de cualquier configuración para conectar con MySQL. <strong>$g_db_type</strong> por su parte, lo dejaremos tal cual está, ya que por el momento tan solo soporta <em>mysql</em>.</p>
<p>Las cuentas de email de las líneas inferiores, las configuraremos al gusto, para el envío-recepción de los emails correspondientes.</p>
<p>3. Una vez finalizada la modificación de este archivo, guardamos los cambios y lo renombramos. Quitaremos el <em>.sample</em> del final, para quedarnos tan solo con <strong>config_inc.php</strong>.</p>
<p>4. Ya hemos terminado la configuración. Ahora tan solo tendremos que seguir los pasos de la instalación, que se realiza desde <strong><em>http://servidor-mantis.com/admin/install.php</em></strong>.</p>
<p>5. Por último, y como medida de seguridad, es recomendable eliminar del servidor la carpeta <em><strong>admin</strong></em>.</p>
<h3>Instalando Mylyn en Eclipse</h3>
<p>El siguiente paso es instalar Mylyn en Eclipse. Como siempre, nos vamos al menú <em>Help &gt; Install New Software</em>, y añadimos esta url: <a href="http://download.eclipse.org/tools/mylyn/update/e3.4/">http://download.eclipse.org/tools/mylyn/update/e3.4/</a>. Seleccionamos los complementos deseados (en<em> Mylyn Integration</em> podéis desmarcar el de C/C++ y Java si nos los vais a necesitar) y continuamos hasta finalizar la instalación. Reiniciamos Eclipse y seguimos</p>
<h3>Conectando Mylyn con Mantis</h3>
<p>Para acabar, instalaremos el plugin <a title="Mylyn-Matis" href="http://sourceforge.net/apps/mediawiki/mylyn-mantis/index.php?title=Main_Page">Mylyn-Mantis</a>, necesario para que Mylyn reconozca las incidencias generadas en Mantis. Para ello, seguimos los mismos pasos que hemos realizado para instalar Mylyn, recogiendo los paquetes necesarios de esta url: <a title="Mylyn-Matis para Eclipse" href="http://mylyn-mantis.sourceforge.net/eclipse/update/">http://mylyn-mantis.sourceforge.net/eclipse/update/</a>. Instalamos el conector y volvemos a reiniciar Eclipse.</p>
<h2>Importar las incidencias de Mantis a Eclipse</h2>
<p>Ya solo nos queda conectar Mylyn con el servidor donde hemos instalado Mantis. Para ello, mostramos el panel Task List en Eclipse desde <em>Window &gt; Show View &gt; Other</em>, y dentro de la carpeta Tasks, encontraremos Task List. Es importante no confundir este panel con el propio de Eclipse, Tasks, ya que no tienen la misma utilidad. El nativo de Eclipse recoge los TO-DO, DONE, etc. que marcamos en el código.</p>
<p><img class="aligncenter size-full wp-image-345" title="new-query" src="http://blog.joanfernandez.es/wp-content/uploads/2009/12/new-query.jpg" alt="new-query" width="428" height="319" /></p>
<p>Pinchamos con el botón derecho sobre el panel, y seleccionamos <em>New &gt; Query</em>.</p>
<p style="text-align: center;"><img class="aligncenter" title="add-task-repo" src="http://blog.joanfernandez.es/wp-content/uploads/2009/12/add-task-repo.jpg" alt="add-task-repo" width="543" height="591" /></p>
<p>A continuación, seleccionamos <em>Add Task Repository</em>, y seleccionamos el de Mantis.</p>
<p>En la ventana que nos aparece a continuación, seleccionaremos en el desplegable Server la opción <em>Mantis Connector 1.1.0 or greater, </em>modificamos la url que nos aparecerá en su lugar (<em>http://your.domain.com/api/soap/mantisconnect.php)</em> por la de nuestro servidor, y terminamos de configurar el resto de parámetros (incluido nuestro usuario de Mantis).<em> </em></p>
<p><img class="aligncenter size-full wp-image-352" title="query-mylyn" src="http://blog.joanfernandez.es/wp-content/uploads/2009/12/query-mylyn.jpg" alt="query-mylyn" width="528" height="574" /></p>
<p>Para finalizar, le damos un nombre a la Query, seleccionamos el proyecto creado en Mantis del cual queremos importar las incidencias, y seleccionamos un filtro (lo más lógico es elegir uno que devuelva todas las incidencias de ese proyecto abiertas asignadas a nuestro usuario).</p>
<p>Para crear un filtro, podemos hacerlo desde el propio Mantis realizando una búsqueda avanzada.</p>
<p>Finalizamos el proceso, y ya es el propio Mylyn quien se encarga de importar todas las incidencias que cumplan el filtro a nuestro Eclipse.</p>
<p>Ahora tan solo nos queda trastear con él para explotar todas sus posibilidades.</p>
<p>Seguiremos informando <img src='http://blog.joanfernandez.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joanfernandez.es/2009/12/gestion-de-incidencias-en-eclipse-con-mantis-y-mylyn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Señalizar el idioma de los enlaces mediante CSS.</title>
		<link>http://blog.joanfernandez.es/2009/07/senalizar-el-idioma-de-los-enlaces-mediante-css/</link>
		<comments>http://blog.joanfernandez.es/2009/07/senalizar-el-idioma-de-los-enlaces-mediante-css/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 15:14:52 +0000</pubDate>
		<dc:creator>Joan</dc:creator>
				<category><![CDATA[Accesibilidad]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cómo se hizo]]></category>
		<category><![CDATA[enlaces]]></category>

		<guid isPermaLink="false">http://blog.joanfernandez.es/?p=311</guid>
		<description><![CDATA[Todos estamos acostumbrados a ver señalizados los enlaces externos con la típica flecha.
Algo no tan común, y que quería añadir al blog desde el principio, era la de señalizar el idioma de los enlaces externos. Desgraciadamente, en el mundo web el 80% de los contenidos de calidad están en ingles, y hoy en día todavía [...]]]></description>
			<content:encoded><![CDATA[<p>Todos estamos acostumbrados a ver señalizados los enlaces externos con la típica flecha.</p>
<p>Algo no tan común, y que quería añadir al blog desde el principio, era la de señalizar el idioma de los enlaces externos. Desgraciadamente, en el mundo web el 80% de los contenidos de calidad están en ingles, y hoy en día todavía hay gente a la que esto le supone un problema.</p>
<p>Por ello, he decidido que en este blog se señalizarán aquellos enlaces que lleven a páginas en otros idiomas que no sean castellano, tanto por código como visualmente.</p>
<p>Para señalizar el idioma en del enlace mediante el HTML, es realmente sencillo. Tan solo deberemos utilizar el atributo <em><strong>hreflag</strong></em></p>
<pre class="brush: xml;">
&lt;a href=&quot;#&quot; title=&quot;Titulo del enlace&quot; hreflang=&quot;en-US&quot;&gt;Enlace&lt;/a&gt;
</pre>
<p>El atributo <em>hreflang </em>proporciona a los agentes de usuario información sobre el idioma del recurso del otro extremo del vínculo, igual que el atributo <em>lang </em>proporciona información sobre el idioma del contenido o de los valores de los atributos de un elemento.</p>
<p>Ahora, para mostrar la bandera del idioma, utilizaremos el pseudo-selector <em>:after</em> junto con el selector <em>[attr|=val]</em></p>
<pre class="brush: css;">
a[hreflang|='en']:after {
content: url(images/gb.png);
margin-left: 3px;
vertical-align: middle;
}
</pre>
<p>El selector <em>[attr|=val]</em> se utiliza para seleccionar elementos cuyo atributo sea exactamente &#8220;val&#8221; o empiece por &#8220;val&#8221; seguido inmediatamente por un guión &#8220;-&#8221;. Este selector se creó para utilizarlo en el atributo hreflang de los elementos a, por lo que si fue creado especialmente para esto, ¿no vamos a desperdiciarlo, verdad?</p>
<p>Marcando nuestro html correctamente, y mediante una sencilla regla de CSS, ya tendremos señalizados aquellos enlaces que, en este caso, dirijan a páginas en inglés.</p>
<p>Un ejemplo:<br />
<a title="Enlace a google.es, en castellano" hreflang="es-ES" href="http://www.google.es/">Enlace a google.es, en castellano</a><br />
<a title="Enlace a la W3C, en inglés" hreflang="en-US" href="http://www.w3.org/">Enlace a la W3C, en inglés</a></p>
<p><strong>Documentación.</strong></p>
<p><a href="http://www.w3.org/TR/CSS2/selector.html#attribute-selectors" title="Selectores por atributos en CSS" hreflang="en-US">Selectores por atributos en CSS</a></p>
<p><a href="http://html.conclase.net/w3c/html401-es/struct/links.html#h-12.1.5" title="Vínculos en HTML" hreflang="es-ES">Vínculos en HTML</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joanfernandez.es/2009/07/senalizar-el-idioma-de-los-enlaces-mediante-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sistema de rating con jQuery.</title>
		<link>http://blog.joanfernandez.es/2009/07/sistema-de-rating-con-jquery/</link>
		<comments>http://blog.joanfernandez.es/2009/07/sistema-de-rating-con-jquery/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 10:10:27 +0000</pubDate>
		<dc:creator>Joan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cómo se hizo]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[rating]]></category>
		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://blog.joanfernandez.es/?p=289</guid>
		<description><![CDATA[Uno de los primeros posts que escribí en este blog, fue un tutorial para crear un sistema de valoración por css.
Ese sistema nos puede interesar cuando no necesitamos la valoración del usuario, y tan solo queremos mostrar un ranking estático de forma mucho más visual de lo que podría ser el típico numero de 1 [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los primeros posts que escribí en este blog, fue un tutorial para crear un <a title="Sistema de valoración por css" href="http://blog.joanfernandez.es/2009/05/sistema-de-valoracion-por-css/">sistema de valoración por css</a>.</p>
<p>Ese sistema nos puede interesar cuando no necesitamos la valoración del usuario, y tan solo queremos mostrar un ranking estático de forma mucho más visual de lo que podría ser el típico numero de 1 a 5.</p>
<p>Hoy, para cerrar el círculo, vamos a ver como crear otro sistema de valoración, esta vez utilizando jQuery.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-290" title="sistema-rating-jquery" src="http://blog.joanfernandez.es/wp-content/uploads/2009/07/sistema-rating-jquery.png" alt="sistema-rating-jquery" width="550" height="339" /></p>
<p style="text-align: center;"><a title="Ver ejemplo valoración jQuery" href="http://blog.joanfernandez.es/ejemplos/valoracion-jquery/">- VER DEMO -</a> | <a title="Descargar archivos tutorial" href="http://blog.joanfernandez.es/ejemplos/tutorial-valoracion-jquery.rar">- DESCARGAR EJEMPLO -</a></p>
<p><span id="more-289"></span></p>
<h3>Creando el HTML</h3>
<p>El código HTML necesario es muy simple:</p>
<pre class="brush: xml;">
&lt;h1&gt;Test rating jQuery&lt;/h1&gt;
&lt;div id=&quot;rating&quot;&gt;
&lt;span class=&quot;moving-bg&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;span&gt;&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;
&lt;div id=&quot;status2&quot;&gt;8.0&lt;/div&gt;
&lt;div id=&quot;msg&quot;&gt;&lt;/div&gt;
</pre>
<p>Necesitamos 2 capas, una para la barra (<em>rating</em>), otra para el valor numérico de la votación (<em>status2</em>). La tercera capa (<em>msg</em>) es simplemente para mostrar al usuario la votación que ha realizado, y es totalmente prescindible.</p>
<p>Como veis, el código no es demasiado semántico, pero es algo que se puede perdonar en favor de una mayor interactividad por parte del usuario.</p>
<p>Los resultados, por ahora, <a title="Ver ejemplo valoración jQuery - Paso 1" href="http://blog.joanfernandez.es/ejemplos/valoracion-jquery/index-html.html">no son espectaculares</a>.</p>
<h3>Añadiendo CSS.</h3>
<p>Para formar la &#8220;rejilla&#8221; de valoración, necesitaremos 2 imágenes: <a title="Rejilla" href="http://blog.joanfernandez.es/ejemplos/valoracion-jquery/images/grid.png">la rejilla</a> y el <a title="Fondo degradado" href="http://blog.joanfernandez.es/ejemplos/valoracion-jquery/images/rainbow.png">fondo con el degradado</a>.</p>
<p>La idea es la siguiente:</p>
<p><img class="aligncenter size-full wp-image-293" title="esquema" src="http://blog.joanfernandez.es/wp-content/uploads/2009/07/esquema.png" alt="esquema" width="411" height="145" /><em>rainbow.png</em> y <em>grid.png</em> son imágenes de fondo para el <em>div#rating </em>y el segundo <em>span</em>, respectivamente. El <em>span.moving-bg</em>, situado en medio de los dos, es el que iremos moviendo dependiendo de la posición del cursor, o del valor de la votación.</p>
<p>Al desplazar el span gris,  a través de las transparencias de grid.png se podrá ver el degradado que hay como fondo, dando la sensación de que son las &#8220;celdas&#8221; de grid.png las que se van &#8220;llenando&#8221;.</p>
<p>El CSS quedaría así:</p>
<pre class="brush: css;">
#rating {
background: transparent url(images/rainbow.png) 0 0 no-repeat;
width: 216px;
height: 41px;
float: left;
position: relative;
z-index: 2;
overflow: hidden;
cursor: pointer;
}
#rating span{
display: block;
width: 216px;
height: 41px;
background: transparent url(images/grid.png) 0 0 no-repeat;
position: relative;
z-index: 1;
}
#rating span.moving-bg{
position: absolute;
top:0;
left:0;
background-image: none;
background-color: #CCC;
}
#status2 {
width: 50px;
float: left;
border: 1px solid #ccc;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-khtml-border-radius: 5px;
font-size: 2em;
text-align: center;
font-weight: bold;
margin-left: 10px;
}
#msg {
clear: both;
}
</pre>
<p>Después aplicar los estilos del CSS, el <a title="Ver ejemplo valoración jQuery - Paso 2" href="http://blog.joanfernandez.es/ejemplos/valoracion-jquery/index-css.html">resultado mejora notablemente</a>.</p>
<h3>Dale vida con jQuery</h3>
<p>Ahora, lo tenemos todo ya preparado para añadir el &#8220;toque mágico&#8221; con jQuery, y convertir esto en un sistema de valoración como esperamos.</p>
<p>Analizando la situación, nos damos cuenta de que tendremos cuatro escenarios diferentes:</p>
<ol>
<li>Carga de la página</li>
<li>El usuario sitúa el cursor encima de la barra.</li>
<li>El usuario hace clic para emitir su voto.</li>
<li>El usuario quita el cursor de la barra.</li>
</ol>
<p>Sabemos que una tarea que tendremos que repetir con frecuencia es la de actualizar la posición del fondo gris, por lo tanto vamos a crear una sencilla función, para que nuestro código esté lo más limpio posible.</p>
<pre class="brush: jscript;">
/**
 * Mueve la capa de &quot;color&quot; para que se adapte al valor
 * pasado.
 * @param valor int
 * @param tamanyo_capa int
 */
function actualizarPos (valor, tamanyo_capa) {
var p = Math.round(valor * tamanyo_capa / 10);
$('#rating span.moving-bg').animate( { left: p }, 500 );
}
</pre>
<p>actualizarPos tan solo actualiza, dependiendo del tamaño de la capa contenedora, la posición del fondo gris, dependiendo de la valoración (valor).<br />
Nos valdremos de la función de jQuery <strong>document.ready</strong>, para ejecutar nuestro código cuando ya el DOM esté cargado:</p>
<pre class="brush: jscript;">
$(document).ready( function() {
// Obtenemos el valor inicial
var valoracion_defecto = parseFloat($('#status2').html());
// Obtenemos el tamaño del div
var w = $('#rating').css('width');
// eliminamos el px
var width_div = parseInt(w.slice(0,w.length-2));

// Al usuario siempre mostraremos una cifra con un solo decimal
var valoracion_defecto_num = valoracion_defecto.toPrecision(2);
actualizarPos(valoracion_defecto, width_div);

   $(&quot;#rating&quot;).mousemove(function(e){

// Obtenemos la posición del cursor dentro del elemento
var x = e.pageX - this.offsetLeft;
// Desplazamos la barra gris hasta esa posición
$('#rating span.moving-bg').css('left', x);
// Actualizamos el valor numérico
// Este valor siempre será un entero
$('#status2').html(Math.round(x*10/width_div));

   });
   $(&quot;#rating&quot;).click(function(e){
// Obtenemos la posicion del cursor dentro del elemento.
var x = e.pageX - this.offsetLeft;
// Obtenemos el resultado de la votación
var r = Math.round(x*100/width_div/10);

// Actualizamos el valor numerico
valoracion_defecto = (valoracion_defecto + r) / 2;
// lo mostramos en pantalla, siempre con un solo decimal
valoracion_defecto_num = valoracion_defecto.toPrecision(2);
$('#status2').html(valoracion_defecto_num);

// Actualizamos la posición de la barra gris
actualizarPos(valoracion_defecto, width_div);
// Mostramos el mensaje al usuario de su voto.
$('#msg').html(&quot;Has votado: &quot; + r);
   });

   $(&quot;#rating&quot;).mouseout(function(e){
// Actualizamos el valor numérico al que pertenece
$('#status2').html(valoracion_defecto_num);
// Actualizamos la posición de la barra gris
actualizarPos(valoracion_defecto, width_div);
   });

});
</pre>
<p>Dividimos el código en cuatro bloques:<br />
<strong>Al cargar la página</strong>, obtenemos el valor por defecto de la votación y posicionamos la barra gris dependiendo del valor obtenido.<br />
La valoración que se muestra al usuario siempre será una cifra con 1 decimal, por lo que utilizamos la función <strong>toPrecision()</strong>.</p>
<p><strong>Cuando el usuario situé el cursor encima del elemento</strong>, se ejecutará la función <strong>mousemove</strong>. En este caso, obtenemos la posición del cursor dentro del elemento, y movemos la barra gris a la posición del cursor. También actualizamos el valor numérico, que deberá ser un entero.</p>
<p><strong>Cuando el usuario mueva el cursor fuera de la barra (<em>mouseout</em>)</strong>, esta volverá a tomar el valor del campo numérico por defecto.</p>
<p><strong>Si el usuario hace click sobre la barra (<em>click</em>)</strong>, lo tomaremos como que quiere realizar una valoración. Entonces, actualizaremos el valor para hacer la media entre el valor existente, y su votación.<br />
Si asociamos el sistema a una base de datos, es en este método donde deberemos realizar la consulta de actualización mediante AJAX. Para este tutorial, nos conformaremos con actualizar el valor en pantalla, y que se vea reflejado en la barra.</p>
<p>Utilizando los métodos <strong>mousemove</strong>, <strong>mouseout </strong>y <strong>click</strong> de jQuery, cubrimos todos los posibles estados por los que puede pasar nuestro sistema de valoración, y con <strong>pageX </strong>y <strong>offsetLeft</strong>, seremos capaces de conocer la posición del cursor dentro del elemento.</p>
<p>Cómo conectar este sistema a una base de datos, y registrar las votaciones mediante AJAX, lo dejaremos para un próximo capítulo <img src='http://blog.joanfernandez.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a title="Ver ejemplo valoración jQuery" href="http://blog.joanfernandez.es/ejemplos/valoracion-jquery/">- VER DEMO -</a><br />
<a title="Descargar archivos tutorial" href="http://blog.joanfernandez.es/ejemplos/tutorial-valoracion-jquery.rar">- DESCARGAR EJEMPLO -</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joanfernandez.es/2009/07/sistema-de-rating-con-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sistema de valoración por CSS.</title>
		<link>http://blog.joanfernandez.es/2009/05/sistema-de-valoracion-por-css/</link>
		<comments>http://blog.joanfernandez.es/2009/05/sistema-de-valoracion-por-css/#comments</comments>
		<pubDate>Wed, 27 May 2009 17:51:26 +0000</pubDate>
		<dc:creator>Joan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cómo se hizo]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[sprites]]></category>
		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://blog.joanfernandez.es/?p=14</guid>
		<description><![CDATA[Tener un sistema visual de valoración en nuestra web puede darle el toque diferente a nuestro proyecto.
Durante la maquetación de mi portfolio, me propuse utilizar este método de valoración para representar mi participación en los proyectos que he participado.
La idea.
El sistema es el típico método de valoraciones que todos conocemos (las tan conocidas estrellitas). Dándole [...]]]></description>
			<content:encoded><![CDATA[<p>Tener un sistema visual de valoración en nuestra web puede darle el toque diferente a nuestro proyecto.</p>
<p>Durante la maquetación de mi portfolio, me propuse utilizar este método de valoración para representar mi participación en los proyectos que he participado.</p>
<h3>La idea.</h3>
<p>El sistema es el típico método de valoraciones que todos conocemos (las tan conocidas estrellitas). Dándole &#8220;media&#8221; vuelta al diseño, cambiando las estrellas por asteríscos, podemos obtener algo así:</p>
<p style="text-align: center;"><img class="size-full wp-image-17 aligncenter" title="Final" src="http://blog.joanfernandez.es/wp-content/uploads/2009/05/final.png" alt="Final" width="205" height="203" /></p>
<p style="text-align: center;"><a href="http://blog.joanfernandez.es/ejemplos/valoracion-css/"> &#8211; VER EJEMPLO FUNCIONANDO -<br />
</a></p>
<p><span id="more-14"></span></p>
<h3>Ejecución</h3>
<p>A la hora de convertir el diseño en código HTML semántico, lo más adecuado es utilizar la etiqueta <strong>&lt;dl&gt;</strong>, para definir una lista compuesta por términos (<strong>&lt;dt&gt;</strong>) y descripciones (&lt;<strong>dd&gt;</strong>).  Veamos el HTML necesario para crear esta lista:</p>
<pre class="brush: xml;">
&lt;dl&gt;
&lt;dt&gt;xhtml&lt;/dt&gt;
&lt;dd class=&quot;star stars5&quot; title=&quot;Total&quot;&gt;Total&lt;/dd&gt;

&lt;dt&gt;css&lt;/dt&gt;
&lt;dd class=&quot;star stars4&quot; title=&quot;Muy significativa&quot;&gt;Muy significativa&lt;/dd&gt;

&lt;dt&gt;zendFramework&lt;/dt&gt;
&lt;dd class=&quot;star stars3&quot; title=&quot;Significativa&quot;&gt;Significativa&lt;/dd&gt;

&lt;dt&gt;jQuery&lt;/dt&gt;
&lt;dd class=&quot;star stars2&quot; title=&quot;Parcial&quot;&gt;Parcial&lt;/dd&gt;

&lt;dt&gt;diseño&lt;/dt&gt;
&lt;dd class=&quot;star stars1&quot; title=&quot;Puntual&quot;&gt;Puntual&lt;/dd&gt;
&lt;/dl&gt;
</pre>
<p>Observamos el código html antes de empezar con los estilos para comprobar que es perfectamente legible y comprensible sin la necesidad de CSS.</p>
<p style="text-align: center;"><img class="size-full wp-image-26 aligncenter" title="Resultado sin estilos" src="http://blog.joanfernandez.es/wp-content/uploads/2009/05/html-plano.png" alt="Resultado sin estilos" width="227" height="213" /></p>
<p>A la hora de crear las imágenes, vamos a utilizar <em>sprites</em>. Es decir, juntaremos todas las imágenes necesarias en una sola, que posicionaremos mediante CSS para obtener el resultado deseado. En el caso del diseño original, las imágenes de las &#8220;estrellas&#8221; debían tener el fondo transparente, sin embargo la versión que os muestro para que se aprecie mejor tiene color de fondo:</p>
<p style="text-align: center;"><img class="size-full wp-image-31 aligncenter" title="Sprites" src="http://blog.joanfernandez.es/wp-content/uploads/2009/05/sprites.png" alt="Sprites" width="75" height="54" /></p>
<p>Utilizar sprites para nuestras imágenes tiene como resultado más significativo la reducción de peticiones al servidor. Suponiendo que creando las cinco imágenes por separado el peso será el mismo que creando tan solo una, la mejora la encontramos en que reducimos de 5 a 1 las veces que el servidor debe entregar archivos al navegador para obtener el mismo resultado.</p>
<h4>Mejor con estilos&#8230;</h4>
<p>Es el momento de darle vida a nuestro HTML, para ello hemos dotado a los elementos de difinición (<strong>&lt;dd&gt;</strong>) de la lista con dos clases: <em>star</em> y <em>stars5</em>.</p>
<p>Con la primera clase (<em>star</em>) proporcionaremos los estilos comunes a todos los elementos: ancho, alto, imagen de fondo, etc&#8230; La segunda clase será diferente dependiendo de la valoración que queramos asignar. En este caso hay cinco posibles opciones: <em>stars5</em>, <em>stars4</em>, <em>stars3</em>, <em>stars2</em> y <em>stars1</em>. En función a esta clase, posicionaremos la imagen para obtener el resultado deseado. Por lo tanto, el CSS quedaría tal que así&#8230;</p>
<pre class="brush: css;">
.star {
width: 74px;
height: 10px;
text-indent: -9999px;
background: transparent url(bg_interface.png) 0 0 no-repeat;
margin: 0 0 16px 13px;
}
.stars5 {
background-position: -1px 0;
}
.stars4 {
background-position: -1px -11px;
}
.stars3 {
background-position: -1px -22px;
}
.stars2 {
background-position: -1px -33px;
}
.stars1 {
background-position: -1px -44px;
}
</pre>
<p>Más sencillo imposible; asignamos al elemento un tamaño fijo, movemos el texto mediante <strong>text-indent</strong> para que sea invisible al usuario, y asignamos la imagen de fondo.</p>
<p>Después, tan solo necesitamos posicionar la imagen de fondo para que se muestre la sección correspondiente. Es importante el uso del atributo <strong>title</strong>, para que el usuario conozca el significado de nuestra puntuación al pasar el cursor por encima de los asteriscos.</p>
<p><a href="http://blog.joanfernandez.es/ejemplos/valoracion-css/">- VER DEMO -</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joanfernandez.es/2009/05/sistema-de-valoracion-por-css/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
