diff options
author | Martin Muñoz <im.mmun@gmail.com> | 2014-07-28 18:56:15 -0400 |
---|---|---|
committer | Martin Muñoz <im.mmun@gmail.com> | 2014-07-29 02:45:50 -0400 |
commit | eee2c4d4f29e233280907bc89a32556de66fe783 (patch) | |
tree | 8b50dfea31a7cc1bdc55f21e0bab9d681f428381 /lib/handlebars/compiler/helpers.js | |
parent | 271106d43fae96fc1287898568d000b871f19084 (diff) | |
download | handlebars.js-eee2c4d4f29e233280907bc89a32556de66fe783.zip handlebars.js-eee2c4d4f29e233280907bc89a32556de66fe783.tar.gz handlebars.js-eee2c4d4f29e233280907bc89a32556de66fe783.tar.bz2 |
Refactor blocks, programs and inverses
Diffstat (limited to 'lib/handlebars/compiler/helpers.js')
-rw-r--r-- | lib/handlebars/compiler/helpers.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/handlebars/compiler/helpers.js b/lib/handlebars/compiler/helpers.js new file mode 100644 index 0000000..1a2bd26 --- /dev/null +++ b/lib/handlebars/compiler/helpers.js @@ -0,0 +1,41 @@ +import Exception from "../exception"; +import AST from "./ast"; + +export function stripFlags(open, close) { + return { + left: open.charAt(2) === '~', + right: close.charAt(close.length-3) === '~' + }; +} + +export function prepareBlock(mustache, program, inverseAndProgram, close, inverted, locInfo) { + if (mustache.sexpr.id.original !== close.path.original) { + throw new Exception(mustache.sexpr.id.original + " doesn't match " + close.path.original, mustache); + } + + var inverse, strip; + + strip = { + left: mustache.strip.left, + right: close.strip.right + }; + + if (inverseAndProgram) { + inverse = inverseAndProgram.program; + var inverseStrip = inverseAndProgram.strip; + + program.strip.left = mustache.strip.right; + program.strip.right = inverseStrip.left; + inverse.strip.left = inverseStrip.right; + inverse.strip.right = close.strip.left; + } else { + program.strip.left = mustache.strip.right; + program.strip.right = close.strip.left; + } + + if (inverted) { + return new AST.BlockNode(mustache, inverse, program, strip, locInfo); + } else { + return new AST.BlockNode(mustache, program, inverse, strip, locInfo); + } +} |