Comparing version 0.1.6 to 0.1.7
{ | ||
"name": "combyne", | ||
"description": "Templating that works *hopefully* the way you'd expect.", | ||
"version": "0.1.6", | ||
"version": "0.1.7", | ||
"author": "Tim Branyen <tim@tabdeveloper.com> (http://twitter.com/tbranyen)", | ||
@@ -6,0 +6,0 @@ "main": "./src/combyne.js", |
@@ -1,3 +0,3 @@ | ||
combyne.js: A template engine that *hopefully* works the way you'd expect. | ||
========================================================================== | ||
combyne.js: A template engine that works the way you'd expect. | ||
============================================================== | ||
@@ -36,4 +36,4 @@ Getting started | ||
``` javascript | ||
var tmpl = combyne('{{test}}', { test: 'lol' }); | ||
tmpl.render(); // lol | ||
var tmpl = combyne('{{test}}'); | ||
tmpl.render({ test: 'lol' }); // lol | ||
``` | ||
@@ -76,3 +76,3 @@ | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
tmpl.delimiters = { | ||
@@ -83,18 +83,6 @@ START_PROP: '[[', | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output = 'test' | ||
``` | ||
####You can also change delimiters within loops#### | ||
``` javascript | ||
var template = '{%each arr as _%}{{_}}{%endeach%}'; | ||
var context = { arr: [1,2,3] }; | ||
var tmpl = combyne(template, context); | ||
var output = tmpl.render(); | ||
/// output = '123' | ||
``` | ||
###Replacing template variables### | ||
@@ -106,5 +94,5 @@ | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == 'test' | ||
@@ -119,3 +107,3 @@ ``` | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
tmpl.filters.add('reverse', function(val) { | ||
@@ -125,3 +113,3 @@ return val.split('').reverse().join(''); | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == 'tset' | ||
@@ -136,3 +124,3 @@ ``` | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
tmpl.filters.add('reverse', function(val) { | ||
@@ -145,3 +133,3 @@ return val.split('').reverse().join(''); | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == 'TSET' | ||
@@ -161,5 +149,5 @@ ``` | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == 'why not?' | ||
@@ -174,5 +162,5 @@ ``` | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == 'goodbye!' | ||
@@ -188,10 +176,22 @@ ``` | ||
var template = '{%each test%}{{.}} {%endeach%}'; | ||
var context = { lol: [1,2,3,4] }; | ||
var context = { test: [1,2,3,4] }; | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == '1 2 3 4 ' | ||
``` | ||
####You can change the iterated name within loops as well#### | ||
``` javascript | ||
var template = '{%each arr as _%}{{_}}{%endeach%}'; | ||
var context = { arr: [1,2,3] }; | ||
var tmpl = combyne(template); | ||
var output = tmpl.render(context); | ||
/// output = '123' | ||
``` | ||
###Iterating objects### | ||
@@ -207,5 +207,5 @@ | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == 'the hello is lol' | ||
@@ -220,3 +220,3 @@ ``` | ||
var tmpl = combyne(template, context); | ||
var tmpl = combyne(template); | ||
@@ -227,3 +227,3 @@ tmpl.partials.add('test', '{{name}}', { | ||
var output = tmpl.render(); | ||
var output = tmpl.render(context); | ||
/// output == 'hello you' | ||
@@ -230,0 +230,0 @@ ``` |
@@ -1,2 +0,2 @@ | ||
/* combyne.js v0.1.6 | ||
/* combyne.js v0.1.7 | ||
* Copyright 2011, Tim Branyen (@tbranyen) | ||
@@ -7,2 +7,20 @@ * combyne.js may be freely distributed under the MIT license. | ||
var toString = Object.prototype.toString; | ||
var specialCharsExp = /[\^$\\\/.*+?()[\]{}|]/g; | ||
// Escape any delimiters assigned | ||
var escDelimiter = function() { | ||
var cache = {}; | ||
return function(delimiter) { | ||
if (cache[delimiter]) { | ||
return cache[delimiter]; | ||
} | ||
cache[delimiter] = delimiter.replace(specialCharsExp,"\\$&"); | ||
return cache[delimiter]; | ||
}; | ||
}(); | ||
// Mutable __proto__ polyfill | ||
@@ -25,2 +43,3 @@ function proto(obj, original) { | ||
// Object.keys polyfill | ||
function getKeys(obj) { | ||
@@ -39,3 +58,35 @@ var key; | ||
var toString = Object.prototype.toString; | ||
// From MDC | ||
if (!Array.prototype.indexOf) { | ||
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { | ||
"use strict"; | ||
if (this === void 0 || this === null) { | ||
throw new TypeError(); | ||
} | ||
var t = Object(this); | ||
var len = t.length >>> 0; | ||
if (len === 0) { | ||
return -1; | ||
} | ||
var n = 0; | ||
if (arguments.length > 0) { | ||
n = Number(arguments[1]); | ||
if (n !== n) { // shortcut for verifying if it's NaN | ||
n = 0; | ||
} else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) { | ||
n = (n > 0 || -1) * Math.floor(Math.abs(n)); | ||
} | ||
} | ||
if (n >= len) { | ||
return -1; | ||
} | ||
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); | ||
for (; k < len; k++) { | ||
if (k in t && t[k] === searchElement) { | ||
return k; | ||
} | ||
} | ||
return -1; | ||
} | ||
} | ||
@@ -263,4 +314,3 @@ // Tokenizer | ||
} | ||
if (error = tokenizer(partial.template, stack)) { | ||
else if (error = tokenizer(partial.template, stack)) { | ||
if (self.debug) { | ||
@@ -282,3 +332,5 @@ throw new Error(error); | ||
// Parse the partial | ||
innerText = render(self, partial.context, stack, _delimiters); | ||
if (partial && partial.context) { | ||
innerText = render(self, partial.context, stack, _delimiters); | ||
} | ||
@@ -290,3 +342,3 @@ // Reset output and mode | ||
return innerText; | ||
return innerText || ""; | ||
} | ||
@@ -449,6 +501,2 @@ | ||
} | ||
// Keep brackets | ||
else { | ||
output += delimiters.START_PROP + obj.prop + delimiters.END_PROP; | ||
} | ||
@@ -755,8 +803,3 @@ mode.unset("prop"); | ||
var main = function() { | ||
var specialCharsExp = /[\^$\\\/.*+?()[\]{}|]/g; | ||
function escDelimiter(delimiter) { | ||
return delimiter.replace(specialCharsExp,"\\$&") | ||
} | ||
return function(self, template, context, delimiters) { | ||
@@ -832,8 +875,10 @@ var string, sp, ep, se, ee, co, fi; | ||
combyne.version = "0.1.6"; | ||
combyne.version = "0.1.7"; | ||
combyne.prototype = { | ||
render: function() { | ||
render: function(context) { | ||
var self = this; | ||
// Maintain backwards compatibility | ||
self.context = context || self.context; | ||
// Missing template or context... can't exactly do anything here... | ||
@@ -840,0 +885,0 @@ if (!self.template || !self.context) { |
/* combyne.js v0.1.6 | ||
* Copyright 2011, Tim Branyen (@tbranyen) | ||
* combyne.js may be freely distributed under the MIT license. | ||
*/(function(a){function i(a){var b=this,c;return function(){c=c?c:{original:b.template};return a.apply(c,arguments)}}function h(a,b){function c(){return{_cache:{},get:function(a){return this._cache[a]},remove:function(a){delete this._cache[a]}}}if(!(this instanceof h))return new h(a,b);this.template=a,this.context=b||{},this.filters=c(),this.filters.add=function(a,b){this._cache[a]=i(b)},this.partials=c(),this.partials.add=function(a,b,c){this._cache[a]={template:b,context:c}}}function c(a){var b,c=[];for(b in a){if(!a.hasOwnProperty(b))continue;c.push(b)}return c}function b(a,b){function e(){}var c,d;e.prototype=b,c=new e;for(d in a){if(!a.hasOwnProperty(d))continue;c[d]=a[d]}return c}var d=Object.prototype.toString,e=function(){var a;return function(b,d,e){a=e=e||a;var f,g,h,i=c(e),j=i.length,k=0;while(b.length)for(k=0;k<j;k++){h=i[k];if(f=e[h].exec(b))g={name:h,captures:f},b=b.replace(e[h],""),f[0]&&d.push(g)}}}(),f=function(){function p(a,b,c,d,g){var h,k,l,m=[],n=c[0],o=a.partials.get(n);if(o==null&&a.debug)throw new Error("Partial "+n+" not found");if(error=e(o.template,m))if(a.debug)throw new Error(error);m.reverse(),h=j,k=g.get(),j="",g.clear(),l=f(a,o.context,m,i),j=h,g.set(k),g.unset("skip");return l}function o(a,b,c,d){var e,f,g,h,i,j,k=b.length,m=!0,n={"==":function(a,b){if(a==b)return!0;return!1},"!=":function(a,b){if(a!=b)return!0;return!1},">":function(a,b){if(a>b)return!0;return!1},">=":function(a,b){if(this["=="](a,b)||this[">"](a,b))return!0;return!1},"<":function(a,b){if(a<b)return!0;return!1},"<=":function(a,b){if(this["=="](a,b)||this["<"](a,b))return!0;return!1},not:function(a){return!a}};for(e=0;e<k;e++){f=isNaN(b[e])?b[e]+"":+b[e];if(f==="not"){j=!0;continue}if(n[f]){i=f;continue}f=l(f,c);if(j){j=undefined;if(g===undefined){g=n.not(f);continue}h=f;continue}if(g===undefined){g=f;continue}h=f;break}i?n[i]?m=n[i](g,h):m=!1:m=g;return m}function n(a,b){function d(a){var b,e=c.shift();b=a[e];if(b!=null)return c.length?d(b):b}var c=a.split(".");if(c.length)return d(b)}function m(a,b,c,d,e,f){var g,h,i=a.filters.get(b);if(i==null){i=function(){return d};if(a.debug)throw new Error("Filter "+b+" not found")}for(g=0,h=c.length;g<h;g++)c[g]=l(c[g],e);c.unshift(d),f.unset("filter");return i.apply(d,c)}function l(a,b){var c=/\'|\"/gi;c.exec(a)?a=a.replace(c,""):isNaN(a)?typeof a=="string"&&(a=b[a]!=null?b[a]:n(a,b),typeof a=="function"&&(a=a())):a=+a;return a}var a,g,h,i,j="",k="",q=function(){var a=[];return{set:function(b){a=a.concat(b)},get:function(){return a},unset:function(b){a.splice(a.indexOf(b),1)},exists:function(b){return~a.indexOf(b)},clear:function(){a=[]},count:function(b){var c,d;for(c=d=0;~(d=a.indexOf(b,d));c++);return c}}}(),r=function(){var a,d,h,k,l,m,n=[];return{execArray:function(c,d,h,n){var o,p;a=q.get(),q.unset("loop");if(d&&d.length)for(o=0,p=d.length;o<p;o++){k=[];if(l=e(g,k))if(c.debug)throw new Error(l);k.reverse(),m={i:o,length:p,original:d},m[h.index||"."]=d[o],typeof d[o]=="object"?(m=b(m,d[o]),d[o]=b(d[o],n)):m=b(m,n),j=f(c,m,k,i)}q.set(a),g=j},execObj:function(n,o,p,r){var s,t;a=q.get(),q.unset("loop"),h=o?c(o):[];if(h.length)for(s=0,t=h.length;s<t;s++){d=h[s],k=[];if(l=e(g,k))if(n.debug)throw new Error(l);k.reverse(),m={original:o},m[p.key||"."]=d,m[p.obj||"original"]=o,m[p.val||"$"]=o[d],typeof o[d]=="object"?(m=b(m,o[d]),o[d]=b(o[d],r)):m=b(m,r),j=f(n,m,k,i)}q.set(a)},clear:function(){n=[]}}}();return function(b,c,e,n){var s,t,u,v=e.pop(),w=v.captures[0];i=n||i;switch(v.name){case"START_PROP":if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}q.set("prop");break;case"END_PROP":if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}typeof a!="object"?j+=a:j+=n.START_PROP+a.prop+n.END_PROP,q.unset("prop");break;case"START_EXPR":q.set("expr");if(q.exists("skip"))break;q.exists("loop")&&(g+=w);break;case"END_EXPR":q.unset("expr");if(q.exists("skip")){a==="--"&&q.unset("skip");break}q.exists("loop")&&(g+=w),q.exists("partial")&&(j+=a,q.unset("partial")),a==="endeach"&&q.unset("loop");break;case"OTHER":if(q.exists("prop")){if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}a=l(w,c),a==null&&(a={prop:w})}else if(q.exists("filter")){if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}s=w.split(" "),t=s.shift(),u=s,a=m(b,t,u,a,c,q),q.set("string")}else if(q.exists("expr")){s=w.split(" "),t=s.shift(),u=s;if(t==="if"||t==="elsif"){if(!q.exists("else")&&q.exists("skip"))break;q.exists("else")&&q.unset("else");if(q.exists("loop")){g+=w;break}if(u.length<1){if(b.debug)throw new Error("No arguments supplied for if statement")}else if(u.length===1){if(!l(u[0],c)){q.set("else"),q.set("skip");break}}else o(b,u,c)?q.unset("skip"):(q.set("else"),q.set("skip"))}else if(t==="else")q.exists("else")?q.unset("skip"):q.exists("skip")||q.set("skip");else if(t==="endif"){if(q.exists("loop")){g+=w;break}q.unset("skip")}else if(t==="each"){if(q.exists("skip"))break;if(q.exists("loop")){q.set("loop"),g+=w;break}q.set("loop");if(u.length<1){if(b.debug)throw new Error("No arguments supplied for each statement")}else d.call(c[u[0]])=="[object Array]"?(h={},a=c[u[0]],h.index=u[2],g=""):(h={},c[u[0]]&&(a=c[u[0]],h.obj=u[0],h.key=u[2],h.val=u[3],g=""))}else if(t==="endeach"){if(q.exists("skip"))break;q.unset("loop");if(!q.exists("loop"))d.call(a)=="[object Array]"?r.execArray(b,a,h,c):r.execObj(b,a,h,c),r.clear();else if(q.exists("loop")){g+=w+n.END_EXPR;break}}else if(t==="partial"){if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}s=w.split(" "),t=s.shift(),u=s,a=p(b,t,u,a,q),q.set("partial"),q.set("expr")}}else{if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}j+=w}break;case"WHITESPACE":if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}j+=w;break;case"FILTER":if(q.exists("skip"))break;if(q.exists("loop")){g+=w;break}q.unset("prop"),q.set("filter");break;case"COMMENT":if(q.exists("skip")){a="--";break}if(q.exists("loop")){g+=w;break}q.exists("expr")?q.set("skip"):j+=n.COMMENT}if(e.length)return f(b,c,e,n);k=j,q.clear(),j="",a=undefined;return k}}(),g=function(){function b(b){return b.replace(a,"\\$&")}var a=/[\^$\\\/.*+?()[\]{}|]/g;return function(a,c,d,g){var h,i,j,k,l,m,n,o=0,p=[],q={};i=b(g.START_PROP),j=b(g.END_PROP),k=b(g.START_EXPR),l=b(g.END_EXPR),m=b(g.COMMENT),n=b(g.FILTER),q.START_PROP=RegExp("^"+i),q.END_PROP=RegExp("^"+j),q.START_EXPR=RegExp("^"+k),q.END_EXPR=RegExp("^"+l),q.COMMENT=RegExp("^"+m),q.FILTER=RegExp("^"+n),h=[i,j,k,l,m,n].join("|"),q.WHITESPACE=/^[\ |\t|\r|\n]+/,q.OTHER=RegExp("^((?!"+h+").)*");if(o=e(c,p,q))if(a.debug)throw new Error(o);p.reverse();return f(a,d,p,g)}}();h.version="0.1.6",h.prototype={render:function(){var a=this;if(!a.template||!a.context)if(a.debug)throw new Error("Missing template or context");a.delimiters=a.delimiters||{},a.delimiters=b(a.delimiters,{START_PROP:"{{",END_PROP:"}}",START_EXPR:"{%",END_EXPR:"%}",COMMENT:"--",FILTER:"|"});return g(a,a.template,a.context,a.delimiters)},delimiters:{}},typeof module!="undefined"&&module.exports?(module.exports=h,module.exports.compile=function(a){return function(b){return h(a,b).render()}}):a.combyne=h})(this) | ||
*/(function(a){function k(a){var b=this,c;return function(){c=c?c:{original:b.template};return a.apply(c,arguments)}}function j(a,b){function c(){return{_cache:{},get:function(a){return this._cache[a]},remove:function(a){delete this._cache[a]}}}if(!(this instanceof j))return new j(a,b);this.template=a,this.context=b||{},this.filters=c(),this.filters.add=function(a,b){this._cache[a]=k(b)},this.partials=c(),this.partials.add=function(a,b,c){this._cache[a]={template:b,context:c}}}function f(a){var b,c=[];for(b in a){if(!a.hasOwnProperty(b))continue;c.push(b)}return c}function e(a,b){function e(){}var c,d;e.prototype=b,c=new e;for(d in a){if(!a.hasOwnProperty(d))continue;c[d]=a[d]}return c}var b=Object.prototype.toString,c=/[\^$\\\/.*+?()[\]{}|]/g,d=function(){var a={};return function(b){if(a[b])return a[b];a[b]=b.replace(c,"\\$&");return a[b]}}();Array.prototype.indexOf||(Array.prototype.indexOf=function(a){"use strict";if(this===void 0||this===null)throw new TypeError;var b=Object(this),c=b.length>>>0;if(c===0)return-1;var d=0;arguments.length>0&&(d=Number(arguments[1]),d!==d?d=0:d!==0&&d!==1/0&&d!==-Infinity&&(d=(d>0||-1)*Math.floor(Math.abs(d))));if(d>=c)return-1;var e=d>=0?d:Math.max(c-Math.abs(d),0);for(;e<c;e++)if(e in b&&b[e]===a)return e;return-1});var g=function(){var a;return function(b,c,d){a=d=d||a;var e,g,h,i=f(d),j=i.length,k=0;while(b.length)for(k=0;k<j;k++){h=i[k];if(e=d[h].exec(b))g={name:h,captures:e},b=b.replace(d[h],""),e[0]&&c.push(g)}}}(),h=function(){function p(a,b,c,d,e){var f,k,l,m=[],n=c[0],o=a.partials.get(n);if(o==null){if(a.debug)throw new Error("Partial "+n+" not found")}else if(error=g(o.template,m))if(a.debug)throw new Error(error);m.reverse(),f=j,k=e.get(),j="",e.clear(),o&&o.context&&(l=h(a,o.context,m,i)),j=f,e.set(k),e.unset("skip");return l||""}function o(a,b,c,d){var e,f,g,h,i,j,k=b.length,m=!0,n={"==":function(a,b){if(a==b)return!0;return!1},"!=":function(a,b){if(a!=b)return!0;return!1},">":function(a,b){if(a>b)return!0;return!1},">=":function(a,b){if(this["=="](a,b)||this[">"](a,b))return!0;return!1},"<":function(a,b){if(a<b)return!0;return!1},"<=":function(a,b){if(this["=="](a,b)||this["<"](a,b))return!0;return!1},not:function(a){return!a}};for(e=0;e<k;e++){f=isNaN(b[e])?b[e]+"":+b[e];if(f==="not"){j=!0;continue}if(n[f]){i=f;continue}f=l(f,c);if(j){j=undefined;if(g===undefined){g=n.not(f);continue}h=f;continue}if(g===undefined){g=f;continue}h=f;break}i?n[i]?m=n[i](g,h):m=!1:m=g;return m}function n(a,b){function d(a){var b,e=c.shift();b=a[e];if(b!=null)return c.length?d(b):b}var c=a.split(".");if(c.length)return d(b)}function m(a,b,c,d,e,f){var g,h,i=a.filters.get(b);if(i==null){i=function(){return d};if(a.debug)throw new Error("Filter "+b+" not found")}for(g=0,h=c.length;g<h;g++)c[g]=l(c[g],e);c.unshift(d),f.unset("filter");return i.apply(d,c)}function l(a,b){var c=/\'|\"/gi;c.exec(a)?a=a.replace(c,""):isNaN(a)?typeof a=="string"&&(a=b[a]!=null?b[a]:n(a,b),typeof a=="function"&&(a=a())):a=+a;return a}var a,c,d,i,j="",k="",q=function(){var a=[];return{set:function(b){a=a.concat(b)},get:function(){return a},unset:function(b){a.splice(a.indexOf(b),1)},exists:function(b){return~a.indexOf(b)},clear:function(){a=[]},count:function(b){var c,d;for(c=d=0;~(d=a.indexOf(b,d));c++);return c}}}(),r=function(){var a,b,d,k,l,m,n=[];return{execArray:function(b,d,f,n){var o,p;a=q.get(),q.unset("loop");if(d&&d.length)for(o=0,p=d.length;o<p;o++){k=[];if(l=g(c,k))if(b.debug)throw new Error(l);k.reverse(),m={i:o,length:p,original:d},m[f.index||"."]=d[o],typeof d[o]=="object"?(m=e(m,d[o]),d[o]=e(d[o],n)):m=e(m,n),j=h(b,m,k,i)}q.set(a),c=j},execObj:function(n,o,p,r){var s,t;a=q.get(),q.unset("loop"),d=o?f(o):[];if(d.length)for(s=0,t=d.length;s<t;s++){b=d[s],k=[];if(l=g(c,k))if(n.debug)throw new Error(l);k.reverse(),m={original:o},m[p.key||"."]=b,m[p.obj||"original"]=o,m[p.val||"$"]=o[b],typeof o[b]=="object"?(m=e(m,o[b]),o[b]=e(o[b],r)):m=e(m,r),j=h(n,m,k,i)}q.set(a)},clear:function(){n=[]}}}();return function(e,f,g,n){var s,t,u,v=g.pop(),w=v.captures[0];i=n||i;switch(v.name){case"START_PROP":if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}q.set("prop");break;case"END_PROP":if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}typeof a!="object"?j+=a:j+=n.START_PROP+a.prop+n.END_PROP,q.unset("prop");break;case"START_EXPR":q.set("expr");if(q.exists("skip"))break;q.exists("loop")&&(c+=w);break;case"END_EXPR":q.unset("expr");if(q.exists("skip")){a==="--"&&q.unset("skip");break}q.exists("loop")&&(c+=w),q.exists("partial")&&(j+=a,q.unset("partial")),a==="endeach"&&q.unset("loop");break;case"OTHER":if(q.exists("prop")){if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}a=l(w,f),a==null&&(a={prop:w})}else if(q.exists("filter")){if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}s=w.split(" "),t=s.shift(),u=s,a=m(e,t,u,a,f,q),q.set("string")}else if(q.exists("expr")){s=w.split(" "),t=s.shift(),u=s;if(t==="if"||t==="elsif"){if(!q.exists("else")&&q.exists("skip"))break;q.exists("else")&&q.unset("else");if(q.exists("loop")){c+=w;break}if(u.length<1){if(e.debug)throw new Error("No arguments supplied for if statement")}else if(u.length===1){if(!l(u[0],f)){q.set("else"),q.set("skip");break}}else o(e,u,f)?q.unset("skip"):(q.set("else"),q.set("skip"))}else if(t==="else")q.exists("else")?q.unset("skip"):q.exists("skip")||q.set("skip");else if(t==="endif"){if(q.exists("loop")){c+=w;break}q.unset("skip")}else if(t==="each"){if(q.exists("skip"))break;if(q.exists("loop")){q.set("loop"),c+=w;break}q.set("loop");if(u.length<1){if(e.debug)throw new Error("No arguments supplied for each statement")}else b.call(f[u[0]])=="[object Array]"?(d={},a=f[u[0]],d.index=u[2],c=""):(d={},f[u[0]]&&(a=f[u[0]],d.obj=u[0],d.key=u[2],d.val=u[3],c=""))}else if(t==="endeach"){if(q.exists("skip"))break;q.unset("loop");if(!q.exists("loop"))b.call(a)=="[object Array]"?r.execArray(e,a,d,f):r.execObj(e,a,d,f),r.clear();else if(q.exists("loop")){c+=w+n.END_EXPR;break}}else if(t==="partial"){if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}s=w.split(" "),t=s.shift(),u=s,a=p(e,t,u,a,q),q.set("partial"),q.set("expr")}}else{if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}j+=w}break;case"WHITESPACE":if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}j+=w;break;case"FILTER":if(q.exists("skip"))break;if(q.exists("loop")){c+=w;break}q.unset("prop"),q.set("filter");break;case"COMMENT":if(q.exists("skip")){a="--";break}if(q.exists("loop")){c+=w;break}q.exists("expr")?q.set("skip"):j+=n.COMMENT}if(g.length)return h(e,f,g,n);k=j,q.clear(),j="",a=undefined;return k}}(),i=function(){return function(a,b,c,e){var f,i,j,k,l,m,n,o=0,p=[],q={};i=d(e.START_PROP),j=d(e.END_PROP),k=d(e.START_EXPR),l=d(e.END_EXPR),m=d(e.COMMENT),n=d(e.FILTER),q.START_PROP=RegExp("^"+i),q.END_PROP=RegExp("^"+j),q.START_EXPR=RegExp("^"+k),q.END_EXPR=RegExp("^"+l),q.COMMENT=RegExp("^"+m),q.FILTER=RegExp("^"+n),f=[i,j,k,l,m,n].join("|"),q.WHITESPACE=/^[\ |\t|\r|\n]+/,q.OTHER=RegExp("^((?!"+f+").)*");if(o=g(b,p,q))if(a.debug)throw new Error(o);p.reverse();return h(a,c,p,e)}}();j.version="0.1.6",j.prototype={render:function(){var a=this;if(!a.template||!a.context)if(a.debug)throw new Error("Missing template or context");a.delimiters=a.delimiters||{},a.delimiters=e(a.delimiters,{START_PROP:"{{",END_PROP:"}}",START_EXPR:"{%",END_EXPR:"%}",COMMENT:"--",FILTER:"|"});return i(a,a.template,a.context,a.delimiters)},delimiters:{}},typeof module!="undefined"&&module.exports?(module.exports=j,module.exports.compile=function(a){return function(b){return j(a,b).render()}}):a.combyne=j})(this) |
@@ -6,7 +6,3 @@ var combyne = require( '../' ); | ||
// Test if obj is a true function | ||
testFunction: function( test, obj, label ) { | ||
// The object reports itself as a function | ||
test( typeof obj, 'function', label +' reports as a function.' ); | ||
// This ensures the repo is actually a derivative of the Function [[Class]] | ||
test( {}.toString.call( obj ), '[object Function]', label +' [[Class]] is of type function.' ); | ||
testFunction: function( test, obj, llabel ) { | ||
}, | ||
@@ -28,2 +24,3 @@ // Test code and handle exception thrown | ||
console.log(helper.testFunction.toString()); | ||
// Test for constructor function | ||
@@ -30,0 +27,0 @@ helper.testFunction( test.equals, combyne, 'combyne' ); |
@@ -203,4 +203,4 @@ var combyne = require( '../' ); | ||
// Each loop over object do nothing, should not do anything | ||
var tmpl3 = combyne('{%each demo%}{{key}}{%endeach%}', { demo: { lol: 'hi', you: 'me?', what: 'test' } }); | ||
test.equals( tmpl3.render(), '{{key}}{{key}}{{key}}', 'Loop over an object' ); | ||
var tmpl3 = combyne('{%each demo%}key{%endeach%}', { demo: { lol: 'hi', you: 'me?', what: 'test' } }); | ||
test.equals( tmpl3.render(), 'keykeykey', 'Loop over an object' ); | ||
@@ -207,0 +207,0 @@ // Each loop over object repeat property, |
@@ -24,2 +24,11 @@ var combyne = require( '../' ); | ||
exports.notAFilter = function( test ) { | ||
test.expect(1); | ||
var tmpl = combyne('||'); | ||
test.equals( tmpl.render(), '||', 'Doesn\'t attempt to render non-filters' ); | ||
test.done(); | ||
}; | ||
exports.propertyFilters = function( test ) { | ||
@@ -26,0 +35,0 @@ test.expect(4); |
Sorry, the diff of this file is not supported yet
124656
19
3078