<?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>dsite.es &#187; Página personal de David Figueres, desarrollador Web, Multimedia y más&#8230;</title>
	<atom:link href="http://www.dsite.es/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dsite.es</link>
	<description>Página personal de David Figueres, donde encontraras los proyectos en que he trabajado y futuros desarrollos.</description>
	<lastBuildDate>Mon, 26 Sep 2011 07:18:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Buscar y ordenar texto con acentos en TinyTable v3</title>
		<link>http://www.dsite.es/buscar-y-ordenar-texto-con-acentos-en-tinytable-v3/</link>
		<comments>http://www.dsite.es/buscar-y-ordenar-texto-con-acentos-en-tinytable-v3/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 16:53:50 +0000</pubDate>
		<dc:creator>David Figueres Villaró</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.dsite.es/?p=167</guid>
		<description><![CDATA[Después de algún tiempo usando uno de los mejores scripts JavaScript que encontré para la ordenación, búsqueda y paginación de tablas HTML he decidido hacerle algún cambio para corregir sus problemas en la ordenación y búsqueda de palabras con acentos. Lo primero a realizar para poder desarrollar estas modificaciones, ha sido estudiar el funcionamiento del [...]<!-- AddThis Button BEGIN -->
<div addthis:url='http://www.dsite.es/buscar-y-ordenar-texto-con-acentos-en-tinytable-v3/' addthis:title='Buscar y ordenar texto con acentos en TinyTable v3 ' class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_preferred_1"></a>
<a class="addthis_button_preferred_2"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_preferred_4"></a>
<a class="addthis_button_google_plusone"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>

<!-- AddThis Button END -->]]></description>
			<content:encoded><![CDATA[<p>Después de algún tiempo usando uno de los mejores scripts JavaScript que encontré para la ordenación, búsqueda y paginación de tablas HTML he decidido hacerle algún cambio para corregir sus problemas en la ordenación y búsqueda de palabras con acentos.<span id="more-167"></span></p>
<p>Lo primero a realizar para poder desarrollar estas modificaciones, ha sido estudiar el funcionamiento del motor de <a href="http://www.leigeber.com/2009/11/advanced-javascript-table-sorter/" target="_blank">TinyTable v3</a>. Fruto de este he dado en la clave de las modificaciones necesarias para el correcto funcionamiento.</p>
<h2>Eliminación de acentos y otros caracteres en JavaScript</h2>
<p>Hay muchos códigos por internet sobre la eliminación de acentos, pero por algún motivo que no he llegado a encontrar en TinyTable no funcionaban correctamente y es por eso que realicé este script para la eliminación de acentos:</p>
<pre class="brush:javascript">function til(t){
   var ts = '';
   for(var i=0;i&lt;t.length;i++)
   {
      var c = t.charCodeAt(i);
      if(c &gt;= 224 &amp;&amp; c &lt;= 230)
         ts += 'a';
      else if(c &gt;= 232 &amp;&amp; c &lt;= 235)
         ts += 'e';
      else if(c &gt;= 236 &amp;&amp; c &lt;= 239)
         ts += 'i';
      else if(c &gt;= 242 &amp;&amp; c &lt;= 246)
         ts += 'o';
      else if(c &gt;= 249 &amp;&amp; c &lt;= 252)
         ts += 'u';
      else
         ts += t.charAt(i);
   }
   return ts;
};</pre>
<p>Podéis consultar las tablas de codificación de <a href="http://www.google.es/search?hl=es&amp;q=tabla+caracteres+ascii" target="_blank">caracteres ASCII</a>.</p>
<h2>Modificaciones a TinyTable v3</h2>
<p>Fichero tinytable/script-new.js</p>
<p>En el método <strong>search </strong>(sorter.prototype.search) es necesario llamar a til() para que el texto que viene del campo de búsqueda y el texto que compra en la tabla HTML sean procesados sin acentos, así como la comparación sea basada en estos:</p>
<pre class="brush:javascript">sorter.prototype.search=function(f){
   var i=x=n=0, k=-1, q=til(T$(f).value.toLowerCase());
   if(this.p.colddid){k=T$(this.p.colddid).value}
   [...]
   for(x=s;x&lt;e;x++){
      var b=til(r.cells[x].innerHTML.toLowerCase());
      if(b.indexOf(q)==-1){v=0}else{v=1; break}
   }
[...]</pre>
<p>El método <strong>sort </strong>(sorter.prototype.sort) es el encargado de ordenar las columnas, pero la decisión sobre el orden lo hace el método cp() (comparation) y es aquí donde he tenido que realizar las modificaciones añadiendo el uso de til():</p>
<pre class="brush:javascript">function cp(f,c){
   var g,h; f=g=til(f.v.toLowerCase()); c=h=til(c.v.toLowerCase());
   var i=parseFloat(f.replace(/(\$|\,)/g,'')), n=parseFloat(c.replace(/(\$|\,)/g,''));
[...]</pre>
<h2>Ejemplo y descarga</h2>
<p>Aquí os dejo un ejemplo y el código para que lo podáis usar fácilmente.</p>
<p><a href="http://www.dsite.es/public_scripts/tinytablev3_demo_2/" target="_blank">Puedes ver un ejemplo aquí</a></p>
<p><a href="http://www.dsite.es/public_scripts/tinytablev3_demo_2/tinytable-new_2.rar" target="_blank">Descargar código completo</a></p>
<!-- AddThis Button BEGIN -->
<div addthis:url='http://www.dsite.es/buscar-y-ordenar-texto-con-acentos-en-tinytable-v3/' addthis:title='Buscar y ordenar texto con acentos en TinyTable v3 ' class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_preferred_1"></a>
<a class="addthis_button_preferred_2"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_preferred_4"></a>
<a class="addthis_button_google_plusone"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>

<!-- AddThis Button END -->]]></content:encoded>
			<wfw:commentRss>http://www.dsite.es/buscar-y-ordenar-texto-con-acentos-en-tinytable-v3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Controlar la posición de jQuery Context Menu</title>
		<link>http://www.dsite.es/controlar-la-posicion-de-jquery-context-menu/</link>
		<comments>http://www.dsite.es/controlar-la-posicion-de-jquery-context-menu/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 19:59:16 +0000</pubDate>
		<dc:creator>David Figueres Villaró</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.dsite.es/?p=157</guid>
		<description><![CDATA[Después de mi artículo TinyTable v3 con jQuery Context Menu y Dialog UI y de los comentarios sobre el posicionamiento del menú contextual, he decidido hacer este pequeño artículo sobre cómo controlar su posición y evitar que salga fuera de TinyTable o de cualquier otro elemento del que dependa. Sin las modificaciones en el código [...]<!-- AddThis Button BEGIN -->
<div addthis:url='http://www.dsite.es/controlar-la-posicion-de-jquery-context-menu/' addthis:title='Controlar la posición de jQuery Context Menu ' class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_preferred_1"></a>
<a class="addthis_button_preferred_2"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_preferred_4"></a>
<a class="addthis_button_google_plusone"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>

<!-- AddThis Button END -->]]></description>
			<content:encoded><![CDATA[<p>Después de mi artículo <a href="http://www.dsite.es/tinytable-v3-con-jquery-context-menu-y-dialog-ui" target="_self">TinyTable v3 con jQuery Context Menu y Dialog UI</a> y de los comentarios sobre el posicionamiento del menú contextual, he decidido hacer este pequeño artículo sobre cómo controlar su posición y evitar que salga fuera de TinyTable o de cualquier otro elemento del que dependa.</p>
<p>Sin las modificaciones en el código de <a href="http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/" target="_blank">jQuery ContextMenu</a> pasa esto:</p>
<p><a href="http://www.dsite.es/wp-content/uploads/2010/06/tinytable-contextmenu-original.jpg"><img class="aligncenter size-full wp-image-158" title="tinytable-contextmenu-original" src="http://www.dsite.es/wp-content/uploads/2010/06/tinytable-contextmenu-original.jpg" alt="" width="543" height="209" /></a></p>
<p>En el directorio jqueryContextMenu encontramos jquery.contextMenu.js dónde está el código JavaScript de menú contextual. Sólo es necesario añadir estas líneas para que quede así:</p>
<pre class="brush:javascript">(e.pageX) ? x = e.pageX : x = e.clientX + d.scrollLeft;
(e.pageY) ? y = e.pageY : x = e.clientY + d.scrollTop;

//Código añadido
var menuW = menu.width();
var parentRightPosition = $(this).position().left+$(this).width();
if((x+menuW) &gt; parentRightPosition)
{
     x -= menuW;
}
//fin código añadido
// Show the menu
$(document).unbind('click');
$(menu).css({ top: y, left: x }).fadeIn(o.inSpeed);</pre>
<p>Gracias a este código se puede controlar la posición donde va a aparecer el menú contextual, que en nuestro caso es hacia la izquierda si iba a salir fuera del elemento padre:</p>
<p><a href="http://www.dsite.es/wp-content/uploads/2010/06/tinytable-contextmenu-modificado.jpg"><img class="aligncenter size-full wp-image-162" title="tinytable-contextmenu-modificado" src="http://www.dsite.es/wp-content/uploads/2010/06/tinytable-contextmenu-modificado.jpg" alt="" width="526" height="209" /></a></p>
<!-- AddThis Button BEGIN -->
<div addthis:url='http://www.dsite.es/controlar-la-posicion-de-jquery-context-menu/' addthis:title='Controlar la posición de jQuery Context Menu ' class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_preferred_1"></a>
<a class="addthis_button_preferred_2"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_preferred_4"></a>
<a class="addthis_button_google_plusone"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>

<!-- AddThis Button END -->]]></content:encoded>
			<wfw:commentRss>http://www.dsite.es/controlar-la-posicion-de-jquery-context-menu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TinyTable v3 con jQuery Context Menu y Dialog UI</title>
		<link>http://www.dsite.es/tinytable-v3-con-jquery-context-menu-y-dialog-ui/</link>
		<comments>http://www.dsite.es/tinytable-v3-con-jquery-context-menu-y-dialog-ui/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 15:42:36 +0000</pubDate>
		<dc:creator>David Figueres Villaró</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.dsite.es/?p=128</guid>
		<description><![CDATA[Introducción Hace ya algún tiempo que en la Web de anieto2k encontré un interesante artículo sobre TinyTable v3. TinyTable v3 es un script Javascript que agrega ordenación, búsqueda, promedios de columna y totales, paginación... en tablas HTML. Todo esto lo hace con tan sólo 7Kb!! Partiendo de esta base y después de usar TinyTable en [...]<!-- AddThis Button BEGIN -->
<div addthis:url='http://www.dsite.es/tinytable-v3-con-jquery-context-menu-y-dialog-ui/' addthis:title='TinyTable v3 con jQuery Context Menu y Dialog UI ' class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_preferred_1"></a>
<a class="addthis_button_preferred_2"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_preferred_4"></a>
<a class="addthis_button_google_plusone"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>

<!-- AddThis Button END -->]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Hace ya algún tiempo que en la Web de <a href="http://www.anieto2k.com/2009/11/16/tinytable-v3-la-herramienta-perfecta-para-tus-tablas/" target="_blank">anieto2k </a>encontré un interesante artículo sobre <a href="http://www.leigeber.com/2009/11/advanced-javascript-table-sorter/">TinyTable v3</a>.</p>
<p>TinyTable v3 es un script Javascript que agrega ordenación, búsqueda, promedios de columna y totales, paginación... en tablas HTML. Todo esto lo hace con tan sólo 7Kb!!</p>
<p>Partiendo de esta base y después de usar TinyTable en diferentes proyectos he visto la necesidad de extender sus funcionalidades, concretamente el uso de <a href="http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/" target="_blank">jQuery Context Menu</a> y <a href="http://jqueryui.com/demos/dialog/" target="_blank">jQuery Dialog UI</a>.</p>
<p style="text-align: center;"><a href="http://www.dsite.es/wp-content/uploads/2010/03/tinytable-contextmenu.jpg"><img class="aligncenter size-full wp-image-145" title="tinytable-contextmenu" src="http://www.dsite.es/wp-content/uploads/2010/03/tinytable-contextmenu.jpg" alt="" width="509" height="217" /></a></p>
<h2><span id="more-128"></span>Librerías usadas</h2>
<p>Listado de librerías usadas para este desarrollo:</p>
<ul>
<li><a href="http://jquery.com/" target="_blank">JQuery 1.4.2</a></li>
<li>TinyTable v3</li>
<li>jQuery Context Menu</li>
<li>jQuery Dialog UI</li>
</ul>
<h2>Motor del sistema</h2>
<p>Para poder controlar todas las acciones que intervienen en el Script programado he creado un "controller" para canalizarlas y así simplificar el código:</p>
<pre class="brush:javascript">function Controller(action, el)
{
	//COLUMNA de TinyTable con el id principal
	var idColumn = 0;
	//COLUMNA de TinyTable con el nombre más destacado
	var nameColumn = 1;
	var ids = $(el).children('td').eq(idColumn).text();

	switch(action)
	{
		case "eliminarAction":
			alert("Eliminar "+$('#dialogTable #idEliminar').text());
			break;
		case "eliminar":
			$('#dialogTable').dialog('open');
			$('#dialogTable #nomEliminar').text($(el).children('td').eq(nameColumn).text());
			$('#dialogTable #idEliminar').text(ids);
			break;
		case "editar":
			alert("Eliminar fila: "+ids);
			break;
	}
}</pre>
<p>Como queremos que el menú secundario aparezca en cada fila de la tabla, creamos un método para poder inicializar las propiedades de las fila "TR" al finalizar la carga de la página y al realizar una reordenación de la tabla.</p>
<pre class="brush:javascript">function initFuncionsTaula()
{
//Iniciamos el menú secundario personalizado para las filas de la tabla
	$('#tableData tbody tr').contextMenu({
			menu: 'contextMenuElements',
			inSpeed: 10,
			outSpeed: 10
		},
		function(action, el, pos) {
			Controller(action, el)
		}
	);
//Permitimos que se pueda editar la fila con doble click de ratón.
	$('#tableData tbody tr').dblclick(
		function() {
			Controller('editar', this)
		}
	);
}</pre>
<h2>Modificaciones a Tiny Table v3</h2>
<p>Tiny Table al ordenar y al hacer un reset en las filas, reescribe el contenido de ellas una vez ordenadas internamente, esto hace que las inicializaciones de initFunctionsTaula() no tengan efecto. Es por eso que he hecho unas pequeñas modificaciones a Tiny Table para que inicialice nuestros métodos cada vez que se cambia la estructura:</p>
<p>Fichero tinytable/script-new.js</p>
<pre class="brush:javascript">[...]
TINY.table=function(){
	function sorter(n,t,p,r){this.n=n; this.id=t; this.p=p; if(r == undefined ) r = function(){}; this.r = r; if(this.p.init){this.init()}}
[...]</pre>
<p>Ahora Tiny Table v3 tiene un cuarto parámetro que es una función que se llamará en sorter.prototype.reset y sorter.prototype.sort, como this.r().</p>
<h2>Inicialización de Tiny Table y jQuery Dialog UI</h2>
<p>Para finalizar nuestro código Javascrit para que todo funcione nos falta iniciar Tiny Table con el método initFunctionsTaula() y jQuery Dialog UI usando $(document).ready() de Jquery:</p>
<pre class="brush:javascript">var sorter = null;
$(document).ready( function() {
	//INICIAR TINYTABLE
	sorter = new TINY.table.sorter('sorter','tableData',{
		headclass:'head',
		ascclass:'asc',
		descclass:'desc',
		evenclass:'evenrow',
		oddclass:'oddrow',
		evenselclass:'evenselected',
		oddselclass:'oddselected',
		paginate:true,
		size:10,
		colddid:'columns',
		currentid:'currentpage',
		totalid:'totalpages',
		startingrecid:'startrecord',
		endingrecid:'endrecord',
		totalrecid:'totalrecords',
		hoverid:'selectedrow',
		pageddid:'pagedropdown',
		navid:'tablenav',
		sortcolumn:1,
		sortdir:1,
		sum:[8],
		avg:[6,7,8,9],
		columns:[{index:7, format:'%', decimals:1},{index:8, format:'$', decimals:0}],
		init:true
		},
		function() {initFuncionsTaula()}
	);
	//INICIALIZAR EL MÓDULO DE DIALOGO
	$("#dialogTable").dialog({
		bgiframe: true,
		resizable: false,
		autoOpen: false,
		modal: true,
		overlay: {
			backgroundColor: '#000',
			opacity: 0.5
		},
		buttons: {
			'Cancelar': function() {
				$(this).dialog('close');
			},
			'Eliminar esta fila': function() {
				Controller('eliminarAction',this);
				$(this).dialog('close');
			}
		}
	});
});</pre>
<p style="text-align: center;"><a href="http://www.dsite.es/wp-content/uploads/2010/03/tinytable-dialog.jpg"><img class="aligncenter size-full wp-image-148" title="tinytable-dialog" src="http://www.dsite.es/wp-content/uploads/2010/03/tinytable-dialog.jpg" alt="" width="509" height="217" /></a></p>
<p>Para el menú secundario ContextMenu será necesario algo como esto:</p>
<pre class="brush:html">
<ul id="contextMenuElements" class="contextMenu">
<li class="edit"><a href="#editar">Editar</a></li>
<li class="delete"><a href="#eliminar">Eliminar</a></li>
</ul>
</pre>
<p>Y esto para el contenido del diálogo de eliminar:</p>
<pre class="brush:html">
<div id="dialogTable" title="¿Eliminar la fila seleccionada?">
<input id="idEliminar" type="hidden" />

<span class="ui-icon ui-icon-alert" style="float: left; margin: 0 7px 20px 0;"> </span>Está intentando eliminar la fila:

<strong>

</strong>
¿Está seguro que desea continuar?</div>
</pre>
<h2>Ejemplo y descarga</h2>
<p>Aquí os dejo un ejemplo y el código para que lo podáis usar fácilmente.</p>
<p><a href="http://www.dsite.es/public_scripts/tinytablev3_demo/" target="_blank">Puedes ver un ejemplo aquí</a></p>
<p><a href="http://www.dsite.es/public_scripts/tinytablev3_demo/tinytable-new.rar" target="_blank">Descargar código completo</a></p>
<!-- AddThis Button BEGIN -->
<div addthis:url='http://www.dsite.es/tinytable-v3-con-jquery-context-menu-y-dialog-ui/' addthis:title='TinyTable v3 con jQuery Context Menu y Dialog UI ' class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_preferred_1"></a>
<a class="addthis_button_preferred_2"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_preferred_4"></a>
<a class="addthis_button_google_plusone"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>

<!-- AddThis Button END -->]]></content:encoded>
			<wfw:commentRss>http://www.dsite.es/tinytable-v3-con-jquery-context-menu-y-dialog-ui/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>

