diff --git a/lib/engine_handlebars.js b/lib/engine_handlebars.js index 43521f4..d1a06ce 100644 --- a/lib/engine_handlebars.js +++ b/lib/engine_handlebars.js @@ -24,6 +24,16 @@ var Handlebars = require('handlebars'); +// regexes, stored here so they're only compiled once +const findPartialsRE = /{{#?>\s*([\w-\/.]+)(?:.|\s+)*?}}/g; +const findListItemsRE = /({{#( )?)(list(I|i)tems.)(one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twenty)( )?}}/g; +const findAtPartialBlockRE = /{{#?>\s*@partial-block\s*}}/g; + +function escapeAtPartialBlock(partialString) { + var partial = partialString.replace(findAtPartialBlockRE, '{{> @partial-block }}') + return partial; +} + var engine_handlebars = { engine: Handlebars, engineName: 'handlebars', @@ -33,15 +43,12 @@ var engine_handlebars = { // style modifiers or pattern parameters (I think) expandPartials: false, - // regexes, stored here so they're only compiled once - findPartialsRE: /{{#?>\s*([\w-\/.]+)(?:.|\s+)*?}}/g, - findListItemsRE: /({{#( )?)(list(I|i)tems.)(one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twenty)( )?}}/g, - // render it renderPattern: function renderPattern(pattern, data, partials) { if (partials) { Handlebars.registerPartial(partials); } + pattern.extendedTemplate = escapeAtPartialBlock(pattern.extendedTemplate); var compiled = Handlebars.compile(pattern.extendedTemplate); return compiled(data); }, @@ -56,7 +63,7 @@ var engine_handlebars = { // find and return any {{> template-name }} within pattern findPartials: function findPartials(pattern) { - var matches = pattern.template.match(this.findPartialsRE); + var matches = pattern.template.match(findPartialsRE); return matches; }, findPartialsWithStyleModifiers: function () { @@ -73,14 +80,14 @@ var engine_handlebars = { return []; }, findListItems: function (pattern) { - var matches = pattern.template.match(this.findListItemsRE); + var matches = pattern.template.match(findListItemsRE); return matches; }, // given a pattern, and a partial string, tease out the "pattern key" and // return it. findPartial: function (partialString) { - var partial = partialString.replace(this.findPartialsRE, '$1'); + var partial = partialString.replace(findPartialsRE, '$1'); return partial; } };