35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Simple JavaScript Templating
 | |
| // John Resig - http://ejohn.org/ - MIT Licensed
 | |
| (function(){
 | |
|   var cache = {};
 | |
|   
 | |
|   this.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;
 | |
|   };
 | |
| })(); |