From 0e8b33aa792e5e67e0f25a82de1d2622c380a129 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 25 Nov 2013 13:46:54 -0500 Subject: [PATCH] templates.js added @first and @last conditionals --- public/src/templates.js | 46 ++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/public/src/templates.js b/public/src/templates.js index f4df8cd18c..651a849a29 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -262,7 +262,7 @@ var template = this.html, regex, block; - return (function parse(data, namespace, template) { + return (function parse(data, namespace, template, blockInfo) { if (!data || data.length == 0) { template = ''; } @@ -289,7 +289,7 @@ result = ""; do { - result += parse(data[d][i], namespace, block); + result += parse(data[d][i], namespace, block, {iterator: i, total: numblocks}); } while (i++ < numblocks); namespace = namespace.replace(d + '.', ''); @@ -304,29 +304,37 @@ block = parse(data[d], namespace, block); template = setBlock(regex, block, template); } else { - var conditional = makeConditionalRegex(namespace + d); - - var conditionalBlock = conditional.exec(template); - - if (conditionalBlock !== null) { - conditionalBlock = conditionalBlock[0].split(//); + function checkConditional(key, value) { + var conditional = makeConditionalRegex(key), + conditionalBlock = conditional.exec(template); - if (conditionalBlock[1]) { - // there is an else statement - if (!data[d]) { - template = template.replace(conditional, conditionalBlock[1]); - } else { - template = template.replace(conditional, conditionalBlock[0]); - } + if (conditionalBlock !== null) { + conditionalBlock = conditionalBlock[0].split(//); - } else { - // regular if - if (!data[d]) { - template = template.replace(conditional, ''); + if (conditionalBlock[1]) { + // there is an else statement + if (!value) { + template = template.replace(conditional, conditionalBlock[1]); + } else { + template = template.replace(conditional, conditionalBlock[0]); + } + + } else { + // regular if + if (!value) { + template = template.replace(conditional, ''); + } } } } + checkConditional(namespace + d, data[d]); + if (blockInfo) { + checkConditional('@first', blockInfo.iterator === 0); + checkConditional('@last', blockInfo.iterator === blockInfo.total); + } + + template = replace(namespace + d, data[d], template); } }