<?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>JavaScript: Singuska &#187; Fragmento</title>
	<atom:link href="http://javascript.singuska.com/category/fragmento/feed/" rel="self" type="application/rss+xml" />
	<link>http://javascript.singuska.com</link>
	<description>Fragmentos de código e gambiarras (0.2)</description>
	<lastBuildDate>Mon, 03 Oct 2011 19:45:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Click interrompido</title>
		<link>http://javascript.singuska.com/2011/06/22/click-interrompido/</link>
		<comments>http://javascript.singuska.com/2011/06/22/click-interrompido/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 04:51:48 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[funções]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=605</guid>
		<description><![CDATA[Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva: 1 2 3 4 5 6 $.fn.extend&#40;&#123;clickPrevented: function&#40;fn&#41; &#123; $&#40;this&#41;.click&#40;function&#40;e&#41; &#123; e.preventDefault&#40;&#41;; fn&#40;e&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #6591f7;">fn</span>.<span style="color: #6591f7;">extend</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>clickPrevented<span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
	$<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
		e.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		fn<span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A utilização aconteceria mais ou menos assim:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#apenas_um_cara'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">clickPrevented</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
        <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Você vai continuar nesta página após o alert.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/06/22/click-interrompido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>parseInt &#8211; convertendo strings para números inteiros</title>
		<link>http://javascript.singuska.com/2011/06/17/parseint-convertendo-strings-para-numeros-inteiros/</link>
		<comments>http://javascript.singuska.com/2011/06/17/parseint-convertendo-strings-para-numeros-inteiros/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 18:08:26 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=551</guid>
		<description><![CDATA[É comum a necessidade de converter strings para inteiros. Por exemplo: se você obtiver um valor de um campo input, e precisar fazer alguma conta ou validação com esse valor é prudente converter primeiro para um número. A função que deve ser utilizada para isso chama-se parseInt. 1 2 var valor = '020'; alert&#40;parseInt&#40;valor, 10&#41;&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>É comum a necessidade de converter strings para inteiros. Por exemplo: se você obtiver um valor de um campo input, e precisar fazer alguma conta ou validação com esse valor é prudente converter primeiro para um número. A função que deve ser utilizada para isso chama-se <strong>parseInt</strong>.</p>
<p><span class="jsrun-exemplo-1 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> valor <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'020'</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>parseInt<span style="color: #ffffff;">&#40;</span>valor<span style="color: #ffffff;">,</span> <span style="color: #f78465;">10</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<h3>Pra que serve o segundo parâmetro?</h3>
<p>Esta função tem uma &#8220;funcionalidade&#8221; complicada. Se a string começar com &#8220;0&#8243;  ela vai ser convertida utilizando base <strong>8</strong> (<a href="http://pt.wikipedia.org/wiki/Sistema_octal">sistema octal</a>) ao invés de base <strong>10</strong>. O segundo argumento determina qual base numérica deve ser utilizada. A string <strong>20</strong> seria convertida para o número octal <strong>16</strong>. Veja o que acontece quando omitimos o segundo parâmetro:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> valor <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'020'</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>parseInt<span style="color: #ffffff;">&#40;</span>valor<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>É, portanto, boa prática sempre utilizar o segundo argumento para evitar qualquer transtorno</strong>. Ou, se você quiser treinar <a href="http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/">funções anônimas</a>, a seguinte brincadeira também é possível:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	<span style="color: #fbde2d; font-weight: bold;">var</span> original <span style="color: #ffffff;">=</span> parseInt<span style="color: #ffffff;">;</span>
	parseInt <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>n<span style="color: #ffffff;">,</span> b<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
		b <span style="color: #ffffff;">=</span> b <span style="color: #ffffff;">||</span> <span style="color: #f78465;">10</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">return</span> original<span style="color: #ffffff;">&#40;</span>n<span style="color: #ffffff;">,</span> b<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> valor <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'020'</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>parseInt<span style="color: #ffffff;">&#40;</span>valor<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Esse fragmento de código só precisa ser executado uma vez (no seu init.js, por exemplo). Repare que se você rodar o <b>exemplo 2 novamente</b>, o resultado já será o correto. O que fizemos foi reescrever a função parseInt usando ela mesma.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/06/17/parseint-convertendo-strings-para-numeros-inteiros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O mistério da vírgula perdida</title>
		<link>http://javascript.singuska.com/2011/04/07/o-misterio-da-virgula-perdida/</link>
		<comments>http://javascript.singuska.com/2011/04/07/o-misterio-da-virgula-perdida/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 01:31:03 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[ie]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=538</guid>
		<description><![CDATA[Ah, o Internet Explorer. O que dizer de bom desse nosso querido amiguinho? Tem ele razão em algo? Sim, tem. Vamos declarar um objeto: var bruceLee = &#123; forca: 8, agilidade: 10, defesa: 7, // esta vírgula está sobrando &#125;; Muito bem. O problema do objeto é uma vírgula sobrando logo depois do número sete. [...]]]></description>
			<content:encoded><![CDATA[<p>Ah, o Internet Explorer. O que dizer de bom desse nosso querido amiguinho? Tem ele razão em algo? Sim, tem. Vamos declarar um <a href="http://javascript.singuska.com/2010/02/24/objetos-o-basico/">objeto</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> bruceLee <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span>
    forca<span style="color: #ffffff;">:</span> <span style="color: #f78465;">8</span><span style="color: #ffffff;">,</span>
    agilidade<span style="color: #ffffff;">:</span> <span style="color: #f78465;">10</span><span style="color: #ffffff;">,</span>
    defesa<span style="color: #ffffff;">:</span> <span style="color: #f78465;">7</span><span style="color: #ffffff;">,</span> <span style="color: #bfbfbf; font-style: italic;">// esta vírgula está sobrando</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Muito bem. O problema do objeto é uma vírgula sobrando <strong>logo depois do número sete</strong>. O único navegador que reclama do erro de sintaxe, e pára a execução do script é o Internet Explorer. Já perdi horas e mais horas tentando encontrar uma solução para perceber que na verdade era uma vírgula que eu havia esquecido de apagar.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/04/07/o-misterio-da-virgula-perdida/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>target=&#8221;_blank&#8221; com doctype Strict</title>
		<link>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/</link>
		<comments>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 15:01:21 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=299</guid>
		<description><![CDATA[Se você é fresco como eu ou como a Dani Murai e gosta de codificar suas páginas utilizando doctype strict já sabe que target=&#8221;_blank&#8221; não valida. Particularmente eu sou contra _blank. É consenso entre os gurus de UX deixar a critério do usuário abrir ou não um link em uma nova guia. Mas como muitos [...]]]></description>
			<content:encoded><![CDATA[<p>Se você é fresco como eu ou como a <a href="http://twitter.com/NiaDany">Dani Murai</a> e gosta de codificar suas páginas utilizando <em>doctype strict</em> já sabe que <em>target=&#8221;_blank&#8221;</em> não valida. Particularmente eu sou contra _blank. É consenso entre os gurus de <a href="http://en.wikipedia.org/wiki/User_experience_design">UX</a> deixar a critério do usuário abrir ou não um link em uma nova guia. Mas como muitos clientes não entendem as implicações de forçar este tipo de prática guela abaixo do usuáro, e você é fresco e continua querendo usar strict, a solução é JavaScript:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> href <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'href'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    window.<span style="color: red;">open</span><span style="color: #ffffff;">&#40;</span>href<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">false</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Este exemplo em jQuery, se executado, fará com que todos os links desta página sejam abertos em uma nova guia. O <em>return false</em> na linha 4 serve para barrar o evento padrão do link. Se o return for omitido, o destino do link vai ser aberto em uma nova guia <em>e também</em> na página atual.</p>
<h3>preventDefault: uma alternativa mais elegante</h3>
<p>Descobri recentemente o método <em>preventDefault</em> que acaba sendo muito mais prático e menos sujo do que o <em>return false</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>event<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
    event.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> href <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'href'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    window.<span style="color: red;">open</span><span style="color: #ffffff;">&#40;</span>href<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Além de fazer muito mais sentido do que o return, <em>preventDefault</em> pode ser colocado em qualquer parte do evento, não interrompendo o fluxo da função.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Analytics assíncrono e o plugin Google Analyticator</title>
		<link>http://javascript.singuska.com/2010/01/16/analytics-assincrono-e-o-plugin-google-analyticator/</link>
		<comments>http://javascript.singuska.com/2010/01/16/analytics-assincrono-e-o-plugin-google-analyticator/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 13:54:33 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=288</guid>
		<description><![CDATA[No final do ano passado o Google Analytics disponibilizou um novo método para a insercão do seu objeto de tracking: &#160; var _gaq = _gaq &#124;&#124; &#91;&#93;; _gaq.push&#40;&#91;'_setAccount', 'UA-XXXXX-X'&#93;&#41;; _gaq.push&#40;&#91;'_trackPageview'&#93;&#41;; &#160; &#40;function&#40;&#41; &#123; var ga = document.createElement&#40;'script'&#41;; ga.type = 'text/javascript'; ga.async = true; ga.src = &#40;'https:' == document.location.protocol ? 'https://ssl' : 'http://www'&#41; + '.google-analytics.com/ga.js'; &#40;document.getElementsByTagName&#40;'head'&#41;&#91;0&#93; [...]]]></description>
			<content:encoded><![CDATA[<p>No final do ano passado o Google Analytics disponibilizou um novo método para a insercão do seu objeto de tracking:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> _gaq <span style="color: #ffffff;">=</span> _gaq <span style="color: #ffffff;">||</span> <span style="color: #ffffff;">&#91;</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
_gaq.<span style="color: #6591f7;">push</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'_setAccount'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'UA-XXXXX-X'</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
_gaq.<span style="color: #6591f7;">push</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'_trackPageview'</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
  <span style="color: #fbde2d; font-weight: bold;">var</span> ga <span style="color: #ffffff;">=</span> document.<span style="color: #6591f7;">createElement</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'script'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span> ga.<span style="color: #6591f7;">type</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'text/javascript'</span><span style="color: #ffffff;">;</span> ga.<span style="color: #6591f7;">async</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">true</span><span style="color: #ffffff;">;</span>
  ga.<span style="color: #6591f7;">src</span> <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'https:'</span> <span style="color: #ffffff;">==</span> document.<span style="color: #6591f7;">location</span>.<span style="color: #6591f7;">protocol</span> <span style="color: #ffffff;">?</span> <span style="color: #61ce3c;">'https://ssl'</span> <span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'http://www'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">'.google-analytics.com/ga.js'</span><span style="color: #ffffff;">;</span>
  <span style="color: #ffffff;">&#40;</span>document.<span style="color: #6591f7;">getElementsByTagName</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'head'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">||</span> document.<span style="color: #6591f7;">getElementsByTagName</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'body'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">appendChild</span><span style="color: #ffffff;">&#40;</span>ga<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Diferentemente do método tradicional, este código deve ser colocado dentro da tag <em>head</em> ou no <em>início</em> da tag <em>body</em>. A documentação completa pode ser lida aqui: <a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html">http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html</a>.</p>
<p>O método assíncrono permite que o impacto do script na experiência do usuário seja mínimo (maior performance). Além disso, se o usuário sair da página antes dela ter sido completamente carregada a probabilidade de registro pelo tracking é muito maior deste jeito.</p>
<h3>WordPress plugin: Google Analyticator</h3>
<p>Aqui no blog eu utilizo o <a href="http://ronaldheft.com/code/analyticator/">Google Analyticator</a>, um excelente plugin para WordPress. Duas funcionalidades são importantes para mim: filtrar as visitas do admin (eu) e tracking automático de eventos para links que levam pra fora do blog. Este plugin já utiliza o método assíncrono.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/16/analytics-assincrono-e-o-plugin-google-analyticator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sessões em JavaScript</title>
		<link>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/</link>
		<comments>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 00:42:40 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=281</guid>
		<description><![CDATA[É possível fazer sessões em JavaScript? Mais ou menos. Eu sei, isso cheira a gambiarra. Fiquei sabendo desta técnica através deste post. O objeto window tem uma propriedade chamada name. Esta propriedade é raramente utilizada. O interessante é que ela sobrevive à mudanças de páginas: window.name = 'testando'; Se você rodar este exemplo, for para [...]]]></description>
			<content:encoded><![CDATA[<p>É possível fazer sessões em JavaScript? Mais ou menos. Eu sei, isso cheira a gambiarra. Fiquei sabendo desta técnica através deste <a href="http://www.sitepoint.com/blogs/2009/09/02/cookieless-javascript-session-variables/">post</a>. O objeto <em>window</em> tem uma propriedade chamada <em>name</em>. Esta propriedade é raramente utilizada. O interessante é que ela sobrevive à mudanças de páginas:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: red;">name</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'testando'</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Se você rodar este exemplo, for para outra página e inspecionar o conteúdo da propriedade <em>window.name</em> vai perceber que o valor continua sendo <em>testando</em>. Ou seja, esta informação continua guardada, simulando uma sessão.</p>
<p>Infelizmente <em>window.name</em> consegue armazenar somente strings. Em um outro post pretendo demonstrar como podemos <a href="http://en.wikipedia.org/wiki/Serialization">serializar</a> os dados nesta propriedade. Serializando os dados seria possível armazenar qualquer tipo de vetor, objeto ou função. A maioria dos navegadores consegue armazenar até 10Mb de informações na propriedade.</p>
<p>O ideal seria utillizar uma sessão genuína via back-end, utilizando PHP, C#, Java, etc. Mas como todos nós sabemos, às vezes a realizade exige soluções um tanto quanto &#8220;criativas&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Colocando objetos jQuery em variáveis</title>
		<link>http://javascript.singuska.com/2010/01/04/colocando-objetos-jquery-em-variaveis/</link>
		<comments>http://javascript.singuska.com/2010/01/04/colocando-objetos-jquery-em-variaveis/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 00:55:38 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=238</guid>
		<description><![CDATA[Por algum motivo idiota, sempre que eu precisava referenciar um elemento do DOM eu buscava o sujeito repetindo o seletor: $&#40;'#post-238 h2 a'&#41;.css&#40;'color','white'&#41;; &#160; if &#40;$&#40;'#post-238 h2 a'&#41;.text&#40;&#41; === 'Colocando objetos jQuery em variáveis'&#41; &#123; alert&#40;'Entramos na condição. Texto alterado para branco.'&#41;; &#125; Quando na verdade, o código abaixo é perfeitamente possível e muitíssimo mais [...]]]></description>
			<content:encoded><![CDATA[<p>Por algum motivo idiota, sempre que eu precisava referenciar um elemento do DOM eu buscava o sujeito repetindo o  seletor:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#post-238 h2 a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">css</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'color'</span><span style="color: #ffffff;">,</span><span style="color: #61ce3c;">'white'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#post-238 h2 a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">text</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Colocando objetos jQuery em variáveis'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Entramos na condição. Texto alterado para branco.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>Quando na verdade, o código abaixo é perfeitamente possível e muitíssimo mais limpo:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> conteudo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#post-238 h2 a'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
conteudo.<span style="color: #6591f7;">css</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'color'</span><span style="color: #ffffff;">,</span><span style="color: #61ce3c;">'yellow'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>conteudo.<span style="color: #6591f7;">text</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Colocando objetos jQuery em variáveis'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Entramos na condição. Texto alterado para amarelo.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<h3>Vantagens</h3>
<p>É boa prática em programação evitar a duplicação de código (no caso a string que define o seletor). Isso evita bugs e facilita o entendimento e a manutenção do código. Além disso, imagino que a performance seja maior. </p>
<h3>Sou só eu???</h3>
<p>Quando o <a href="http://conheca.me/">Felipe Pupo</a> começou a me ensinar MooTools, ele me mostrou que adquirir o objeto do DOM uma única vez era uma das grandes vantagens em relação ao jQuery. Sempre achei que a repetição do <em>$</em> e dos seletores o tempo todo era algo realmente pouco prático. Não sei se isso é algo novo no jQuery ou se é algo que eu nunca havia reparado.</p>
<p>O fato é que não sou só eu que faço isso. Uma grande parte dos programadores jQuery não armazena os objetos já adquiridos em variáveis. <em>Será que existe algum efeito colateral?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/04/colocando-objetos-jquery-em-variaveis/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Sempre aspas duplas no JSON</title>
		<link>http://javascript.singuska.com/2009/12/06/sempre-aspas-duplas-no-json/</link>
		<comments>http://javascript.singuska.com/2009/12/06/sempre-aspas-duplas-no-json/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 02:55:37 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=91</guid>
		<description><![CDATA[Outro dia perdi um bom tempo tentando utilizar a função json_decode do PHP para parsear um código JSON que eu havia criado. O problema é que eu estava utilizando aspas simples ao invés de duplas: &#123; 'prop1': 'valor1' &#125; O código válido seria o seguinte: &#123; &#34;prop1&#34;: &#34;valor1&#34; &#125; Vale lembrar que o exemplo abaixo [...]]]></description>
			<content:encoded><![CDATA[<p>Outro dia perdi um bom tempo tentando utilizar a função <a href="http://php.net/manual/en/function.json-decode.php">json_decode</a> do PHP para parsear um código <a href="http://pt.wikipedia.org/wiki/JSON">JSON</a> que eu havia criado. O problema é que eu estava utilizando aspas simples ao invés de duplas:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">'prop1'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'valor1'</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>O código válido seria o seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">&quot;prop1&quot;</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">&quot;valor1&quot;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>Vale lembrar que o exemplo abaixo <em>não</em> é um JSON válido:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#123;</span>
    prop1<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">&quot;valor1&quot;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>Apesar deste código ser um objeto JavaScript válido, a sintaxe do JSON <em>exige</em> que as propriedades sejam declaradas entre aspas duplas.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/06/sempre-aspas-duplas-no-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

