Liquid Template Engine for Brick.js, implemented with [sirlantis/liquid-node][sirlantis/liquid-node].
Installation
npm install -S brick-liquid
Set template engine for brick.js
var brickJs = require('brick.js');
var Liquid = require('brick-liquid');
var brk = brickJs();
var liquid = Liquid({
cache: false
});
brk.engine('.liquid', liquid);
brk.engine('.html', liquid);
app.use('/', brk.express);
Include Modules(Partials)
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.
Layouts
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
.
Options
cache
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.
Registration of New Filter
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
Registration of new tag is compatible with harttle/liquidjs.
Javascript:
engine.registerTag('upper', {
parse: function(tagToken, remainTokens) {
this.str = tagToken.args;
},
render: function(scope, hash) {
var str = Liquid.evalValue(this.str, scope);
return str.toUpperCase();
}
});
Template:
{% upper 'alice' %}
Output:
ALICE