﻿<?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>TidBits&#187; Javascript</title>
	<atom:link href="http://www.tidbits.com.br/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tidbits.com.br</link>
	<description>Desenvolvimento de Front End</description>
	<lastBuildDate>Wed, 18 Jan 2012 00:41:33 +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>Porque a chave no Javascript deve ser aberta na linha de cima</title>
		<link>http://www.tidbits.com.br/porque-a-chave-no-javascript-deve-ser-aberta-na-linha-de-cima</link>
		<comments>http://www.tidbits.com.br/porque-a-chave-no-javascript-deve-ser-aberta-na-linha-de-cima#comments</comments>
		<pubDate>Wed, 18 Jan 2012 00:41:33 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Padrões]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1793</guid>
		<description><![CDATA[O Visual Studio, além de ser uma IDE mega pesada, tem um problema que gera intrigas entre equipes: ele abre por padrão uma função no JavaScript colocando a chave na linha de baixo. Parece algo mínimo, mas irrita profundamente quem está acostumado a trabalhar da forma correta. Porque forma correta? Simples, porque pode dar erro [...]]]></description>
			<content:encoded><![CDATA[<p>O Visual Studio, além de ser uma IDE mega pesada, tem um problema que gera intrigas entre equipes: ele abre por padrão uma função no JavaScript colocando a chave na linha de baixo. </p>
<p>Parece algo mínimo, mas irrita profundamente quem está acostumado a trabalhar da forma correta.</p>
<p>Porque forma correta? Simples, porque pode dar erro se colocar a chave na linha de baixo.</p>
<p>Pensem na função abaixo getUser que retorna um objeto em JavaScript</p>
<pre class="brush: jscript; title: ; notranslate">
function getUser(){
	return {
		nome:'Danilo',
		idade:28
	}
}

getUser() // retorna um objeto
</pre>
<p>Se fosse pra deixar a chave embaixo, ficaria assim:</p>
<pre class="brush: jscript; title: ; notranslate">
function getUser()
{
	return
	{
		nome:'Danilo',
		idade:28
	}
}

getUser() // retorna undefined
</pre>
<p>Só que há um problema: pelo fato do ponto e vírgula indicando quebra de linha ser no JavaScript ser opcional, o return não entende que é pra retornar um objeto e encerra a função ali, retornando undefined.</p>
<p>E tem um caso pior, que simplesmente dá erro de sintaxe:</p>
<pre class="brush: jscript; title: ; notranslate">
function getPosition()
{
   return
   {
       top:32,
       left:50
   }
}
// dá erro &quot;SyntaxError: Unexpected token :&quot;
</pre>
<p>E se fosse feito com os braces na linha de cima, daria certo.</p>
<p>O incrível é que mesmo com esse argumento, tem programador que não dá o braço a torcer e insiste dizendo que JavaScript veio do java e no java se programa assim. ERRADO, JavaScript veio de <a href="http://pt.wikipedia.org/wiki/Scheme" target="_blank">Scheme</a> e qualquer livro de <a href="http://novatec.com.br/livros/padroesjavascript/" target="_blank">Padrões em Javascript</a> vai aconselhar abrir o bloco com a chave na linha de cima.</p>
<p>Dá pra configurar isso no Visual Studio 2010 (no 2008 deve dar também).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/porque-a-chave-no-javascript-deve-ser-aberta-na-linha-de-cima/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My-Guitar &#8211; Um Guitar Hero em HTML5, CSS3 e JavaScript</title>
		<link>http://www.tidbits.com.br/my-guitar-um-guitar-hero-em-html5-e-javascript</link>
		<comments>http://www.tidbits.com.br/my-guitar-um-guitar-hero-em-html5-e-javascript#comments</comments>
		<pubDate>Fri, 16 Jul 2010 19:47:23 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[canvas]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1559</guid>
		<description><![CDATA[Nessa sexta-feira, teve um café com browser, um evento sediado pela w3c Brasil onde ela convida fabricantes de browsers a falarem dos seus produtos, por lá já passou o pessoal do Ópera, Firefox e até da Internet Explorer. Porém, nessa edição o formato foi diferente, o tema era HTML5 e os convidados foram o Élcio [...]]]></description>
			<content:encoded><![CDATA[<p>Nessa sexta-feira, teve um <a href="http://www.w3c.br/cafecombrowser/" target="_blank">café com browser</a>, um evento sediado pela w3c Brasil onde ela convida fabricantes de browsers a falarem dos seus produtos, por lá já passou o pessoal do Ópera, Firefox e até da Internet Explorer.</p>
<p>Porém, nessa edição o formato foi diferente, o tema era HTML5 e os convidados foram o Élcio da <a href="http://www.google.com/url?sa=t&#038;source=web&#038;cd=2&#038;ved=0CB0QFjAB&#038;url=http%3A%2F%2Fvisie.com.br%2F&#038;ei=87BATKv0AoWMuAfPvun4Dg&#038;usg=AFQjCNFRp9DmciStW-P4oIT7e9TKLFLPZQ&#038;sig2=b6ri-6_R03yjbs13n8dnQA" target="_blank">Visie</a> (empresa de treinamento e desenvolvimento web que vai oferecer um curso de html5) e a <a href="http://clickaqui.agenciaclick.com.br/" target="_blank">AgênciaClick</a>, onde esteve presente eu (Programador de Interface), Robson Dantas (Gerente de Tecnologia) e Ricardo Murer (Diretor de Tecnologia).</p>
<p>Durante a nossa apresentação, mostramos alguns protótipos de estudos que fizemos aqui na AgênciaClick, entre eles um player usando a tag &lt;audio&gt; simulando a interface do winamp e um jogo simulando o Guitar Hero:</p>
<p><img src="http://www.tidbits.com.br/wp-content/uploads/2010/07/escolha_sua_musica.jpg" alt="Escolha Sua Música" title="Escolha Sua Música" width="410" height="410" class="aligncenter size-full wp-image-1560" /></p>
<p>O jogo está <a href="http://www.tidbits.com.br/download/exemplos/my-guitar.zip" >disponível aqui</a>. Funciona para Chrome 5+, Ópera 10.5+, Safari 5+ e Firefox 3.5+ (sendo que para Firefox, é necessário estar hospedado em um servidor, ou seja, se você abrir o html como um arquivo, não funciona por questão de segurança do Firefox).</p>
<p>O jogo usa os conceitos de &lt;audio&gt; e &lt;canvas&gt; do HTML5, CSS3 e bastante javascript. Eu desenvolvi o game em 4 dias, ou seja, dá pra melhorar muito, devo aprimorar o código, colocar Ranking Online, mais músicas, etc.</p>
<p>Mas a idéia inicial era mostrar que pode ser feito um jogo em html5, com 20kb de JavaScript que antes só era possível ser desenvolvido em flash.</p>
<p><img src="http://www.tidbits.com.br/wp-content/uploads/2010/07/jogo_guitar_hero_em_html5.jpg" alt="Jogo Guitar Hero em HTML5" title="Jogo Guitar Hero em HTML5" width="410" height="410" class="aligncenter size-full wp-image-1561" /></p>
<p><img src="http://www.tidbits.com.br/wp-content/uploads/2010/07/game_over_guitar_hero_em_html5.jpg" alt="Game Over - Guitar Hero em HTML5" title="Game Over - Guitar Hero em HTML5" width="410" height="410" class="aligncenter size-full wp-image-1562" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/my-guitar-um-guitar-hero-em-html5-e-javascript/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Snake &#8211; Jogo em html5 usando Canvas</title>
		<link>http://www.tidbits.com.br/snake-jogo-em-html5-usando-canvas</link>
		<comments>http://www.tidbits.com.br/snake-jogo-em-html5-usando-canvas#comments</comments>
		<pubDate>Thu, 06 May 2010 15:06:14 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[canvas]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[jogo]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1544</guid>
		<description><![CDATA[Nos próximos posts vou escrever um pouco das experiências em html5 que ando fazendo. Pra iniciar, fiz um jogo simples daqueles que todo celular tem, usando somente o elemento Canvas. O Canvas funciona como se fosse um &#8220;shape&#8221; do photoshop, você cria um elemento e lá você pode desenhar literalmente, circulos, quadrados, linhas, pontos, colocar [...]]]></description>
			<content:encoded><![CDATA[<p>Nos próximos posts vou escrever um pouco das experiências em html5 que ando fazendo.</p>
<p>Pra iniciar, fiz <a href="http://www.tidbits.com.br/download/html5/snake/snake.html" target="_blank">um jogo simples</a> daqueles que todo celular tem, usando somente o elemento Canvas.</p>
<p>O Canvas funciona como se fosse um &#8220;shape&#8221; do photoshop, você cria um elemento e lá você pode desenhar literalmente, circulos, quadrados, linhas, pontos, colocar backgrounds, usar degradê, etc.</p>
<p>O Canvas não dá suporte ao ie6, ie7 e ie8. Existe um elemento similar pra eles chamado &#8220;shape&#8221; e existem algumas libs em javascript que traduz automaticamente tudo o que for desenhado em canvas pra shape, ou seja, você chama o js que ele se vira com o resto. No caso, usei o <a href="http://code.google.com/p/explorercanvas/downloads/list" target="_blank">explorercanvas</a> (dica do Koji), mas também tem o html5.js e o canvas.js disponível pra gente usar.</p>
<p><a href="http://www.tidbits.com.br/download/html5/snake/snake.html" target="_blank" title="Clique na imagem para jogar"><img src="http://www.tidbits.com.br/wp-content/uploads/2010/05/jogo-em-html5.png" alt="Jogo em html5" title="Jogo em html5" width="523" height="427" class="aligncenter size-full wp-image-1545" /></a></p>
<p>O jogo é bem simples, não tem muitos recursos, poderia ter ranking, som, opções e um monte plus mas não era essa a intenção do primeiro post sobre html5. O jogo tem 8kb (somando html / css  e javascript ) pros browsers que suportam canvas e 19kb para os que não suportam.  não usa nenhum framework de javascript (do tipo jquery, mootols, prototype) e não faz requisição de nenhuma imagem, tudo que está na tela foi desenhado em canvas com javascript.</p>
<p>Deixei disponível o <a href="http://www.tidbits.com.br/download/html5/snake/snake.zip"> código fonte </a> e para jogar é só clicar na imagem ou <a href="http://www.tidbits.com.br/download/html5/snake/snake.html" target="_blank"> entrar aqui</a></p>
<p>Por sinal, recomento o Chrome ou Opera 10.5 que são os browsers mais rápidos da atualidade.</p>
<p>Quem jogar, fala quantos pontos fez.<br />
=)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/snake-jogo-em-html5-usando-canvas/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tradução de idiomas usando a API Ajax de idioma do Google</title>
		<link>http://www.tidbits.com.br/traducao-de-idiomas-usando-a-api-ajax-de-idioma-do-google</link>
		<comments>http://www.tidbits.com.br/traducao-de-idiomas-usando-a-api-ajax-de-idioma-do-google#comments</comments>
		<pubDate>Tue, 18 Aug 2009 18:08:47 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Ferramentas da Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tradução]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1507</guid>
		<description><![CDATA[É um serviço relativamente novo, pouco usado, mas muito interessante. A ferramenta de idiomas do Google, acredito que todo mundo já conhece. Porém pouca gente sabe que o Google oferece uma API em ajax para tradução. E pra facilitar ainda mais, existe também um plugin de jQuery chamado jquery-translate que interage com a API do [...]]]></description>
			<content:encoded><![CDATA[<p>É um serviço relativamente novo, pouco usado, mas muito interessante.</p>
<p>A <a href="http://www.google.com.br/language_tools?hl=pt-BR" target="_blank">ferramenta de idiomas</a> do Google, acredito que todo mundo já conhece. Porém pouca gente sabe que o Google oferece uma <a href="http://code.google.com/intl/pt-BR/apis/ajaxlanguage/" target="_blank">API em ajax para tradução</a>.</p>
<p>E pra facilitar ainda mais, existe também um <a href="http://code.google.com/p/jquery-translate/" target="_blank">plugin de jQuery chamado jquery-translate</a> que interage com a API do google, aí fica bem simples:</p>
<p><img src="http://www.tidbits.com.br/download/_images/copy.gif" alt="copy of tidbits"/>Para traduzir um texto basta chamar o node do html pelo seletor do jQuery e chamar a função translate:</p>
<pre class="brush: jscript; title: ; notranslate">
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-translate-1.3.9.min.js&quot;&gt;&lt;/script&gt;
	$(document).ready(function(){
		$('button#traduzir').click(function(){
			$('div#texto').translate('en')
		});
	});
</pre>
<p>No exemplo acima, quando clicarem no botão traduzir, irá traduzir todo o conteúdo da div id=&#8221;texto&#8221; para o inglês, a API do Google detecta automaticamente o idioma original.</p>
<h4>Veja um demo abaixo que eu fiz:</h4>
<p>Clique em uma das bandeiras abaixo do texto para traduzir para o idioma selecionado:</p>
<p><iframe width="460" height="310" frameborder="0" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/traducao/demo.html"></iframe>	</p>
<p>Quem quiser entender, deixei o <a href="http://www.tidbits.com.br/download/exemplos/traducao/traducao.zip">exemplo disponível pra download</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/traducao-de-idiomas-usando-a-api-ajax-de-idioma-do-google/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>O Bug do parse XML no IE com o ajax do jQuery</title>
		<link>http://www.tidbits.com.br/o-bug-do-parse-xml-no-ie-com-o-ajax-do-jquery</link>
		<comments>http://www.tidbits.com.br/o-bug-do-parse-xml-no-ie-com-o-ajax-do-jquery#comments</comments>
		<pubDate>Thu, 04 Jun 2009 04:13:07 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[parseXML]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1485</guid>
		<description><![CDATA[Post mais técnico seria impossível né? Enfim, se você leu o título e está lendo até agora é porque sabe do problema que estou falando: o ajax do jQuery tem um problema quando se trabalha com XML, o problema só acontece adivinha onde? No nosso querido browser Internet Explorer. Mas como quase tudo na vida, [...]]]></description>
			<content:encoded><![CDATA[<p>Post mais técnico seria impossível né? Enfim, se você leu o título e está lendo até agora é porque sabe do problema que estou falando: o ajax do jQuery tem um problema quando se trabalha com XML, o problema só acontece adivinha onde? No nosso querido browser Internet Explorer.</p>
<p>Mas como quase tudo na vida, tem solução:</p>
<p>Solução número 1 &#8211; Pare de trabalhar com XML e comece a usar <a href="http://www.tidbits.com.br/o-que-e-json-como-e-quando-utilizar" target="_blank">JSON</a>.</p>
<p>Solução número 2 &#8211; Existe um parseXML que funciona pro IE. E alguém de muita boa vontade que se chama Jonathan Sharp fez disso um plugin que pra jQuery que se chama <a href="http://outwestmedia.com/jquery-plugins/xmldom/" target="_blank"> XMLDOM </a>.</p>
<p>E como funciona?</p>
<p>assim:</p>
<h3> Forma normal (que normalmente dá erro no IE) </h3>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
	url: 'xml/erros.xml,
	type: &quot;GET&quot;,
	dataType: &quot;xml&quot;,
	contentType: &quot;application/x-www-form-urlencoded; charset=UTF-8&quot;,
	success: function(xml){
		var htm ='';
		$(xml).find('item').each(function(n){
			htm += $(this).text();
		}
		$('#erros').append(htm);
	}
});
</pre>
<h3>Com o plugin XMLDOM</h3>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
	url: 'xml/erros.xml,
	type: &quot;GET&quot;,
	dataType: &quot;html&quot;,
	contentType: &quot;application/x-www-form-urlencoded; charset=UTF-8&quot;,
	success: function(xml){
		var htm ='';
		$.xmlDOM(xml).find('item').each(function(n){
			htm += $(this).text();
		}
		$('#erros').append(htm);
	}
});
</pre>
<p>E pra quem quiser evitar o trabalho, pode baixar o plugin direto <a href="http://www.tidbits.com.br/download/_scripts/jquery-xmldom.js" target="_blank">aqui</a>.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/o-bug-do-parse-xml-no-ie-com-o-ajax-do-jquery/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Firefox 3.5 Beta 4 executa Javascript mais rápido ainda</title>
		<link>http://www.tidbits.com.br/firefox-35-beta-4-executa-javascript-mais-rapido-ainda</link>
		<comments>http://www.tidbits.com.br/firefox-35-beta-4-executa-javascript-mais-rapido-ainda#comments</comments>
		<pubDate>Wed, 06 May 2009 17:35:05 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ubiquity]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1471</guid>
		<description><![CDATA[Primeiro devo admitir, dei uma sumida, caiu o número de posts aqui, mas tá dificil conseguir tempo, ultimamente, além do trabalho, estou fazendo freela e estudando e meio sem criatividade pra postar, espero que seja breve. No post de hoje vou falar sobre duas coisas que me ajudam muito na minha profissão, Firefox e Javascript. [...]]]></description>
			<content:encoded><![CDATA[<p>Primeiro devo admitir, dei uma sumida, caiu o número de posts aqui, mas tá dificil conseguir tempo, ultimamente, além do trabalho, estou fazendo freela e estudando e meio sem criatividade pra postar, espero que seja breve.</p>
<p>No post de hoje vou falar sobre duas coisas que me ajudam muito na minha profissão, Firefox e Javascript. </p>
<p>Ontem ví uma <a href="http://pcworld.uol.com.br/noticias/2009/04/29/firefox-3-5-executa-javascript-19-mais-rapido-que-versao-anterior/" target="_blank">notícia</a>, que a versão 3.5 Beta 4 do Firefox (que está demorando um tantão pra ser lançada), tem <strong>um algoritmo que executa Javascript 19% mais rápido</strong> do que a versão Beta 3, esta que também já é mais rápida que a versão atual do Firefox. Isso é bom pra quem é programador de interface, e principalmente pro usuário.</p>
<p><strong>Comecei a usar o Firefox em meados de 2005, achei legal porque &#8220;tinha abas&#8221;</strong>. Na época eu era programador back end, e como a maioria, pouco me importava se meus sites rodavam em outro browser ou não. De lá pra cá eu, as empresas, as agências, os clientes, os navegadores, os sites e até os usuários mudaram. Hoje temos (todos nós) o conceito de webstandards muito forte, e hoje os próprios usuários também são mais exigentes&#8230; normalmente temos diversas opções pra qualquer tipo de serviço web, então se um site não funcionou no navegador do usuário, ele não muda de navegador, muda de site&#8230; procura por outro serviço que faz a mesma coisa, é claro que não serve pra tudo (como sites de bancos, malditos).</p>
<p><strong>Comecei a programar em Javascript pois detestava sites em flash</strong>, e comecei a ver que em algumas aplicações simples, dava pra fazer o mesmo efeito em Javascript.</p>
<p>E depois, quando &#8220;descobri&#8221; o firebug, ficou tudo mais fácil. </p>
<p>Mais uma vez o Firefox contribui diretamente e incentiva o uso de Firefox pra desenvolvimento de interação. </p>
<p>Além do mais, <strong>até nas extensões do Firefox (como GreaseMonkey e Ubiquity) é possível fazer coisas muito interessantes usando somente javascript</strong>.</p>
<p>Enfim, usem firefox&#8230; =)</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/firefox-35-beta-4-executa-javascript-mais-rapido-ainda/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>jQuerify &#8211; Adicionando jQuery para testar em páginas online</title>
		<link>http://www.tidbits.com.br/jquerify-adicionando-jquery-para-testar-em-paginas-online</link>
		<comments>http://www.tidbits.com.br/jquerify-adicionando-jquery-para-testar-em-paginas-online#comments</comments>
		<pubDate>Mon, 04 May 2009 13:40:04 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1474</guid>
		<description><![CDATA[Nada mais fácil do que trabalhar com jQuery, e nada melhor pra aprender do que entender sites alheios. Com o jQuerify (que acabou de ser atualizado) é possível (com a ajuda do firebug pra Firefox, debug bar pra IE, etc&#8230;), executar comandos jQuery (como jQuery.ajax ou qualquer outro) mesmo se o site não tiver jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>Nada mais fácil do que trabalhar com jQuery, e nada melhor pra aprender do que entender sites alheios.</p>
<p>Com o <a href="http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet" target="_blank">jQuerify</a> (que acabou de ser atualizado) é possível (com a ajuda do firebug pra Firefox, debug bar pra IE, etc&#8230;), executar comandos jQuery (como jQuery.ajax ou qualquer outro) mesmo se o site não tiver jQuery carregado.</p>
<p>Basta executar um script (que o chamamos de jQuerify) no seu depurador de javascript ( no firebug, clique em console, cole o script no box da direita e clique em &#8220;Executar&#8221; ) e pronto, o script invoca o invoca o jQuery. Depois, para testar, ao invés de usar $ use o jQuery nos seus seletores.</p>
<p>Segue script abaixo.</p>
<pre class="brush: jscript; title: ; notranslate">
(function() {
var s=document.createElement('script'),
	el=document.createElement('div'),
	b=document.getElementsByTagName('body')[0];
var otherlib=false,
	startCounter=tryCounter=10,
	delay=250,
	msg='';
s.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js');
el.style.position='fixed';
el.style.height='32px';
el.style.width='220px';
el.style.marginLeft='-110px';
el.style.top='0';
el.style.left='50%';
el.style.padding='5px 10px 5px 10px';
el.style.fontSize='12px';
el.style.color='#222';
el.style.backgroundColor='#f99';

if(typeof jQuery!='undefined') {
  msg='This page already using jQuery v'+jQuery.fn.jquery;
  return showMsg();
} else {
  if(typeof $=='function') {
	otherlib=true;
  }
  document.getElementsByTagName('head')[0].appendChild(s);
}

function showMsg() {
  el.innerHTML=msg;
  b.appendChild(el);
  window.setTimeout(function() {
	if (typeof jQuery=='undefined') {
	  b.removeChild(el);
	} else {
	  jQuery(el).fadeOut('slow',function() {
		jQuery(this).remove();
	  });
	  if (otherlib) {
		$jq=jQuery.noConflict();
	  }
	}
  } ,2500);
}

var tryjQuery=function() {
  setTimeout(function() {
	if (typeof jQuery=='undefined') {
	  if (tryCounter) {
		tryCounter--;
		tryjQuery();
	  } else {
		msg='Sorry, but after ' + startCounter + ' attempts, jQuery hasn\'t loaded';
		showMsg();
	  }
	} else {
	  msg='This page is now jQuerified with v' + jQuery.fn.jquery;
	  if (otherlib) {msg+=' and noConflict(). Use $jq(), not $().';}
	  showMsg();
	}
  }, delay);
};
tryjQuery();
})();
</pre>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/jquerify-adicionando-jquery-para-testar-em-paginas-online/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Manipulação de array em Javascript &#8211; Parte dois, avançado</title>
		<link>http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-dois-avancado</link>
		<comments>http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-dois-avancado#comments</comments>
		<pubDate>Tue, 14 Apr 2009 17:33:57 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1427</guid>
		<description><![CDATA[No último post eu mostrei como declarar e obter valores de um Array, hoje vamos a segunda parte do post. O Array é um objeto javascript, e existe métodos pra ajudar a manipulçao dos seus elementos. Nesse post vou falar e demonstrar os principais métodos que são usados, são eles: sort() e reverse() pop() e [...]]]></description>
			<content:encoded><![CDATA[<p>No último post eu mostrei <a href="http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-um-basico" target="_blank">como declarar e obter valores de um Array</a>, hoje vamos a segunda parte do post.</p>
<p>O Array é um objeto javascript, e existe métodos pra ajudar a manipulçao dos seus elementos. Nesse post vou falar e demonstrar os principais métodos que são usados, são eles: </p>
<ul>
<li>sort() e reverse()</li>
<li>pop() e push()</li>
<li>shift() e unshift()</li>
<li>split() e join()</li>
</ul>
<h2> Sort e Reverse </h2>
<p>O <strong>sort()</strong> ordena os elementos do Array, por ordem alfabética.<br />
<strong>reverse()</strong> inverte a ordem os elementos do Array.<br />
Ambos os métodos alteram o valor do Array original.</p>
<pre class="brush: jscript; title: ; notranslate">
var arrTvs= new Array(4); // Reparem no 4
arrTvs[0] = &quot;LG - não comprem&quot;;
arrTvs[1] = &quot;Gradiente&quot;;
arrTvs[2] = &quot;Sony&quot;;
arrTvs[3] = &quot;Philips&quot;;
alert(arrTvs);
alert(arrTvs.sort());
alert(arrTvs.reverse());
</pre>
<p><strong>O primeiro alert irá mostrar:</strong><br />
LG &#8211; não comprem,Gradiente,Sony,Philips</p>
<p><strong>O Segundo alert, que foi ordenado pelo sort, irá mostrar:</strong><br />
Gradiente,LG &#8211; não comprem,Philips,Sony </p>
<p><strong>O Terceiro alert, que teve a ordem invertida pelo método reverse(), vai ter a ordem alfabética decrescente já que ele foi ordenado pelo sort() anteriormente:</strong><br />
Sony,Philips,LG &#8211; não comprem,Gradiente</p>
<p><strong>Observação:</strong><br />
O Array(4) determina quantos ítens terá dentro do array, esse número não é obrigatório, porém, limitando o array, você gasta menos memória na execução do javascript, então, sempre que possível, usem.</p>
<p><strong>Observação 2</strong><br />
(Tive / estou tendo problemas com uma tv da LG)</p>
<h2> Pop e Push </h2>
<p>Pop serve para retirar o último elemento do Array, push para adicionar um elemento no final dele.</p>
<pre class="brush: jscript; title: ; notranslate">
var arrTvs= new Array();
arrTvs[0] = &quot;Samsung&quot;;
arrTvs[1] = &quot;Gradiente&quot;;
arrTvs[2] = &quot;Sony&quot;;
alert(arrTvs);
arrTvs.pop();
alert(arrTvs);
arrTvs.push(&quot;Philips&quot;);
alert(arrTvs);
</pre>
<p><strong>O primeiro alert irá mostrar:</strong><br />
Samsung,Gradiente,Sony<br />
Tudo certo, ok?</p>
<p><strong>O Segundo alert, depois do pop() irá mostrar :</strong><br />
Samsung,Gradiente</p>
<p><strong>O Terceiro alert, depois do push() onde foi inserido &#8220;Philips&#8221; irá mostrar:</strong><br />
Samsung,Gradiente,Philips</p>
<h2> Shift e Unshift </h2>
<p>Semelhante a pop e push, porém aqui, se insere e remove o primeiro elemento do Array, e não o último:</p>
<pre class="brush: jscript; title: ; notranslate">
var arrTvs= new Array();
arrTvs[0] = &quot;Samsung&quot;;
arrTvs[1] = &quot;Gradiente&quot;;
arrTvs[2] = &quot;Sony&quot;;
alert(arrTvs);
arrTvs.shift();
alert(arrTvs);
arrTvs.unshift(&quot;Philips&quot;);
alert(arrTvs);
</pre>
<p><strong>O primeiro alert, mais uma vez, irá mostrar:</strong><br />
Samsung,Gradiente,Sony</p>
<p><strong>O Segundo alert, depois do shift() irá mostrar :</strong><br />
Gradiente,Sony</p>
<p><strong>O Terceiro alert, depois do push() onde foi inserido &#8220;Philips&#8221; irá mostrar:</strong><br />
Philips,Gradiente,Sony</p>
<h2> Split e Join </h2>
<p>Pra quem programa em outras linguagens, split() funciona igual ao de explode(). A partir de um string, basta definir um valor para separá-lo, uma virgula, espaço em branco, etc.</p>
<p>Já o join() serve para formar uma string a partir de um array concatenado com parâmetro passado</p>
<pre class="brush: jscript; title: ; notranslate">
var frase = 'Teste do Tidbits. Internet e Vida a dois';
var palavras = frase.split(' ');
for(i=0;i&lt;palavras.length;i++){
	alert('palavra '+i+' = '+palavras[i]);
}
alert('join = '+palavras.join('...'));
</pre>
<p>Então é mostrado diversos alerts, cada um com uma palavra, da frase, que agora é um Array.<br />
Depois é mostrado o alert com join de todos os ítens do Array concatenado com reticências.</p>
<p>Bom, é isso&#8230; essas são as principais funções usadas para manipular um array em javascript, no site da w3c schools tem uma <a href="http://www.w3schools.com/jsref/jsref_obj_array.asp" target="_blank"> referência completa do objeto Array em JavaScript </a>.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-dois-avancado/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Manipulação de array em Javascript &#8211; Parte um, básico</title>
		<link>http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-um-basico</link>
		<comments>http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-um-basico#comments</comments>
		<pubDate>Tue, 07 Apr 2009 16:06:59 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1416</guid>
		<description><![CDATA[Os Arrays são amados por um e odiado por outros, só que esses outros normalmente são aqueles que tem pouca base e pouca experiência em lógica de programação. Vou tentar explicar como usar um array, do básico ao avançado. Neste primeiro post, vou falar do básico, é claro, portanto se você já conhece, até mais. [...]]]></description>
			<content:encoded><![CDATA[<p>Os Arrays são amados por um e odiado por outros, só que esses outros normalmente são aqueles que tem pouca base e pouca experiência em lógica de programação. </p>
<p>Vou tentar explicar como usar um array, do básico ao avançado.</p>
<p><strong>Neste primeiro post, vou falar do básico, é claro, portanto se você já conhece, até mais.</strong></p>
<h4> O básico &#8211; Declarando um array </h4>
<pre class="brush: jscript; title: ; notranslate">
var bolas = new Array();
bolas[0] = 'Topper';
bolas[1] = 'Nike';
bolas[2] = 'Penalty';

alert(bolas[1]); // retorna Nike
alert(bolas.length); // retorna 3 

// for percorrendo todas as posições de um array.
for(i=0;i&lt;bolas.length;i++){
alert(bolas[i]);
}
</pre>
<h4> Observações </h4>
<p>Repare que o Índice de um Array sempre começa de 0.<br />
E que bolas.length retorna o número de elementos dentro do Array.<br />
Sendo assim bolas.length &#8211; 1 vai retornar sempre o índice da última posição do Array.</p>
<h4> Declarando array de forma mais simplificada </h4>
<pre class="brush: jscript; title: ; notranslate">
var bolas = new Array('Topper','Nike','Penalty');
alert(bolas[1]); // retorna Nike também
</pre>
<h4> Arrays bidemensionais </h4>
<p>Um array pode ter outro array dentro dele ( array bidemensional ):</p>
<pre class="brush: jscript; title: ; notranslate">
var bolas = new Array();
bolas[0] = new Array('Topper','Amarela','Futebol','Capotão');
bolas[1] = new Array('Nike','Branca','Futsal','Couro');

// Também pode ser feito assim:
bolas[2] = new Array();
bolas[2][0] = 'Penalty';
bolas[2][1] = 'Azul';
bolas[2][2] = 'Voley';
bolas[2][3] = 'Fibra';

alert(bolas[1][2]); // retorna Futsal
</pre>
<h4> Observações </h4>
<p>Um array pode ter quantas dimensões for preciso.<br />
bolas[2].length retorna quantos ítens existe no array bolas[2], no caso 4.</p>
<p><a href="http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-dois-avancado" target="_blank"> Veja a parte dois desse post</a></p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/manipulacao-de-array-em-javascript-parte-um-basico/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Coleção de métodos para o plugin validate do jQuery.</title>
		<link>http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery</link>
		<comments>http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery#comments</comments>
		<pubDate>Fri, 27 Mar 2009 14:30:24 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[validate]]></category>
		<category><![CDATA[Verificar CPF]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1398</guid>
		<description><![CDATA[Na verdade não é bem uma coleção com dezenas de métodos, a intenção do post é simplesmente mostrar que é possível e fácil criar métodos para o plugin. Para quem não sabe o que é o validate, recomendo saber do que se trata, você pode ganhar muito tempo no desenvolvimento utilizando o plugin, principalmente para [...]]]></description>
			<content:encoded><![CDATA[<p>Na verdade não é bem uma coleção com dezenas de métodos, a intenção do post é simplesmente mostrar que é possível e fácil criar métodos para o plugin.</p>
<p>Para quem não sabe o que é o <a href="http://plugins.jquery.com/project/validate" target="_blank">validate</a>, recomendo saber do que se trata, você pode ganhar muito tempo no desenvolvimento utilizando o plugin, principalmente para desenvolver interface de back end, com diversas validações. Tem um <a href="http://www.alexandremagno.net/blog/2008/07/23/validando-formularios-com-o-plugin-validate/" target="_blank">post do Alexandre Magno</a> antigo, porém muito bom, explicando o que é o plugin, o que faz, como utilizá-lo e um exemplo bem simples de um <a href="http://www.alexandremagno.net/blog/wp-content/uploads/exemplos/validate/validate.html" target="_blank">formulário validado pelo plugin</a>.</p>
<p>Quando se faz o download do validate, ele vêm com uma coleção de médotos, mas alguns que nós precisamos, como verificação de data ( formato dd/mm/aaaa ) e verificação de cpf, não tem. </p>
<p>Alguns métodos que serão postados aqui não fui eu quem fez, queria dar os créditos a quem fez, porém não sei quem foi. Mas&#8230; vamos ao ponto, veja como é facil adicionar novos métodos.</p>
<h4>Verificação de CPF </h4>
<p>O código abaixo adiciona um Método que chamamos de &#8220;verificaCPF&#8221; :</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery.validator.addMethod(&quot;verificaCPF&quot;, function(value, element) {
	value = value.replace('.','');
	value = value.replace('.','');
	cpf = value.replace('-','');
	while(cpf.length &lt; 11) cpf = &quot;0&quot;+ cpf;
	var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
	var a = [];
	var b = new Number;
	var c = 11;
	for (i=0; i&lt;11; i++){
		a[i] = cpf.charAt(i);
		if (i &lt; 9) b += (a[i] * --c);
	}
	if ((x = b % 11) &lt; 2) { a[9] = 0 } else { a[9] = 11-x }
	b = 0;
	c = 11;
	for (y=0; y&lt;10; y++) b += (a[y] * c--);
	if ((x = b % 11) &lt; 2) { a[10] = 0; } else { a[10] = 11-x; }
	if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) return false;
	return true;
}, &quot;Informe um CPF válido.&quot;); // Mensagem padrão
</pre>
<p>E agora na hora de validar seu formulário, você já pode utilizar o método adicionado:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;form#cadastro&quot;).validate({
	rules: {
		'CampoCPF': {
			required: true,
			verificaCPF: true
		}
	},
	messages: {
		CampoCPF: {
			required: &quot;Digite seu cpf&quot;
			verificaCPF: &quot;CPF inválido&quot;
		}
	},
});
</pre>
<h4> Verificação de Data (formato dd/mm/aaaa) </h4>
<p>Agora o método se chama dateBR e a mensagem padrão (caso não seja colocada outra na hora de usar o validate, será &#8220;Informe uma data válida&#8221;.</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery.validator.addMethod(&quot;dateBR&quot;, function(value, element) {
	 //contando chars
	if(value.length!=10) return false;
	// verificando data
	var data 		= value;
	var dia 		= data.substr(0,2);
	var barra1		= data.substr(2,1);
	var mes 		= data.substr(3,2);
	var barra2		= data.substr(5,1);
	var ano 		= data.substr(6,4);
	if(data.length!=10||barra1!=&quot;/&quot;||barra2!=&quot;/&quot;||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia&gt;31||mes&gt;12)return false;
	if((mes==4||mes==6||mes==9||mes==11)&amp;amp;&amp;amp;dia==31)return false;
	if(mes==2 &amp;amp;&amp;amp; (dia&gt;29||(dia==29&amp;amp;&amp;amp;ano%4!=0)))return false;
	if(ano &lt; 1900)return false;
	return true;
}, &quot;Informe uma data válida&quot;);  // Mensagem padrão
</pre>
<h4> Verificação de Data e Hora (formato dd/mm/aaaa hh:mm) </h4>
<pre class="brush: jscript; title: ; notranslate">
jQuery.validator.addMethod(&quot;dateTimeBR&quot;, function(value, element) {
	 //contando chars
	if(value.length!=16) return false;
	 // dividindo data e hora
	if(value.substr(10,1)!=' ') return false; // verificando se há espaço
	var arrOpcoes = value.split(' ');
	if(arrOpcoes.length!=2) return false; // verificando a divisão de data e hora
	// verificando data
	var data 		= arrOpcoes[0];
	var dia 		= data.substr(0,2);
	var barra1		= data.substr(2,1);
	var mes 		= data.substr(3,2);
	var barra2		= data.substr(5,1);
	var ano 		= data.substr(6,4);
	if(data.length!=10||barra1!=&quot;/&quot;||barra2!=&quot;/&quot;||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia&gt;31||mes&gt;12)return false;
	if ((mes==4||mes==6||mes==9||mes==11)&amp;amp;&amp;amp;dia==31)return false;
	if (mes==2 &amp;amp;&amp;amp; (dia&gt;29||(dia==29&amp;amp;&amp;amp;ano%4!=0)))return false;
	// verificando hora
	var horario 	= arrOpcoes[1];
	var	hora 		= horario.substr(0,2);
	var doispontos 	= horario.substr(2,1);
	var minuto 		= horario.substr(3,2);
	if(horario.length!=5||isNaN(hora)||isNaN(minuto)||hora&gt;23||minuto&gt;59||doispontos!=&quot;:&quot;)return false;
	return true;
}, &quot;Informe uma data e uma hora válida&quot;);
</pre>
<p>Se alguém tiver (ou fizer) o método de CNPJ (ou algum outro legal que não tem aqui) me manda por e-mail ou posta aqui nos comentários.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
	</channel>
</rss>

