Keith Wood. Apresentação de Dave Methvin. Novatec



Documentos relacionados
Keith Wood. Apresentação de Dave Methvin. Novatec

Google Android para Tablets

Desenvolvimento de Grandes Aplicações Web

Crie Seu Próprio Site

Wilson Moraes Góes. Novatec

Desenvolvendo Websites com PHP

Criando Aplicações PHP com. Zend e Dojo. Flávio Gomes da Silva Lisboa. Novatec

David Hows Peter Membrey Eelco Plugge

Jonathan Stark Brian Jepson

marketing ágil Utilização de Metodologias Ágeis em Projetos de Marketing Michelle Accardi-Petersen Novatec

Google Analytics Justin Cutroni

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

JQuery. A Biblioteca do Programador JavaScript. 3ª Edição Revisada e ampliada. Maurício Samy Silva. Novatec

Menus Personalizados

VPAT (Voluntary Product Accessibility Template, Modelo de Acessibilidade de Produto) do eportfolio da Desire2Learn Maio de 2013 Conteúdo

ANEXO 11. Framework é um conjunto de classes que colaboram para realizar uma responsabilidade para um domínio de um subsistema da aplicação.

Tema UFPel 2.0 WP Institucional Guia de Opções de Personalização

Planejando o aplicativo

Ademir C. Gabardo. Novatec

Desenvolvendo plugins WordPress usando Orientação a Objetos

Anote aqui as informações necessárias:

Novatec Editora Ltda

ÍNDICE. 1. Introdução O que é o Sistema Mo Porã Como acessar o Site Mo Porã Cadastro do Sistema Mo Porã...

Engenharia de Software III

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

jquery André Tavares da Silva

Manual do Painel Administrativo

Apostila de. WordPress. Gustavo Teixeira da Cunha Coelho Henrique Gemignani Passos Lima. 13 de maio de Primeira Edição RC2

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

Apostila de. WordPress. Gustavo Teixeira da Cunha Coelho Henrique Gemignani Passos Lima. 11 de maio de Primeira Edição RC1

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

Imóvel Mix SGI. 1. Acesso ao Sistema 2. Aspectos Gerais 3. Configuração da Empresa 4. Cadastro de Usuários

Versão Melhorias Melhorias Versão 6.0.1

Inicialização Rápida do Novell Vibe Mobile

Manual de Utilização do Zimbra

Manual SAGe Versão 1.2 (a partir da versão )

Manual do Visualizador NF e KEY BEST

Versão 7 TraceGP Ágil

Microsoft Access: Criar relatórios para um novo banco de dados. Vitor Valerio de Souza Campos

CA Nimsoft Monitor Snap

CA Nimsoft Monitor Snap

Manual do Ambiente Moodle para Professores

CAPÍTULO 35 Como utilizar os componentes ColdFusion

Desenvolvendo Websites com PHP

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

FAÇA FÁCIL: DRIVER IGS PARA COMUNICAÇÃO DE PROTOCOLOS PROPRIETÁRIOS INTRODUÇÃO

ez Flow Guia do Usuário versão 1.0 experts em Gestão de Conteúdo

Novell Vibe 3.4. Novell. 1º de julho de Inicialização Rápida. Iniciando o Novell Vibe. Conhecendo a interface do Novell Vibe e seus recursos

jquery Cookbook Comunidade de Desenvolvedores jquery

Apostilas OBJETIVA Escrevente Técnico Judiciário TJ Tribunal de Justiça do Estado de São Paulo - Concurso Público Índice

Novatec Editora Ltda. [2014].

Hélio Engholm Jr. Novatec

Como se tornar um desenvolvedor de plug-ins para AutoCAD e Revit

TUTORIAL DO ALUNO. Olá, bem vindo à plataforma de cursos a distância da Uniapae!!!

CONSTRUÇÃO DE BLOG COM O BLOGGER

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela

COMO INSTALAR ZIM 8.50 WINDOWS

1 Sumário O Easy Chat Conceitos Perfil Categoria Instalação O Aplicativo HTML...

Rational Requirements Composer Treinamento aos Analistas de Qualidade e Gestor das Áreas de Projeto

Feature-Driven Development

Consoles do Adobe Experience Manager

TUTORIAL: APRENDENDO A LIDAR COM O AXURE PRO

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

WordPress Institucional UFPel Guia Rápido

CA Nimsoft Monitor. Guia do Probe Resposta por . _response série 1.4

Serviço Técnico de Informática. Curso Básico de PowerPoint

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Conceitos de extensões Joomla!

Manual UNICURITIBA VIRTUAL para Professores

Dicas para usar melhor o Word 2007

PAINEL GERENCIADOR DE S

MANUAL JOOMLA 2.5 PORTAL INTERNET. Ministério do Esporte

