mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-16 12:50:38 -07:00
liquid instance
This commit is contained in:
@@ -1,46 +1,44 @@
|
||||
const Filter = require('./filter');
|
||||
const Tag = require('./tag');
|
||||
|
||||
module.exports = function render(tokens, ctx) {
|
||||
var html = '';
|
||||
for (var i = 0; i < tokens.length; i++) {
|
||||
var token = tokens.shift();
|
||||
switch (token.type) {
|
||||
case 'html':
|
||||
html += token.value;
|
||||
break;
|
||||
case 'output':
|
||||
html += renderOutput(token);
|
||||
break;
|
||||
case 'tag':
|
||||
html += renderTag(token);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`unexpected type: ${token.type}`);
|
||||
}
|
||||
}
|
||||
return html;
|
||||
|
||||
function renderOutput(token) {
|
||||
var filters = token.value.split('|');
|
||||
var val = ctx.get(filters.shift());
|
||||
return filters
|
||||
.map(str => Filter.parse(str))
|
||||
.reduce((v, filter) => filter.render(v, ctx), val);
|
||||
}
|
||||
|
||||
function renderTag(token) {
|
||||
var tag = Tag.parse(token.value), subTokens = [];
|
||||
if(tag.needClose){
|
||||
var curToken, endToken = 'end' + tag.name;
|
||||
while((curToken = tokens.shift()).value !== endToken){
|
||||
subTokens.push(curToken);
|
||||
}
|
||||
if(curToken.value !== endToken){
|
||||
throw new Error(`${token.value} not closed`);
|
||||
module.exports = (Filter, Tag) =>
|
||||
function render(tokens, ctx) {
|
||||
var html = '';
|
||||
for (var i = 0; i < tokens.length; i++) {
|
||||
var token = tokens.shift();
|
||||
switch (token.type) {
|
||||
case 'html':
|
||||
html += token.value;
|
||||
break;
|
||||
case 'output':
|
||||
html += renderOutput(token);
|
||||
break;
|
||||
case 'tag':
|
||||
html += renderTag(token);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`unexpected type: ${token.type}`);
|
||||
}
|
||||
}
|
||||
return tag.render(subTokens, ctx);
|
||||
}
|
||||
};
|
||||
return html;
|
||||
|
||||
function renderOutput(token) {
|
||||
var filters = token.value.split('|');
|
||||
var val = ctx.get(filters.shift());
|
||||
return filters
|
||||
.map(str => Filter.parse(str))
|
||||
.reduce((v, filter) => filter.render(v, ctx), val);
|
||||
}
|
||||
|
||||
function renderTag(token) {
|
||||
var tag = Tag.parse(token.value),
|
||||
subTokens = [];
|
||||
if (tag.needClose) {
|
||||
var curToken, endToken = 'end' + tag.name;
|
||||
while ((curToken = tokens.shift()).value !== endToken) {
|
||||
subTokens.push(curToken);
|
||||
}
|
||||
if (curToken.value !== endToken) {
|
||||
throw new Error(`${token.value} not closed`);
|
||||
}
|
||||
}
|
||||
return tag.render(subTokens, ctx);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user