1 <html><head><title>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">/*
4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
16 * @class Roo.MasterTemplate
17 * @extends Roo.Template
18 * Provides a template that can have child templates. The syntax is:
19 <pre><code>
20 var t = new Roo.MasterTemplate(
21 '&lt;select name="{name}"&gt;',
22 '&lt;tpl name="options"&gt;&lt;option value="{value:trim}"&gt;{text:ellipsis(10)}&lt;/option&gt;&lt;/tpl&gt;',
23 '&lt;/select&gt;'
25 t.add('options', {value: 'foo', text: 'bar'});
26 // or you can add multiple child elements in one shot
28 {value: 'foo', text: 'bar'},
29 {value: 'foo2', text: 'bar2'},
30 {value: 'foo3', text: 'bar3'}
32 // then append, applying the master template values
33 t.append('my-form', {name: 'my-select'});
34 </code></pre>
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.
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">)
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">];
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">++;
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">;
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
69 </span><span class="jsdoc-var">subTemplateRe </span><span class="jsdoc-syntax">: /<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,
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
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;
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">;
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
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 && </span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">[1] == </span><span class="jsdoc-string">"boolean"</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];
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">();
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">< </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">]);
107 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
110 </span><span class="jsdoc-comment">/**
111 * Resets the template for reuse
112 * @return {MasterTemplate} this
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">< </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">= [];
119 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
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">""</span><span class="jsdoc-syntax">);
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">);
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">);
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">;}
138 </span><span class="jsdoc-comment">/**
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
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>