X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Roo%2FDomTemplate.js;h=3ffe06071494d9b7b4b7d78fc4e2adccc61c2b14;hb=0b69a11b1055a6d3a3fd0719bdd58b5a235de0e4;hp=a4b783c3c6e7606f1931332f6dc7d3604a6a9730;hpb=b80f5348032d28d20113e05ac3842b1d5b771bee;p=roojs1 diff --git a/Roo/DomTemplate.js b/Roo/DomTemplate.js index a4b783c3c6..3ffe060714 100644 --- a/Roo/DomTemplate.js +++ b/Roo/DomTemplate.js @@ -27,10 +27,10 @@ * The tpl tag:

-        <div roo-for="a_variable or condition.."></tpl>
-        <tpl roo-if="a_variable or condition"></tpl>
-        <tpl roo-exec="some javascript"></tpl>
-        <tpl roo-name="named_template"></tpl> 
+        <div roo-for="a_variable or condition.."></div>
+        <div roo-if="a_variable or condition"></div>
+        <div roo-exec="some javascript"></div>
+        <div roo-name="named_template"></div> 
   
 
* @@ -38,9 +38,9 @@ Roo.DomTemplate = function() { Roo.DomTemplate.superclass.constructor.apply(this, arguments); - if (this.html) { + if (this.html) { this.compile(); - } + } }; @@ -71,8 +71,8 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { * x.t:(test,tesT) * */ - re : /\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, - + re : /(\{|\%7B)([\w-\.]+)(?:\:([\w\.]*)(?:\(([^)]*?)?\))?)?(\}|\%7D)/g, + //re : /\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, iterChild : function (node, method) { @@ -99,9 +99,21 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { var s = this.html; // covert the html into DOM... + var doc = false; + var div =false; + try { + doc = document.implementation.createHTMLDocument(""); + doc.documentElement.innerHTML = this.html ; + div = doc.documentElement; + } catch (e) { + // old IE... - nasty -- it causes all sorts of issues.. with + // images getting pulled from server.. + div = document.createElement('div'); + div.innerHTML = this.html; + } + //doc.documentElement.innerHTML = htmlBody + - var div = document.createElement('div'); - div.innerHTML = this.html ; this.tpls = []; var _t = this; @@ -111,7 +123,7 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { // create a top level template from the snippet.. - Roo.log(div.innerHTML); + //Roo.log(div.innerHTML); var tpl = { uid : 'master', @@ -184,7 +196,7 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { if (!tpl.attr) { // just itterate children.. - this.iterChild(node,this.compileNode) + this.iterChild(node,this.compileNode); return; } tpl.uid = this.id++; @@ -194,16 +206,24 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { var placeholder = document.createTextNode('{domtpl' + tpl.uid + '}'); node.parentNode.replaceChild(placeholder, node); } else { - node.parentNode.removeChild(node); + + var placeholder = document.createElement('span'); + placeholder.className = 'roo-tpl-' + tpl.value; + node.parentNode.replaceChild(placeholder, node); } // parent now sees '{domtplXXXX} - this.iterChild(node,this.compileNode) + this.iterChild(node,this.compileNode); // we should now have node body... var div = document.createElement('div'); div.appendChild(node); tpl.dom = node; + // this has the unfortunate side effect of converting tagged attributes + // eg. href="{...}" into %7C...%7D + // this has been fixed by searching for those combo's although it's a bit hacky.. + + tpl.body = div.innerHTML; @@ -238,8 +258,14 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { }, + + + + /** * Compile a segment of the template into a 'sub-template' + * + * * * */ @@ -247,19 +273,26 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { { var fm = Roo.util.Format; var useF = this.disableFormats !== true; + var sep = Roo.isGecko ? "+\n" : ",\n"; + var undef = function(str) { - Roo.log("Property not found :" + str); + Roo.debug && Roo.log("Property not found :" + str); return ''; }; + + //Roo.log(tpl.body); + + - var fn = function(m, name, format, args) + var fn = function(m, lbrace, name, format, args) { + //Roo.log("ARGS"); //Roo.log(arguments); args = args ? args.replace(/\\'/g,"'") : args; //["{TEST:(a,b,c)}", "TEST", "", "a,b,c", 0, "{TEST:(a,b,c)}"] if (typeof(format) == 'undefined') { - format= 'htmlEncode'; + format = 'htmlEncode'; } if (format == 'raw' ) { format = false; @@ -300,7 +333,7 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { return "'"+ sep + udef_st + format + name + args + "))"+sep+"'"; } - if (args.length) { + if (args && args.length) { // called with xxyx.yuu:(test,test) // change to () return "'"+ sep + udef_st + name + '(' + args + "))"+sep+"'"; @@ -351,7 +384,7 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { try { if(t.ifCall && !t.ifCall.call(this, values, parent)){ - Roo.log('if call on ' + t.value + ' return false') + Roo.debug && Roo.log('if call on ' + t.value + ' return false'); return ''; } } catch(e) { @@ -377,7 +410,14 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { if(t.forCall && vs instanceof Array){ var buf = []; for(var i = 0, len = vs.length; i < len; i++){ - buf[buf.length] = t.compiled.call(this, vs[i], parent); + try { + buf[buf.length] = t.compiled.call(this, vs[i], parent); + } catch (e) { + Roo.log('Xtemplate.applySubTemplate('+ id+ '): Exception thrown on body="' + t.value + '" - ' + e.toString()); + Roo.log(e.body); + //Roo.log(t.compiled); + Roo.log(vs[i]); + } } return buf.join(''); } @@ -410,7 +450,7 @@ Roo.extend(Roo.DomTemplate, Roo.Template, { }); -Roo.XTemplate.from = function(el){ +Roo.DomTemplate.from = function(el){ el = Roo.getDom(el); - return new Roo.XTemplate(el.value || el.innerHTML); + return new Roo.Domtemplate(el.value || el.innerHTML); }; \ No newline at end of file