Giter Club home page Giter Club logo

liquid-node's Introduction

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.

liquid-node's People

Contributors

mrcljx avatar ndmarcel avatar bergie avatar heupel avatar cyjake avatar samtiffin avatar sebastianseilund avatar

Watchers

Tim Hardy avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.