Created
September 17, 2011 19:58
-
-
Save cmilfont/1224299 to your computer and use it in GitHub Desktop.
Revisions
-
cmilfont created this gist
Sep 17, 2011 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,48 @@ var objeto = { nome: "Christiano Milfont", telefone: "23423423", idade: 18, paginacao: function(name) { return name; } }; var template = "<div> #{paginacao(nome)} #{nome} \ - #{telefone} - #{ (idade >= 18)? \"permitido\": \"proibido\" }</div>"; function Engine(tmpl) { var _pattern = /\#\{([^}]+)\}/g; var _json = {}; this.compiled; this.mapa = {}; var copiar = function(origem, destino) { for(var propriedade in origem) { destino[propriedade] = origem[propriedade]; } }; this.parse = function(json) { var self = this; _json = json; return this.compiled.replace(_pattern, function(match, value, index){ var parser = self.mapa[value]; return parser(json, copiar); }); }; this.construir = function(index, expression) { var corpo = "copiar(self, this);"; corpo += (" return " + expression + ";"); this.mapa[index] = new Function("self", "copiar", corpo); }; this.compile = function() { var self = this; this.compiled = tmpl.replace(_pattern, function(match, expression, index){ self.construir(index, expression); return "#{" + index + "}"; }); return this; } } var engine = new Engine(template).compile(); console.log(engine); engine.parse(objeto);