/* * Ext JS Library 2.0 Copyright(c) 2006-2007, Ext JS, LLC. licensing@extjs.com * * http://extjs.com/license */ Ext.XTemplate = function() { Ext.XTemplate.superclass.constructor.apply(this, arguments); var P = this.html; P = ["", P, ""].join(""); var O = /]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/; var N = /^]*?for="(.*?)"/; var L = /^]*?if="(.*?)"/; var J = /^]*?exec="(.*?)"/; var C, B = 0; var G = []; while (C = P.match(O)) { var M = C[0].match(N); var K = C[0].match(L); var I = C[0].match(J); var E = null, H = null, D = null; var A = M && M[1] ? M[1] : ""; if (K) { E = K && K[1] ? K[1] : null; if (E) { H = new Function("values", "parent", "xindex", "xcount", "with(values){ return " + (Ext.util.Format.htmlDecode(E)) + "; }") } } if (I) { E = I && I[1] ? I[1] : null; if (E) { D = new Function("values", "parent", "xindex", "xcount", "with(values){ " + (Ext.util.Format.htmlDecode(E)) + "; }") } } if (A) { switch (A) { case "." : A = new Function("values", "parent", "with(values){ return values; }"); break; case ".." : A = new Function("values", "parent", "with(values){ return parent; }"); break; default : A = new Function("values", "parent", "with(values){ return " + A + "; }") } } G.push({ id : B, target : A, exec : D, test : H, body : C[1] || "" }); P = P.replace(C[0], "{xtpl" + B + "}"); ++B } for (var F = G.length - 1; F >= 0; --F) { this.compileTpl(G[F]) } this.master = G[G.length - 1]; this.tpls = G }; Ext.extend(Ext.XTemplate, Ext.Template, { re : /\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g, codeRe : /\{\[((?:\\\]|.|\n)*?)\]\}/g, applySubTemplate : function(A, H, G, D, C) { var J = this.tpls[A]; if (J.test && !J.test.call(this, H, G, D, C)) { return "" } if (J.exec && J.exec.call(this, H, G, D, C)) { return "" } var I = J.target ? J.target.call(this, H, G) : H; G = J.target ? H : G; if (J.target && I instanceof Array) { var B = []; for (var E = 0, F = I.length; E < F; E++) { B[B.length] = J.compiled.call(this, I[E], G, E + 1, F) } return B.join("") } return J.compiled.call(this, I, G, D, C) }, compileTpl : function(tpl) { var fm = Ext.util.Format; var useF = this.disableFormats !== true; var sep = Ext.isGecko ? "+" : ","; var fn = function(m, name, format, args, math) { if (name.substr(0, 4) == "xtpl") { return "'" + sep + "this.applySubTemplate(" + name.substr(4) + ", values, parent, xindex, xcount)" + sep + "'" } var v; if (name === ".") { v = "values" } else { if (name === "#") { v = "xindex" } else { if (name.indexOf(".") != -1) { v = name } else { v = "values['" + name + "']" } } } if (math) { v = "(" + v + math + ")" } if (format && useF) { args = args ? "," + args : ""; if (format.substr(0, 5) != "this.") { format = "fm." + format + "(" } else { format = "this.call(\"" + format.substr(5) + "\", "; args = ", values" } } else { args = ""; format = "(" + v + " === undefined ? '' : " } return "'" + sep + format + v + args + ")" + sep + "'" }; var codeFn = function(m, code) { return "'" + sep + "(" + code + ")" + sep + "'" }; var body; if (Ext.isGecko) { body = "tpl.compiled = function(values, parent, xindex, xcount){ return '" + tpl.body.replace(/(\r\n|\n)/g, "\\n") .replace(/'/g, "\\'").replace(this.re, fn).replace( this.codeRe, codeFn) + "';};" } else { body = ["tpl.compiled = function(values, parent, xindex, xcount){ return ['"]; body.push(tpl.body.replace(/(\r\n|\n)/g, "\\n") .replace(/'/g, "\\'").replace(this.re, fn).replace( this.codeRe, codeFn)); body.push("'].join('');};"); body = body.join("") } eval(body); return this }, apply : function(A) { return this.master.compiled.call(this, A, {}, 1, 1) }, applyTemplate : function(A) { return this.master.compiled.call(this, A, {}, 1, 1) }, compile : function() { return this } }); Ext.XTemplate.from = function(A) { A = Ext.getDom(A); return new Ext.XTemplate(A.value || A.innerHTML) };