thermos

Easy HTML templating in pure CoffeeScript

thermos

thermos is a templating engine that lets you write HTML templates in CoffeeScript.

It's a branch of CoffeeMugg, a branch of CoffeeKup.

thermos = require 'thermos'
 
thermos.render ->
  @doctype 5
  @html ->
    @head ->
      @title "hello"
      @js "main"
    @body ->
      @p "Hello world!"

HTML entities are automatically encoded for you. Writing this:

thermos.render ->
  @h1 ->
    @span '<b>—&</b>"\'&mdash;hi'

will produce <h1><span>&gt;b&lt;&mdash;&amp;&gt;/b&lt;&quot;&apos;&mdash;hi</span></h1>

You can use @html_safe to prevent Thermos from auto-encoding entities for you. For example, @span @html_safe '<b>—&</b>"\'' will output <h1><span><b>—&</b>"\'</span></h1>.

thermos = require 'thermos'
 
thermos.configure
  helpers :
    header_link : (text, url) ->
      @h1 ->
        @link_to texturl
 
thermos.render ->
  @doctype 5
  @html ->
    @head ->
      @title "hello"
      @js "main"
    @body ->
      @header_link "Hello world!""/"
      @div "#content"
        @p "foobar"
thermos = require 'thermos'
 
options =
  helpers :
    header_link : (text, url) ->
      @h1 ->
        @link_to texturl
 
thermos.render options->
  @doctype 5
  @html ->
    @head ->
      @title "hello"
      @js "main"
    @body ->
      @header_link "Hello world!""/"
      @div "#content"
        @p "foobar"

Currently, thermos includes @js, @css, and @link_to helpers by default.

@link_to texturl
@js url
@css url
 
@link_to "click here""#anchor"
@link_to "click here""http://example.com"
@link_to "click here""/about"
 
@js "jquery"
@js "jquery.min"
@js "jquery.min.js"
@js "/vendor/jquery.min"
@js "/vendor/jquery.min.js"
@js "http://example.com/jquery"
@js "http://example.com/jquery.js"
 
@css "main"
@css "main.css"
# same as @js 

CoffeeKup breaks closures. Extending CoffeeMugg isn't as nice as I'd like.

thermos uses mocha for running tests.

$ npm install
$ mocha
$ npm install thermos

jaekwon, for CoffeeMugg. mauricemach, for CoffeeKup.

Don't kill me, both.