muu

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

commit
cb0b88e0a8a24b60d220ef053f140f9a9abfcdc3
parent
b9ede1986fab336dc43c2a93fdeec5a896f7ea68
Author
Tobias Bengfort <tobias.bengfort@gmx.net>
Date
2015-08-28 17:48
do not get next everywhere

Diffstat

M src/muu-template.js 130 +++++++++++++++++++++----------------------------------------

1 files changed, 45 insertions, 85 deletions


diff --git a/src/muu-template.js b/src/muu-template.js

@@ -80,17 +80,12 @@ define('muu-template', ['muu-js-helpers', 'muu-dom-helpers'], function(_, $) {
   80    80 
   81    81     /**
   82    82      * @param {string} tag
   83    -1      * @param {string} afterTag
   84    -1      * @param {string} loopName
   85    -1      * @return {{render: function(*): string, afterBlock: string}}
   -1    83      * @return {function(*): string}
   86    84      * @nosideeffects
   87    85      */
   88    -1     var parseVariable = function(tag, afterTag, loopName) {
   89    -1         var next = parseTemplate(afterTag, loopName);
   90    -1         var render;
   91    -1 
   -1    86     var parseVariable = function(tag) {
   92    87         if (tag.indexOf(':') === -1) {
   93    -1             render = function(data) {
   -1    88             return function(data) {
   94    89                 return $.escapeHtml(getValue(tag, data) || '');
   95    90             };
   96    91         } else {
@@ -101,41 +96,27 @@ define('muu-template', ['muu-js-helpers', 'muu-dom-helpers'], function(_, $) {
  101    96                 return [key, value];
  102    97             });
  103    98 
  104    -1             render = function(data) {
  105    -1                 var results = [];
  106    -1 
  107    -1                 for (var i = 0; i < pairs.length; i++) {
  108    -1                     var key = pairs[i][0];
  109    -1                     var value = pairs[i][1];
  110    -1 
  111    -1                     if (getValue(value, data)) {
  112    -1                         results.push(key);
  113    -1                     }
  114    -1                 }
   -1    99             return function(data) {
   -1   100                 var results = _.map(_.filter(pairs, function(pair) {
   -1   101                     return getValue(pair[1], data);
   -1   102                 }), function(pair) {
   -1   103                     return pair[0];
   -1   104                 });
  115   105 
  116   106                 return $.escapeHtml(results.join(' '));
  117   107             };
  118   108         }
  119    -1 
  120    -1         return {
  121    -1             render: function(data) {
  122    -1                 return render(data) + next.render(data, loopName);
  123    -1             },
  124    -1             afterBlock: next.afterBlock
  125    -1         };
  126   109     };
  127   110 
  128   111     /**
  129   112      * @param {string} tag
  130   113      * @param {string} afterTag
  131    -1      * @param {string} loopName
  132   114      * @param {boolean} [inverted]
  133   115      * @return {{render: function(*): string, afterBlock: string}}
  134   116      * @nosideeffects
  135   117      */
  136    -1     var parseLoop = function(tag, afterTag, loopName, inverted) {
   -1   118     var parseLoop = function(tag, afterTag, inverted) {
  137   119         var inner = parseTemplate(afterTag, tag);
  138    -1         var next = parseTemplate(inner.afterBlock, loopName);
  139   120 
  140   121         return {
  141   122             render: function(data) {
@@ -156,46 +137,15 @@ define('muu-template', ['muu-js-helpers', 'muu-dom-helpers'], function(_, $) {
  156   137                     }
  157   138                 }
  158   139 
  159    -1                 return result + next.render(data);
   -1   140                 return result;
  160   141             },
  161    -1             afterBlock: next.afterBlock
   -1   142             afterBlock: inner.afterBlock
  162   143         };
  163   144     };
  164   145 
  165   146     /**
  166    -1      * @param {string} tag
  167    -1      * @param {string} afterTag
  168    -1      * @param {string} loopName
  169    -1      * @return {{render: function(*): string, afterBlock: string}}
  170    -1      * @nosideeffects
  171    -1      */
  172    -1     var parseClose = function(tag, afterTag, loopName) {
  173    -1         if (tag === loopName) {
  174    -1             return {
  175    -1                 render: function(data) {
  176    -1                     return '';
  177    -1                 },
  178    -1                 afterBlock: afterTag
  179    -1             };
  180    -1         } else {
  181    -1             throw new Error('unexpected closing loop: ' + tag);
  182    -1         }
  183    -1     };
  184    -1 
  185    -1     /**
  186    -1      * @param {string} tag
  187    -1      * @param {string} afterTag
  188    -1      * @param {string} loopName
  189    -1      * @return {{render: function(*): string, afterBlock: string}}
  190    -1      * @nosideeffects
  191    -1      */
  192    -1     var parseComment = function(tag, afterTag, loopName) {
  193    -1         return parseTemplate(afterTag, loopName);
  194    -1     };
  195    -1 
  196    -1     /**
  197   147      * @param {string} template
  198    -1      * @param {string} loopName
   -1   148      * @param {string} [loopName]
  199   149      * @return {{render: function(*): string, afterBlock: string}}
  200   150      * @nosideeffects
  201   151      */
@@ -204,9 +154,7 @@ define('muu-template', ['muu-js-helpers', 'muu-dom-helpers'], function(_, $) {
  204   154         if (openIndex === -1) {
  205   155             if (loopName === undefined) {
  206   156                 return {
  207    -1                     render: function(data) {
  208    -1                         return template;
  209    -1                     },
   -1   157                     render: function() { return template; },
  210   158                     afterBlock: ''
  211   159                 };
  212   160             } else {
@@ -223,33 +171,45 @@ define('muu-template', ['muu-js-helpers', 'muu-dom-helpers'], function(_, $) {
  223   171             var tag = tmp.slice(openTag.length, closeIndex);
  224   172             var afterTag = tmp.slice(closeIndex + closeTag.length);
  225   173 
  226    -1             var next;
   -1   174             var loadNext = true;
   -1   175             var current = {
   -1   176                 render: function() { return ''; },
   -1   177                 afterBlock: afterTag
   -1   178             };
   -1   179 
  227   180             if (tag.lastIndexOf('#', 0) === 0) {
  228    -1                 next = parseLoop(tag.substr(1), afterTag, loopName);
   -1   181                 current = parseLoop(tag.substr(1), afterTag);
  229   182             } else if (tag.lastIndexOf('^', 0) === 0) {
  230    -1                 next = parseLoop(tag.substr(1), afterTag, loopName, true);
  231    -1             } else if (tag.lastIndexOf('!', 0) === 0) {
  232    -1                 next = parseComment(tag.substr(1), afterTag, loopName);
   -1   183                 current = parseLoop(tag.substr(1), afterTag, true);
  233   184             } else if (tag.lastIndexOf('/', 0) === 0) {
  234    -1                 next = parseClose(tag.substr(1), afterTag, loopName);
  235    -1             } else {
  236    -1                 next = parseVariable(tag, afterTag, loopName);
   -1   185                 loadNext = false;
   -1   186                 if (tag.substr(1) !== loopName) {
   -1   187                     throw new Error('unexpected closing loop: ' + tag);
   -1   188                 }
   -1   189             } else if (tag.lastIndexOf('!', 0) !== 0) {
   -1   190                 current.render = parseVariable(tag);
  237   191             }
  238   192 
  239    -1             return {
  240    -1                 render: function(data) {
  241    -1                     return beforeTag + next.render(data);
  242    -1                 },
  243    -1                 afterBlock: next.afterBlock
  244    -1             };
   -1   193             if (loadNext) {
   -1   194                 var next = parseTemplate(current.afterBlock, loopName);
   -1   195                 return {
   -1   196                     render: function(data) {
   -1   197                         return beforeTag + current.render(data) + next.render(data);
   -1   198                     },
   -1   199                     afterBlock: next.afterBlock
   -1   200                 };
   -1   201             } else {
   -1   202                 return {
   -1   203                     render: function(data) {
   -1   204                         return beforeTag + current.render(data);
   -1   205                     },
   -1   206                     afterBlock: current.afterBlock
   -1   207                 };
   -1   208             }
  245   209         }
  246   210     };
  247   211 
  248   212     return function(template, data) {
  249    -1         var parsed = parseTemplate(template);
  250    -1         if (parsed.afterBlock) {
  251    -1             throw new Error('non-empty afterBlock');
  252    -1         }
  253    -1         return parsed.render(data);
   -1   213         return parseTemplate(template).render(data);
  254   214     };
  255   215 });