1 <html><head><title>/home/alan/gitlive/roojs1/Roo/DomTemplate.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
10 * @class Roo.DomTemplate
11 * @extends Roo.Template
12 * An effort at a dom based template engine..
14 * Similar to XTemplate, except it uses dom parsing to create the template..
20 <pre><code>
21 {a_variable} - output encoded.
22 {a_variable.format:("Y-m-d")} - call a method on the variable
23 {a_variable:raw} - unencoded output
24 {a_variable:toFixed(1,2)} - Roo.util.Format."toFixed"
25 {a_variable:this.method_on_template(...)} - call a method on the template object.
27 </code></pre>
29 <pre><code>
30 &lt;div roo-for="a_variable or condition.."&gt;&lt;/div&gt;
31 &lt;div roo-if="a_variable or condition"&gt;&lt;/div&gt;
32 &lt;div roo-exec="some javascript"&gt;&lt;/div&gt;
33 &lt;div roo-name="named_template"&gt;&lt;/div&gt;
35 </code></pre>
38 </span><span class="jsdoc-var">Roo.DomTemplate </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
40 </span><span class="jsdoc-var">Roo.DomTemplate.superclass.constructor.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
41 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.html</span><span class="jsdoc-syntax">) {
42 </span><span class="jsdoc-var">this.compile</span><span class="jsdoc-syntax">();
47 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.DomTemplate</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.Template</span><span class="jsdoc-syntax">, {
48 </span><span class="jsdoc-comment">/**
49 * id counter for sub templates.
51 </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">: 0,
52 </span><span class="jsdoc-comment">/**
53 * flag to indicate if dom parser is inside a pre,
54 * it will strip whitespace if not.
56 </span><span class="jsdoc-var">inPre </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
58 </span><span class="jsdoc-comment">/**
59 * The various sub templates
61 </span><span class="jsdoc-var">tpls </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
65 </span><span class="jsdoc-comment">/**
67 * basic tag replacing syntax
70 * // you can fake an object call by doing this
74 </span><span class="jsdoc-var">re </span><span class="jsdoc-syntax">: /(\{|\%7B)([\w-\.]+)(?:\:([\w\.]*)(?:\(([^)]*?)?\))?)?(\}|\%7D)/g,
75 </span><span class="jsdoc-comment">//re : /\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
77 </span><span class="jsdoc-var">iterChild </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">method</span><span class="jsdoc-syntax">) {
79 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">oldPre </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.inPre</span><span class="jsdoc-syntax">;
80 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'PRE'</span><span class="jsdoc-syntax">) {
81 </span><span class="jsdoc-var">this.inPre </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
83 </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">node.childNodes.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
84 </span><span class="jsdoc-var">method.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node.childNodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
86 </span><span class="jsdoc-var">this.inPre </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">oldPre</span><span class="jsdoc-syntax">;
91 </span><span class="jsdoc-comment">/**
92 * compile the template
94 * This is not recursive, so I'm not sure how nested templates are really going to be handled..
97 </span><span class="jsdoc-var">compile</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
99 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.html</span><span class="jsdoc-syntax">;
101 </span><span class="jsdoc-comment">// covert the html into DOM...
102 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">doc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
103 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">=</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
104 </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
105 </span><span class="jsdoc-var">doc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.implementation.createHTMLDocument</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">);
106 </span><span class="jsdoc-var">doc.documentElement.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.html </span><span class="jsdoc-syntax">;
107 </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc.documentElement</span><span class="jsdoc-syntax">;
108 } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
109 </span><span class="jsdoc-comment">// old IE... - nasty -- it causes all sorts of issues.. with
110 // images getting pulled from server..
111 </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'div'</span><span class="jsdoc-syntax">);
112 </span><span class="jsdoc-var">div.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.html</span><span class="jsdoc-syntax">;
114 </span><span class="jsdoc-comment">//doc.documentElement.innerHTML = htmlBody
118 </span><span class="jsdoc-var">this.tpls </span><span class="jsdoc-syntax">= [];
119 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">_t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
120 </span><span class="jsdoc-var">this.iterChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">div</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">) {</span><span class="jsdoc-var">_t.compileNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">); });
122 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tpls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tpls</span><span class="jsdoc-syntax">;
124 </span><span class="jsdoc-comment">// create a top level template from the snippet..
126 //Roo.log(div.innerHTML);
128 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tpl </span><span class="jsdoc-syntax">= {
129 </span><span class="jsdoc-var">uid </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'master'</span><span class="jsdoc-syntax">,
130 </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.id</span><span class="jsdoc-syntax">++,
131 </span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
132 </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
133 </span><span class="jsdoc-var">body </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">div.innerHTML</span><span class="jsdoc-syntax">,
135 </span><span class="jsdoc-var">forCall </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
136 </span><span class="jsdoc-var">execCall </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
137 </span><span class="jsdoc-var">dom </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">div</span><span class="jsdoc-syntax">,
138 </span><span class="jsdoc-var">isTop </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
140 </span><span class="jsdoc-syntax">};
141 </span><span class="jsdoc-var">tpls.unshift</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl</span><span class="jsdoc-syntax">);
144 </span><span class="jsdoc-comment">// compile them...
145 </span><span class="jsdoc-var">this.tpls </span><span class="jsdoc-syntax">= [];
146 </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpls</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tp</span><span class="jsdoc-syntax">){
147 </span><span class="jsdoc-var">this.compileTpl</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tp</span><span class="jsdoc-syntax">);
148 </span><span class="jsdoc-var">this.tpls</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tp.id</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">tp</span><span class="jsdoc-syntax">;
149 }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
151 </span><span class="jsdoc-var">this.master </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tpls</span><span class="jsdoc-syntax">[0];
152 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
157 </span><span class="jsdoc-var">compileNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">istop</span><span class="jsdoc-syntax">) {
158 </span><span class="jsdoc-comment">// test for
162 // skip anything not a tag..
163 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeType </span><span class="jsdoc-syntax">!= 1) {
164 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeType </span><span class="jsdoc-syntax">== 3 && !</span><span class="jsdoc-var">this.inPre</span><span class="jsdoc-syntax">) {
165 </span><span class="jsdoc-comment">// reduce white space..
166 </span><span class="jsdoc-var">node.nodeValue </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.nodeValue.replace</span><span class="jsdoc-syntax">(/\s+/g, </span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">);
169 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
172 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tpl </span><span class="jsdoc-syntax">= {
173 </span><span class="jsdoc-var">uid </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
174 </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
175 </span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
176 </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
177 </span><span class="jsdoc-var">body </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
179 </span><span class="jsdoc-var">forCall </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
180 </span><span class="jsdoc-var">execCall </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
181 </span><span class="jsdoc-var">dom </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
182 </span><span class="jsdoc-var">isTop </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">istop
185 </span><span class="jsdoc-syntax">};
188 </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) {
189 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-for'</span><span class="jsdoc-syntax">)): </span><span class="jsdoc-var">tpl.attr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'for'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
190 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-if'</span><span class="jsdoc-syntax">)): </span><span class="jsdoc-var">tpl.attr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'if'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
191 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-name'</span><span class="jsdoc-syntax">)): </span><span class="jsdoc-var">tpl.attr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
192 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-exec'</span><span class="jsdoc-syntax">)): </span><span class="jsdoc-var">tpl.attr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'exec'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
193 </span><span class="jsdoc-comment">// no default..
194 </span><span class="jsdoc-syntax">}
197 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">tpl.attr</span><span class="jsdoc-syntax">) {
198 </span><span class="jsdoc-comment">// just itterate children..
199 </span><span class="jsdoc-var">this.iterChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">this.compileNode</span><span class="jsdoc-syntax">);
200 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
202 </span><span class="jsdoc-var">tpl.uid </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.id</span><span class="jsdoc-syntax">++;
203 </span><span class="jsdoc-var">tpl.value </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">tpl.attr</span><span class="jsdoc-syntax">);
204 </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-'</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">tpl.attr</span><span class="jsdoc-syntax">);
205 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl.attr </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">) {
206 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">placeholder </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.createTextNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'{domtpl' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">tpl.uid </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'}'</span><span class="jsdoc-syntax">);
207 </span><span class="jsdoc-var">node.parentNode.replaceChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">placeholder</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
208 } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
210 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">placeholder </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'span'</span><span class="jsdoc-syntax">);
211 </span><span class="jsdoc-var">placeholder.className </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'roo-tpl-' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">tpl.value</span><span class="jsdoc-syntax">;
212 </span><span class="jsdoc-var">node.parentNode.replaceChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">placeholder</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
215 </span><span class="jsdoc-comment">// parent now sees '{domtplXXXX}
216 </span><span class="jsdoc-var">this.iterChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">this.compileNode</span><span class="jsdoc-syntax">);
218 </span><span class="jsdoc-comment">// we should now have node body...
219 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'div'</span><span class="jsdoc-syntax">);
220 </span><span class="jsdoc-var">div.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
221 </span><span class="jsdoc-var">tpl.dom </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
222 </span><span class="jsdoc-comment">// this has the unfortunate side effect of converting tagged attributes
223 // eg. href="{...}" into %7C...%7D
224 // this has been fixed by searching for those combo's although it's a bit hacky..
227 </span><span class="jsdoc-var">tpl.body </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">div.innerHTML</span><span class="jsdoc-syntax">;
231 </span><span class="jsdoc-var">tpl.id </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tpl.uid</span><span class="jsdoc-syntax">;
232 </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl.attr</span><span class="jsdoc-syntax">) {
233 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'for' </span><span class="jsdoc-syntax">:
234 </span><span class="jsdoc-keyword">switch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl.value</span><span class="jsdoc-syntax">) {
235 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'.'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">tpl.forCall </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'values'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'parent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'with(values){ return values; }'</span><span class="jsdoc-syntax">); </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
236 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'..'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">tpl.forCall</span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'values'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'parent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'with(values){ return parent; }'</span><span class="jsdoc-syntax">); </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
237 </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">tpl.forCall</span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'values'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'parent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'with(values){ return '</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">tpl.value</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">'; }'</span><span class="jsdoc-syntax">);
239 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
241 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'exec'</span><span class="jsdoc-syntax">:
242 </span><span class="jsdoc-var">tpl.execCall </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'values'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'parent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'with(values){ '</span><span class="jsdoc-syntax">+(</span><span class="jsdoc-var">Roo.util.Format.htmlDecode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl.value</span><span class="jsdoc-syntax">))+</span><span class="jsdoc-string">'; }'</span><span class="jsdoc-syntax">);
243 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
245 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'if'</span><span class="jsdoc-syntax">:
246 </span><span class="jsdoc-var">tpl.ifCall </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'values'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'parent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'with(values){ return '</span><span class="jsdoc-syntax">+(</span><span class="jsdoc-var">Roo.util.Format.htmlDecode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl.value</span><span class="jsdoc-syntax">))+</span><span class="jsdoc-string">'; }'</span><span class="jsdoc-syntax">);
247 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
249 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">:
250 </span><span class="jsdoc-var">tpl.id </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tpl.value</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// replace non characters???
251 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
256 </span><span class="jsdoc-var">this.tpls.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl</span><span class="jsdoc-syntax">);
265 </span><span class="jsdoc-comment">/**
266 * Compile a segment of the template into a 'sub-template'
272 </span><span class="jsdoc-var">compileTpl </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl</span><span class="jsdoc-syntax">)
274 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fm </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.util.Format</span><span class="jsdoc-syntax">;
275 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">useF </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.disableFormats </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
277 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sep </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.isGecko </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">"+\n" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">",\n"</span><span class="jsdoc-syntax">;
279 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">undef </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">) {
280 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"Property not found :" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">);
281 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
284 </span><span class="jsdoc-comment">//Roo.log(tpl.body);
288 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">lbrace</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">format</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">)
290 </span><span class="jsdoc-comment">//Roo.log("ARGS");
291 //Roo.log(arguments);
292 </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">args.replace</span><span class="jsdoc-syntax">(/\\'/g,</span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">;
293 </span><span class="jsdoc-comment">//["{TEST:(a,b,c)}", "TEST", "", "a,b,c", 0, "{TEST:(a,b,c)}"]
294 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">format</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
295 </span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'htmlEncode'</span><span class="jsdoc-syntax">;
297 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'raw' </span><span class="jsdoc-syntax">) {
298 </span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
301 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name.substr</span><span class="jsdoc-syntax">(0, 6) == </span><span class="jsdoc-string">'domtpl'</span><span class="jsdoc-syntax">){
302 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">sep </span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">'this.applySubTemplate('</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">name.substr</span><span class="jsdoc-syntax">(6)+</span><span class="jsdoc-string">', values, parent)'</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">sep</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">;
305 </span><span class="jsdoc-comment">// build an array of options to determine if value is undefined..
307 // basically get 'xxxx.yyyy' then do
308 // (typeof(xxxx) == 'undefined' || typeof(xxx.yyyy) == 'undefined') ?
309 // (function () { Roo.log("Property not found"); return ''; })() :
312 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">udef_ar </span><span class="jsdoc-syntax">= [];
313 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lookfor </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
314 </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'.'</span><span class="jsdoc-syntax">), </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">) {
315 </span><span class="jsdoc-var">lookfor </span><span class="jsdoc-syntax">+= (</span><span class="jsdoc-var">lookfor.length </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'.'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">) + </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">;
316 </span><span class="jsdoc-var">udef_ar.push</span><span class="jsdoc-syntax">( </span><span class="jsdoc-string">"(typeof(" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">lookfor </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">") == 'undefined')" </span><span class="jsdoc-syntax">);
319 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">udef_st </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'((' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">udef_ar.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">" || "</span><span class="jsdoc-syntax">) +</span><span class="jsdoc-string">") ? undef('" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">"') : "</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// .. needs )
322 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">useF</span><span class="jsdoc-syntax">){
324 </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">',' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">;
326 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">format.substr</span><span class="jsdoc-syntax">(0, 5) != </span><span class="jsdoc-string">"this."</span><span class="jsdoc-syntax">){
327 </span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"fm." </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'('</span><span class="jsdoc-syntax">;
328 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
329 </span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'this.call("'</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">format.substr</span><span class="jsdoc-syntax">(5) + </span><span class="jsdoc-string">'", '</span><span class="jsdoc-syntax">;
330 </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">", values"</span><span class="jsdoc-syntax">;
333 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">sep </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">udef_st </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">format </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">"))"</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">sep</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">;
336 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">args.length</span><span class="jsdoc-syntax">) {
337 </span><span class="jsdoc-comment">// called with xxyx.yuu:(test,test)
339 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">sep </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">udef_st </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'(' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">"))"</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">sep</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">;
341 </span><span class="jsdoc-comment">// raw.. - :raw modifier..
342 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">sep </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">udef_st </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">")"</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">sep</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">"'"</span><span class="jsdoc-syntax">;
345 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">body</span><span class="jsdoc-syntax">;
346 </span><span class="jsdoc-comment">// branched to use + in gecko and [].join() in others
347 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isGecko</span><span class="jsdoc-syntax">){
348 </span><span class="jsdoc-var">body </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"tpl.compiled = function(values, parent){ with(values) { return '" </span><span class="jsdoc-syntax">+
349 </span><span class="jsdoc-var">tpl.body.replace</span><span class="jsdoc-syntax">(/(\r\n|\n)/g, </span><span class="jsdoc-string">'\\n'</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(/'/g, </span><span class="jsdoc-string">"\\'"</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.re</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">) +
350 </span><span class="jsdoc-string">"';};};"</span><span class="jsdoc-syntax">;
351 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
352 </span><span class="jsdoc-var">body </span><span class="jsdoc-syntax">= [</span><span class="jsdoc-string">"tpl.compiled = function(values, parent){ with (values) { return ['"</span><span class="jsdoc-syntax">];
353 </span><span class="jsdoc-var">body.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tpl.body.replace</span><span class="jsdoc-syntax">(/(\r\n|\n)/g,
354 </span><span class="jsdoc-string">'\\n'</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(/'/g, </span><span class="jsdoc-string">"\\'"</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.re</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">));
355 </span><span class="jsdoc-var">body.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"'].join('');};};"</span><span class="jsdoc-syntax">);
356 </span><span class="jsdoc-var">body </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">body.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
359 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">body.replace</span><span class="jsdoc-syntax">(/\\n/,</span><span class="jsdoc-string">'\n'</span><span class="jsdoc-syntax">));
361 </span><span class="jsdoc-comment">/** eval:var:tpl eval:var:fm eval:var:useF eval:var:undef */
362 </span><span class="jsdoc-keyword">eval</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">body</span><span class="jsdoc-syntax">);
364 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
367 </span><span class="jsdoc-comment">/**
368 * same as applyTemplate, except it's done to one of the subTemplates
369 * when using named templates, you can do:
371 * var str = pl.applySubTemplate('your-name', values);
374 * @param {Number} id of the template
375 * @param {Object} values to apply to template
376 * @param {Object} parent (normaly the instance of this object)
378 </span><span class="jsdoc-var">applySubTemplate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">)
382 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tpls</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">];
385 </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
386 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.ifCall </span><span class="jsdoc-syntax">&& !</span><span class="jsdoc-var">t.ifCall.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">)){
387 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'if call on ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">t.value </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">' return false'</span><span class="jsdoc-syntax">);
388 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
390 } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
391 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'Xtemplate.applySubTemplate('</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'): Exception thrown on roo-if="' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">t.value </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'" - ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">e.toString</span><span class="jsdoc-syntax">());
392 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">);
394 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
396 </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
398 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.execCall </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">t.execCall.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">)){
399 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
401 } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
402 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'Xtemplate.applySubTemplate('</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'): Exception thrown on roo-for="' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">t.value </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'" - ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">e.toString</span><span class="jsdoc-syntax">());
403 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">);
404 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
407 </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
408 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">vs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">t.forCall </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">t.forCall.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">;
409 </span><span class="jsdoc-var">parent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">t.target </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">values </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">;
410 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.forCall </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">vs </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">){
411 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">buf </span><span class="jsdoc-syntax">= [];
412 </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">vs.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
413 </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
414 </span><span class="jsdoc-var">buf</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">buf.length</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">t.compiled.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">vs</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">], </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">);
415 } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
416 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'Xtemplate.applySubTemplate('</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'): Exception thrown on body="' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">t.value </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'" - ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">e.toString</span><span class="jsdoc-syntax">());
417 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.body</span><span class="jsdoc-syntax">);
418 </span><span class="jsdoc-comment">//Roo.log(t.compiled);
419 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">vs</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
422 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">buf.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
424 } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
425 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'Xtemplate.applySubTemplate('</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'): Exception thrown on roo-for="' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">t.value </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'" - ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">e.toString</span><span class="jsdoc-syntax">());
426 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">);
427 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
429 </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
430 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">t.compiled.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">vs</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">);
431 } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
432 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'Xtemplate.applySubTemplate('</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'): Exception thrown on body="' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">t.value </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'" - ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">e.toString</span><span class="jsdoc-syntax">());
433 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.body</span><span class="jsdoc-syntax">);
434 </span><span class="jsdoc-comment">//Roo.log(t.compiled);
435 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">);
436 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
442 </span><span class="jsdoc-var">applyTemplate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">){
443 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.master.compiled.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">, {});
444 </span><span class="jsdoc-comment">//var s = this.subs;
445 </span><span class="jsdoc-syntax">},
447 </span><span class="jsdoc-var">apply </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
448 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.applyTemplate.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
453 </span><span class="jsdoc-var">Roo.DomTemplate.from </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">){
454 </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
455 </span><span class="jsdoc-keyword">return new </span><span class="jsdoc-var">Roo.Domtemplate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.value </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">el.innerHTML</span><span class="jsdoc-syntax">);
456 };</span></code></body></html>