diff --git a/deepClone.js b/deepClone.js new file mode 100644 index 0000000..604feb4 --- /dev/null +++ b/deepClone.js @@ -0,0 +1,9 @@ +function deepClone(src) { + var copy = Array.isArray(src) ? [] : {}; + for (var item in src) { + copy[item] = typeof src[item] == 'object' ? + deepClone(src[item]) : + src[item]; + } + return copy; +} diff --git a/index.htm b/index.htm new file mode 100644 index 0000000..2684a21 --- /dev/null +++ b/index.htm @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/template.js b/template.js new file mode 100644 index 0000000..03c106a --- /dev/null +++ b/template.js @@ -0,0 +1,69 @@ +function template(str, vars) { + if (!vars) { + vars = {}; + } + + var rawCommand = function(str) { + return str.trim(); + }; + + var tagPos = {}, argv, substrs = {}, rep; + + while ((tagPos.bb = str.search(/\[\[(.*?)\]\]/)) != -1) { + rep = ''; + tagPos.be = str.indexOf(']]', tagPos.bb); + substrs.btag = str.substring(tagPos.bb+2, tagPos.be); + + var argv = substrs.btag.split(' '); + argv = argv.filter(function(item) { + return item != ''; + }); + + tagPos.eb = str.indexOf('[[/'+argv[0]+']]', tagPos.be+2); + if (tagPos.eb > -1) { + tagPos.ee = str.indexOf(']]', tagPos.eb); + } + substrs.inner = str.substring(tagPos.be+2, tagPos.eb); + //substrs.etag = str.substring(tagPos.eb+2, tagPos.ee); + + if (tagPos.eb > -1) { + switch (argv[0]) { + case 'each': + if (argv.length == 4 && argv[2] == 'in') { + var extVars = deepClone(vars); + for (var key in vars[argv[3]]) { + extVars[argv[1]] = vars[argv[3]][key]; + rep += template(substrs.inner, extVars); + } + break; + } // else default + case 'repeat': + if (argv.length == 2 && parseInt(argv[1]) != NaN) { + for (var i=0; i -1 ? + tagPos.ee+2 : + tagPos.be+2 + ); + + tagPos.eb = null; + tagPos.ee = null; + } + + return str; +}