roojs-core.js
authorAlan Knowles <alan@akbkhome.com>
Sat, 7 Apr 2012 03:50:15 +0000 (11:50 +0800)
committerAlan Knowles <alan@akbkhome.com>
Sat, 7 Apr 2012 03:50:15 +0000 (11:50 +0800)
roojs-core-debug.js
roojs-ui.js
roojs-ui-debug.js
roojs-all.js
roojs-debug.js

roojs-all.js
roojs-debug.js
roojs-ui-debug.js
roojs-ui.js

index f4ebdf0..492d220 100644 (file)
@@ -1140,7 +1140,7 @@ this.store.loadRecords({records:A},{},true);},onUpdate:function(ds,A,B){if(B==Ro
 Roo.LoadMask=function(el,A){this.el=Roo.get(el);Roo.apply(this,A);if(this.store){this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.onLoadException,this);this.removeMask=false;}else {var um=this.el.getUpdateManager();um.showLoadIndicator=false;um.on('beforeupdate',this.onBeforeLoad,this);um.on('update',this.onLoad,this);um.on('failure',this.onLoad,this);this.removeMask=true;}};Roo.LoadMask.prototype={msg:'Loading...',msgCls:'x-mask-loading',disabled:false,disable:function(){this.disabled=true;},enable:function(){this.disabled=false;},onLoadException:function(){if(this.store&&typeof(this.store.reader.jsonData.errorMsg)!='undefined'){Roo.MessageBox.alert("Error loading",this.store.reader.jsonData.errorMsg);}
 this.el.unmask(this.removeMask);},onLoad:function(){this.el.unmask(this.removeMask);},onBeforeLoad:function(){if(!this.disabled){this.el.mask(this.msg,this.msgCls);}},destroy:function(){if(this.store){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.onLoadException,this);}else {var um=this.el.getUpdateManager();um.un('beforeupdate',this.onBeforeLoad,this);um.un('update',this.onLoad,this);um.un('failure',this.onLoad,this);}}};
 //Roo/XTemplate.js
