From beae9655292b70854e0886ba6d25409de207eebb Mon Sep 17 00:00:00 2001 From: bodqhrohro Date: Sun, 9 Aug 2015 00:05:21 +0300 Subject: [PATCH 1/2] created deepClone --- deepClone.js | 9 +++++++++ index.htm | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 deepClone.js create mode 100644 index.htm 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..d58f2a3 --- /dev/null +++ b/index.htm @@ -0,0 +1,14 @@ + + + + + + + + + + + + From 269e13537fed83db6353d1c94ef46e0708ef7904 Mon Sep 17 00:00:00 2001 From: bodqhrohro Date: Mon, 10 Aug 2015 07:37:12 +0300 Subject: [PATCH 2/2] created template() --- index.htm | 13 ++++++++++ template.js | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 template.js diff --git a/index.htm b/index.htm index d58f2a3..2684a21 100644 --- a/index.htm +++ b/index.htm @@ -4,8 +4,21 @@ + 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; +}