<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- iMasters Gerador RSS 2.0 -->
<rss version="2.0">
    <channel>
        <title>iMasters - Seção: javascript</title>
        <description>iMasters - Comunidade de profissionais, estudantes e mestres em tecnlogias e ferramentas voltadas para o desenvolvimento web</description>
        <link>http://imasters.uol.com.br/</link>
        <lastBuildDate>Tue, 09 Feb 2010 16:00:30 +0100</lastBuildDate>
        <generator>iMasters Gerador RSS 2.0</generator>
        <item>
            <title>Web abrindo aplicações locais</title>
            <link>http://imasters.uol.com.br/artigo/15772/dotnet/web_abrindo_aplicacoes_locais/</link>
            <description>&lt;p&gt;&lt;img src=&quot;http://conteudo.imasters.uol.com.br/15772/web1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt; &lt;/p&gt;


&lt;p&gt;Olá, pessoal! Estava no trabalho
precisando fazer um portal de produtos criados pela empresa, para ficar mais fácil
centralizar tudo. O usuário entra na intranet, loga apenas uma vez
e abre os programas que quiser. Porém, bati a cabeça na porta quando percebi
que a maioria dos produtos são locais, isto é, funcionam localmente na máquina
do usuário e precisam ser instalados para o devido funcionamento. Bati com a cabeça na parede também
por perceber que ainda existem programas feitos com a linguagem VB 6.0, Delphi,
DOS e outros além de C#.NET.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Referências:&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Ferramenta de
desenvolvimento: Visual Studio .NET 2008&lt;/p&gt;


&lt;p&gt;Linguagem:
C#.NET&lt;/p&gt;


&lt;p&gt;Linguagem
Script: JavaScript&lt;/p&gt;


&lt;p&gt;Framework 3.5&lt;/p&gt;


&lt;p&gt; &lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://conteudo.imasters.uol.com.br/15772/web2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Além das referências acima, o código
pode ser feito em qualquer ferramenta do Visual Studio .NET, uma mais nova ou
mais antiga sem problema. Isso serve também para o framework. &lt;/p&gt;


&lt;p&gt;Continuando a história, estava com
problemas, pois precisava passar usuário e senha para que não fosse necessário logar
novamente dentro do aplicativo. A idéia foi a seguinte: o usuário loga no
portal e, com isso, todos os sistemas aparecem pra ele, de acordo com as
permissões. Ao clicar em um programa, o software local aparece com a tela
correta e logado. &lt;/p&gt;


&lt;p&gt;Lembrando que cada software precisa
de usuário e senha. Ficou bem complicado fazer com que esse portal funcionasse,
porém a empresa só usa IE, o que ficou mais específico. É muito
importante fazer software web que funcione em todos os browsers, mas já que a
empresa usa apenas IE, aproveitei!&lt;/p&gt;


&lt;p&gt;Tive que fazer uma alteração nos
aplicativos para receber usuário e senha, ou seja, o arquivo.exe recebe usuário
e senha criptografados para logar automaticamente.&lt;/p&gt;


&lt;h4&gt;Na prática&lt;/h4&gt;


