Skip to content

Instantly share code, notes, and snippets.

@akorchev
Created March 8, 2011 12:11
Show Gist options
  • Save akorchev/860205 to your computer and use it in GitHub Desktop.
Save akorchev/860205 to your computer and use it in GitHub Desktop.
(function() {
var cache = {};
this.tmpl2 = 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("data",
"var p=[];" +
// Introduce the data as local variables using with(){}
"p.push('" +
// Convert the template into pure JavaScript
str.replace(/[\r\t\n]/g, " ")
.replace(/'(?=[^%]*%>)/g,"\t")
.split("'").join("\\'")
.split("\t").join("'")
.replace(/<%=(.+?)%>/g, "',$1,'")
.split("<%").join("');")
.split("%>").join("p.push('")
+ "');return p.join('');");
// Provide some basic currying to the user
return data ? fn(data) : fn;
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment