<?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>Zona J &#187; jquery</title>
	<atom:link href="http://zonaj.org/category/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://zonaj.org</link>
	<description>Zona Java - Um blog português sobre java.</description>
	<lastBuildDate>Sun, 29 Jun 2014 18:29:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>BreakDance na ZonaJ</title>
		<link>http://zonaj.org/2007/05/06/breakdance/</link>
		<comments>http://zonaj.org/2007/05/06/breakdance/#comments</comments>
		<pubDate>Sun, 06 May 2007 22:54:25 +0000</pubDate>
		<dc:creator><![CDATA[rantunes]]></dc:creator>
				<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=33</guid>
		<description><![CDATA[Num blog em que o texto das várias entradas tende a ser extenso (como este), a página principal começa rapidamente a ter um comprimento considerável. Quando se pretende consultar uma entrada mais antiga só temos duas hipóteses: se buy cheap cialis online guimos o link permanente para a entrada (caixa &#8216;Posts Recentes&#8217;) e depois fazemos &#8230; <a href="http://zonaj.org/2007/05/06/breakdance/" class="more-link">Continue reading <span class="screen-reader-text">BreakDance na ZonaJ</span></a>]]></description>
				<content:encoded><![CDATA[<p>Num blog em que o texto das várias entradas tende a ser extenso (como este), a página principal começa rapidamente a ter um comprimento considerável.<br />
Quando se pretende consultar uma entrada mais antiga só temos duas hipóteses:      </p>
<ul>
<li>se
<div style="display: none"><a href='http://cialisonline247.com/' title='buy cheap cialis online'>buy cheap cialis online</a></div>
<p>guimos o link permanente para a entrada (caixa &#8216;Posts Recentes&#8217;) e depois fazemos &#8216;back&#8217; no browser;</li>
<li>damos ao dedo a fazer scroll na página até que a entrada fique visível.</li>
</ul>
<p>Uma forma interessante de resolver este problema seria ter uma opção de <em>toggle</em> do texto das entradas, ou seja, ter uma opção para mostrar ou esconder o texto dos posts por escolha do utilizador.</p>
<p>Estava a matutar sobre isto enquanto admirava os <a href="http://www.zonaj.org/?p=28">tons campestres</a> desta página  e pensei que não era má ideia pôr a solução em prática. </p>
<p>Um requisito importante é que o teria de fazer sem alterar efectivamente a página (só para não estar a  chatear o Administrador do blog durante o fim-de-semana <img src="http://zonaj.org/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /> ).</p>
<p>Outro é que o código teria de ser suficiente pequeno para poder ser postado aqui.</p>
<p>Era definitivamente um bom desafio para por à prova o <a href="http://jquery.com">jQuery</a>.</p>
<p>Precisava de quatro operações para concretizar as alterações:</p>
<ol>
<li>esconder inicialmente o texto das entradas e os links para tags e comentários mas não o titulo ou a informação dos autores;</li>
<li>acrescentar à frente do nome do autor um link para permitir mostrar ou esconder o texto;</li>
<li>associar ao evento <em>click</em> do link uma função para concretizar a opção do utilizador;</li>
<li>desenvolver a função;</li>
</ol>
<p>Usei o <a href="http://www.getfirebug.com/">Firebug</a> para analisar a estrutura do DOM da página.<br />
Cada entrada tem uma estrutura fixa: </p>
<ol>
<li>um <code>&lt;h2&gt;</code> com o link para o titulo;</li>
<li>um <code>&lt;h4&gt;</code> com a data do post e a identificação do autor;</li>
<li>um <code>&lt;div&gt;</code> com a class &#8216;entry&#8217; com o texto;</li>
<li>um <code>&lt;p&gt;</code> com a class &#8216;tagged&#8217; com links para as tags e comentários</li>
</ol>
<p>Portanto, para concretizar a primeira operação só precisava de esconder os elementos com as classes &#8216;entry&#8217; e &#8216;tagged&#8217; que em jQuery se traduz como:<br />
<code class="prettyprint">$('.entry, .tagged').hide();</code></p>
<p>Para a concretizar segunda operação acrescentei um link à frente do nome do autor, ou seja, de todos os <code>&lt;h4&gt;</code>s precedidos por <code>&lt;h2&gt;</code>s, ou em jQuery:<br />
<code class="prettyprint">$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code></p>
<p>Para a terceira opção e visto que associei os links criados à class <em>entryTogger</em>, basta associar uma função ao evento <em>onclick</em> de todos os
<div style="display:none"><a href='http://sildenafil-onlines.com/'>viagra canada</a></div>
<p> elementos com esta classe ou em jQuery:<br />
<code class="prettyprint">$('.entryToggler').click(toggleEntry);</code></p>
<p>Falta só desenvolver a função <em>toggleEntry</em>.</p>
<p>Uma vez que esta função tem acesso ao elemento <em>anchor</em>  seleccionado pelo utilizador (<code>this</code>), podia usá-lo como referência para:</p>
<ol>
<li>verificar o estado da entrada a partir do texto:<br />
<code class="prettyprint">var isHidden = $(this).text().search('Mostrar')!=-1;</code></li>
<li>seleccionar os elementos correspondentes ao texto e aos links para as tags e comentários:<br />
<code class="prettyprint">var x=$(this).parent().next(); x = x.add(x.next());</code></li>
<li>mostrar ou esconder os elementos seleccionados:<br />
	<code class="prettyprint">isHidden ? x.slideDown('slow') : x.slideUp('slow');</code></li>
<li>alterar o texto do link para ficar de acordo com a operação:<br />
<code class="prettyprint">isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');</code>	</li>
</ol>
<p>e estava feito!</p>
<p>Como podem testar o código? É fácil:<br />
abram a <a href="http://www.zonaj.org/">página principal</a> do blog. (pessoal do rss, tem <strong>mesmo</strong> que ser na página principal)</p>
<p>Se estiverem a usar o Firebug podem copiar o código completo para a consola e executarem-no:</p>
<pre class="prettyprint">
var toggleEntry = function(){	
	var isHidden = $(this).text().search('Mostrar')!=-1;
	var x=$(this).parent().next();
	x = x.add(x.next());
	isHidden ? x.slideDown('slow') : x.slideUp('slow');	
	isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');		
};
$('.entry, .tagged').hide();
$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');
$('.entryToggler').click(toggleEntry);
</pre>
<p>Para os outros casos, escrevi o código todo numa só linha que podem copiar para a caixa de endereço do browser (substituindo o http://www.zonaj.org):<br />
<code><br />
javascript:var toggleEntry = function(){var isHidden = $(this).text().search('Mostrar')!=-1;var x=$(this).parent().next();x = x.add(x.next());isHidden ? x.slideDown('slow') : x.slideUp('slow');isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');};$('.entry, .tagged').hide();$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');$('.entryToggler').click(toggleEntry);void(0);<br />
</code><br />
Testado com FF2, IE7 e Opera9.</p>
<p>É claro que tive a vantagem de não me ter de preocupar em importar o script de jQuery porque a própria página já o faz.<br />
Caso estivesse a alterar o DOM de uma página que não use jQuery, podia fazer o mesmo tipo de alterações usando o <a href="http://www.learningjquery.com/2006/12/jquerify-bookmarklet">jQuerify</a>.</p>
<p>Nota 1:<br />
Para deixar a primeira entrada sem alterações basta alterar a linha<br />
<code class="prettyprint">$('.entry, .tagged').hide();</code><br />
para<br />
<code class="prettyprint">$('.entry, .tagged').not(':first').hide();</code><br />
e a linha<br />
<code class="prettyprint">$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code><br />
para<br />
<code class="prettyprint">$('h2 ~ h4').not(':first').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code></p>
<p>Nota 2:<br />
Para remover a irritante &#8216;caixa picotada&#8217; à volta do link quando este fica activo, acrescentar como ultima linha da função:<br />
<code class="prettyprint">$(this).blur();</code> </p>
<p>Nota 3:<br />
O código final tem cerca de 10 (!) linhas e repeti-o 3 vezes neste post.</p>
<p>Nota 4:<br />
Para ter de volta a página original basta fazer reload no browser (mesmo tendo alterado a linha de endereço).</p>
]]></content:encoded>
			<wfw:commentRss>http://zonaj.org/2007/05/06/breakdance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
