<?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>RamonPage.com . Web na ponta do lápis &#187; Lab</title>
	<atom:link href="http://ramonpage.com/category/lab/feed/" rel="self" type="application/rss+xml" />
	<link>http://ramonpage.com</link>
	<description>arte, desenvolvimento, design, programação, webstandards, acessibilidade, usabilidade, tipografia, UX, UI, IA</description>
	<lastBuildDate>Mon, 23 Jan 2012 12:51:46 +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>Conjugador Ortografa! como mecanismo de busca do seu navegador</title>
		<link>http://ramonpage.com/2011/05/27/conjugador-ortografa-como-mecanismo-de-busca-do-seu-navegador/</link>
		<comments>http://ramonpage.com/2011/05/27/conjugador-ortografa-como-mecanismo-de-busca-do-seu-navegador/#comments</comments>
		<pubDate>Fri, 27 May 2011 21:42:39 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Lab]]></category>
		<category><![CDATA[conjugador]]></category>
		<category><![CDATA[mecanismo de busca]]></category>
		<category><![CDATA[opensearch]]></category>
		<category><![CDATA[ortografa]]></category>

		<guid isPermaLink="false">http://ramonpage.com/?p=810</guid>
		<description><![CDATA[Há algumas semanas eu lancei um conjugador bem legal no Ortografa!. Neste post eu vou mostrar como é fácil adicioná-lo como mecanismo de busca do seu navegador. Agora existem duas opções de mecanismo de busca Quem acompanhou os meus posts sabe que o verificador de ortografia pode ser adicionado como mecanismo de busca do navegador, [...]]]></description>
			<content:encoded><![CDATA[<p>Há algumas semanas eu lancei um <a href="http://www.ortografa.com.br/conjugador" rel="external" class="external-link">conjugador</a> bem legal no <a href="http://www.ortografa.com.br" rel="external" class="external-link">Ortografa!</a>. Neste post eu vou mostrar como é fácil adicioná-lo como mecanismo de busca do seu navegador.<span id="more-810"></span></p>
<h3>Agora existem duas opções de mecanismo de busca</h3>
<p><a href="http://ramonpage.com/2011/03/22/ortografa-como-mecanismo-de-busca-do-seu-navegador/">Quem acompanhou os meus posts</a> sabe que o verificador de ortografia pode ser adicionado como mecanismo de busca do navegador, porém agora ao tentar adicionar o Ortografa! você vai se deparar com duas opções: ortografia e conjugador. Veja na imagem abaixo.</p>
<p style="text-align: center;">
<img class="centered" alt="Verificador de ortografia e conjugador como mecanismos de busca do navegador" src="http://ramonpage.com/wp-content/uploads/conjugador.png" /><br />
<span class="image-label image-label-centered">Verificador de ortografia e conjugador como mecanismos de busca do navegador.</span>
</p>
<p>Sabendo disso, o processo de adição do mecanismo de busca continua o mesmo. <a href="http://ramonpage.com/2011/03/22/ortografa-como-mecanismo-de-busca-do-seu-navegador/">Veja neste post mais detalhado</a>.</p>
<p class="update"><strong>Atualização 29/05/2011:</strong> Quem já havia adicionado o Ortografa! como mecanismo de busca anteriormente precisa remover a inscrição e refazer o processo do zero para poder visualizar as duas novas opções.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2011/05/27/conjugador-ortografa-como-mecanismo-de-busca-do-seu-navegador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ortografa! como mecanismo de busca do seu navegador</title>
		<link>http://ramonpage.com/2011/03/22/ortografa-como-mecanismo-de-busca-do-seu-navegador/</link>
		<comments>http://ramonpage.com/2011/03/22/ortografa-como-mecanismo-de-busca-do-seu-navegador/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 18:41:03 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Lab]]></category>
		<category><![CDATA[mecanismo de busca]]></category>
		<category><![CDATA[opensearch]]></category>
		<category><![CDATA[ortografa]]></category>

		<guid isPermaLink="false">http://ramonpage.com/?p=728</guid>
		<description><![CDATA[Agora você não precisa mais entrar no Ortografa! para fazer as suas consultas, pois já está disponível um pequeno recurso que permite adicionar o campo de busca diretamente no seu navegador. O processo é bem simples para quem utiliza Firefox e Internet Explorer 7 ou 8. Internet Explorer 7/8 e Firefox A primeira etapa do [...]]]></description>
			<content:encoded><![CDATA[<p>Agora você não precisa mais entrar no <a href="http://www.ortografa.com.br/" rel="external" class="external-link">Ortografa!</a> para fazer as suas consultas, pois já está disponível um pequeno recurso que permite adicionar o campo de busca diretamente no seu navegador. O processo é bem simples para quem utiliza Firefox e Internet Explorer 7 ou 8.<span id="more-728"></span></p>
<h3>Internet Explorer 7/8 e Firefox</h3>
<p>A primeira etapa do processo, seja qual for o seu navegador, é abrir o <a href="http://www.ortografa.com.br/" rel="external" class="external-link">Ortografa!</a>. Os próximos passos devem ser efetuados com a aba do Ortografa! ativa.</p>
<p>Os usuários de Internet Explorer 7 ou <del datetime="2011-04-01T17:15:35+00:00">superior</del> 8 devem clicar na pequena seta localizada exatamente no topo direito do navegador. Será aberta uma lista suspensa com a opção de busca &#8220;Ortografa!&#8221;. Esta opção torna o Ortografa! um mecanismo provisório de busca. Para adicioná-lo permanentemente na lista, é preciso clicar em &#8220;Adicionar Provedores de Pesquisa&#8221; (ainda na mesma lista suspensa) e assim escolher &#8220;Ortografa!&#8221;.</p>
<p style="text-align: center;">
<img class="centered" alt="Adicionando o Ortografa! como mecanismo de busca no Internet Explorer" src="http://ramonpage.com/wp-content/uploads/search_engine_ie.png" /><br />
<span class="image-label image-label-centered">Ortografa! como mecanismo de busca no Internet Explorer.</span>
</p>
<p>Já os usuários de Firefox podem usar a seta à esquerda do campo de busca do navegador. No final da lista deve aparecer &#8220;Add &#8216;Ortografa!&#8217;&#8221; ou, em português, &#8220;Adicionar &#8216;Ortografa!&#8217;&#8221;.</p>
<p style="text-align: center;">
<img class="centered" alt="Adicionando o Ortografa! como mecanismo de busca no Firefox" src="http://ramonpage.com/wp-content/uploads/search_engine_firefox.png" /><br />
<span class="image-label image-label-centered">Ortografa! como mecanismo de busca no Firefox.</span>
</p>
<h3>Google Chrome, <del datetime="2011-03-23T00:13:42+00:00">Safari</del>, Internet Explorer 9 e demais navegadores</h3>
<p>O <a href="http://www.google.com/chrome?hl=pt-BR" rel="external" class="external-link">Google Chrome</a> e o <a href="http://windows.microsoft.com/pt-BR/internet-explorer/products/ie/home" rel="external" class="external-link">Internet Explorer 9</a> também permitem adicionar mecanismos de busca personalizados, porém o <a href="http://www.ortografa.com.br/c/passo-a-passo" rel="external" class="external-link">passo a passo</a> pode ser um pouco complicado para usuários leigos. Então, para facilitar a vida de todos, basta clicar no link abaixo para adicionar o Ortografa! nesses navegadores. O link também deve funcionar no Firefox e Internet Explorer 7/8.</p>
<p><a onclick="window.external.AddSearchProvider('http://www.ortografa.com.br/opensearch.xml');" href="#">Adicionar o Ortografa! como mecanismo de busca neste navegador.</a></p>
<h3>Mais uma dica para o Google Chrome</h3>
<p>Os mecanismos de busca do Chrome funcionam somente a partir de um atalho. Após adicionar um novo mecanismo de busca, você precisa definir um atalho para ele na caixa que é apresentada. Veja a imagem abaixo.</p>
<p style="text-align: center;">
<img class="centered" alt="Adicionando atalho do Ortografa! no Google Chrome" src="http://ramonpage.com/wp-content/uploads/ortografa-chrome-1.png" /><br />
<span class="image-label image-label-centered">Alterando atalho do Ortografa! no Google Chrome.</span>
</p>
<p>Por padrão o Ortografa! aparece com o atalho <code>ortografa.com.br</code>, porém, para facilitar, sugiro que seja trocado apenas para <code>ortografa</code>.</p>
<p>Depois disso, fica muito fácil utilizar a busca do Ortografa! Basta digitar na barra de endereço <code>ortografa</code> + <code>espaço</code> + <code>seu texto</code>.</p>
<p>Ex.: <code>ortografa idéia</code>. Simples, não?</p>
<p style="text-align: center;">
<img class="centered" alt="Utilizando o Ortografa! como mecanismo de busca no Google Chrome" src="http://ramonpage.com/wp-content/uploads/ortografa-chrome-2.png" /><br />
<span class="image-label image-label-centered">Ortografa! como mecanismo de busca no Google Chrome.</span>
</p>
<p class="update"><strong>Atualização 22/03/2011:</strong> É uma pena, mas o Safari <strong>não</strong> permite adicionar mecanismos de busca. Uma das alternativas para sanar a deficiência é instalar uma extensão, como o <a href="http://canisbos.posterous.com/pages/popsearch" rel="external" class="external-link">PopSearch</a>.
</p>
<p class="update"><strong>Atualização 01/04/2011:</strong> O comentário da <a href="http://ramonpage.com/2011/03/22/ortografa-como-mecanismo-de-busca-do-seu-navegador/comment-page-1/#comment-8472">Laah</a> me fez descobrir que no Internet Explorer 9 não é possível adicionar o mecanismo de busca da mesma forma que no IE 7 e 8. O texto está atualizado.
</p>
<p class="update"><strong>Atualização 22/04/2011:</strong> A <a href="http://ramonpage.com/2011/03/22/ortografa-como-mecanismo-de-busca-do-seu-navegador/comment-page-1/#comment-8560">paula</a> teve dificuldades em usar o mecanismo de busca no Ortografa! no Google Chrome, então eu atualizei o texto com um trecho explicando os passos.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2011/03/22/ortografa-como-mecanismo-de-busca-do-seu-navegador/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Ortografa! Muito além da nova ortografia</title>
		<link>http://ramonpage.com/2011/03/13/ortografa-muito-alem-da-nova-ortografia/</link>
		<comments>http://ramonpage.com/2011/03/13/ortografa-muito-alem-da-nova-ortografia/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 23:33:59 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Lab]]></category>
		<category><![CDATA[acordo ortográfico]]></category>
		<category><![CDATA[nova ortografia]]></category>
		<category><![CDATA[ortografa]]></category>
		<category><![CDATA[ortografia]]></category>

		<guid isPermaLink="false">http://ramonpage.com/?p=707</guid>
		<description><![CDATA[Na última quinta-feira foi ao ar a nova versão do Ortografa, ferramenta que nasceu como um corretor da nova ortografia e agora pretende ajudar também nos erros comuns do português. Tela do novo Ortografa! Principais mudanças Além da grande mudança visual, o Ortografa! conta agora com mais um verificador. São sugestões que ajudam na correção [...]]]></description>
			<content:encoded><![CDATA[<p>Na última quinta-feira foi ao ar a nova versão do <a href="http://www.ortografa.com.br/" rel="external" class="external-link">Ortografa</a>, ferramenta que nasceu como um corretor da nova ortografia e agora pretende ajudar também nos erros comuns do português. <span id="more-707"></span></p>
<p style="text-align: center;">
<img src="http://ramonpage.com/wp-content/uploads/novo_ortografa.png" alt="Novo Ortografa!" class="centered" /><br />
<span class="image-label image-label-centered">Tela do novo Ortografa!</span>
</p>
<h3>Principais mudanças</h3>
<p>Além da grande mudança visual, o Ortografa! conta agora com mais um verificador. São sugestões que ajudam na correção de erros de grafia, como letras trocadas ou acentuação incorreta.</p>
<p>Uma mudança importante que precisou ser feita é a verificação através da URL, pois eu precisarei utilizar as rotas da raiz do projeto para outros fins. Então o que antes era verificado como:</p>
<p><code>http://www.ortografa.com.br/guarda-roupa</code></p>
<p>Agora deve ter um <code>/c</code> adicionado antes da palavra. O <code>/c</code> significa &#8220;correção&#8221; mesmo:</p>
<p><code>http://www.ortografa.com.br/c/guarda-roupa</code></p>
<h3>E não é só isso!</h3>
<p>Esse lançamento foi só o começo. Eu pretendo mudar drasticamente a forma como a ferramenta trabalha, trazendo muita interatividade para os usuários. Então, enquanto isso não acontece, gostaria muito de receber a opinião de vocês sobre o que foi feito até agora.</p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2011/03/13/ortografa-muito-alem-da-nova-ortografia/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Deploy de aplicação rails com controle de versão na Hostnet</title>
		<link>http://ramonpage.com/2009/06/23/deploy-de-aplicacao-rails-com-controle-de-versao-na-hostnet/</link>
		<comments>http://ramonpage.com/2009/06/23/deploy-de-aplicacao-rails-com-controle-de-versao-na-hostnet/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 04:45:22 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://ramonpage.com/?p=276</guid>
		<description><![CDATA[Olhando o rodapé do Ortografa, dá para perceber que a Hostnet é parceira do projeto. Recentemente, decidi colocar todo o repositório do projeto no GitHub1 e percebi que não teria grandes problemas em integrá-lo. Este post não tem nenhuma relação comercial com a Hostnet. Quero apenas mostrar como foi bastante simples fazer do GitHub o [...]]]></description>
			<content:encoded><![CDATA[<p>Olhando o rodapé do <a href="http://www.ortografa.com.br/" rel="external" class="external-link">Ortografa</a>, dá para perceber que a <a href="http://www.hostnet.com.br/" rel="external" class="external-link">Hostnet</a> é parceira do projeto. Recentemente, decidi colocar todo o repositório do projeto no <a href="http://www.github.com" rel="external" class="external-link">GitHub</a><sup>1</sup> e percebi que não teria grandes problemas em integrá-lo.</p>
<p>Este <em>post</em> não tem nenhuma relação comercial com a Hostnet. Quero apenas mostrar como foi bastante simples fazer do GitHub o repositório padrão dos meus <em>deployments</em>. <span id="more-276"></span></p>
<p class="info-label"><sup>1</sup> &#8211; Para quem não sabe, o <a href="http://www.github.com" rel="external" class="external-link">GitHub</a> é um excelente <em>hosting</em> para compartilhamento de arquivos e monitoramento de projetos web. É baseado em <a href="http://git-scm.com/" rel="external" class="external-link">Git</a>, que talvez seja o melhor sistema de controle de versão da atualidade.</p>
<p>Foi tão simples que penso ser necessário apenas três passos.</p>
<h3>1. Criando um projeto no GitHub</h3>
<p>Crie um novo projeto através do seu menu de repositórios. Tendo o link de <em>clone</em> do projeto em mãos, será necessário seguir os passos que o GitHub descreve na primeira tela do seu projeto. Basicamente, é preciso instalar o <a href="http://git-scm.com/" rel="external" class="external-link">Git</a> na sua máquina (caso ele não esteja instalado) e configurar o seu ambiente<sup>2</sup>.</p>
<p class="info-label"><sup>2</sup> &#8211; O meu ambiente já tinha uma SSH Key configurada. Portanto, não me aterei a este detalhe. Veja o <a href="http://github.com/guides/providing-your-ssh-key" rel="external" class="external-link">tutorial</a> do próprio GitHub que explica como gerar a sua.</p>
<h3>2. Configurando o ambiente</h3>
<p>Crie a pasta do seu projeto (ou vá até o seu projeto existente) e digite os seguintes comandos:</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="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">git</span> init
$ <span style="color: #c20cb9; font-weight: bold;">touch</span> README
$ <span style="color: #c20cb9; font-weight: bold;">git</span> add README
$ <span style="color: #c20cb9; font-weight: bold;">git</span> commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">'first commit'</span>
$ <span style="color: #c20cb9; font-weight: bold;">git</span> remote add origin <span style="color: #c20cb9; font-weight: bold;">git</span><span style="color: #000000; font-weight: bold;">@</span>github.com:seu_usuario<span style="color: #000000; font-weight: bold;">/</span>seu_projeto.git
$ <span style="color: #c20cb9; font-weight: bold;">git</span> push origin master</pre></td></tr></table></div>

<p>Seu <em>branch</em> <em>master</em> agora está pronto para receber os arquivos do projeto. No meu caso, o projeto já estava criado. Então, bastou que eu adicionasse todos os demais arquivos e fizesse um novo <code>push</code>.</p>
<h3>3. Alterando a receita de <em>deploy</em> da Hostnet</h3>
<p>Na <a href="http://tutorial.hostnet.com.br" rel="external" class="external-link">página de tutoriais</a> da Hostnet é possível encontrar um <a href="http://tutorial.hostnet.com.br/2008/10/13/executando-um-deploy-de-aplicacao-rails-para-a-hostnet/" rel="external" class="external-link">tutorial</a> de como criar sua receita de <em>deploy</em> para <a href="http://www.capify.org/" rel="external" class="external-link">Capistrano</a>.</p>
<p>Para indicar que o GitHub era o novo repositório padrão, bastou incluir:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># ------------------------------------------------------------------------------</span>
<span style="color:#008000; font-style:italic;"># Git config.</span>
<span style="color:#008000; font-style:italic;"># ------------------------------------------------------------------------------</span>
&nbsp;
set <span style="color:#ff3333; font-weight:bold;">:repository</span>, <span style="color:#996600;">&quot;git@github.com:RamonPage/meu_novo_projeto.git&quot;</span>
set <span style="color:#ff3333; font-weight:bold;">:scm</span>, <span style="color:#ff3333; font-weight:bold;">:git</span>
set <span style="color:#ff3333; font-weight:bold;">:scm_passphrase</span>, <span style="color:#996600;">&quot;&quot;</span>
set <span style="color:#ff3333; font-weight:bold;">:git_shallow_clone</span>, <span style="color:#006666;">1</span>
set <span style="color:#ff3333; font-weight:bold;">:branch</span>, <span style="color:#996600;">&quot;master&quot;</span></pre></td></tr></table></div>

<p>Ou seja, basicamente indiquei o <code>:scm</code> como <code>:git</code> e adicionei alguns parâmetros que podem ser encontrados <a href="http://github.com/guides/deploying-with-capistrano" rel="external" class="external-link">aqui</a>. O <code>:scm_passphrase</code> não era necessário, então deixei em branco.</p>
<p>Após, comentei duas das linhas logo abaixo. No arquivo pede explicitamente para não alterar, mas era necessário :)</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="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># ------------------------------------------------------------------------------</span>
<span style="color:#008000; font-style:italic;"># Não alterar daqui pra baixo!</span>
<span style="color:#008000; font-style:italic;"># ------------------------------------------------------------------------------</span>
<span style="color:#008000; font-style:italic;">#set :scm, :none</span>
set <span style="color:#ff3333; font-weight:bold;">:deploy_via</span>, <span style="color:#ff3333; font-weight:bold;">:copy</span>
<span style="color:#008000; font-style:italic;">#set :repository, File.expand_path( File.join(File.dirname(__FILE__), &quot;/..&quot;) )</span></pre></td></tr></table></div>

<p>Linhas com o <code>:scm</code> e o <code>:repository</code> comentadas, já que o GitHub foi indicado como repositório padrão nas linhas acima.</p>
<h3>Finalizando</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ cap deploy:setup
$ cap deploy</pre></td></tr></table></div>

<p>Se tudo der certo, seu projeto hospedado na Hostnet agora pode contar com o poder do Git :)</p>
<p><strong>ATENÇÃO: Esta configuração ficou perfeita para o ambiente do meu projeto, porém não há garantias de que seja a adequada para o seu também. Faça as modificações por sua conta e risco. Não me responsabilizarei por elas. Boa sorte!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2009/06/23/deploy-de-aplicacao-rails-com-controle-de-versao-na-hostnet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ortografa! Reforma ortográfica sem cliques</title>
		<link>http://ramonpage.com/2009/04/25/ortografa-reforma-ortografica-sem-cliques/</link>
		<comments>http://ramonpage.com/2009/04/25/ortografa-reforma-ortografica-sem-cliques/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 23:11:50 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[ortografa]]></category>
		<category><![CDATA[ortografia]]></category>

		<guid isPermaLink="false">http://ramonpage.com/?p=263</guid>
		<description><![CDATA[Depois de finalmente ter colocado o ortografaem seu domínio real, agora posso implementar vários recursos que os visitantes pedem. Pensando nisso, tirei da gaveta uma sugestão muito útil que recebi por e-mail: a possibilidade de digitar a dúvida (palavra ou frase) diretamente na url do sistema. Teste você mesmo: http://www.ortografa.com.br/guarda-chuva. A sugestão é do Felipe [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de <a href="http://twitter.com/ramonpage/status/1591707101" rel="external" class="external-link">finalmente</a> ter colocado o <a  href="http://www.ortografa.com.br" rel="external" class="external-link">ortografa</a>em seu domínio real, agora posso implementar vários recursos que os visitantes pedem. Pensando nisso, tirei da gaveta uma sugestão muito útil que recebi por e-mail: a possibilidade de digitar a dúvida (palavra ou frase) diretamente na url do sistema. Teste você mesmo: <a href="http://www.ortografa.com.br/guarda-chuva" rel="external" class="external-link">http://www.ortografa.com.br/guarda-chuva</a>. <span id="more-263"></span></p>
<p>A sugestão é do <a href="http://felipemesquita.com/" class="external-link" rel="external">Felipe Mesquita</a>, que na época disse:</p>
<blockquote><p>Acho que seria interessante que após fazermos uma consulta para ver como ficou uma palavra, tivessemos um link para a consulta.  Assim, poderiamos passar esse link para qualquer pessoa.</p>
</blockquote>
<p>Pois então, Felipe. Agora é possível. <strong>:)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2009/04/25/ortografa-reforma-ortografica-sem-cliques/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Novidades no Ortografa!</title>
		<link>http://ramonpage.com/2009/02/24/novidades-no-ortografa/</link>
		<comments>http://ramonpage.com/2009/02/24/novidades-no-ortografa/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 20:43:56 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[ortografa]]></category>
		<category><![CDATA[ortografia]]></category>

		<guid isPermaLink="false">http://ramonpage.com/?p=250</guid>
		<description><![CDATA[Confesso que ainda não caiu a ficha sobre o Ortografa! Um projeto que nasceu &#8220;sem querer&#8221; e que em poucos dias conseguiu um pico de 13.000 acessos num único dia! Agora que a coisa ficou séria, eu mergulhei de vez neste projeto. Algumas novidades já estão no ar. Saiba quais. Ordem do resultado Descobri depois [...]]]></description>
			<content:encoded><![CDATA[<p>Confesso que ainda não caiu a ficha sobre o <a href="http://ramonpage.com/ortografa" rel="external">Ortografa!</a> Um projeto que nasceu &#8220;sem querer&#8221; e que em poucos dias conseguiu um pico de 13.000 acessos num único dia!</p>
<p>Agora que a coisa ficou séria, eu mergulhei de vez neste projeto. Algumas novidades já estão no ar. Saiba quais. <span id="more-250"></span></p>
<h3>Ordem do resultado</h3>
<p>Descobri depois de alguns dias que o resultado das correções ficaria melhor aparencendo antes do formulário. Assim, quem tem uma resolução vertical (altura de tela) não muito ampla pode ver o resultado com mais facilidade</p>
<h3>Tooltips para dicas!</h3>
<p><img src="http://ramonpage.com/wp-content/uploads/ortografa-tooltip.png" alt="Ortografa tooltip" width="280" class="alignright" /><em>Tooltips</em> são os chamados &#8220;balões&#8221; que são muito usados em certos sites. Eles são apresentados quando passamos o mouse sobre determinada área. E no <strong>Ortografa!</strong> não é diferente. Passe o mouse sobre a correção marcada para ver uma dica. Adianto que, por enquanto, nem todas as correções possuem dica. Estou atualizando periodicamente.</p>
<p>Ah! O pessoal do iPhone pode ver a dica dando um &#8220;tapa&#8221; com o dedo na correção.</p>
<h3>Agradecimentos</h3>
<p>Quero agradecer a todos os e-mails que tenho recebido. Deixo aqui meu muito obrigado a todos que estão me ajudando neste projeto. Sugerindo, criticando e elogiando. A participação de vocês é muito importante.</p>
<p>Muitíssimo obrigado a todos! <strong>:D</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2009/02/24/novidades-no-ortografa/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Ortografa! Reforma ortográfica num clique</title>
		<link>http://ramonpage.com/2009/01/11/ortografa-reforma-ortografica-num-clique/</link>
		<comments>http://ramonpage.com/2009/01/11/ortografa-reforma-ortografica-num-clique/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 20:00:51 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[acordo ortográfico]]></category>
		<category><![CDATA[língua portuguesa]]></category>
		<category><![CDATA[ortografia]]></category>

		<guid isPermaLink="false">http://ramonpage.com/?p=169</guid>
		<description><![CDATA[Lançamento de hoje: www.ortografa.com.br. Como o próprio autor (eu) diz: O Ortografa! nasceu de uma súbita ideia quando o Acordo Ortográfico da Língua Portuguesa começou a ser adotado no início de 2009. A funcionalidade é simples: digite sua frase no campo acima que o sistema procurará trocar as palavras para a ortografia correta. Caso ele [...]]]></description>
			<content:encoded><![CDATA[<p>Lançamento de hoje: <a href="http://www.ortografa.com.br" rel="external" class="external-link">www.ortografa.com.br</a>. Como o próprio autor (eu) diz:</p>
<blockquote><p>O Ortografa! nasceu de uma súbita ideia quando o Acordo Ortográfico da Língua Portuguesa começou a ser adotado no início de 2009. A funcionalidade é simples: digite sua frase no campo acima que o sistema procurará trocar as palavras para a ortografia correta. Caso ele não consiga — certamente por haver alguma ressalva — ele mostrará uma dica para você se guiar nos seus textos.</p>
</blockquote>
<p><span id="more-169"></span></p>
<h3>O projeto</h3>
<p><strong>Ortografa!</strong> é um projeto simples que idealizei por volta do dia 02/01 deste ano. Queria desenvolver algo diferente que qualquer pessoa &mdash; principalmente as crianças &mdash; pudesse utilizar e entender o resultado, não sendo um serviço apenas para pessoas mais bem instruídas tecnologicamente.</p>
<p>O projeto é baseado em <a href="http://pt.wikipedia.org/wiki/Express%C3%A3o_regular" rel="external" class="external-link">Expressões Regulares</a> revestidas de <a href="http://jquery.com/" rel="external" class="external-link">jQuery</a>. O serviço é leve e possui apenas 960kb de tamanho (arquivos, ícones e imagens).</p>
<p>Ah! Utilize o <strong>Ortografa!</strong> no seu iPhone também! :)</p>
<h3>Considerações finais</h3>
<p>Gostaria muito de receber as impressões sobre o projeto, principalmente em como melhorá-lo. Você professor, passe o <strong>Ortografa!</strong> aos seus alunos. Discuta com eles, difunda a colocação correta do nosso português.</p>
<p>No Brasil nós temos disto: só nos preocupamos com uma coisa quando ela começa a afetar a nós mesmos. Então, já que antes a grande massa não se  importava tanto com a boa colocação do português a nova ortografia acabou chegando como um incentivo para a educação das pessoas (apesar de eu não concordar com ela).</p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2009/01/11/ortografa-reforma-ortografica-num-clique/feed/</wfw:commentRss>
		<slash:comments>84</slash:comments>
		</item>
		<item>
		<title>Mostrar-esconder conteúdo via DOM V.2</title>
		<link>http://ramonpage.com/2006/11/06/mostrar-esconder-conteudo-via-dom-v2/</link>
		<comments>http://ramonpage.com/2006/11/06/mostrar-esconder-conteudo-via-dom-v2/#comments</comments>
		<pubDate>Mon, 06 Nov 2006 11:39:07 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://ramonpage.com/2006/11/06/mostrar-esconder-conteudo-via-dom-v2/</guid>
		<description><![CDATA[Show-hide content with DOM V.2 Ontem, ao redigir o artigo sombra em imagem com DOM e CSS, percebi que o script de mostrar-esconder conteúdo poderia receber uma melhoria. Ao invés de procurar cada classe CSS que se referisse à outra língua (no meu caso o inglês), por que não utilizar o atributo lang inserido dentro [...]]]></description>
			<content:encoded><![CDATA[<h3 class="lang-en" lang="en">Show-hide content with DOM V.2</h3>
<p>Ontem, ao redigir o artigo <a href="http://ramonpage.com/2006/11/05/sombra-em-imagem-com-dom-e-css/">sombra em imagem com <abbr title="Document Object Model">DOM</abbr> e <abbr title="Cascading Style Sheets">CSS</abbr></a>, percebi que o script de mostrar-esconder conteúdo poderia receber uma melhoria. Ao invés de procurar cada classe CSS que se referisse à outra língua (no meu caso o inglês), por que não utilizar o atributo <code>lang</code> inserido dentro das referidas tags?? Pois é, essa foi a sacada!</p>
<p><span id="more-25"></span></p>
<h3>Novo código</h3>
<ol class="code">
<li><code>var arrEls = new Array("h1","h2","h3","h4","h5","h6", "p","span","ul","ol","blockquote")</code></li>
<li><code>&nbsp;</code></li>
<li><code>function getTextNodeByLangName(tag,eventNode) {</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var els = document.getElementsByTagName(tag);</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var idLink = 'showHideTextNode';</code></li>
<li class="tab1"><code>var messageShow = '[+] Show english content';</code></li>
<li class="tab1"><code>var messageHide = '[-] Hide english content';</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var linkTextNode = document.getElementById(idLink);</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>for (i = 0; i < els.length; i++) { </code></li>
<li class="tab2"><code>var lang = els[i].getAttribute("lang"); </code></li>
<li class="tab2"><code>if (lang == 'en') {</code></li>
<li class="tab3"><code>if (eventNode == 'hide') {</code></li>
<li class="tab4"><code>linkTextNode.innerHTML = messageShow;</code></li>
<li class="tab4"><code>linkTextNode.className = "link-show";</code></li>
<li class="tab4"><code>linkTextNode.onclick = function() {</code></li>
<li class="tab5"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab6"><code>getTextNodeByLangName(arrEls[j],'show');</code></li>
<li class="tab5"><code>}</code></li>
<li class="tab4"><code>};</code></li>
<li class="tab4"><code>els[i].style.display = 'none';</code></li>
<li class="tab3"><code>} else if (eventNode == 'show') {</code></li>
<li class="tab4"><code>linkTextNode.innerHTML = messageHide;</code></li>
<li class="tab4"><code>linkTextNode.className = "link-hide";</code></li>
<li class="tab4"><code>linkTextNode.onclick = function() {</code></li>
<li class="tab5"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab6"><code>getTextNodeByLangName(arrEls[j],'hide');</code></li>
<li class="tab5"><code>}</code></li>
<li class="tab4"><code>};</code></li>
<li class="tab4"><code>els[i].style.display = 'block';</code></li>
<li class="tab3"><code>}</code></li>
<li class="tab2"><code>}</code></li>
<li class="tab1"><code>}</code></li>
<li><code>}</code></li>
<li><code>&nbsp;</code></li>
<li><code>function init_textNode() {</code></li>
<li class="tab1"><code>if (!document.getElementsByTagName) return</code></li>
<li class="tab2"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab3"><code>getTextNodeByLangName(arrEls[j],'hide');</code></li>
<li class="tab2"><code>}</code></li>
<li><code>}</code></li>
<li><code>&nbsp;</code></li>
<li><code>addLoadEvent(init_textNode);</code></li>
</ol>
<p>A grande mudança está na localização do atributo <code>lang</code>, como a seguir:</p>
<ol class="code">
<li class="tab2"><code>var lang = els[i].getAttribute("lang"); </code></li>
<li class="tab2"><code>if (lang == 'en') {</code></li>
</ol>
<p>Agora, a classe que antes era responsável por esconder os conteúdos, agora ficou apenas com o trabalho de estilizar estas áreas. <strong>;)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2006/11/06/mostrar-esconder-conteudo-via-dom-v2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sombra em imagem com DOM e CSS</title>
		<link>http://ramonpage.com/2006/11/05/sombra-em-imagem-com-dom-e-css/</link>
		<comments>http://ramonpage.com/2006/11/05/sombra-em-imagem-com-dom-e-css/#comments</comments>
		<pubDate>Sun, 05 Nov 2006 22:01:56 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://ramonpage.com/2006/11/05/sombra-em-imagem-com-dom-e-css/</guid>
		<description><![CDATA[Image drop shadow with DOM and CSS Inspirado pelos artigos do A List Apart, há um tempo venho pensando numa solução para criar sombras em imagens sem atrapalhar minha semântica, ou seja, com o mínimo de manipulação da marcação em torno da imagem. Depois de alguns estudos e testes, cheguei num resultado onde é necessário [...]]]></description>
			<content:encoded><![CDATA[<h3 class="lang-en" lang="en">Image drop shadow with DOM and CSS</h3>
<p>Inspirado <a href="http://alistapart.com/articles/cssdropshadows/" class="external-link">pelos</a> <a href="http://alistapart.com/articles/cssdrop2/" class="external-link">artigos</a> do <a href="http://alistapart.com/" class="external-link">A List Apart</a>, há um tempo venho pensando numa solução para criar sombras em imagens sem atrapalhar minha semântica, ou seja, com o mínimo de manipulação da marcação em torno da imagem. Depois de alguns estudos e testes, cheguei num resultado onde é necessário utilizar <em>apenas</em> uma classe para criar as sombras.</p>
<p class="lang-en" lang="en">Inspired by two articles of <strong>A List Apart</strong>, I come thinking about a solution to create drop shadows on images without confuse my semantic, that is, with the minimum of manipulation in markup around the image. After some studies and tests, I arrived in a result where it&#8217;s necessary to use only one class to create the drop shadows.</p>
<p><span id="more-24"></span></p>
<h3>Como funciona</h3>
<h3 class="lang-en" lang="en">How it works</h3>
<p>O conceito da criação das sombras é o seguinte:</p>
<ol>
<li>Adicionar um <code>div</code>, via <abbr title="Document Object Model">DOM</abbr>, em volta da imagem;</li>
<li>Setar este <code>div</code> com a mesma largura da imagem, para que a sombra fique proporcional à largura da mesma;</li>
<li>Inserir um background que simule uma sombra neste <code>div</code> via <abbr title="Cascading Style Sheets">CSS</abbr>;</li>
<li>Deslocar, levemente, a imagem para obter o tamanho de sombra desejado, também via <abbr title="Cascading Style Sheets">CSS</abbr>.</li>
<li>Pronto!</li>
</ol>
<ol class="lang-en" lang="en">
<li>Insert a <code>div</code>, with <abbr title="Document Object Model">DOM</abbr>, around the image;</li>
<li>Set this <code>div</code> with the same width of the image;</li>
<li>Insert a shadow background on <code>div</code> with <abbr title="Cascading Style Sheets">CSS</abbr>;</li>
<li>Dislocate, lightly, the image to get the desired size of drop shadow, also with <abbr title="Cascading Style Sheets">CSS</abbr>.</li>
<li>That&#8217;s all!</li>
</ol>
<p>Veja um exemplo:</p>
<p class="lang-en" lang="en">Take a look:</p>
<ol class="code">
<li><code>&lt;img src="../avatar-80x80.gif" class="shadow" /&gt;</code></li>
</ol>
<p>Resulta em:</p>
<p class="lang-en" lang="en">Results in:</p>
<p><img src="http://ramonpage.com/wp-content/themes/pagev2/pics/avatar-80x80.gif" class="shadow" /></p>
<h3>Os códigos</h3>
<h3 class="lang-en" lang="en">The codes</h3>
<p>Criando o container, via DOM, para receber a sombra da imagem.</p>
<ol class="code">
<li><code>setImageDropShadow = function (searchClass,tag) {</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var browser=navigator.appName;</code></li>
<li class="tab1"><code>var agent = navigator.userAgent;</code></li>
<li class="tab1"><code>var b_version=navigator.appVersion;</code></li>
<li class="tab1"><code>var version=parseFloat(b_version);</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var opera = false</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>if(agent.indexOf("Opera")!=-1){</code></li>
<li class="tab2"><code>var versionindex=agent.indexOf("Opera")+6;</code></li>
<li class="tab3"><code>if (parseInt(agent.charAt(versionindex))>=8)</code></li>
<li class="tab4"><code>opera = true;</code></li>
<li class="tab1"><code>}</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var els = document.getElementsByTagName(tag); </code></li>
<li class="tab1"><code>var pattern = new RegExp("\\b"+searchClass+"\\b");</code></li>
<li class="tab1"><code>for (i = 0; i < els.length; i++) {</code></li>
<li class="tab2"><code>if ( pattern.test(els[i].className) ) {</code></li>
<li class="tab3"><code>var NewDiv = document.createElement('div');</code></li>
<li class="tab3"><code>NewDiv.className = "shadow-container";</code></li>
<li><code>&nbsp;</code></li>
<li class="tab3"><code>if (((browser=="Microsoft Internet Explorer") &#038;&#038; (version>=4) &#038;&#038; (!agent.indexOf("MSIE 7") != -1)) || (opera)) { // Fix IE 6 and Opera width problem</code></li>
<li class="tab4"><code>NewDiv.style.width = (els[i].width - 4).toString() + "px";</code></li>
<li class="tab3"><code>} else {</code></li>
<li class="tab4"><code>NewDiv.style.width = (6 + els[i].width).toString() + "px";</code></li>
<li class="tab3"><code>}</code></li>
<li><code>&nbsp;</code></li>
<li class="tab3"><code>var parentDiv = els[i].parentNode;</code></li>
<li class="tab3"><code>parentDiv.insertBefore(NewDiv, els[i]);</code></li>
<li class="tab3"><code>NewDiv.appendChild(els[i]);</code></li>
<li class="tab2"><code>}</code></li>
<li class="tab1"><code>}</code></li>
<li><code>}</code></li>
<li><code>&nbsp;</code></li>
<li><code>window.onload = function() {</code></li>
<li class="tab1"><code>setImageDropShadow('shadow','img');</code></li>
<li><code>};</code></li>
</ol>
<p>Estilizando a sombra. </p>
<ol class="code">
<li><code>.shadow-container {</code></li>
<li class="tab1"><code>position: relative;</code></li>
<li class="tab1"><code>background: url(bg-small-shadow.png);</code></li>
<li><code>}</code></li>
<li><code>&nbsp;</code></li>
<li><code>.shadow-container img {</code></li>
<li class="tab1"><code>position: relative;</code></li>
<li class="tab1"><code>display: block;</code></li>
<li class="tab1"><code>top: -3px;</code></li>
<li class="tab1"><code>left: -3px;</code></li>
<li class="tab1"><code>margin: 0;</code></li>
<li class="tab1"><code>padding: 2px;</code></li>
<li class="tab1"><code>background: #fff;</code></li>
<li class="tab1"><code>border: 1px solid #e1e1e1;</code></li>
<li><code>}</code></li>
</ol>
<p>Para criar a sombra, utilizei uma imagem de 20x20px, em tom de cinza claro (#d8d8d8) e 50% de transparência. <a href="http://ramonpage.com/wp-content/themes/pagev2/pics/bg-small-shadow.png">A imagem pode ser vista aqui!</a></p>
<p class="lang-en" lang="en"><a href="http://ramonpage.com/wp-content/themes/pagev2/pics/bg-small-shadow.png">Get the drop shadow background here!</a></p>
<p>Detalhe importante! A parte em negrito, a seguir, é a que determina a distância da sombra em relação à imagem. Quanto menores os valores inseridos para <code>top</code> e <code>left</code>, maior será a distância da sombra em relação à imagem.</p>
<p class="lang-en" lang="en">Important detail! The lines in boldface, below, are that determine the distance between the image and the drop shadow. Change the values for better use.</p>
<ol class="code">
<li><code>.shadow-container img {</code></li>
<li class="tab1"><code>position: relative;</code></li>
<li class="tab1"><code>display: block;</code></li>
<li class="tab1"><code><strong>top: -3px;</strong></code></li>
<li class="tab1"><code><strong>left: -3px;</strong></code></li>
<li class="tab1"><code>margin: 0;</code></li>
<li class="tab1"><code>padding: 2px;</code></li>
<li class="tab1"><code>background: #fff;</code></li>
<li class="tab1"><code>border: 1px solid #e1e1e1;</code></li>
<li><code>}</code></li>
</ol>
<h3>Tudo o que você precisa para usar sombras em suas imagens</h3>
<h3 class="lang-en" lang="en">All you need to work with it</h3>
<ul>
<li><a href="http://ramonpage.com/wp-content/themes/pagev2/js/image-drop-shadow.js">image-drop-shadow.js</a></li>
<li><a href="http://ramonpage.com/wp-content/uploads/image-drop-shadow.css">image-drop-shadow.css</a></li>
<li><a href="http://ramonpage.com/wp-content/themes/pagev2/pics/bg-small-shadow.png">bg-small-shadow.png</a></li>
</ul>
<p>Esta solução foi testada no <strong>Opera 9.x</strong>, <strong>Firefox 1.5.0.7</strong>, <strong>IE 6.0</strong>, <strong>IE 7.0 RC1</strong> e <strong>Safari 2.0.4</strong>. </p>
<p>Reportes de erros, bugs, e, pricipalmente, sugestões são muito bem-vindos. <strong>;)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2006/11/05/sombra-em-imagem-com-dom-e-css/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mostrar-esconder conteúdo via DOM</title>
		<link>http://ramonpage.com/2006/09/04/mostrar-esconder-conteudo-via-dom/</link>
		<comments>http://ramonpage.com/2006/09/04/mostrar-esconder-conteudo-via-dom/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 04:10:50 +0000</pubDate>
		<dc:creator>RamonPage</dc:creator>
				<category><![CDATA[DOM]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://ramonpage.com/2006/09/04/mostrar-esconder-conteudo-via-dom/</guid>
		<description><![CDATA[Show-hide content with DOM Um dos requisitos que declarei para o meu site foi a possibilidade de inserir conteúdo em outras línguas para as minhas postagens, em especial em inglês. Depois de alguns estudos cheguei à estrutura que desejava e desenvolvi um script em DOM para implementá-la. Como este não era um requisito de prioridade [...]]]></description>
			<content:encoded><![CDATA[<h3 class="lang-en" lang="en">Show-hide content with DOM</h3>
<p>Um dos requisitos que declarei para o meu site foi a possibilidade de inserir conteúdo em outras línguas para as minhas postagens, em especial em inglês. Depois de alguns estudos cheguei à estrutura que desejava e desenvolvi um script em <abbr title="Document Object Model">DOM</abbr> para implementá-la. Como este não era um requisito de prioridade alta, deixei sua implementação para uma data futura. Eis que esta data chegou!</p>
<p><span id="more-22"></span></p>
<p>O conceito do script é simples: defini uma classe para todos os elementos (<em>tags</em>) que eu gostaria de inserir em inglês e fiz uma função em javascript para localizar todas as instâncias desta e escondê-la. Clicando em um link específico, as áreas são apresentadas. Clicando novamente no mesmo link, as áreas são escondidas.</p>
<p>Exemplo escondido:</p>
<p class="lang-en" lang="en">This is an example of show-hide english content on <code>&lt;p&gt;</code> element</p>
<ul class="lang-en" lang="en">
<li>This is a list with english content</li>
<li>Line example</li>
<li>Line example</li>
</ul>
<blockquote class="lang-en" lang="en"><p>This is an <code>&lt;blockquote&gt;</code> element with english content.</p>
</blockquote>
<h3>Definindo os recursos da solução</h3>
<p>O primeiro passo foi definir um link para esconder e mostrar as áreas. Inseri um ID para este link para poder trabalhá-lo via script.</p>
<ol class="code">
<li><code>&lt;a href="#" id="showHideTextNode"&gt;&lt;/a&gt;<br />
</code></li>
</ol>
<p>Não inseri nenhum conteúdo no link para poder manipulá-lo via script, trocando o texto, via <code>innerHTML</code>, de acordo com o clique efetuado (<em>[+] Show english content</em> para mostrar o conteúdo e <em>[-] Hide english content</em> para esconder o conteúdo).</p>
<p>Após, apenas defini uma classe para cada elemento que tivesse conteúdo em inglês. A classe foi chamada de <code>lang-eng</code>.</p>
<h3>Manipulando a classe lang-eng via javascript</h3>
<p>O primeiro passo foi definir um <code>Array</code> para todos os elementos que poderiam receber a classe <code>lang-eng</code>.</p>
<ol class="code">
<li>var arrEls = new Array(&#8220;h1&#8243;,&#8221;h2&#8243;,&#8221;h3&#8243;,&#8221;h4&#8243;,&#8221;h5&#8243;,&#8221;h6&#8243;,&#8221;p&#8221;,&#8221;span&#8221;,&#8221;ul&#8221;,&#8221;blockquote&#8221;)</li>
</ol>
<p>Após, foi preciso apenas uma função para localizar a classe <code>lang-eng</code> e efetuar as alterações nas páginas  em que ela foi instanciada. Utilizei como base o script <a href="http://www.dustindiaz.com/getelementsbyclass" class="external-link">getElementByClass</a> do <a href="http://www.dustindiaz.com/" class="external-link">Dustin Diaz</a>. A partir daí, otimizei o script para chegar ao resultado que gostaria.</p>
<ol class="code">
<li><code>function getTextNodeByClassName(searchClass,tag,eventNode) {</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var els = document.getElementsByTagName(tag);</code></li>
<li class="tab1"><code>var pattern = new RegExp("\\b"+searchClass+"\\b");</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var idLink = 'showHideTextNode';</code></li>
<li class="tab1"><code>var messageShow = '[+] Show english content';</code></li>
<li class="tab1"><code>var messageHide = '[-] Hide english content';</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var linkTextNode = document.getElementById(idLink);</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>for (i = 0; i < els.length; i++) {</code></li>
<li class="tab2"><code>if ( pattern.test(els[i].className) ) {</code></li>
<li class="tab3"><code>if (eventNode == 'hide') {</code></li>
<li class="tab4"><code>linkTextNode.innerHTML = messageShow;</code></li>
<li class="tab4"><code>linkTextNode.className = "link-show";</code></li>
<li class="tab4"><code>linkTextNode.onclick = function() {</code></li>
<li class="tab5"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab6"><code>getTextNodeByClassName('lang-eng',arrEls[j],'show');</code></li>
<li class="tab5"><code>}</code></li>
<li class="tab4"><code>};</code></li>
<li class="tab4"><code>els[i].style.display = 'none';</code></li>
<li class="tab3"><code>} else if (eventNode == 'show') {</code></li>
<li class="tab4"><code>linkTextNode.innerHTML = messageHide;</code></li>
<li class="tab4"><code>linkTextNode.className = "link-hide";</code></li>
<li class="tab4"><code>linkTextNode.onclick = function() {</code></li>
<li class="tab5"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab6"><code>getTextNodeByClassName('lang-eng',arrEls[j],'hide');</code></li>
<li class="tab5"><code>}</code></li>
<li class="tab4"><code>};</code></li>
<li class="tab4"><code>els[i].style.display = 'block';</code></li>
<li class="tab3"><code>}</code></li>
<li class="tab2"><code>}</code></li>
<li class="tab1"><code>}</code></li>
<li><code>}</code></li>
</ol>
<p>Por fim, inseri uma função para esconder todos os elementos declarados com a classe <code>lang-eng</code>. Esta função é inicializada por um <a href="http://simon.incutio.com/archive/2004/05/26/addLoadEvent" class="external-link">addLoadEvent</a>.</p>
<ol class="code">
<li>function init_langEngNode() {</li>
<li class="tab1"><code>if (!document.getElementsByTagName) return</code></li>
<li class="tab2"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab3"><code>getTextNodeByClassName('lang-eng',arrEls[j],'hide');</code></li>
<li class="tab2"><code>}</code></li>
<li>}</li>
<li><code>&nbsp;</code></li>
<li>add_event(init_langEngNode);</li>
</ol>
<h3>Como tudo funciona</h3>
<p>Pegando todas as tags inseridas como parâmetro e selecionando apenas a classe desejada para estas tags. Numa tag com <code>class="lang-eng alignleft"</code>, por exemplo, apenas a <em>lang-left</em> seria selecionada.</p>
<ol class="code">
<li><code>function getTextNodeByClassName(searchClass,tag,eventNode) {</code></li>
<li><code>&nbsp;</code></li>
<li class="tab1"><code>var els = document.getElementsByTagName(tag);</code></li>
<li class="tab1"><code>var pattern = new RegExp("\\b"+searchClass+"\\b");</code></li>
</ol>
<p>Eu poderia setar "*" como <em>tag</em> para pegar todas as tags na página (vide linha "<code>var els = document.getElementsByTagName(tag);</code>"), inutilizando a necessidade de criação do Array de elementos, porém esta estrutura tiraria o controle que eu teria sobre os elementos que eu efetivamente gostaria de esconder. </p>
<p>O bom da história é que praticamente toda a aplicabilidade da solução está no script, portanto qualquer alteração futura fica totalmente mais prática. Minhas intenções estavam totalmente voltadas na manipulação do mínimo possível de marcação e trabalhar diretamente no javascript.</p>
<p>Continuando...</p>
<p>Definindo o ID para o link de manipulação e suas mensagens.</p>
<ol class="code">
<li class="tab1"><code>var idLink = 'showHideTextNode';</code></li>
<li class="tab1"><code>var messageShow = '[+] Show english content';</code></li>
<li class="tab1"><code>var messageHide = '[-] Hide english content';</code></li>
</ol>
<p>Pegando o ID inserido no link da página.</p>
<ol class="code">
<li class="tab1"><code>var linkTextNode = document.getElementById(idLink);</code></li>
</ol>
<p>Para os elementos encontrados, testar se cada um deles tem a classe escolhida como parâmetro.</p>
<ol class="code">
<li class="tab1"><code>for (i = 0; i < els.length; i++) {</code></li>
<li class="tab2"><code>if ( pattern.test(els[i].className) ) {</code></li>
</ol>
<p>Foram definidos dois parâmetros para manipular as tags: <code>show</code> para mostrar os conteúdos e <code>hide</code> para escondê-los. Uma estrutura de <code>if</code> foi criada para testar em qual status a página está. Caso o evento seja <code>hide</code> o link de manipulação recebe a mensagem <em>[+] Show english content</em>. Caso seja <code>show</code>, recebe a mensagem <em>[-] Hide english content</em>. </p>
<p>Para o evento <code>onclick</code> do link é inserida uma função para voltar à mesma função e mostrar ou esconder o conteúdo. A forma de esconder é simples: o elemento encontrado recebe como atributo <code>display</code> o valor "<code>none</code>" (<code>els[i].style.display = 'none';</code>). Para mostrar, o atributo <code>display</code> recebe o valor "<code>block</code>" (<code>els[i].style.display = 'block';</code>).</p>
<ol class="code">
<li class="tab3"><code>if (eventNode == 'hide') {</code></li>
<li class="tab4"><code>linkTextNode.innerHTML = messageShow;</code></li>
<li class="tab4"><code>linkTextNode.className = "link-show";</code></li>
<li class="tab4"><code>linkTextNode.onclick = function() {</code></li>
<li class="tab5"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab6"><code>getTextNodeByClassName('lang-eng',arrEls[j],'show');</code></li>
<li class="tab5"><code>}</code></li>
<li class="tab4"><code>};</code></li>
<li class="tab4"><code>els[i].style.display = 'none';</code></li>
<li class="tab3"><code>} else if (eventNode == 'show') {</code></li>
<li class="tab4"><code>linkTextNode.innerHTML = messageHide;</code></li>
<li class="tab4"><code>linkTextNode.className = "link-hide";</code></li>
<li class="tab4"><code>linkTextNode.onclick = function() {</code></li>
<li class="tab5"><code>for (j = 0; j < arrEls.length; j++) {</code></li>
<li class="tab6"><code>getTextNodeByClassName('lang-eng',arrEls[j],'hide');</code></li>
<li class="tab5"><code>}</code></li>
<li class="tab4"><code>};</code></li>
<li class="tab4"><code>els[i].style.display = 'block';</code></li>
<li class="tab3"><code>}</code></li>
<li class="tab2"><code>}</code></li>
<li class="tab1"><code>}</code></li>
<li><code>}</code></li>
</ol>
<p>O último passo foi estilizar a classe <code>lang-eng</code> para separar as áreas apresentadas (português/ inglês), senão ficaria tudo uma coisa só, visualmente.</p>
<p>Esta solução pode ser utilizada em vários outros contextos. Basta ter criatividade. ;)</p>
<p class="update"><strong>Atualização 2006-11-06:</strong> Versão 2.0 concluída, ver: <a href="http://ramonpage.com/2006/11/06/mostrar-esconder-conteudo-via-dom-v2/">Mostrar-esconder conteúdo via DOM V.2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ramonpage.com/2006/09/04/mostrar-esconder-conteudo-via-dom/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

