mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-19 22:40:48 -07:00
enable cache: parse and render
This commit is contained in:
@@ -6,61 +6,62 @@ const path = require("path");
|
||||
const fs = require('fs');
|
||||
const Tag = require('./tag.js');
|
||||
const Filter = require('./filter.js');
|
||||
const error = require('./error.js');
|
||||
const Template = require('./template');
|
||||
const Template = require('./parser');
|
||||
const Expression = require('./expression.js');
|
||||
|
||||
const tagsPath = path.join(__dirname, "tags");
|
||||
|
||||
var _engine = {
|
||||
registerFilter : function(name, filter){
|
||||
init: function(tag, filter) {
|
||||
this.tag = tag;
|
||||
this.filter = filter;
|
||||
this.parser = Template(tag, filter);
|
||||
this.renderer = Render();
|
||||
return this;
|
||||
},
|
||||
parse: function(html) {
|
||||
var tokens = tokenizer.parse(html);
|
||||
return this.parser.parse(tokens);
|
||||
},
|
||||
render: function(tpl, ctx) {
|
||||
this.renderer.resetRegisters();
|
||||
return this.renderer.renderTemplates(tpl, scope.factory(ctx));
|
||||
},
|
||||
parseAndRender: function(html, ctx) {
|
||||
var tpl = this.parse(html);
|
||||
return this.render(tpl, ctx);
|
||||
},
|
||||
evalOutput: function(str, scope) {
|
||||
var tpl = this.parser.parseOutput(str.trim());
|
||||
return this.renderer.evalOutput(tpl, scope);
|
||||
},
|
||||
registerFilter: function(name, filter) {
|
||||
return this.filter.register(name, filter);
|
||||
},
|
||||
registerTag : function(name, tag){
|
||||
registerTag: function(name, tag) {
|
||||
return this.tag.register(name, tag);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
function factory(){
|
||||
function factory() {
|
||||
var engine = Object.create(_engine);
|
||||
|
||||
engine.tag = Tag();
|
||||
engine.filter = Filter();
|
||||
engine.tokenize = tokenizer.parse;
|
||||
|
||||
engine.template = Template(engine.tag, engine.filter);
|
||||
engine.parseStream = engine.template.parseStream;
|
||||
|
||||
var renderer = Render(engine.filter, engine.tag);
|
||||
engine.renderTemplates = renderer.renderTemplates;
|
||||
|
||||
engine.render = function(html, ctx) {
|
||||
var tokens = engine.tokenize(html);
|
||||
var templates = engine.template.parse(tokens);
|
||||
engine.register = {};
|
||||
return engine.renderTemplates(templates, scope.factory(ctx));
|
||||
};
|
||||
engine.evalOutput = function(str, scope) {
|
||||
var template = engine.template.parseOutput(str.trim());
|
||||
return renderer.evalOutput(template, scope);
|
||||
};
|
||||
|
||||
fs.readdirSync(tagsPath).map(function(f){
|
||||
var match = /^(\w+)\.js$/.exec(f);
|
||||
if(!match) return;
|
||||
require("./tags/" + f)(engine);
|
||||
});
|
||||
require("./filters.js")(engine);
|
||||
engine.init(Tag(), Filter());
|
||||
registerTagsAndFilters(engine);
|
||||
return engine;
|
||||
}
|
||||
|
||||
function registerTagsAndFilters(engine) {
|
||||
fs.readdirSync(tagsPath).map(f => {
|
||||
var match = /^(\w+)\.js$/.exec(f);
|
||||
if (!match) return;
|
||||
require("./tags/" + f)(engine);
|
||||
});
|
||||
require("./filters.js")(engine);
|
||||
}
|
||||
|
||||
factory.lexical = lexical;
|
||||
factory.error = error;
|
||||
factory.isTruthy = Expression.isTruthy;
|
||||
factory.isFalsy = Expression.isFalsy;
|
||||
factory.stringify = Render.stringify;
|
||||
factory.evalExp = Expression.evalExp;
|
||||
factory.evalValue = Expression.evalValue;
|
||||
|
||||
|
||||
module.exports = factory;
|
||||
|
||||
Reference in New Issue
Block a user