<?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>Diego Pessoa &#187; Web Standards</title>
	<atom:link href="http://www.diegopessoa.com/lang/pt-br/categories/web-developing/web-standards/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diegopessoa.com</link>
	<description></description>
	<lastBuildDate>Thu, 07 Jan 2010 04:22:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Resolvendo o problema do botão voltar em aplicações Ajax</title>
		<link>http://www.diegopessoa.com/lang/pt-br/2009/03/09/solving-the-problem-of-back-button-in-ajax-applications</link>
		<comments>http://www.diegopessoa.com/lang/pt-br/2009/03/09/solving-the-problem-of-back-button-in-ajax-applications#comments</comments>
		<pubDate>Tue, 10 Mar 2009 00:18:27 +0000</pubDate>
		<dc:creator>Diego Pessoa</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[Web developing]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Web Accessibility]]></category>

		<guid isPermaLink="false">http://www.diegopessoa.com/?p=102</guid>
		<description><![CDATA[Quem aqui sempre sonhou em fazer aplicações em Ajax na qual o usuário pode navegar livremente utilizando o botão voltar e avançar, e além disso, pode adicionar seções específicas ao seu bookmark. Na teoria, isto não seria possível, visto que, o &#8220;Ajax&#8221; em si, utilizando pela maioria, é utilizado para recarregar apenas alguns blocos da [...]]]></description>
			<content:encoded><![CDATA[<p><span lang="pt-br">Quem aqui sempre sonhou em fazer aplicações em Ajax na qual o usuário pode navegar livremente utilizando o botão voltar e avançar, e além disso, pode adicionar seções específicas ao seu bookmark. Na teoria, isto não seria possível, visto que, o &#8220;Ajax&#8221; em si, utilizando pela maioria, é utilizado para recarregar apenas alguns blocos da página, mantendo aquela página ativa, e consequentemente, impossibilitando o uso do botão voltar ou de bookmarks, do contrário teríamos a boa e velha requisição da página inteira.</span></p>
<p><span lang="pt-br">Mas então, como o GMAIL funciona? Ele é totalmente em ajax e mesmo assim, você consegue navegar utilizando o botão voltar, e se colocar um link como http://mail.google.com/mail/#compose na barra de endereços, ele irá abrir a tela de composição de e-mails normalmente. O grande segredo está nas #âncoras.<br />
Navegação Orientada a Âncoras</span></p>
<p><span lang="pt-br">Uma coisa muito interessante das chamadas Âncoras, é que elas permitem que você use o botão voltar e avançar, por exemplo, sem gerar nenhuma requisição e sem precisar sair daquela página, então, o que poderíamos fazer?</span></p>
<p><span lang="pt-br">A primeira coisa seria criar um arquivo Javascript que irá ficar toda hora verificando se alguma âncora está ativa, caso esteja, ele envia a requisição ajax chamando a seção específica, baseada no nome da âncora, que será carregada dentro do bloco principal, simples não?</span></p>
<p><span lang="pt-br">Como já é de praxe para Javascript hoje em dia, usaremos Jquery, portanto, lembrem-se de incluir o arquivo da biblioteca na sua aplicação.</span></p>
<p><span lang="pt-br">Teríamos então, um arquivo de nome &#8220;core.js&#8221;, assim:</span></p>
<div lang="pt-br">
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Ao carregar a página, o temporizador é iniciando para checar se há uma nova âncora ativa a cada 300ms</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">setInterval<span class="br0">&#40;</span><span class="st0">&#34;checkAnchor()&#34;</span>, <span class="nu0">300</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> currentAnchor = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">* Metodo que checa se há alguma mudança de âncora, se houver, envia a requisição ajax</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> checkAnchor<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>currentAnchor != document.<span class="me1">location</span>.<span class="me1">hash</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">currentAnchor = document.<span class="me1">location</span>.<span class="me1">hash</span>;</div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Se não há nenhuma âncora ativa, a seção default é carregada</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span><span class="br0">&#40;</span>!currentAnchor<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">query = <span class="st0">&#34;section=home&#34;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">* Cria a string de resultado. Convertendo a url: URL/#fotos&#38;amp;amp;id=2 em URL/?section=fotos&#38;amp;amp;id=2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> splits = currentAnchor.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&#8216;&#38;amp;amp;&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> section = splits<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">delete</span> splits<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">var</span> params = splits.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&#8216;&#38;amp;amp;&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> query = <span class="st0">&#34;section=&#34;</span> + section + params;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Envia a requisição</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">$.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#34;callbacks.php&#34;</span>,query, <span class="kw2">function</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#34;#bloco_principal&#34;</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
</ol>
</div>
</div>
<p><span lang="pt-br">Ok, o conteúdo será carregando no eleme nto de ID &#8220;bloco_principal&#8221; através do resultado das requisições Ajax que estão sendo enviadas para a página &#8220;callbacks.php&#8221; em formato de querystring GET.<br />
Para pegarmos, teríamos algo desse tipo:</span></p>
<div lang="pt-br">
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$section</span> = <a href="http://www.php.net/addslashes"><span class="kw3">addslashes</span></a><span class="br0">&#40;</span><a href="http://www.php.net/strip_tags"><span class="kw3">strip_tags</span></a><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8217;section&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$pagina</span> = <span class="st0">&#34;paginas/&#34;</span>.<span class="re0">$section</span>.<span class="st0">&#34;.php&#34;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$pagina</span><span class="br0">&#41;</span><span class="br0">&#41;</span>  <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="re0">$pagina</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div></div>
<p><span lang="pt-br">Com isso, bastaria uma pasta &#8220;paginas&#8221; contendo as páginas com os mesmos nomes das âncoras.</span></p>
<p><span lang="pt-br">E para chamar cada seção, bastaria uma simples página html com links do tipo:</span></p>
<p><span lang="pt-br">http://meusite.com/#fotos</span></p>
<p><span lang="pt-br">que seria detectado pelo método &#8220;checkAnchor()&#8221; do javascript, que chamará uma requisição php carregando a página de nome fotos.php dentro do diretorio paginas, que será exibida dentro do bloco #bloco_principal que está contido na mesma página do link clicado, e o melhor de tudo, você pode voltar, avançar e adicionar as seções que quiser aos favoritos, à vontade.</span></p>
<p><span lang="pt-br">Para ilustrar melhor o exemplo, fiz uma cópia descarada (haha), do site do evento php-pb.net, com a única diferença de possuir navegação em ajax através de âncoras (o original possui navegação normal). Acessem pelo link: <a href="http://www.diegopessoa.com/php-pb-ajax" target="_blank">http://www.diegopessoa.com/php-pb-ajax</a></span></p>
<p><span lang="pt-br">Se quiserem baixar o exemplo funcionando, <a href="http://diegopessoa.com/php-pb-ajax/%5bdiegopessoa.com%5dAjaxBack.zip" target="_blank">cliquem aqui</a>!</span></p>
















]]></content:encoded>
			<wfw:commentRss>http://www.diegopessoa.com/lang/pt-br/2009/03/09/solving-the-problem-of-back-button-in-ajax-applications/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>II Encontro PHP</title>
		<link>http://www.diegopessoa.com/lang/pt-br/2009/03/09/ii-php-meeting</link>
		<comments>http://www.diegopessoa.com/lang/pt-br/2009/03/09/ii-php-meeting#comments</comments>
		<pubDate>Mon, 09 Mar 2009 23:47:28 +0000</pubDate>
		<dc:creator>Diego Pessoa</dc:creator>
				<category><![CDATA[WCAG 2.0]]></category>
		<category><![CDATA[Web Accessibility]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[ii-encontro-php-pb]]></category>

		<guid isPermaLink="false">http://www.diegopessoa.com/?p=99</guid>
		<description><![CDATA[Olá pessoal,
Neste sábado, dia 7 de março, aconteceu no auditório do Shopping Sebrae o II Encontro de usuários PHP da Paraíba. Quero deixar aqui meus mais sinceros parabéns para todos que fizeram parte deste evento, que, vem se tornando cada vez maior, mostrando que a comunidade PHP da Paraíba é ativa e participativa!
Para os que [...]]]></description>
			<content:encoded><![CDATA[<p><span lang="pt-br">Olá pessoal,</span></p>
<p><span lang="pt-br">Neste sábado, dia 7 de março, aconteceu no auditório do Shopping Sebrae o II Encontro de usuários PHP da Paraíba. Quero deixar aqui meus mais sinceros parabéns para todos que fizeram parte deste evento, que, vem se tornando cada vez maior, mostrando que a comunidade PHP da Paraíba é ativa e participativa!</span></p>
<p><span lang="pt-br">Para os que não puderam acompanhar o evento, estou disponibilizando abaixo os slides da minha palestra; &#8220;Aplicações Web Acessíveis&#8221;.</span></p>



<div id="__ss_1119988" style="width: 425px; text-align: left;"><span lang="pt-br"><a title="Aplicações Web Acessíveis" href="http://www.slideshare.net/diegoep/aplicaes-web-acessveis?type=presentation">Aplicações Web Acessíveis</a></span></div>
<div style="width: 425px; text-align: left;"><a title="Aplicações Web Acessíveis" href="http://www.slideshare.net/diegoep/aplicaes-web-acessveis?type=presentation"><br />
</a></div>
<div style="width: 425px; text-align: left;"><a style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Aplicações Web Acessíveis" href="http://www.slideshare.net/diegoep/aplicaes-web-acessveis?type=presentation"></a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=aplicacoeswebacessiveis-090309010234-phpapp01&#38;stripped_title=aplicaes-web-acessveis" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=aplicacoeswebacessiveis-090309010234-phpapp01&#38;stripped_title=aplicaes-web-acessveis" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<h4><span lang="pt-br">Veja as outras apresentações do evento:</span></h4>
<p><span lang="pt-br"><a href="http://www.slideshare.net/tag/ii-encontro-php-pb">http://www.slideshare.net/tag/ii-encontro-php-pb</a></span></p>



]]></content:encoded>
			<wfw:commentRss>http://www.diegopessoa.com/lang/pt-br/2009/03/09/ii-php-meeting/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WCAG! WCAG!</title>
		<link>http://www.diegopessoa.com/lang/pt-br/2009/02/02/wcag-wcag</link>
		<comments>http://www.diegopessoa.com/lang/pt-br/2009/02/02/wcag-wcag#comments</comments>
		<pubDate>Mon, 02 Feb 2009 03:47:30 +0000</pubDate>
		<dc:creator>Diego Pessoa</dc:creator>
				<category><![CDATA[WCAG 2.0]]></category>
		<category><![CDATA[Web Accessibility]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.diegopessoa.com/?p=93</guid>
		<description><![CDATA[Neste começo de 2009 a W3C anunciou novos padrões que ajudarão os desenvolvedores web a criar sites que atendem de maneira mais adequada às necessidades dos portadores de deficiências e usuários idosos. Trata-se da segunda versão do WCAG (Web Content Accessibility Guidelines) ou (Diretrizes  de Acessibilidade a Conteúdo Web, este novo padrão produzido pela [...]]]></description>
			<content:encoded><![CDATA[<p><span lang="pt-br">Neste começo de 2009 a <a title="Clique para acessar o site da w3c (World Wide Web Consortium)" href="http://www.w3.org" target="_blank"><acronym title="World Wide Web Consortium">W3C</acronym></a> anunciou novos padrões que ajudarão os desenvolvedores web a criar sites que atendem de maneira mais adequada às necessidades dos portadores de deficiências e usuários idosos. Trata-se da segunda versão do WCAG (Web Content Accessibility Guidelines) ou (Diretrizes  de Acessibilidade a Conteúdo Web, este novo padrão produzido pela Iniciativa de Acessibilidade Web (WAI) da W3C atenderá uma largo faixa de conteúdos (tais como texto, imagens, áudio e vídeo) e aplicações web, permitindo melhores testes de verificação e ainda proverá mais flexibilidade e maior potencial de inovação para desenvolvedores web. O WCAG 2.0 é mais fácil de entender e usar juntamente como o material educacional e técnico disponível.</span></p>
<p><span lang="pt-br">O WCAG 2.0 ataca as dificuldades de acesso a web experimentadas por pessoas com limitações visuais, auditivas, físicas, cognitivas e neurológicas e por usuários idosos com necessidades de acessibilidade a web. Seguindo quatro princípios:</span></p>
<ul>
<li><span lang="pt-br">Perceptível (por exemplo, fornecer textos alternativos a imagens, modo “caption” para áudio, apresentar conteúdo adaptável a diferentes maneiras de ser apresentado e usar contraste de cores);</span></li>
<li><span lang="pt-br">Operável (por exemplo, prover acesso às funcionalidades pelo teclado, contraste de cores, oferecer tempo adequado para ler e entrar com dados, evitar imagens que causem convulsões e melhor navegabilidade);</span></li>
<li><span lang="pt-br">Compreensível (por exemplo, prover conteúdos       legíveis e previsíveis e ajudar o usuário a evitar e corrigir erros); e</span></li>
<li><span lang="pt-br">Robusto (por exemplo, prover compatibilidade       com tecnologias assistidas)</span></li>
</ul>
<p><span lang="pt-br">[texto adaptado do site oficial da W3C]</span></p>
<p><span lang="pt-br">Para quem já quer começar a estudar as novas diretrizes, <a title="Clique para acessar o guia de referência do WCAG 2" href="http://www.w3.org/TR/WCAG20/" target="_blank">acesse o guia de referência</a>.</span></p>
<p><span lang="pt-br">Para animar vocês, vejam o vídeo com o tema da WCAG 2 (lembrem-se de ativar o recurso de legendas do player do youtube):</span></p>








<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/gtuna2AWvqk&#38;hl=pt-br&#38;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/gtuna2AWvqk&#38;hl=pt-br&#38;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diegopessoa.com/lang/pt-br/2009/02/02/wcag-wcag/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
