muu

DEPRECATED lightweight JS framework
git clone https://git.ce9e.org/muu.git

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    84 
   80    -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});