Skip to content

Instantly share code, notes, and snippets.

@Rubentxu
Created December 2, 2015 16:08
Show Gist options
  • Save Rubentxu/540bb914829b7fb43ae1 to your computer and use it in GitHub Desktop.
Save Rubentxu/540bb914829b7fb43ae1 to your computer and use it in GitHub Desktop.
/* * Funcion render Template. * El codigo en javascript debe estar envuelto entre #{ codigo.. }# * El modelo de datos debe estar envuelto entre #{= data.loquesea }# * La parte html va sin restrinciones. * a la funcion renderTmpl le pasamos la variable contenedora de la plantilla y el modelo de datos a usar en la plantilla. * La plantilla debe es…
/*
* Funcion render Template.
* El codigo en javascript debe estar envuelto entre #{ codigo.. }#
* El modelo de datos debe estar envuelto entre #{= data.loquesea }#
* La parte html va sin restrinciones.
* a la funcion renderTmpl le pasamos la variable contenedora de la plantilla y el modelo de datos a usar en la plantilla.
* La plantilla debe estar un comentario multilinea dentro de una funcion.
* -- rdcabrera --
*/
//Ejemplo:
//renderTmpl("/*<span>#{= user.name }#</span>*/", { user : { name : "Juan Nadie" } })
(function(){
var cache = {};
this.renderTmpl = function tmpl(stra, data){
var result = "";
try {
stra = stra.toString();
var str = stra.substring(stra.indexOf("/*") + 2, stra.indexOf("*/"));
var fn = !/\W/.test(str) ?
cache[str] = cache[str] :
new Function("obj",
"var p=[],print=function(){p.push.apply(p,arguments);};" +
"with(obj){p.push('" +
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('');");
result = data ? fn(data) : fn({});
} catch(err) {
(console.error || console.log).call(console, err.stack || err);
}
return result;
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment