Liquid Template Engine for Brick.js, implemented with [sirlantis/liquid-node][sirlantis/liquid-node].
npm install -S brick-liquid
var brickJs = require('brick.js');
var Liquid = require('brick-liquid');
var brk = brickJs();
var liquid = Liquid({
cache: false // disabled by default, see below
});
brk.engine('.liquid', liquid); // set liquid engine for .liquid file
brk.engine('.html', liquid); // set liquid engine for .html file
app.use('/', brk.express);
In Brick.js, partials are organized as modules,
Sub-modules are imported by include
. For example:
<html>
<body>
<div class="container">
{%include "user-list"%}
</div>
</body>
</html>
Above template will import module user-list
in root
directory with local context.
Brick-liquid render is implemented asyncly to support template layout.
Module homepage
:
{%layout 'default'%}
<div class="container"> Hello! </div>
Module default
:
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{title}}</title>
<meta charset="UTF-8">
</head>
<body> {% block %} </body>
</html>
homepage
will be rendered and then replace {% block %}
declaration in default
.
In the meantime, the local context within homepage
will be passed into default
.
Type: Bool
Default: false
If set to true
, all templates will be loaded only once (for production usage). Otherwise, template file will be reloaded on every HTTP request.
Brick-liquid is implemented with harttle/liquidjs internaly.
And the liquid
object defined above is compatible with harttle/liquidjs engine
object.
Javascript:
liquid.registerFilter('upper', function(v){
return v.toUpperCase();
});
Template:
<h3>{{ 'alice' | upper }}</h3>
Output:
<h3>ALICE</h3>
Registration of new tag is compatible with harttle/liquidjs.
Javascript:
engine.registerTag('upper', {
parse: function(tagToken, remainTokens) {
this.str = tagToken.args; // name
},
render: function(scope, hash) {
var str = Liquid.evalValue(this.str, scope); // 'alice'
return str.toUpperCase(); // 'Alice'
}
});
Template:
{% upper 'alice' %}
Output:
ALICE