<?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>SpotGeek.net &#187; JavaScript</title>
	<atom:link href="http://spotgeek.net/tag/ajaxjavascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://spotgeek.net</link>
	<description>Tecnologia , Programação , web , internet, php</description>
	<lastBuildDate>Sun, 13 May 2012 19:38:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>como escrever um código javascript limpo e bonito</title>
		<link>http://spotgeek.net/como-escrever-um-codigo-javascript-limpo-e-bonito/</link>
		<comments>http://spotgeek.net/como-escrever-um-codigo-javascript-limpo-e-bonito/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 18:58:15 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=243</guid>
		<description><![CDATA[Nicholas Zakas: “Maintainable JavaScript” @]]></description>
			<content:encoded><![CDATA[<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="512" height="322" 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="bgcolor" value="#000000" /><param name="flashVars" value="id=2820297&amp;vid=568351&amp;lang=en-us&amp;intl=us&amp;thumbUrl=http%3A//us.i1.yimg.com/us.yimg.com/i/us/sch/cn/v/v1/w642/568351_320_240.jpeg&amp;embed=1" /><param name="src" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.34" /><embed type="application/x-shockwave-flash" width="512" height="322" src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.34" flashvars="id=2820297&amp;vid=568351&amp;lang=en-us&amp;intl=us&amp;thumbUrl=http%3A//us.i1.yimg.com/us.yimg.com/i/us/sch/cn/v/v1/w642/568351_320_240.jpeg&amp;embed=1" bgcolor="#000000" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div><a href="http://video.yahoo.com/watch/568351/2820297">Nicholas Zakas: “Maintainable JavaScript”</a> @ <a href="http://video.yahoo.com">Yahoo! Video</a></div>
<div></div>
<div>Nicholas Zakas é um engenheiro na equipa da YUI</div>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/como-escrever-um-codigo-javascript-limpo-e-bonito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax File Browser System</title>
		<link>http://spotgeek.net/ajax-file-browser-system/</link>
		<comments>http://spotgeek.net/ajax-file-browser-system/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 01:46:16 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=203</guid>
		<description><![CDATA[Com o AJAX File Browser]]></description>
			<content:encoded><![CDATA[<p>Com o <a href="http://www.ajaxfilebrowser.com/" target="_blank">AJAX File Browser </a>conseguimos listar todas as sub-pastas e ficheiros de um disco e ainda abrir alguns ficheiros .doc .xls  .ppt caso tenha o MS OFFICE instalado.</p>
<p>Com um visual e funcionamento muito parecido ao explorer do Windows Vista e permite ainda o upload de ficheiros para o servidor.</p>
<p>Corre nos seguintes browsers:</p>
<ul>
<li>Internet Explorer 7</li>
<li>Mozilla Firefox 2 or later</li>
<li>Safari 3.0.4 or later</li>
<li>Google Chrome 0.3.154.9 or later</li>
<li>Netscape Navigator 9 or later</li>
</ul>
<p><a rel="lightbox[203]" href="http://spotgeek.net/blog/wp-content/uploads/2009/01/ajaxfilebrowser.png" title="ajaxfilebrowser"><img class="alignnone size-full wp-image-204" title="ajaxfilebrowser" src="http://spotgeek.net/blog/wp-content/uploads/2009/01/ajaxfilebrowser.png" alt="" width="500" height="304" /></a></p>
<p>Pode encontrar outras APIs como map drive em <a href="http://www.webdavsystem.com" target="_blank">http://www.webdavsystem.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/ajax-file-browser-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How global is your JavaScript?</title>
		<link>http://spotgeek.net/how-global-is-your-javascript/</link>
		<comments>http://spotgeek.net/how-global-is-your-javascript/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 09:41:29 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=176</guid>
		<description><![CDATA[Mats Bryntse “had an idea]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-5728" title="global pollution" src="http://ajaxian.com/wp-content/uploads/globalpollution.png" alt="" width="500" height="316" /></p>
<p><a href="http://mankzblog.wordpress.com/">Mats Bryntse</a> “had an idea about checking the most popular javascript frameworks &amp; APIs to see how they differ in terms of global namespace pollution. This page loads all the frameworks separately in an iframe and compares the window object against the one of a fresh iframe. I also included information about which builtin JavaScript classes have been augmented, not sure how that would be useful but it shows a difference in architectural approach between the frameworks. You can click a row to see the details about the global symbols in the framework/API.</p>
<p>The results vary more than I’d expected and it’s interesting to see the different namespacing strategies at play. YUI/Jquery/Ext keep the numbers down by putting everything in one global object. It seems like Microsoft is using their own kind of namespacing using the $ sign as a namespace delimiter rather than using real object properties as the rest of the frameworks do.”</p>
<p>You can check this out via <a href="http://mankz.com/code/GlobalCheck.htm">his checker page</a>. An interesting read and you can narrow in on APIs of your choice.</p>
<p>We like to talk about how evil global variables are, but I wonder if we take this a touch too seriously sometimes. Sure there can be collisions and the like, but a lot of projects are doing just fine <img src='http://spotgeek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>via : <a href="http://ajaxian.com/archives/how-global-is-your-javascript" target="_self">ajaxian.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/how-global-is-your-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como optimizar o seu Javascript e comprimir o css para loads mais rápidos</title>
		<link>http://spotgeek.net/como-optimizar-o-seu-javascript-e-comprimir-o-css-para-loads-mais-rapidos/</link>
		<comments>http://spotgeek.net/como-optimizar-o-seu-javascript-e-comprimir-o-css-para-loads-mais-rapidos/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 23:20:14 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[CSS3 & HTML 5]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[pages]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=163</guid>
		<description><![CDATA[O packed.it Web 2.0 é]]></description>
			<content:encoded><![CDATA[<p><span onmouseover="_tipon(this)" onmouseout="_tipoff()">O <a href="http://www.packed.it/" target="_blank">packed.it</a> Web 2.0 é um serviço on-line capaz de optimizar e melhorar a navegação na web. É simples, rápido e fácil de personalizar. </span></p>
<p><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><a href="http://www.packed.it/" target="_blank">Packed.it</a> é a solução para a Web 2.0, é compatível com a maioria dos browsers e com as melhores práticas em termos de acessibilidade.</span></p>
<p>artigo completo em :</p>
<p><a href="http://www.maxkiesler.com/index.php/weblog/comments/how_to_minimize_your_javascript_and_css_files_for_faster_page_loads/" target="_blank">http://www.maxkiesler.com/index.php/weblog/comments/how_to_minimize_your_javascript_and_css_files_for_faster_page_loads/</a></p>
<p><a href="http://www.packed.it/">http://www.packed.it/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/como-optimizar-o-seu-javascript-e-comprimir-o-css-para-loads-mais-rapidos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript: Regular Expression</title>
		<link>http://spotgeek.net/javascript-regular-expression/</link>
		<comments>http://spotgeek.net/javascript-regular-expression/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 10:34:59 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[regular expression]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=137</guid>
		<description><![CDATA[Neste artigo eu vou usar]]></description>
			<content:encoded><![CDATA[<p class="texto">Neste artigo eu vou usar tanto a palavra expressões                  regulares como Regular Expression (inglês). Eu vou usar                  em português para facilitar, mas esse nome não existe                  em português.</p>
<p class="texto">As expressões regulares são padrões                  utilizados para encontrar combinações de caracteres                  em Strings. É uma ferramenta muito poderosa porque consegue                  resumi em algumas linhas de código pesquisas altamente                  complexas. O principal uso de expressões regulares em Javascript                  seria na validação de dados.</p>
<p class="texto">Em JavaScript, expressões regulares também                  podem ser tratadas como um objeto. Esses padrões são                  usados com os métodos exec e test do objeto RegExp, e com                  os métodos match, replace, search, e split do objeto String.</p>
<p class="texto">Algumas das traduções deste artigo                  não são totalmente fieis. Espero que consigam entender                  o que a mensagem está passando.</p>
<p class="texto"><strong>Entendendo as Expressões Regulares</strong></p>
<p class="texto">As expressões regulares podem ser criadas                  de duas formas:</p>
<p class="texto">- Escrevendo uma expressão regular:</p>
<p class="texto"><span style="color: #0066cc;">seek = /padrao/</span></p>
<p class="texto">padrao é a string padrão para ser                  usada na pesquisa.</p>
<p class="texto">- Criando uma instancia do objeto RegExp:</p>
<p class="texto"><span style="color: #0066cc;">seek = new RegExp(“padrao”);</span></p>
<p class="texto">padrao é a string padrão para ser                  usada na pesquisa.</p>
<p class="texto">Regular Expression é um padrão de                  texto que consiste de simples caracteres (da letra a até                  z, ou de 1 até 9) e de uma combinação de                  caracteres simples e especiais.</p>
<p class="texto">Os padrões para a pesquisa de caracteres                  estão divididos em categorias. Segue abaixo uma lista dos                  grupos e respectivos caracteres especiais.</p>
<p class="texto"><strong>Busca posicionada</strong></p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Símbolo</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Exemplo</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0033cc;">^</span></p>
</td>
<td>
<p class="texto">Busca somente no início da string</p>
</td>
<td>
<p class="texto">/^The/ encontra “The” em “The                        night” mas não em “In The Night”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0033cc;">$</span></p>
</td>
<td>
<p class="texto">Busca somente no fim da string</p>
</td>
<td>
<p class="texto">/and$/ encontra “and” em “Land”                        mas não em “landing”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0033cc;">\b</span></p>
</td>
<td>
<p class="texto">Encontra em qualquer parte da string</p>
</td>
<td>
<p class="texto">/ly\b/ encontra “ly” em “This                        is really cool.”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0033cc;">\B</span></p>
</td>
<td>
<p class="texto">Encontra qualquer parte que não                        esteja limitada</p>
</td>
<td>
<p class="texto">/\Bor/ encontra “or” em “normal”                        mas não em “origami.”</p>
</td>
</tr>
</tbody>
</table>
<p class="texto"><strong>Literais</strong></p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Símbolo</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">Alfanumerica</span></p>
</td>
<td>
<p class="texto">Todos os caracteres alfabéticos                        e numerais se encontram literalmente. Então /2 dias/                        encontrarão “2 days” dentro da string</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\n</span></p>
</td>
<td>
<p class="texto">Encontra o caractere de nova linha</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\f</span></p>
</td>
<td>
<p class="texto">Encontra o caractere de nova página</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\r</span></p>
</td>
<td>
<p class="texto">Encontra o caractere de retorno de carro</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\t</span></p>
</td>
<td>
<p class="texto">Encontra o caractere de tabulação                        horizontal</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\v</span></p>
</td>
<td>
<p class="texto">Encontra o caractere de tabulação                        vertical</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\xxx</span></p>
</td>
<td>
<p class="texto">Encontra o caractere ASCII expresso por                        um número octal xxx.<br />
“\50″ encontra o caractere parênteses esquerdo                        “(“</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\xdd</span></p>
</td>
<td>
<p class="texto">Encontra o caractere ASCII expresso por                        um número hexadecimal dd.<br />
“\x28″ encontra o caractere parênteses esquerdo                        “(“</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\uxxxx</span></p>
</td>
<td>
<p class="texto">Encontra o caractere ASCII expresso por                        UNICODE xxxx.<br />
“\u00A3″ encontra “£”.</td>
</tr>
</tbody>
</table>
<p class="texto">A barra invertida (\) é também usada                  quando você deseja encontrar um caractere especial literalmente.                  Por Exemplo, se você deseja encontrar o símbolo “$”                  ao invés de ter um sinal no final da string, use a barra                  invertida: /\$/</p>
<p class="texto"><strong>Classes de Caracteres</strong></p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Símbolo</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Exemplo</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">[xyz]</span></p>
</td>
<td>
<p class="texto">Encontra qualquer caractere que estiver                        dentro do grupo. Você pode usar hífen para                        denotar escala. Por Exemplo. /[a-z]/ encontra qualquer letra                        do alfabeto alphabet, /[0–9]/ encontra qualquer dígito</p>
</td>
<td>
<p class="texto">/[AN]BC/ encontra “ABC” e “NBC”                        mas nao “BBC” desde que a letra “B”                        nao estao nogrupo.</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;"> [^xyz]</span></p>
</td>
<td>
<p class="texto">Encontra qualquer caractere que não                        estiver dentro do grupo. O circunflexo indica que nenhuma                        caractere deve estar na string.<br />
NOTA: O circunflexo usado dentro da classe de caractere                        é diferente do que denota o início da string,                        não se confundam. A negação aqui só                        é permitida dentro dos sinais</td>
<td>
<p class="texto">/[^AN]BC/ encontra “BBC” mas                        nao “ABC” ou “NBC”.</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">.</span></p>
</td>
<td>
<p class="texto">(Ponto). Encontra qualquer caractere exceto                        o caractere de nova linha ou terminador de linha Unicode</p>
</td>
<td>
<p class="texto">/b.t/ encontra “bat”, “bit”,                        “bet” e assim por diante</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\w</span></p>
</td>
<td>
<p class="texto">Enconta qualquer caractere alfanumérico                        incluindo underscore. Equivalente a [a-zA-Z0-9_]</p>
</td>
<td>
<p class="texto">/\w/ encontra “200″ em “200%”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\W</span></p>
</td>
<td>
<p class="texto">Encontra qualquer caractere que não                        se encontra na classe dos alfanuméricos. Equivalente                        a [^a-zA-Z0-9_]</p>
</td>
<td>
<p class="texto">/\W/ encontra “%” em “200%”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\d</span></p>
</td>
<td>
<p class="texto">Encontra qualquer dígito. Equivalente                        a [0–9]</p>
</td>
<td>
<p class="texto">
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\D</span></p>
</td>
<td>
<p class="texto">Encontra qualquer caractere que não                        seja um digito. Equivalente a [^0–9]</p>
</td>
<td>
<p class="texto">/\D/ matches “No” in “No                        342222″</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\s</span></p>
</td>
<td>
<p class="texto">Encontra qualquer caractere que equivale                        a um espaço. Equivalente a [ \t\r\n\v\f]</p>
</td>
<td>
<p class="texto">
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">\S</span></p>
</td>
<td>
<p class="texto">Encontra qualquer caractere que não                        equivale a um espaço. Equivalent to [^ \t\r\n\v\f]</p>
</td>
<td>
<p class="texto">
</td>
</tr>
</tbody>
</table>
<p class="texto"><strong>Repetição</strong></p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Símbolo</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Exemplo</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">{x}</span></p>
</td>
<td>
<p class="texto">Encontra exatamente x ocorrências                        na regular expression</p>
</td>
<td>
<p class="texto">/\d{5}/ encontra 5 digitos</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">{x,} </span></p>
</td>
<td>
<p class="texto">Encontra x ou mais ocorrências na                        regular expression</p>
</td>
<td>
<p class="texto">/\s{2,}/ encontra no minimo 2 caracteres                        de espaço em branco</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">{x,y}</span></p>
</td>
<td>
<p class="texto">Encontra x para y numero de ocorrências                        na regular expression</p>
</td>
<td>
<p class="texto">/\d{2,4}/ encontra no minimo 2 mas nao                        mais que 4 digitos</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">?</span></p>
</td>
<td>
<p class="texto">Encontra zero ou nenhuma ocorrência.                        Equivalente a {0,1}</p>
</td>
<td>
<p class="texto">/a\s?b/ encontra “ab” ou “a                        b”.</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">*</span></p>
</td>
<td>
<p class="texto">Encontra zero ou mais ocorrências.                        Equivalente a {0,}</p>
</td>
<td>
<p class="texto">/we*/ encontra “w” em “why”                        e “wee” em “between”, mas nao em “bad”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">+</span></p>
</td>
<td>
<p class="texto">Encontra uma ou mais ocorrências.                        Equivalente a {1,}</p>
</td>
<td>
<p class="texto">/fe+d/ encontra tanto em “fed”                        quanto em “feed”</p>
</td>
</tr>
</tbody>
</table>
<p class="texto">
<strong>Alternação &amp; Agrupamento</strong></p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Símbolo</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Exemplo</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">( )</span></p>
</td>
<td>
<p class="texto">Agrupamento de caracteres para criar uma                        cláusula de condição. Pode estar aninhado</p>
</td>
<td>
<p class="texto">/(abc)+(def)/ encontra um ou mais ocorrencias                        de “abc” seguido por uma ocorrencia de “def”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">|</span></p>
</td>
<td>
<p class="texto">Combina cláusulas de condições                        dentro de uma regular expression e então encontra                        qualquer uma das cláusulas. Similar à expressão                        “OR”</p>
</td>
<td>
<p class="texto">/(ab)|(cd)|(ef)/ encontra “ab”                        ou “cd” ou “ef”.</p>
</td>
</tr>
</tbody>
</table>
<p class="texto">
<strong>Backreferences</strong></p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Símbolo</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Exemplo</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto">( )\n</p>
</td>
<td>
<p class="texto">Encontra uma cláusula entre parênteses.                        n é o número de cláusulas para a esquerda                        da backreference</p>
</td>
<td>
<p class="texto">(\w+)\s+\1 encontra quaisquer palavras                        que ocorra duas vezes na mesma linha, como “hubba hubba.”                        O \1 denota que a primeria palavra depois do espaço                        deve encontrar a porção da string que foi                        encontrada no último commando dentro de parênteses.                        Se existisse mais de um comando dentro de parênteses,                        você deve usar \2 ou \3 para encontrar o apropriado                        agrupamento da esquerda da backreference. Até 9 backreferences                        podem ser usadas no padrão da string</p>
</td>
</tr>
</tbody>
</table>
<p class="texto"><strong>Modificadores de Padrões</strong></p>
<p class="texto">Em adição aos caracteres padrões                  para buscar, você pode usar switches para fazer uma pesquisa                  global, case– insensitive (ignora minúsculas e maiúsculas)                  ou ambas.</p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Propriedade</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Exemplo</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">i</span></p>
</td>
<td>
<p class="texto">Ignora se é minúscula ou                        maiúscula</p>
</td>
<td>
<p class="texto">/The/i encontra “the” e “The”                        e “tHe”</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">g</span></p>
</td>
<td>
<p class="texto">Pesquisa Global para todas as ocorrências                        do padrão</p>
</td>
<td>
<p class="texto">/ain/g encontra os dois “ain”                        em “No pain no gain”, ao inves de apenas o primeiro</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">gi</span></p>
</td>
<td>
<p class="texto">Pesquisa Global, e ignorar caso</p>
</td>
<td>
<p class="texto">/it/gi encontra todos “it” em                        “It is our IT department”<br />
lastIndex</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">lastIndex </span></p>
</td>
<td>
<p class="texto">Armazena a posição da última                        pesquisa bem sucessida realizada na string. Se nada for                        encontrado, a propriedade lastIndex será colocada                        como –1</p>
</td>
<td>
<p class="texto">
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">$n </span></p>
</td>
<td>
<p class="texto">n representa o numero de 1 a 9<br />
Armazena os nove mais recentes pesquisa dentro de parênteses                        encontradas. Por exemplo, se o padrão usado por uma                        regular expression para a última pesquisa foi /(Hello)(\s+)(world)/                        e a string pesquisada foi “Hello world” o conteúdo                        de RegExp.$2 poderia ser qualquer caractere entro “Hello”                        e “world”</td>
<td>
<p class="texto">
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">source</span></p>
</td>
<td>
<p class="texto">Armazena a copia do padrão da regular                        expression</p>
</td>
<td>
<p class="texto">
</td>
</tr>
</tbody>
</table>
<p class="texto"><strong>Entendendo os métodos usados pelas                  expressões regulares</strong></p>
<table border="0" cellspacing="1" cellpadding="5" width="450">
<tbody>
<tr bgcolor="#0066cc">
<td>
<p class="texto"><strong><span style="color: #ffffff;">Método</span></strong></p>
</td>
<td>
<p class="texto"><strong><span style="color: #ffffff;">Descrição</span></strong></p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">exec</span></p>
</td>
<td>
<p class="texto">Um método RegExp que executa pesquisas                        em uma string. O mesmo retorna um array das informações                        obtidas</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">test</span></p>
</td>
<td>
<p class="texto">Um método RegExp que testa uma                        pesquisa em uma string. O mesmo retorna true ou false</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">match</span></p>
</td>
<td>
<p class="texto">Um método de String que executa                        uma pesquisa em uma string. O mesmo retorna um array das                        informações obtidas ou nulo se nada for encontrado</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">search</span></p>
</td>
<td>
<p class="texto">Um método de String que testa uma                        pesquisa em uma string. O mesmo retorna o índice                        do resultado, ou –1 se a pesquisa falir</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">replace</span></p>
</td>
<td>
<p class="texto">Um método de String que executa                        uma pesquisa em uma string, e substitui o resultado encontrado                        por uma substring</p>
</td>
</tr>
<tr bgcolor="#f7f7f7">
<td>
<p class="texto"><span style="color: #0066cc;">split</span></p>
</td>
<td>
<p class="texto">Um método de String que usa uma                        regular expression ou uma string para quebrar uma string                        em uma array de substrings</p>
</td>
</tr>
</tbody>
</table>
<p class="texto">Quando você quer saber se o padrão                  foi encontrado na string, use o método test ou search;                  para maiores informações (mas com execução                  mais lenta) use o método exec ou match. Se você usar                  exec ou match e se obter sucesso, esses métodos retornaram                  um array e atualizaram as propriedades do objeto regular expression                  associado e também de objetos pré-definidos, RegExp.                  Se a pesquisa falir, o método exec retornará nulo                  (no qual converterá para false).</p>
<p class="texto"><strong>Programando Expressões Regulares</strong></p>
<p class="texto">A partir do momento que sabemos quais caracters                  desejamos devemos partir para a criação do padrão                  que sera utilizado para pesquisar a String.</p>
<p class="texto">Vamos, a partir de agora, criar alguns exemplos                  práticos de como utilizar Expressões Regulares.</p>
<p class="texto">No nosso primeiro exemplo vamos pesquisar na string                  um padrão que é composto da palavra “de”.                  O O resultado obtido nos mostrará onde se encontra a primeira                  e a ultima ocorrência das pesquisas.</p>
<p class="texto"><strong>Exemplo</strong>:</p>
<p class="texto"><strong>1</strong> <span style="color: #993300;">&lt;SCRIPT                  LANGUAGE=”JavaScript”&gt;</span><br />
<strong>2</strong> padrao=/de/g;<br />
<strong>3</strong> <span style="color: #999999;">//                  padrao = new RegExp(“de”,”g”);</span><br />
<strong>4</strong> texto                  = “Brasil ganha a medalha de ouro no volei de praia.”;<br />
<strong>5</strong> <span style="color: #ff3399;">document</span>.<span style="color: #336600;">write</span>(“&lt;b&gt;padrao                  » &lt;/b&gt;” + padrao + “&lt;br&gt;”);<br />
<strong>6</strong> <span style="color: #ff3399;">document</span>.<span style="color: #336600;">write</span>(“&lt;b&gt;Texto                  utilizado » &lt;/b&gt;” + texto + “&lt;br&gt;”);<br />
<strong>7</strong> <span style="color: #ff3399;">document</span>.<span style="color: #336600;">write</span>(“O                  padrao utilizado foi encontrado no &lt;b&gt;” + texto.search(padrao)                  + “º &lt;/b&gt;caractere.&lt;br&gt;”)<br />
<strong>8</strong> padrao.exec(texto);<br />
<strong>9</strong> <span style="color: #ff3399;">document</span>.<span style="color: #336600;">write</span>(“O                  ultimo valor encontrado e” o caractere&lt;b&gt; ” + padrao.lastIndex                  + “º &lt;/b&gt;.”);<br />
<strong>10</strong> <span style="color: #993300;">&lt;/SCRIPT&gt;</span></p>
<p class="texto"><span style="color: #ff6600;">Linha 2</span> – Declaração                  da variável padrão com a seqüência de                  caracteres a serem utilizados nas pesquisas.</p>
<p class="texto"><span style="color: #ff6600;">Linha 3</span> – Tem                  o mesmo funcionamento da linha 2, porém vai criar uma instância                  do objeto RegExp com a seqüência de caracteres.</p>
<p class="texto"><span style="color: #ff6600;">Linha 7</span> – Utilização                  do método search() para encontrar o padrao na variável                  texto.</p>
<p class="texto"><span style="color: #ff6600;">Linha 8</span> – Utilização                  do método exec para pesquisar a seqüência padrão                  na variável texto.</p>
<p class="texto"><span style="color: #ff6600;">Linha 9</span> – Utilização                  da propriedade lastIndex para retornar a última vez que                  a seqüência de caracteres foi encontrada na variável                  texto.</p>
<p class="texto">Clique aqui para ver o <a href="http://www.foxtergroup.com/coluna_js_dhtml/regularExpression.htm" target="_blank">exemplo                  01</a>.</p>
<p class="texto"><strong>Exemplo 02</strong></p>
<p class="texto">Este exemplo é um pouco mais complexo. Ele                  valida a entrada de dados por parte do usuário. O usuário                  vai digitar um número de telefone como proposto no exemplo.</p>
<p class="texto"><strong>1</strong> <span style="color: #993300;">&lt;SCRIPT                  LANGUAGE = “JavaScript”&gt;</span><br />
<strong>2</strong> padrao                  = /\(?\d{3}\)?\d{3}-\d{4}/;<br />
<strong>3</strong> <strong>function</strong> testInfo(x) {<br />
<strong>4</strong> a                  = x.Phone.value;<br />
<strong>5</strong> OK                  = padrao.exec(a);<br />
<strong>6</strong> <span style="color: #0066cc;">if</span> (!OK){<br />
<strong>7</strong> <span style="color: #ff6699;">window.alert</span> (“Este numero de telefone esta incorreto!”);<br />
<strong>8</strong> x.Phone.focus();<br />
<strong>9</strong> }                  <span style="color: #0066cc;">else</span> {<br />
<strong>10</strong> <span style="color: #ff6699;">window.alert</span> (“Obrigado, seu numero de telefone e” » ” + OK[0]);<br />
<strong>11</strong> }<br />
<strong>12</strong> }<br />
<strong>13</strong> <span style="color: #993300;">&lt;/SCRIPT&gt;</span></p>
<p class="texto"><span style="color: #ff6600;">Linha 2</span> – Declaração                  da variável padrao com a seqüência de caracteres                  a serem utilizados nas pesquisas.</p>
<p class="texto"><span style="color: #ff6600;">Linha 3</span> – Declaração                  da função testInfo() que recebe um parâmetro                  com o objeto form a ser utilizado</p>
<p class="texto"><span style="color: #ff6600;">Linha 4</span> – Declaração                  da variável a que armazena o valor do parâmentro                  x (o formulário) seguido do nome do campo e respectivo                  valor</p>
<p class="texto"><span style="color: #ff6600;">Linha 5</span> – Declaração                  da variável OK que recebe o valor da verificação                  se o padrão re está contido na variável a</p>
<p class="texto"><span style="color: #ff6600;">Linha 6 a 11</span> –                  Verificação da negação da variável                  OK. Se retornar true, uma caixa de mensagem será mostrada                  com uma mensagem de erro e o campo em questão receberá                  o foco. Se retornar false uma caixa de mensagem será mostrada                  com uma mensagem e o número do telefone.</p>
<p class="texto">Com todo o código Javascript criado, vamos                  à criação do código HTML.</p>
<p class="texto"><strong>1</strong> Digite um número de telefone,                  como por exemplo » (201)465‑7899.<br />
<strong>2</strong> &lt;FORM onSubmit=”return false;”&gt;<br />
<strong>3</strong> &lt;INPUT TYPE=”text” NAME=”Phone”                  onChange=”testInfo(this.form);”&gt;<br />
<strong>4</strong> &lt;input type=”button” value=”valida”                  onClick=”testInfo(this.form);”&gt;<br />
<strong>5</strong> &lt;/FORM&gt;</p>
<p class="texto"><span style="color: #ff6600;">Linha 2</span> – O                  evento onSubmit retorna false para o formulário não                  seja enviado.</p>
<p class="texto"><span style="color: #ff6600;">Linha 3</span> – O                  evento onChange da caixa de texto chama a função                  testInfo() e envia como parâmetro o objeto form.</p>
<p class="texto"><span style="color: #ff6600;">Linha 4</span> – O                  evento onClick do botão chama a função testInfo()                  e envia como parâmetro o objeto form.</p>
<p class="texto">Clique aqui para ver o <a href="http://www.foxtergroup.com/coluna_js_dhtml/regularExpression05.htm" target="_blank">exemplo                  02</a>.</p>
<p class="texto"><strong>Exemplo 03</strong></p>
<p class="texto">Neste exemplo vamos trabalhar com mais métodos                  e entender onde podemos chegar com apenas algumas linhas de código.                  Aqui nos dividimos uma string, colocamos seu resultado em uma                  matriz e ainda ordenamos a mesma.</p>
<p class="texto"><strong>1</strong> <span style="color: #993300;">&lt;SCRIPT                  LANGUAGE=”JavaScript1.2″&gt;</span><br />
<strong>2</strong> nomes                  = <span style="color: #0066ff;">new</span> String (“Thiago Prado                  ; Bill Gates ; Steve Jobs; Michael Dell ; Chris Hand “);<br />
<strong>3</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (“&lt;b&gt;String Original&lt;/b&gt;” + “&lt;br&gt;”                  + “&lt;br&gt;”);<br />
<strong>4</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (nomes + “&lt;br&gt;” + “&lt;br&gt;”);<br />
<strong>5</strong> padrao                  = /\s*;\s*/;<br />
<strong>6</strong> listaNomes                  = nomes.split (padrao);<br />
<strong>7</strong><br />
<strong>8</strong> padrao                  = /(\w+)\s+(\w+)/;<br />
<strong>9</strong> novalistaNomes                  = <span style="color: #0066ff;">new</span> Array;<br />
<strong>10</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (“&lt;b&gt;Apos ter sido dividido pela Expressao Regular                  &lt;/b&gt;” + “&lt;br&gt;&lt;br&gt;”);<br />
<strong>11</strong> <span style="color: #0066cc;">for</span> ( i = 0; i &lt; listaNomes.length; i++) {<br />
<strong>12</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (listaNomes[i] + “&lt;br&gt;”);<br />
<strong>13</strong> novalistaNomes[i]                  = listaNomes[i].replace (padrao, “$2, $1″)<br />
<strong>14</strong> }<br />
<strong>15</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (“&lt;br&gt;&lt;b&gt;Nomes revertidos&lt;/b&gt;” + “&lt;br&gt;&lt;br&gt;”);<br />
<strong>16</strong> <span style="color: #0066cc;">for</span> ( i = 0; i &lt; novalistaNomes.length; i++) {<br />
<strong>17</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (novalistaNomes[i] + “&lt;br&gt;”)<br />
<strong>18</strong> }<br />
<strong>19</strong> novalistaNomes.sort();<br />
<strong>20</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (“&lt;br&gt; &lt;b&gt;Ordenados&lt;/b&gt;” + “&lt;br&gt;&lt;br&gt;”);<br />
<strong>21</strong> <span style="color: #0066cc;">for</span> ( i = 0; i &lt; novalistaNomes.length; i++) {<br />
<strong>22</strong> <span style="color: #ff3399;"> document</span>.<span style="color: #336600;">write</span> (novalistaNomes[i] + “&lt;br&gt;”)<br />
<strong>23</strong> }<br />
<strong>24</strong> <span style="color: #993300;">&lt;/SCRIPT&gt;</span></p>
<p class="texto"><span style="color: #ff6600;">Linha 2</span> – Declaração                  da variável nomes com alguns nomes a serem utilizados no                  código</p>
<p class="texto"><span style="color: #ff6600;">Linha 3 a 4</span> –                  Mostra na tela a variável nomes sem nenhuma alteração</p>
<p class="texto"><span style="color: #ff6600;">Linha 5</span> – Declaração                  da variável padrao com a seqüência de caracteres                  a serem utilizados nas pesquisas.</p>
<p class="texto"><span style="color: #ff6600;">Linha 6</span> – Criação                  da matriz listaNomes com a divisão da string nomes a partir                  do padrão utilizado.</p>
<p class="texto"><span style="color: #ff6600;">Linha 8</span> – A                  variável padrão recebe nova seqüência                  de caracteres a serem utilizados nas pesquisas.</p>
<p class="texto"><span style="color: #ff6600;">Linha 10 a 14</span> –                  Mostra na tela a lista de Nomes depois da divisão</p>
<p class="texto"><span style="color: #ff6600;">Linha 13</span> – A                  matriz novalistaNomes(indexada da variável do loop) recebe                  o valor da matriz listaNomes (indexada da variável do loop)                  que utiliza o método replace para trocar o primeiro nome                  pelo segundo. Isso é possível por causa do uso da                  expressão regular.</p>
<p class="texto"><span style="color: #ff6600;">Linha 15 a 18</span> –                  Mostra na tela a lista de Nomes revertidos</p>
<p class="texto"><span style="color: #ff6600;">Linha 19</span> – Utilização                  do método sort para ordernar a matriz novalistaNomes</p>
<p class="texto"><span style="color: #ff6600;">Linha 20 a 23</span> –                  Mostra na tela a lista de Nomes Ordenados</p>
<p class="texto">Clique aqui para ver o <a href="http://www.foxtergroup.com/coluna_js_dhtml/regularExpression04.htm" target="_blank">exemplo                  03</a>.</p>
<p class="texto">Regular Expression é um assunto muito amplo,                  e não é possível abordá-lo em apenas                  alguns exemplos. Mas para o futuro eu vou preparar uma outra matéria                  com códigos mais poderosos para mostrar o que realmente                  quero dizer com “resumi em algumas linhas de código                  pesquisas altamente complexas”.</p>
<p class="texto">Fonte: <a href="http://imasters.uol.com.br/artigo/2515/javascript/regular_expression/" target="_blank">Thiago Prado</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/javascript-regular-expression/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bibliotecas JavaScript</title>
		<link>http://spotgeek.net/bibliotecas-javascript/</link>
		<comments>http://spotgeek.net/bibliotecas-javascript/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 13:04:51 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Mochikit]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=111</guid>
		<description><![CDATA[Mochikit O Mochikit é o]]></description>
			<content:encoded><![CDATA[<h2>Mochikit</h2>
<p><img src="http://cirofeitosa.com.br/img/artigo-js-mochikit.png" alt="Mochikit" /></p>
<p>O Mochikit é o filho caçula de Bob Ippolito (o participante principal) e está disponível no <a rel="external" href="http://mochikit.com/">site do Mochikit</a>. O pacote principal tem aproximadamente 90 Kb (compactado), mas você pode carregá-lo em módulos separados. A biblioteca também é distribuída com a versão do framework do Python para web, chamada de <a rel="external" href="http://www.turbogears.com/">TurboGears</a>.</p>
<p>Nas palavras do Bob:</p>
<blockquote><p>“Nós analisamos todas as idéias que poderíamos encontrar apartir da nossa experiência com Python e foram adaptadas ao mundo louco do JavaScript”</p>
</blockquote>
<p>Assim, em uma visão macro, o Mochikit extrai algumas funcionalidades do Python para sua <acronym title="Application Programming Interface">API</acronym>. Se você é familiar com o Python, você terá um aprendizado imediato com o Mochikit, embora tenha uma <acronym title="Application Programming Interface">API</acronym> simples que seja razoavelmente fácil de utilizar. De todas as bibliotecas ressaltadas neste artigo, a <acronym title="Application Programming Interface">API</acronym> do Mochikit transmite ser a mais “preparada”.</p>
<p>Quando estiver começando com o Mochikit, você precisará:</p>
<ol>
<li>Assistir ao <a rel="external" href="http://mochikit.com/screencasts/MochiKit_Intro-1.html">screencast</a> do Bob.</li>
<li>Começar utilizando o <a rel="external" href="http://mochikit.com/examples/interpreter/">interpretador interativo</a> excelente do Mochikit. Esta é uma boa maneira de entender a biblioteca e ter uma compreensão básica de como Mochikit trabalha.</li>
</ol>
<h3>O básico sobre Mochikit</h3>
<p>Ao trabalhar com o <acronym title="Document Object Model">DOM</acronym>, o Mochikit traz alguns truques na luva:</p>
<pre>var warning = P(
 { 'class' : 'warning' },
 "Por favor insira um ", STRONG(null, "endereço de e-mail válido")
);
swapDOM(document.getElementById("notificacoes"), warning);</pre>
<p>Este código usará os métodos W3C <acronym title="Document Object Model">DOM</acronym> relevantes para os nós da árvore equivalentes ao código HTML seguinte:</p>
<pre>&lt;p class="warning"&gt;Please provide a &lt;strong&gt;valid email address&lt;/strong&gt;&lt;/p&gt;</pre>
<p>O código do Mochikit está quase mais limpo do que a sintaxe do HTML!</p>
<p>O módulo do Mochikit.DOM contem também outros métodos para a manipulação fácil do <acronym title="Document Object Model">DOM</acronym>, tal como o método do swapDOM mencionado acima e toHTML (que converte um nó de <acronym title="Document Object Model">DOM</acronym> ao HTML que representa).</p>
<p>Assim como na manipulação de eventos, o Mochikit foi projetado para que seja implementado no módulo de Mochikit.Signal. Foi baseado em torno do conceito de conectar um ouvinte a um sinal que fosse emitido por um objeto. Todos os eventos regulares do <acronym title="Document Object Model">DOM</acronym> são sinais, mas você pode criar seus próprios também. O método conectar faz todo o trabalho aqui:</p>
<pre>// conecta o sinal do onclick no elemento com id="thing"
// para a função showDialog, com pontos para este elemento.
connect($('thing'), 'onclick', showDialog);

// conecta o sinal do onsubmit para o elemento id="form" para
// o formController.checkSubmit, com pontos para o objeto formController.
connect($('form'), 'onsubmit', formController, 'checkSubmit');</pre>
<p>Você pode fazer seus próprios objetos enviar sinais com o método do sinal:</p>
<pre>signal(anObject, 'a_signal');</pre>
<p>O material de <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> é segurado pelo módulo Mochit.Async, e pelos objetos auxiliares que se encontram no núcleo de sua implementação. Para executar uma chamada básica de <acronym title="Asynchronous JavaScript and XML">AJAX</acronym>, use o <strong>loadJSONDoc</strong> ou  <strong>doSimpleXMLHttpRequest</strong>:</p>
<pre>var request = doSimpleXMLHttpRequest('opcoes.php',
   { q : 'desenvolvedor web'}
);</pre>
<p>Esta função retorna um objeto auxiliar, em que você pode fazer novas chamadas:</p>
<pre>request.addCallbacks(mySuccessFunction, myErrorFunction);</pre>
<p>Quando o <strong>XMLHttpRequest</strong> se executa, a função passada na chamada acima (mySuccessFunction) passa o objeto do <strong>XMLHttpRequest</strong> como o argumento:</p>
<pre>function mySuccessFunction(req) {
 alert(req.responseText);
}</pre>
<p>Os objetos auxiliares são úteis para a programação assíncrona e são uma grande idéia. Leia mais <a rel="external" href="http://mochikit.com/doc/html/MochiKit/Async.html">sobre o assunto</a>, ou veja o screencast para mais detalhes.</p>
<h3>Prós e contras</h3>
<p>Primeiramente, a estrutura de log do Mochikit é excelente. Adicionar indicações simplesmente utilizando:</p>
<pre>log("Bem melhor que o alert");
log("ERRO Esta coisa está quebrada");</pre>
<p>O Mochikit faz uso também de características da programação funcional do Javascript para realçar e simplificar sua biblioteca <acronym title="Application Programming Interface">API</acronym>. Por exemplo, se você quiser classificar um grupo dos objetos por seus nomes de propriedades, você pode usar o <strong>keyComparator</strong> criar a função de classificação para você:</p>
<pre>var sortedByName = people.sort(keyComparator("name"));</pre>
<p>Há também a função <strong>counter</strong>. Ela cria uma função que retorna um valor que seja incrementado toda vez que for chamada:</p>
<pre>var nextId = counter();
nextId(); //=&gt; 1
nextId(); //=&gt; 2
nextId(); //=&gt; 3</pre>
<p>Há também várias funções de iteração do estilo-Python, tais como <strong>forEach</strong>, <strong>map</strong> e <strong>filter</strong>.</p>
<p>Quanto a documentação, o Mochikit tem uma documentação boa da <acronym title="Application Programming Interface">API</acronym>, mas os detalhes em algumas partes muito básicas da biblioteca deixam a desejar. No detalhe, após ter lido toda a documentação, ter prestado atenção no screencast e ter escrito alguns scripts Mochikit, ainda sou incerto sobre qual a melhor versão da biblioteca para toda finalidade. Eu uso a versão compactada ou o <strong>Mochikit.js</strong> principal? Como posso carregar as partes individuais da biblioteca?</p>
<p>Entretanto, Mochikit tem uma lista de discussão que responde a estes tipos de perguntas.</p>
<h2>Yahoo! <acronym title="User Interface">UI</acronym></h2>
<p><img src="http://cirofeitosa.com.br/img/artigo-js-yui.png" alt="Yahoo! UI Library" /></p>
<p>A biblioteca Yahoo! <acronym title="User Interface">UI</acronym> (YUI, como é apelidada) foi desenvolvida pelo Yahoo! para o uso interno, mas teve seu código aberto recentemente junto com uma gama de recursos <a style="border-bottom: 1px dotted; color: #006600; text-decoration: underline;" onclick="hwClick4747413531897(717614894);return false;" onmouseover="hw4747413531897(event, this, '717614894'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2#">excelentes</a> para desenvolvedores em <a rel="external" href="http://www.developer.yahoo.com/">developer.yahoo.com</a>.</p>
<p>O YUI é mais uma coleção distinta de “utilidades” do que uma biblioteca (como as que foram tratadas aqui), com cinco scripts principais que tratam de:</p>
<ul>
<li>animação</li>
<li><acronym title="Asynchronous JavaScript and XML">AJAX</acronym></li>
<li>manipulação <acronym title="Document Object Model">DOM</acronym></li>
<li><em>drag-and-drop</em></li>
<li>tratamento de eventos</li>
</ul>
<p>E há seis controles, chamados de:</p>
<ul>
<li>Calendar</li>
<li>Slider</li>
<li>Menu</li>
<li>AutoComplete</li>
<li>Tree View</li>
<li>Container classes (com o qual você pode executar janelas no estilo de widgets)</li>
</ul>
<p>Você pode fazer download de cada um destes scripts separadamente no site <a rel="external" href="http://developer.yahoo.com/yui/index.html">developer.yahoo.com</a>.</p>
<p>Cada uma das bibliotecas do Yahoo! dependem somente do arquivo <strong>yahoo.js</strong>. Por outro lado, esta aproximação oferece uma experiência ligeiramente mais menos coerente para o desenvolvedor e poderia possivelmente introduzir uma determinada quantidade de repetição dentro das bibliotecas.</p>
<p>Uma coisa ineficaz sobre o YUI é o fato de que usa muito espaço inútil de strings. Cada chamada que você faz à biblioteca necessita ser prefixada com uma string do pacote:</p>
<pre>var myAnim = new YAHOO.util.Anim(
 'test',
 { height: {to: 10} },
 1,
 YAHOO.util.Easing.easeOut
);
myAnim.animate();</pre>
<h3>O básico sobre YUI</h3>
<p>A biblioteca de tratamento de eventos do YUI tem uma <acronym title="Application Programming Interface">API</acronym> muito familiar daquelas que são usadas nativamente no browser. Entretanto, tem algumas surpresas agradáveis que o desenvolvedor do Yahoo!, Dustin Diaz, explicou em detalhes <a rel="external" href="http://www.dustindiaz.com/yahoo-event-utility/">neste site</a>. Você pode adicionar um simples “ouvinte” como este:</p>
<pre>YAHOO.util.event.addListener('object_id', 'click', callBackFunction);</pre>
<p>Uma característica muito poderosa da biblioteca de eventos é seu chamado ouvintes de evento. Essencialmente, se você tentar unir um “ouvinte” a um elemento que não exista porque a página não carregou ainda, esperará essa página para tornar-se disponível antes de unir ao evento. Esta é uma solução que talvez confunda e frustre muitos novatos de <acronym title="Dynamic HTML">DHTML</acronym>.</p>
<p>A biblioteca de DOM resume as inconsistências do browser, permitindo o ajuste de estilos das propriedades do elemento. Entretanto, enquanto toma cuidado das tarefas comuns, existem algumas surpresas aqui:</p>
<ul>
<li><strong>get</strong> é versão da função <strong>$</strong> no YUI.</li>
<li>Um método  <a style="border-bottom: 1px dotted; color: #006600; text-decoration: underline;" onclick="hwClick19137951432897(717614894);return false;" onmouseover="hw19137951432897(event, this, '717614894'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2#">interessante</a> é o <strong>generateId</strong>, que pode ser usado gerar IDs para elementos para que você possa rapidamente acessá-los em outros pontos do script.</li>
</ul>
<p>O Gerenciador de Conexão contem toda a mágica do <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> no YUI, e seguindo a linha das outras bibliotecas, escolhe não fazer exame de uma aproximação alto-nível. Não faz nada mais do que fornecer uma relação <em>cross browser</em> ao <strong>XMLHttpRequest</strong>:</p>
<pre>YAHOO.util.Connect.asyncRequest(
 'GET',
 'http://www.yahoo.com',
 callback
);</pre>
<p>Um destaque é a rica interface <strong>callback</strong>, que permite que você defina um objeto que envolva suas funções <strong>callback</strong> com alguma configuração extra. Veja um exemplo de objeto <strong>callback</strong>:</p>
<pre>var callback = {
 success: function(resp) { alert('WOO!!'); }, // called on success
 failure: function(resp) { alert('BOO!'); }, // called on error
 argument: arguments, // user defined arguments
 scope: formController // scope the callbacks are called within
}</pre>
<h3>Prós e contras</h3>
<p>A documentação fornecida pelo Yahoo! para a biblioteca é excelente. O site tem a documentação formal da <acronym title="Application Programming Interface">API</acronym>, vários exemplos, uma lista de discussão e algumas explicações breves das características principais de cada parte da biblioteca. O melhor lugar para verificar para ver se há artigos sobre YUI é no <a rel="external" href="http://www.dustindiaz.com/">site de Dustin Diaz</a>, desenvolvedor do Yahoo!.</p>
<p>Como eu citei acima, a implementação do controle de eventos é um dos atrativos do YUI. Entretanto, o restante da biblioteca, ao ser muito funcional, não contem tantas características <a style="border-bottom: 1px dotted; color: #006600; text-decoration: underline;" onclick="hwClick13792706930897(717614894);return false;" onmouseover="hw13792706930897(event, this, '717614894'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2#">inovadoras</a> como no Mochikit, Dojo e Prototype, e por causa dos longos nomes de pacotes, desenvolver com o YUI se torna, às vezes, uma tarefa longa.</p>
<p>Contudo a lista crescente dos componentes é muito rica. Por exemplo, o componente de calendário (Calendar) suporta diversas línguas e múltiplas seleções da data, e as classes do Container dão-lhe o poder de implementar todos os tipos interface com janelas. Um ponto ruim de usar estes componentes é que tendem a ser muito dependente de outras bibliotecas; <a rel="external" href="http://dean.edwards.name/weblog/2006/05/das-bloat/">neste discurso, Dean Edwards</a> destaca como exemplo o controle do treeview, que se usa em torno de 260 Kb do Javascript.</p>
<h2>Conclusão: Qual a melhor?</h2>
<p>Bem, uma resposta curta a esta pergunta é que não há nenhuma solução pronta que preencha todas as situações.</p>
<p>A biblioteca Prototype é a que possui uma documentação mais detalhada. É também a biblioteca mais difundida neste momento. Naturalmente, caminha para ser a escolha natural dos desenvolvedores Ruby porque abstrai várias características do Ruby on Rails. Outra coisa importante sobre o Prototype é que tem um peso dos Rails por trás e, em conseqüência, há muitos desenvolvedores que fornecem reparos e remendos do erro ao Prototype. Finalmente, oferece uma riqueza de bibliotecas adicionais tais como scriptaculous, Rico, e Behaviour que o faz uma boa e sólida escolha para muitos desenvolvedores.</p>
<p>Por outro lado, o Prototype tem um framework de tratamento de eventos <em>em-desenvolvimento</em>, que é o problema principal para uma biblioteca tão poderosa. Também – e esta é exclusivamente uma questão de gosto – a aproximação pragmática do Prototype às coisas (como o uso excessivo da propriedade do innerHTML) pode parecer um pouco “suja” às vezes.</p>
<p>Para projetos menores, a forma que foi projetada e seus componentes, fazem do YUI um grande atrativo. É muito fácil de excluir um Gerenciador de Conexão ou a biblioteca de Eventos e começar fazendo algumas tarefas básicas sem ter que atravessar uma curva de aprendizagem demasiada. No geral, contudo, não tem muito a oferecer nos termos de características poderosas.</p>
<p>O Dojo é definitivamente destaque deste grupo. E o foco do Dojo no desempenho é um fator absoluto se você estiver planeando uma aplicação com uso intensivo de Javascript. A implementação de widget tem também um potencial enorme para a construção de complexos <acronym title="User Interfaces">UIs</acronym>. Entretanto é realmente grande – ambos nos termos de tamanho de arquivo e do tamanho da <acronym title="Application Programming Interface">API</acronym> – assim eu não o recomendaria para projetos menores.</p>
<p>Na minha opinião, o Mochikit é muito bem projetado e o melhor dos quatro, e desenvolvedores do Python/Twisted/Nevow acharão sua <acronym title="Application Programming Interface">API</acronym> muito familiar. Entretanto, sua documentação é escassa em alguns lugares (por exemplo, eu ainda tenho dúvida a respeito de qual versão do Mochikit inserir no script). Também, algumas das técnicas funcionais que usa podem ser confusas para os novatos ou aqueles que não tem tanta prática em em técnicas de programação. Entretanto, vale a pena dar olha olhada. As funcionalidades do Mochikit provavelmente surpreenderão você – a função <strong>createDOM</strong>, as ferramentas da iteração e a arquitetura assíncrona são um trabalho de arte.<br />
Fonte:<a href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2" target="_blank">cirofeitosa</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/bibliotecas-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

