1 <html><head><title>../roojs1/Roo/View.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">
14 * @extends Roo.util.Observable
15 * Create a "View" for an element based on a data model or UpdateManager and the supplied DomHelper template.
16 * This class also supports single and multi selection modes. <br>
17 * Create a data model bound view:
18 <pre><code>
19 var store = new Roo.data.Store(...);
21 var view = new Roo.View({
22 el : "my-element",
23 tpl : '&lt;div id="{0}"&gt;{2} - {1}&lt;/div&gt;', // auto create template
26 selectedClass: "ydataview-selected",
30 // listen for node click?
31 view.on("click", function(vw, index, node, e){
32 alert('Node "' + node.id + '" at index: ' + index + " was clicked.");
36 dataModel.load("foobar.xml");
37 </code></pre>
38 For an example of creating a JSON/UpdateManager view, see {@link Roo.JsonView}.
39 * <br><br>
40 * <b>Note: The root of your template must be a single node. Table/row implementations may work but are not supported due to
41 * IE"s limited insertion support with tables and Opera"s faulty event bubbling.</b>
43 * Note: old style constructor is still suported (container, template, config)
47 * @param {Object} config The config object
50 </span><span class="jsdoc-var">Roo.View </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">depreciated_tpl</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">depreciated_config</span><span class="jsdoc-syntax">){
52 </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">depreciated_tpl</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
53 </span><span class="jsdoc-comment">// new way.. - universal constructor.
54 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
55 </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">);
56 } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
57 </span><span class="jsdoc-comment">// old format..
58 </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
59 </span><span class="jsdoc-var">this.tpl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">depreciated_tpl</span><span class="jsdoc-syntax">;
60 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">depreciated_config</span><span class="jsdoc-syntax">);
64 </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">this.tpl</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">"string"</span><span class="jsdoc-syntax">){
65 </span><span class="jsdoc-var">this.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">this.tpl</span><span class="jsdoc-syntax">);
66 } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
67 </span><span class="jsdoc-comment">// support xtype ctors..
68 </span><span class="jsdoc-var">this.tpl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tpl</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo</span><span class="jsdoc-syntax">);
72 </span><span class="jsdoc-var">this.tpl.compile</span><span class="jsdoc-syntax">();
76 </span><span class="jsdoc-comment">/** @private */
77 </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
78 </span><span class="jsdoc-comment">/**
80 * Fires before a click is processed. Returns false to cancel the default action.
81 * @param {Roo.View} this
82 * @param {Number} index The index of the target node
83 * @param {HTMLElement} node The target node
84 * @param {Roo.EventObject} e The raw event object
86 </span><span class="jsdoc-string">"beforeclick" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
87 </span><span class="jsdoc-comment">/**
89 * Fires when a template node is clicked.
90 * @param {Roo.View} this
91 * @param {Number} index The index of the target node
92 * @param {HTMLElement} node The target node
93 * @param {Roo.EventObject} e The raw event object
95 </span><span class="jsdoc-string">"click" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
96 </span><span class="jsdoc-comment">/**
98 * Fires when a template node is double clicked.
99 * @param {Roo.View} this
100 * @param {Number} index The index of the target node
101 * @param {HTMLElement} node The target node
102 * @param {Roo.EventObject} e The raw event object
104 </span><span class="jsdoc-string">"dblclick" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
105 </span><span class="jsdoc-comment">/**
107 * Fires when a template node is right clicked.
108 * @param {Roo.View} this
109 * @param {Number} index The index of the target node
110 * @param {HTMLElement} node The target node
111 * @param {Roo.EventObject} e The raw event object
113 </span><span class="jsdoc-string">"contextmenu" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
114 </span><span class="jsdoc-comment">/**
115 * @event selectionchange
116 * Fires when the selected nodes change.
117 * @param {Roo.View} this
118 * @param {Array} selections Array of the selected nodes
120 </span><span class="jsdoc-string">"selectionchange" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
122 </span><span class="jsdoc-comment">/**
123 * @event beforeselect
124 * Fires before a selection is made. If any handlers return false, the selection is cancelled.
125 * @param {Roo.View} this
126 * @param {HTMLElement} node The node to be selected
127 * @param {Array} selections Array of currently selected nodes
129 </span><span class="jsdoc-string">"beforeselect" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
130 </span><span class="jsdoc-syntax">});
132 </span><span class="jsdoc-var">this.el.on</span><span class="jsdoc-syntax">({
133 </span><span class="jsdoc-string">"click"</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onClick</span><span class="jsdoc-syntax">,
134 </span><span class="jsdoc-string">"dblclick"</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onDblClick</span><span class="jsdoc-syntax">,
135 </span><span class="jsdoc-string">"contextmenu"</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onContextMenu</span><span class="jsdoc-syntax">,
136 </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">this
137 </span><span class="jsdoc-syntax">});
139 </span><span class="jsdoc-var">this.selections </span><span class="jsdoc-syntax">= [];
140 </span><span class="jsdoc-var">this.nodes </span><span class="jsdoc-syntax">= [];
141 </span><span class="jsdoc-var">this.cmp </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.CompositeElementLite</span><span class="jsdoc-syntax">([]);
142 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.store</span><span class="jsdoc-syntax">){
143 </span><span class="jsdoc-var">this.store </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.store</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.data</span><span class="jsdoc-syntax">);
144 </span><span class="jsdoc-var">this.setStore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.store</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
146 </span><span class="jsdoc-var">Roo.View.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
149 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.View</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">, {
151 </span><span class="jsdoc-comment">/**
152 * @cfg {Roo.data.Store} store Data store to load data from.
154 </span><span class="jsdoc-var">store </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
156 </span><span class="jsdoc-comment">/**
157 * @cfg {String|Roo.Element} el The container element.
159 </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
161 </span><span class="jsdoc-comment">/**
162 * @cfg {String|Roo.Template} tpl The template used by this View
164 </span><span class="jsdoc-var">tpl </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
166 </span><span class="jsdoc-comment">/**
167 * @cfg {String} selectedClass The css class to add to selected nodes
169 </span><span class="jsdoc-var">selectedClass </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"x-view-selected"</span><span class="jsdoc-syntax">,
170 </span><span class="jsdoc-comment">/**
171 * @cfg {String} emptyText The empty text to show when nothing is loaded.
173 </span><span class="jsdoc-var">emptyText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">,
174 </span><span class="jsdoc-comment">/**
175 * @cfg {Boolean} multiSelect Allow multiple selection
178 </span><span class="jsdoc-var">multiSelect </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
179 </span><span class="jsdoc-comment">/**
180 * @cfg {Boolean} singleSelect Allow single selection
182 </span><span class="jsdoc-var">singleSelect</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
184 </span><span class="jsdoc-comment">/**
185 * Returns the element this view is bound to.
186 * @return {Roo.Element}
188 </span><span class="jsdoc-var">getEl </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
189 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">;
192 </span><span class="jsdoc-comment">/**
193 * Refreshes the view.
195 </span><span class="jsdoc-var">refresh </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
196 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tpl</span><span class="jsdoc-syntax">;
197 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
198 </span><span class="jsdoc-var">this.el.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">);
199 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= [];
200 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">records </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.store.getRange</span><span class="jsdoc-syntax">();
201 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records.length </span><span class="jsdoc-syntax">< 1){
202 </span><span class="jsdoc-var">this.el.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.emptyText</span><span class="jsdoc-syntax">);
203 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
205 </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">records.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">++){
206 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.prepareData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.data</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
207 </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">html.length</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">t.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">);
209 </span><span class="jsdoc-var">this.el.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">));
210 </span><span class="jsdoc-var">this.nodes </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.dom.childNodes</span><span class="jsdoc-syntax">;
211 </span><span class="jsdoc-var">this.updateIndexes</span><span class="jsdoc-syntax">(0);
214 </span><span class="jsdoc-comment">/**
215 * Function to override to reformat the data that is sent to
216 * the template for each node.
217 * @param {Array/Object} data The raw data (array of colData for a data model bound view or
218 * a JSON object for an UpdateManager bound view).
220 </span><span class="jsdoc-var">prepareData </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">){
221 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">data</span><span class="jsdoc-syntax">;
224 </span><span class="jsdoc-var">onUpdate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ds</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">){
225 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
226 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.store.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">);
227 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.nodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">];
228 </span><span class="jsdoc-var">this.tpl.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.prepareData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">record.data</span><span class="jsdoc-syntax">));
229 </span><span class="jsdoc-var">n.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
230 </span><span class="jsdoc-var">this.updateIndexes</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
233 </span><span class="jsdoc-var">onAdd </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ds</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">){
234 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
235 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.nodes.length </span><span class="jsdoc-syntax">== 0){
236 </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
237 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
239 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.nodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">];
240 </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">records.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">++){
241 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.prepareData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">records</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.data</span><span class="jsdoc-syntax">);
242 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">){
243 </span><span class="jsdoc-var">this.tpl.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">);
244 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
245 </span><span class="jsdoc-var">this.tpl.append</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">);
248 </span><span class="jsdoc-var">this.updateIndexes</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
251 </span><span class="jsdoc-var">onRemove </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ds</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">record</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">){
252 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
253 </span><span class="jsdoc-var">this.el.dom.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.nodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">]);
254 </span><span class="jsdoc-var">this.updateIndexes</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">);
257 </span><span class="jsdoc-comment">/**
258 * Refresh an individual node.
259 * @param {Number} index
261 </span><span class="jsdoc-var">refreshNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">){
262 </span><span class="jsdoc-var">this.onUpdate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.store</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.store.getAt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">));
265 </span><span class="jsdoc-var">updateIndexes </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">startIndex</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">endIndex</span><span class="jsdoc-syntax">){
266 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ns </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.nodes</span><span class="jsdoc-syntax">;
267 </span><span class="jsdoc-var">startIndex </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">startIndex </span><span class="jsdoc-syntax">|| 0;
268 </span><span class="jsdoc-var">endIndex </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">endIndex </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">ns.length </span><span class="jsdoc-syntax">- 1;
269 </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">= </span><span class="jsdoc-var">startIndex</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax"><= </span><span class="jsdoc-var">endIndex</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
270 </span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.nodeIndex </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">;
274 </span><span class="jsdoc-comment">/**
275 * Changes the data store this view uses and refresh the view.
276 * @param {Store} store
278 </span><span class="jsdoc-var">setStore </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">store</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">initial</span><span class="jsdoc-syntax">){
279 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">initial </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.store</span><span class="jsdoc-syntax">){
280 </span><span class="jsdoc-var">this.store.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"datachanged"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">);
281 </span><span class="jsdoc-var">this.store.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"add"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onAdd</span><span class="jsdoc-syntax">);
282 </span><span class="jsdoc-var">this.store.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"remove"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onRemove</span><span class="jsdoc-syntax">);
283 </span><span class="jsdoc-var">this.store.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"update"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onUpdate</span><span class="jsdoc-syntax">);
284 </span><span class="jsdoc-var">this.store.un</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"clear"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">);
286 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">store</span><span class="jsdoc-syntax">){
288 </span><span class="jsdoc-var">store.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"datachanged"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
289 </span><span class="jsdoc-var">store.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"add"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onAdd</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
290 </span><span class="jsdoc-var">store.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"remove"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onRemove</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
291 </span><span class="jsdoc-var">store.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"update"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onUpdate</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
292 </span><span class="jsdoc-var">store.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"clear"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
295 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">store</span><span class="jsdoc-syntax">){
296 </span><span class="jsdoc-var">this.refresh</span><span class="jsdoc-syntax">();
300 </span><span class="jsdoc-comment">/**
301 * Returns the template node the passed child belongs to or null if it doesn't belong to one.
302 * @param {HTMLElement} node
303 * @return {HTMLElement} The template node
305 </span><span class="jsdoc-var">findItemFromChild </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">){
306 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.dom</span><span class="jsdoc-syntax">;
307 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">node.parentNode </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">){
308 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
310 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.parentNode</span><span class="jsdoc-syntax">;
311 </span><span class="jsdoc-keyword">while</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">){
312 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p.parentNode </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">){
313 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">;
315 </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">p.parentNode</span><span class="jsdoc-syntax">;
317 </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
320 </span><span class="jsdoc-comment">/** @ignore */
321 </span><span class="jsdoc-var">onClick </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
322 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">item </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.findItemFromChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.getTarget</span><span class="jsdoc-syntax">());
323 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">){
324 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">);
325 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.onItemClick</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
326 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"click"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
328 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
329 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">();
333 </span><span class="jsdoc-comment">/** @ignore */
334 </span><span class="jsdoc-var">onContextMenu </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
335 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">item </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.findItemFromChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.getTarget</span><span class="jsdoc-syntax">());
336 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">){
337 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"contextmenu"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
341 </span><span class="jsdoc-comment">/** @ignore */
342 </span><span class="jsdoc-var">onDblClick </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
343 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">item </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.findItemFromChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.getTarget</span><span class="jsdoc-syntax">());
344 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">){
345 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"dblclick"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
349 </span><span class="jsdoc-var">onItemClick </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
350 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"beforeclick"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) === </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
351 </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
353 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.multiSelect </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.singleSelect</span><span class="jsdoc-syntax">){
354 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.multiSelect </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">e.shiftKey </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.lastSelection</span><span class="jsdoc-syntax">){
355 </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getNodes</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.lastSelection</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">), </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
356 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
357 </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.multiSelect </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">e.ctrlKey</span><span class="jsdoc-syntax">);
358 </span><span class="jsdoc-var">this.lastSelection </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">;
360 </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
362 </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
365 </span><span class="jsdoc-comment">/**
366 * Get the number of selected nodes.
369 </span><span class="jsdoc-var">getSelectionCount </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
370 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selections.length</span><span class="jsdoc-syntax">;
373 </span><span class="jsdoc-comment">/**
374 * Get the currently selected nodes.
375 * @return {Array} An array of HTMLElements
377 </span><span class="jsdoc-var">getSelectedNodes </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
378 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">;
381 </span><span class="jsdoc-comment">/**
382 * Get the indexes of the selected nodes.
385 </span><span class="jsdoc-var">getSelectedIndexes </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
386 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">indexes </span><span class="jsdoc-syntax">= [], </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">;
387 </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">s.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">++){
388 </span><span class="jsdoc-var">indexes.push</span><span class="jsdoc-syntax">(</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">.nodeIndex</span><span class="jsdoc-syntax">);
390 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">indexes</span><span class="jsdoc-syntax">;
393 </span><span class="jsdoc-comment">/**
394 * Clear all selections
395 * @param {Boolean} suppressEvent (optional) true to skip firing of the selectionchange event
397 </span><span class="jsdoc-var">clearSelections </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">suppressEvent</span><span class="jsdoc-syntax">){
398 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.nodes </span><span class="jsdoc-syntax">&& (</span><span class="jsdoc-var">this.multiSelect </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.singleSelect</span><span class="jsdoc-syntax">) && </span><span class="jsdoc-var">this.selections.length </span><span class="jsdoc-syntax">> 0){
399 </span><span class="jsdoc-var">this.cmp.elements </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">;
400 </span><span class="jsdoc-var">this.cmp.removeClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selectedClass</span><span class="jsdoc-syntax">);
401 </span><span class="jsdoc-var">this.selections </span><span class="jsdoc-syntax">= [];
402 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">suppressEvent</span><span class="jsdoc-syntax">){
403 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"selectionchange"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">);
408 </span><span class="jsdoc-comment">/**
409 * Returns true if the passed node is selected
410 * @param {HTMLElement/Number} node The node or node index
413 </span><span class="jsdoc-var">isSelected </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">){
414 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">;
415 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.length </span><span class="jsdoc-syntax">< 1){
416 </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
418 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
419 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">s.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) !== -1;
422 </span><span class="jsdoc-comment">/**
424 * @param {Array/HTMLElement/String/Number} nodeInfo An HTMLElement template node, index of a template node, id of a template node or an array of any of those to select
425 * @param {Boolean} keepExisting (optional) true to keep existing selections
426 * @param {Boolean} suppressEvent (optional) true to skip firing of the selectionchange vent
428 </span><span class="jsdoc-var">select </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeInfo</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">suppressEvent</span><span class="jsdoc-syntax">){
429 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeInfo </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">){
430 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
431 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
433 </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">nodeInfo.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">++){
434 </span><span class="jsdoc-var">this.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeInfo</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">], </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
436 } </span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
437 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeInfo</span><span class="jsdoc-syntax">);
438 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">&& !</span><span class="jsdoc-var">this.isSelected</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)){
439 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">keepExisting</span><span class="jsdoc-syntax">){
440 </span><span class="jsdoc-var">this.clearSelections</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
442 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"beforeselect"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
443 </span><span class="jsdoc-var">Roo.fly</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.selectedClass</span><span class="jsdoc-syntax">);
444 </span><span class="jsdoc-var">this.selections.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
445 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">suppressEvent</span><span class="jsdoc-syntax">){
446 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"selectionchange"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.selections</span><span class="jsdoc-syntax">);
453 </span><span class="jsdoc-comment">/**
454 * Gets a template node.
455 * @param {HTMLElement/String/Number} nodeInfo An HTMLElement template node, index of a template node or the id of a template node
456 * @return {HTMLElement} The node or null if it wasn't found
458 </span><span class="jsdoc-var">getNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeInfo</span><span class="jsdoc-syntax">){
459 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">nodeInfo </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">"string"</span><span class="jsdoc-syntax">){
460 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">document.getElementById</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeInfo</span><span class="jsdoc-syntax">);
461 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">nodeInfo </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">"number"</span><span class="jsdoc-syntax">){
462 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.nodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">nodeInfo</span><span class="jsdoc-syntax">];
464 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">nodeInfo</span><span class="jsdoc-syntax">;
467 </span><span class="jsdoc-comment">/**
468 * Gets a range template nodes.
469 * @param {Number} startIndex
470 * @param {Number} endIndex
471 * @return {Array} An array of nodes
473 </span><span class="jsdoc-var">getNodes </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">start</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">){
474 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ns </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.nodes</span><span class="jsdoc-syntax">;
475 </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">start </span><span class="jsdoc-syntax">|| 0;
476 </span><span class="jsdoc-var">end </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">end </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">"undefined" </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">ns.length </span><span class="jsdoc-syntax">- 1 : </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">;
477 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodes </span><span class="jsdoc-syntax">= [];
478 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">start </span><span class="jsdoc-syntax"><= </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">){
479 </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">= </span><span class="jsdoc-var">start</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax"><= </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
480 </span><span class="jsdoc-var">nodes.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
482 } </span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
483 </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">= </span><span class="jsdoc-var">start</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">>= </span><span class="jsdoc-var">end</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">--){
484 </span><span class="jsdoc-var">nodes.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
487 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">nodes</span><span class="jsdoc-syntax">;
490 </span><span class="jsdoc-comment">/**
491 * Finds the index of the passed node
492 * @param {HTMLElement/String/Number} nodeInfo An HTMLElement template node, index of a template node or the id of a template node
493 * @return {Number} The index of the node or -1
495 </span><span class="jsdoc-var">indexOf </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">){
496 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
497 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">node.nodeIndex </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">"number"</span><span class="jsdoc-syntax">){
498 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node.nodeIndex</span><span class="jsdoc-syntax">;
500 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ns </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.nodes</span><span class="jsdoc-syntax">;
501 </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">ns.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">++){
502 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] == </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
503 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">;
506 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">-1;
509 </span></code></body></html>