ece45ff328769fc956d5ac0a5004c09358aa3c57
[roojs1] / docs / src / Roo_MasterTemplate.js.html
1 <html><head><title>/home/edward/gitlive/roojs1/Roo/MasterTemplate.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">/*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * &lt;script type=&quot;text/javascript&quot;&gt;
10  */
11
12
13
14
15 /**
16  * @class Roo.MasterTemplate
17  * @extends Roo.Template
18  * Provides a template that can have child templates. The syntax is:
19 &lt;pre&gt;&lt;code&gt;
20 var t = new Roo.MasterTemplate(
21         '&amp;lt;select name=&quot;{name}&quot;&amp;gt;',
22                 '&amp;lt;tpl name=&quot;options&quot;&amp;gt;&amp;lt;option value=&quot;{value:trim}&quot;&amp;gt;{text:ellipsis(10)}&amp;lt;/option&amp;gt;&amp;lt;/tpl&amp;gt;',
23         '&amp;lt;/select&amp;gt;'
24 );
25 t.add('options', {value: 'foo', text: 'bar'});
26 // or you can add multiple child elements in one shot
27 t.addAll('options', [
28     {value: 'foo', text: 'bar'},
29     {value: 'foo2', text: 'bar2'},
30     {value: 'foo3', text: 'bar3'}
31 ]);
32 // then append, applying the master template values
33 t.append('my-form', {name: 'my-select'});
34 &lt;/code&gt;&lt;/pre&gt;
35 * A name attribute for the child template is not required if you have only one child
36 * template or you want to refer to them by index.
37  */
38 </span><span class="jsdoc-var">Roo.MasterTemplate </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
39     </span><span class="jsdoc-var">Roo.MasterTemplate.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">);
40     </span><span class="jsdoc-var">this.originalHtml </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.html</span><span class="jsdoc-syntax">;
41     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">= {};
42     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">re </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.subTemplateRe</span><span class="jsdoc-syntax">;
43     </span><span class="jsdoc-var">re.lastIndex </span><span class="jsdoc-syntax">= 0;
44     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">subIndex </span><span class="jsdoc-syntax">= 0;
45     </span><span class="jsdoc-keyword">while</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">re.exec</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.html</span><span class="jsdoc-syntax">)){
46         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">[1], </span><span class="jsdoc-var">content </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">[2];
47         </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">subIndex</span><span class="jsdoc-syntax">] = {
48             </span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">,
49             </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">subIndex</span><span class="jsdoc-syntax">,
50             </span><span class="jsdoc-var">buffer</span><span class="jsdoc-syntax">: [],
51             </span><span class="jsdoc-var">tpl </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.Template</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">content</span><span class="jsdoc-syntax">)
52         };
53         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">){
54             </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">subIndex</span><span class="jsdoc-syntax">];
55         }
56         </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">subIndex</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.tpl.compile</span><span class="jsdoc-syntax">();
57         </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">subIndex</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.tpl.call </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.call.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
58         </span><span class="jsdoc-var">subIndex</span><span class="jsdoc-syntax">++;
59     }
60     </span><span class="jsdoc-var">this.subCount </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">subIndex</span><span class="jsdoc-syntax">;
61     </span><span class="jsdoc-var">this.subs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">st</span><span class="jsdoc-syntax">;
62 };
63 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.MasterTemplate</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.Template</span><span class="jsdoc-syntax">, {
64     </span><span class="jsdoc-comment">/**
65     * The regular expression used to match sub templates
66     * @type RegExp
67     * @property
68     */
69     </span><span class="jsdoc-var">subTemplateRe </span><span class="jsdoc-syntax">: /&lt;tpl(?:\sname=&quot;([\w-]+)&quot;)?&gt;((?:.|\n)*?)&lt;\/tpl&gt;/gi,
70
71     </span><span class="jsdoc-comment">/**
72      * Applies the passed values to a child template.
73      * @param {String/Number} name (optional) The name or index of the child template
74      * @param {Array/Object} values The values to be applied to the template
75      * @return {MasterTemplate} this
76      */
77      </span><span class="jsdoc-var">add </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">){
78         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments.length </span><span class="jsdoc-syntax">== 1){
79             </span><span class="jsdoc-var">values </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">[0];
80             </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">= 0;
81         }
82         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.subs</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">];
83         </span><span class="jsdoc-var">s.buffer</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">s.buffer.length</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">s.tpl.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">);
84         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
85     },
86
87     </span><span class="jsdoc-comment">/**
88      * Applies all the passed values to a child template.
89      * @param {String/Number} name (optional) The name or index of the child template
90      * @param {Array} values The values to be applied to the template, this should be an array of objects.
91      * @param {Boolean} reset (optional) True to reset the template first
92      * @return {MasterTemplate} this
93      */
94     </span><span class="jsdoc-var">fill </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">reset</span><span class="jsdoc-syntax">){
95         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">;
96         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.length </span><span class="jsdoc-syntax">== 1 || (</span><span class="jsdoc-var">a.length </span><span class="jsdoc-syntax">== 2 &amp;&amp; </span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">[1] == </span><span class="jsdoc-string">&quot;boolean&quot;</span><span class="jsdoc-syntax">)){
97             </span><span class="jsdoc-var">values </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">[0];
98             </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">= 0;
99             </span><span class="jsdoc-var">reset </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">[1];
100         }
101         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">reset</span><span class="jsdoc-syntax">){
102             </span><span class="jsdoc-var">this.reset</span><span class="jsdoc-syntax">();
103         }
104         </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">values.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
105             </span><span class="jsdoc-var">this.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">values</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
106         }
107         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
108     },
109
110     </span><span class="jsdoc-comment">/**
111      * Resets the template for reuse
112      * @return {MasterTemplate} this
113      */
114      </span><span class="jsdoc-var">reset </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
115         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.subs</span><span class="jsdoc-syntax">;
116         </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">&lt; </span><span class="jsdoc-var">this.subCount</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
117             </span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.buffer </span><span class="jsdoc-syntax">= [];
118         }
119         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
120     },
121
122     </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">){
123         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.subs</span><span class="jsdoc-syntax">;
124         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">replaceIndex </span><span class="jsdoc-syntax">= -1;
125         </span><span class="jsdoc-var">this.html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.originalHtml.replace</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.subTemplateRe</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">name</span><span class="jsdoc-syntax">){
126             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">[++</span><span class="jsdoc-var">replaceIndex</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.buffer.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
127         });
128         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.MasterTemplate.superclass.applyTemplate.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">);
129     },
130
131     </span><span class="jsdoc-var">apply </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
132         </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">);
133     },
134
135     </span><span class="jsdoc-var">compile </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){</span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;}
136 });
137
138 </span><span class="jsdoc-comment">/**
139  * Alias for fill().
140  * @method
141  */
142 </span><span class="jsdoc-var">Roo.MasterTemplate.prototype.addAll </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.MasterTemplate.prototype.fill</span><span class="jsdoc-syntax">;
143  </span><span class="jsdoc-comment">/**
144  * Creates a template from the passed element's value (display:none textarea, preferred) or innerHTML. e.g.
145  * var tpl = Roo.MasterTemplate.from('element-id');
146  * @param {String/HTMLElement} el
147  * @param {Object} config
148  * @static
149  */
150 </span><span class="jsdoc-var">Roo.MasterTemplate.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">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">){
151     </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">);
152     </span><span class="jsdoc-keyword">return new </span><span class="jsdoc-var">Roo.MasterTemplate</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">, </span><span class="jsdoc-var">config </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
153 };</span></code></body></html>