Skip to content

Commit

Permalink
add deferred template parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
csimi committed Feb 6, 2018
1 parent bcfd5f4 commit 0554e27
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 6 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@elvoline/twig",
"version": "1.1.0",
"version": "2.0.0",
"description": "twig.js renderer for elvoline",
"module": "dist/es.js",
"main": "dist/index.js",
Expand Down
3 changes: 2 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
# About

This is a Twig.js renderer customized for use on Elvoline.
Added features include an always-on promise support, global variables, automatic DOM creation and i18n.

Added features include an always-on promise support, deferred template parsing, global variables, automatic DOM creation and i18n.

# Docs

Expand Down
10 changes: 7 additions & 3 deletions src/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,23 @@ export function addHook (hook) {
}

export default function (options) {
var promise = new Promise((resolve) => {
var promise;
function deferParse (resolve) {
var template = Twig.twig(assign({}, options, {
'load': resolve,
}));

if (template.render) {
resolve(template);
}
});
}

return {
'promise': promise,
'render': (data) => {
if (!promise) {
promise = new Promise(deferParse);
}

return Promise
.all([
promise,
Expand Down
16 changes: 16 additions & 0 deletions test/basic.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,22 @@ describe('basic functionality', () => {
return expect(promise).to.eventually.equal('it renders bar');
});

it('should not remember variables from previous renders', () => {
var template = twig({
'data': `it renders {{ foo }}properly`,
});

var promise = Promise
.resolve()
.then(() => template.render({
'foo': 'bar',
}))
.then(() => template.render())
.then((dom) => dom.text());

return expect(promise).to.eventually.equal('it renders properly');
});

it('should run added hooks with the generated DOM', () => {
var template = twig({
'data': `it renders`,
Expand Down

0 comments on commit 0554e27

Please sign in to comment.