- commit
- 9e04bec7fd2799047a15a32f89f860b6436cb9a8
- parent
- b2fc32283eae67b8a6d43635eeb5f1650aa762e6
- Author
- Tobias Bengfort <tobias.bengfort@gmx.net>
- Date
- 2015-08-23 17:24
add inverted sections
Diffstat
| M | src/muu-template.js | 36 | +++++++++++++++++++++++++++--------- |
| M | test/test-template.js | 5 | +++++ |
2 files changed, 32 insertions, 9 deletions
diff --git a/src/muu-template.js b/src/muu-template.js
@@ -17,6 +17,11 @@ 17 17 * In any other case, the block is rendered with the outer scope, but only if 18 18 * the value is truthy. 19 19 * -1 20 * ## Inverted loops -1 21 * -1 22 * Inverted loops render blocks of test if the value of the key is falsy. They -1 23 * begin with a caret. -1 24 * 20 25 * ## Comments 21 26 * 22 27 * Comments begin with a bang and are ignored. @@ -77,7 +82,7 @@ define(['muu-js-helpers', 'muu-dom-helpers'], function(_, $) { 77 82 } 78 83 }; 79 8480 -1 var parseLoopTemplate = function(tag, afterTag) {-1 85 var parseLoopTemplate = function(tag, afterTag, inverted) { 81 86 var tagName = tag.slice(3, -2); 82 87 83 88 var v = parseTemplate(afterTag, tagName); @@ -85,16 +90,24 @@ define(['muu-js-helpers', 'muu-dom-helpers'], function(_, $) { 85 90 var afterLoop = v[1]; 86 91 87 92 var render = function(data) {88 -1 if (_.isArray(data[tagName])) {89 -1 var result = '';90 -1 for (var i = 0; i < data[tagName].length; i++) {91 -1 result += inner(data[tagName][i]);-1 93 if (inverted) { -1 94 if (data[tagName]) { -1 95 return ''; -1 96 } else { -1 97 return inner(data); 92 98 }93 -1 return result;94 -1 } else if (data[tagName]) {95 -1 return inner(data);96 99 } else {97 -1 return '';-1 100 if (_.isArray(data[tagName])) { -1 101 var result = ''; -1 102 for (var i = 0; i < data[tagName].length; i++) { -1 103 result += inner(data[tagName][i]); -1 104 } -1 105 return result; -1 106 } else if (data[tagName]) { -1 107 return inner(data); -1 108 } else { -1 109 return ''; -1 110 } 98 111 } 99 112 }; 100 113 @@ -148,6 +161,11 @@ define(['muu-js-helpers', 'muu-dom-helpers'], function(_, $) { 148 161 var loop = v[0]; 149 162 var after = parseTemplate(v[1], loopName); 150 163 return concat([beforeTag, loop, after]); -1 164 } else if (tag.lastIndexOf('{{^', 0) === 0) { -1 165 var v = parseLoopTemplate(tag, afterTag, true); -1 166 var loop = v[0]; -1 167 var after = parseTemplate(v[1], loopName); -1 168 return concat([beforeTag, loop, after]); 151 169 } else if (tag.lastIndexOf('{{!', 0) === 0) { 152 170 var after = parseTemplate(afterTag, loopName); 153 171 return concat([beforeTag, after]);
diff --git a/test/test-template.js b/test/test-template.js
@@ -23,6 +23,11 @@ define(['muu-template'], function(muuTemplate) {
23 23 var result = muuTemplate(template, {truthy: true, falsy: false});
24 24 expect(result).to.equal('test1 ');
25 25 });
-1 26 it('does inverted if', function() {
-1 27 var template = '{{^truthy}}test1{{/truthy}} {{^falsy}}test2{{/falsy}}';
-1 28 var result = muuTemplate(template, {truthy: true, falsy: false});
-1 29 expect(result).to.equal(' test2');
-1 30 });
26 31 it('does pairs', function() {
27 32 var template = '{{str1: key1, str2: key2, str3: key3}}';
28 33 var result = muuTemplate(template, {key1: true, key2: false, key3: true});