Project

hamlet

0.01
No commit activity in last 3 years
No release in over 3 years
Hamlet is a template language whose goal is reduce HTML syntax to the essential parts.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0
>= 0.8.7
>= 0
>= 3.1.0
>= 0

Runtime

~> 1.0.0
 Project Readme

Hamlet is a template language whose goal is to reduce HTML syntax to the essential parts.

Syntax

<body>
    <p>Some paragraph.
    <ul data-attr=list>
        <li>Item 1
        <li>Item 2

That Hamlet snippet is equivalent to:

<body>
  <p>Some paragraph.</p>
  <ul data-attr="list">
    <li>Item 1</li>
    <li>Item 2</li>
  </ul>
</body>

see, it is just HTML! Designers love Hamlet because it is just HTML! Closing tags are inferred from whitespace.

Details

You can see the original Haskell hamlet templating language and the [javascript port](hamlet: https://github.com/gregwebs/hamlet.js).

This Hamlet (ruby) works on top of slim. Please take a look at the slim documentation if you are looking to see if a more advanced feature is supported.

Difference with Slim

The most important difference is that hamlet always uses angle brackets. Hamlet also does not require attributes to be quoted - unquoted is considered a normal html attribute value and quotes will automatically be added. Hamlet also uses a '#' for code comments and the normal <!-- for HTML comments. Hamlet also uses different whitespace indicators - see the next section.

In Slim you have:

/! HTML comment
p data-attr="foo" Text
  | More Text
  / Comment

In hamlet you have:

<!-- HTML comment
<p data-attr=foo>Text
  More Text
  # Comment

Whitespace

Using indentation does have some consequences with respect to white space. This library is designed to do the right thing most of the time. This is a slightly different design from the original Haskell implementation of Hamlet and Slim, but the same design as hamlet.js

A closing tag is placed immediately after the tag contents. If you want to have a space before a closing tag, use a comment sign # on the line to indicate where the end of the line is.

<b>spaces  # 2 spaces are included

A new line is automatically added after tags with inner text. If you have multiple lines of inner text without tags (not a common use case) they will also get a new line added. If you do not want white space, you point it out with a > character, that you could think of as the end of the last tag, although you can still use it when separating content without tags onto different lines. You can also use a > if you want more than one space.

<b>spaces  # 2 spaces are included
<b>spaces  </b>
<b>no space
>none after bold.
>  Two spaces after a period is bad!
<b>no space</b>none after bold.  Two spaces after a period is bad!

I18n support

You can hook up i18n support the same way you would for other templating lanugages. This rails plugin works out of the box.

Limitations

A space is not automatically added after a tag when looping through an array Double quotes in attributes will get messed up: click=do('ok!') not click=do("whoops!")

Development

Run tests with

bundle exec rake test

or

bundle exec ruby -r ./test/slim/helper.rb TEST

There are some failing tests that are skipped right now