-Roo.XTemplate=function(){Roo.XTemplate.superclass.constructor.apply(this,arguments);if(this.html){this.preCompile();}};Roo.extend(Roo.XTemplate,Roo.Template,{re:/\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var s=this.html;s=['<tpl>',s,'</tpl>'].join('');var re=/<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;var A=/^<tpl\b[^>]*?for="(.*?)"/;var B=/^<tpl\b[^>]*?if="(.*?)"/;var C=/^<tpl\b[^>]*?exec="(.*?)"/;var m,id=0;var D=[];while(true==!!(m=s.match(re))){var m2=m[0].match(A);var m3=m[0].match(B);var m4=m[0].match(C);var E=null,fn=null,F=null;var G=m2&&m2[1]?m2[1]:'';if(m3){E=m3&&m3[1]?m3[1]:null;if(E){fn=new Function('values','parent','with(values){ return '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(m4){E=m4&&m4[1]?m4[1]:null;if(E){F=new Function('values','parent','with(values){ '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(G){switch(G){case '.':G=new Function('values','parent','with(values){ return values; }');break;case '..':G=new Function('values','parent','with(values){ return parent; }');break;default:G=new Function('values','parent','with(values){ return '+G+'; }');}}
+Roo.XTemplate=function(){Roo.XTemplate.superclass.constructor.apply(this,arguments);if(this.html){this.compile();}};Roo.extend(Roo.XTemplate,Roo.Template,{re:/\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var s=this.html;s=['<tpl>',s,'</tpl>'].join('');var re=/<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,A=/^<tpl\b[^>]*?for="(.*?)"/,B=/^<tpl\b[^>]*?if="(.*?)"/,C=/^<tpl\b[^>]*?exec="(.*?)"/,m,id=0,D=[];while(true==!!(m=s.match(re))){var m2=m[0].match(A),m3=m[0].match(B),m4=m[0].match(C),E=null,fn=null,F=null,G=m2&&m2[1]?m2[1]:'';if(m3){E=m3&&m3[1]?m3[1]:null;if(E){fn=new Function('values','parent','with(values){ return '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(m4){E=m4&&m4[1]?m4[1]:null;if(E){F=new Function('values','parent','with(values){ '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(G){switch(G){case '.':G=new Function('values','parent','with(values){ return values; }');break;case '..':G=new Function('values','parent','with(values){ return parent; }');break;default:G=new Function('values','parent','with(values){ return '+G+'; }');}}
 D.push({id:id,target:G,exec:F,test:fn,body:m[1]||''});s=s.replace(m[0],'{xtpl'+id+'}');++id;}for(var i=D.length-1;i>=0;--i){this.compileTpl(D[i]);}
 this.master=D[D.length-1];this.tpls=D;return this;},applySubTemplate:function(id,A,B){var t=this.tpls[id];if(t.test&&!t.test.call(this,A,B)){return '';}if(t.exec&&t.exec.call(this,A,B)){return '';}var vs=t.target?t.target.call(this,A,B):A;B=t.target?A:B;if(t.target&&vs instanceof Array){var C=[];for(var i=0,D=vs.length;i<D;i++){C[C.length]=t.compiled.call(this,vs[i],B);}return C.join('');}return t.compiled.call(this,vs,B);},compileTpl:function(A){var fm=Roo.util.Format;var B=this.disableFormats!==true;var C=Roo.isGecko?"+":",";var fn=function(m,E,F,G){if(typeof(F)=='undefined'){F='htmlEncode';}if(F=='raw'){F=false;}if(E.substr(0,4)=='xtpl'){return "'"+C+'this.applySubTemplate('+E.substr(4)+', values, parent)'+C+"'";}var v;v=E;if(F&&B){G=G?','+G:"";if(F.substr(0,5)!="this."){F="fm."+F+'(';}else {F='this.call("'+F.substr(5)+'", ';G=", values";}return "'"+C+F+v+G+")"+C+"'";}if(G.length){return "'"+C+"("+v+" === undefined ? '' : "+v+'('+G+"))"+C+"'";}return "'"+C+"("+v+" === undefined ? '' : "+v+")"+C+"'";};var D;if(Roo.isGecko){D="tpl.compiled = function(values, parent){ with(values) { return '"+A.body.replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn)+"';};};";}else {D=["tpl.compiled = function(values, parent){ with (values) { return ['"];D.push(A.body.replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn));D.push("'].join('');};};");D=D.join('');}eval(D);Roo.log(D.replace(/\\n/,'\n'));return this;},applyTemplate:function(A){return this.master.compiled.call(this,A,{});},apply:function(){return this.applyTemplate.apply(this,arguments);}});Roo.XTemplate.from=function(el){el=Roo.getDom(el);return new Roo.XTemplate(el.value||el.innerHTML);};
 //Roo/XComponent.js
index ef91070..ba076bc 100644 (file)
@@ -52322,10 +52322,46 @@ Roo.LoadMask.prototype = {
  * Fork - LGPL
  * <script type="text/javascript">
  */
-Roo.XTemplate = function(){
+
+
+/**
+ * @class Roo.XTemplate
+ * @extends Roo.Template
+ * Provides a template that can have nested templates for loops or conditionals. The syntax is:
+<pre><code>
+var t = new Roo.MasterTemplate(
+       '&lt;select name="{name}"&gt;',
+               '&lt;tpl for="options"&gt;&lt;option value="{value:trim}"&gt;{text:ellipsis(10)}&lt;/option&gt;&lt;/tpl&gt;',
+       '&lt;/select&gt;'
+);
+// then append, applying the master template values
+ </code></pre>
+ *
+ * Supported features:
+ *
+ *  Tags:
+ *    {a_variable} - output encoded.
+ *    {a_variable.format:("Y-m-d")} - call a method on the variable
+ *    {a_variable:raw} - unencoded output
+ *    {a_variable:toFixed(1,2)} - Roo.util.Format."toFixed"
+ *    {a_variable:this.method_on_template(...)} - call a method on the template object.
+ *  
+ *  Tpl:
+ *      <tpl for="a_variable or condition.."></tpl>
+ *      <tpl if="a_variable or condition"></tpl>
+ *      <tpl exec="some javascript"></tpl>
+ *
+ *      <tpl for="."></tpl> - just iterate the property..
+ *      <tpl for=".."></tpl> - iterates witht the parent (probably the template) 
+ *      
+ *      
+ */
+Roo.XTemplate = function()
+{
     Roo.XTemplate.superclass.constructor.apply(this, arguments);
     if (this.html) {
-        this.preCompile();
+        this.compile();
     }
 };
 
@@ -52350,53 +52386,54 @@ Roo.extend(Roo.XTemplate, Roo.Template, {
      
         s = ['<tpl>', s, '</tpl>'].join('');
     
-        var re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
-    
-        var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;
-        var ifRe   = /^<tpl\b[^>]*?if="(.*?)"/;
-        var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;
-        var m, id = 0;
-        var tpls = [];
+        var re     = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,
+            nameRe = /^<tpl\b[^>]*?for="(.*?)"/,
+            ifRe   = /^<tpl\b[^>]*?if="(.*?)"/,
+            execRe = /^<tpl\b[^>]*?exec="(.*?)"/,
+            m,
+            id     = 0,
+            tpls   = [];
     
         while(true == !!(m = s.match(re))){
-           var m2 = m[0].match(nameRe);
-           var m3 = m[0].match(ifRe);
-           var m4 = m[0].match(execRe);
-           var exp = null,
-                fn = null,
-                exec = null;
-           var name = m2 && m2[1] ? m2[1] : '';
-           if(m3){
+            var m2   = m[0].match(nameRe),
+                m3   = m[0].match(ifRe),
+                m4   = m[0].match(execRe),
+                exp  = null, 
+                fn   = null,
+                exec = null,
+                name = m2 && m2[1] ? m2[1] : '';
+                
+            if (m3) {
                 // if - puts fn into test..
                 exp = m3 && m3[1] ? m3[1] : null;
                 if(exp){
                    fn = new Function('values', 'parent', 'with(values){ return '+(Roo.util.Format.htmlDecode(exp))+'; }');
                 }
-           }
-           if(m4){
+            }
+            if (m4) {
                 // exec - calls a function... returns empty if true is  returned.
-               exp = m4 && m4[1] ? m4[1] : null;
-               if(exp){
+                exp = m4 && m4[1] ? m4[1] : null;
+                if(exp){
                    exec = new Function('values', 'parent', 'with(values){ '+(Roo.util.Format.htmlDecode(exp))+'; }');
-               }
-           }
-           if(name){
+                }
+            }
+            if (name) {
                 // for = 
-               switch(name){
-                   case '.':  name = new Function('values', 'parent', 'with(values){ return values; }'); break;
-                   case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
-                   default:   name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
-               }
-           }
-           tpls.push({
-                id: id,
+                switch(name){
+                    case '.':  name = new Function('values', 'parent', 'with(values){ return values; }'); break;
+                    case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
+                    default:   name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
+                }
+            }
+            tpls.push({
+                id:     id,
                 target: name,
-                exec: exec,
-                test: fn,
-                body: m[1]||''
+                exec:   exec,
+                test:   fn,
+                body:   m[1] || ''
             });
-           s = s.replace(m[0], '{xtpl'+ id + '}');
-           ++id;
+            s = s.replace(m[0], '{xtpl'+ id + '}');
+            ++id;
         }
         for(var i = tpls.length-1; i >= 0; --i){
             this.compileTpl(tpls[i]);
index 80d41c2..4997990 100644 (file)
@@ -37820,10 +37820,46 @@ Roo.LoadMask.prototype = {
  * Fork - LGPL
  * <script type="text/javascript">
  */
-Roo.XTemplate = function(){
+
+
+/**
+ * @class Roo.XTemplate
+ * @extends Roo.Template
+ * Provides a template that can have nested templates for loops or conditionals. The syntax is:
+<pre><code>
+var t = new Roo.MasterTemplate(
+       '&lt;select name="{name}"&gt;',
+               '&lt;tpl for="options"&gt;&lt;option value="{value:trim}"&gt;{text:ellipsis(10)}&lt;/option&gt;&lt;/tpl&gt;',
+       '&lt;/select&gt;'
+);
+// then append, applying the master template values
+ </code></pre>
+ *
+ * Supported features:
+ *
+ *  Tags:
+ *    {a_variable} - output encoded.
+ *    {a_variable.format:("Y-m-d")} - call a method on the variable
+ *    {a_variable:raw} - unencoded output
+ *    {a_variable:toFixed(1,2)} - Roo.util.Format."toFixed"
+ *    {a_variable:this.method_on_template(...)} - call a method on the template object.
+ *  
+ *  Tpl:
+ *      <tpl for="a_variable or condition.."></tpl>
+ *      <tpl if="a_variable or condition"></tpl>
+ *      <tpl exec="some javascript"></tpl>
+ *
+ *      <tpl for="."></tpl> - just iterate the property..
+ *      <tpl for=".."></tpl> - iterates witht the parent (probably the template) 
+ *      
+ *      
+ */
+Roo.XTemplate = function()
+{
     Roo.XTemplate.superclass.constructor.apply(this, arguments);
     if (this.html) {
-        this.preCompile();
+        this.compile();
     }
 };
 
@@ -37848,53 +37884,54 @@ Roo.extend(Roo.XTemplate, Roo.Template, {
      
         s = ['<tpl>', s, '</tpl>'].join('');
     
-        var re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
-    
-        var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;
-        var ifRe   = /^<tpl\b[^>]*?if="(.*?)"/;
-        var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;
-        var m, id = 0;
-        var tpls = [];
+        var re     = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,
+            nameRe = /^<tpl\b[^>]*?for="(.*?)"/,
+            ifRe   = /^<tpl\b[^>]*?if="(.*?)"/,
+            execRe = /^<tpl\b[^>]*?exec="(.*?)"/,
+            m,
+            id     = 0,
+            tpls   = [];
     
         while(true == !!(m = s.match(re))){
-           var m2 = m[0].match(nameRe);
-           var m3 = m[0].match(ifRe);
-           var m4 = m[0].match(execRe);
-           var exp = null,
-                fn = null,
-                exec = null;
-           var name = m2 && m2[1] ? m2[1] : '';
-           if(m3){
+            var m2   = m[0].match(nameRe),
+                m3   = m[0].match(ifRe),
+                m4   = m[0].match(execRe),
+                exp  = null, 
+                fn   = null,
+                exec = null,
+                name = m2 && m2[1] ? m2[1] : '';
+                
+            if (m3) {
                 // if - puts fn into test..
                 exp = m3 && m3[1] ? m3[1] : null;
                 if(exp){
                    fn = new Function('values', 'parent', 'with(values){ return '+(Roo.util.Format.htmlDecode(exp))+'; }');
                 }
-           }
-           if(m4){
+            }
+            if (m4) {
                 // exec - calls a function... returns empty if true is  returned.
-               exp = m4 && m4[1] ? m4[1] : null;
-               if(exp){
+                exp = m4 && m4[1] ? m4[1] : null;
+                if(exp){
                    exec = new Function('values', 'parent', 'with(values){ '+(Roo.util.Format.htmlDecode(exp))+'; }');
-               }
-           }
-           if(name){
+                }
+            }
+            if (name) {
                 // for = 
-               switch(name){
-                   case '.':  name = new Function('values', 'parent', 'with(values){ return values; }'); break;
-                   case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
-                   default:   name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
-               }
-           }
-           tpls.push({
-                id: id,
+                switch(name){
+                    case '.':  name = new Function('values', 'parent', 'with(values){ return values; }'); break;
+                    case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
+                    default:   name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
+                }
+            }
+            tpls.push({
+                id:     id,
                 target: name,
-                exec: exec,
-                test: fn,
-                body: m[1]||''
+                exec:   exec,
+                test:   fn,
+                body:   m[1] || ''
             });
-           s = s.replace(m[0], '{xtpl'+ id + '}');
-           ++id;
+            s = s.replace(m[0], '{xtpl'+ id + '}');
+            ++id;
         }
         for(var i = tpls.length-1; i >= 0; --i){
             this.compileTpl(tpls[i]);
index c4dc6c6..04f4972 100644 (file)
@@ -847,7 +847,7 @@ this.store.loadRecords({records:A},{},true);},onUpdate:function(ds,A,B){if(B==Ro
 Roo.LoadMask=function(el,A){this.el=Roo.get(el);Roo.apply(this,A);if(this.store){this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.onLoadException,this);this.removeMask=false;}else {var um=this.el.getUpdateManager();um.showLoadIndicator=false;um.on('beforeupdate',this.onBeforeLoad,this);um.on('update',this.onLoad,this);um.on('failure',this.onLoad,this);this.removeMask=true;}};Roo.LoadMask.prototype={msg:'Loading...',msgCls:'x-mask-loading',disabled:false,disable:function(){this.disabled=true;},enable:function(){this.disabled=false;},onLoadException:function(){if(this.store&&typeof(this.store.reader.jsonData.errorMsg)!='undefined'){Roo.MessageBox.alert("Error loading",this.store.reader.jsonData.errorMsg);}
 this.el.unmask(this.removeMask);},onLoad:function(){this.el.unmask(this.removeMask);},onBeforeLoad:function(){if(!this.disabled){this.el.mask(this.msg,this.msgCls);}},destroy:function(){if(this.store){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.onLoadException,this);}else {var um=this.el.getUpdateManager();um.un('beforeupdate',this.onBeforeLoad,this);um.un('update',this.onLoad,this);um.un('failure',this.onLoad,this);}}};
 //Roo/XTemplate.js
-Roo.XTemplate=function(){Roo.XTemplate.superclass.constructor.apply(this,arguments);if(this.html){this.preCompile();}};Roo.extend(Roo.XTemplate,Roo.Template,{re:/\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var s=this.html;s=['<tpl>',s,'</tpl>'].join('');var re=/<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;var A=/^<tpl\b[^>]*?for="(.*?)"/;var B=/^<tpl\b[^>]*?if="(.*?)"/;var C=/^<tpl\b[^>]*?exec="(.*?)"/;var m,id=0;var D=[];while(true==!!(m=s.match(re))){var m2=m[0].match(A);var m3=m[0].match(B);var m4=m[0].match(C);var E=null,fn=null,F=null;var G=m2&&m2[1]?m2[1]:'';if(m3){E=m3&&m3[1]?m3[1]:null;if(E){fn=new Function('values','parent','with(values){ return '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(m4){E=m4&&m4[1]?m4[1]:null;if(E){F=new Function('values','parent','with(values){ '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(G){switch(G){case '.':G=new Function('values','parent','with(values){ return values; }');break;case '..':G=new Function('values','parent','with(values){ return parent; }');break;default:G=new Function('values','parent','with(values){ return '+G+'; }');}}
+Roo.XTemplate=function(){Roo.XTemplate.superclass.constructor.apply(this,arguments);if(this.html){this.compile();}};Roo.extend(Roo.XTemplate,Roo.Template,{re:/\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var s=this.html;s=['<tpl>',s,'</tpl>'].join('');var re=/<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,A=/^<tpl\b[^>]*?for="(.*?)"/,B=/^<tpl\b[^>]*?if="(.*?)"/,C=/^<tpl\b[^>]*?exec="(.*?)"/,m,id=0,D=[];while(true==!!(m=s.match(re))){var m2=m[0].match(A),m3=m[0].match(B),m4=m[0].match(C),E=null,fn=null,F=null,G=m2&&m2[1]?m2[1]:'';if(m3){E=m3&&m3[1]?m3[1]:null;if(E){fn=new Function('values','parent','with(values){ return '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(m4){E=m4&&m4[1]?m4[1]:null;if(E){F=new Function('values','parent','with(values){ '+(Roo.util.Format.htmlDecode(E))+'; }');}}if(G){switch(G){case '.':G=new Function('values','parent','with(values){ return values; }');break;case '..':G=new Function('values','parent','with(values){ return parent; }');break;default:G=new Function('values','parent','with(values){ return '+G+'; }');}}
 D.push({id:id,target:G,exec:F,test:fn,body:m[1]||''});s=s.replace(m[0],'{xtpl'+id+'}');++id;}for(var i=D.length-1;i>=0;--i){this.compileTpl(D[i]);}
 this.master=D[D.length-1];this.tpls=D;return this;},applySubTemplate:function(id,A,B){var t=this.tpls[id];if(t.test&&!t.test.call(this,A,B)){return '';}if(t.exec&&t.exec.call(this,A,B)){return '';}var vs=t.target?t.target.call(this,A,B):A;B=t.target?A:B;if(t.target&&vs instanceof Array){var C=[];for(var i=0,D=vs.length;i<D;i++){C[C.length]=t.compiled.call(this,vs[i],B);}return C.join('');}return t.compiled.call(this,vs,B);},compileTpl:function(A){var fm=Roo.util.Format;var B=this.disableFormats!==true;var C=Roo.isGecko?"+":",";var fn=function(m,E,F,G){if(typeof(F)=='undefined'){F='htmlEncode';}if(F=='raw'){F=false;}if(E.substr(0,4)=='xtpl'){return "'"+C+'this.applySubTemplate('+E.substr(4)+', values, parent)'+C+"'";}var v;v=E;if(F&&B){G=G?','+G:"";if(F.substr(0,5)!="this."){F="fm."+F+'(';}else {F='this.call("'+F.substr(5)+'", ';G=", values";}return "'"+C+F+v+G+")"+C+"'";}if(G.length){return "'"+C+"("+v+" === undefined ? '' : "+v+'('+G+"))"+C+"'";}return "'"+C+"("+v+" === undefined ? '' : "+v+")"+C+"'";};var D;if(Roo.isGecko){D="tpl.compiled = function(values, parent){ with(values) { return '"+A.body.replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn)+"';};};";}else {D=["tpl.compiled = function(values, parent){ with (values) { return ['"];D.push(A.body.replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn));D.push("'].join('');};};");D=D.join('');}eval(D);Roo.log(D.replace(/\\n/,'\n'));return this;},applyTemplate:function(A){return this.master.compiled.call(this,A,{});},apply:function(){return this.applyTemplate.apply(this,arguments);}});Roo.XTemplate.from=function(el){el=Roo.getDom(el);return new Roo.XTemplate(el.value||el.innerHTML);};
 //Roo/XComponent.js