&lt;p&gt;Pesquisando na internet e estudando
sobre a linguagem C#.NET, vi que o portal fica na intranet e os
aplicativos ficam localmente. Portanto, não posso usar o Process.Start ou
qualquer outro comando do C#.NET, porque não existe software instalado no
servidor, e sim na máquina. Tive que passar para a linguagem script, VBScript ou
JavaScript. Achei um código que verifica um caminho específico via javascript e
funciona apenas no Internet Explorer: &lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;        function AbreAplicacao(caminho, tipo, usuario, senha) {&lt;br /&gt;&lt;br /&gt;            var fso = new ActiveXObject('Scripting.FileSystemObject');&lt;br /&gt;&lt;br /&gt;            var WshShell = new ActiveXObject('WScript.Shell');&lt;br /&gt;&lt;br /&gt;            if (fso.FileExists(caminho))&lt;br /&gt;&lt;br /&gt;                WshShell.Exec(caminho+' '+tipo+' ' + usuario+ ' ' +senha);&lt;br /&gt;&lt;br /&gt;            else&lt;br /&gt;&lt;br /&gt;                alert('A aplicação não está instalada neste computador.')&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Referência: Code
1.1&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Em resumo, o código usa ActiveX e
acessa o FileSystemObject. Depois disso, uso o WScript.Shelll, se no
FileSystemObject existir o arquivo que mandei como caminho na função, ele chama
passando os parâmetros, caso contrário exibe um alerta na tela falando que a
aplicação não está instalada. &lt;/p&gt;


&lt;p&gt;No primeiro momento, chamando a
função passando os dados via javascript funcionou perfeitamente. Agora o
desafio seria executar o mesmo dado pela linguagem C#.NET na plataforma
ASP.NET. &lt;/p&gt;


&lt;p&gt;Tentei de tudo, mas não estava dando
certo. Resumindo, o que deu certo foi criar um Label &amp;lt;asp:label...&amp;gt;
dentro da página chamando a função javascript:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;//colocar no final da página&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:Label ID=&quot;lblScript&quot; runat=&quot;server&quot;&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    string comando = @&quot;&amp;lt;script&amp;gt;AbreAplicacao('C:&amp;#92;&amp;#92;Caminho da Aplicacao&amp;#92;&amp;#92;Arquivo.exe','DIGITACAO','usuario','senha')&amp;lt;/script&amp;gt;&quot;;&lt;br /&gt;&lt;br /&gt;                    lblScript.Text = comando;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Referência: Code
1.2&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Assim, mesmo a página web estando no
servidor, chama uma aplicação que está localmente na máquina do usuário.
Resolveu o meu problema perfeitamente. É lógico que existe uma regra específica
para o tipo da aplicação que não mostrei aqui, mas o importante é que você
pode usar o código explicado acima para chamar aplicativos dentro do seu
computador. &lt;/p&gt;


&lt;p&gt;Lembrando que só funciona se o site
tiver HTTPS e no Internet Explorer.&lt;/p&gt;


&lt;p&gt;Fico por aqui,
espero que tenha gostado.&lt;/p&gt;

</description>
            <author>mauricio.junior@gmail.com (Mauricio Junior)</author>
            <pubDate>Thu, 04 Feb 2010 11:00:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/15772</guid>
        </item>
        <item>
            <title>Server Push com Javascript e JSP</title>
            <link>http://imasters.uol.com.br/artigo/15652/javascript/server_push_com_javascript_e_jsp/</link>
            <description>


&lt;p&gt;
        Resumidamente, o conceito de ServerPush é abrir um canal de comunicação http e 
        ficar recebendo os dados da aplicação sem efetuar posts. Essa tecnologia foi 
        introduzida em 1996 por PointCast e Marimba e, em 1997, Microsoft e NetScape 
        aplicaram esse canal dentro de seus Browsers. Para mais detalhes, &lt;a&gt;wikipedia&lt;/a&gt;!&lt;a href=&quot;http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push&quot; class=&quot;ext&quot;&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;
        Vou demonstrar como desenvolver este mecanismo de comunicação utilizando JSP e 
        Javascript.&lt;/p&gt;


&lt;p&gt;
        &lt;strong&gt;Nosso exemplo terá três páginas:&lt;/strong&gt;&lt;/p&gt;


&lt;ol&gt;&lt;li&gt;Index.jsp &lt;/li&gt;

&lt;li&gt;Display.jsp &lt;/li&gt;

&lt;li&gt;Streamer.jsp&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Index.jsp:&lt;/strong&gt; nessa página criaremos os frames [display.jsp e streamer.jsp] e os tratamentos 
        javascript para as mensagens que chegarão.&lt;/p&gt;



&lt;p&gt;
        
        &lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/15652/serverPush_index.gif&quot; /&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;
        A página &lt;strong&gt;display.jsp&lt;/strong&gt; vai conter nossos objetos que serão atualizados. Ex: Grids, 
        Divs, Tabelas, ou pode ser também uma página em branco, se for apenas printar a 
        mensagem recebida.&lt;/p&gt;


&lt;p&gt;
        
        &lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/15652/serverPush_display.gif&quot; /&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;
        A página &lt;strong&gt;Streamer.jsp&lt;/strong&gt; irá conter a regra de negócio. O grande lance aqui é a 
        possibilidade de utilizar a &quot;Thread.sleep&quot; do Jsp... Nesse exemplo estamos apenas 
        printando de tempo em tempo um contador, mas uma implementação significativa 
        seria a ida em um banco de dados resgatando os últimos cadastrados, as melhores 
        ofertas de compra, etc...&lt;/p&gt;


&lt;p&gt;
        
        &lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/15652/serverPush_streamer.gif&quot; /&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;
        Quando a aplicação estiver rodando, o streamer.jsp enviará o conteúdo para a 
        função push localizada no Index.jsp.&lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/15652/serverPush_rodando.gif&quot; /&gt;&lt;/p&gt;


&lt;p&gt;
        O push pegará o conteúdo e jogará no frame &quot;display&quot;. Podemos também acessar 
        através do button que chamará a função SendEvent, que enviará para o 
        tratarMensagemPublicada a mensagem digitada no input. Nesse caso, o 
        tratarMensagemPublicada fará um Split na mensagem e, de acordo com as condições, 
        encaminhará a mensagem para os devidos métodos.&lt;/p&gt;


&lt;p&gt;
        &lt;a href=&quot;http://conteudo.imasters.uol.com.br/15652/serverPush.zip&quot;&gt;Faça o download do Exemplo&lt;/a&gt;&lt;/p&gt;

</description>
            <author>fhuggler@hotmail.com (Felipe Huggler)</author>
            <pubDate>Fri, 22 Jan 2010 10:30:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/15652</guid>
        </item>
        <item>
            <title>Coding Standards</title>
            <link>http://imasters.uol.com.br/artigo/15444/desenvolvimento/coding_standards/</link>
            <description>&lt;h4&gt;Por que aprender Coding Standards?&lt;/h4&gt;


&lt;p&gt;Atualmente, fala-se um pouco sobre &lt;em&gt;Code Standards&lt;/em&gt;. Porém, fala-se bem mais do que há 5 anos. Com o &quot;boom&quot; do Tableless, a W3C ganhou um pouco mais de visibilidade, e seus padrões começaram a ser praticados no meio web, abrangendo basicamente HTML, CSS, XML, etc.&lt;/p&gt;


&lt;p&gt;O grande diferencial passa a ser notado quando se define Code Standards no
desenvolvimento em linguagens como: PHP, JavaScript, etc. A Sun tem uma ótima documentação de &lt;em&gt;Code Standards&lt;/em&gt;, que normalmente é seguida pelos desenvolvedores &lt;em&gt;Java&lt;/em&gt;, e criou também, um &lt;em&gt;Padrão de Documentação em Código&lt;/em&gt; excelente, conhecido como &lt;a href=&quot;http://java.sun.com/j2se/javadoc/&quot; class=&quot;ext&quot;&gt;JavaDoc&lt;/a&gt;, onde há ferramentas que geram a documentação em  HTML e outros formatos baseados nos blocos de documentação feitos no código fonte.&lt;/p&gt;


&lt;p&gt;Mais tarde, baseados nesse padrão, surgiram: &lt;a href=&quot;http://www.phpdoc.org/&quot; class=&quot;ext&quot;&gt;PHPDoc&lt;/a&gt;,
&lt;a href=&quot;http://jsdoc.sourceforge.net/&quot; class=&quot;ext&quot;&gt;JSDoc&lt;/a&gt; e &lt;a href=&quot;http://cssdoc.net/&quot; class=&quot;ext&quot;&gt;CSSDoc&lt;/a&gt;,
seguindo a mesma base e estrutura de documentação, o que facilita a tomada
de decisão com relação a qual padrão de documentação deve-se seguir.&lt;/p&gt;


&lt;h4&gt;Qual a importância?&lt;/h4&gt;


&lt;p&gt;Em se definindo e aplicando &quot;Padrões de Codificação e
Documentação&quot;, há um enorme ganho com:&lt;/p&gt;


&lt;ul&gt;&lt;li&gt;Facilidade de implementação;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Melhorias no código em:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Visibilidade;&lt;/li&gt;

&lt;li&gt;Portabilidade;&lt;/li&gt;

&lt;li&gt;Reaproveitamento;&lt;/li&gt;

&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;Redução de tempo em: 
&lt;ul&gt;&lt;li&gt;Adaptação de novos
      desenvolvedores.&lt;/li&gt;

&lt;li&gt;Manutenção;&lt;/li&gt;

&lt;li&gt;Migração;&lt;/li&gt;

&lt;li&gt;Identificação, rastreamento e correção de erros.&lt;/li&gt;

&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Diminuição de reescrita de
     código por falta de documentação.&lt;/p&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nas fábricas de software, padrões de codificação, nomenclaturas e
documentação refletem diretamente na diminuição do &lt;em&gt;alocação de recursos&lt;/em&gt; e consequentemente &lt;em&gt;prazo de entrega&lt;/em&gt;, &lt;em&gt;tempo de desenvolvimento&lt;/em&gt; e &lt;em&gt;custo final do projeto&lt;/em&gt;.&lt;/p&gt;


&lt;h4&gt;Fator profissional&lt;/h4&gt;


&lt;p&gt;Por ser uma prática pouco conhecida e disseminada entre desenvolvedores
Júnior e Pleno, o profissional que trabalha sob coding standards destaca-se entre os demais.
A necessidade/utilidade é percebida ao entrar em um ambiente de desenvolvimento com maior número de profissionais, observando a realidade das fábricas de softwares.&lt;/p&gt;


&lt;p&gt;Com certeza, há uma tendência natural de que Code Standards seja um
requisito obrigatório para quem é ou pretende ser arquiteto de linguagem, seja
Java, PHP, Delphi ou qualquer outra. Para desenvolvedores Java é praticamente
requisito indispensável seguir o padrão oferecido pela SUN, e para desenvolvedores PHP já
temos ótima disseminação do assunto nos recentes eventos nacionais e regionais,
bem como o &quot;PHP Standards&quot;, que está sendo discutido e elaborado por vários líderes de  projetos/frameworks de renome. Em breve, teremos um padrão a ser seguido para projetos a partir da versão 5.3 do PHP.&lt;/p&gt;


&lt;h4&gt;Onde encontrar informações:&lt;/h4&gt;


&lt;p&gt;Se você trabalha com PHP, há o artigo: &lt;a href=&quot;http://blog.walkeralencar.com/archives/11&quot; class=&quot;ext&quot;&gt;PHP Coding Standards&lt;/a&gt;
falando sobre o assunto e com materiais de referência que irão facilitar muito
sua vida. Sendo Java: &lt;a href=&quot;http://java.sun.com/docs/codeconv/&quot;&gt;Code
Conventions for the Java Programming Language&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Em breve publicarei mais artigos aprofundando esse assunto que, com certeza,
é bastante abrangente e importante.&lt;/p&gt;


&lt;p&gt;Abraços e sucesso!&lt;/p&gt;

</description>
            <author>walkeralencar@gmail.com (Walker de Alencar Oliveira)</author>
            <pubDate>Fri, 08 Jan 2010 10:00:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/15444</guid>
        </item>
        <item>
            <title>Abrindo uma janela de forma modal</title>
            <link>http://imasters.uol.com.br/artigo/15171/csharp/abrindo_uma_janela_de_forma_modal/</link>
            <description>&lt;p&gt;Olá pessoal, gostaria de mostrar hoje uma forma prática de como abrir uma janela de forma modal web, ou seja, na
internet. Outro dia eu precisei  disso e não tinha achado da forma
que necessitava. Não é das coisas mais complicadas a fazer, mas até descobrir como chegar lá, eu penei um pouco. &lt;/p&gt;


&lt;p&gt;Caixas de diálogo (dialog) são um recurso de interface muito útil em programas gráficos basados em janelas, quando se recorrer a uma janela secundária para solicitar ao usuário informações complementares. Existem dois tipos de associação entre uma janela de diálogo e a janela principal
à qual está associada. Uma delas é a modal, quando a abertura da janela de diálogo
bloqueia qualquer interação na janela principal, até que o diálogo seja encerrado. &lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Requisitos:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;&lt;li&gt;Javascript&lt;/li&gt;

&lt;li&gt;Linguagem C#.NET&lt;/li&gt;

&lt;li&gt;Ferramenta de
desenvolvimento: Visual Studio .NET 2008&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;JavaScript&lt;/h4&gt;


&lt;p&gt;No meu caso, criei um arquivo .js e
importei na minha página .ASPX. Eu posso chamar a função criada no arquivo .js
de qualquer plataforma ou linguagem. No meu caso estou chamando dentro de um
componente chamado GridView. Segue o arquivo (Code 1)&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt; /*&lt;br /&gt;&lt;br /&gt;    ### função que abre um popup de forma modal&lt;br /&gt;&lt;br /&gt;    ### deve ser passado a url, nome, tamanho e largura&lt;br /&gt;&lt;br /&gt;    por exemplo OnClick=&quot;dialogModal('pagina.html', 'nome', '620', '1024');&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;function dialogModal(url, nome, nrTamanho, nrLargura) {&lt;br /&gt;&lt;br /&gt;    eval(window.showModalDialog(url, nome,'Resizable:no; DialogHeight:'+nrTamanho+'px ; DialogWidth:'+nrLargura+'px; Edge:raised; Help:no; Scroll:no; Status:no; Center:yes;'));&lt;br /&gt;&lt;br /&gt;    //eval(caixa);&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code
1&lt;/span&gt;&lt;/p&gt;


&lt;h4&gt;GridView&lt;/h4&gt;


&lt;p&gt;Dentro do meu gridview, tenho as
colunas normais da tabela do banco e um botão imagem (Code 2).&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;asp:GridView ID=&quot;gridView&quot; runat=&quot;server&quot;&lt;br /&gt;&lt;br /&gt;                AutoGenerateColumns=&quot;false&quot;&lt;br /&gt;&lt;br /&gt;                Width=&quot;100%&quot; onrowdatabound=&quot;gridView_RowDataBound&quot; HorizontalAlign=&quot;Center&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                &amp;lt;Columns&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:TemplateField ItemStyle-Wrap=&quot;false&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;ItemTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;asp:ImageButton ID=&quot;cmdImagemGrid&quot;&lt;br /&gt;&lt;br /&gt;                                runat=&quot;server&quot; ImageUrl=&quot;~/App_Themes/default/image/Doc.gif&quot;&amp;gt;&amp;lt;/asp:ImageButton&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;/ItemTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;/asp:TemplateField&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;Descricao&quot; HeaderText=&quot;Crp&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;Sequencial&quot; HeaderText=&quot;Passada&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;DataMovimento&quot; HeaderText=&quot;Data Movimento&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;DataInicial&quot; HeaderText=&quot;Inicio Transf.&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;DataFinal&quot; HeaderText=&quot;Fim Transf.&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;TempoTransferencia&quot; HeaderText=&quot;Tempo Trans.&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;QtdDocumentos&quot; HeaderText=&quot;Qtd. Docs&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;QtdFalhas&quot; HeaderText=&quot;Falhas&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;Responsavel&quot; HeaderText=&quot;Digitalizado por&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;asp:BoundField DataField=&quot;PassadaId&quot; HeaderText=&quot;Passada&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;                &amp;lt;/Columns&amp;gt;&lt;br /&gt;&lt;br /&gt;            &amp;lt;/asp:GridView&amp;gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code 2&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;O botão dentro do gridview está
separado, dentro da tag &amp;lt;ItemTemplate&amp;gt; (Code 3).&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;ItemTemplate&amp;gt;&lt;br /&gt;&amp;lt;asp:ImageButton ID=&quot;cmdImagemGrid&quot; runat=&quot;server&quot; ImageUrl=&quot;~/App_Themes/default/image/Doc.gif&quot;&amp;gt;&amp;lt;/asp:ImageButton&amp;gt;&lt;br /&gt;&amp;lt;/ItemTemplate&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code 3&lt;/span&gt;&lt;/p&gt;


&lt;h4&gt;Código C#&lt;/h4&gt;


&lt;p&gt;Para pegar esse botão e adicionar uma
propriedade pra ele, tenho que criar o RowDataBound do componente GridView,
isso dentro código C#. Veja o Code 4.&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)&lt;br /&gt;&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            if (e.Row.RowType == DataControlRowType.DataRow)&lt;br /&gt;&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;                //adiciona no botao de imagem o comando javascript dialogModal no onclickClient&lt;br /&gt;&lt;br /&gt;                ImageButton img = (ImageButton)(e.Row.FindControl(&quot;cmdImagemGrid&quot;));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    img.OnClientClick = &quot;dialogModal ('ControleQualidadeImagem.aspx&quot;','pesquisa1', '620', '1000')&quot;;&lt;br /&gt;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;        }  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code
4&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Verifiquei primeiro se o
tipo da linha era DataRow, depois usei o FindControl para achar o componente
chamado cmdImagemGrid e então adicionei o atributo OnClienteClick
a esse componente, passando o nome da função criada em JavaScript anteriormente. &lt;/p&gt;


&lt;h4&gt;Resultado Final&lt;/h4&gt;


&lt;p&gt;O resultado final é uma janela como a
mostrada a seguir (Imagem 1)&lt;/p&gt;


&lt;p&gt; &lt;img src=&quot;http://conteudo.imasters.uol.com.br/15171/abrindo-janela-1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Imagem 1&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Espero ter
ajudado. Qualquer dúvida
pode entrar em contato pelo comentário do site.&lt;/p&gt;

</description>
            <author>mauricio.junior@gmail.com (Mauricio Junior)</author>
            <pubDate>Tue, 08 Dec 2009 10:30:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/15171</guid>
        </item>
        <item>
            <title>Mensagem em JavaScript com .NET</title>
            <link>http://imasters.uol.com.br/artigo/15170/dotnet/mensagem_em_javascript_com_net/</link>
            <description>&lt;p&gt;	Olá, pessoal. Gostaria de deixar registrado aqui no iMasters a maneira fácil e simples de mostrar uma mensagem na tela via
javascript. Antigamente colocava um código e agora com o Ajax, mas é melhor colocar
de outra forma.&lt;/p&gt;


&lt;h4&gt;Alert&lt;/h4&gt;


&lt;p&gt;Isso não quer
dizer que da maneira anterior não funcione, porém a melhor maneira é
um pouco diferente.&lt;/p&gt;


&lt;p&gt;Antigamente,
você colocaria o código:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;Response.Write(&quot;&amp;lt;script&amp;gt;alert('mensagem');&amp;lt;/script&amp;gt;&quot;); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Mas, para a exibição de uma mensagem na tela ficar melhor, sem problemas com Ajax nem nada, uso o seguinte código:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt; &lt;br /&gt;  ClientScript.RegisterStartupScript(Page.GetType(),&lt;br /&gt;  &quot;msg&quot;, &quot;&amp;lt;script&amp;gt;alert('Mensagem');&amp;lt;/script&amp;gt;&quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;Confirm&lt;/h4&gt;


&lt;p&gt;Existe a possibilidade de
colocar em um botão uma mensagem de confirmação antes de a funcionalidade ser
realmente feita. Gosto muito desse tipo de mensagem para alertar o usuário.&lt;/p&gt;


&lt;p&gt;A primeira
coisa é adicionar um botão na parte da página ASPX.&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;  &lt;br /&gt;  &amp;lt;asp:Button&lt;br /&gt;  id=&quot;cmdEnviar&quot; runat=&quot;server&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Depois basta colocar na parte
C#.NET ou no arquivo .CS, .VB uma mensagem de confirmação.&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;  cmdEnviar.Attributes.Add(&quot;onclick&quot;, &quot;return&lt;br /&gt;  confirm('Deseja realmente enviar?')&quot;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt; É isso aí. Espero ter ajudado!&lt;/p&gt;

</description>
            <author>mauricio.junior@gmail.com (Mauricio Junior)</author>
            <pubDate>Wed, 02 Dec 2009 10:30:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/15170</guid>
        </item>
        <item>
            <title>Adicionando bibliotecas javascript ao seu tema ou plugin WordPress</title>
            <link>http://imasters.uol.com.br/artigo/15017/wordpress/adicionando_bibliotecas_javascript_ao_seu_tema_ou_plugin_wordpress/</link>
            <description>&lt;p&gt;Normalmente, quando estamos desenvolvendo um tema
ou um plugin, sentimos a necessidade de utilizar alguma biblioteca em
javascript para facilitar a realização de determinada tarefa. A maneira
mais fácil é sem dúvida utilizando a tag '&amp;lt;script&amp;gt;' no corpo do
seu arquivo. Agora imagine que todos os desenvolvedores que utilizam &lt;a href=&quot;http://jquery.com/&quot; class=&quot;ext&quot;&gt;jquery&lt;/a&gt;
resolvam adicionar as chamadas à biblioteca no corpo de seus plugins.
Usuários que possuam vários plugins ativos provavelmente terão uma
baita dor de cabeça mais cedo ou mais tarde quando esses plugins
causarem algum conflito.&lt;/p&gt;


&lt;p&gt;Como não podia deixar de ser, o WordPress já tem uma solução para os
nossos problemas. Uma função chamada 'wp_enqueue_scripts' que é
responsável por enfileirar e ordenar a chamada das bibliotecas,
evitando assim a duplicação de arquivos e, possibilitanto, o
carregamento das dependências antes.&lt;/p&gt;


&lt;p&gt;A primeira coisa que você deve fazer é registrar a biblioteca para
que o WordPress saiba que ela existe. Isso deve ser feito utilizando a
seguinte função:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;wp_register_script($handle, $src, $deps = array(), $ver = false)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;O parâmetro obrigatório '$handle' é o identificador único da
biblioteca, o nome pelo qual o WordPress saberá quem é quem no conjunto
de bibliotecas disponível. Em seguida vem o '$src', que informa o
endereço do arquivo, também obrigatório. Caso esse arquivo tenha alguma
dependência, esta deve ser informadas em '$deps' no formato de array,
onde cada item do array é uma dependência a ser satisfeita. Essas
dependências são informadas pelo '$handle' das respectivas
dependências. E por último (e menos importante) '$ver' é a versão do
script.&lt;/p&gt;


&lt;p&gt;Não é possível registrar um script que já esteja registrado. Caso
você tente, seu script será ignorado. Mas se for realmente necessário,
você pode remover um script anterior para adicionar o seu. Isso pode
acontecer quando você desenvolve para versões mais antigas do WP. Para
remover um script utilize:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;wp_deregister_script($handle)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Onde '$handle' é o identificador do script que você deseja remover.&lt;/p&gt;


&lt;p&gt;Depois de definidos, os scripts e suas dependências, você deve
informar quais scripts devem ser carregados e onde eles serão
carregados. Para a primeira questão, use:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;wp_enqueue_script($handle, $src = false, $deps = array(), $ver = false)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Apesar de todos os parêmetros dessa função, o único obrigatório é o
'$handle' que informa qual o script será carregado. Os outros
parâmetros são exatamente iguais aos parâmetros do wp_register_script e
funcionam da mesma forma. A resposta pra isso é que se o script
definido pelo $handle não estiver registrado o WordPress utiliza o
atual.&lt;/p&gt;


&lt;p&gt;Pronto! Agora só falta informar onde o script deve ser carregado.
Nos temas, basta colocar a chamada 'wp_queue_script' no template onde a
biblioteca será utilizada e o 'wp_head' faz o resto. Assim, se você
pretende usar a biblioteca &lt;a href=&quot;http://jquery.com/&quot; class=&quot;ext&quot;&gt;jquery&lt;/a&gt; nos resultados das buscas, adicione ao search.php a linha:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?php wp_enqueue_script('jquery'); ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Já na área administrativa você precisa criar uma função que carregue o script e adiciona-la à ação 'init', por exemplo:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;function load_scripts()&lt;br /&gt;{&lt;br /&gt;wp_enqueue_script('jquery');&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;add_action('init', 'load_scripts');&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;É isso essa explicação também se aplica aos estilos você só precisa
mudar as funções para 'wp_register_style', 'wp_deregister_style' e
'wp_enqueue_style' respectivamente. E para conferir os scripts e
estilos que o WordPress carrega por padrão, confira o arquivo
script-loader.php na pasta wp-includes.&lt;/p&gt;

</description>
            <author>stallefish@gmail.com (Marcelo Mesquita)</author>
            <pubDate>Wed, 18 Nov 2009 10:00:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/15017</guid>
        </item>
        <item>
            <title>JavaScript - dez dicas e boas práticas</title>
            <link>http://imasters.uol.com.br/artigo/14926/javascript/javascript_dez_dicas_e_boas_praticas/</link>
            <description>&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/14926/1.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Recentemente alguns site e blogs vêm divulgando listas de dicas para
se codificar em javascript, apresentando melhores práticas de
desenvolvimento e muitas dicas bacanas. Pensei que este seria um bom
tópico para se estender e compartilhar com vocês. Neste artigo, reúno as minhas top 10 dicas e boas práticas para codificação
javascript. Espero que gostem.&lt;/p&gt;

&lt;h4&gt;1. Use o atributo defer para indicar o uso scripts externos no IE&lt;/h4&gt;

&lt;p&gt;O propósito do defer é avisar o script que está sendo requisitado
externamente para esperar até que a página seja carregada ou o DOM
esteja preparado. O mesmo pode ser realizado através de bons métodos
não-obstrutivos via javascript, que usualmente inclui códigos que
previnem a execução de scripts antes que o DOM seja carregado por
completo.&lt;/p&gt;

&lt;p&gt;A vantagem do defer ocorre quando utilizamos o Internet Explorer,
tendo em vista que é único browser que suporta o atributo defer. Então,
se você precisa de um rápido script que rode única e
exclusivamente no Internet Explorer, e você não quer que ele execute
antes que o DOM esteja preparado, então simplesmente adicione defer=&quot;defer&quot;
na sua tag &amp;lt;script&amp;gt; e ela irá rapidamente tratar o seu problema.
Corrigir a transparência de arquivos PNG no IE6 é uma das
possibilidades práticas do uso do defer.&lt;/p&gt;

&lt;p&gt;(Edit: O atributo defer deve ser usado quando escondemos um script
de outros browsers com o uso dos comentários condicionais  -
conditional comment - que afete somente os navegadores da Microsoft -
de outra maneira o script vai rodar normalmente em outros browsers.)&lt;/p&gt;

&lt;h4&gt;2. Use o CData Section para previnir erros de validação XHTML Strict&lt;/h4&gt;

&lt;p&gt;Muitas vezes seus scripts vão residir em arquivos externos e
chamados dentro da tag &amp;lt;script&amp;gt; dentro do  &amp;lt;head&amp;gt; do
documento, ou então antes do fechamento da tag &amp;lt;/body&amp;gt;.&lt;/p&gt;

&lt;p&gt;Mas este documento pode estar eventualmente sendo usado em um local que junto dele existem marcações HTML, como abaixo:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;var my_variable = 100;&lt;br /&gt;if (my_variable &amp;lt; 50) {&lt;br /&gt;	// alguma coisa aqui...&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Você pode notar que no código acima, dentro do if, existe o símbolo
&amp;lt;  que representa &quot;menos&quot;, que é parte da sintax, correto? Este
símbolo causa um erro de validação. O validador interpreta ele como um
início de uma marcação ou uma tag HTML que não foi fechada, a não ser
que você encapsule o seu código com o CData, assim:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;//&amp;lt;![CDATA[&lt;br /&gt;var my_variable = 100;&lt;br /&gt;if (my_variable &amp;lt; 50) {&lt;br /&gt;	// alguma coisa aqui...&lt;br /&gt;}&lt;br /&gt;//]]&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;3. Evite palavras-chave reservadas do JavaScript quando estiver criando funções e identificadores&lt;/h4&gt;

&lt;p&gt;Muitas palavras são reservadas no javascript, então você deve
evitá-las quando forem criar variáveis ou outros idenficadores. A lista
completa de palavras-chaves do javascript segue abaixo:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;break&lt;br /&gt;case&lt;br /&gt;catch&lt;br /&gt;continue&lt;br /&gt;default&lt;br /&gt;delete&lt;br /&gt;do&lt;br /&gt;else&lt;br /&gt;finally&lt;br /&gt;for&lt;br /&gt;function&lt;br /&gt;if&lt;br /&gt;in&lt;br /&gt;instanceof&lt;br /&gt;new&lt;br /&gt;return&lt;br /&gt;switch&lt;br /&gt;this&lt;br /&gt;throw&lt;br /&gt;try&lt;br /&gt;typeof&lt;br /&gt;var&lt;br /&gt;void&lt;br /&gt;while&lt;br /&gt;with&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;4. Evite palavras reservadas do JavaScript quando estiver criando funções e identificadores&lt;/h4&gt;

&lt;p&gt;Que estão também algumas palavras reservadas, que não estão
necessariamente sendo usadas pela linguagem mas são reservadas para o
uso futuro. São estas:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;abstract&lt;br /&gt;boolean&lt;br /&gt;byte&lt;br /&gt;char&lt;br /&gt;class&lt;br /&gt;const&lt;br /&gt;debugger&lt;br /&gt;double&lt;br /&gt;enum&lt;br /&gt;export&lt;br /&gt;extends&lt;br /&gt;final&lt;br /&gt;float&lt;br /&gt;goto&lt;br /&gt;implements&lt;br /&gt;import&lt;br /&gt;int&lt;br /&gt;interface&lt;br /&gt;long&lt;br /&gt;native&lt;br /&gt;package&lt;br /&gt;private&lt;br /&gt;protected&lt;br /&gt;public&lt;br /&gt;short&lt;br /&gt;static&lt;br /&gt;super&lt;br /&gt;synchronized&lt;br /&gt;throws&lt;br /&gt;transient&lt;br /&gt;volatile&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;5. Não mude o tipo das variáveis depois da declaração inicial&lt;/h4&gt;

&lt;p&gt;No javascript, tecnicamente, isso é perfeitamente legal:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;var my_variable = &quot;Esta é uma string&quot;;&lt;br /&gt;my_variable = 50;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Depois que a variável é inicialmente declarada como string na linha
1, na linha 2 o seu valor é mudado e o seu tipo também. Esta não é uma
boa prática e deve ser evitada.&lt;/p&gt;

&lt;h4&gt;6. Não use variáveis globais&lt;/h4&gt;

&lt;p&gt;Para preveinir possíveis conflitos, em 99% dos casos, use o &quot;&lt;strong&gt;var&lt;/strong&gt;&quot;
no início quando estivermos declarando uma variável e seu valor. Isso
faz com que a sua variável exista somente no escopo da função e não
fora dela, ou seja, toda variável criada pelo &lt;strong&gt;var&lt;/strong&gt; só
poderá ser acessível dentro do escopo no qual ela foi declarada e não
mais fora dele. Então, se acontecer de você utilizar duas variáveis com
o mesmo valor em lugares diferentes do seu script, nenhum conflito
ocorrerá.&lt;/p&gt;

&lt;h4&gt;7. Javascript é Case-Sensitive&lt;/h4&gt;

&lt;p&gt;Lembre-se do que vem a seguir: No código que segue temos duas
variáveis que estão armazenando seus valores em 2 lugares diferentes na
memória, e não um só, como alguns podem pensar. São duas variáveis
completamente diferentes alocadas em lugares diferentes na memória:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;var myVariable = &quot;data&quot;;&lt;br /&gt;var myvariable = &quot;more data&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;8. Use o switch para lidar com multiplas condições&lt;/h4&gt;

&lt;p&gt;Não faça isto:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;if (example_variable == &quot;cyan&quot;) {&lt;br /&gt;	// faça algo aqui...&lt;br /&gt;} else if (example_variable == &quot;magenta&quot;) {&lt;br /&gt;	// faça algo aqui...&lt;br /&gt;} else if (example_variable == &quot;yellow&quot;) {&lt;br /&gt;	// faça algo aqui...&lt;br /&gt;} else if (example_variable == &quot;black&quot;) {&lt;br /&gt;	// faça algo aqui...&lt;br /&gt;} else {&lt;br /&gt;	// faça algo aqui...&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Faça isto:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;switch (example_variable) {&lt;br /&gt;	case &quot;cyan&quot;:&lt;br /&gt;		// faça algo aqui...&lt;br /&gt;		break;&lt;br /&gt;	case &quot;magenta&quot;:&lt;br /&gt;		// faça algo aqui...&lt;br /&gt;		break;&lt;br /&gt;	case &quot;yellow&quot;:&lt;br /&gt;		// faça algo aqui...&lt;br /&gt;		break;&lt;br /&gt;	case &quot;black&quot;:&lt;br /&gt;		// faça algo aqui...&lt;br /&gt;		break;&lt;br /&gt;	default:&lt;br /&gt;		// faça algo aqui...&lt;br /&gt;		break;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O segundo bloco de código faz exatamente a mesma coisa que o
primeiro, mas o segundo é limpo, fácil de ler, fácil de dar manutenção
e modificar.&lt;/p&gt;

&lt;h4&gt;9. Use o try-catch para prevenir que erros sejam expostos para os usuários&lt;/h4&gt;

&lt;p&gt;Encapsulando todo o seu código no try-catch, você pode evitar que o
usuário final nunca veja um feio erro de javascript exposto na tela.
Assim:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;try {&lt;br /&gt;	funcaoQueNaoExiste();&lt;br /&gt;} catch (error) {&lt;br /&gt;	document.write(&quot;Um erro ocorreu.&quot;)&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No código acima, eu tentei chamar uma função que não existe, para
forçar um erro. O navegador não vai exibir o típico erro &quot;not an
object&quot; ou &quot;object expected&quot;, mas ao invés disso, vai exibir um erro
mais customizável que eu incluí dentro do meu &quot;catch&quot;. Você pode também
deixar o catch vazio para nada ser mostrado para o usuário, ou você
pode criar uma função que seja chamada dentro do catch que faça o
tratamento deste erro para propósitos de debug etc.&lt;/p&gt;

&lt;p&gt;Mantenha na sua cabeça que isso pode esconder erros do desenvolvedor
também, então uma boa documentação do código e comentários podem ser
úteis neste ponto.&lt;/p&gt;

&lt;h4&gt;10. Faça comentários multi-linhas legíveis, mas simples&lt;/h4&gt;

&lt;p&gt;Em javascript, você pode comentar uma linha de código colocando um
// no início da linha. Você também pode criar um comentário em bloco
como mostra a seguir: /* [comentário aqui ] */. Algumas vezes você
precisa incluir um comentário longo, um comentário de mais de uma
linha. Um bom método para se utilizar que não tenha uma visual
esmagador, mas é fácil de identificar o código é este a seguir:&lt;/p&gt;

&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;/*&lt;br /&gt; * Este é um comentário multi-linha...&lt;br /&gt; * bla bla bla...&lt;br /&gt; * bla bla bla...&lt;br /&gt; * bla bla bla...&lt;br /&gt; * bla bla bla...&lt;br /&gt; */&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;E é isso!&lt;/p&gt;

&lt;p&gt;*&lt;/p&gt;

&lt;p&gt;Este artigo é uma adaptação e tradução do texto: &lt;a href=&quot;http://www.impressivewebs.com/10-javascript-quick-tips-and-best-practices/&quot; class=&quot;ext&quot;&gt;10 JavaScript Quick Tips and Best Practices&lt;/a&gt;&lt;/p&gt;

</description>
            <author>blog@igorescobar.com (Igor Escobar)</author>
            <pubDate>Wed, 11 Nov 2009 10:30:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/14926</guid>
        </item>
        <item>
            <title>Trabalhando com o componente TabContainer</title>
            <link>http://imasters.uol.com.br/artigo/14645/aspnet/trabalhando_com_o_componente_tabcontainer/</link>
            <description>&lt;p&gt;TabContainer é um componente do ASP.NET Ajax Control Toolkit localizado
&lt;a href=&quot;http://www.asp.net/ajax/ajaxcontroltoolkit/samples/&quot; class=&quot;ext&quot;&gt;nesse endereço&lt;/a&gt;.
Existem vídeos explicando como trabalhar com alguns componentes, porém tudo em inglês. Veja também o
site &lt;a href=&quot;http://www.asp.net&quot; class=&quot;ext&quot;&gt;www.asp.net&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Nesse artigo, veremos como trabalhar com o componente TabContainer, pegar qual aba está
selecionada e qual o nome dessa determinada aba.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Requisitos:&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Tecnologia:
ASP.NET&lt;/p&gt;


&lt;p&gt;Ferramenta:
Visual Studio .NET 2008&lt;/p&gt;


&lt;p&gt;Componentes: Ajax&lt;/p&gt;


&lt;p&gt;Linguagens
declarativas: Tags HTML e JavaScript&lt;/p&gt;


&lt;h4&gt;Primeiro
Passo&lt;/h4&gt;


&lt;p&gt;Instale
os componentes baixados dos sites que mencionei acima, gratuitamente. Na imagem (1.1) mostro
que, além de instalar na máquina os &quot;plugins&quot; feitos pela Microsoft, coloquei também no
meu toolbox. Basta clicar com o botão
direito em cima do toolbox e escolher
a opção Choose Items.&lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/14645/tabContainer-1.gif&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Imagem 1.1&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Na
opção Choose Item... procurei a DLL
chamada AjaxControlToolkit.dll e
anexei. Automaticamente apareceram todos os componentes na tela (Imagem 1.2).&lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/14645/tabContainer-2.gif&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Imagem 1.2&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Depois
disso foi só alegria e felicidades para usar os componentes. Arrastei o TabContainer para a minha tela.
Adicionei o AutoPostBack = true, dei
um nome de tabControle e comecei a
olhar as propriedades. &lt;/p&gt;


&lt;p&gt;Percebi
que existia o OnClienteActiveTabChanged;
isto é, na mudança de aba, eu posso saber qual o id atual e o nome da aba.&lt;/p&gt;


&lt;p&gt;Antes
de entrar nessa etapa, vou criar algumas abas (Referência Code 1.1)&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;cc1:TabContainer ID=&quot;tabControle&quot; runat=&quot;server&quot;                        AutoPostBack=&quot;true&quot;&amp;gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabIndexacao&quot; runat=&quot;server&quot; HeaderText=&quot;Indexação&quot;&amp;gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;                                &amp;lt;table style=&quot;width:100%;&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&amp;gt;&lt;br /&gt;                                    &amp;lt;tr valign=&quot;top&quot;&amp;gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;                                            Prontuário: &amp;lt;asp:TextBox Width=&quot;200px&quot; ID=&quot;txtIndexacaoProntuario&quot; runat=&quot;server&quot;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;                                            Qtde Documentos: 10&lt;br /&gt;                                            &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;                                    &amp;lt;tr valign=&quot;top&quot;&amp;gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;                                            Documentos: &amp;lt;br /&amp;gt;&lt;br /&gt;                                            &amp;lt;asp:ListBox ID=&quot;lstIndexacaoDocumentos&quot; runat=&quot;server&quot; Height=&quot;100&quot; Width=&quot;362px&quot;&amp;gt;&amp;lt;/asp:ListBox&amp;gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;                                            Descrição da ocorrência: &amp;lt;br /&amp;gt;&lt;br /&gt;                                            &amp;lt;asp:ListBox ID=&quot;lstIndexacaoDescricaoOcorrencia&quot; runat=&quot;server&quot; Height=&quot;100&quot; Width=&quot;362&quot;&amp;gt;&amp;lt;/asp:ListBox&amp;gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;                                    &amp;lt;tr&amp;gt;&lt;br /&gt;                                        &amp;lt;td colspan=&quot;2&quot;&amp;gt;Frente (Ctrl+F)&amp;amp;nbsp; Verso (Ctrl+V)&amp;lt;/td&amp;gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;                                    &amp;lt;tr&amp;gt;&lt;br /&gt;                                        &amp;lt;td colspan=&quot;2&quot;&amp;gt;&lt;br /&gt;                                            Imagem&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;                                &amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabControleQualidade&quot; runat=&quot;server&quot; HeaderText=&quot;Controle de Qualidade&quot;&amp;gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;                                teste qualidade&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabDuplicados&quot; runat=&quot;server&quot; HeaderText=&quot;Duplicados&quot;&amp;gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;                                teste duplicados&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabRedigitalizacao&quot; runat=&quot;server&quot; HeaderText=&quot;CPS Redigitalização&quot;&amp;gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;                                teste de redigitalizacao&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code 1.1&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Note
que o que delimita uma aba é um TabPanel com um &amp;lt;Content&amp;gt;. Em cada Content eu posso colocar as tags que quiser, por
exemplo: &amp;lt;asp:TextBox...&amp;gt;, &amp;lt;asp:ListBox...&amp;gt; e outros. Veja o Code 1.2:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;cc1:TabPanel ID=&quot;tabRedigitalizacao&quot; runat=&quot;server&quot; HeaderText=&quot;CPS Redigitalização&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                                teste de redigitalizacao&lt;br /&gt;&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code 1.2&lt;/span&gt;&lt;/p&gt;


&lt;h4&gt;Pegando
o nome e o id da aba em tempo real&lt;/h4&gt;


&lt;p&gt;Para
pegar os dados em tempo real, coloquei no componente principal e não na TabPanel chamado OnClientActiveTabChanged=&quot;getTab&quot;. Esse nome getTab é apenas um método em JavaScript
(Code 1.3).&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;cc1:TabContainer ID=&quot;tabControle&quot; runat=&quot;server&quot;&lt;br /&gt;&lt;br /&gt;                        AutoPostBack=&quot;true&quot; OnClientActiveTabChanged=&quot;getTab&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabIndexacao&quot; runat=&quot;server&quot; HeaderText=&quot;Indexação&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                                &amp;lt;table style=&quot;width:100%;&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;tr valign=&quot;top&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                            Prontuário: &amp;lt;asp:TextBox Width=&quot;200px&quot; ID=&quot;txtIndexacaoProntuario&quot; runat=&quot;server&quot;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                            Qtde Documentos: 10&lt;br /&gt;&lt;br /&gt;                                            &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;tr valign=&quot;top&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                            Documentos: &amp;lt;br /&amp;gt;&lt;br /&gt;&lt;br /&gt;                                            &amp;lt;asp:ListBox ID=&quot;lstIndexacaoDocumentos&quot; runat=&quot;server&quot; Height=&quot;100&quot; Width=&quot;362px&quot;&amp;gt;&amp;lt;/asp:ListBox&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                            Descrição da ocorrência: &amp;lt;br /&amp;gt;&lt;br /&gt;&lt;br /&gt;                                            &amp;lt;asp:ListBox ID=&quot;lstIndexacaoDescricaoOcorrencia&quot; runat=&quot;server&quot; Height=&quot;100&quot; Width=&quot;362&quot;&amp;gt;&amp;lt;/asp:ListBox&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;tr&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;td colspan=&quot;2&quot;&amp;gt;Frente (Ctrl+F)&amp;amp;nbsp; Verso (Ctrl+V)&amp;lt;/td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;tr&amp;gt;&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;td colspan=&quot;2&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                                            Imagem&lt;br /&gt;&lt;br /&gt;                                        &amp;lt;/td&amp;gt;&lt;br /&gt;&lt;br /&gt;                                    &amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;                                &amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabControleQualidade&quot; runat=&quot;server&quot; HeaderText=&quot;Controle de Qualidade&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                                teste qualidade&lt;br /&gt;&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabDuplicados&quot; runat=&quot;server&quot; HeaderText=&quot;Duplicados&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                                teste duplicados&lt;br /&gt;&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;cc1:TabPanel ID=&quot;tabRedigitalizacao&quot; runat=&quot;server&quot; HeaderText=&quot;CPS Redigitalização&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;                            &amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                                teste de redigitalizacao&lt;br /&gt;&lt;br /&gt;                            &amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;&lt;br /&gt;                        &amp;lt;/cc1:TabPanel&amp;gt;&lt;br /&gt;&lt;br /&gt;                    &amp;lt;/cc1:TabContainer&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code 1.3&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;É
bom que você dê uma boa olhada no código, prestando atenção aos detalhes, para entender de acordo com
sua necessidade. &lt;/p&gt;


&lt;p&gt;Em seguida, gerei um método javascript chamado getTab recebendo dois parâmetros de
entrar como se fosse uma função em c#.net. Por exemplo: getTab(sender, args). Veja o Code 1.4:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;    var indexTab = 0;&lt;br /&gt;&lt;br /&gt;    var nomeTab;&lt;br /&gt;&lt;br /&gt;    function getTab(sender, args) {&lt;br /&gt;&lt;br /&gt;        // do what ever i want with lastTab value&lt;br /&gt;&lt;br /&gt;        indexTab = sender.get_activeTabIndex();&lt;br /&gt;&lt;br /&gt;        //var teste = sender.get_activeTabIndex().get_HeaderText();&lt;br /&gt;&lt;br /&gt;        nomeTab = sender.get_activeTab().get_headerText();&lt;br /&gt;&lt;br /&gt;        alert(indexTab + &quot; - &quot; + nomeTab);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Code 1.4&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Declarei
duas variáveis: indexTab e nomeTab. Para pegar o nome do index, escrevi
esse código (sender.get_activeTabIndex();) para pegar o
nome do tab (sender.get_activeTab().get_headerText();) e, no final, gerei
um alert com os nomes das variáveis. Veja o resultado em tela: &lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/14645/tabContainer-3.gif&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Imagem 1.3&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/14645/tabContainer-4.gif&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;span class=&quot;c4&quot;&gt;Imagem 1.4&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Fico
por aqui, espero ter ajudado. Qualquer dúvida ou sugestão, deixem nos comentários. &lt;/p&gt;

</description>
            <author>mauricio.junior@gmail.com (Mauricio Junior)</author>
            <pubDate>Mon, 26 Oct 2009 11:00:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/14645</guid>
        </item>
        <item>
            <title>YUI - por onde começar?</title>
            <link>http://imasters.uol.com.br/artigo/13491/javascript/yui_por_onde_comecar/</link>
            <description>&lt;blockquote&gt;&lt;em&gt;Desenvolvimento, tecnologia e mobilidade são assuntos do &lt;a href=&quot;http://www.intercon2009.com/programacao/&quot; class=&quot;ext&quot;&gt;Ambiente Tecnologia&lt;/a&gt;, um dos três que fazem parte do InterCon 2009. Na área Desenvolvimento &amp;amp; Tecnologia, que tem curadoria de Paulo Michelazzo, da Fábrica Livre, estão em pauta Google Wave, Abilo Dream Extreme, Opera Unite, Metodologias Ágeis e Yahoo! Query Language, palestra que será ministrada por Bruno Zanchet, da Equipe Yahoo! UI. Nesse artigo você confere um pouco dessa ferramenta. Não deixe de fazer sua &lt;a href=&quot;http://www.intercon2009.com/inscricao/&quot; class=&quot;ext&quot;&gt;inscrição&lt;/a&gt; no InterCon e participar de uma discussão aprofundada sobre o framework YUI.&lt;/em&gt;&lt;/blockquote&gt;


&lt;h4&gt;O que é o YUI?&lt;/h4&gt;


&lt;p&gt;YUI é um biblioteca de conjuntos de utilitários e controles construída pelo Yahoo!, escrita em JavaScript, para construção de aplicações web interativas e ricas, através de técnicas como o DOM scripting, DHTML e AJAX. YUI está disponível sob uma licença BSD e é grátis para todas as utilizações.&lt;/p&gt;


&lt;p&gt;Se quiser saber um pouco mais sobre framework YUI, &lt;a href=&quot;http://developer.yahoo.com/yui/&quot; class=&quot;ext&quot;&gt;clique aqui&lt;/a&gt;. &lt;/p&gt;


&lt;h4&gt;&lt;strong&gt;Utilitário Evento: Evento simples de manipulação e de transformação&lt;/strong&gt;&lt;/h4&gt;


&lt;p&gt;Nesse artigo, iremos utilizar a propriedade &quot;YAHOO.util.Event.addListener&quot; que é encontrada nas bibliotecas &quot;build/event/event-min.js&quot; e &quot;build/yuiloader/yuiloader-min.js&quot;&lt;/p&gt;


&lt;p&gt;O YUI Event Utility é um simples e poderoso recurso para a criação de eventos de aplicações no navegador.  Iremos também verificar o evento que poderá ser usado dentro de um manipulador de eventos para proporcionar maior controle. &lt;/p&gt;


&lt;p&gt;Para ilustrar, vamos criar três caixas através de div's e três mensagens de alerta. Quando ocorrer eventos do tipo click, over ou out do mouse, aparecerá uma mensagem. Preste atenção que não será colocado nenhum tipo de código javascript incorporado no HTML.&lt;/p&gt;


&lt;p&gt;Abaixo o código HTML&lt;/p&gt;


&lt;p&gt;Foram criados 3 div's com identificadores, nós iremos criar um arquivo js para referenciarmos os controles do yui com o HTML.  &lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/13491/1.jpg&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Abaixo o script exemplo.js&lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/13491/2.jpg&quot; /&gt;&lt;br /&gt;Estudando melhor o código, dá para ter idéia de como fica mais lógico e entendido trabalhar com o framework YUI.&lt;/p&gt;


&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://conteudo.imasters.uol.com.br/13491/3.jpg&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Esse simples exemplo servirá como parâmetro para desenvolvermos aplicações mais complexas que irei disponibilizar nos próximos artigos:&lt;/p&gt;


&lt;ul&gt;&lt;li&gt;Carrossel de Noticias no YUI&lt;/li&gt;

&lt;li&gt;Calendário de eventos do YUI&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Abraços e até a próxima.&lt;/p&gt;

</description>
            <author>eduardocfarias@gmail.com (Eduardo Farias)</author>
            <pubDate>Wed, 21 Oct 2009 11:00:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/13491</guid>
        </item>
        <item>
            <title>Adicionando bibliotecas javascript ao seu tema ou plugin Wordpress</title>
            <link>http://imasters.uol.com.br/artigo/14448/wordpress/adicionando_bibliotecas_javascript_ao_seu_tema_ou_plugin_wordpress/</link>
            <description>&lt;p&gt;Normalmente quando desenvolvemos um tema
ou um plugin, sentimos a necessidade de utilizar alguma biblioteca em
javascript para facilitar a realização de determinada tarefa. A maneira
mais fácil é, sem dúvida, utilizando a tag '&amp;lt;script&amp;gt;' no corpo do
seu arquivo. Agora imagine que todos os desenvolvedores que utilizam &lt;a href=&quot;http://jquery.com/&quot; class=&quot;ext&quot;&gt;jquery&lt;/a&gt;
resolvam adicionar as chamadas à biblioteca no corpo de seus plugins.
Usuários que possuam vários plugins ativos provavelmente terão uma
baita dor de cabeça, mais cedo ou mais tarde, quando esses plugins
causarem algum conflito.&lt;/p&gt;


&lt;p&gt;Como não podia deixar de ser, o WordPress já tem uma solução para os
nossos problemas. Uma função chamada 'wp_enqueue_scripts', que é
responsável por enfileirar e ordenar a chamada das bibliotecas,
evitando assim a duplicação de arquivos e possibilitando o
carregamento das dependências antes.&lt;/p&gt;


&lt;p&gt;A primeira coisa que você deve fazer é registrar a biblioteca para
que o WordPress saiba que ela existe. Isso deve ser feito utilizando a
seguinte função:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;wp_register_script($handle, $src, $deps = array(), $ver = false)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;O parâmetro obrigatório '$handle' é o identificador único da
biblioteca, o nome pelo qual o WordPress saberá quem é quem no conjunto
de bibliotecas disponível. Em seguida vem o '$src', que informa o
endereço do arquivo, também obrigatório. Caso esse arquivo tenha alguma
dependência, esta deve ser informada em '$deps' no formato de array,
onde cada item do array é uma dependência a ser satisfeita. Essas
dependências são informadas pelo '$handle' das respectivas
dependências. E por último (e menos importante) '$ver' é a versão do
script.&lt;/p&gt;


&lt;p&gt;Não é possível registrar um script que já esteja registrado. Caso
você tente, seu script será ignorado. Mas se for realmente necessário,
você pode remover um script anterior para adicionar o seu. Isso pode
acontecer quando você desenvolve para versões mais antigas do WP. Para
remover um script utilize:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;wp_deregister_script($handle)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Onde '$handle' é o identificador do script que você deseja remover.&lt;/p&gt;


&lt;p&gt;Depois de definidos os scripts e suas dependências, você deve
informar quais scripts devem ser carregados e onde eles serão
carregados. Para a primeira questão, use:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;wp_enqueue_script($handle, $src = false, $deps = array(), $ver = false)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Apesar de todos os parâmetros dessa função, o único obrigatório é o
'$handle' que informa qual o script será carregado. Os outros
parâmetros são exatamente iguais aos parâmetros do wp_register_script e
funcionam da mesma forma. A resposta pra isso é que se o script
definido pelo $handle não estiver registrado, o WordPress utiliza o
atual.&lt;/p&gt;


&lt;p&gt;Pronto! Agora só falta informar onde o script deve ser carregado.
Nos temas, basta colocar a chamada 'wp_queue_script' no template onde a
biblioteca será utilizada e o 'wp_head' faz o resto. Assim, se você
pretende usar a biblioteca &lt;a href=&quot;http://jquery.com/&quot; class=&quot;ext&quot;&gt;jquery&lt;/a&gt; nos resultados das buscas, adicione ao search.php a linha:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?php wp_enqueue_script('jquery'); ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Já na área administrativa você precisa criar uma função que carregue o script e adicioná-la à ação 'init', por exemplo:&lt;/p&gt;


&lt;div class=&quot;codigo&quot;&gt;&lt;pre&gt;&lt;code&gt;function load_scripts()&lt;br /&gt;{&lt;br /&gt;wp_enqueue_script('jquery');&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;add_action('init', 'load_scripts');&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;É isso. Essa explicação também se aplica aos estilos, você só precisa
mudar as funções para 'wp_register_style', 'wp_deregister_style' e
'wp_enqueue_style', respectivamente. E para conferir os scripts e
estilos que o WordPress carrega por padrão, confira o arquivo
script-loader.php na pasta wp-includes.&lt;/p&gt;

</description>
            <author>stallefish@gmail.com (Marcelo Mesquita)</author>
            <pubDate>Wed, 30 Sep 2009 11:00:00 +0100</pubDate>
            <guid>http://imasters.uol.com.br/artigo/14448</guid>
        </item>
    </channel>
</rss>
