Haml filter: pro HTML krásnější

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mikulas Dite
Člen | 756
+
0
-

Edit: Vylepšená verze a nová dokumentace: https://componette.org/search/?…


Moje implementace Haml pro Nette. Protože už tady máme skvělé Latte, je to hlavně krásnější zápis html.

Repo: https://github.com/…s/HamlFilter

Proč?: tady bych si dovolil citoval http://haml-lang.com/:

Haml takes your gross, ugly templates and replaces them with veritable Haiku.

Haml is the next step in generating views in your Rails application. Haml is a refreshing take that is meant to free us from the shitty templating languages we have gotten used to.

Haml is based on one primary principle. Markup should be beautiful.

Použití:

Stačí zaregistrovat v BasePresenteru (případně BaseControl). Zlaté pravidlo je „nejdřív Haml, potom Latte“.

public function templatePrepareFilters($template)
{
    $template->registerFilter(new Nette\Templating\Filters\Haml);
    $template->registerFilter(new Nette\Latte\Engine);
}

Ukázka

!!! 5
%html
  %head
    %meta [name => robots, content => {$robots}, n:ifset => $robots]
    %title Nette Application Skeleton
    %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 Haml...
        %li Haml is here...
        %li Haml for your Nette!
    %article
      {include #content}
<!DOCTYPE html>
<html>
	<head>
		<title>Nette Application Skeleton</title>
		<script type="text/javascript" src="/haml/www/js/netteForms.js"></script>
	</head>
	<body>
		<div class="note">
			<ul>
				<li>Haml...</li>
				<li>Haml is here...</li>
				<li>Haml for your Nette!</li>
			</ul>
		</div>
		<article>
			<!-- tady by opravdu byl obsah #content bloku -->
		</article>
	</body>
</html>

O co přijdu?
O nic!

  • Je to filtr, takže se výsledek cachuje
  • Latte, makra i n:attributy fungují jako dřív
  • Dědičnost šablon zůstává a vkládané šablony jsou filtrem taky prohnané

Editoval Mikulas Dite (20. 5. 2011 22:45)

jtousek
Člen | 951
+
0
-

Loool. Zrovna před pár dny jsem někde viděl šablonu Hamlu a říkl jsem si, že to nevypadá vůbec špatně. A chvíli na to už je tady Nette implementace. :)) Skvělé! :-D

na1k
Člen | 288
+
0
-

Vypadá to zajímavě, ale co nějaké praktické zkušenosti? Používáte to už někdo v běžném provozu u běžných webů?

Bojím se, že pokud by po mně měl někdo s tím kódem pracovat, bude dost mimo. Přeci jenom HTML zvládne každý středoškolák, ale tohle mi přijde spíš jako takové undergroundové kódění :-D

Filip Procházka
Moderator | 4668
+
0
-

Woooow, tos jako celý filter přepsal z Ruby do PHP, jo? Dobrá práce! Nevím jestli pro to budu mít využití, ale vypadá to moc dobře.

ic
Člen | 430
+
0
-

Jak s tím budou pracovat všelijaké doplňky? Které třeba na nějaké místo položí klasické html? nezkolabuje to? A DebugPanel pod </html> taky bez problému?

grey
Člen | 94
+
0
-

Jo, na haml jsem zrovna někdy před tejden koukal :) V týdnu vyzkouším…

Ginny
Člen | 36
+
0
-

Skvělá práce, Sass a Haml používám u Railsů :-)

Mikulas Dite
Člen | 756
+
0
-

Díky : ) Není to úplně celý haml, například to nepoužívá zkratky pro ruby, dynamičnost zůstává na Nette makrech. Btw oproti Ruby implementaci je tady pro parametry hranatá místo curly závorky, aby se to nebilo s Latte.

ic napsal(a):

Jak s tím budou pracovat všelijaké doplňky? Které třeba na nějaké místo položí klasické html? nezkolabuje to? A DebugPanel pod </html> taky bez problému?

Panelů se to netýká. Když to najde klasické html v normální šabloně, tak se ho to pokusí naparsovat, ale přeloží to jako textový obsah, ne jako elementy (buď tam začíná tag < nebo text). Ve výsledném html to bude v pořádku, akorát možná jinak naformátované – očekávám, že ruční html bude v jednom řádku.

Co se týče 3rd party doplňků, tam se Haml vůbec nedostane, protože ty dědí přímo od Nette tříd. Do vlatních komponent se musí explicitně vypsat v BaseControlu (stejně jako u prezenterů stačí templatePrepareFilters).

Lopo
Člen | 277
+
0
-

Ginny napsal(a):

Skvělá práce, Sass a Haml používám u Railsů :-)

Sass implementujem v ramci mojho WebLoader-u v BailIff-e …

neviem ale presne kedy to dokoncim, neda sa to totiz urobit podobne ako Less, XCss a c-css cez jednoduchy wrapper

Mikulas Dite
Člen | 756
+
0
-

Sass zatím implementuju takhle ve své sbírce nette nástrojů:

case "sass":
	isProjectDir();
	echo "Sass is watching for changes. Press Ctrl-C to stop.";
	passthru('sass --watch app/stylesheets/:www/css/');
	break;

a každá změna se mi automaticky kompiluje. Není potřeba to mít i na serveru, ale byla by to parádička.

pEeLL
Člen | 23
+
0
-

at se na haml divam jak chci nevidim vtom zadny pokrok. pokud pouzivate zen coding (nebo staci i lepsi editor) tak nejake zavorky <> a uzaviraci tagy stejne nikdy nepisete. navic nepotrebujete zadny vice ci mene dokonaly prevodnik.

ted kdyz jsem to psal me napadlo ze mozna zajimavy by byl prave prevodnik zen coding na html
(ikdyz by se muselo upravit hromada veci se kterymi se v zen coding nepocita)

ale napsat neco jako

ul#nav>li.blue*6>a:href(‚href1‘,‚href2‘.....):text(‚jedna‘,‚dva‘…)

a vygenerovat

<ul id=„nav“>
<li class=„blue“>
<a href=„href1“>jedna</a>
</li>
<li class=„blue“>
<a href=„href2“>dva</a>
</li>
<li class=„blue“>
<a href=„href3“>tri</a>
</li>
<li class=„blue“>
<a href=„href4“>ctyri</a>
</li>
<li class=„blue“>
<a href=„href5“>pet</a>
</li>
<li class=„blue“>
<a href=„href6“>sest</a>
</li>
</ul>

Mikulas Dite
Člen | 756
+
0
-

Mám dopsanou vylepšenou verzi, která je o něco chytřejší a spolupracuje víc s latte.

Ukážu na #posob : )

Editoval Mikulas Dite (20. 5. 2011 18:12)

Mordred
Člen | 1
+
0
-

Planujes pridat aj podporu filtrov? http://haml-lang.com/…FERENCE.html#…

Tomáš Votruba
Moderator | 1114
+
0
-

Skvělá věc!

Když chci zapsat dva %a tagy pod sebe, tak mi to k prvnímu přičte odřákování, které vede k tomu druhému.
Nejde nějak natvrdo uzavírat %a tagy?