Small and customizable template system for CommonJS
Pull request Compare This branch is 6 commits ahead, 1 commit behind dmachi:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


templify is a small template system written in javascript.  

##Example use:

Instantiate a template (which returns a function), and render the template by passing it a context

    node>var template = require("templify/template").Template;
    node>var compiled = template("{{foo}}");
    node>compiled({foo: "test me"});
    'test me'

Combined compile/render with renderTemplate()

    node>var rt = require("templify/templify").renderTemplate;
    node>rt("{{foo}}",{foo: "blah"});

An example of using templify to create a media handler can be seen in the Pintura package's html media handler. It looks something like this:

	//load a store where we will retrieve our templates
    	filesystem = require("perstore/store/filesystem").FileSystem({fsRoot: "templates"}),

	//setup a resolver, in this case we're just using the default
	resolver = require("templify/templify").Resolver;

	// instantiate a template engine
        var templateEngine =  require('templify/templify').TemplateEngine({resolver: resolver, store: filesystem});

	//use the template engine to render an object as html

        var template = templateEngine.compile(templateId);
	rendered = template(object);

##Template Syntax:


	Statements are opened and closed with {% and %} by default and are in the form : {%someStatement args%}

* extend `{%extend fooTemplate%}` extents one template from another.  When using an extension, the base template is used and any blocks provided by the extender override blocks in the base class

* block `{%block someBlock%}` - Defines a block, which extends an existing block or can be extended by someone who extends in the future

* include `{%include fooTemplate%}` include one template from another.  include, as with extend, block, and render use the resolver to transform a referenced template to an actual template string.

* render - `{%render fooTemplate with someObj%} similar to include, this allows another template to be loaded.  However, instead of using the existing context as the root, a root context is provided.

* foreach - `{%foreach element in object%} {{}}{%/foreach%}   Loops over arrays 

* for `{%for element in object%}{{}}{%/for%} loops over objects

* if `{%if condition%} .... {%/if%}   conditional, i'm guessing few people read this doc without being able to guess what this does :)

* else/elseif `{%if condition%} .... {%/if%}{%elseif condition%} ... {%/elseif%}{%else%} ... {%/else%}

* cdata `{%cdata} ..... {%/cdata} Escape's content

### Print

Printing can be achieved by using ${variable}}  or {{variable}} 

### Script

Scripts can be included by wrappting them in <% %>


### Comments

Comments are included by wrapping them with {#  #}.  Currently, this is configured to output comments surrounded by <!-- --> in the final html to ease debugging.