forked from draeton/stitches
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtmpl.js
24 lines (19 loc) · 1.09 KB
/
tmpl.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* Simple JavaScript Templating
John Resig - http://ejohn.org/ - MIT Licensed */
(function () {
var cache = {};
Stitches.tmpl = function tmpl(str, data) {
/* Figure out if we're getting a template, or if we need to
load the template - and be sure to cache the result. */
var fn = !/\W/.test(str) ? cache[str] = cache[str] || tmpl(document.getElementById(str).innerHTML) :
/* Generate a reusable function that will serve as a template
generator (and which will be cached). */
new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" +
/* Introduce the data as local variables using with(){} */
"with(obj){p.push('" +
/* Convert the template into pure JavaScript */
str.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(/\t=(.*?)%>/g, "',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'") + "');}return p.join('');");
/* Provide some basic currying to the user */
return data ? fn(data) : fn;
};
})();