DESENVOLVIMENTO WEB DENTRO DOS PARADIGMAS DO HTML5 E CSS3

* Técnicas Avançadas. Desenvolvimento de SOFTWARES. Sistemas de Gerenciamento de Conteúdo com Joomla e Magento

MANUAL DE UTILIZAÇÃO DO MOODLE 2.6

Brandon Rhodes John Goerzen

Microsoft Office PowerPoint 2007

Glossários em Moodle (1.6.5+)

Microsoft Access XP Módulo Um

Guia de Início Rápido

VVS Sistemas (21)

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Scrum em Ação. Gerenciamento e Desenvolvimento Ágil de Projetos de Software. Andrew Pham Phuong-Van Pham. Novatec

Manual Operacional SIGA

Manual do Spectacle. Boudhayan Gupta Boudhayan Gupta Tradução: André Marcelo Alvarenga

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

Plano de Gerenciamento do Projeto

Histórico da Revisão. Versão Descrição Autor. 1.0 Versão Inicial

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS -HTML 5: ARMAZENAMENTO DE DADOS (CLIENTE) Prof. Angelo Augusto Frozza, M.Sc.

2.0.0.X. Storage Client. TecnoSpeed. Tecnologia da Informação. Manual do Storage Client

Microsoft Office Outlook Web Access ABYARAIMOVEIS.COM.BR

MDaemon GroupWare. Versão 1 Manual do Usuário. plugin para o Microsoft Outlook. Trabalhe em Equipe Usando o Outlook e o MDaemon

Moodle - Tutorial para Professores

Guia de Início Rápido

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS IMPRESSÃO. Professor Carlos Muniz

Tutorial WEB CONTENT MANAGEMENT [WCM] Obtenha benefícios a partir das aplicações customizadas da ADMT.

Transcrição:

Keith Wood Apresentação de Dave Methvin Novatec

Original English language edition published by Manning Publications Co., Sound View CT.#3B, Greenwich, CT 06830 USA. Copyright 2013 by Manning Publications. Portuguese-language edition for Brazil copyright 2013 by Novatec Editora. All rights reserved. Edição original em inglês publicada pela Manning Publications Co., Sound View CT.#3B, Greenwich, CT 06830 USA. Copyright 2013 pela Manning Publications. Edição em português para o Brasil copyright 2013 pela Novatec Editora. Todos os direitos reservados. Novatec Editora Ltda. 2013. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia Kinoshita Revisão técnica: Aurelio Jargas Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-383-3 Histórico de impressões: Outubro/2013 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 E-mail: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec VC20130929

capítulo 1 Extensões da jquery Este capítulo inclui: As origens e o propósito da jquery O que você pode estender na jquery Exemplos de extensões existentes Atualmente, a jquery é a biblioteca JavaScript mais amplamente utilizada na web. Ela oferece diversas funções para facilitar a vida do desenvolvedor de front-end, tais como a capacidade de percorrer o DOM (Document Object Model, ou Modelo de Objetos de Documentos) HTML para encontrar os elementos com os quais você deseja trabalhar e aplicar animações a esses elementos. Além do mais, os desenvolvedores de jquery reconhecem que ela não pode (e não deve) fazer tudo e disponibilizaram pontos de extensão que permitem a integração de funcionalidades adicionais ao processamento normal da jquery. Essa visão contribuiu para o aumento de sua popularidade. Neste livro, explicarei como você pode estender vários aspectos da jquery para permitir maior reuso e facilitar a manutenção de seu código. Juntamente com o plugin padrão que opera sobre uma coleção de elementos em uma página web, você poderá criar seletores personalizados, funções utilitárias, animações personalizadas, processadores sofisticados de Ajax, eventos personalizados e regras de validação. Incluo também testes, empacotamento e documentação de seu código para garantir que outras pessoas possam tirar o máximo proveito dele também. 25

