HamlFilter
Filtr pro šablony založený na syntaxi Haml, doplněný o spolupráci s Latte.

| Verze | 1.3 |
|---|---|
| Repozitář | https://github.com/Mikulas/HamlFilter |
| Autor | Mikuláš Dítě |
| Licence | Original BSD |
| Požadavky | PHP 5.3+, Nette 2.0 beta |
Instalace
Triviální. Stačí do společného předka presenterů aplikace, tedy
typicky do třídy BasePresenter, přidat metodu
public function templatePrepareFilters($template)
{
$template->registerFilter(new Nette\Templating\Filters\Haml);
$template->registerFilter(new Nette\Latte\Engine);
}
Použití
Skoro jako originální Haml, s hlavní (a možná jedinou) změnou: atributy se zapisují pomocí hranatých závorek, protože curly už má zabrané Latte.
Níže následuje ukázka syntaxe. Pro jakékoliv další nejasti doporučuji původní Haml tutoriály, ale něco se v této implementaci může zpracovávat odlišně.
Zápis elementů
%h1 |
<h1></h1> |
%h1.clear |
<h1 class="clear"></h1> |
.footer |
<div class="footer"></div> |
#header |
<div id="header"></div> |
%span#new.red |
<span id="new" class="red"></span> |
Atributy
Není potřeba escapovat vůbec nic kromě čárky.
%div [n:foreach => $fs as $flash] |
<div n:foreach="$fs as $flash></div> |
%div [quoted => "čárka, ...", attr => další] |
<div quoted="čárka, ..."
attr="další"></div> |
Obsah
Zanoření elemetu se určuje podle jeho odsazení. Text elementu může být buď hned za ním, nebo odsazený na dalším řádku.
.container
#header hodnota
#footer
hodnota
<div class="container">
<div id="header">hodnota</div>
<div id="footer">hodnota</div>
</div>
Odsazování
Volné odsazování je nejsilnější stránka HamlFilteru. Protože některá Latte makra tvoří vlastní logické bloky (iterátory, podmínky, …), je tu možnost odsazovat libovolně. Jediné pravidlo je „Co má větší odsazení, bude pod nejbližším nižším netextovým tagem“. Zní to složitě, ale je to naprosto intuitivní.
Escapování
%h1 |
<h1></h1> |
\%h1 |
%h1 |
\text |
\text |
Zkratky pro Latte
%title = $title |
<title>{$title}</title> |
%footer = date('Y') |
<footer>{=date('Y')}</footer> |
Také fungují zkratky pro FormMacros od Honzy Marka
%td = input tag |
<td>{input tag}</td> |
Výstup
HamlFilter vrací všechno na stejném řádku, jako v originální šabloně. Díky tomu odkazy z Latte parseru vedou na správné řádky v Hamlu, přestože ten se k Latte nikdy nezpracovaný nedostane.
Názorná ukázka: http://d.pr/AEhb
Ukázka šablony
!!! 5
%html
%head
%meta [name => robots, content => {$robots}, n:ifset => $robots]
%title Haml Example
%script [type => text/javascript, src => {$basePath}/js/netteForms.js]
%body
%div [n:foreach => $flashes as $flash, class => flash {$flash->type}]
=$flash->message
.note
%ul
%li simple text
%li =time()
%li =$basePath
%article
{include #content}
\%h3 this is not a node, it's escaped
support for FormMacros:
{form registration}
=input name
=input submit
{/form}
<!DOCTYPE html>
<html>
<head>
<meta name="robots" content="{$robots}" n:ifset="$robots">
<title>Haml Example</title>
<script type="text/javascript" src="{$basePath}/js/netteForms.js"></script></head>
<body>
<div n:foreach="$flashes as $flash" class="flash {$flash->type}">
{=$flash->message}</div>
<div class="note">
<ul>
<li>simple text</li>
<li>{=time()}</li>
<li>{=$basePath}</li></ul></div>
<article>
{include #content}</article>
%h3 this is not a node, it's escaped
support for FormMacros:
{form registration}
{input name}
{input submit}
{/form}</body></html>