<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaScript: Singuska &#187; Outros</title>
	<atom:link href="http://javascript.singuska.com/category/outros/feed/" rel="self" type="application/rss+xml" />
	<link>http://javascript.singuska.com</link>
	<description>Fragmentos de código e gambiarras (0.2)</description>
	<lastBuildDate>Mon, 03 Oct 2011 19:45:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Uma interface simples para setInterval e clearInterval</title>
		<link>http://javascript.singuska.com/2011/10/03/uma-interface-simples-para-setinterval-e-clearinterval/</link>
		<comments>http://javascript.singuska.com/2011/10/03/uma-interface-simples-para-setinterval-e-clearinterval/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 19:45:27 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[fragmento]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=620</guid>
		<description><![CDATA[Abaixo um código para faciliar o uso de intervals e minimizar o uso de variáveis globais: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var interval = &#40;function&#40;&#41;&#123; &#160; var ids = &#123;&#125;, names = &#123;&#125;; &#160; return &#123; add: function&#40;name, timer, fn&#41; &#123; var interval = [...]]]></description>
			<content:encoded><![CDATA[<p>Abaixo um código para faciliar o uso de intervals e minimizar o uso de variáveis globais:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> interval <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
&nbsp;
	<span style="color: #fbde2d; font-weight: bold;">var</span> ids <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span> names <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
	<span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #ffffff;">&#123;</span>
		add<span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: red;">name</span><span style="color: #ffffff;">,</span> timer<span style="color: #ffffff;">,</span> fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
			<span style="color: #fbde2d; font-weight: bold;">var</span> interval <span style="color: #ffffff;">=</span> setInterval<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">,</span> timer<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
			ids<span style="color: #ffffff;">&#91;</span>interval<span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">=</span> <span style="color: red;">name</span><span style="color: #ffffff;">;</span>
			names<span style="color: #ffffff;">&#91;</span><span style="color: red;">name</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">=</span> interval<span style="color: #ffffff;">;</span>
		<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
		<span style="color: red;">stop</span><span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: red;">name</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
			clearInterval<span style="color: #ffffff;">&#40;</span>names<span style="color: #ffffff;">&#91;</span><span style="color: red;">name</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		<span style="color: #ffffff;">&#125;</span>
	<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> coisas_legais<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
   <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Função legal'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #ffffff;">&#125;</span>
&nbsp;
interval.<span style="color: #6591f7;">add</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'invervalo_legal'</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">300</span><span style="color: #ffffff;">,</span> coisas_legais<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Para parar a execução deste intervalo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">interval.<span style="color: red;">stop</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'intervalo_legal'</span><span style="color: #ffffff;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/10/03/uma-interface-simples-para-setinterval-e-clearinterval/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funções como argumentos e funções anônimas</title>
		<link>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/</link>
		<comments>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 21:06:52 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=269</guid>
		<description><![CDATA[Funções em JavaScript podem ser passadas como argumentos de outras funções. Esta prática é inclusive muito explorada pelos programadores. Se você ainda não esta familiarizado com o uso de funções, leia este post primeiro. Vamos então aos exemplos. Funções como argumentos 1 2 3 4 5 6 7 8 9 10 function imprimir&#40;fn&#41; &#123; var [...]]]></description>
			<content:encoded><![CDATA[<p>Funções em JavaScript podem ser passadas como argumentos de outras funções. Esta prática é inclusive muito explorada pelos programadores. Se você ainda não esta familiarizado com o uso de funções, <a href="http://javascript.singuska.com/2009/12/21/funcoes-o-basico/">leia este post primeiro</a>. Vamos então aos exemplos.</p>
<h3>Funções como argumentos</h3>
<p><span class="jsrun-exemplo-1 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> gerador<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span>gerador<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste primeiro exemplo, declaramos uma função chamada &#8220;imprimir&#8221; que espera como argumento uma outra função. Ela executa esta outra função, pega o seu retorno e passa ele como argumento de &#8220;alert&#8221;. </p>
<p>É importante perceber que na linha 10 &#8220;gerador&#8221; é passado como argumento sem os parênteses &#8220;()&#8221; no final. Ou seja, ela não está sendo invocada, somente passada. A execução da função ocorre na linha 2. Uma variação do nosso exemplo:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> gerador<span style="color: #ffffff;">&#40;</span>lingua<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>lingua <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'I´m a text!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span>gerador<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Agora &#8220;gerador&#8221; espera um parâmetro &#8220;lingua&#8221;. Este parâmetro é passado por &#8220;imprimir&#8221; no ato da execução, linha 2.</p>
<h3>Funções anônimas</h3>
<p>O nome pode parecer estranho mas o conceito é bem simples: funções anônimas são funções que não tem nome:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>lingua<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>lingua <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'I´m a text!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>&#8220;Imprimir&#8221; continua sendo exatamente igual. Aguarda uma função como parâmetro. A diferença é que, ao invocarmos &#8220;imprimir&#8221;, declaramos uma função anônima ao mesmo tempo. Como ela não tem nome, não existe a possibilidade dela ser executada por uma outra função ou em outro momento do código. Somente &#8220;imprimir&#8221; a contém e pode executá-la.</p>
<h3>E pra quê serve isso?</h3>
<p>Funções como argumentos e funções anônimas são amplamente utilizadas como &#8220;callbacks&#8221;. Se você atrela um evento de click a um botão, algo deve acontecer quando este botão for clicado. Este &#8220;algo&#8221; é uma função. Ou então uma requisição Ajax. Vamos supor que temos uma requisição que busca se um determinado email já foi ou não cadastrado em um banco de dados. Quando a requisição finalmente termina, uma resposta é enviada ao nosso programa. Esta resposta é normalmente passada como argumento de uma função &#8220;callback&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>hhSelectMaker: um plugin para criar selects a partir de uma fonte de dados</title>
		<link>http://javascript.singuska.com/2010/03/12/hhselectmaker-um-plugin-para-criar-selects-a-partir-de-uma-fonte-de-dados/</link>
		<comments>http://javascript.singuska.com/2010/03/12/hhselectmaker-um-plugin-para-criar-selects-a-partir-de-uma-fonte-de-dados/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 16:20:27 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=473</guid>
		<description><![CDATA[Criei um plugin jQuery para criar selects no DOM a partir de um vetor de dados. O código do plugin abaixo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 &#40;function&#40;$&#41;&#123; $.fn.hhSelectMaker = function&#40;data, cfg&#41; &#123; &#160; var cfg = cfg &#124;&#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Criei um plugin jQuery para criar selects no DOM a partir de um vetor de dados. O código do plugin abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>$<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	$.<span style="color: #6591f7;">fn</span>.<span style="color: #6591f7;">hhSelectMaker</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>data<span style="color: #ffffff;">,</span> cfg<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
&nbsp;
		<span style="color: #fbde2d; font-weight: bold;">var</span> cfg <span style="color: #ffffff;">=</span> cfg <span style="color: #ffffff;">||</span> <span style="color: #ffffff;">&#123;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span> <span style="color: #ffffff;">!</span>cfg.<span style="color: #6591f7;">key</span><span style="color: #ffffff;">&#41;</span> cfg.<span style="color: #6591f7;">key</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'key'</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span> <span style="color: #ffffff;">!</span>cfg.<span style="color: #6591f7;">value</span><span style="color: #ffffff;">&#41;</span> cfg.<span style="color: #6591f7;">value</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'value'</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span> <span style="color: #ffffff;">!</span>cfg.<span style="color: #6591f7;">selected</span><span style="color: #ffffff;">&#41;</span> cfg.<span style="color: #6591f7;">selected</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">false</span><span style="color: #ffffff;">;</span>
&nbsp;
		<span style="color: #fbde2d; font-weight: bold;">var</span> snippet <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">''</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">var</span> i <span style="color: #ffffff;">=</span> <span style="color: #f78465;">0</span><span style="color: #ffffff;">;</span> i <span style="color: #ffffff;">&lt;</span> data.<span style="color: #6591f7;">length</span><span style="color: #ffffff;">;</span> i<span style="color: #ffffff;">++</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
&nbsp;
			snippet <span style="color: #ffffff;">+=</span> <span style="color: #61ce3c;">&quot;&lt;option value='&quot;</span> <span style="color: #ffffff;">+</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span>cfg.<span style="color: #6591f7;">key</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span> 
&nbsp;
			<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>cfg.<span style="color: #6591f7;">selected</span> <span style="color: #ffffff;">===</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span>cfg.<span style="color: #6591f7;">key</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
				snippet <span style="color: #ffffff;">+=</span> <span style="color: #61ce3c;">&quot; selected='selected' &quot;</span><span style="color: #ffffff;">;</span>
			<span style="color: #ffffff;">&#125;</span>
&nbsp;
			snippet <span style="color: #ffffff;">+=</span> <span style="color: #61ce3c;">&quot;'&gt;&quot;</span> <span style="color: #ffffff;">+</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span>cfg.<span style="color: #6591f7;">value</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">'&lt;/option&gt;'</span><span style="color: #ffffff;">;</span>
		<span style="color: #ffffff;">&#125;</span>
		<span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">this</span>.<span style="color: #6591f7;">append</span><span style="color: #ffffff;">&#40;</span>snippet<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span>jQuery<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<h3>Como funciona?</h3>
<p><a href="http://javascript.singuska.com/exemplos/hhSelectMaker/">Montei dois exemplos</a> para ilustrar o funcionamento do plugin.<br />
O plugin recebe dois argumentos. O primeiro, obrigatório, é a fonte de dados. O segundo, opcional, é a configuração da fonte de dados.</p>
<p>Caso somente o primeiro argumento seja passado, o plugin espera um estrutura de dados no seguinte formato:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> dados <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span>
    <span style="color: #ffffff;">&#123;</span> key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave1'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor1'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave2'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor2'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave3'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor3'</span> <span style="color: #ffffff;">&#125;</span>
    <span style="color: #bfbfbf; font-style: italic;">// etc...</span>
<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>O nome das chaves pode ser modificado utilizando-se o segundo argumento:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'select'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">hhSelectMaker</span><span style="color: #ffffff;">&#40;</span>dados<span style="color: #ffffff;">,</span> <span style="color: #ffffff;">&#123;</span>
	key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'id'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'nome'</span><span style="color: #ffffff;">,</span> selected<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'5'</span>				
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Configurando-se o plugin desta maneira a estrutura de dados esperada é a seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> dados <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span>
    <span style="color: #ffffff;">&#123;</span> id<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave1'</span><span style="color: #ffffff;">,</span> nome<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor1'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> id<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave2'</span><span style="color: #ffffff;">,</span> nome<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor2'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> id<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave3'</span><span style="color: #ffffff;">,</span> nome<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor3'</span> <span style="color: #ffffff;">&#125;</span>
    <span style="color: #bfbfbf; font-style: italic;">// etc...</span>
<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Além disso, a chave <em>selected</em> permite que um determinado valor seja selecionado como padrão após o carregamento do plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/03/12/hhselectmaker-um-plugin-para-criar-selects-a-partir-de-uma-fonte-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando o método index: versão 1.4 do jQuery facilitando nossa vida</title>
		<link>http://javascript.singuska.com/2010/02/21/utilizando-o-metodo-index-versao-1-4-do-jquery-facilitando-nossa-vida/</link>
		<comments>http://javascript.singuska.com/2010/02/21/utilizando-o-metodo-index-versao-1-4-do-jquery-facilitando-nossa-vida/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 18:46:51 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=383</guid>
		<description><![CDATA[Uma importante novidade do jQuery 1.4 foi a melhoria do método index. Este método retorna um número inteiro que indica a posição de um determinado elemento do DOM em relação aos seus irmãos. A primeira posição é 0. Caso o elemento não seja encontrado -1 é retornado. A documentação completa deste método pode ser encontrada [...]]]></description>
			<content:encoded><![CDATA[<p>Uma importante novidade do jQuery 1.4 foi a melhoria do método <strong>index</strong>. Este método retorna um número inteiro que indica a posição de um determinado elemento do DOM em relação aos seus irmãos. A primeira posição é 0. Caso o elemento não seja encontrado -1 é retornado. A documentação completa deste método <a href="http://api.jquery.com/index/">pode ser encontrada aqui</a>.</p>
<p>Ele é muito útil porque geralmente determinados objetos de uma página possuem algum tipo de relação que os agrupa. Vamos imaginar a seguinte estrutura:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;">	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">ul</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;menu&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">ul</span>&gt;</span>
&nbsp;
	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulos&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span>&gt;</span>Conteúdo capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span>&gt;</span>Conteúdo capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span>&gt;</span>Conteúdo capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Um item de menu, ao ser clicado, faz com que seu respectivo conteúdo seja mostrado na tela. Todas as divs de conteúdo estão inicialmente escondidas. Se um item de menu for clicado novamente, todas as divs são escondidas e a div de conteúdo correspondente é revelada. Uma situação muito comum, trivial e extremamente recorrente. O código abaixo implementa a situação:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> gerenciarCapitulos <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
		e.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">var</span> indice <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">index</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		mostrarConteudo<span style="color: #ffffff;">&#40;</span>indice<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> mostrarConteudo <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>indiceCapitulo<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	<span style="color: #fbde2d; font-weight: bold;">var</span> 
	capitulos <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#capitulos div'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
	divCapitulo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span>capitulos<span style="color: #ffffff;">&#91;</span>indiceCapitulo<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
	capitulos.<span style="color: #6591f7;">hide</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	divCapitulo.<span style="color: #6591f7;">show</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
$<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	gerenciarCapitulos<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Index é utilizado na linha 4:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">		<span style="color: #fbde2d; font-weight: bold;">var</span> indice <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">index</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste caso index recebe como argumento um seletor que indica o contexto que deve ser utilizado para descobrir o índice em relação a <strong>this</strong> (ou seja, o elemento clicado). Como os items de menu estão na mesma sequência das divs de capítulos o índice acaba sendo o mesmo. O valor do índice é passado para a função <strong>mostrarConteudo</strong> que recupera do <a href="http://javascript.singuska.com/2010/01/31/vetores-arrays-o-basico/">vetor</a> <strong>capitulos</strong> a div que deve ser mostrada:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>12
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">	divCapitulo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span>capitulos<span style="color: #ffffff;">&#91;</span>indiceCapitulo<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p><a href="http://javascript.singuska.com/exemplos/metodo-index/bom.htm">Aqui você pode encontrar o exemplo funcionando</a>.</p>
<h3>Um exemplo ruim que não utiliza o método index</h3>
<p>É possível programar a mesma funcionalidade de várias outras maneiras sem a utilização de index. Antes eu contava com &#8220;ids&#8221; que tivessem números em comum. Entretanto, isso implicava em mais código html:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;">	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">ul</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;menu&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;link-1&quot;</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;link-2&quot;</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;link-3&quot;</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">ul</span>&gt;</span>
&nbsp;
	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulos&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulo-1&quot;</span>&gt;</span>Conteúdo capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulo-2&quot;</span>&gt;</span>Conteúdo capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulo-3&quot;</span>&gt;</span>Conteúdo capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Percebam que agora todos as lis de menu e todas as divs de capítulo possuem ids. O código JavaScript correspondente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> gerenciarCapitulos <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
		e.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">var</span> indice <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">parent</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'id'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">split</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'-'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
		mostrarConteudo<span style="color: #ffffff;">&#40;</span>indice<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> mostrarConteudo <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>indiceCapitulo<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	<span style="color: #fbde2d; font-weight: bold;">var</span> 
	capitulos <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#capitulos div'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
	divCapitulo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#capitulo-'</span> <span style="color: #ffffff;">+</span> indiceCapitulo<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
	capitulos.<span style="color: #6591f7;">hide</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	divCapitulo.<span style="color: #6591f7;">show</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
$<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	gerenciarCapitulos<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Somente as linhas 4 e 12 foram modificadas. Na linha 4 utilizamos um split para obter o índice. Na 12 um seletor é montado dinamicamente utilizando este índice. É um código fraco e pouquíssimo elegante. <a href="http://javascript.singuska.com/exemplos/metodo-index/ruim.htm">Exemplo ruim pode ser encontrado aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/02/21/utilizando-o-metodo-index-versao-1-4-do-jquery-facilitando-nossa-vida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quem usa Google AJAX Libraries API para carregar jQuery?</title>
		<link>http://javascript.singuska.com/2010/01/23/quem-usa-google-ajax-libraries-api-para-carregar-jquery/</link>
		<comments>http://javascript.singuska.com/2010/01/23/quem-usa-google-ajax-libraries-api-para-carregar-jquery/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 13:34:16 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=322</guid>
		<description><![CDATA[O Google AJAX Libraries API é um serviço que possibilita o carregamento remoto de frameworks JavaScript a partir de seus servidores. Com ele você pode, por exemplo, fazer com que o seu site carrege o código fonte do jQuery diretamente dos servidores do Google. O serviço está em operação deste 2007. O framework JavaScript do [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://code.google.com/apis/ajaxlibs/">Google AJAX Libraries API</a> é um serviço que possibilita o carregamento remoto de frameworks JavaScript a partir de seus servidores. Com ele você pode, por exemplo, fazer com que o seu site carrege o código fonte do jQuery  diretamente dos servidores do Google. O serviço está em operação deste 2007.</p>
<p>O framework JavaScript do Yahoo!,<a href="http://developer.yahoo.com/yui/">YUI</a>, sempre recomendou que seus códigos fossem carregados remotamente. <a href="http://ajaxian.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-googles-infrastructure">Este post do Ajaxian</a> elenca uma série de vantagens. Destaco algumas delas:</p>
<ul>
<li>caching é feito corretamente; desenvolvedores não precisam mais se preocupar com isso</li>
<li>gzip funciona</li>
<li>a <a href="http://pt.wikipedia.org/wiki/Content_Delivery_Network">CDN</a> do Google, distribuida em vários lugares do mundo, possibilita que os arquivos hospedados estejam &#8220;próximos&#8221; do usuário</li>
<li>se uma quantidade significativa de websites utilizar a mesma URL para carregar um determinado framework, quando alguém entrar no seu site pode ser que este arquivo já tenha sido carregado</li>
</ul>
<p>Faz bastante sentido para mim. Claro que se por um acaso os servidores do Google ficarem indisponíveis, ou o serviço descontinuado, você terá graves problemas. Além disso, os mais paranóicos podem afirmar que este é apenas mais um método desenvolvido para colher informações de usuários. Mas isso com certeza não impede que as pessoas continuem utilizando Gmail ou Analytics.</p>
<p>Outro potencial problema é que você fica dependente de uma conexão com a internet para desenvolver. A vantagem é que a maioria dos desenvolvedores não consegue mesmo trabalhar offline. Nosso trabalho já depende demais ferramentas online para isso ser uma preocupação genuína.</p>
<h3>Como funciona?</h3>
<p>Existem dois jeitos de se utilizar o serviço. O primeiro, é mais &#8220;estático&#8221; e simples. O processo é igual ao que você já faz: para incluir um framework, como MooTools, Dojo, jQuery, você deve incluir <em>script src=&#8221;"</em> em seu html. Basta fazer com que o atributo src desta tag aponte para uma URL do serviço: <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js">http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js</a>. Este link leva diretamente para a versão minificada do jQuery 1.4 (que hoje é a mais atual).</p>
<p>O segundo jeito, mais &#8220;dinâmico&#8221;, consiste em incluir utilizando <em>script src=&#8221;"</em> o código fonte da API Ajax do Google: <a href="http://www.google.com/jsapi">http://www.google.com/jsapi</a>. Com este código disponível, você pode carregar os frameworks. Vamos incluir novamente o jQuery utilizando o método estático:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">google.<span style="color: #6591f7;">load</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">&quot;jquery&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">&quot;1&quot;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// obtém a última versão da família 1 (que hoje é a 1.4)</span>
google.<span style="color: #6591f7;">setOnLoadCallback</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
&nbsp;
    $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
        <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Olá'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>A vantagem desta forma é que, com ela, você pode definir, como no exemplo acima, que quer pegar a versão mais atual do jQuery família de versão 1. É possível ser mais específico:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// obtém versão 1.3.2 (que é a última da família 1.3)</span>
google.<span style="color: #6591f7;">load</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">&quot;jquery&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">&quot;1.3&quot;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span> 
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// obtém especificamente a versão 1.2.6 sem compressão</span>
google.<span style="color: #6591f7;">load</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">&quot;jquery&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">&quot;1.2.6&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #ffffff;">&#123;</span>uncompressed<span style="color: #ffffff;">:</span><span style="color: #fbde2d; font-weight: bold;">true</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>É uma funcionalidade um pouco mais difícil de implementar mas sem dúvida interessante, pois permite que o seu código sempre utilize a versão mais atual de uma determinada família.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/23/quem-usa-google-ajax-libraries-api-para-carregar-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>eDate &#8211; Validação e manipulação de datas em JavaScript</title>
		<link>http://javascript.singuska.com/2009/12/13/edate-uma-biblioteca-para-manipular-datas-em-javascript/</link>
		<comments>http://javascript.singuska.com/2009/12/13/edate-uma-biblioteca-para-manipular-datas-em-javascript/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 18:31:18 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=160</guid>
		<description><![CDATA[Manipulação e validação de datas é um assunto chato em qualquer linguagem de programação. Em JavaScript temos ao nosso dispor o objeto Date. Tarefas repetitivas como a validação de datas ou verificação de idade acabam se tornando extremamente maçantes. Esta foi a motivação que me levou a criar o eDate (Easy Date). Download do eDate [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript" src="/wp-content/uploads/js/eDate.js">
</script></p>
<p>Manipulação e validação de datas é um assunto chato em qualquer linguagem de programação. Em JavaScript temos ao nosso dispor o objeto <em>Date</em>. Tarefas repetitivas como a validação de datas ou verificação de idade acabam se tornando extremamente maçantes. Esta foi a motivação que me levou a criar o eDate (Easy Date).</p>
<h3><a href="http://github.com/Sigmus/eDate/archives/master">Download do eDate</a></h3>
<p>Você pode baixar o eDate <a href="http://github.com/Sigmus/eDate/archives/master">aqui</a>. Não sei usar direito o GitHub ainda, então se vocês tiverem qualquer dificuldade é só avisar. Feito o download, é só incluir o arquivo na sua página utilizando uma tag <em>script</em> e começar a usar. eDate não é um plugin de nenhuma biblioteca funcionando com JavaScript puro.</p>
<h3>Como funciona?</h3>
<p>eDate funciona através de métodos estáticos. Praticamente todos os métodos recebem um objeto Date como argumento. As exceções são os métodos <em>isValid</em> e <em>getNew</em>. Vamos começar por eles.</p>
<h4>isValid</h4>
<p>Este método serve para determinar se uma data é ou não válida (retornando true / false). Recebe como argumento um objeto que será utilizado para validar a data.</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> result <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">isValid</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>
    day<span style="color: #ffffff;">:</span> <span style="color: #f78465;">29</span><span style="color: #ffffff;">,</span>
    month<span style="color: #ffffff;">:</span> <span style="color: #f78465;">2</span><span style="color: #ffffff;">,</span>
    year<span style="color: #ffffff;">:</span> <span style="color: #f78465;">2009</span>   
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>result<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A data não é válida porque 2009 não é um ano bissexto. Notem que utilizamos 2 para fevereiro. Uma das inconveniências do objeto date é a sua bizarra atribuição de números aos meses. Janeiro é 0, fevereiro 1, etc. eDate &#8220;conserta&#8221; isso, fazendo com que janeiro seja 1, fevereiro 2, etc. <em>isValid</em> pode receber parâmetros de outra forma:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> result <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">isValid</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'29/02/2009'</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>result<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Foi por isso que optei em utilizar um objeto como argumento para isValid. No exemplo acima utilizamos a máscara <em>dd/mm/yyyy</em>. É possível também utilizar <em>mm/dd/yyyy</em> e <em>yyyy/mm/dd</em>. </p>
<p>A grande vantagem das máscaras é que, muitas vezes, as datas que manipulamos em páginas estão em um único campo input de um formulário. Pretendo adicionar mais máscaras utilizando expressões regulares no futuro.</p>
<h4>getNew</h4>
<p>Este método retorna um novo objeto date. A vantagem de utilizar getNew ao invés de <em>new Date</em> é que podemos utilizar as máscaras. Além disso, não precisamos nos preocupar em subtrair o mês.</p>
<p><span class="jsrun-exemplo-3 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> 
d1 <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> Date<span style="color: #ffffff;">&#40;</span><span style="color: #f78465;">2009</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">11</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">13</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
d2 <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'13/12/2009'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>d1.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">===</span> d2.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>d2.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<h4>getToday</h4>
<p>getToday retorna a data atual do seu computador mas com uma diferença: o horário vem zerado (meia-noite):</p>
<p><span class="jsrun-exemplo-4 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> t <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">getToday</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>t.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Isso é diferente de:</p>
<p><span class="jsrun-exemplo-5 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> t <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> Date<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>t.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<h4>addDays</h4>
<p>Este método serve para adicionar ou subtrair dias de um objeto date:</p>
<p><span class="jsrun-exemplo-6 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> d <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'1/1/2010'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
eDate.<span style="color: #6591f7;">addDays</span><span style="color: #ffffff;">&#40;</span>d<span style="color: #ffffff;">,</span> <span style="color: #ffffff;">-</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>d.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Criamos um objeto date através de eDate.getNew(). Depois utilizamos o método addDays para subtrair um dia do objeto. Percebam que o objeto em si foi manipulado por referência.</p>
<h4>diffDays</h4>
<p>Caso você precise saber a diferença em dias de uma data para outra:</p>
<p><span class="jsrun-exemplo-7 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> diff <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">diffDays</span><span style="color: #ffffff;">&#40;</span>
    eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'03/03/2010'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
    eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'20/02/2010'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span>
<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>diff<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste caso a primeira data está <em>11</em> dias no futuro em relação a segunda. Se invertéssemos a ordem das datas, o resultado seria <em>-11</em>. Se as datas fossem iguais o resultado seria <em>0</em>.</p>
<h4>isOverAge</h4>
<p>Este método permite verificar, por exemplo, se alguém é ou não maior de idade:</p>
<p><span class="jsrun-exemplo-8 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> result <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">isOverAge</span><span style="color: #ffffff;">&#40;</span>
    eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'20/10/1985'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
    <span style="color: #f78465;">18</span>
<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>result<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>O primeiro argumento é um objeto date, o segundo o número de anos que deve ser utilizado para a comparação. Uma gama de websites exige que o usuário informe sua idade antes de liberar o acesso. É uma política um tanto quanto duvidosa porque o usuário pode mentir a idade ou alterar a data do seu computador, já que as datas geradas pelo JavaScript dependem do horário do computador do usuário.</p>
<h3>Sugestões e melhorias</h3>
<p>Por enquanto é isso que a o eDate faz. Penso em adicionar métodos e resolver bugs conforme a necessidade surgir. Aguardo comentários e sugestões.</p>
<p><del datetime="2009-12-13T17:56:50+00:00"></p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/13/edate-uma-biblioteca-para-manipular-datas-em-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

