Skip to content

Latest commit

 

History

History
121 lines (92 loc) · 3.58 KB

README.md

File metadata and controls

121 lines (92 loc) · 3.58 KB

Liquid with Node.js

NPM version Downloads GitHub Issues
Build Status Coverage Status Dependency Status devDependency Status

LiquidNode is a port of the original Liquid template engine from Ruby to Node.js. It uses Promises to support non-blocking/asynchronous variables, filters, and blocks.

Features

  • Supports asynchronous variables, tags, functions and filters (helpers)
  • Allows you to add custom tags and filters easily
  • Uses bluebird for super-fast Promises/A+
  • Supports full liquid syntax
  • Based on original Ruby code
  • Written in CoffeeScript
  • High test coverage

What does it look like?

<ul id="products">
  {% for product in products %}
    <li>
      <h2>{{ product.name }}</h2>
      Only {{ product.price | price }}

      {{ product.description | prettyprint | paragraph }}
    </li>
  {% endfor %}
</ul>

Installation

npm install liquid-node --save

Usage

Liquid supports a very simple API based around the Liquid.Engine class. For standard use you can just pass it the content of a file and call render with an object.

Liquid = require("liquid-node")
var engine = new Liquid.Engine

engine
  .parse("hi {{name}}")
  .then(function(template) { return template.render({ name: "tobi" }); })
  .then(function(result) { console.log(result) });
  
// or

engine
  .parseAndRender("hi {{name}}", { name: "tobi" })
  .then(function(result) { console.log(result) });

Usage with Connect

app.get(function(req, res) {
  engine
    .parseAndRender("hi {{name}}", { name: "tobi" })
    .nodeify(function(err, result) {
      if (err) {
        res.end("ERROR: " + err);
      } else {
        res.end(result);
      }
    });
});

Registration of new filters

engine.registerFilters({
  myFilter: function(input) {
    return String(input).toUpperCase()
  }
});

Registration of new Tags

Since the code is based on the Ruby implementation we use CoffeeScript's class which is a little bit difficult to write in pure JavaScript. Take a look at the existing tags to see how to implement them.

class MyTag extends Liquid.Tag
  render: ->
    "that's me!"
    
engine.registerTag "MyTag", MyTag

How to run the tests

npm test

Similar libraries

License

LiquidNode is released under the MIT license.