<?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>ensandecer de um computólogo &#187; FOSS</title>
	<atom:link href="http://danielmartins.eti.br/blog/category/foss/feed/" rel="self" type="application/rss+xml" />
	<link>http://danielmartins.eti.br/blog</link>
	<description>return 1;</description>
	<lastBuildDate>Thu, 15 Dec 2011 05:05:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>YUI + widget DataTable + Ordenação Customizada</title>
		<link>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/</link>
		<comments>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 21:27:57 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/2007/07/03/yui-widget-datatable-ordenacao-customizada/</guid>
		<description><![CDATA[Eu tenho utilizado exaustivamente a biblioteca de componentes YUI (Yahoo User Interface) para re-redesenhar a interface dos sistemas web que desenvolvo no meu atual local de trabalho. Acredito que há muitas opniões sobre esta nova abordagem de web2.0, desenvolvedores nacionais renomados ja se expressaram sobre esta questão, a web2.0 é boa para diversas situações, mas [...]]]></description>
			<content:encoded><![CDATA[<p>Eu tenho utilizado exaustivamente a biblioteca de componentes <a HREF="http://developer.yahoo.com/yui" TARGET="_blank" TITLE="YUI !">YUI (Yahoo User Interface) </a>para re-redesenhar a interface dos sistemas web que desenvolvo no meu atual local de trabalho.</p>
<p>Acredito que há muitas opniões sobre esta nova abordagem de web2.0, desenvolvedores nacionais renomados ja se expressaram sobre esta questão, a web2.0 é boa para diversas situações, mas não tudo. Um exemplo é o Yahoo Mail Beta, é legal e bonito mas é lento demais, sem falar que no firefox qualquer ação o processamento vai para 100% e isso é caos!. É tudo uma questão de bom senso, usar web2.0 para dá um turbinada na aplicação com validações e chamadas assíncronas, melhorar a usabilidade ou ainda aplicar um comportamento para um determinado componente na tela é uma boa opção. Mas usar web2.0 para emular sistemas que rodam no desktop é complicado, por que são muitos eventos, muitos widgets, muitas regras de css(posicionamento, imagens e etc) e acaba que a aplicação fica extremamente lenta e de difícil manutenção, com certeza não é o que queremos.</p>
<p><span id="more-154"></span></p>
<p>Para quem não conhece, a YUI é uma biblioteca de componentes reutilizaveis feitos em javascript, dhtml e css para facilitar a construção de <a HREF="http://en.wikipedia.org/wiki/Rich_Internet_application" TARGET="_blank">RIA (Rich Internet Applications) </a> , a YUI é produzida primariamente pelos yahoo hackers e também pela comunidade.  É utilizada extensivamente no portal do Yahoo.com[.br] para os softwares web do Yahoo!, com isso podemos entender que é um projeto amplamente suportado. A YUI! é software livre, cuja a licença é uma variação da licença BSD e pode ser encontrada <a TARGET="_blank" HREF="http://developer.yahoo.com/yui/license.txt">aqui.</a></p>
<p>Como eu ainda não postei nada sobre a YUI, neste artigo estarei descrevendo sua utilização básica com um exemplo utilizando o <a TARGET="_blank" HREF="http://www.google.com.br/search?hl=pt-BR&amp;q=define%3Awidget&amp;btnG=Pesquisa+Google&amp;meta=">widget</a> DataTable, para o exemplo ficar ainda mais interessante irei também descrever como customizar a ordenação crescente e decrescente. As informações de exemplo que vamos utilizar são informações referentes a veículos, vamos customizar a ordenação por Placa, a YUI já possui funções de ordenação padrões e que trabalham com alguns tipos definidos.</p>
<p>No inicío de cada bloco de código estarei usando a sigla [COD_[1-9]{2}] para identificar o bloco de código quando o estiver referenciando em outros trechos do artigo, para facilitar a localização.</p>
<p>Pré-requisitos:</p>
<ol>
<li> Conhecimentos básicos em JavaScript.</li>
<li> Você precisa <a HREF="http://developer.yahoo.com/yui/download/" TARGET="_blank">baixar a YUI</a> e carregar os componentes na sua página html ou carregá-las apartir do próprio site do yahoo, para saber mais sobre este serviço entre no <a HREF="http://developer.yahoo.com/yui/articles/hosting/" TARGET="_blank">site.</a>. No desenrolar deste artigo usarei o serviço de hosting da YUI provido pelo Yahoo.</li>
</ol>
<p>Primeiramente é preciso incluir os scripts e os estilos no header do html:</p>
<ul>
<li>Estilos: <strong> [COD_01]</strong><br />
<coolcode lang="html"></p>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/reset/reset-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/datatable/assets/datatable.css">
</coolcode>
</li>
<li>Mais estilo(Sobrecarrega algumas regras css, para fins de personalização): <strong>[COD_02]</strong><br />
<coolcode lang="html"></p>
<style type="text/css">
#exemplo {margin:1em;}
#exemplo table {border-collapse:collapse;}
#exemplo th, #exemplo td {border:1px solid #000;padding:.25em;}
#exemplo th {background-color:#696969;color:#fff;} 
#exemplo .yui-dt-odd {background-color:#eee;}
#exemplo em {font-style:italic;}
#exemplo strong {font-weight:bold;}
#exemplo .big {font-size:136%;}
#exemplo .small {font-size:77%}
</style>
<p></coolcode>
</li>
<li>YUI Scripts: <strong>[COD_03]</strong><br />
<coolcode lang="html"><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/yahoo/yahoo-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/dom/dom-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/event/event-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/dragdrop/dragdrop-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/datasource/datasource-beta-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/datatable/datatable-beta-min.js"></script><br />
</coolcode>
</li>
<li>JavaScript para criação do DataTable:<strong>[COD_04]</strong><br />
<coolcode lang="javascript"><br />
	function init()<br />
	{<br />
		/**<br />
		 * Configura namespace para não haver conflitos referentes a nomes<br />
		 * e para facilitar a organização de objetos e etc.<br />
		 */</p>
<p>		 YAHOO.namespace(&#8220;exemplo&#8221;);</p>
<p>		 /**<br />
		  * Dados que serão usados no DataTable<br />
		  */<br />
		  YAHOO.exemplo.dados = {<br />
		  	veiculos: [<br />
		  		{placa:"JTX-0506", vistoria:new Date(2004, 2, 21), km:110000},<br />
		  		{placa:"JYZ-0469", vistoria:new Date(2001, 8, 10), km:65000},<br />
		  		{placa:"JTA-4591", vistoria:new Date(2000, 9, 5), km:45036},<br />
		  		{placa:"XYZ-4587", vistoria:new Date(2000, 5, 8), km:456978}<br />
		  	]<br />
		  };</p>
<p>		/**<br />
 		* Informações do cabeçalho para o widget.ColumnSet possa retornar<br />
 		* um objeto adapter(adaptador) para a renderização do DataTable.<br />
 		*/<br />
    	var Cabecalhos = [<br />
	    	{key:"placa", title:"Placa", sortable:true},<br />
    		{key:"vistoria", type:"date", sortable:true, resizeable:true},<br />
    		{key:"km", type:"number", sortable:true, resizeable:true}<br />
		];</p>
<p>		/**<br />
	 	* Objeto &#8220;configurador&#8221; do cabecalho<br />
	 	*/<br />
		var ConfiguraColunas = new YAHOO.widget.ColumnSet(Cabecalhos);</p>
<p>		/**<br />
	 	* Objeto DataSource é responsável por pegar, tratar e adaptar<br />
	 	* as informações para que o objeto DataTable possa renderizá-las<br />
	 	*/<br />
		var CapturaInformacoes = new YAHOO.util.DataSource(YAHOO.exemplo.dados.veiculos);<br />
			CapturaInformacoes.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;<br />
			CapturaInformacoes.responseSchema = {<br />
				fields: ["placa","vistoria","km"]<br />
		};</p>
<p>		/**<br />
	 	* Enfim cria o table<br />
                * O primeiro parametros é onde(div) será renderizado o seu DataTable<br />
	 	*/<br />
		var DataTable = new YAHOO.widget.DataTable(&#8220;exemplo&#8221;,<br />
		ConfiguraColunas, CapturaInformacoes, {caption:&#8221;Exemplo básico de DataTable&#8221;});<br />
	}</p>
<p>	/**<br />
	 * Quando a arvore DOM estiver carregada executa a função!<br />
	 * o YAHOO.util.Event é um utilitário do YUI para trabalhar com eventos<br />
	 */<br />
	YAHOO.util.Event.onDOMReady(init);<br />
</coolcode>
</li>
<li>Você pode fechar o header do html e então no corpo(body) colocar aonde o DataTable será renderizado, no caso: (Sem isso o DataTable não irá ser renderizado)<br />
<coolcode lang="html"></p>
<div id="exemplo"></div>
<p></coolcode>
</li>
</ul>
<p>Resultado:</p>
<p><iframe align="center" src="http://danielmartins.eti.br/blog/exemplos/datatable.html"></iframe></p>
<p>Como podemos constatar no resultado acima as duas ordenações que realmente funcionam são as colunas por data e por quilometragem, pois o YUI reconhece os tipos informados nas linhas 28 e 29 do JavaScript , os tipos reconhecidos pela YUI são <strong>&#8220;string&#8221;, &#8220;number&#8221;, &#8220;date&#8221;, &#8220;currency&#8221;, &#8220;email&#8221; e &#8220;link&#8221;</strong>. Você pode clickar no cabeçalho da coluna <strong>&#8220;Placa&#8221;</strong> e você verá que a lógica de ordenação aplicada é a do tipo string, ou seja, pelas letras iniciais, mas precisamos que essa coluna seja ordenada pelo numero final da placa, pois sabemos que o pagamento do ipva de um veículo vence no mês do último número da placa, por exemplo final de placa 1 vence em Janeiro, 2 em Fevereiro e assim sucessivamente e as placas com final 0 vence em outubro.</p>
<p>Precisamos customizar a ordenação, vamos criar primeiramente as funções para ordenação crescente e decrescente, a YUI possui duas funções utilitárias para ajudar-nos nesta tarefa, são a <strong>YAHOO.util.Sort.compareAsc</strong> e a <strong>YAHOO.util.Sort.compareDesc<br />
</strong>, a primeira para comparação crescente e a segunda para comparação decrescente, vejamos sua utilização já aplicando ao problema que nós temos de ordenar os dados pelo final da placa, a seguir: <strong>[COD_05]</strong></p>
<p><coolcode lang="javascript"><br />
/**<br />
 * Ordenação Crescente<br />
 *<br />
 */<br />
var ordByPlacaAsc = function(a,b){<br />
        // Pega o final da primeira placa<br />
	var finalPlaca1 = a.placa.charAt(a.placa.length &#8211; 1);<br />
         // Pega o final da segunda placa<br />
	var finalPlaca2 = b.placa.charAt(b.placa.length &#8211; 1);</p>
<p>	var compFnc = YAHOO.util.Sort.compareAsc<br />
	// transforma em inteiro multiplicando por 1 e joga para<br />
	// a função utilitária de comparação<br />
	var resultado = compFnc(finalPlaca1*1,finalPlaca2*1);<br />
	return resultado;<br />
}</p>
<p>/**<br />
 * Ordenação Decrescente<br />
 *<br />
 */<br />
var ordByPlacaDesc = function(a,b){<br />
       // Pega o final da primeira placa<br />
       var finalPlaca1 = a.placa.charAt(a.placa.length &#8211; 1);<br />
	// Pega o final da segunda placa<br />
	var finalPlaca2 = b.placa.charAt(b.placa.length &#8211; 1);</p>
<p>	var compFnc = YAHOO.util.Sort.compareDesc</p>
<p>	// transforma em inteiro multiplicando por 1 e joga para<br />
	// a função utilitária de comparação<br />
	var resultado = compFnc(finalPlaca1*1,finalPlaca2*1);<br />
	return resultado;<br />
}<br />
</coolcode></p>
<p>Como podemos ver, basicamente temos o mesmo procedimento só que com funções utilitárias diferentes, você pode fazer a comparação nas linhas <strong>11 e 28</strong>, as funções utilitárias fazem a comparação e para a <strong>YAHOO.util.sort.compareAsc</strong> retornam <strong>-1</strong> se o primeiro argumento for < (menor que) o segundo argumento, 0 se o primeiro argumento é igual( == ) ao segundo argumento e 1 se o primeiro argumento é >(maior que) o segundo argumento e o inverso para a <strong>YAHOO.util.sort.compareDesc</strong>, ou seja, <strong>-1</strong> se o primeiro argumento for > (maior que) o segundo argumento, 0 se o primeiro argumento é igual( == ) ao segundo argumento e 1 se o primeiro argumento é < (menor que) o segundo argumento e assim a YUI vai ordenando os dados no <strong>DataTable</strong>, mas você está sentindo falta de algo ?! sim!, aonde parametrizamos para que o YUI utilize estas funções customizadas de ordenação ?!</p>
<p><strong>R:</strong> No bloco de código <strong>[COD_04]</strong> na linha <strong>27</strong> é possível passar um argumento chamado <strong>sortOptions</strong> contendo as informações referentes a customização da ordenação, veja um exemplo de como fica a <strong>linha 27</strong> inserindo as funções de ordenação:</p>
<p><coolcode lang="javascript"><br />
{key:&#8221;placa&#8221;, title:&#8221;Placa&#8221;, sortable:true, sortOptions:{ascFunction:ordByPlacaAsc,descFunction:ordByPlacaDesc}},<br />
</coolcode></p>
<p>Como resultado podemos ver a ordenação sendo feita pelo último número da Placa do veículo:</p>
<p>Resultado:</p>
<p><iframe align="center" src="http://danielmartins.eti.br/blog/exemplos/datatable1.html"></iframe></p>
<p>Já me estendi demais, espero que eu tenha conseguido exemplificar o uso básico do widget DataTable da YUI e de como customizar a ordenação, qualquer sugestão, correção ou crítica construtiva é bem vinda. Ajude-me a melhorar a qualidade dos artigos que escrevo.</p>
<p>Links essenciais que me serviram de consulta e para quem deseja exemplos mais ricos:<br />
<a href="http://developer.yahoo.com/yui">http://developer.yahoo.com/yui</a><br />
<a href="http://developer.yahoo.com/yui/examples/datatable/">http://developer.yahoo.com/yui/examples/datatable/</a><br />
<a href="http://developer.yahoo.com/yui/datatable/">http://developer.yahoo.com/yui/datatable/</a><br />
<a href="http://developer.yahoo.com/yui/docs/module_datatable.html">http://developer.yahoo.com/yui/docs/module_datatable.html</a><br />
<a href="http://www.quirksmode.org/js/strings.html">http://www.quirksmode.org/js/strings.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Atire a primeira pedra quem nunca foi iluminado no caminho das trevas da ignorância pela Wikipédia !</title>
		<link>http://danielmartins.eti.br/blog/2007/02/10/atire-a-primeira-pedra-quem-nunca-foi-iluminado-no-caminho-das-trevas-da-ignorancia-pela-wikipedia/</link>
		<comments>http://danielmartins.eti.br/blog/2007/02/10/atire-a-primeira-pedra-quem-nunca-foi-iluminado-no-caminho-das-trevas-da-ignorancia-pela-wikipedia/#comments</comments>
		<pubDate>Sat, 10 Feb 2007 05:24:24 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[FOSS]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/?p=50</guid>
		<description><![CDATA[Ajude a Wikipédia a continuar o ótimo trabalho que vem desenvolvendo ! Wikipédia já é uma referência para estudos e para disseminação de conhecimento!. Quem nunca passou pelo sítio de informações da Wikipédia ?. Wikipédia já é fonte de referência aos estudantes de ensino fundamental até ensino superior. Eu queria muito poder doar diretamente mas [...]]]></description>
			<content:encoded><![CDATA[<p>Ajude a Wikipédia a continuar o ótimo trabalho que vem desenvolvendo !</p>
<p>Wikipédia já é uma referência para estudos e para disseminação de conhecimento!. Quem nunca passou pelo sítio de informações da Wikipédia ?. Wikipédia já é fonte de referência aos estudantes de ensino fundamental até ensino superior.</p>
<p>Eu queria muito poder doar diretamente mas não estou em um bom momento financeiro e graças ao br-linux.org encontrei um meio de poder ajudar a Wikipédia, valeu Augusto Campos(br-linux.org)!.</p>
<p><a href="http://daniel.jb0.org/?attachment_id=51" rel="attachment wp-att-51" title="Wikipédia"><img src="http://daniel.jb0.org/wp-content/uploads/2007/02/wikipedia_logo.jpg" alt="Wikipédia" /></a></p>
<p><strong>Ajude a manter a Wikipédia no ar &#8211; mesmo sem colocar a mão no bolso!</strong><br />
O <a href="http://br-linux.org/"></a>BR-Linux.org lançou uma <a href="http://br-linux.org/linux/campanha-wikipedia">campanha</a> para ajudar a Wikimedia Foundation a manter a Wikipédia no ar. Se você puder <a href="http://wikimediafoundation.org/wiki/Coleta_de_fundos">doar diretamente</a>, é sempre a melhor opção. Mas se não puder, veja as <a href="http://br-linux.org/linux/campanha-wikipedia">regras da promoção do BR-Linux</a> e ajude a divulgar &#8211; quanto mais divulgação, maior será a doação do BR-Linux, e você ainda concorre a um pen drive!</p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/02/10/atire-a-primeira-pedra-quem-nunca-foi-iluminado-no-caminho-das-trevas-da-ignorancia-pela-wikipedia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