26 Estendendo a jquery 1.1 História da jquery O site da jquery a define como uma biblioteca JavaScript pequena, rápida e cheia de recursos. Ela torna muito mais simples tarefas como percorrer e manipular documentos HTML, tratamento de eventos, animações e Ajax, por meio de uma API fácil de ser usada, e que funciona em uma ampla gama de navegadores (http://jquery.com). A jquery é uma biblioteca de funções JavaScript que permite acessar facilmente o DOM HTML e inspecioná-lo ou atualizá-lo, possibilitando oferecer páginas web e experiências mais dinâmicas, em consonância com o paradigma da Web 2.0. Seus principais recursos são: Seleção de elementos usando uma sintaxe semelhante à do CSS, com extensões. Capacidade de percorrer elementos. Manipulação de elementos, incluindo remoção, atualização de conteúdo e alteração de atributos. Tratamento de eventos, incluindo eventos personalizados. Efeitos e animações. Suporte a Ajax. Um framework para estender sua funcionalidade (o assunto deste livro). Várias funções utilitárias. Suporte cross-browser, incluindo ocultar as diferenças entre os navegadores. A jquery é uma biblioteca de código aberto, disponível gratuitamente. Está atualmente licenciada sob a licença MIT (http://jquery.org/license/). Versões anteriores também estavam licenciadas sob a GNU General Public License, Versão 2 (GPLv2).

Capítulo 1 Extensões da jquery 27 1.1.1 Origens A jquery foi inicialmente desenvolvida por John Resig e foi anunciada em janeiro de 2006, no BarCamp NYC 1. Ele havia se deparado com o código do Behaviour, escrito por Ben Nolan, e havia percebido o potencial de suas ideias usar seletores com estilo pseudo-css para associar funções JavaScript a vários elementos do DOM. Mas John não estava satisfeito com sua verbosidade e a falta de seletores hierárquicos 2. A sintaxe sugerida por ele e a implementação subsequente se transformaram na base para a jquery. A listagem 1.1 mostra o código do Behaviour para associar um event handler para clique a todos os elementos li em um elemento com ID igual a example; o event handler para clique remove o item clicado. A listagem 1.2 mostra o atualmente familiar código jquery correspondente. Listagem 1.1 Amostra do código do Behaviour Behaviour.register({ '#example li': function(e) { e.onclick = function() { this.parentnode.removechild(this); } } }); Listagem 1.2 Código jquery equivalente $('#example li').bind('click', function() { $(this).remove(); }); Por que o nome jquery? Originalmente, a biblioteca se chamava jselect para refletir sua habilidade de selecionar elementos em uma página web. Porém quando John deu uma verificada nesse nome na Internet, descobriu que ele já estava sendo utilizado e alterou-o para jquery 3. 1 John Resig, BarCampNYC Wrap-up (Balanço do BarCampNYC), http://ejohn.org/blog/ barcampnyc-wrap-up/. 2 John Resig, Selectors in Javascript (Seletores em Javascript), http://ejohn.org/blog/selectorsin-javascript/. 3 Comentários de John Resig, BarCampNYC Wrap-up (Balanço do BarCampNYC), http://ejohn.org/blog/barcampnyc-wrap-up/.

28 Estendendo a jquery 1.1.2 Evolução Desde seu anúncio inicial, a jquery passou por inúmeras versões incrementais, conforme mostrado na tabela 1.1 (nem todas as versões estão sendo mostradas). Ao longo dos anos, ela cresceu enormemente no que diz respeito às funcionalidades e ao tamanho. Tabela 1.1 Versões de jquery (nem todas estão sendo mostradas) Versão Data do código Tamanho Observações 1.0 26 de agosto de 2006 44.3 KB Primeira versão estável 1.0.4 12 de dezembro de 2006 52.2 KB Última correção de bugs na 1.0 1.1 14 de janeiro de 2007 55.6 KB Melhorias no desempenho dos seletores 1.1.4 23 de agosto de 2007 65.6 KB jquery pode ser renomeada 1.2 10 de setembro de 2007 77.4 KB 1.2.6 26 de maio de 2008 97.8 KB 1.3 13 de janeiro de 2009 114 KB 1.3.2 19 de fevereiro de 2009 117 KB Engine de seleção Sizzle introduzido no núcleo (core), live events e inspeção de eventos 1.4 13 de janeiro de 2010 154 KB Melhoria no desempenho e no Ajax 1.4.1 25 de janeiro de 2010 156 KB height() e width() adicionados; parsejson() adicionado 1.4.2 13 de fevereiro de 2010 160 KB delegate() adicionado, melhorias no desempenho 1.4.3 14 de outubro de 2010 176 KB Módulo CSS reescrito, manipulação de metadata 1.4.4 11 de novembro de 2010 178 KB 1.5 31 de janeiro de 2011 207 KB Gerenciamento de callback disponibilizado, reescrita do módulo Ajax, desempenho em travessia 1.5.2 31 de março de 2011 214 KB 1.6 2 de maio de 2011 227 KB Melhorias significativas no desempenho das funções attr() e val(), prop() adicionado 1.6.4 12 de setembro de 2011 232 KB 1.7 3 de novembro de 2011 243 KB Novas APIs de eventos: on() e off(), desempenho em delegação de eventos 1.7.2 21 de março de 2012 246 KB

Capítulo 1 Extensões da jquery 29 Versão Data do código Tamanho Observações 1.8.0 9 de agosto de 2012 253 KB 1.8.3 13 de novembro de 2012 261 KB Sizzle reescrito, reinvenção de animações, mais modularidade 1.9.0 14 de janeiro de 2013 261 KB Reestruturação para jquery 2.0 1.9.1 4 de fevereiro de 2013 262 KB Correções de bugs e de regressão 2.0.0 18 de abril de 2013 234 KB Suporte para IE 6-8 removido 1.10.0 24 de maio de 2013 267 KB Sincronização de versão/recurso com a linha 2.x 1.10.2 3 de julho de 2013 266 KB 2.0.3 3 de julho de 2013 236 KB Embora o tamanho da biblioteca jquery tenha aumentado substancialmente, quando você minimiza o código (removendo comentários e espaços em branco desnecessários), ele é reduzido a aproximadamente um terço de seu tamanho original (a versão mais recente tem somente 91 KB). Quando essa versão minificada é obtida da Internet em um formato gzip, ela é reduzida novamente a cerca de um terço, resultando em um custo de download de cerca de 32 KB para a versão mais recente. Ao usar um dos CDNs (Content Delivery Networks, ou Redes de Fornecimento de Conteúdo) disponíveis, o arquivo já poderá estar em cache no cliente, fazendo com que o download não seja sequer necessário. Usando CDNs Para fazer o download da jquery de um dos CDNs que a hospedam, inclua uma das tags script mostradas a seguir. Pode ser que você precise alterar a versão especificada da jquery, de modo a atender a seus requisitos. Usando o CDN de jquery disponibilizado pela MediaTemple <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> Você pode incluir o plugin jquery Migration desse site também, para assistência na transição de versões mais antigas de jquery para jquery 1.9 ou mais recente. <script src="http://code.jquery.com/jquery-migrate-1.1.1.min.js"></script>

30 Estendendo a jquery Usando o CDN do Google a <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> </script> Todas as versões de jquery estão disponíveis no CDN do Google, mas a jquery não controla esse CDN, e poderá haver um atraso entre o lançamento de uma versão de jquery e sua disponibilidade nesse local. Usando o CDN da Microsoft b <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.1.min.js"></script> Todas as versões de jquery estão disponíveis no CDN da Microsoft, mas a jquery não controla esse CDN, e poderá haver um atraso entre o lançamento de uma versão de jquery e sua disponibilidade nesse local. a. Google Developers, Google Hosted Libraries a.developer s Guide (Bibliotecas hospedadas no Google Guia do Desenvolvedor), https://developers.google.com/ speed/libraries/devguide#jquery. b. ASP.NET, Microsoft Ajax Content Delivery Network (Rede de Fornecimento de Conteúdo do Microsoft Ajax), http://www.asp.net/ajaxlibrary/cdn.ashx. Atualmente, a jquery inclui o engine de seleção Sizzle, que provê a capacidade fundamental de encontrar no DOM os elementos sobre os quais você deseja operar. Sempre que possível, o Sizzle delega esses seletores para a implementação do navegador subjacente, mas recorre ao JavaScript quando necessário para garantir uma experiência comum entre todos os principais navegadores. 1.1.3 Nos dias de hoje A jquery tornou-se a biblioteca JavaScript mais popular da Internet e vem sendo adotada por muitas organizações e indivíduos para uso em seus websites. Ela tem o suporte formal da Microsoft e acompanha o pacote Visual Studio. O BuiltWith informa que mais de 60% dos 10 mil sites principais usam jquery, e o mesmo ocorre com mais de 50% de 1 milhão dos sites principais 4. O W3Techs informa que a jquery é usada em 55% de todos os sites e em 90% daqueles que usam qualquer biblioteca JavaScript. 5 4 BuiltWith, jquery Usage Statistics (Estatísticas sobre uso da jquery), http://trends. builtwith.com/javascript/jquery. 5 W3Techs, Usage of JavaScript libraries for websites (Uso de bibliotecas JavaScript para websites), http://w3techs.com/technologies/overview/javascript_library/all.

Capítulo 1 Extensões da jquery 31 A comunidade de desenvolvedores de plugins é próspera, e a maioria disponibiliza seus códigos gratuitamente, dentro do espírito da biblioteca jquery subjacente. Você pode procurar os módulos apropriados na web ou usar o repositório oficial de plugins jquery, reorganizado recentemente (http://plugins.jquery.com). Alguns plugins são ótimos, com código robusto, boa documentação e exemplos. Outros não são tão bons assim são difíceis de ser usados, contêm bugs e/ou documentação precária. Após ter lido este livro e aplicado seus princípios, seus plugins deverão se enquadrar na primeira categoria. Você também poderá encontrar muitas atividades em andamento nos fóruns de jquery (https://forum.jquery.com), com mais de 250 mil respostas para mais de 110 mil perguntas. Nesses fóruns, você encontrará seções especiais, dedicadas ao uso e ao desenvolvimento de plugins jquery. O desenvolvimento atual da jquery atualmente é gerenciado pela jquery Foundation (http://jquery.org). Ela foi constituída em setembro de 2009 para cuidar de todos os projetos jquery, incluindo jquery Core, jquery UI, jquery Mobile, Sizzle e QUnit. Contribuições e doações feitas pela comunidade jquery são responsáveis por prover a base financeira para esse suporte. 1.2 Estendendo a jquery Se a jquery oferece tantas funcionalidades, por que você iria querer estendê-la? Para manter o tamanho do código da jquery administrável, somente as funções que são genéricas e largamente usadas estão incluídas no código do núcleo (embora haja discussões sobre o que é usado e útil). Acesso e modificação básicos de elementos, tratamento de eventos, animação e tratamento de Ajax são disponibilizados como funcionalidades necessárias à maioria dos usuários, enquanto capacidades mais especializadas são deixadas para que outros as incluam. Felizmente, a equipe da jquery reconhece que o núcleo da jquery não pode fazer de tudo e, sendo assim, eles disponibilizaram diversos pontos de integração a partir dos quais outras pessoas podem estender as funcionalidades da jquery, ao mesmo tempo que se beneficiam da infraestrutura e das capacidades existentes.

32 Estendendo a jquery Além de estender a jquery para prover funcionalidades adicionais, empacotar sua extensão na forma de plugin permite que você reutilize facilmente essas capacidades em outras páginas web. Como resultado, você terá somente uma cópia do código para ser mantida, e qualquer melhoria será imediatamente aplicada, onde quer que ela seja usada. Você poderá testar o código de seu plugin isoladamente, em circunstâncias controladas, para garantir que ele funcionará conforme esperado. 1.2.1 O que você pode estender? Assim como a biblioteca principal disponibiliza diversos recursos, você encontrará inúmeras maneiras de estender a jquery. As opções abordadas neste livro estão listadas nas seções a seguir. Seletores e filtros Seletores e filtros jquery permitem identificar e reunir os elementos da página web sobre a qual você deseja operar. Embora seletores padrões com base em nome de nó, ID e classe estejam incluídos na jquery, há espaço para a adição de seletores de pseudoclasse (estendendo as pseudoclasses definidas no CSS), que permitem filtrar uma seleção previamente efetuada de modo consistente e sucinto. Você também pode adicionar filtros de conjunto que têm conhecimento de toda a coleção de elementos previamente selecionados e a posição de cada um nessa lista. O capítulo 3 explica como criar esses seletores. Ao criar um seletor personalizado, o processo de seleção pode ser consolidado em um só local, facilitando o reúso desse código em outros lugares, o que garante uma implementação consistente em todos os seus projetos. Também facilita a manutenção do seletor e a aplicação imediata de qualquer correção de bugs ou melhorias a todas as instâncias. Plugins de coleção Plugins de coleção são funções que podem ser aplicadas a coleções de elementos, obtidos por um seletor. Essas funções são aquelas em que a maioria das pessoas pensa quando o termo plugin jquery é usado, e elas constituem a maior parte dos plugins de terceiro disponíveis. As novas

Capítulo 1 Extensões da jquery 33 capacidades fornecidas por um plugin de coleção estão limitadas somente pela sua imaginação e podem variar de fazer alterações simples de atributos até provocar mudanças comportamentais ou monitorar eventos sobre esses elementos, ou ainda substituir totalmente o componente original por uma implementação alternativa. O capítulo 4 apresenta uma série de diretrizes a serem usadas na criação de seu plugin, e o capítulo 5 descreve o framework de plugin que utilizo para meus plugins e como ele implementa essas diretrizes. As diretrizes encapsulam abordagens referentes às melhores práticas para escrita de seus plugins, contribuindo para que ele se integre bem à jquery, ao mesmo tempo que reduz a possibilidade de um código externo provocar interferências ou que ele venha a afetar outros códigos. Um componente fundamental na criação de seu plugin consiste em testar sua funcionalidade, e usar uma ferramenta para testes de unidade permite executar testes em seu código, rápida e consistentemente, provando que ele funciona conforme esperado. Uma vez que seu código esteja pronto para ser liberado, é necessário que ele seja empacotado para distribuição, para que outras pessoas possam obtê-lo facilmente e integrá-lo em seus próprios projetos. Você deve também disponibilizar uma página web que demonstre os recursos de seu plugin para permitir que usuários em potencial vejam como ele funciona e o que ele pode fazer. E você deve disponibilizar documentação para todos os aspectos de seu plugin para permitir que outras pessoas tirem o máximo proveito dele. O capítulo 7 discute esses aspectos do desenvolvimento do plugin. Plugins de função Plugins de função são funções utilitárias que não operam diretamente sobre coleções de elementos. Eles oferecem capacidades adicionais ao framework da jquery e, em geral, usam a própria funcionalidade da jquery para executar suas tarefas. O capítulo 6 fornece detalhes sobre como adicionar essas funções utilitárias. Exemplos desses plugins de função incluem suporte para envio de mensagens de depuração a um console para monitorar a execução do código ou obter e configurar valores de cookies para uma página web. Ao

34 Estendendo a jquery tornar essas habilidades disponíveis na forma de um plugin jquery, você proporcionará ao usuário uma maneira familiar de invocar o código e reduzirá possíveis interferências de códigos externos. Várias das diretrizes mencionadas anteriormente também se aplicam a esses tipos de plugin, assim como os passos referentes a testes, empacotamento, demonstração e documentação do plugin. Widgets da jquery UI A jquery UI é um conjunto organizado de interações com a interface de usuário, efeitos, widgets e temas, desenvolvidos sobre a biblioteca JavaScript jquery (http://jqueryui.com/). Ela define um framework para widgets que permite criar plugins que funcionam de maneira consistente e que podem se beneficiar com os vários temas disponíveis para estilizar a UI. O capítulo 8 descreve o framework para widgets e como usá-lo para criar seu próprio componente. O framework para widgets da jquery UI também implementa as diretrizes para plugin, apresentadas no capítulo 4, e provê funcionalidades comuns a todos os widgets da jquery UI de maneira consistente. Ao basear seu plugin nesse framework, você terá esses recursos incluídos automaticamente e poderá se concentrar na disponibilização da funcionalidade exclusiva de seu widget. Se você aplicar as classes definidas no estilizador Theme- Roller a seu novo widget, ele estará visualmente integrado, de imediato, a outros componentes da jquery UI e terá a aparência modificada, caso um novo tema seja aplicado. Vários dos widgets da jquery UI dependem de ações relacionadas a arrastar o mouse para implementação de suas funcionalidades, e a equipe da jquery UI reconhece a importância dessa interação. Ao fazer seu widget estender o módulo Mouse da jquery UI, em vez do Widget básico, você terá suporte para operações de arrastar, de maneira completa, com condições personalizáveis para iniciar a operação de arrastar, e poderá, novamente, focar na implementação da funcionalidade de seu próprio widget. O capítulo 9 descreve como usar o módulo Mouse para criar um widget que dependa do uso de mouse.

Capítulo 1 Extensões da jquery 35 Efeitos da jquery UI A jquery UI também disponibiliza um conjunto de efeitos que podem ser aplicados a elementos que estão em sua página. Você pode usar muitos deles para mostrar ou ocultar um elemento, como, por exemplo, blind, clip, fold e slide. Alguns fazem sua atenção ser voltada para um elemento, como highlight e pulsate. Você pode definir seu próprio efeito e aplicá-lo aos elementos, como faria com os efeitos padrões. O capítulo 10 mostra como criar novos efeitos de UI. Propriedades de animação A jquery disponibiliza um framework de animação que pode ser aplicado a qualquer atributo de estilo de elemento que tenha um valor numérico simples. Ele permite que você varie esse atributo de um valor a outro, controlando a duração da mudança e os passos incrementais nesse intervalo. Porém, se o valor que você deseja animar não corresponde a um valor numérico simples, será necessário que você mesmo implemente a funcionalidade. Por exemplo, a jquery UI disponibiliza um módulo que permite fazer a animação de uma cor para outra. No capítulo 11, criaremos um animador para um valor complexo de atributo. Processamento de Ajax A funcionalidade de Ajax da jquery é uma de suas vantagens mais evidentes, tornando incrivelmente fácil a tarefa de carregar dados remotos e, em seguida, processá-los. Como parte da chamada Ajax, você poderá identificar que tipo de dado é esperado pelo callback bem-sucedido: texto simples, HTML, XML, JSON. Um processo de conversão ocorrerá nos bastidores para transformar a cadeia de bytes recebida pela chamada remota em um formato apropriado. Você poderá adicionar suas próprias transformações para possibilitar a geração de formatos especializados diretamente, identificando o tipo que você quer que seja retornado. O capítulo 12 contém detalhes sobre como estender o processamento de Ajax para tratar um formato comum de arquivo diretamente.

36 Estendendo a jquery Tratamento de eventos As capacidades de tratamento de eventos da jquery permitem associar vários event handlers aos elementos para que respondam às interações com o usuário, a eventos de sistema e a triggers personalizados. A jquery provê vários hooks (ganchos) que permitem criar suas próprias definições de eventos e pontos de triggers, resultando em um código que será consistente em relação às funcionalidades existentes. O capítulo 13 descreve a implementação de um novo evento para simplificar as interações com o mouse. Regras de validação O plugin Validation, escrito por Jörn Zaefferer, é amplamente utilizado para validar entradas de usuário do lado do cliente, antes de submeter os valores preenchidos ao servidor. Embora o plugin não faça parte da funcionalidade do núcleo da jquery, ele também disponibiliza pontos de extensão que permitem criar regras personalizadas de validação e aplicá- -las como parte do processamento existente. O capítulo 14 demonstra como criar suas próprias regras de validação e integrá-las ao comportamento já existente. 1.3 Exemplos de extensões Centenas de plugins jquery estão disponíveis na web para melhorar a experiência em suas páginas web. Os números são um testemunho do poder e da simplicidade da própria jquery, e da visão dos desenvolvedores em prover pontos de extensão que permitam que ela seja incrementada. Não é possível descrever todos esses plugins neste livro, mas as seções a seguir oferecem uma amostra resumida para mostrar o alcance das possibilidades. 1.3.1 jquery UI O projeto jquery UI (http://jqueryui.com/) foi desenvolvido sobre a biblioteca jquery principal, na forma de uma coleção de plugins. Ela inclui diversos widgets, incluindo Tabs (Abas), Datepicker (Seletor de Datas) e

Capítulo 1 Extensões da jquery 37 Dialog (Diálogo) veja a figura 1.1, bem como vários comportamentos de UI, como Draggable (Arrastar) e Droppable (Soltar). Além disso, ela provê várias animações a serem usadas para mostrar ou ocultar elementos, ou para chamar a atenção para eles. Figura 1.1 Amostra de widgets e estilos da jquery UI. A jquery UI usa seu próprio framework de widgets para oferecer uma base consistente para seus componentes de UI. O framework administra a criação e destruição de widgets, a manutenção do estado e as interações com o mouse. Os capítulos 8 e 9 analisam o framework para widgets e descrevem o processo de criar seus próprios widgets com base nele.

38 Estendendo a jquery O projeto faz a integração de seus componentes e comportamentos com a ferramenta ThemeRoller (http://jqueryui.com/themeroller/) para simplificar a geração de um tema consistente que defina a aparência de todos os seus widgets. Inúmeras demonstrações e uma documentação abrangente acompanham a jquery UI, permitindo que você tire o máximo proveito de suas capacidades. Em virtude do design modular do pacote, você pode criar um download personalizado que inclua somente as partes que julgar necessárias. Opcionalmente, o pacote pode ser carregado a partir de um dos CDNs nos quais ele está hospedado, juntamente com os temas que são padrões. 1.3.2 Validation Conforme mencionado anteriormente, o plugin Validation 6 de Jörn Zaefferer é amplamente utilizado para prover validação do lado do cliente (ver figura 1.2). Ele simplifica a atribuição de regras de validação aos elementos e administra seus estados e as mensagens de erro associadas. Seu objetivo é não ser obstrutivo gerando um erro somente quando o formulário for submetido ou quando um campo for modificado. As regras podem ser especificadas inline (em linha) na forma de atributos para cada campo, no código para elementos nomeados, ou por meio de uma função associada a uma seleção jquery. Várias regras de validação prontas estão disponíveis, incluindo required, digits, date, email e url. Algumas regras de validação podem receber parâmetros adicionais que modificam seu comportamento, como, por exemplo, minlength e maxlength. Pode-se fazer com que as regras sejam dependentes do estado de outros elementos da página. Esse plugin disponibiliza seu próprio ponto de extensão, permitindo definir regras personalizadas de validação que podem, então, ser aplicadas aos elementos especificados, da mesma maneira que as regras já existentes. O capítulo 14 descreve como criar essas regras. 6 jquery Validation Plugin, http://jqueryvalidation.org/.

Capítulo 1 Extensões da jquery 39 Figura 1.2 O plugin Validation em ação, mostrando diversas mensagens de erro (em itálico), resultantes de problemas na validação, juntamente com os campos afetados. Cada regra possui uma mensagem de erro associada para ser mostrada ao usuário. Essas mensagens podem ser sobrescritas individualmente, ou podem ser traduzidas para um dos mais de 30 idiomas diferentes incluídos no pacote. Você pode controlar o posicionamento e o agrupamento de mensagens de erro por meio de opções fornecidas à chamada de inicialização. O plugin possui extensa documentação e inclui exemplos que auxiliam você quanto à utilização. De modo geral, é um plugin bem escrito e bem documentado, além de ser bastante útil. 1.3.3 Controle deslizante gráfico Os plugins podem deixar sua página web mais sofisticada ao apresentar o conteúdo de maneira diferente e mais atraente. Por exemplo, o plugin Nivo Slider (http://nivo.dev7studios.com/) converte uma lista simples de imagens em um slideshow com várias transições entre as figuras.

40 Estendendo a jquery A apresentação atraente mostrada na figura 1.3 é resultante da aplicação do Nivo Slider ao HTML da listagem 1.3. Embora essa seja a apresentação padrão, ela é fácil de ser gerada e tem uma boa aparência. Conforme seria de esperar, você encontrará inúmeras opções para personalizar a aparência e o comportamento do plugin. Figura 1.3 O Nivo Slider em ação. Listagem 1.3 Marcações para um controle deslizante gráfico <div class="slider-wrapper"> <div id="slider" class="nivoslider"> <img src="images/slide1.jpg" alt="" /> <img src="images/slide2.jpg" alt="" title="you can add captions too..." /> <img src="images/slide3.jpg" alt="" /> </div> </div> 1.3.4 Integração do Google Maps Alguns plugins encapsulam APIs existentes para torná-las mais fáceis de ser acessadas ou para ocultar qualquer diferença entre navegadores distintos. O plugin gmap (http://gmap.nurtext.de/) é um desses exemplos, e permite integrar um mapa do Google a sua página web. Embora você possa usar a

Capítulo 1 Extensões da jquery 41 própria API do Google Maps em JavaScript, plugins como esse encapsulam essa funcionalidade para fornecer uma interface mais simples. O mapa mostrado na figura 1.4 é resultante do código contido na listagem a seguir, demonstrando como o plugin é fácil de ser utilizado. Listagem 1.4 Adicionando um mapa do Google $('#map').gmap({zoom: 4, markers: [{address: 'Brisbane, Australia', html: 'Brisbane, Australia', popup: true}] }); Figura 1.4 Integração do Google Map com o plugin gmap. 1.3.5 Cookies O plugin Cookie (https://github.com/carhartl/jquery-cookie) para jquery facilita a interação com os cookies associados a uma página web. Esse plugin difere dos exemplos anteriores quanto à funcionalidade, pois ele não se aplica a elementos específicos da página web. Em vez disso, o plugin provê uma função utilitária que permite trabalhar com cookies para toda a página.

42 Estendendo a jquery Criar um cookie é tão simples quanto fornecer seu nome e seu valor: $.cookie('introshown', true); Você pode fornecer parâmetros adicionais para personalizar o cookie definindo o tempo para ele expirar (por padrão, os cookies expiram ao final da sessão corrente), o domínio e o caminho (path) aos quais ele se aplica, se o cookie exige transmissão segura e se o valor do cookie será codificado. $.cookie('introshown', true, {expires: 30, path: '/'}); Obter o valor de um cookie é somente uma questão de fornecer seu nome. Se não houver nenhum cookie com o nome especificado, um valor null será retornado. var introshown = $.cookie('introshown'); Apague um cookie definindo seu valor com null. $.cookie('introshown', null); O plugin Cookie será descrito em detalhes no capítulo 6. 1.3.6 Animação de cores A jquery básica inclui capacidades de animação para atributos de elementos que correspondam a valores numéricos simples. Qualquer outro formato para um atributo exige um handler especial para animá-lo corretamente. Como parte do módulo Effects do projeto jquery UI (http:// jqueryui.com), você pode animar cores (http://jqueryui.com/animate/) que podem ser definidas como um valor hexadecimal (#DDFFE8 ou #DFE), um trio RGB [rgb(221, 255, 232) ou rgb(86%, 100%, 91%)] ou um nome de cor (lime). Após converter os vários formatos de cor para um formato comum, cada componente da cor (vermelho/verde/azul) será animado separadamente, de seu valor inicial até seu valor final. Ao disponibilizar esse recurso na forma de um plugin para animação, você pode utilizar a funcionalidade padrão da jquery para aplicá-lo: $('#mydiv').animate({backgroundcolor: '#DDFFE8'}); $('#mydiv').animate({width: 200, backgroundcolor: '#DFE'}); O capítulo 11 descreve os plugins de animação.

Capítulo 1 Extensões da jquery 43 O que você deve saber A jquery é a biblioteca JavaScript mais amplamente utilizada na web. A jquery disponibiliza funcionalidades básicas e comumente usadas, porém está projetada para ser estendida de várias maneiras diferentes. Há uma comunidade próspera de plugins de terceiros que se desenvolveu em torno da jquery. As capacidades de um plugin estão limitadas somente pela sua imaginação. 1.4 Resumo A jquery evoluiu até se tornar a biblioteca JavaScript mais amplamente utilizada na web atualmente. Embora tenha várias funcionalidades incluídas, ela se concentra na disponibilização da infraestrutura básica e nos recursos usados por diversas pessoas em vários sites diferentes. Reconhecendo que não é possível oferecer tudo a todos, a jquery inclui inúmeros pontos de extensão a partir dos quais outras pessoas podem estender seu comportamento. Você pode acrescentar funcionalidades a praticamente todas as partes da jquery, da definição de seletores personalizados até a animação de valores não numéricos de atributos ou a geração de novos eventos, ou ainda a criação de componentes sofisticados de UI. O único limite é a sua imaginação. Criar um plugin para seu código permite que você o reutilize mais facilmente em várias de suas páginas web. Isso reduz o custo de testes e de manutenção, pois você terá somente uma única cópia do script. No próximo capítulo, você verá como é fácil estender a jquery por meio da criação de um plugin simples, antes de mergulhar mais a fundo nas melhores práticas para o design de plugins mais complexos.