O uso de template engines no desenvolvimento de aplicações web permite manipular e organizar conteúdo HTML de forma dinâmica. Neste artigo, vou apresentar um framework fortemente utilizado em projetos Node.js, chamado de Jade.
O Jade é muito popular em projetos Node.js, mas possui também suporte a outras linguagens de programação. Ele permite construir conteúdo dinâmico de forma clean e enxuta, e a única regra necessária em seu uso é respeitar o espaçamento entre as tags do HTML, separando cada tag por tabulação ou por espaços. Não, o Jade não compila uma página que utiliza os dois tipos de espaçamentos, ou é um ou é outro.
O Jade foi inspirado no template engine Haml, que é um framework famoso na comunidade Ruby. A diferença é que o Jade surgiu com algumas melhorias, como a exclusão de alguns caracteres especiais utilizados pelo Haml e a eliminação do uso do caractere %, que representa uma tag do HTML no Haml.
Abaixo segue uma pequena comparação entre HTML vs Haml vs Jade.
HTML
<html> <head> <title>HTML :(</title> </head> <body> <h1>HTML :(</h1> </body> </html>
Haml
%html %head %title Haml :| %body %h1 Haml :|
Jade
doctype html html head title Jade :) body h1 Jade :)
Uma técnica muito utilizada com Jade é a separação/inclusão de partials, em que na prática você cria pedaços reaproveitáveis de template e em seguida adiciona-os em uma página principal. Isso é muito utilizado quando se precisa incluir conteúdo dinâmico. Para exemplificar esse conceito, crie o arquivo index.jade
; com o código a seguir:
doctype html html head title Meu site body h1 Meu site
Em seguida, crie dois novos templates – o primeiro é o arquivo _header.jade
e o segundo é o_footer.jade
, veja abaixo:
_header.jade
header h1 Olá seja bem-vindo!
_footer.jade
footer p Gostou do meu site?
Para incluir esses partials dentro da página principal index.jade
basta utilizar a função != partial("nome_do_partial").
Veja abaixo como fica:
doctype html html head title Meu site body != partial("_header") != partial("_footer")
Dessa forma, é possível fragmentar uma página permitindo organizar seu layout em componentes.
Outra técnica que é bastante útil é a inclusão de comandos de linguagem server-side dentro do layout, ou seja, o uso de comandos if, else, for
dentro da página, fazendo com que o Jade processe-os em tempo de compilação dos templates.
Volte para página index.jade
e faça as seguintes alterações:
doctype html html head title Meu site body != partial("_header") section if (Date.now.getHour() > 8 && Date.now.getHour() <= 18) p Bom dia! else p Boa noite! != partial("_footer")
Para finalizar, caso você precise executar um código in-line do JavaScript ou CSS, utilize as tagsscript. ou style. (isso mesmo! Tem um ponto final!), lembrando que esse ponto deve ser usado somente se for declarar um código in-line. Se for carregar um script ou css externo, você não precisa usar este ponto. Veja o exemplo abaixo:
doctype html html head title Página principal link(href="main.css", rel="stylesheet") style. body { background: #999; color: #FFF; } script(src="main.js", type="text/javascript") script. (function() { alert("Seja bem vindo!"); })(); body != partial("_header") section if (Date.now.getHour() > 8 && Date.now.getHour() <= 18) p Bom dia! else p Boa noite! != partial("_footer")
Esse foi alguns exemplos básicos do que se pode fazer usando o Jade. Para conhecer a fundo, recomendo que acesse seu site oficial, para saber como usá-lo em um framework web Node.js, além de aprender outras técnicas mais avançadas.
Até a próxima!