rlm@46
|
1 /*
|
rlm@46
|
2 * Ext JS Library 2.1
|
rlm@46
|
3 * Copyright(c) 2006-2008, Ext JS, LLC.
|
rlm@46
|
4 * licensing@extjs.com
|
rlm@46
|
5 *
|
rlm@46
|
6 * http://extjs.com/license
|
rlm@46
|
7 */
|
rlm@46
|
8
|
rlm@46
|
9
|
rlm@46
|
10 Ext.DomHelper = function(){
|
rlm@46
|
11 var tempTableEl = null;
|
rlm@46
|
12 var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
|
rlm@46
|
13 var tableRe = /^table|tbody|tr|td$/i;
|
rlm@46
|
14
|
rlm@46
|
15 var createHtml = function(o){
|
rlm@46
|
16 if(typeof o == 'string'){
|
rlm@46
|
17 return o;
|
rlm@46
|
18 }
|
rlm@46
|
19 var b = "";
|
rlm@46
|
20 if (Ext.isArray(o)) {
|
rlm@46
|
21 for (var i = 0, l = o.length; i < l; i++) {
|
rlm@46
|
22 b += createHtml(o[i]);
|
rlm@46
|
23 }
|
rlm@46
|
24 return b;
|
rlm@46
|
25 }
|
rlm@46
|
26 if(!o.tag){
|
rlm@46
|
27 o.tag = "div";
|
rlm@46
|
28 }
|
rlm@46
|
29 b += "<" + o.tag;
|
rlm@46
|
30 for(var attr in o){
|
rlm@46
|
31 if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue;
|
rlm@46
|
32 if(attr == "style"){
|
rlm@46
|
33 var s = o["style"];
|
rlm@46
|
34 if(typeof s == "function"){
|
rlm@46
|
35 s = s.call();
|
rlm@46
|
36 }
|
rlm@46
|
37 if(typeof s == "string"){
|
rlm@46
|
38 b += ' style="' + s + '"';
|
rlm@46
|
39 }else if(typeof s == "object"){
|
rlm@46
|
40 b += ' style="';
|
rlm@46
|
41 for(var key in s){
|
rlm@46
|
42 if(typeof s[key] != "function"){
|
rlm@46
|
43 b += key + ":" + s[key] + ";";
|
rlm@46
|
44 }
|
rlm@46
|
45 }
|
rlm@46
|
46 b += '"';
|
rlm@46
|
47 }
|
rlm@46
|
48 }else{
|
rlm@46
|
49 if(attr == "cls"){
|
rlm@46
|
50 b += ' class="' + o["cls"] + '"';
|
rlm@46
|
51 }else if(attr == "htmlFor"){
|
rlm@46
|
52 b += ' for="' + o["htmlFor"] + '"';
|
rlm@46
|
53 }else{
|
rlm@46
|
54 b += " " + attr + '="' + o[attr] + '"';
|
rlm@46
|
55 }
|
rlm@46
|
56 }
|
rlm@46
|
57 }
|
rlm@46
|
58 if(emptyTags.test(o.tag)){
|
rlm@46
|
59 b += "/>";
|
rlm@46
|
60 }else{
|
rlm@46
|
61 b += ">";
|
rlm@46
|
62 var cn = o.children || o.cn;
|
rlm@46
|
63 if(cn){
|
rlm@46
|
64 b += createHtml(cn);
|
rlm@46
|
65 } else if(o.html){
|
rlm@46
|
66 b += o.html;
|
rlm@46
|
67 }
|
rlm@46
|
68 b += "</" + o.tag + ">";
|
rlm@46
|
69 }
|
rlm@46
|
70 return b;
|
rlm@46
|
71 };
|
rlm@46
|
72
|
rlm@46
|
73
|
rlm@46
|
74 var createDom = function(o, parentNode){
|
rlm@46
|
75 var el;
|
rlm@46
|
76 if (Ext.isArray(o)) { el = document.createDocumentFragment(); for(var i = 0, l = o.length; i < l; i++) {
|
rlm@46
|
77 createDom(o[i], el);
|
rlm@46
|
78 }
|
rlm@46
|
79 } else if (typeof o == "string") { el = document.createTextNode(o);
|
rlm@46
|
80 } else {
|
rlm@46
|
81 el = document.createElement(o.tag||'div');
|
rlm@46
|
82 var useSet = !!el.setAttribute; for(var attr in o){
|
rlm@46
|
83 if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue;
|
rlm@46
|
84 if(attr=="cls"){
|
rlm@46
|
85 el.className = o["cls"];
|
rlm@46
|
86 }else{
|
rlm@46
|
87 if(useSet) el.setAttribute(attr, o[attr]);
|
rlm@46
|
88 else el[attr] = o[attr];
|
rlm@46
|
89 }
|
rlm@46
|
90 }
|
rlm@46
|
91 Ext.DomHelper.applyStyles(el, o.style);
|
rlm@46
|
92 var cn = o.children || o.cn;
|
rlm@46
|
93 if(cn){
|
rlm@46
|
94 createDom(cn, el);
|
rlm@46
|
95 } else if(o.html){
|
rlm@46
|
96 el.innerHTML = o.html;
|
rlm@46
|
97 }
|
rlm@46
|
98 }
|
rlm@46
|
99 if(parentNode){
|
rlm@46
|
100 parentNode.appendChild(el);
|
rlm@46
|
101 }
|
rlm@46
|
102 return el;
|
rlm@46
|
103 };
|
rlm@46
|
104
|
rlm@46
|
105 var ieTable = function(depth, s, h, e){
|
rlm@46
|
106 tempTableEl.innerHTML = [s, h, e].join('');
|
rlm@46
|
107 var i = -1, el = tempTableEl;
|
rlm@46
|
108 while(++i < depth){
|
rlm@46
|
109 el = el.firstChild;
|
rlm@46
|
110 }
|
rlm@46
|
111 return el;
|
rlm@46
|
112 };
|
rlm@46
|
113
|
rlm@46
|
114 var ts = '<table>',
|
rlm@46
|
115 te = '</table>',
|
rlm@46
|
116 tbs = ts+'<tbody>',
|
rlm@46
|
117 tbe = '</tbody>'+te,
|
rlm@46
|
118 trs = tbs + '<tr>',
|
rlm@46
|
119 tre = '</tr>'+tbe;
|
rlm@46
|
120
|
rlm@46
|
121
|
rlm@46
|
122 var insertIntoTable = function(tag, where, el, html){
|
rlm@46
|
123 if(!tempTableEl){
|
rlm@46
|
124 tempTableEl = document.createElement('div');
|
rlm@46
|
125 }
|
rlm@46
|
126 var node;
|
rlm@46
|
127 var before = null;
|
rlm@46
|
128 if(tag == 'td'){
|
rlm@46
|
129 if(where == 'afterbegin' || where == 'beforeend'){ return;
|
rlm@46
|
130 }
|
rlm@46
|
131 if(where == 'beforebegin'){
|
rlm@46
|
132 before = el;
|
rlm@46
|
133 el = el.parentNode;
|
rlm@46
|
134 } else{
|
rlm@46
|
135 before = el.nextSibling;
|
rlm@46
|
136 el = el.parentNode;
|
rlm@46
|
137 }
|
rlm@46
|
138 node = ieTable(4, trs, html, tre);
|
rlm@46
|
139 }
|
rlm@46
|
140 else if(tag == 'tr'){
|
rlm@46
|
141 if(where == 'beforebegin'){
|
rlm@46
|
142 before = el;
|
rlm@46
|
143 el = el.parentNode;
|
rlm@46
|
144 node = ieTable(3, tbs, html, tbe);
|
rlm@46
|
145 } else if(where == 'afterend'){
|
rlm@46
|
146 before = el.nextSibling;
|
rlm@46
|
147 el = el.parentNode;
|
rlm@46
|
148 node = ieTable(3, tbs, html, tbe);
|
rlm@46
|
149 } else{ if(where == 'afterbegin'){
|
rlm@46
|
150 before = el.firstChild;
|
rlm@46
|
151 }
|
rlm@46
|
152 node = ieTable(4, trs, html, tre);
|
rlm@46
|
153 }
|
rlm@46
|
154 } else if(tag == 'tbody'){
|
rlm@46
|
155 if(where == 'beforebegin'){
|
rlm@46
|
156 before = el;
|
rlm@46
|
157 el = el.parentNode;
|
rlm@46
|
158 node = ieTable(2, ts, html, te);
|
rlm@46
|
159 } else if(where == 'afterend'){
|
rlm@46
|
160 before = el.nextSibling;
|
rlm@46
|
161 el = el.parentNode;
|
rlm@46
|
162 node = ieTable(2, ts, html, te);
|
rlm@46
|
163 } else{
|
rlm@46
|
164 if(where == 'afterbegin'){
|
rlm@46
|
165 before = el.firstChild;
|
rlm@46
|
166 }
|
rlm@46
|
167 node = ieTable(3, tbs, html, tbe);
|
rlm@46
|
168 }
|
rlm@46
|
169 } else{ if(where == 'beforebegin' || where == 'afterend'){ return;
|
rlm@46
|
170 }
|
rlm@46
|
171 if(where == 'afterbegin'){
|
rlm@46
|
172 before = el.firstChild;
|
rlm@46
|
173 }
|
rlm@46
|
174 node = ieTable(2, ts, html, te);
|
rlm@46
|
175 }
|
rlm@46
|
176 el.insertBefore(node, before);
|
rlm@46
|
177 return node;
|
rlm@46
|
178 };
|
rlm@46
|
179
|
rlm@46
|
180
|
rlm@46
|
181 return {
|
rlm@46
|
182
|
rlm@46
|
183 useDom : false,
|
rlm@46
|
184
|
rlm@46
|
185
|
rlm@46
|
186 markup : function(o){
|
rlm@46
|
187 return createHtml(o);
|
rlm@46
|
188 },
|
rlm@46
|
189
|
rlm@46
|
190
|
rlm@46
|
191 applyStyles : function(el, styles){
|
rlm@46
|
192 if(styles){
|
rlm@46
|
193 el = Ext.fly(el);
|
rlm@46
|
194 if(typeof styles == "string"){
|
rlm@46
|
195 var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
|
rlm@46
|
196 var matches;
|
rlm@46
|
197 while ((matches = re.exec(styles)) != null){
|
rlm@46
|
198 el.setStyle(matches[1], matches[2]);
|
rlm@46
|
199 }
|
rlm@46
|
200 }else if (typeof styles == "object"){
|
rlm@46
|
201 for (var style in styles){
|
rlm@46
|
202 el.setStyle(style, styles[style]);
|
rlm@46
|
203 }
|
rlm@46
|
204 }else if (typeof styles == "function"){
|
rlm@46
|
205 Ext.DomHelper.applyStyles(el, styles.call());
|
rlm@46
|
206 }
|
rlm@46
|
207 }
|
rlm@46
|
208 },
|
rlm@46
|
209
|
rlm@46
|
210
|
rlm@46
|
211 insertHtml : function(where, el, html){
|
rlm@46
|
212 where = where.toLowerCase();
|
rlm@46
|
213 if(el.insertAdjacentHTML){
|
rlm@46
|
214 if(tableRe.test(el.tagName)){
|
rlm@46
|
215 var rs;
|
rlm@46
|
216 if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
|
rlm@46
|
217 return rs;
|
rlm@46
|
218 }
|
rlm@46
|
219 }
|
rlm@46
|
220 switch(where){
|
rlm@46
|
221 case "beforebegin":
|
rlm@46
|
222 el.insertAdjacentHTML('BeforeBegin', html);
|
rlm@46
|
223 return el.previousSibling;
|
rlm@46
|
224 case "afterbegin":
|
rlm@46
|
225 el.insertAdjacentHTML('AfterBegin', html);
|
rlm@46
|
226 return el.firstChild;
|
rlm@46
|
227 case "beforeend":
|
rlm@46
|
228 el.insertAdjacentHTML('BeforeEnd', html);
|
rlm@46
|
229 return el.lastChild;
|
rlm@46
|
230 case "afterend":
|
rlm@46
|
231 el.insertAdjacentHTML('AfterEnd', html);
|
rlm@46
|
232 return el.nextSibling;
|
rlm@46
|
233 }
|
rlm@46
|
234 throw 'Illegal insertion point -> "' + where + '"';
|
rlm@46
|
235 }
|
rlm@46
|
236 var range = el.ownerDocument.createRange();
|
rlm@46
|
237 var frag;
|
rlm@46
|
238 switch(where){
|
rlm@46
|
239 case "beforebegin":
|
rlm@46
|
240 range.setStartBefore(el);
|
rlm@46
|
241 frag = range.createContextualFragment(html);
|
rlm@46
|
242 el.parentNode.insertBefore(frag, el);
|
rlm@46
|
243 return el.previousSibling;
|
rlm@46
|
244 case "afterbegin":
|
rlm@46
|
245 if(el.firstChild){
|
rlm@46
|
246 range.setStartBefore(el.firstChild);
|
rlm@46
|
247 frag = range.createContextualFragment(html);
|
rlm@46
|
248 el.insertBefore(frag, el.firstChild);
|
rlm@46
|
249 return el.firstChild;
|
rlm@46
|
250 }else{
|
rlm@46
|
251 el.innerHTML = html;
|
rlm@46
|
252 return el.firstChild;
|
rlm@46
|
253 }
|
rlm@46
|
254 case "beforeend":
|
rlm@46
|
255 if(el.lastChild){
|
rlm@46
|
256 range.setStartAfter(el.lastChild);
|
rlm@46
|
257 frag = range.createContextualFragment(html);
|
rlm@46
|
258 el.appendChild(frag);
|
rlm@46
|
259 return el.lastChild;
|
rlm@46
|
260 }else{
|
rlm@46
|
261 el.innerHTML = html;
|
rlm@46
|
262 return el.lastChild;
|
rlm@46
|
263 }
|
rlm@46
|
264 case "afterend":
|
rlm@46
|
265 range.setStartAfter(el);
|
rlm@46
|
266 frag = range.createContextualFragment(html);
|
rlm@46
|
267 el.parentNode.insertBefore(frag, el.nextSibling);
|
rlm@46
|
268 return el.nextSibling;
|
rlm@46
|
269 }
|
rlm@46
|
270 throw 'Illegal insertion point -> "' + where + '"';
|
rlm@46
|
271 },
|
rlm@46
|
272
|
rlm@46
|
273
|
rlm@46
|
274 insertBefore : function(el, o, returnElement){
|
rlm@46
|
275 return this.doInsert(el, o, returnElement, "beforeBegin");
|
rlm@46
|
276 },
|
rlm@46
|
277
|
rlm@46
|
278
|
rlm@46
|
279 insertAfter : function(el, o, returnElement){
|
rlm@46
|
280 return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
|
rlm@46
|
281 },
|
rlm@46
|
282
|
rlm@46
|
283
|
rlm@46
|
284 insertFirst : function(el, o, returnElement){
|
rlm@46
|
285 return this.doInsert(el, o, returnElement, "afterBegin", "firstChild");
|
rlm@46
|
286 },
|
rlm@46
|
287
|
rlm@46
|
288 doInsert : function(el, o, returnElement, pos, sibling){
|
rlm@46
|
289 el = Ext.getDom(el);
|
rlm@46
|
290 var newNode;
|
rlm@46
|
291 if(this.useDom){
|
rlm@46
|
292 newNode = createDom(o, null);
|
rlm@46
|
293 (sibling === "firstChild" ? el : el.parentNode).insertBefore(newNode, sibling ? el[sibling] : el);
|
rlm@46
|
294 }else{
|
rlm@46
|
295 var html = createHtml(o);
|
rlm@46
|
296 newNode = this.insertHtml(pos, el, html);
|
rlm@46
|
297 }
|
rlm@46
|
298 return returnElement ? Ext.get(newNode, true) : newNode;
|
rlm@46
|
299 },
|
rlm@46
|
300
|
rlm@46
|
301
|
rlm@46
|
302 append : function(el, o, returnElement){
|
rlm@46
|
303 el = Ext.getDom(el);
|
rlm@46
|
304 var newNode;
|
rlm@46
|
305 if(this.useDom){
|
rlm@46
|
306 newNode = createDom(o, null);
|
rlm@46
|
307 el.appendChild(newNode);
|
rlm@46
|
308 }else{
|
rlm@46
|
309 var html = createHtml(o);
|
rlm@46
|
310 newNode = this.insertHtml("beforeEnd", el, html);
|
rlm@46
|
311 }
|
rlm@46
|
312 return returnElement ? Ext.get(newNode, true) : newNode;
|
rlm@46
|
313 },
|
rlm@46
|
314
|
rlm@46
|
315
|
rlm@46
|
316 overwrite : function(el, o, returnElement){
|
rlm@46
|
317 el = Ext.getDom(el);
|
rlm@46
|
318 el.innerHTML = createHtml(o);
|
rlm@46
|
319 return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
|
rlm@46
|
320 },
|
rlm@46
|
321
|
rlm@46
|
322
|
rlm@46
|
323 createTemplate : function(o){
|
rlm@46
|
324 var html = createHtml(o);
|
rlm@46
|
325 return new Ext.Template(html);
|
rlm@46
|
326 }
|
rlm@46
|
327 };
|
rlm@46
|
328 }();
|
rlm@46
|
329
|
rlm@46
|
330
|
rlm@46
|
331 Ext.Template = function(html){
|
rlm@46
|
332 var a = arguments;
|
rlm@46
|
333 if(Ext.isArray(html)){
|
rlm@46
|
334 html = html.join("");
|
rlm@46
|
335 }else if(a.length > 1){
|
rlm@46
|
336 var buf = [];
|
rlm@46
|
337 for(var i = 0, len = a.length; i < len; i++){
|
rlm@46
|
338 if(typeof a[i] == 'object'){
|
rlm@46
|
339 Ext.apply(this, a[i]);
|
rlm@46
|
340 }else{
|
rlm@46
|
341 buf[buf.length] = a[i];
|
rlm@46
|
342 }
|
rlm@46
|
343 }
|
rlm@46
|
344 html = buf.join('');
|
rlm@46
|
345 }
|
rlm@46
|
346
|
rlm@46
|
347 this.html = html;
|
rlm@46
|
348 if(this.compiled){
|
rlm@46
|
349 this.compile();
|
rlm@46
|
350 }
|
rlm@46
|
351 };
|
rlm@46
|
352 Ext.Template.prototype = {
|
rlm@46
|
353
|
rlm@46
|
354 applyTemplate : function(values){
|
rlm@46
|
355 if(this.compiled){
|
rlm@46
|
356 return this.compiled(values);
|
rlm@46
|
357 }
|
rlm@46
|
358 var useF = this.disableFormats !== true;
|
rlm@46
|
359 var fm = Ext.util.Format, tpl = this;
|
rlm@46
|
360 var fn = function(m, name, format, args){
|
rlm@46
|
361 if(format && useF){
|
rlm@46
|
362 if(format.substr(0, 5) == "this."){
|
rlm@46
|
363 return tpl.call(format.substr(5), values[name], values);
|
rlm@46
|
364 }else{
|
rlm@46
|
365 if(args){
|
rlm@46
|
366 var re = /^\s*['"](.*)["']\s*$/;
|
rlm@46
|
367 args = args.split(',');
|
rlm@46
|
368 for(var i = 0, len = args.length; i < len; i++){
|
rlm@46
|
369 args[i] = args[i].replace(re, "$1");
|
rlm@46
|
370 }
|
rlm@46
|
371 args = [values[name]].concat(args);
|
rlm@46
|
372 }else{
|
rlm@46
|
373 args = [values[name]];
|
rlm@46
|
374 }
|
rlm@46
|
375 return fm[format].apply(fm, args);
|
rlm@46
|
376 }
|
rlm@46
|
377 }else{
|
rlm@46
|
378 return values[name] !== undefined ? values[name] : "";
|
rlm@46
|
379 }
|
rlm@46
|
380 };
|
rlm@46
|
381 return this.html.replace(this.re, fn);
|
rlm@46
|
382 },
|
rlm@46
|
383
|
rlm@46
|
384
|
rlm@46
|
385 set : function(html, compile){
|
rlm@46
|
386 this.html = html;
|
rlm@46
|
387 this.compiled = null;
|
rlm@46
|
388 if(compile){
|
rlm@46
|
389 this.compile();
|
rlm@46
|
390 }
|
rlm@46
|
391 return this;
|
rlm@46
|
392 },
|
rlm@46
|
393
|
rlm@46
|
394
|
rlm@46
|
395 disableFormats : false,
|
rlm@46
|
396
|
rlm@46
|
397
|
rlm@46
|
398 re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
|
rlm@46
|
399
|
rlm@46
|
400
|
rlm@46
|
401 compile : function(){
|
rlm@46
|
402 var fm = Ext.util.Format;
|
rlm@46
|
403 var useF = this.disableFormats !== true;
|
rlm@46
|
404 var sep = Ext.isGecko ? "+" : ",";
|
rlm@46
|
405 var fn = function(m, name, format, args){
|
rlm@46
|
406 if(format && useF){
|
rlm@46
|
407 args = args ? ',' + args : "";
|
rlm@46
|
408 if(format.substr(0, 5) != "this."){
|
rlm@46
|
409 format = "fm." + format + '(';
|
rlm@46
|
410 }else{
|
rlm@46
|
411 format = 'this.call("'+ format.substr(5) + '", ';
|
rlm@46
|
412 args = ", values";
|
rlm@46
|
413 }
|
rlm@46
|
414 }else{
|
rlm@46
|
415 args= ''; format = "(values['" + name + "'] == undefined ? '' : ";
|
rlm@46
|
416 }
|
rlm@46
|
417 return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'";
|
rlm@46
|
418 };
|
rlm@46
|
419 var body;
|
rlm@46
|
420 if(Ext.isGecko){
|
rlm@46
|
421 body = "this.compiled = function(values){ return '" +
|
rlm@46
|
422 this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) +
|
rlm@46
|
423 "';};";
|
rlm@46
|
424 }else{
|
rlm@46
|
425 body = ["this.compiled = function(values){ return ['"];
|
rlm@46
|
426 body.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn));
|
rlm@46
|
427 body.push("'].join('');};");
|
rlm@46
|
428 body = body.join('');
|
rlm@46
|
429 }
|
rlm@46
|
430 eval(body);
|
rlm@46
|
431 return this;
|
rlm@46
|
432 },
|
rlm@46
|
433
|
rlm@46
|
434 call : function(fnName, value, allValues){
|
rlm@46
|
435 return this[fnName](value, allValues);
|
rlm@46
|
436 },
|
rlm@46
|
437
|
rlm@46
|
438
|
rlm@46
|
439 insertFirst: function(el, values, returnElement){
|
rlm@46
|
440 return this.doInsert('afterBegin', el, values, returnElement);
|
rlm@46
|
441 },
|
rlm@46
|
442
|
rlm@46
|
443
|
rlm@46
|
444 insertBefore: function(el, values, returnElement){
|
rlm@46
|
445 return this.doInsert('beforeBegin', el, values, returnElement);
|
rlm@46
|
446 },
|
rlm@46
|
447
|
rlm@46
|
448
|
rlm@46
|
449 insertAfter : function(el, values, returnElement){
|
rlm@46
|
450 return this.doInsert('afterEnd', el, values, returnElement);
|
rlm@46
|
451 },
|
rlm@46
|
452
|
rlm@46
|
453
|
rlm@46
|
454 append : function(el, values, returnElement){
|
rlm@46
|
455 return this.doInsert('beforeEnd', el, values, returnElement);
|
rlm@46
|
456 },
|
rlm@46
|
457
|
rlm@46
|
458 doInsert : function(where, el, values, returnEl){
|
rlm@46
|
459 el = Ext.getDom(el);
|
rlm@46
|
460 var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values));
|
rlm@46
|
461 return returnEl ? Ext.get(newNode, true) : newNode;
|
rlm@46
|
462 },
|
rlm@46
|
463
|
rlm@46
|
464
|
rlm@46
|
465 overwrite : function(el, values, returnElement){
|
rlm@46
|
466 el = Ext.getDom(el);
|
rlm@46
|
467 el.innerHTML = this.applyTemplate(values);
|
rlm@46
|
468 return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
|
rlm@46
|
469 }
|
rlm@46
|
470 };
|
rlm@46
|
471
|
rlm@46
|
472 Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;
|
rlm@46
|
473
|
rlm@46
|
474 Ext.DomHelper.Template = Ext.Template;
|
rlm@46
|
475
|
rlm@46
|
476
|
rlm@46
|
477 Ext.Template.from = function(el, config){
|
rlm@46
|
478 el = Ext.getDom(el);
|
rlm@46
|
479 return new Ext.Template(el.value || el.innerHTML, config || '');
|
rlm@46
|
480 };
|
rlm@46
|
481
|
rlm@46
|
482
|
rlm@46
|
483 Ext.DomQuery = function(){
|
rlm@46
|
484 var cache = {}, simpleCache = {}, valueCache = {};
|
rlm@46
|
485 var nonSpace = /\S/;
|
rlm@46
|
486 var trimRe = /^\s+|\s+$/g;
|
rlm@46
|
487 var tplRe = /\{(\d+)\}/g;
|
rlm@46
|
488 var modeRe = /^(\s?[\/>+~]\s?|\s|$)/;
|
rlm@46
|
489 var tagTokenRe = /^(#)?([\w-\*]+)/;
|
rlm@46
|
490 var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/;
|
rlm@46
|
491
|
rlm@46
|
492 function child(p, index){
|
rlm@46
|
493 var i = 0;
|
rlm@46
|
494 var n = p.firstChild;
|
rlm@46
|
495 while(n){
|
rlm@46
|
496 if(n.nodeType == 1){
|
rlm@46
|
497 if(++i == index){
|
rlm@46
|
498 return n;
|
rlm@46
|
499 }
|
rlm@46
|
500 }
|
rlm@46
|
501 n = n.nextSibling;
|
rlm@46
|
502 }
|
rlm@46
|
503 return null;
|
rlm@46
|
504 };
|
rlm@46
|
505
|
rlm@46
|
506 function next(n){
|
rlm@46
|
507 while((n = n.nextSibling) && n.nodeType != 1);
|
rlm@46
|
508 return n;
|
rlm@46
|
509 };
|
rlm@46
|
510
|
rlm@46
|
511 function prev(n){
|
rlm@46
|
512 while((n = n.previousSibling) && n.nodeType != 1);
|
rlm@46
|
513 return n;
|
rlm@46
|
514 };
|
rlm@46
|
515
|
rlm@46
|
516 function children(d){
|
rlm@46
|
517 var n = d.firstChild, ni = -1;
|
rlm@46
|
518 while(n){
|
rlm@46
|
519 var nx = n.nextSibling;
|
rlm@46
|
520 if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
|
rlm@46
|
521 d.removeChild(n);
|
rlm@46
|
522 }else{
|
rlm@46
|
523 n.nodeIndex = ++ni;
|
rlm@46
|
524 }
|
rlm@46
|
525 n = nx;
|
rlm@46
|
526 }
|
rlm@46
|
527 return this;
|
rlm@46
|
528 };
|
rlm@46
|
529
|
rlm@46
|
530 function byClassName(c, a, v){
|
rlm@46
|
531 if(!v){
|
rlm@46
|
532 return c;
|
rlm@46
|
533 }
|
rlm@46
|
534 var r = [], ri = -1, cn;
|
rlm@46
|
535 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
536 if((' '+ci.className+' ').indexOf(v) != -1){
|
rlm@46
|
537 r[++ri] = ci;
|
rlm@46
|
538 }
|
rlm@46
|
539 }
|
rlm@46
|
540 return r;
|
rlm@46
|
541 };
|
rlm@46
|
542
|
rlm@46
|
543 function attrValue(n, attr){
|
rlm@46
|
544 if(!n.tagName && typeof n.length != "undefined"){
|
rlm@46
|
545 n = n[0];
|
rlm@46
|
546 }
|
rlm@46
|
547 if(!n){
|
rlm@46
|
548 return null;
|
rlm@46
|
549 }
|
rlm@46
|
550 if(attr == "for"){
|
rlm@46
|
551 return n.htmlFor;
|
rlm@46
|
552 }
|
rlm@46
|
553 if(attr == "class" || attr == "className"){
|
rlm@46
|
554 return n.className;
|
rlm@46
|
555 }
|
rlm@46
|
556 return n.getAttribute(attr) || n[attr];
|
rlm@46
|
557
|
rlm@46
|
558 };
|
rlm@46
|
559
|
rlm@46
|
560 function getNodes(ns, mode, tagName){
|
rlm@46
|
561 var result = [], ri = -1, cs;
|
rlm@46
|
562 if(!ns){
|
rlm@46
|
563 return result;
|
rlm@46
|
564 }
|
rlm@46
|
565 tagName = tagName || "*";
|
rlm@46
|
566 if(typeof ns.getElementsByTagName != "undefined"){
|
rlm@46
|
567 ns = [ns];
|
rlm@46
|
568 }
|
rlm@46
|
569 if(!mode){
|
rlm@46
|
570 for(var i = 0, ni; ni = ns[i]; i++){
|
rlm@46
|
571 cs = ni.getElementsByTagName(tagName);
|
rlm@46
|
572 for(var j = 0, ci; ci = cs[j]; j++){
|
rlm@46
|
573 result[++ri] = ci;
|
rlm@46
|
574 }
|
rlm@46
|
575 }
|
rlm@46
|
576 }else if(mode == "/" || mode == ">"){
|
rlm@46
|
577 var utag = tagName.toUpperCase();
|
rlm@46
|
578 for(var i = 0, ni, cn; ni = ns[i]; i++){
|
rlm@46
|
579 cn = ni.children || ni.childNodes;
|
rlm@46
|
580 for(var j = 0, cj; cj = cn[j]; j++){
|
rlm@46
|
581 if(cj.nodeName == utag || cj.nodeName == tagName || tagName == '*'){
|
rlm@46
|
582 result[++ri] = cj;
|
rlm@46
|
583 }
|
rlm@46
|
584 }
|
rlm@46
|
585 }
|
rlm@46
|
586 }else if(mode == "+"){
|
rlm@46
|
587 var utag = tagName.toUpperCase();
|
rlm@46
|
588 for(var i = 0, n; n = ns[i]; i++){
|
rlm@46
|
589 while((n = n.nextSibling) && n.nodeType != 1);
|
rlm@46
|
590 if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){
|
rlm@46
|
591 result[++ri] = n;
|
rlm@46
|
592 }
|
rlm@46
|
593 }
|
rlm@46
|
594 }else if(mode == "~"){
|
rlm@46
|
595 for(var i = 0, n; n = ns[i]; i++){
|
rlm@46
|
596 while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));
|
rlm@46
|
597 if(n){
|
rlm@46
|
598 result[++ri] = n;
|
rlm@46
|
599 }
|
rlm@46
|
600 }
|
rlm@46
|
601 }
|
rlm@46
|
602 return result;
|
rlm@46
|
603 };
|
rlm@46
|
604
|
rlm@46
|
605 function concat(a, b){
|
rlm@46
|
606 if(b.slice){
|
rlm@46
|
607 return a.concat(b);
|
rlm@46
|
608 }
|
rlm@46
|
609 for(var i = 0, l = b.length; i < l; i++){
|
rlm@46
|
610 a[a.length] = b[i];
|
rlm@46
|
611 }
|
rlm@46
|
612 return a;
|
rlm@46
|
613 }
|
rlm@46
|
614
|
rlm@46
|
615 function byTag(cs, tagName){
|
rlm@46
|
616 if(cs.tagName || cs == document){
|
rlm@46
|
617 cs = [cs];
|
rlm@46
|
618 }
|
rlm@46
|
619 if(!tagName){
|
rlm@46
|
620 return cs;
|
rlm@46
|
621 }
|
rlm@46
|
622 var r = [], ri = -1;
|
rlm@46
|
623 tagName = tagName.toLowerCase();
|
rlm@46
|
624 for(var i = 0, ci; ci = cs[i]; i++){
|
rlm@46
|
625 if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
|
rlm@46
|
626 r[++ri] = ci;
|
rlm@46
|
627 }
|
rlm@46
|
628 }
|
rlm@46
|
629 return r;
|
rlm@46
|
630 };
|
rlm@46
|
631
|
rlm@46
|
632 function byId(cs, attr, id){
|
rlm@46
|
633 if(cs.tagName || cs == document){
|
rlm@46
|
634 cs = [cs];
|
rlm@46
|
635 }
|
rlm@46
|
636 if(!id){
|
rlm@46
|
637 return cs;
|
rlm@46
|
638 }
|
rlm@46
|
639 var r = [], ri = -1;
|
rlm@46
|
640 for(var i = 0,ci; ci = cs[i]; i++){
|
rlm@46
|
641 if(ci && ci.id == id){
|
rlm@46
|
642 r[++ri] = ci;
|
rlm@46
|
643 return r;
|
rlm@46
|
644 }
|
rlm@46
|
645 }
|
rlm@46
|
646 return r;
|
rlm@46
|
647 };
|
rlm@46
|
648
|
rlm@46
|
649 function byAttribute(cs, attr, value, op, custom){
|
rlm@46
|
650 var r = [], ri = -1, st = custom=="{";
|
rlm@46
|
651 var f = Ext.DomQuery.operators[op];
|
rlm@46
|
652 for(var i = 0, ci; ci = cs[i]; i++){
|
rlm@46
|
653 var a;
|
rlm@46
|
654 if(st){
|
rlm@46
|
655 a = Ext.DomQuery.getStyle(ci, attr);
|
rlm@46
|
656 }
|
rlm@46
|
657 else if(attr == "class" || attr == "className"){
|
rlm@46
|
658 a = ci.className;
|
rlm@46
|
659 }else if(attr == "for"){
|
rlm@46
|
660 a = ci.htmlFor;
|
rlm@46
|
661 }else if(attr == "href"){
|
rlm@46
|
662 a = ci.getAttribute("href", 2);
|
rlm@46
|
663 }else{
|
rlm@46
|
664 a = ci.getAttribute(attr);
|
rlm@46
|
665 }
|
rlm@46
|
666 if((f && f(a, value)) || (!f && a)){
|
rlm@46
|
667 r[++ri] = ci;
|
rlm@46
|
668 }
|
rlm@46
|
669 }
|
rlm@46
|
670 return r;
|
rlm@46
|
671 };
|
rlm@46
|
672
|
rlm@46
|
673 function byPseudo(cs, name, value){
|
rlm@46
|
674 return Ext.DomQuery.pseudos[name](cs, value);
|
rlm@46
|
675 };
|
rlm@46
|
676
|
rlm@46
|
677
|
rlm@46
|
678
|
rlm@46
|
679
|
rlm@46
|
680 var isIE = window.ActiveXObject ? true : false;
|
rlm@46
|
681
|
rlm@46
|
682
|
rlm@46
|
683
|
rlm@46
|
684 eval("var batch = 30803;");
|
rlm@46
|
685
|
rlm@46
|
686 var key = 30803;
|
rlm@46
|
687
|
rlm@46
|
688 function nodupIEXml(cs){
|
rlm@46
|
689 var d = ++key;
|
rlm@46
|
690 cs[0].setAttribute("_nodup", d);
|
rlm@46
|
691 var r = [cs[0]];
|
rlm@46
|
692 for(var i = 1, len = cs.length; i < len; i++){
|
rlm@46
|
693 var c = cs[i];
|
rlm@46
|
694 if(!c.getAttribute("_nodup") != d){
|
rlm@46
|
695 c.setAttribute("_nodup", d);
|
rlm@46
|
696 r[r.length] = c;
|
rlm@46
|
697 }
|
rlm@46
|
698 }
|
rlm@46
|
699 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
700 cs[i].removeAttribute("_nodup");
|
rlm@46
|
701 }
|
rlm@46
|
702 return r;
|
rlm@46
|
703 }
|
rlm@46
|
704
|
rlm@46
|
705 function nodup(cs){
|
rlm@46
|
706 if(!cs){
|
rlm@46
|
707 return [];
|
rlm@46
|
708 }
|
rlm@46
|
709 var len = cs.length, c, i, r = cs, cj, ri = -1;
|
rlm@46
|
710 if(!len || typeof cs.nodeType != "undefined" || len == 1){
|
rlm@46
|
711 return cs;
|
rlm@46
|
712 }
|
rlm@46
|
713 if(isIE && typeof cs[0].selectSingleNode != "undefined"){
|
rlm@46
|
714 return nodupIEXml(cs);
|
rlm@46
|
715 }
|
rlm@46
|
716 var d = ++key;
|
rlm@46
|
717 cs[0]._nodup = d;
|
rlm@46
|
718 for(i = 1; c = cs[i]; i++){
|
rlm@46
|
719 if(c._nodup != d){
|
rlm@46
|
720 c._nodup = d;
|
rlm@46
|
721 }else{
|
rlm@46
|
722 r = [];
|
rlm@46
|
723 for(var j = 0; j < i; j++){
|
rlm@46
|
724 r[++ri] = cs[j];
|
rlm@46
|
725 }
|
rlm@46
|
726 for(j = i+1; cj = cs[j]; j++){
|
rlm@46
|
727 if(cj._nodup != d){
|
rlm@46
|
728 cj._nodup = d;
|
rlm@46
|
729 r[++ri] = cj;
|
rlm@46
|
730 }
|
rlm@46
|
731 }
|
rlm@46
|
732 return r;
|
rlm@46
|
733 }
|
rlm@46
|
734 }
|
rlm@46
|
735 return r;
|
rlm@46
|
736 }
|
rlm@46
|
737
|
rlm@46
|
738 function quickDiffIEXml(c1, c2){
|
rlm@46
|
739 var d = ++key;
|
rlm@46
|
740 for(var i = 0, len = c1.length; i < len; i++){
|
rlm@46
|
741 c1[i].setAttribute("_qdiff", d);
|
rlm@46
|
742 }
|
rlm@46
|
743 var r = [];
|
rlm@46
|
744 for(var i = 0, len = c2.length; i < len; i++){
|
rlm@46
|
745 if(c2[i].getAttribute("_qdiff") != d){
|
rlm@46
|
746 r[r.length] = c2[i];
|
rlm@46
|
747 }
|
rlm@46
|
748 }
|
rlm@46
|
749 for(var i = 0, len = c1.length; i < len; i++){
|
rlm@46
|
750 c1[i].removeAttribute("_qdiff");
|
rlm@46
|
751 }
|
rlm@46
|
752 return r;
|
rlm@46
|
753 }
|
rlm@46
|
754
|
rlm@46
|
755 function quickDiff(c1, c2){
|
rlm@46
|
756 var len1 = c1.length;
|
rlm@46
|
757 if(!len1){
|
rlm@46
|
758 return c2;
|
rlm@46
|
759 }
|
rlm@46
|
760 if(isIE && c1[0].selectSingleNode){
|
rlm@46
|
761 return quickDiffIEXml(c1, c2);
|
rlm@46
|
762 }
|
rlm@46
|
763 var d = ++key;
|
rlm@46
|
764 for(var i = 0; i < len1; i++){
|
rlm@46
|
765 c1[i]._qdiff = d;
|
rlm@46
|
766 }
|
rlm@46
|
767 var r = [];
|
rlm@46
|
768 for(var i = 0, len = c2.length; i < len; i++){
|
rlm@46
|
769 if(c2[i]._qdiff != d){
|
rlm@46
|
770 r[r.length] = c2[i];
|
rlm@46
|
771 }
|
rlm@46
|
772 }
|
rlm@46
|
773 return r;
|
rlm@46
|
774 }
|
rlm@46
|
775
|
rlm@46
|
776 function quickId(ns, mode, root, id){
|
rlm@46
|
777 if(ns == root){
|
rlm@46
|
778 var d = root.ownerDocument || root;
|
rlm@46
|
779 return d.getElementById(id);
|
rlm@46
|
780 }
|
rlm@46
|
781 ns = getNodes(ns, mode, "*");
|
rlm@46
|
782 return byId(ns, null, id);
|
rlm@46
|
783 }
|
rlm@46
|
784
|
rlm@46
|
785 return {
|
rlm@46
|
786 getStyle : function(el, name){
|
rlm@46
|
787 return Ext.fly(el).getStyle(name);
|
rlm@46
|
788 },
|
rlm@46
|
789
|
rlm@46
|
790 compile : function(path, type){
|
rlm@46
|
791 type = type || "select";
|
rlm@46
|
792
|
rlm@46
|
793 var fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];
|
rlm@46
|
794 var q = path, mode, lq;
|
rlm@46
|
795 var tk = Ext.DomQuery.matchers;
|
rlm@46
|
796 var tklen = tk.length;
|
rlm@46
|
797 var mm;
|
rlm@46
|
798
|
rlm@46
|
799
|
rlm@46
|
800 var lmode = q.match(modeRe);
|
rlm@46
|
801 if(lmode && lmode[1]){
|
rlm@46
|
802 fn[fn.length] = 'mode="'+lmode[1].replace(trimRe, "")+'";';
|
rlm@46
|
803 q = q.replace(lmode[1], "");
|
rlm@46
|
804 }
|
rlm@46
|
805
|
rlm@46
|
806 while(path.substr(0, 1)=="/"){
|
rlm@46
|
807 path = path.substr(1);
|
rlm@46
|
808 }
|
rlm@46
|
809
|
rlm@46
|
810 while(q && lq != q){
|
rlm@46
|
811 lq = q;
|
rlm@46
|
812 var tm = q.match(tagTokenRe);
|
rlm@46
|
813 if(type == "select"){
|
rlm@46
|
814 if(tm){
|
rlm@46
|
815 if(tm[1] == "#"){
|
rlm@46
|
816 fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';
|
rlm@46
|
817 }else{
|
rlm@46
|
818 fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';
|
rlm@46
|
819 }
|
rlm@46
|
820 q = q.replace(tm[0], "");
|
rlm@46
|
821 }else if(q.substr(0, 1) != '@'){
|
rlm@46
|
822 fn[fn.length] = 'n = getNodes(n, mode, "*");';
|
rlm@46
|
823 }
|
rlm@46
|
824 }else{
|
rlm@46
|
825 if(tm){
|
rlm@46
|
826 if(tm[1] == "#"){
|
rlm@46
|
827 fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';
|
rlm@46
|
828 }else{
|
rlm@46
|
829 fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';
|
rlm@46
|
830 }
|
rlm@46
|
831 q = q.replace(tm[0], "");
|
rlm@46
|
832 }
|
rlm@46
|
833 }
|
rlm@46
|
834 while(!(mm = q.match(modeRe))){
|
rlm@46
|
835 var matched = false;
|
rlm@46
|
836 for(var j = 0; j < tklen; j++){
|
rlm@46
|
837 var t = tk[j];
|
rlm@46
|
838 var m = q.match(t.re);
|
rlm@46
|
839 if(m){
|
rlm@46
|
840 fn[fn.length] = t.select.replace(tplRe, function(x, i){
|
rlm@46
|
841 return m[i];
|
rlm@46
|
842 });
|
rlm@46
|
843 q = q.replace(m[0], "");
|
rlm@46
|
844 matched = true;
|
rlm@46
|
845 break;
|
rlm@46
|
846 }
|
rlm@46
|
847 }
|
rlm@46
|
848
|
rlm@46
|
849 if(!matched){
|
rlm@46
|
850 throw 'Error parsing selector, parsing failed at "' + q + '"';
|
rlm@46
|
851 }
|
rlm@46
|
852 }
|
rlm@46
|
853 if(mm[1]){
|
rlm@46
|
854 fn[fn.length] = 'mode="'+mm[1].replace(trimRe, "")+'";';
|
rlm@46
|
855 q = q.replace(mm[1], "");
|
rlm@46
|
856 }
|
rlm@46
|
857 }
|
rlm@46
|
858 fn[fn.length] = "return nodup(n);\n}";
|
rlm@46
|
859 eval(fn.join(""));
|
rlm@46
|
860 return f;
|
rlm@46
|
861 },
|
rlm@46
|
862
|
rlm@46
|
863
|
rlm@46
|
864 select : function(path, root, type){
|
rlm@46
|
865 if(!root || root == document){
|
rlm@46
|
866 root = document;
|
rlm@46
|
867 }
|
rlm@46
|
868 if(typeof root == "string"){
|
rlm@46
|
869 root = document.getElementById(root);
|
rlm@46
|
870 }
|
rlm@46
|
871 var paths = path.split(",");
|
rlm@46
|
872 var results = [];
|
rlm@46
|
873 for(var i = 0, len = paths.length; i < len; i++){
|
rlm@46
|
874 var p = paths[i].replace(trimRe, "");
|
rlm@46
|
875 if(!cache[p]){
|
rlm@46
|
876 cache[p] = Ext.DomQuery.compile(p);
|
rlm@46
|
877 if(!cache[p]){
|
rlm@46
|
878 throw p + " is not a valid selector";
|
rlm@46
|
879 }
|
rlm@46
|
880 }
|
rlm@46
|
881 var result = cache[p](root);
|
rlm@46
|
882 if(result && result != document){
|
rlm@46
|
883 results = results.concat(result);
|
rlm@46
|
884 }
|
rlm@46
|
885 }
|
rlm@46
|
886 if(paths.length > 1){
|
rlm@46
|
887 return nodup(results);
|
rlm@46
|
888 }
|
rlm@46
|
889 return results;
|
rlm@46
|
890 },
|
rlm@46
|
891
|
rlm@46
|
892
|
rlm@46
|
893 selectNode : function(path, root){
|
rlm@46
|
894 return Ext.DomQuery.select(path, root)[0];
|
rlm@46
|
895 },
|
rlm@46
|
896
|
rlm@46
|
897
|
rlm@46
|
898 selectValue : function(path, root, defaultValue){
|
rlm@46
|
899 path = path.replace(trimRe, "");
|
rlm@46
|
900 if(!valueCache[path]){
|
rlm@46
|
901 valueCache[path] = Ext.DomQuery.compile(path, "select");
|
rlm@46
|
902 }
|
rlm@46
|
903 var n = valueCache[path](root);
|
rlm@46
|
904 n = n[0] ? n[0] : n;
|
rlm@46
|
905 var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
|
rlm@46
|
906 return ((v === null||v === undefined||v==='') ? defaultValue : v);
|
rlm@46
|
907 },
|
rlm@46
|
908
|
rlm@46
|
909
|
rlm@46
|
910 selectNumber : function(path, root, defaultValue){
|
rlm@46
|
911 var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
|
rlm@46
|
912 return parseFloat(v);
|
rlm@46
|
913 },
|
rlm@46
|
914
|
rlm@46
|
915
|
rlm@46
|
916 is : function(el, ss){
|
rlm@46
|
917 if(typeof el == "string"){
|
rlm@46
|
918 el = document.getElementById(el);
|
rlm@46
|
919 }
|
rlm@46
|
920 var isArray = Ext.isArray(el);
|
rlm@46
|
921 var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
|
rlm@46
|
922 return isArray ? (result.length == el.length) : (result.length > 0);
|
rlm@46
|
923 },
|
rlm@46
|
924
|
rlm@46
|
925
|
rlm@46
|
926 filter : function(els, ss, nonMatches){
|
rlm@46
|
927 ss = ss.replace(trimRe, "");
|
rlm@46
|
928 if(!simpleCache[ss]){
|
rlm@46
|
929 simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
|
rlm@46
|
930 }
|
rlm@46
|
931 var result = simpleCache[ss](els);
|
rlm@46
|
932 return nonMatches ? quickDiff(result, els) : result;
|
rlm@46
|
933 },
|
rlm@46
|
934
|
rlm@46
|
935
|
rlm@46
|
936 matchers : [{
|
rlm@46
|
937 re: /^\.([\w-]+)/,
|
rlm@46
|
938 select: 'n = byClassName(n, null, " {1} ");'
|
rlm@46
|
939 }, {
|
rlm@46
|
940 re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
|
rlm@46
|
941 select: 'n = byPseudo(n, "{1}", "{2}");'
|
rlm@46
|
942 },{
|
rlm@46
|
943 re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
|
rlm@46
|
944 select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
|
rlm@46
|
945 }, {
|
rlm@46
|
946 re: /^#([\w-]+)/,
|
rlm@46
|
947 select: 'n = byId(n, null, "{1}");'
|
rlm@46
|
948 },{
|
rlm@46
|
949 re: /^@([\w-]+)/,
|
rlm@46
|
950 select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
|
rlm@46
|
951 }
|
rlm@46
|
952 ],
|
rlm@46
|
953
|
rlm@46
|
954
|
rlm@46
|
955 operators : {
|
rlm@46
|
956 "=" : function(a, v){
|
rlm@46
|
957 return a == v;
|
rlm@46
|
958 },
|
rlm@46
|
959 "!=" : function(a, v){
|
rlm@46
|
960 return a != v;
|
rlm@46
|
961 },
|
rlm@46
|
962 "^=" : function(a, v){
|
rlm@46
|
963 return a && a.substr(0, v.length) == v;
|
rlm@46
|
964 },
|
rlm@46
|
965 "$=" : function(a, v){
|
rlm@46
|
966 return a && a.substr(a.length-v.length) == v;
|
rlm@46
|
967 },
|
rlm@46
|
968 "*=" : function(a, v){
|
rlm@46
|
969 return a && a.indexOf(v) !== -1;
|
rlm@46
|
970 },
|
rlm@46
|
971 "%=" : function(a, v){
|
rlm@46
|
972 return (a % v) == 0;
|
rlm@46
|
973 },
|
rlm@46
|
974 "|=" : function(a, v){
|
rlm@46
|
975 return a && (a == v || a.substr(0, v.length+1) == v+'-');
|
rlm@46
|
976 },
|
rlm@46
|
977 "~=" : function(a, v){
|
rlm@46
|
978 return a && (' '+a+' ').indexOf(' '+v+' ') != -1;
|
rlm@46
|
979 }
|
rlm@46
|
980 },
|
rlm@46
|
981
|
rlm@46
|
982
|
rlm@46
|
983 pseudos : {
|
rlm@46
|
984 "first-child" : function(c){
|
rlm@46
|
985 var r = [], ri = -1, n;
|
rlm@46
|
986 for(var i = 0, ci; ci = n = c[i]; i++){
|
rlm@46
|
987 while((n = n.previousSibling) && n.nodeType != 1);
|
rlm@46
|
988 if(!n){
|
rlm@46
|
989 r[++ri] = ci;
|
rlm@46
|
990 }
|
rlm@46
|
991 }
|
rlm@46
|
992 return r;
|
rlm@46
|
993 },
|
rlm@46
|
994
|
rlm@46
|
995 "last-child" : function(c){
|
rlm@46
|
996 var r = [], ri = -1, n;
|
rlm@46
|
997 for(var i = 0, ci; ci = n = c[i]; i++){
|
rlm@46
|
998 while((n = n.nextSibling) && n.nodeType != 1);
|
rlm@46
|
999 if(!n){
|
rlm@46
|
1000 r[++ri] = ci;
|
rlm@46
|
1001 }
|
rlm@46
|
1002 }
|
rlm@46
|
1003 return r;
|
rlm@46
|
1004 },
|
rlm@46
|
1005
|
rlm@46
|
1006 "nth-child" : function(c, a) {
|
rlm@46
|
1007 var r = [], ri = -1;
|
rlm@46
|
1008 var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
|
rlm@46
|
1009 var f = (m[1] || 1) - 0, l = m[2] - 0;
|
rlm@46
|
1010 for(var i = 0, n; n = c[i]; i++){
|
rlm@46
|
1011 var pn = n.parentNode;
|
rlm@46
|
1012 if (batch != pn._batch) {
|
rlm@46
|
1013 var j = 0;
|
rlm@46
|
1014 for(var cn = pn.firstChild; cn; cn = cn.nextSibling){
|
rlm@46
|
1015 if(cn.nodeType == 1){
|
rlm@46
|
1016 cn.nodeIndex = ++j;
|
rlm@46
|
1017 }
|
rlm@46
|
1018 }
|
rlm@46
|
1019 pn._batch = batch;
|
rlm@46
|
1020 }
|
rlm@46
|
1021 if (f == 1) {
|
rlm@46
|
1022 if (l == 0 || n.nodeIndex == l){
|
rlm@46
|
1023 r[++ri] = n;
|
rlm@46
|
1024 }
|
rlm@46
|
1025 } else if ((n.nodeIndex + l) % f == 0){
|
rlm@46
|
1026 r[++ri] = n;
|
rlm@46
|
1027 }
|
rlm@46
|
1028 }
|
rlm@46
|
1029
|
rlm@46
|
1030 return r;
|
rlm@46
|
1031 },
|
rlm@46
|
1032
|
rlm@46
|
1033 "only-child" : function(c){
|
rlm@46
|
1034 var r = [], ri = -1;;
|
rlm@46
|
1035 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1036 if(!prev(ci) && !next(ci)){
|
rlm@46
|
1037 r[++ri] = ci;
|
rlm@46
|
1038 }
|
rlm@46
|
1039 }
|
rlm@46
|
1040 return r;
|
rlm@46
|
1041 },
|
rlm@46
|
1042
|
rlm@46
|
1043 "empty" : function(c){
|
rlm@46
|
1044 var r = [], ri = -1;
|
rlm@46
|
1045 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1046 var cns = ci.childNodes, j = 0, cn, empty = true;
|
rlm@46
|
1047 while(cn = cns[j]){
|
rlm@46
|
1048 ++j;
|
rlm@46
|
1049 if(cn.nodeType == 1 || cn.nodeType == 3){
|
rlm@46
|
1050 empty = false;
|
rlm@46
|
1051 break;
|
rlm@46
|
1052 }
|
rlm@46
|
1053 }
|
rlm@46
|
1054 if(empty){
|
rlm@46
|
1055 r[++ri] = ci;
|
rlm@46
|
1056 }
|
rlm@46
|
1057 }
|
rlm@46
|
1058 return r;
|
rlm@46
|
1059 },
|
rlm@46
|
1060
|
rlm@46
|
1061 "contains" : function(c, v){
|
rlm@46
|
1062 var r = [], ri = -1;
|
rlm@46
|
1063 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1064 if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
|
rlm@46
|
1065 r[++ri] = ci;
|
rlm@46
|
1066 }
|
rlm@46
|
1067 }
|
rlm@46
|
1068 return r;
|
rlm@46
|
1069 },
|
rlm@46
|
1070
|
rlm@46
|
1071 "nodeValue" : function(c, v){
|
rlm@46
|
1072 var r = [], ri = -1;
|
rlm@46
|
1073 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1074 if(ci.firstChild && ci.firstChild.nodeValue == v){
|
rlm@46
|
1075 r[++ri] = ci;
|
rlm@46
|
1076 }
|
rlm@46
|
1077 }
|
rlm@46
|
1078 return r;
|
rlm@46
|
1079 },
|
rlm@46
|
1080
|
rlm@46
|
1081 "checked" : function(c){
|
rlm@46
|
1082 var r = [], ri = -1;
|
rlm@46
|
1083 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1084 if(ci.checked == true){
|
rlm@46
|
1085 r[++ri] = ci;
|
rlm@46
|
1086 }
|
rlm@46
|
1087 }
|
rlm@46
|
1088 return r;
|
rlm@46
|
1089 },
|
rlm@46
|
1090
|
rlm@46
|
1091 "not" : function(c, ss){
|
rlm@46
|
1092 return Ext.DomQuery.filter(c, ss, true);
|
rlm@46
|
1093 },
|
rlm@46
|
1094
|
rlm@46
|
1095 "any" : function(c, selectors){
|
rlm@46
|
1096 var ss = selectors.split('|');
|
rlm@46
|
1097 var r = [], ri = -1, s;
|
rlm@46
|
1098 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1099 for(var j = 0; s = ss[j]; j++){
|
rlm@46
|
1100 if(Ext.DomQuery.is(ci, s)){
|
rlm@46
|
1101 r[++ri] = ci;
|
rlm@46
|
1102 break;
|
rlm@46
|
1103 }
|
rlm@46
|
1104 }
|
rlm@46
|
1105 }
|
rlm@46
|
1106 return r;
|
rlm@46
|
1107 },
|
rlm@46
|
1108
|
rlm@46
|
1109 "odd" : function(c){
|
rlm@46
|
1110 return this["nth-child"](c, "odd");
|
rlm@46
|
1111 },
|
rlm@46
|
1112
|
rlm@46
|
1113 "even" : function(c){
|
rlm@46
|
1114 return this["nth-child"](c, "even");
|
rlm@46
|
1115 },
|
rlm@46
|
1116
|
rlm@46
|
1117 "nth" : function(c, a){
|
rlm@46
|
1118 return c[a-1] || [];
|
rlm@46
|
1119 },
|
rlm@46
|
1120
|
rlm@46
|
1121 "first" : function(c){
|
rlm@46
|
1122 return c[0] || [];
|
rlm@46
|
1123 },
|
rlm@46
|
1124
|
rlm@46
|
1125 "last" : function(c){
|
rlm@46
|
1126 return c[c.length-1] || [];
|
rlm@46
|
1127 },
|
rlm@46
|
1128
|
rlm@46
|
1129 "has" : function(c, ss){
|
rlm@46
|
1130 var s = Ext.DomQuery.select;
|
rlm@46
|
1131 var r = [], ri = -1;
|
rlm@46
|
1132 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1133 if(s(ss, ci).length > 0){
|
rlm@46
|
1134 r[++ri] = ci;
|
rlm@46
|
1135 }
|
rlm@46
|
1136 }
|
rlm@46
|
1137 return r;
|
rlm@46
|
1138 },
|
rlm@46
|
1139
|
rlm@46
|
1140 "next" : function(c, ss){
|
rlm@46
|
1141 var is = Ext.DomQuery.is;
|
rlm@46
|
1142 var r = [], ri = -1;
|
rlm@46
|
1143 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1144 var n = next(ci);
|
rlm@46
|
1145 if(n && is(n, ss)){
|
rlm@46
|
1146 r[++ri] = ci;
|
rlm@46
|
1147 }
|
rlm@46
|
1148 }
|
rlm@46
|
1149 return r;
|
rlm@46
|
1150 },
|
rlm@46
|
1151
|
rlm@46
|
1152 "prev" : function(c, ss){
|
rlm@46
|
1153 var is = Ext.DomQuery.is;
|
rlm@46
|
1154 var r = [], ri = -1;
|
rlm@46
|
1155 for(var i = 0, ci; ci = c[i]; i++){
|
rlm@46
|
1156 var n = prev(ci);
|
rlm@46
|
1157 if(n && is(n, ss)){
|
rlm@46
|
1158 r[++ri] = ci;
|
rlm@46
|
1159 }
|
rlm@46
|
1160 }
|
rlm@46
|
1161 return r;
|
rlm@46
|
1162 }
|
rlm@46
|
1163 }
|
rlm@46
|
1164 };
|
rlm@46
|
1165 }();
|
rlm@46
|
1166
|
rlm@46
|
1167
|
rlm@46
|
1168 Ext.query = Ext.DomQuery.select;
|
rlm@46
|
1169
|
rlm@46
|
1170
|
rlm@46
|
1171 Ext.util.Observable = function(){
|
rlm@46
|
1172
|
rlm@46
|
1173 if(this.listeners){
|
rlm@46
|
1174 this.on(this.listeners);
|
rlm@46
|
1175 delete this.listeners;
|
rlm@46
|
1176 }
|
rlm@46
|
1177 };
|
rlm@46
|
1178 Ext.util.Observable.prototype = {
|
rlm@46
|
1179
|
rlm@46
|
1180 fireEvent : function(){
|
rlm@46
|
1181 if(this.eventsSuspended !== true){
|
rlm@46
|
1182 var ce = this.events[arguments[0].toLowerCase()];
|
rlm@46
|
1183 if(typeof ce == "object"){
|
rlm@46
|
1184 return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
|
rlm@46
|
1185 }
|
rlm@46
|
1186 }
|
rlm@46
|
1187 return true;
|
rlm@46
|
1188 },
|
rlm@46
|
1189
|
rlm@46
|
1190 filterOptRe : /^(?:scope|delay|buffer|single)$/,
|
rlm@46
|
1191
|
rlm@46
|
1192
|
rlm@46
|
1193 addListener : function(eventName, fn, scope, o){
|
rlm@46
|
1194 if(typeof eventName == "object"){
|
rlm@46
|
1195 o = eventName;
|
rlm@46
|
1196 for(var e in o){
|
rlm@46
|
1197 if(this.filterOptRe.test(e)){
|
rlm@46
|
1198 continue;
|
rlm@46
|
1199 }
|
rlm@46
|
1200 if(typeof o[e] == "function"){
|
rlm@46
|
1201 this.addListener(e, o[e], o.scope, o);
|
rlm@46
|
1202 }else{
|
rlm@46
|
1203 this.addListener(e, o[e].fn, o[e].scope, o[e]);
|
rlm@46
|
1204 }
|
rlm@46
|
1205 }
|
rlm@46
|
1206 return;
|
rlm@46
|
1207 }
|
rlm@46
|
1208 o = (!o || typeof o == "boolean") ? {} : o;
|
rlm@46
|
1209 eventName = eventName.toLowerCase();
|
rlm@46
|
1210 var ce = this.events[eventName] || true;
|
rlm@46
|
1211 if(typeof ce == "boolean"){
|
rlm@46
|
1212 ce = new Ext.util.Event(this, eventName);
|
rlm@46
|
1213 this.events[eventName] = ce;
|
rlm@46
|
1214 }
|
rlm@46
|
1215 ce.addListener(fn, scope, o);
|
rlm@46
|
1216 },
|
rlm@46
|
1217
|
rlm@46
|
1218
|
rlm@46
|
1219 removeListener : function(eventName, fn, scope){
|
rlm@46
|
1220 var ce = this.events[eventName.toLowerCase()];
|
rlm@46
|
1221 if(typeof ce == "object"){
|
rlm@46
|
1222 ce.removeListener(fn, scope);
|
rlm@46
|
1223 }
|
rlm@46
|
1224 },
|
rlm@46
|
1225
|
rlm@46
|
1226
|
rlm@46
|
1227 purgeListeners : function(){
|
rlm@46
|
1228 for(var evt in this.events){
|
rlm@46
|
1229 if(typeof this.events[evt] == "object"){
|
rlm@46
|
1230 this.events[evt].clearListeners();
|
rlm@46
|
1231 }
|
rlm@46
|
1232 }
|
rlm@46
|
1233 },
|
rlm@46
|
1234
|
rlm@46
|
1235
|
rlm@46
|
1236 relayEvents : function(o, events){
|
rlm@46
|
1237 var createHandler = function(ename){
|
rlm@46
|
1238 return function(){
|
rlm@46
|
1239 return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0)));
|
rlm@46
|
1240 };
|
rlm@46
|
1241 };
|
rlm@46
|
1242 for(var i = 0, len = events.length; i < len; i++){
|
rlm@46
|
1243 var ename = events[i];
|
rlm@46
|
1244 if(!this.events[ename]){ this.events[ename] = true; };
|
rlm@46
|
1245 o.on(ename, createHandler(ename), this);
|
rlm@46
|
1246 }
|
rlm@46
|
1247 },
|
rlm@46
|
1248
|
rlm@46
|
1249
|
rlm@46
|
1250 addEvents : function(o){
|
rlm@46
|
1251 if(!this.events){
|
rlm@46
|
1252 this.events = {};
|
rlm@46
|
1253 }
|
rlm@46
|
1254 if(typeof o == 'string'){
|
rlm@46
|
1255 for(var i = 0, a = arguments, v; v = a[i]; i++){
|
rlm@46
|
1256 if(!this.events[a[i]]){
|
rlm@46
|
1257 this.events[a[i]] = true;
|
rlm@46
|
1258 }
|
rlm@46
|
1259 }
|
rlm@46
|
1260 }else{
|
rlm@46
|
1261 Ext.applyIf(this.events, o);
|
rlm@46
|
1262 }
|
rlm@46
|
1263 },
|
rlm@46
|
1264
|
rlm@46
|
1265
|
rlm@46
|
1266 hasListener : function(eventName){
|
rlm@46
|
1267 var e = this.events[eventName];
|
rlm@46
|
1268 return typeof e == "object" && e.listeners.length > 0;
|
rlm@46
|
1269 },
|
rlm@46
|
1270
|
rlm@46
|
1271
|
rlm@46
|
1272 suspendEvents : function(){
|
rlm@46
|
1273 this.eventsSuspended = true;
|
rlm@46
|
1274 },
|
rlm@46
|
1275
|
rlm@46
|
1276
|
rlm@46
|
1277 resumeEvents : function(){
|
rlm@46
|
1278 this.eventsSuspended = false;
|
rlm@46
|
1279 },
|
rlm@46
|
1280
|
rlm@46
|
1281 getMethodEvent : function(method){
|
rlm@46
|
1282 if(!this.methodEvents){
|
rlm@46
|
1283 this.methodEvents = {};
|
rlm@46
|
1284 }
|
rlm@46
|
1285 var e = this.methodEvents[method];
|
rlm@46
|
1286 if(!e){
|
rlm@46
|
1287 e = {};
|
rlm@46
|
1288 this.methodEvents[method] = e;
|
rlm@46
|
1289
|
rlm@46
|
1290 e.originalFn = this[method];
|
rlm@46
|
1291 e.methodName = method;
|
rlm@46
|
1292 e.before = [];
|
rlm@46
|
1293 e.after = [];
|
rlm@46
|
1294
|
rlm@46
|
1295
|
rlm@46
|
1296 var returnValue, v, cancel;
|
rlm@46
|
1297 var obj = this;
|
rlm@46
|
1298
|
rlm@46
|
1299 var makeCall = function(fn, scope, args){
|
rlm@46
|
1300 if((v = fn.apply(scope || obj, args)) !== undefined){
|
rlm@46
|
1301 if(typeof v === 'object'){
|
rlm@46
|
1302 if(v.returnValue !== undefined){
|
rlm@46
|
1303 returnValue = v.returnValue;
|
rlm@46
|
1304 }else{
|
rlm@46
|
1305 returnValue = v;
|
rlm@46
|
1306 }
|
rlm@46
|
1307 if(v.cancel === true){
|
rlm@46
|
1308 cancel = true;
|
rlm@46
|
1309 }
|
rlm@46
|
1310 }else if(v === false){
|
rlm@46
|
1311 cancel = true;
|
rlm@46
|
1312 }else {
|
rlm@46
|
1313 returnValue = v;
|
rlm@46
|
1314 }
|
rlm@46
|
1315 }
|
rlm@46
|
1316 }
|
rlm@46
|
1317
|
rlm@46
|
1318 this[method] = function(){
|
rlm@46
|
1319 returnValue = v = undefined; cancel = false;
|
rlm@46
|
1320 var args = Array.prototype.slice.call(arguments, 0);
|
rlm@46
|
1321 for(var i = 0, len = e.before.length; i < len; i++){
|
rlm@46
|
1322 makeCall(e.before[i].fn, e.before[i].scope, args);
|
rlm@46
|
1323 if(cancel){
|
rlm@46
|
1324 return returnValue;
|
rlm@46
|
1325 }
|
rlm@46
|
1326 }
|
rlm@46
|
1327
|
rlm@46
|
1328 if((v = e.originalFn.apply(obj, args)) !== undefined){
|
rlm@46
|
1329 returnValue = v;
|
rlm@46
|
1330 }
|
rlm@46
|
1331
|
rlm@46
|
1332 for(var i = 0, len = e.after.length; i < len; i++){
|
rlm@46
|
1333 makeCall(e.after[i].fn, e.after[i].scope, args);
|
rlm@46
|
1334 if(cancel){
|
rlm@46
|
1335 return returnValue;
|
rlm@46
|
1336 }
|
rlm@46
|
1337 }
|
rlm@46
|
1338 return returnValue;
|
rlm@46
|
1339 };
|
rlm@46
|
1340 }
|
rlm@46
|
1341 return e;
|
rlm@46
|
1342 },
|
rlm@46
|
1343
|
rlm@46
|
1344 beforeMethod : function(method, fn, scope){
|
rlm@46
|
1345 var e = this.getMethodEvent(method);
|
rlm@46
|
1346 e.before.push({fn: fn, scope: scope});
|
rlm@46
|
1347 },
|
rlm@46
|
1348
|
rlm@46
|
1349 afterMethod : function(method, fn, scope){
|
rlm@46
|
1350 var e = this.getMethodEvent(method);
|
rlm@46
|
1351 e.after.push({fn: fn, scope: scope});
|
rlm@46
|
1352 },
|
rlm@46
|
1353
|
rlm@46
|
1354 removeMethodListener : function(method, fn, scope){
|
rlm@46
|
1355 var e = this.getMethodEvent(method);
|
rlm@46
|
1356 for(var i = 0, len = e.before.length; i < len; i++){
|
rlm@46
|
1357 if(e.before[i].fn == fn && e.before[i].scope == scope){
|
rlm@46
|
1358 e.before.splice(i, 1);
|
rlm@46
|
1359 return;
|
rlm@46
|
1360 }
|
rlm@46
|
1361 }
|
rlm@46
|
1362 for(var i = 0, len = e.after.length; i < len; i++){
|
rlm@46
|
1363 if(e.after[i].fn == fn && e.after[i].scope == scope){
|
rlm@46
|
1364 e.after.splice(i, 1);
|
rlm@46
|
1365 return;
|
rlm@46
|
1366 }
|
rlm@46
|
1367 }
|
rlm@46
|
1368 }
|
rlm@46
|
1369 };
|
rlm@46
|
1370
|
rlm@46
|
1371 Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
|
rlm@46
|
1372
|
rlm@46
|
1373 Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
|
rlm@46
|
1374
|
rlm@46
|
1375
|
rlm@46
|
1376 Ext.util.Observable.capture = function(o, fn, scope){
|
rlm@46
|
1377 o.fireEvent = o.fireEvent.createInterceptor(fn, scope);
|
rlm@46
|
1378 };
|
rlm@46
|
1379
|
rlm@46
|
1380
|
rlm@46
|
1381 Ext.util.Observable.releaseCapture = function(o){
|
rlm@46
|
1382 o.fireEvent = Ext.util.Observable.prototype.fireEvent;
|
rlm@46
|
1383 };
|
rlm@46
|
1384
|
rlm@46
|
1385 (function(){
|
rlm@46
|
1386
|
rlm@46
|
1387 var createBuffered = function(h, o, scope){
|
rlm@46
|
1388 var task = new Ext.util.DelayedTask();
|
rlm@46
|
1389 return function(){
|
rlm@46
|
1390 task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0));
|
rlm@46
|
1391 };
|
rlm@46
|
1392 };
|
rlm@46
|
1393
|
rlm@46
|
1394 var createSingle = function(h, e, fn, scope){
|
rlm@46
|
1395 return function(){
|
rlm@46
|
1396 e.removeListener(fn, scope);
|
rlm@46
|
1397 return h.apply(scope, arguments);
|
rlm@46
|
1398 };
|
rlm@46
|
1399 };
|
rlm@46
|
1400
|
rlm@46
|
1401 var createDelayed = function(h, o, scope){
|
rlm@46
|
1402 return function(){
|
rlm@46
|
1403 var args = Array.prototype.slice.call(arguments, 0);
|
rlm@46
|
1404 setTimeout(function(){
|
rlm@46
|
1405 h.apply(scope, args);
|
rlm@46
|
1406 }, o.delay || 10);
|
rlm@46
|
1407 };
|
rlm@46
|
1408 };
|
rlm@46
|
1409
|
rlm@46
|
1410 Ext.util.Event = function(obj, name){
|
rlm@46
|
1411 this.name = name;
|
rlm@46
|
1412 this.obj = obj;
|
rlm@46
|
1413 this.listeners = [];
|
rlm@46
|
1414 };
|
rlm@46
|
1415
|
rlm@46
|
1416 Ext.util.Event.prototype = {
|
rlm@46
|
1417 addListener : function(fn, scope, options){
|
rlm@46
|
1418 scope = scope || this.obj;
|
rlm@46
|
1419 if(!this.isListening(fn, scope)){
|
rlm@46
|
1420 var l = this.createListener(fn, scope, options);
|
rlm@46
|
1421 if(!this.firing){
|
rlm@46
|
1422 this.listeners.push(l);
|
rlm@46
|
1423 }else{ this.listeners = this.listeners.slice(0);
|
rlm@46
|
1424 this.listeners.push(l);
|
rlm@46
|
1425 }
|
rlm@46
|
1426 }
|
rlm@46
|
1427 },
|
rlm@46
|
1428
|
rlm@46
|
1429 createListener : function(fn, scope, o){
|
rlm@46
|
1430 o = o || {};
|
rlm@46
|
1431 scope = scope || this.obj;
|
rlm@46
|
1432 var l = {fn: fn, scope: scope, options: o};
|
rlm@46
|
1433 var h = fn;
|
rlm@46
|
1434 if(o.delay){
|
rlm@46
|
1435 h = createDelayed(h, o, scope);
|
rlm@46
|
1436 }
|
rlm@46
|
1437 if(o.single){
|
rlm@46
|
1438 h = createSingle(h, this, fn, scope);
|
rlm@46
|
1439 }
|
rlm@46
|
1440 if(o.buffer){
|
rlm@46
|
1441 h = createBuffered(h, o, scope);
|
rlm@46
|
1442 }
|
rlm@46
|
1443 l.fireFn = h;
|
rlm@46
|
1444 return l;
|
rlm@46
|
1445 },
|
rlm@46
|
1446
|
rlm@46
|
1447 findListener : function(fn, scope){
|
rlm@46
|
1448 scope = scope || this.obj;
|
rlm@46
|
1449 var ls = this.listeners;
|
rlm@46
|
1450 for(var i = 0, len = ls.length; i < len; i++){
|
rlm@46
|
1451 var l = ls[i];
|
rlm@46
|
1452 if(l.fn == fn && l.scope == scope){
|
rlm@46
|
1453 return i;
|
rlm@46
|
1454 }
|
rlm@46
|
1455 }
|
rlm@46
|
1456 return -1;
|
rlm@46
|
1457 },
|
rlm@46
|
1458
|
rlm@46
|
1459 isListening : function(fn, scope){
|
rlm@46
|
1460 return this.findListener(fn, scope) != -1;
|
rlm@46
|
1461 },
|
rlm@46
|
1462
|
rlm@46
|
1463 removeListener : function(fn, scope){
|
rlm@46
|
1464 var index;
|
rlm@46
|
1465 if((index = this.findListener(fn, scope)) != -1){
|
rlm@46
|
1466 if(!this.firing){
|
rlm@46
|
1467 this.listeners.splice(index, 1);
|
rlm@46
|
1468 }else{
|
rlm@46
|
1469 this.listeners = this.listeners.slice(0);
|
rlm@46
|
1470 this.listeners.splice(index, 1);
|
rlm@46
|
1471 }
|
rlm@46
|
1472 return true;
|
rlm@46
|
1473 }
|
rlm@46
|
1474 return false;
|
rlm@46
|
1475 },
|
rlm@46
|
1476
|
rlm@46
|
1477 clearListeners : function(){
|
rlm@46
|
1478 this.listeners = [];
|
rlm@46
|
1479 },
|
rlm@46
|
1480
|
rlm@46
|
1481 fire : function(){
|
rlm@46
|
1482 var ls = this.listeners, scope, len = ls.length;
|
rlm@46
|
1483 if(len > 0){
|
rlm@46
|
1484 this.firing = true;
|
rlm@46
|
1485 var args = Array.prototype.slice.call(arguments, 0);
|
rlm@46
|
1486 for(var i = 0; i < len; i++){
|
rlm@46
|
1487 var l = ls[i];
|
rlm@46
|
1488 if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){
|
rlm@46
|
1489 this.firing = false;
|
rlm@46
|
1490 return false;
|
rlm@46
|
1491 }
|
rlm@46
|
1492 }
|
rlm@46
|
1493 this.firing = false;
|
rlm@46
|
1494 }
|
rlm@46
|
1495 return true;
|
rlm@46
|
1496 }
|
rlm@46
|
1497 };
|
rlm@46
|
1498 })();
|
rlm@46
|
1499
|
rlm@46
|
1500 Ext.EventManager = function(){
|
rlm@46
|
1501 var docReadyEvent, docReadyProcId, docReadyState = false;
|
rlm@46
|
1502 var resizeEvent, resizeTask, textEvent, textSize;
|
rlm@46
|
1503 var E = Ext.lib.Event;
|
rlm@46
|
1504 var D = Ext.lib.Dom;
|
rlm@46
|
1505
|
rlm@46
|
1506
|
rlm@46
|
1507 var fireDocReady = function(){
|
rlm@46
|
1508 if(!docReadyState){
|
rlm@46
|
1509 docReadyState = true;
|
rlm@46
|
1510 Ext.isReady = true;
|
rlm@46
|
1511 if(docReadyProcId){
|
rlm@46
|
1512 clearInterval(docReadyProcId);
|
rlm@46
|
1513 }
|
rlm@46
|
1514 if(Ext.isGecko || Ext.isOpera) {
|
rlm@46
|
1515 document.removeEventListener("DOMContentLoaded", fireDocReady, false);
|
rlm@46
|
1516 }
|
rlm@46
|
1517 if(Ext.isIE){
|
rlm@46
|
1518 var defer = document.getElementById("ie-deferred-loader");
|
rlm@46
|
1519 if(defer){
|
rlm@46
|
1520 defer.onreadystatechange = null;
|
rlm@46
|
1521 defer.parentNode.removeChild(defer);
|
rlm@46
|
1522 }
|
rlm@46
|
1523 }
|
rlm@46
|
1524 if(docReadyEvent){
|
rlm@46
|
1525 docReadyEvent.fire();
|
rlm@46
|
1526 docReadyEvent.clearListeners();
|
rlm@46
|
1527 }
|
rlm@46
|
1528 }
|
rlm@46
|
1529 };
|
rlm@46
|
1530
|
rlm@46
|
1531 var initDocReady = function(){
|
rlm@46
|
1532 docReadyEvent = new Ext.util.Event();
|
rlm@46
|
1533 if(Ext.isGecko || Ext.isOpera) {
|
rlm@46
|
1534 document.addEventListener("DOMContentLoaded", fireDocReady, false);
|
rlm@46
|
1535 }else if(Ext.isIE){
|
rlm@46
|
1536 document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
|
rlm@46
|
1537 var defer = document.getElementById("ie-deferred-loader");
|
rlm@46
|
1538 defer.onreadystatechange = function(){
|
rlm@46
|
1539 if(this.readyState == "complete"){
|
rlm@46
|
1540 fireDocReady();
|
rlm@46
|
1541 }
|
rlm@46
|
1542 };
|
rlm@46
|
1543 }else if(Ext.isSafari){
|
rlm@46
|
1544 docReadyProcId = setInterval(function(){
|
rlm@46
|
1545 var rs = document.readyState;
|
rlm@46
|
1546 if(rs == "complete") {
|
rlm@46
|
1547 fireDocReady();
|
rlm@46
|
1548 }
|
rlm@46
|
1549 }, 10);
|
rlm@46
|
1550 }
|
rlm@46
|
1551
|
rlm@46
|
1552 E.on(window, "load", fireDocReady);
|
rlm@46
|
1553 };
|
rlm@46
|
1554
|
rlm@46
|
1555 var createBuffered = function(h, o){
|
rlm@46
|
1556 var task = new Ext.util.DelayedTask(h);
|
rlm@46
|
1557 return function(e){
|
rlm@46
|
1558
|
rlm@46
|
1559 e = new Ext.EventObjectImpl(e);
|
rlm@46
|
1560 task.delay(o.buffer, h, null, [e]);
|
rlm@46
|
1561 };
|
rlm@46
|
1562 };
|
rlm@46
|
1563
|
rlm@46
|
1564 var createSingle = function(h, el, ename, fn){
|
rlm@46
|
1565 return function(e){
|
rlm@46
|
1566 Ext.EventManager.removeListener(el, ename, fn);
|
rlm@46
|
1567 h(e);
|
rlm@46
|
1568 };
|
rlm@46
|
1569 };
|
rlm@46
|
1570
|
rlm@46
|
1571 var createDelayed = function(h, o){
|
rlm@46
|
1572 return function(e){
|
rlm@46
|
1573
|
rlm@46
|
1574 e = new Ext.EventObjectImpl(e);
|
rlm@46
|
1575 setTimeout(function(){
|
rlm@46
|
1576 h(e);
|
rlm@46
|
1577 }, o.delay || 10);
|
rlm@46
|
1578 };
|
rlm@46
|
1579 };
|
rlm@46
|
1580
|
rlm@46
|
1581 var listen = function(element, ename, opt, fn, scope){
|
rlm@46
|
1582 var o = (!opt || typeof opt == "boolean") ? {} : opt;
|
rlm@46
|
1583 fn = fn || o.fn; scope = scope || o.scope;
|
rlm@46
|
1584 var el = Ext.getDom(element);
|
rlm@46
|
1585 if(!el){
|
rlm@46
|
1586 throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.';
|
rlm@46
|
1587 }
|
rlm@46
|
1588 var h = function(e){
|
rlm@46
|
1589 e = Ext.EventObject.setEvent(e);
|
rlm@46
|
1590 var t;
|
rlm@46
|
1591 if(o.delegate){
|
rlm@46
|
1592 t = e.getTarget(o.delegate, el);
|
rlm@46
|
1593 if(!t){
|
rlm@46
|
1594 return;
|
rlm@46
|
1595 }
|
rlm@46
|
1596 }else{
|
rlm@46
|
1597 t = e.target;
|
rlm@46
|
1598 }
|
rlm@46
|
1599 if(o.stopEvent === true){
|
rlm@46
|
1600 e.stopEvent();
|
rlm@46
|
1601 }
|
rlm@46
|
1602 if(o.preventDefault === true){
|
rlm@46
|
1603 e.preventDefault();
|
rlm@46
|
1604 }
|
rlm@46
|
1605 if(o.stopPropagation === true){
|
rlm@46
|
1606 e.stopPropagation();
|
rlm@46
|
1607 }
|
rlm@46
|
1608
|
rlm@46
|
1609 if(o.normalized === false){
|
rlm@46
|
1610 e = e.browserEvent;
|
rlm@46
|
1611 }
|
rlm@46
|
1612
|
rlm@46
|
1613 fn.call(scope || el, e, t, o);
|
rlm@46
|
1614 };
|
rlm@46
|
1615 if(o.delay){
|
rlm@46
|
1616 h = createDelayed(h, o);
|
rlm@46
|
1617 }
|
rlm@46
|
1618 if(o.single){
|
rlm@46
|
1619 h = createSingle(h, el, ename, fn);
|
rlm@46
|
1620 }
|
rlm@46
|
1621 if(o.buffer){
|
rlm@46
|
1622 h = createBuffered(h, o);
|
rlm@46
|
1623 }
|
rlm@46
|
1624 fn._handlers = fn._handlers || [];
|
rlm@46
|
1625 fn._handlers.push([Ext.id(el), ename, h]);
|
rlm@46
|
1626
|
rlm@46
|
1627 E.on(el, ename, h);
|
rlm@46
|
1628 if(ename == "mousewheel" && el.addEventListener){
|
rlm@46
|
1629 el.addEventListener("DOMMouseScroll", h, false);
|
rlm@46
|
1630 E.on(window, 'unload', function(){
|
rlm@46
|
1631 el.removeEventListener("DOMMouseScroll", h, false);
|
rlm@46
|
1632 });
|
rlm@46
|
1633 }
|
rlm@46
|
1634 if(ename == "mousedown" && el == document){
|
rlm@46
|
1635 Ext.EventManager.stoppedMouseDownEvent.addListener(h);
|
rlm@46
|
1636 }
|
rlm@46
|
1637 return h;
|
rlm@46
|
1638 };
|
rlm@46
|
1639
|
rlm@46
|
1640 var stopListening = function(el, ename, fn){
|
rlm@46
|
1641 var id = Ext.id(el), hds = fn._handlers, hd = fn;
|
rlm@46
|
1642 if(hds){
|
rlm@46
|
1643 for(var i = 0, len = hds.length; i < len; i++){
|
rlm@46
|
1644 var h = hds[i];
|
rlm@46
|
1645 if(h[0] == id && h[1] == ename){
|
rlm@46
|
1646 hd = h[2];
|
rlm@46
|
1647 hds.splice(i, 1);
|
rlm@46
|
1648 break;
|
rlm@46
|
1649 }
|
rlm@46
|
1650 }
|
rlm@46
|
1651 }
|
rlm@46
|
1652 E.un(el, ename, hd);
|
rlm@46
|
1653 el = Ext.getDom(el);
|
rlm@46
|
1654 if(ename == "mousewheel" && el.addEventListener){
|
rlm@46
|
1655 el.removeEventListener("DOMMouseScroll", hd, false);
|
rlm@46
|
1656 }
|
rlm@46
|
1657 if(ename == "mousedown" && el == document){
|
rlm@46
|
1658 Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);
|
rlm@46
|
1659 }
|
rlm@46
|
1660 };
|
rlm@46
|
1661
|
rlm@46
|
1662 var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
|
rlm@46
|
1663 var pub = {
|
rlm@46
|
1664
|
rlm@46
|
1665
|
rlm@46
|
1666 addListener : function(element, eventName, fn, scope, options){
|
rlm@46
|
1667 if(typeof eventName == "object"){
|
rlm@46
|
1668 var o = eventName;
|
rlm@46
|
1669 for(var e in o){
|
rlm@46
|
1670 if(propRe.test(e)){
|
rlm@46
|
1671 continue;
|
rlm@46
|
1672 }
|
rlm@46
|
1673 if(typeof o[e] == "function"){
|
rlm@46
|
1674
|
rlm@46
|
1675 listen(element, e, o, o[e], o.scope);
|
rlm@46
|
1676 }else{
|
rlm@46
|
1677
|
rlm@46
|
1678 listen(element, e, o[e]);
|
rlm@46
|
1679 }
|
rlm@46
|
1680 }
|
rlm@46
|
1681 return;
|
rlm@46
|
1682 }
|
rlm@46
|
1683 return listen(element, eventName, options, fn, scope);
|
rlm@46
|
1684 },
|
rlm@46
|
1685
|
rlm@46
|
1686
|
rlm@46
|
1687 removeListener : function(element, eventName, fn){
|
rlm@46
|
1688 return stopListening(element, eventName, fn);
|
rlm@46
|
1689 },
|
rlm@46
|
1690
|
rlm@46
|
1691
|
rlm@46
|
1692 onDocumentReady : function(fn, scope, options){
|
rlm@46
|
1693 if(docReadyState){
|
rlm@46
|
1694 docReadyEvent.addListener(fn, scope, options);
|
rlm@46
|
1695 docReadyEvent.fire();
|
rlm@46
|
1696 docReadyEvent.clearListeners();
|
rlm@46
|
1697 return;
|
rlm@46
|
1698 }
|
rlm@46
|
1699 if(!docReadyEvent){
|
rlm@46
|
1700 initDocReady();
|
rlm@46
|
1701 }
|
rlm@46
|
1702 docReadyEvent.addListener(fn, scope, options);
|
rlm@46
|
1703 },
|
rlm@46
|
1704
|
rlm@46
|
1705
|
rlm@46
|
1706 onWindowResize : function(fn, scope, options){
|
rlm@46
|
1707 if(!resizeEvent){
|
rlm@46
|
1708 resizeEvent = new Ext.util.Event();
|
rlm@46
|
1709 resizeTask = new Ext.util.DelayedTask(function(){
|
rlm@46
|
1710 resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
|
rlm@46
|
1711 });
|
rlm@46
|
1712 E.on(window, "resize", this.fireWindowResize, this);
|
rlm@46
|
1713 }
|
rlm@46
|
1714 resizeEvent.addListener(fn, scope, options);
|
rlm@46
|
1715 },
|
rlm@46
|
1716
|
rlm@46
|
1717
|
rlm@46
|
1718 fireWindowResize : function(){
|
rlm@46
|
1719 if(resizeEvent){
|
rlm@46
|
1720 if((Ext.isIE||Ext.isAir) && resizeTask){
|
rlm@46
|
1721 resizeTask.delay(50);
|
rlm@46
|
1722 }else{
|
rlm@46
|
1723 resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
|
rlm@46
|
1724 }
|
rlm@46
|
1725 }
|
rlm@46
|
1726 },
|
rlm@46
|
1727
|
rlm@46
|
1728
|
rlm@46
|
1729 onTextResize : function(fn, scope, options){
|
rlm@46
|
1730 if(!textEvent){
|
rlm@46
|
1731 textEvent = new Ext.util.Event();
|
rlm@46
|
1732 var textEl = new Ext.Element(document.createElement('div'));
|
rlm@46
|
1733 textEl.dom.className = 'x-text-resize';
|
rlm@46
|
1734 textEl.dom.innerHTML = 'X';
|
rlm@46
|
1735 textEl.appendTo(document.body);
|
rlm@46
|
1736 textSize = textEl.dom.offsetHeight;
|
rlm@46
|
1737 setInterval(function(){
|
rlm@46
|
1738 if(textEl.dom.offsetHeight != textSize){
|
rlm@46
|
1739 textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
|
rlm@46
|
1740 }
|
rlm@46
|
1741 }, this.textResizeInterval);
|
rlm@46
|
1742 }
|
rlm@46
|
1743 textEvent.addListener(fn, scope, options);
|
rlm@46
|
1744 },
|
rlm@46
|
1745
|
rlm@46
|
1746
|
rlm@46
|
1747 removeResizeListener : function(fn, scope){
|
rlm@46
|
1748 if(resizeEvent){
|
rlm@46
|
1749 resizeEvent.removeListener(fn, scope);
|
rlm@46
|
1750 }
|
rlm@46
|
1751 },
|
rlm@46
|
1752
|
rlm@46
|
1753
|
rlm@46
|
1754 fireResize : function(){
|
rlm@46
|
1755 if(resizeEvent){
|
rlm@46
|
1756 resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
|
rlm@46
|
1757 }
|
rlm@46
|
1758 },
|
rlm@46
|
1759
|
rlm@46
|
1760 ieDeferSrc : false,
|
rlm@46
|
1761
|
rlm@46
|
1762 textResizeInterval : 50
|
rlm@46
|
1763 };
|
rlm@46
|
1764
|
rlm@46
|
1765 pub.on = pub.addListener;
|
rlm@46
|
1766
|
rlm@46
|
1767 pub.un = pub.removeListener;
|
rlm@46
|
1768
|
rlm@46
|
1769 pub.stoppedMouseDownEvent = new Ext.util.Event();
|
rlm@46
|
1770 return pub;
|
rlm@46
|
1771 }();
|
rlm@46
|
1772
|
rlm@46
|
1773 Ext.onReady = Ext.EventManager.onDocumentReady;
|
rlm@46
|
1774
|
rlm@46
|
1775 Ext.onReady(function(){
|
rlm@46
|
1776 var bd = Ext.getBody();
|
rlm@46
|
1777 if(!bd){ return; }
|
rlm@46
|
1778
|
rlm@46
|
1779 var cls = [
|
rlm@46
|
1780 Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')
|
rlm@46
|
1781 : Ext.isGecko ? "ext-gecko"
|
rlm@46
|
1782 : Ext.isOpera ? "ext-opera"
|
rlm@46
|
1783 : Ext.isSafari ? "ext-safari" : ""];
|
rlm@46
|
1784
|
rlm@46
|
1785 if(Ext.isMac){
|
rlm@46
|
1786 cls.push("ext-mac");
|
rlm@46
|
1787 }
|
rlm@46
|
1788 if(Ext.isLinux){
|
rlm@46
|
1789 cls.push("ext-linux");
|
rlm@46
|
1790 }
|
rlm@46
|
1791 if(Ext.isBorderBox){
|
rlm@46
|
1792 cls.push('ext-border-box');
|
rlm@46
|
1793 }
|
rlm@46
|
1794 if(Ext.isStrict){
|
rlm@46
|
1795 var p = bd.dom.parentNode;
|
rlm@46
|
1796 if(p){
|
rlm@46
|
1797 p.className += ' ext-strict';
|
rlm@46
|
1798 }
|
rlm@46
|
1799 }
|
rlm@46
|
1800 bd.addClass(cls.join(' '));
|
rlm@46
|
1801 });
|
rlm@46
|
1802
|
rlm@46
|
1803
|
rlm@46
|
1804 Ext.EventObject = function(){
|
rlm@46
|
1805
|
rlm@46
|
1806 var E = Ext.lib.Event;
|
rlm@46
|
1807
|
rlm@46
|
1808
|
rlm@46
|
1809 var safariKeys = {
|
rlm@46
|
1810 63234 : 37,
|
rlm@46
|
1811 63235 : 39,
|
rlm@46
|
1812 63232 : 38,
|
rlm@46
|
1813 63233 : 40,
|
rlm@46
|
1814 63276 : 33,
|
rlm@46
|
1815 63277 : 34,
|
rlm@46
|
1816 63272 : 46,
|
rlm@46
|
1817 63273 : 36,
|
rlm@46
|
1818 63275 : 35
|
rlm@46
|
1819 };
|
rlm@46
|
1820
|
rlm@46
|
1821
|
rlm@46
|
1822 var btnMap = Ext.isIE ? {1:0,4:1,2:2} :
|
rlm@46
|
1823 (Ext.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});
|
rlm@46
|
1824
|
rlm@46
|
1825 Ext.EventObjectImpl = function(e){
|
rlm@46
|
1826 if(e){
|
rlm@46
|
1827 this.setEvent(e.browserEvent || e);
|
rlm@46
|
1828 }
|
rlm@46
|
1829 };
|
rlm@46
|
1830 Ext.EventObjectImpl.prototype = {
|
rlm@46
|
1831
|
rlm@46
|
1832 browserEvent : null,
|
rlm@46
|
1833
|
rlm@46
|
1834 button : -1,
|
rlm@46
|
1835
|
rlm@46
|
1836 shiftKey : false,
|
rlm@46
|
1837
|
rlm@46
|
1838 ctrlKey : false,
|
rlm@46
|
1839
|
rlm@46
|
1840 altKey : false,
|
rlm@46
|
1841
|
rlm@46
|
1842
|
rlm@46
|
1843 BACKSPACE : 8,
|
rlm@46
|
1844
|
rlm@46
|
1845 TAB : 9,
|
rlm@46
|
1846
|
rlm@46
|
1847 RETURN : 13,
|
rlm@46
|
1848
|
rlm@46
|
1849 ENTER : 13,
|
rlm@46
|
1850
|
rlm@46
|
1851 SHIFT : 16,
|
rlm@46
|
1852
|
rlm@46
|
1853 CONTROL : 17,
|
rlm@46
|
1854
|
rlm@46
|
1855 ESC : 27,
|
rlm@46
|
1856
|
rlm@46
|
1857 SPACE : 32,
|
rlm@46
|
1858
|
rlm@46
|
1859 PAGEUP : 33,
|
rlm@46
|
1860
|
rlm@46
|
1861 PAGEDOWN : 34,
|
rlm@46
|
1862
|
rlm@46
|
1863 END : 35,
|
rlm@46
|
1864
|
rlm@46
|
1865 HOME : 36,
|
rlm@46
|
1866
|
rlm@46
|
1867 LEFT : 37,
|
rlm@46
|
1868
|
rlm@46
|
1869 UP : 38,
|
rlm@46
|
1870
|
rlm@46
|
1871 RIGHT : 39,
|
rlm@46
|
1872
|
rlm@46
|
1873 DOWN : 40,
|
rlm@46
|
1874
|
rlm@46
|
1875 DELETE : 46,
|
rlm@46
|
1876
|
rlm@46
|
1877 F5 : 116,
|
rlm@46
|
1878
|
rlm@46
|
1879
|
rlm@46
|
1880 setEvent : function(e){
|
rlm@46
|
1881 if(e == this || (e && e.browserEvent)){
|
rlm@46
|
1882 return e;
|
rlm@46
|
1883 }
|
rlm@46
|
1884 this.browserEvent = e;
|
rlm@46
|
1885 if(e){
|
rlm@46
|
1886
|
rlm@46
|
1887 this.button = e.button ? btnMap[e.button] : (e.which ? e.which-1 : -1);
|
rlm@46
|
1888 if(e.type == 'click' && this.button == -1){
|
rlm@46
|
1889 this.button = 0;
|
rlm@46
|
1890 }
|
rlm@46
|
1891 this.type = e.type;
|
rlm@46
|
1892 this.shiftKey = e.shiftKey;
|
rlm@46
|
1893
|
rlm@46
|
1894 this.ctrlKey = e.ctrlKey || e.metaKey;
|
rlm@46
|
1895 this.altKey = e.altKey;
|
rlm@46
|
1896
|
rlm@46
|
1897 this.keyCode = e.keyCode;
|
rlm@46
|
1898 this.charCode = e.charCode;
|
rlm@46
|
1899
|
rlm@46
|
1900 this.target = E.getTarget(e);
|
rlm@46
|
1901
|
rlm@46
|
1902 this.xy = E.getXY(e);
|
rlm@46
|
1903 }else{
|
rlm@46
|
1904 this.button = -1;
|
rlm@46
|
1905 this.shiftKey = false;
|
rlm@46
|
1906 this.ctrlKey = false;
|
rlm@46
|
1907 this.altKey = false;
|
rlm@46
|
1908 this.keyCode = 0;
|
rlm@46
|
1909 this.charCode =0;
|
rlm@46
|
1910 this.target = null;
|
rlm@46
|
1911 this.xy = [0, 0];
|
rlm@46
|
1912 }
|
rlm@46
|
1913 return this;
|
rlm@46
|
1914 },
|
rlm@46
|
1915
|
rlm@46
|
1916
|
rlm@46
|
1917 stopEvent : function(){
|
rlm@46
|
1918 if(this.browserEvent){
|
rlm@46
|
1919 if(this.browserEvent.type == 'mousedown'){
|
rlm@46
|
1920 Ext.EventManager.stoppedMouseDownEvent.fire(this);
|
rlm@46
|
1921 }
|
rlm@46
|
1922 E.stopEvent(this.browserEvent);
|
rlm@46
|
1923 }
|
rlm@46
|
1924 },
|
rlm@46
|
1925
|
rlm@46
|
1926
|
rlm@46
|
1927 preventDefault : function(){
|
rlm@46
|
1928 if(this.browserEvent){
|
rlm@46
|
1929 E.preventDefault(this.browserEvent);
|
rlm@46
|
1930 }
|
rlm@46
|
1931 },
|
rlm@46
|
1932
|
rlm@46
|
1933
|
rlm@46
|
1934 isNavKeyPress : function(){
|
rlm@46
|
1935 var k = this.keyCode;
|
rlm@46
|
1936 k = Ext.isSafari ? (safariKeys[k] || k) : k;
|
rlm@46
|
1937 return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC;
|
rlm@46
|
1938 },
|
rlm@46
|
1939
|
rlm@46
|
1940 isSpecialKey : function(){
|
rlm@46
|
1941 var k = this.keyCode;
|
rlm@46
|
1942 return (this.type == 'keypress' && this.ctrlKey) || k == 9 || k == 13 || k == 40 || k == 27 ||
|
rlm@46
|
1943 (k == 16) || (k == 17) ||
|
rlm@46
|
1944 (k >= 18 && k <= 20) ||
|
rlm@46
|
1945 (k >= 33 && k <= 35) ||
|
rlm@46
|
1946 (k >= 36 && k <= 39) ||
|
rlm@46
|
1947 (k >= 44 && k <= 45);
|
rlm@46
|
1948 },
|
rlm@46
|
1949
|
rlm@46
|
1950 stopPropagation : function(){
|
rlm@46
|
1951 if(this.browserEvent){
|
rlm@46
|
1952 if(this.browserEvent.type == 'mousedown'){
|
rlm@46
|
1953 Ext.EventManager.stoppedMouseDownEvent.fire(this);
|
rlm@46
|
1954 }
|
rlm@46
|
1955 E.stopPropagation(this.browserEvent);
|
rlm@46
|
1956 }
|
rlm@46
|
1957 },
|
rlm@46
|
1958
|
rlm@46
|
1959
|
rlm@46
|
1960 getCharCode : function(){
|
rlm@46
|
1961 return this.charCode || this.keyCode;
|
rlm@46
|
1962 },
|
rlm@46
|
1963
|
rlm@46
|
1964
|
rlm@46
|
1965 getKey : function(){
|
rlm@46
|
1966 var k = this.keyCode || this.charCode;
|
rlm@46
|
1967 return Ext.isSafari ? (safariKeys[k] || k) : k;
|
rlm@46
|
1968 },
|
rlm@46
|
1969
|
rlm@46
|
1970
|
rlm@46
|
1971 getPageX : function(){
|
rlm@46
|
1972 return this.xy[0];
|
rlm@46
|
1973 },
|
rlm@46
|
1974
|
rlm@46
|
1975
|
rlm@46
|
1976 getPageY : function(){
|
rlm@46
|
1977 return this.xy[1];
|
rlm@46
|
1978 },
|
rlm@46
|
1979
|
rlm@46
|
1980
|
rlm@46
|
1981 getTime : function(){
|
rlm@46
|
1982 if(this.browserEvent){
|
rlm@46
|
1983 return E.getTime(this.browserEvent);
|
rlm@46
|
1984 }
|
rlm@46
|
1985 return null;
|
rlm@46
|
1986 },
|
rlm@46
|
1987
|
rlm@46
|
1988
|
rlm@46
|
1989 getXY : function(){
|
rlm@46
|
1990 return this.xy;
|
rlm@46
|
1991 },
|
rlm@46
|
1992
|
rlm@46
|
1993
|
rlm@46
|
1994 getTarget : function(selector, maxDepth, returnEl){
|
rlm@46
|
1995 return selector ? Ext.fly(this.target).findParent(selector, maxDepth, returnEl) : (returnEl ? Ext.get(this.target) : this.target);
|
rlm@46
|
1996 },
|
rlm@46
|
1997
|
rlm@46
|
1998
|
rlm@46
|
1999 getRelatedTarget : function(){
|
rlm@46
|
2000 if(this.browserEvent){
|
rlm@46
|
2001 return E.getRelatedTarget(this.browserEvent);
|
rlm@46
|
2002 }
|
rlm@46
|
2003 return null;
|
rlm@46
|
2004 },
|
rlm@46
|
2005
|
rlm@46
|
2006
|
rlm@46
|
2007 getWheelDelta : function(){
|
rlm@46
|
2008 var e = this.browserEvent;
|
rlm@46
|
2009 var delta = 0;
|
rlm@46
|
2010 if(e.wheelDelta){
|
rlm@46
|
2011 delta = e.wheelDelta/120;
|
rlm@46
|
2012 }else if(e.detail){
|
rlm@46
|
2013 delta = -e.detail/3;
|
rlm@46
|
2014 }
|
rlm@46
|
2015 return delta;
|
rlm@46
|
2016 },
|
rlm@46
|
2017
|
rlm@46
|
2018
|
rlm@46
|
2019 hasModifier : function(){
|
rlm@46
|
2020 return ((this.ctrlKey || this.altKey) || this.shiftKey) ? true : false;
|
rlm@46
|
2021 },
|
rlm@46
|
2022
|
rlm@46
|
2023
|
rlm@46
|
2024 within : function(el, related){
|
rlm@46
|
2025 var t = this[related ? "getRelatedTarget" : "getTarget"]();
|
rlm@46
|
2026 return t && Ext.fly(el).contains(t);
|
rlm@46
|
2027 },
|
rlm@46
|
2028
|
rlm@46
|
2029 getPoint : function(){
|
rlm@46
|
2030 return new Ext.lib.Point(this.xy[0], this.xy[1]);
|
rlm@46
|
2031 }
|
rlm@46
|
2032 };
|
rlm@46
|
2033
|
rlm@46
|
2034 return new Ext.EventObjectImpl();
|
rlm@46
|
2035 }();
|
rlm@46
|
2036
|
rlm@46
|
2037 (function(){
|
rlm@46
|
2038 var D = Ext.lib.Dom;
|
rlm@46
|
2039 var E = Ext.lib.Event;
|
rlm@46
|
2040 var A = Ext.lib.Anim;
|
rlm@46
|
2041
|
rlm@46
|
2042 var propCache = {};
|
rlm@46
|
2043 var camelRe = /(-[a-z])/gi;
|
rlm@46
|
2044 var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
|
rlm@46
|
2045 var view = document.defaultView;
|
rlm@46
|
2046
|
rlm@46
|
2047 Ext.Element = function(element, forceNew){
|
rlm@46
|
2048 var dom = typeof element == "string" ?
|
rlm@46
|
2049 document.getElementById(element) : element;
|
rlm@46
|
2050 if(!dom){ return null;
|
rlm@46
|
2051 }
|
rlm@46
|
2052 var id = dom.id;
|
rlm@46
|
2053 if(forceNew !== true && id && Ext.Element.cache[id]){ return Ext.Element.cache[id];
|
rlm@46
|
2054 }
|
rlm@46
|
2055
|
rlm@46
|
2056
|
rlm@46
|
2057 this.dom = dom;
|
rlm@46
|
2058
|
rlm@46
|
2059
|
rlm@46
|
2060 this.id = id || Ext.id(dom);
|
rlm@46
|
2061 };
|
rlm@46
|
2062
|
rlm@46
|
2063 var El = Ext.Element;
|
rlm@46
|
2064
|
rlm@46
|
2065 El.prototype = {
|
rlm@46
|
2066
|
rlm@46
|
2067 originalDisplay : "",
|
rlm@46
|
2068
|
rlm@46
|
2069 visibilityMode : 1,
|
rlm@46
|
2070
|
rlm@46
|
2071 defaultUnit : "px",
|
rlm@46
|
2072
|
rlm@46
|
2073 setVisibilityMode : function(visMode){
|
rlm@46
|
2074 this.visibilityMode = visMode;
|
rlm@46
|
2075 return this;
|
rlm@46
|
2076 },
|
rlm@46
|
2077
|
rlm@46
|
2078 enableDisplayMode : function(display){
|
rlm@46
|
2079 this.setVisibilityMode(El.DISPLAY);
|
rlm@46
|
2080 if(typeof display != "undefined") this.originalDisplay = display;
|
rlm@46
|
2081 return this;
|
rlm@46
|
2082 },
|
rlm@46
|
2083
|
rlm@46
|
2084
|
rlm@46
|
2085 findParent : function(simpleSelector, maxDepth, returnEl){
|
rlm@46
|
2086 var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl;
|
rlm@46
|
2087 maxDepth = maxDepth || 50;
|
rlm@46
|
2088 if(typeof maxDepth != "number"){
|
rlm@46
|
2089 stopEl = Ext.getDom(maxDepth);
|
rlm@46
|
2090 maxDepth = 10;
|
rlm@46
|
2091 }
|
rlm@46
|
2092 while(p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl){
|
rlm@46
|
2093 if(dq.is(p, simpleSelector)){
|
rlm@46
|
2094 return returnEl ? Ext.get(p) : p;
|
rlm@46
|
2095 }
|
rlm@46
|
2096 depth++;
|
rlm@46
|
2097 p = p.parentNode;
|
rlm@46
|
2098 }
|
rlm@46
|
2099 return null;
|
rlm@46
|
2100 },
|
rlm@46
|
2101
|
rlm@46
|
2102
|
rlm@46
|
2103
|
rlm@46
|
2104 findParentNode : function(simpleSelector, maxDepth, returnEl){
|
rlm@46
|
2105 var p = Ext.fly(this.dom.parentNode, '_internal');
|
rlm@46
|
2106 return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null;
|
rlm@46
|
2107 },
|
rlm@46
|
2108
|
rlm@46
|
2109
|
rlm@46
|
2110 up : function(simpleSelector, maxDepth){
|
rlm@46
|
2111 return this.findParentNode(simpleSelector, maxDepth, true);
|
rlm@46
|
2112 },
|
rlm@46
|
2113
|
rlm@46
|
2114
|
rlm@46
|
2115
|
rlm@46
|
2116
|
rlm@46
|
2117 is : function(simpleSelector){
|
rlm@46
|
2118 return Ext.DomQuery.is(this.dom, simpleSelector);
|
rlm@46
|
2119 },
|
rlm@46
|
2120
|
rlm@46
|
2121
|
rlm@46
|
2122 animate : function(args, duration, onComplete, easing, animType){
|
rlm@46
|
2123 this.anim(args, {duration: duration, callback: onComplete, easing: easing}, animType);
|
rlm@46
|
2124 return this;
|
rlm@46
|
2125 },
|
rlm@46
|
2126
|
rlm@46
|
2127
|
rlm@46
|
2128 anim : function(args, opt, animType, defaultDur, defaultEase, cb){
|
rlm@46
|
2129 animType = animType || 'run';
|
rlm@46
|
2130 opt = opt || {};
|
rlm@46
|
2131 var anim = Ext.lib.Anim[animType](
|
rlm@46
|
2132 this.dom, args,
|
rlm@46
|
2133 (opt.duration || defaultDur) || .35,
|
rlm@46
|
2134 (opt.easing || defaultEase) || 'easeOut',
|
rlm@46
|
2135 function(){
|
rlm@46
|
2136 Ext.callback(cb, this);
|
rlm@46
|
2137 Ext.callback(opt.callback, opt.scope || this, [this, opt]);
|
rlm@46
|
2138 },
|
rlm@46
|
2139 this
|
rlm@46
|
2140 );
|
rlm@46
|
2141 opt.anim = anim;
|
rlm@46
|
2142 return anim;
|
rlm@46
|
2143 },
|
rlm@46
|
2144
|
rlm@46
|
2145 preanim : function(a, i){
|
rlm@46
|
2146 return !a[i] ? false : (typeof a[i] == "object" ? a[i]: {duration: a[i+1], callback: a[i+2], easing: a[i+3]});
|
rlm@46
|
2147 },
|
rlm@46
|
2148
|
rlm@46
|
2149
|
rlm@46
|
2150 clean : function(forceReclean){
|
rlm@46
|
2151 if(this.isCleaned && forceReclean !== true){
|
rlm@46
|
2152 return this;
|
rlm@46
|
2153 }
|
rlm@46
|
2154 var ns = /\S/;
|
rlm@46
|
2155 var d = this.dom, n = d.firstChild, ni = -1;
|
rlm@46
|
2156 while(n){
|
rlm@46
|
2157 var nx = n.nextSibling;
|
rlm@46
|
2158 if(n.nodeType == 3 && !ns.test(n.nodeValue)){
|
rlm@46
|
2159 d.removeChild(n);
|
rlm@46
|
2160 }else{
|
rlm@46
|
2161 n.nodeIndex = ++ni;
|
rlm@46
|
2162 }
|
rlm@46
|
2163 n = nx;
|
rlm@46
|
2164 }
|
rlm@46
|
2165 this.isCleaned = true;
|
rlm@46
|
2166 return this;
|
rlm@46
|
2167 },
|
rlm@46
|
2168
|
rlm@46
|
2169
|
rlm@46
|
2170 scrollIntoView : function(container, hscroll){
|
rlm@46
|
2171 var c = Ext.getDom(container) || Ext.getBody().dom;
|
rlm@46
|
2172 var el = this.dom;
|
rlm@46
|
2173
|
rlm@46
|
2174 var o = this.getOffsetsTo(c),
|
rlm@46
|
2175 l = o[0] + c.scrollLeft,
|
rlm@46
|
2176 t = o[1] + c.scrollTop,
|
rlm@46
|
2177 b = t+el.offsetHeight,
|
rlm@46
|
2178 r = l+el.offsetWidth;
|
rlm@46
|
2179
|
rlm@46
|
2180 var ch = c.clientHeight;
|
rlm@46
|
2181 var ct = parseInt(c.scrollTop, 10);
|
rlm@46
|
2182 var cl = parseInt(c.scrollLeft, 10);
|
rlm@46
|
2183 var cb = ct + ch;
|
rlm@46
|
2184 var cr = cl + c.clientWidth;
|
rlm@46
|
2185
|
rlm@46
|
2186 if(el.offsetHeight > ch || t < ct){
|
rlm@46
|
2187 c.scrollTop = t;
|
rlm@46
|
2188 }else if(b > cb){
|
rlm@46
|
2189 c.scrollTop = b-ch;
|
rlm@46
|
2190 }
|
rlm@46
|
2191 c.scrollTop = c.scrollTop;
|
rlm@46
|
2192 if(hscroll !== false){
|
rlm@46
|
2193 if(el.offsetWidth > c.clientWidth || l < cl){
|
rlm@46
|
2194 c.scrollLeft = l;
|
rlm@46
|
2195 }else if(r > cr){
|
rlm@46
|
2196 c.scrollLeft = r-c.clientWidth;
|
rlm@46
|
2197 }
|
rlm@46
|
2198 c.scrollLeft = c.scrollLeft;
|
rlm@46
|
2199 }
|
rlm@46
|
2200 return this;
|
rlm@46
|
2201 },
|
rlm@46
|
2202
|
rlm@46
|
2203 scrollChildIntoView : function(child, hscroll){
|
rlm@46
|
2204 Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll);
|
rlm@46
|
2205 },
|
rlm@46
|
2206
|
rlm@46
|
2207
|
rlm@46
|
2208 autoHeight : function(animate, duration, onComplete, easing){
|
rlm@46
|
2209 var oldHeight = this.getHeight();
|
rlm@46
|
2210 this.clip();
|
rlm@46
|
2211 this.setHeight(1); setTimeout(function(){
|
rlm@46
|
2212 var height = parseInt(this.dom.scrollHeight, 10); if(!animate){
|
rlm@46
|
2213 this.setHeight(height);
|
rlm@46
|
2214 this.unclip();
|
rlm@46
|
2215 if(typeof onComplete == "function"){
|
rlm@46
|
2216 onComplete();
|
rlm@46
|
2217 }
|
rlm@46
|
2218 }else{
|
rlm@46
|
2219 this.setHeight(oldHeight); this.setHeight(height, animate, duration, function(){
|
rlm@46
|
2220 this.unclip();
|
rlm@46
|
2221 if(typeof onComplete == "function") onComplete();
|
rlm@46
|
2222 }.createDelegate(this), easing);
|
rlm@46
|
2223 }
|
rlm@46
|
2224 }.createDelegate(this), 0);
|
rlm@46
|
2225 return this;
|
rlm@46
|
2226 },
|
rlm@46
|
2227
|
rlm@46
|
2228
|
rlm@46
|
2229 contains : function(el){
|
rlm@46
|
2230 if(!el){return false;}
|
rlm@46
|
2231 return D.isAncestor(this.dom, el.dom ? el.dom : el);
|
rlm@46
|
2232 },
|
rlm@46
|
2233
|
rlm@46
|
2234
|
rlm@46
|
2235 isVisible : function(deep) {
|
rlm@46
|
2236 var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");
|
rlm@46
|
2237 if(deep !== true || !vis){
|
rlm@46
|
2238 return vis;
|
rlm@46
|
2239 }
|
rlm@46
|
2240 var p = this.dom.parentNode;
|
rlm@46
|
2241 while(p && p.tagName.toLowerCase() != "body"){
|
rlm@46
|
2242 if(!Ext.fly(p, '_isVisible').isVisible()){
|
rlm@46
|
2243 return false;
|
rlm@46
|
2244 }
|
rlm@46
|
2245 p = p.parentNode;
|
rlm@46
|
2246 }
|
rlm@46
|
2247 return true;
|
rlm@46
|
2248 },
|
rlm@46
|
2249
|
rlm@46
|
2250
|
rlm@46
|
2251 select : function(selector, unique){
|
rlm@46
|
2252 return El.select(selector, unique, this.dom);
|
rlm@46
|
2253 },
|
rlm@46
|
2254
|
rlm@46
|
2255
|
rlm@46
|
2256 query : function(selector, unique){
|
rlm@46
|
2257 return Ext.DomQuery.select(selector, this.dom);
|
rlm@46
|
2258 },
|
rlm@46
|
2259
|
rlm@46
|
2260
|
rlm@46
|
2261 child : function(selector, returnDom){
|
rlm@46
|
2262 var n = Ext.DomQuery.selectNode(selector, this.dom);
|
rlm@46
|
2263 return returnDom ? n : Ext.get(n);
|
rlm@46
|
2264 },
|
rlm@46
|
2265
|
rlm@46
|
2266
|
rlm@46
|
2267 down : function(selector, returnDom){
|
rlm@46
|
2268 var n = Ext.DomQuery.selectNode(" > " + selector, this.dom);
|
rlm@46
|
2269 return returnDom ? n : Ext.get(n);
|
rlm@46
|
2270 },
|
rlm@46
|
2271
|
rlm@46
|
2272
|
rlm@46
|
2273 initDD : function(group, config, overrides){
|
rlm@46
|
2274 var dd = new Ext.dd.DD(Ext.id(this.dom), group, config);
|
rlm@46
|
2275 return Ext.apply(dd, overrides);
|
rlm@46
|
2276 },
|
rlm@46
|
2277
|
rlm@46
|
2278
|
rlm@46
|
2279 initDDProxy : function(group, config, overrides){
|
rlm@46
|
2280 var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config);
|
rlm@46
|
2281 return Ext.apply(dd, overrides);
|
rlm@46
|
2282 },
|
rlm@46
|
2283
|
rlm@46
|
2284
|
rlm@46
|
2285 initDDTarget : function(group, config, overrides){
|
rlm@46
|
2286 var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config);
|
rlm@46
|
2287 return Ext.apply(dd, overrides);
|
rlm@46
|
2288 },
|
rlm@46
|
2289
|
rlm@46
|
2290
|
rlm@46
|
2291 setVisible : function(visible, animate){
|
rlm@46
|
2292 if(!animate || !A){
|
rlm@46
|
2293 if(this.visibilityMode == El.DISPLAY){
|
rlm@46
|
2294 this.setDisplayed(visible);
|
rlm@46
|
2295 }else{
|
rlm@46
|
2296 this.fixDisplay();
|
rlm@46
|
2297 this.dom.style.visibility = visible ? "visible" : "hidden";
|
rlm@46
|
2298 }
|
rlm@46
|
2299 }else{
|
rlm@46
|
2300 var dom = this.dom;
|
rlm@46
|
2301 var visMode = this.visibilityMode;
|
rlm@46
|
2302 if(visible){
|
rlm@46
|
2303 this.setOpacity(.01);
|
rlm@46
|
2304 this.setVisible(true);
|
rlm@46
|
2305 }
|
rlm@46
|
2306 this.anim({opacity: { to: (visible?1:0) }},
|
rlm@46
|
2307 this.preanim(arguments, 1),
|
rlm@46
|
2308 null, .35, 'easeIn', function(){
|
rlm@46
|
2309 if(!visible){
|
rlm@46
|
2310 if(visMode == El.DISPLAY){
|
rlm@46
|
2311 dom.style.display = "none";
|
rlm@46
|
2312 }else{
|
rlm@46
|
2313 dom.style.visibility = "hidden";
|
rlm@46
|
2314 }
|
rlm@46
|
2315 Ext.get(dom).setOpacity(1);
|
rlm@46
|
2316 }
|
rlm@46
|
2317 });
|
rlm@46
|
2318 }
|
rlm@46
|
2319 return this;
|
rlm@46
|
2320 },
|
rlm@46
|
2321
|
rlm@46
|
2322
|
rlm@46
|
2323 isDisplayed : function() {
|
rlm@46
|
2324 return this.getStyle("display") != "none";
|
rlm@46
|
2325 },
|
rlm@46
|
2326
|
rlm@46
|
2327
|
rlm@46
|
2328 toggle : function(animate){
|
rlm@46
|
2329 this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
|
rlm@46
|
2330 return this;
|
rlm@46
|
2331 },
|
rlm@46
|
2332
|
rlm@46
|
2333
|
rlm@46
|
2334 setDisplayed : function(value) {
|
rlm@46
|
2335 if(typeof value == "boolean"){
|
rlm@46
|
2336 value = value ? this.originalDisplay : "none";
|
rlm@46
|
2337 }
|
rlm@46
|
2338 this.setStyle("display", value);
|
rlm@46
|
2339 return this;
|
rlm@46
|
2340 },
|
rlm@46
|
2341
|
rlm@46
|
2342
|
rlm@46
|
2343 focus : function() {
|
rlm@46
|
2344 try{
|
rlm@46
|
2345 this.dom.focus();
|
rlm@46
|
2346 }catch(e){}
|
rlm@46
|
2347 return this;
|
rlm@46
|
2348 },
|
rlm@46
|
2349
|
rlm@46
|
2350
|
rlm@46
|
2351 blur : function() {
|
rlm@46
|
2352 try{
|
rlm@46
|
2353 this.dom.blur();
|
rlm@46
|
2354 }catch(e){}
|
rlm@46
|
2355 return this;
|
rlm@46
|
2356 },
|
rlm@46
|
2357
|
rlm@46
|
2358
|
rlm@46
|
2359 addClass : function(className){
|
rlm@46
|
2360 if(Ext.isArray(className)){
|
rlm@46
|
2361 for(var i = 0, len = className.length; i < len; i++) {
|
rlm@46
|
2362 this.addClass(className[i]);
|
rlm@46
|
2363 }
|
rlm@46
|
2364 }else{
|
rlm@46
|
2365 if(className && !this.hasClass(className)){
|
rlm@46
|
2366 this.dom.className = this.dom.className + " " + className;
|
rlm@46
|
2367 }
|
rlm@46
|
2368 }
|
rlm@46
|
2369 return this;
|
rlm@46
|
2370 },
|
rlm@46
|
2371
|
rlm@46
|
2372
|
rlm@46
|
2373 radioClass : function(className){
|
rlm@46
|
2374 var siblings = this.dom.parentNode.childNodes;
|
rlm@46
|
2375 for(var i = 0; i < siblings.length; i++) {
|
rlm@46
|
2376 var s = siblings[i];
|
rlm@46
|
2377 if(s.nodeType == 1){
|
rlm@46
|
2378 Ext.get(s).removeClass(className);
|
rlm@46
|
2379 }
|
rlm@46
|
2380 }
|
rlm@46
|
2381 this.addClass(className);
|
rlm@46
|
2382 return this;
|
rlm@46
|
2383 },
|
rlm@46
|
2384
|
rlm@46
|
2385
|
rlm@46
|
2386 removeClass : function(className){
|
rlm@46
|
2387 if(!className || !this.dom.className){
|
rlm@46
|
2388 return this;
|
rlm@46
|
2389 }
|
rlm@46
|
2390 if(Ext.isArray(className)){
|
rlm@46
|
2391 for(var i = 0, len = className.length; i < len; i++) {
|
rlm@46
|
2392 this.removeClass(className[i]);
|
rlm@46
|
2393 }
|
rlm@46
|
2394 }else{
|
rlm@46
|
2395 if(this.hasClass(className)){
|
rlm@46
|
2396 var re = this.classReCache[className];
|
rlm@46
|
2397 if (!re) {
|
rlm@46
|
2398 re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)', "g");
|
rlm@46
|
2399 this.classReCache[className] = re;
|
rlm@46
|
2400 }
|
rlm@46
|
2401 this.dom.className =
|
rlm@46
|
2402 this.dom.className.replace(re, " ");
|
rlm@46
|
2403 }
|
rlm@46
|
2404 }
|
rlm@46
|
2405 return this;
|
rlm@46
|
2406 },
|
rlm@46
|
2407
|
rlm@46
|
2408 classReCache: {},
|
rlm@46
|
2409
|
rlm@46
|
2410
|
rlm@46
|
2411 toggleClass : function(className){
|
rlm@46
|
2412 if(this.hasClass(className)){
|
rlm@46
|
2413 this.removeClass(className);
|
rlm@46
|
2414 }else{
|
rlm@46
|
2415 this.addClass(className);
|
rlm@46
|
2416 }
|
rlm@46
|
2417 return this;
|
rlm@46
|
2418 },
|
rlm@46
|
2419
|
rlm@46
|
2420
|
rlm@46
|
2421 hasClass : function(className){
|
rlm@46
|
2422 return className && (' '+this.dom.className+' ').indexOf(' '+className+' ') != -1;
|
rlm@46
|
2423 },
|
rlm@46
|
2424
|
rlm@46
|
2425
|
rlm@46
|
2426 replaceClass : function(oldClassName, newClassName){
|
rlm@46
|
2427 this.removeClass(oldClassName);
|
rlm@46
|
2428 this.addClass(newClassName);
|
rlm@46
|
2429 return this;
|
rlm@46
|
2430 },
|
rlm@46
|
2431
|
rlm@46
|
2432
|
rlm@46
|
2433 getStyles : function(){
|
rlm@46
|
2434 var a = arguments, len = a.length, r = {};
|
rlm@46
|
2435 for(var i = 0; i < len; i++){
|
rlm@46
|
2436 r[a[i]] = this.getStyle(a[i]);
|
rlm@46
|
2437 }
|
rlm@46
|
2438 return r;
|
rlm@46
|
2439 },
|
rlm@46
|
2440
|
rlm@46
|
2441
|
rlm@46
|
2442 getStyle : function(){
|
rlm@46
|
2443 return view && view.getComputedStyle ?
|
rlm@46
|
2444 function(prop){
|
rlm@46
|
2445 var el = this.dom, v, cs, camel;
|
rlm@46
|
2446 if(prop == 'float'){
|
rlm@46
|
2447 prop = "cssFloat";
|
rlm@46
|
2448 }
|
rlm@46
|
2449 if(v = el.style[prop]){
|
rlm@46
|
2450 return v;
|
rlm@46
|
2451 }
|
rlm@46
|
2452 if(cs = view.getComputedStyle(el, "")){
|
rlm@46
|
2453 if(!(camel = propCache[prop])){
|
rlm@46
|
2454 camel = propCache[prop] = prop.replace(camelRe, camelFn);
|
rlm@46
|
2455 }
|
rlm@46
|
2456 return cs[camel];
|
rlm@46
|
2457 }
|
rlm@46
|
2458 return null;
|
rlm@46
|
2459 } :
|
rlm@46
|
2460 function(prop){
|
rlm@46
|
2461 var el = this.dom, v, cs, camel;
|
rlm@46
|
2462 if(prop == 'opacity'){
|
rlm@46
|
2463 if(typeof el.style.filter == 'string'){
|
rlm@46
|
2464 var m = el.style.filter.match(/alpha\(opacity=(.*)\)/i);
|
rlm@46
|
2465 if(m){
|
rlm@46
|
2466 var fv = parseFloat(m[1]);
|
rlm@46
|
2467 if(!isNaN(fv)){
|
rlm@46
|
2468 return fv ? fv / 100 : 0;
|
rlm@46
|
2469 }
|
rlm@46
|
2470 }
|
rlm@46
|
2471 }
|
rlm@46
|
2472 return 1;
|
rlm@46
|
2473 }else if(prop == 'float'){
|
rlm@46
|
2474 prop = "styleFloat";
|
rlm@46
|
2475 }
|
rlm@46
|
2476 if(!(camel = propCache[prop])){
|
rlm@46
|
2477 camel = propCache[prop] = prop.replace(camelRe, camelFn);
|
rlm@46
|
2478 }
|
rlm@46
|
2479 if(v = el.style[camel]){
|
rlm@46
|
2480 return v;
|
rlm@46
|
2481 }
|
rlm@46
|
2482 if(cs = el.currentStyle){
|
rlm@46
|
2483 return cs[camel];
|
rlm@46
|
2484 }
|
rlm@46
|
2485 return null;
|
rlm@46
|
2486 };
|
rlm@46
|
2487 }(),
|
rlm@46
|
2488
|
rlm@46
|
2489
|
rlm@46
|
2490 setStyle : function(prop, value){
|
rlm@46
|
2491 if(typeof prop == "string"){
|
rlm@46
|
2492 var camel;
|
rlm@46
|
2493 if(!(camel = propCache[prop])){
|
rlm@46
|
2494 camel = propCache[prop] = prop.replace(camelRe, camelFn);
|
rlm@46
|
2495 }
|
rlm@46
|
2496 if(camel == 'opacity') {
|
rlm@46
|
2497 this.setOpacity(value);
|
rlm@46
|
2498 }else{
|
rlm@46
|
2499 this.dom.style[camel] = value;
|
rlm@46
|
2500 }
|
rlm@46
|
2501 }else{
|
rlm@46
|
2502 for(var style in prop){
|
rlm@46
|
2503 if(typeof prop[style] != "function"){
|
rlm@46
|
2504 this.setStyle(style, prop[style]);
|
rlm@46
|
2505 }
|
rlm@46
|
2506 }
|
rlm@46
|
2507 }
|
rlm@46
|
2508 return this;
|
rlm@46
|
2509 },
|
rlm@46
|
2510
|
rlm@46
|
2511
|
rlm@46
|
2512 applyStyles : function(style){
|
rlm@46
|
2513 Ext.DomHelper.applyStyles(this.dom, style);
|
rlm@46
|
2514 return this;
|
rlm@46
|
2515 },
|
rlm@46
|
2516
|
rlm@46
|
2517
|
rlm@46
|
2518 getX : function(){
|
rlm@46
|
2519 return D.getX(this.dom);
|
rlm@46
|
2520 },
|
rlm@46
|
2521
|
rlm@46
|
2522
|
rlm@46
|
2523 getY : function(){
|
rlm@46
|
2524 return D.getY(this.dom);
|
rlm@46
|
2525 },
|
rlm@46
|
2526
|
rlm@46
|
2527
|
rlm@46
|
2528 getXY : function(){
|
rlm@46
|
2529 return D.getXY(this.dom);
|
rlm@46
|
2530 },
|
rlm@46
|
2531
|
rlm@46
|
2532
|
rlm@46
|
2533 getOffsetsTo : function(el){
|
rlm@46
|
2534 var o = this.getXY();
|
rlm@46
|
2535 var e = Ext.fly(el, '_internal').getXY();
|
rlm@46
|
2536 return [o[0]-e[0],o[1]-e[1]];
|
rlm@46
|
2537 },
|
rlm@46
|
2538
|
rlm@46
|
2539
|
rlm@46
|
2540 setX : function(x, animate){
|
rlm@46
|
2541 if(!animate || !A){
|
rlm@46
|
2542 D.setX(this.dom, x);
|
rlm@46
|
2543 }else{
|
rlm@46
|
2544 this.setXY([x, this.getY()], this.preanim(arguments, 1));
|
rlm@46
|
2545 }
|
rlm@46
|
2546 return this;
|
rlm@46
|
2547 },
|
rlm@46
|
2548
|
rlm@46
|
2549
|
rlm@46
|
2550 setY : function(y, animate){
|
rlm@46
|
2551 if(!animate || !A){
|
rlm@46
|
2552 D.setY(this.dom, y);
|
rlm@46
|
2553 }else{
|
rlm@46
|
2554 this.setXY([this.getX(), y], this.preanim(arguments, 1));
|
rlm@46
|
2555 }
|
rlm@46
|
2556 return this;
|
rlm@46
|
2557 },
|
rlm@46
|
2558
|
rlm@46
|
2559
|
rlm@46
|
2560 setLeft : function(left){
|
rlm@46
|
2561 this.setStyle("left", this.addUnits(left));
|
rlm@46
|
2562 return this;
|
rlm@46
|
2563 },
|
rlm@46
|
2564
|
rlm@46
|
2565
|
rlm@46
|
2566 setTop : function(top){
|
rlm@46
|
2567 this.setStyle("top", this.addUnits(top));
|
rlm@46
|
2568 return this;
|
rlm@46
|
2569 },
|
rlm@46
|
2570
|
rlm@46
|
2571
|
rlm@46
|
2572 setRight : function(right){
|
rlm@46
|
2573 this.setStyle("right", this.addUnits(right));
|
rlm@46
|
2574 return this;
|
rlm@46
|
2575 },
|
rlm@46
|
2576
|
rlm@46
|
2577
|
rlm@46
|
2578 setBottom : function(bottom){
|
rlm@46
|
2579 this.setStyle("bottom", this.addUnits(bottom));
|
rlm@46
|
2580 return this;
|
rlm@46
|
2581 },
|
rlm@46
|
2582
|
rlm@46
|
2583
|
rlm@46
|
2584 setXY : function(pos, animate){
|
rlm@46
|
2585 if(!animate || !A){
|
rlm@46
|
2586 D.setXY(this.dom, pos);
|
rlm@46
|
2587 }else{
|
rlm@46
|
2588 this.anim({points: {to: pos}}, this.preanim(arguments, 1), 'motion');
|
rlm@46
|
2589 }
|
rlm@46
|
2590 return this;
|
rlm@46
|
2591 },
|
rlm@46
|
2592
|
rlm@46
|
2593
|
rlm@46
|
2594 setLocation : function(x, y, animate){
|
rlm@46
|
2595 this.setXY([x, y], this.preanim(arguments, 2));
|
rlm@46
|
2596 return this;
|
rlm@46
|
2597 },
|
rlm@46
|
2598
|
rlm@46
|
2599
|
rlm@46
|
2600 moveTo : function(x, y, animate){
|
rlm@46
|
2601 this.setXY([x, y], this.preanim(arguments, 2));
|
rlm@46
|
2602 return this;
|
rlm@46
|
2603 },
|
rlm@46
|
2604
|
rlm@46
|
2605
|
rlm@46
|
2606 getRegion : function(){
|
rlm@46
|
2607 return D.getRegion(this.dom);
|
rlm@46
|
2608 },
|
rlm@46
|
2609
|
rlm@46
|
2610
|
rlm@46
|
2611 getHeight : function(contentHeight){
|
rlm@46
|
2612 var h = this.dom.offsetHeight || 0;
|
rlm@46
|
2613 h = contentHeight !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb");
|
rlm@46
|
2614 return h < 0 ? 0 : h;
|
rlm@46
|
2615 },
|
rlm@46
|
2616
|
rlm@46
|
2617
|
rlm@46
|
2618 getWidth : function(contentWidth){
|
rlm@46
|
2619 var w = this.dom.offsetWidth || 0;
|
rlm@46
|
2620 w = contentWidth !== true ? w : w-this.getBorderWidth("lr")-this.getPadding("lr");
|
rlm@46
|
2621 return w < 0 ? 0 : w;
|
rlm@46
|
2622 },
|
rlm@46
|
2623
|
rlm@46
|
2624
|
rlm@46
|
2625 getComputedHeight : function(){
|
rlm@46
|
2626 var h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
|
rlm@46
|
2627 if(!h){
|
rlm@46
|
2628 h = parseInt(this.getStyle('height'), 10) || 0;
|
rlm@46
|
2629 if(!this.isBorderBox()){
|
rlm@46
|
2630 h += this.getFrameWidth('tb');
|
rlm@46
|
2631 }
|
rlm@46
|
2632 }
|
rlm@46
|
2633 return h;
|
rlm@46
|
2634 },
|
rlm@46
|
2635
|
rlm@46
|
2636
|
rlm@46
|
2637 getComputedWidth : function(){
|
rlm@46
|
2638 var w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
|
rlm@46
|
2639 if(!w){
|
rlm@46
|
2640 w = parseInt(this.getStyle('width'), 10) || 0;
|
rlm@46
|
2641 if(!this.isBorderBox()){
|
rlm@46
|
2642 w += this.getFrameWidth('lr');
|
rlm@46
|
2643 }
|
rlm@46
|
2644 }
|
rlm@46
|
2645 return w;
|
rlm@46
|
2646 },
|
rlm@46
|
2647
|
rlm@46
|
2648
|
rlm@46
|
2649 getSize : function(contentSize){
|
rlm@46
|
2650 return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)};
|
rlm@46
|
2651 },
|
rlm@46
|
2652
|
rlm@46
|
2653 getStyleSize : function(){
|
rlm@46
|
2654 var w, h, d = this.dom, s = d.style;
|
rlm@46
|
2655 if(s.width && s.width != 'auto'){
|
rlm@46
|
2656 w = parseInt(s.width, 10);
|
rlm@46
|
2657 if(Ext.isBorderBox){
|
rlm@46
|
2658 w -= this.getFrameWidth('lr');
|
rlm@46
|
2659 }
|
rlm@46
|
2660 }
|
rlm@46
|
2661 if(s.height && s.height != 'auto'){
|
rlm@46
|
2662 h = parseInt(s.height, 10);
|
rlm@46
|
2663 if(Ext.isBorderBox){
|
rlm@46
|
2664 h -= this.getFrameWidth('tb');
|
rlm@46
|
2665 }
|
rlm@46
|
2666 }
|
rlm@46
|
2667 return {width: w || this.getWidth(true), height: h || this.getHeight(true)};
|
rlm@46
|
2668
|
rlm@46
|
2669 },
|
rlm@46
|
2670
|
rlm@46
|
2671
|
rlm@46
|
2672 getViewSize : function(){
|
rlm@46
|
2673 var d = this.dom, doc = document, aw = 0, ah = 0;
|
rlm@46
|
2674 if(d == doc || d == doc.body){
|
rlm@46
|
2675 return {width : D.getViewWidth(), height: D.getViewHeight()};
|
rlm@46
|
2676 }else{
|
rlm@46
|
2677 return {
|
rlm@46
|
2678 width : d.clientWidth,
|
rlm@46
|
2679 height: d.clientHeight
|
rlm@46
|
2680 };
|
rlm@46
|
2681 }
|
rlm@46
|
2682 },
|
rlm@46
|
2683
|
rlm@46
|
2684
|
rlm@46
|
2685 getValue : function(asNumber){
|
rlm@46
|
2686 return asNumber ? parseInt(this.dom.value, 10) : this.dom.value;
|
rlm@46
|
2687 },
|
rlm@46
|
2688
|
rlm@46
|
2689 adjustWidth : function(width){
|
rlm@46
|
2690 if(typeof width == "number"){
|
rlm@46
|
2691 if(this.autoBoxAdjust && !this.isBorderBox()){
|
rlm@46
|
2692 width -= (this.getBorderWidth("lr") + this.getPadding("lr"));
|
rlm@46
|
2693 }
|
rlm@46
|
2694 if(width < 0){
|
rlm@46
|
2695 width = 0;
|
rlm@46
|
2696 }
|
rlm@46
|
2697 }
|
rlm@46
|
2698 return width;
|
rlm@46
|
2699 },
|
rlm@46
|
2700
|
rlm@46
|
2701 adjustHeight : function(height){
|
rlm@46
|
2702 if(typeof height == "number"){
|
rlm@46
|
2703 if(this.autoBoxAdjust && !this.isBorderBox()){
|
rlm@46
|
2704 height -= (this.getBorderWidth("tb") + this.getPadding("tb"));
|
rlm@46
|
2705 }
|
rlm@46
|
2706 if(height < 0){
|
rlm@46
|
2707 height = 0;
|
rlm@46
|
2708 }
|
rlm@46
|
2709 }
|
rlm@46
|
2710 return height;
|
rlm@46
|
2711 },
|
rlm@46
|
2712
|
rlm@46
|
2713
|
rlm@46
|
2714 setWidth : function(width, animate){
|
rlm@46
|
2715 width = this.adjustWidth(width);
|
rlm@46
|
2716 if(!animate || !A){
|
rlm@46
|
2717 this.dom.style.width = this.addUnits(width);
|
rlm@46
|
2718 }else{
|
rlm@46
|
2719 this.anim({width: {to: width}}, this.preanim(arguments, 1));
|
rlm@46
|
2720 }
|
rlm@46
|
2721 return this;
|
rlm@46
|
2722 },
|
rlm@46
|
2723
|
rlm@46
|
2724
|
rlm@46
|
2725 setHeight : function(height, animate){
|
rlm@46
|
2726 height = this.adjustHeight(height);
|
rlm@46
|
2727 if(!animate || !A){
|
rlm@46
|
2728 this.dom.style.height = this.addUnits(height);
|
rlm@46
|
2729 }else{
|
rlm@46
|
2730 this.anim({height: {to: height}}, this.preanim(arguments, 1));
|
rlm@46
|
2731 }
|
rlm@46
|
2732 return this;
|
rlm@46
|
2733 },
|
rlm@46
|
2734
|
rlm@46
|
2735
|
rlm@46
|
2736 setSize : function(width, height, animate){
|
rlm@46
|
2737 if(typeof width == "object"){ height = width.height; width = width.width;
|
rlm@46
|
2738 }
|
rlm@46
|
2739 width = this.adjustWidth(width); height = this.adjustHeight(height);
|
rlm@46
|
2740 if(!animate || !A){
|
rlm@46
|
2741 this.dom.style.width = this.addUnits(width);
|
rlm@46
|
2742 this.dom.style.height = this.addUnits(height);
|
rlm@46
|
2743 }else{
|
rlm@46
|
2744 this.anim({width: {to: width}, height: {to: height}}, this.preanim(arguments, 2));
|
rlm@46
|
2745 }
|
rlm@46
|
2746 return this;
|
rlm@46
|
2747 },
|
rlm@46
|
2748
|
rlm@46
|
2749
|
rlm@46
|
2750 setBounds : function(x, y, width, height, animate){
|
rlm@46
|
2751 if(!animate || !A){
|
rlm@46
|
2752 this.setSize(width, height);
|
rlm@46
|
2753 this.setLocation(x, y);
|
rlm@46
|
2754 }else{
|
rlm@46
|
2755 width = this.adjustWidth(width); height = this.adjustHeight(height);
|
rlm@46
|
2756 this.anim({points: {to: [x, y]}, width: {to: width}, height: {to: height}},
|
rlm@46
|
2757 this.preanim(arguments, 4), 'motion');
|
rlm@46
|
2758 }
|
rlm@46
|
2759 return this;
|
rlm@46
|
2760 },
|
rlm@46
|
2761
|
rlm@46
|
2762
|
rlm@46
|
2763 setRegion : function(region, animate){
|
rlm@46
|
2764 this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.preanim(arguments, 1));
|
rlm@46
|
2765 return this;
|
rlm@46
|
2766 },
|
rlm@46
|
2767
|
rlm@46
|
2768
|
rlm@46
|
2769 addListener : function(eventName, fn, scope, options){
|
rlm@46
|
2770 Ext.EventManager.on(this.dom, eventName, fn, scope || this, options);
|
rlm@46
|
2771 },
|
rlm@46
|
2772
|
rlm@46
|
2773
|
rlm@46
|
2774 removeListener : function(eventName, fn){
|
rlm@46
|
2775 Ext.EventManager.removeListener(this.dom, eventName, fn);
|
rlm@46
|
2776 return this;
|
rlm@46
|
2777 },
|
rlm@46
|
2778
|
rlm@46
|
2779
|
rlm@46
|
2780 removeAllListeners : function(){
|
rlm@46
|
2781 E.purgeElement(this.dom);
|
rlm@46
|
2782 return this;
|
rlm@46
|
2783 },
|
rlm@46
|
2784
|
rlm@46
|
2785
|
rlm@46
|
2786 relayEvent : function(eventName, observable){
|
rlm@46
|
2787 this.on(eventName, function(e){
|
rlm@46
|
2788 observable.fireEvent(eventName, e);
|
rlm@46
|
2789 });
|
rlm@46
|
2790 },
|
rlm@46
|
2791
|
rlm@46
|
2792
|
rlm@46
|
2793 setOpacity : function(opacity, animate){
|
rlm@46
|
2794 if(!animate || !A){
|
rlm@46
|
2795 var s = this.dom.style;
|
rlm@46
|
2796 if(Ext.isIE){
|
rlm@46
|
2797 s.zoom = 1;
|
rlm@46
|
2798 s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") +
|
rlm@46
|
2799 (opacity == 1 ? "" : " alpha(opacity=" + opacity * 100 + ")");
|
rlm@46
|
2800 }else{
|
rlm@46
|
2801 s.opacity = opacity;
|
rlm@46
|
2802 }
|
rlm@46
|
2803 }else{
|
rlm@46
|
2804 this.anim({opacity: {to: opacity}}, this.preanim(arguments, 1), null, .35, 'easeIn');
|
rlm@46
|
2805 }
|
rlm@46
|
2806 return this;
|
rlm@46
|
2807 },
|
rlm@46
|
2808
|
rlm@46
|
2809
|
rlm@46
|
2810 getLeft : function(local){
|
rlm@46
|
2811 if(!local){
|
rlm@46
|
2812 return this.getX();
|
rlm@46
|
2813 }else{
|
rlm@46
|
2814 return parseInt(this.getStyle("left"), 10) || 0;
|
rlm@46
|
2815 }
|
rlm@46
|
2816 },
|
rlm@46
|
2817
|
rlm@46
|
2818
|
rlm@46
|
2819 getRight : function(local){
|
rlm@46
|
2820 if(!local){
|
rlm@46
|
2821 return this.getX() + this.getWidth();
|
rlm@46
|
2822 }else{
|
rlm@46
|
2823 return (this.getLeft(true) + this.getWidth()) || 0;
|
rlm@46
|
2824 }
|
rlm@46
|
2825 },
|
rlm@46
|
2826
|
rlm@46
|
2827
|
rlm@46
|
2828 getTop : function(local) {
|
rlm@46
|
2829 if(!local){
|
rlm@46
|
2830 return this.getY();
|
rlm@46
|
2831 }else{
|
rlm@46
|
2832 return parseInt(this.getStyle("top"), 10) || 0;
|
rlm@46
|
2833 }
|
rlm@46
|
2834 },
|
rlm@46
|
2835
|
rlm@46
|
2836
|
rlm@46
|
2837 getBottom : function(local){
|
rlm@46
|
2838 if(!local){
|
rlm@46
|
2839 return this.getY() + this.getHeight();
|
rlm@46
|
2840 }else{
|
rlm@46
|
2841 return (this.getTop(true) + this.getHeight()) || 0;
|
rlm@46
|
2842 }
|
rlm@46
|
2843 },
|
rlm@46
|
2844
|
rlm@46
|
2845
|
rlm@46
|
2846 position : function(pos, zIndex, x, y){
|
rlm@46
|
2847 if(!pos){
|
rlm@46
|
2848 if(this.getStyle('position') == 'static'){
|
rlm@46
|
2849 this.setStyle('position', 'relative');
|
rlm@46
|
2850 }
|
rlm@46
|
2851 }else{
|
rlm@46
|
2852 this.setStyle("position", pos);
|
rlm@46
|
2853 }
|
rlm@46
|
2854 if(zIndex){
|
rlm@46
|
2855 this.setStyle("z-index", zIndex);
|
rlm@46
|
2856 }
|
rlm@46
|
2857 if(x !== undefined && y !== undefined){
|
rlm@46
|
2858 this.setXY([x, y]);
|
rlm@46
|
2859 }else if(x !== undefined){
|
rlm@46
|
2860 this.setX(x);
|
rlm@46
|
2861 }else if(y !== undefined){
|
rlm@46
|
2862 this.setY(y);
|
rlm@46
|
2863 }
|
rlm@46
|
2864 },
|
rlm@46
|
2865
|
rlm@46
|
2866
|
rlm@46
|
2867 clearPositioning : function(value){
|
rlm@46
|
2868 value = value ||'';
|
rlm@46
|
2869 this.setStyle({
|
rlm@46
|
2870 "left": value,
|
rlm@46
|
2871 "right": value,
|
rlm@46
|
2872 "top": value,
|
rlm@46
|
2873 "bottom": value,
|
rlm@46
|
2874 "z-index": "",
|
rlm@46
|
2875 "position" : "static"
|
rlm@46
|
2876 });
|
rlm@46
|
2877 return this;
|
rlm@46
|
2878 },
|
rlm@46
|
2879
|
rlm@46
|
2880
|
rlm@46
|
2881 getPositioning : function(){
|
rlm@46
|
2882 var l = this.getStyle("left");
|
rlm@46
|
2883 var t = this.getStyle("top");
|
rlm@46
|
2884 return {
|
rlm@46
|
2885 "position" : this.getStyle("position"),
|
rlm@46
|
2886 "left" : l,
|
rlm@46
|
2887 "right" : l ? "" : this.getStyle("right"),
|
rlm@46
|
2888 "top" : t,
|
rlm@46
|
2889 "bottom" : t ? "" : this.getStyle("bottom"),
|
rlm@46
|
2890 "z-index" : this.getStyle("z-index")
|
rlm@46
|
2891 };
|
rlm@46
|
2892 },
|
rlm@46
|
2893
|
rlm@46
|
2894
|
rlm@46
|
2895 getBorderWidth : function(side){
|
rlm@46
|
2896 return this.addStyles(side, El.borders);
|
rlm@46
|
2897 },
|
rlm@46
|
2898
|
rlm@46
|
2899
|
rlm@46
|
2900 getPadding : function(side){
|
rlm@46
|
2901 return this.addStyles(side, El.paddings);
|
rlm@46
|
2902 },
|
rlm@46
|
2903
|
rlm@46
|
2904
|
rlm@46
|
2905 setPositioning : function(pc){
|
rlm@46
|
2906 this.applyStyles(pc);
|
rlm@46
|
2907 if(pc.right == "auto"){
|
rlm@46
|
2908 this.dom.style.right = "";
|
rlm@46
|
2909 }
|
rlm@46
|
2910 if(pc.bottom == "auto"){
|
rlm@46
|
2911 this.dom.style.bottom = "";
|
rlm@46
|
2912 }
|
rlm@46
|
2913 return this;
|
rlm@46
|
2914 },
|
rlm@46
|
2915
|
rlm@46
|
2916 fixDisplay : function(){
|
rlm@46
|
2917 if(this.getStyle("display") == "none"){
|
rlm@46
|
2918 this.setStyle("visibility", "hidden");
|
rlm@46
|
2919 this.setStyle("display", this.originalDisplay); if(this.getStyle("display") == "none"){ this.setStyle("display", "block");
|
rlm@46
|
2920 }
|
rlm@46
|
2921 }
|
rlm@46
|
2922 },
|
rlm@46
|
2923
|
rlm@46
|
2924 setOverflow : function(v){
|
rlm@46
|
2925 if(v=='auto' && Ext.isMac && Ext.isGecko){ this.dom.style.overflow = 'hidden';
|
rlm@46
|
2926 (function(){this.dom.style.overflow = 'auto';}).defer(1, this);
|
rlm@46
|
2927 }else{
|
rlm@46
|
2928 this.dom.style.overflow = v;
|
rlm@46
|
2929 }
|
rlm@46
|
2930 },
|
rlm@46
|
2931
|
rlm@46
|
2932
|
rlm@46
|
2933 setLeftTop : function(left, top){
|
rlm@46
|
2934 this.dom.style.left = this.addUnits(left);
|
rlm@46
|
2935 this.dom.style.top = this.addUnits(top);
|
rlm@46
|
2936 return this;
|
rlm@46
|
2937 },
|
rlm@46
|
2938
|
rlm@46
|
2939
|
rlm@46
|
2940 move : function(direction, distance, animate){
|
rlm@46
|
2941 var xy = this.getXY();
|
rlm@46
|
2942 direction = direction.toLowerCase();
|
rlm@46
|
2943 switch(direction){
|
rlm@46
|
2944 case "l":
|
rlm@46
|
2945 case "left":
|
rlm@46
|
2946 this.moveTo(xy[0]-distance, xy[1], this.preanim(arguments, 2));
|
rlm@46
|
2947 break;
|
rlm@46
|
2948 case "r":
|
rlm@46
|
2949 case "right":
|
rlm@46
|
2950 this.moveTo(xy[0]+distance, xy[1], this.preanim(arguments, 2));
|
rlm@46
|
2951 break;
|
rlm@46
|
2952 case "t":
|
rlm@46
|
2953 case "top":
|
rlm@46
|
2954 case "up":
|
rlm@46
|
2955 this.moveTo(xy[0], xy[1]-distance, this.preanim(arguments, 2));
|
rlm@46
|
2956 break;
|
rlm@46
|
2957 case "b":
|
rlm@46
|
2958 case "bottom":
|
rlm@46
|
2959 case "down":
|
rlm@46
|
2960 this.moveTo(xy[0], xy[1]+distance, this.preanim(arguments, 2));
|
rlm@46
|
2961 break;
|
rlm@46
|
2962 }
|
rlm@46
|
2963 return this;
|
rlm@46
|
2964 },
|
rlm@46
|
2965
|
rlm@46
|
2966
|
rlm@46
|
2967 clip : function(){
|
rlm@46
|
2968 if(!this.isClipped){
|
rlm@46
|
2969 this.isClipped = true;
|
rlm@46
|
2970 this.originalClip = {
|
rlm@46
|
2971 "o": this.getStyle("overflow"),
|
rlm@46
|
2972 "x": this.getStyle("overflow-x"),
|
rlm@46
|
2973 "y": this.getStyle("overflow-y")
|
rlm@46
|
2974 };
|
rlm@46
|
2975 this.setStyle("overflow", "hidden");
|
rlm@46
|
2976 this.setStyle("overflow-x", "hidden");
|
rlm@46
|
2977 this.setStyle("overflow-y", "hidden");
|
rlm@46
|
2978 }
|
rlm@46
|
2979 return this;
|
rlm@46
|
2980 },
|
rlm@46
|
2981
|
rlm@46
|
2982
|
rlm@46
|
2983 unclip : function(){
|
rlm@46
|
2984 if(this.isClipped){
|
rlm@46
|
2985 this.isClipped = false;
|
rlm@46
|
2986 var o = this.originalClip;
|
rlm@46
|
2987 if(o.o){this.setStyle("overflow", o.o);}
|
rlm@46
|
2988 if(o.x){this.setStyle("overflow-x", o.x);}
|
rlm@46
|
2989 if(o.y){this.setStyle("overflow-y", o.y);}
|
rlm@46
|
2990 }
|
rlm@46
|
2991 return this;
|
rlm@46
|
2992 },
|
rlm@46
|
2993
|
rlm@46
|
2994
|
rlm@46
|
2995
|
rlm@46
|
2996 getAnchorXY : function(anchor, local, s){
|
rlm@46
|
2997
|
rlm@46
|
2998 var w, h, vp = false;
|
rlm@46
|
2999 if(!s){
|
rlm@46
|
3000 var d = this.dom;
|
rlm@46
|
3001 if(d == document.body || d == document){
|
rlm@46
|
3002 vp = true;
|
rlm@46
|
3003 w = D.getViewWidth(); h = D.getViewHeight();
|
rlm@46
|
3004 }else{
|
rlm@46
|
3005 w = this.getWidth(); h = this.getHeight();
|
rlm@46
|
3006 }
|
rlm@46
|
3007 }else{
|
rlm@46
|
3008 w = s.width; h = s.height;
|
rlm@46
|
3009 }
|
rlm@46
|
3010 var x = 0, y = 0, r = Math.round;
|
rlm@46
|
3011 switch((anchor || "tl").toLowerCase()){
|
rlm@46
|
3012 case "c":
|
rlm@46
|
3013 x = r(w*.5);
|
rlm@46
|
3014 y = r(h*.5);
|
rlm@46
|
3015 break;
|
rlm@46
|
3016 case "t":
|
rlm@46
|
3017 x = r(w*.5);
|
rlm@46
|
3018 y = 0;
|
rlm@46
|
3019 break;
|
rlm@46
|
3020 case "l":
|
rlm@46
|
3021 x = 0;
|
rlm@46
|
3022 y = r(h*.5);
|
rlm@46
|
3023 break;
|
rlm@46
|
3024 case "r":
|
rlm@46
|
3025 x = w;
|
rlm@46
|
3026 y = r(h*.5);
|
rlm@46
|
3027 break;
|
rlm@46
|
3028 case "b":
|
rlm@46
|
3029 x = r(w*.5);
|
rlm@46
|
3030 y = h;
|
rlm@46
|
3031 break;
|
rlm@46
|
3032 case "tl":
|
rlm@46
|
3033 x = 0;
|
rlm@46
|
3034 y = 0;
|
rlm@46
|
3035 break;
|
rlm@46
|
3036 case "bl":
|
rlm@46
|
3037 x = 0;
|
rlm@46
|
3038 y = h;
|
rlm@46
|
3039 break;
|
rlm@46
|
3040 case "br":
|
rlm@46
|
3041 x = w;
|
rlm@46
|
3042 y = h;
|
rlm@46
|
3043 break;
|
rlm@46
|
3044 case "tr":
|
rlm@46
|
3045 x = w;
|
rlm@46
|
3046 y = 0;
|
rlm@46
|
3047 break;
|
rlm@46
|
3048 }
|
rlm@46
|
3049 if(local === true){
|
rlm@46
|
3050 return [x, y];
|
rlm@46
|
3051 }
|
rlm@46
|
3052 if(vp){
|
rlm@46
|
3053 var sc = this.getScroll();
|
rlm@46
|
3054 return [x + sc.left, y + sc.top];
|
rlm@46
|
3055 }
|
rlm@46
|
3056 var o = this.getXY();
|
rlm@46
|
3057 return [x+o[0], y+o[1]];
|
rlm@46
|
3058 },
|
rlm@46
|
3059
|
rlm@46
|
3060
|
rlm@46
|
3061 getAlignToXY : function(el, p, o){
|
rlm@46
|
3062 el = Ext.get(el);
|
rlm@46
|
3063 if(!el || !el.dom){
|
rlm@46
|
3064 throw "Element.alignToXY with an element that doesn't exist";
|
rlm@46
|
3065 }
|
rlm@46
|
3066 var d = this.dom;
|
rlm@46
|
3067 var c = false; var p1 = "", p2 = "";
|
rlm@46
|
3068 o = o || [0,0];
|
rlm@46
|
3069
|
rlm@46
|
3070 if(!p){
|
rlm@46
|
3071 p = "tl-bl";
|
rlm@46
|
3072 }else if(p == "?"){
|
rlm@46
|
3073 p = "tl-bl?";
|
rlm@46
|
3074 }else if(p.indexOf("-") == -1){
|
rlm@46
|
3075 p = "tl-" + p;
|
rlm@46
|
3076 }
|
rlm@46
|
3077 p = p.toLowerCase();
|
rlm@46
|
3078 var m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
|
rlm@46
|
3079 if(!m){
|
rlm@46
|
3080 throw "Element.alignTo with an invalid alignment " + p;
|
rlm@46
|
3081 }
|
rlm@46
|
3082 p1 = m[1]; p2 = m[2]; c = !!m[3];
|
rlm@46
|
3083
|
rlm@46
|
3084 var a1 = this.getAnchorXY(p1, true);
|
rlm@46
|
3085 var a2 = el.getAnchorXY(p2, false);
|
rlm@46
|
3086
|
rlm@46
|
3087 var x = a2[0] - a1[0] + o[0];
|
rlm@46
|
3088 var y = a2[1] - a1[1] + o[1];
|
rlm@46
|
3089
|
rlm@46
|
3090 if(c){
|
rlm@46
|
3091 var w = this.getWidth(), h = this.getHeight(), r = el.getRegion();
|
rlm@46
|
3092 var dw = D.getViewWidth()-5, dh = D.getViewHeight()-5;
|
rlm@46
|
3093
|
rlm@46
|
3094 var p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1);
|
rlm@46
|
3095 var p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1);
|
rlm@46
|
3096 var swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t"));
|
rlm@46
|
3097 var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r"));
|
rlm@46
|
3098
|
rlm@46
|
3099 var doc = document;
|
rlm@46
|
3100 var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0)+5;
|
rlm@46
|
3101 var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0)+5;
|
rlm@46
|
3102
|
rlm@46
|
3103 if((x+w) > dw + scrollX){
|
rlm@46
|
3104 x = swapX ? r.left-w : dw+scrollX-w;
|
rlm@46
|
3105 }
|
rlm@46
|
3106 if(x < scrollX){
|
rlm@46
|
3107 x = swapX ? r.right : scrollX;
|
rlm@46
|
3108 }
|
rlm@46
|
3109 if((y+h) > dh + scrollY){
|
rlm@46
|
3110 y = swapY ? r.top-h : dh+scrollY-h;
|
rlm@46
|
3111 }
|
rlm@46
|
3112 if (y < scrollY){
|
rlm@46
|
3113 y = swapY ? r.bottom : scrollY;
|
rlm@46
|
3114 }
|
rlm@46
|
3115 }
|
rlm@46
|
3116 return [x,y];
|
rlm@46
|
3117 },
|
rlm@46
|
3118
|
rlm@46
|
3119 getConstrainToXY : function(){
|
rlm@46
|
3120 var os = {top:0, left:0, bottom:0, right: 0};
|
rlm@46
|
3121
|
rlm@46
|
3122 return function(el, local, offsets, proposedXY){
|
rlm@46
|
3123 el = Ext.get(el);
|
rlm@46
|
3124 offsets = offsets ? Ext.applyIf(offsets, os) : os;
|
rlm@46
|
3125
|
rlm@46
|
3126 var vw, vh, vx = 0, vy = 0;
|
rlm@46
|
3127 if(el.dom == document.body || el.dom == document){
|
rlm@46
|
3128 vw = Ext.lib.Dom.getViewWidth();
|
rlm@46
|
3129 vh = Ext.lib.Dom.getViewHeight();
|
rlm@46
|
3130 }else{
|
rlm@46
|
3131 vw = el.dom.clientWidth;
|
rlm@46
|
3132 vh = el.dom.clientHeight;
|
rlm@46
|
3133 if(!local){
|
rlm@46
|
3134 var vxy = el.getXY();
|
rlm@46
|
3135 vx = vxy[0];
|
rlm@46
|
3136 vy = vxy[1];
|
rlm@46
|
3137 }
|
rlm@46
|
3138 }
|
rlm@46
|
3139
|
rlm@46
|
3140 var s = el.getScroll();
|
rlm@46
|
3141
|
rlm@46
|
3142 vx += offsets.left + s.left;
|
rlm@46
|
3143 vy += offsets.top + s.top;
|
rlm@46
|
3144
|
rlm@46
|
3145 vw -= offsets.right;
|
rlm@46
|
3146 vh -= offsets.bottom;
|
rlm@46
|
3147
|
rlm@46
|
3148 var vr = vx+vw;
|
rlm@46
|
3149 var vb = vy+vh;
|
rlm@46
|
3150
|
rlm@46
|
3151 var xy = proposedXY || (!local ? this.getXY() : [this.getLeft(true), this.getTop(true)]);
|
rlm@46
|
3152 var x = xy[0], y = xy[1];
|
rlm@46
|
3153 var w = this.dom.offsetWidth, h = this.dom.offsetHeight;
|
rlm@46
|
3154
|
rlm@46
|
3155 var moved = false;
|
rlm@46
|
3156
|
rlm@46
|
3157 if((x + w) > vr){
|
rlm@46
|
3158 x = vr - w;
|
rlm@46
|
3159 moved = true;
|
rlm@46
|
3160 }
|
rlm@46
|
3161 if((y + h) > vb){
|
rlm@46
|
3162 y = vb - h;
|
rlm@46
|
3163 moved = true;
|
rlm@46
|
3164 }
|
rlm@46
|
3165 if(x < vx){
|
rlm@46
|
3166 x = vx;
|
rlm@46
|
3167 moved = true;
|
rlm@46
|
3168 }
|
rlm@46
|
3169 if(y < vy){
|
rlm@46
|
3170 y = vy;
|
rlm@46
|
3171 moved = true;
|
rlm@46
|
3172 }
|
rlm@46
|
3173 return moved ? [x, y] : false;
|
rlm@46
|
3174 };
|
rlm@46
|
3175 }(),
|
rlm@46
|
3176
|
rlm@46
|
3177 adjustForConstraints : function(xy, parent, offsets){
|
rlm@46
|
3178 return this.getConstrainToXY(parent || document, false, offsets, xy) || xy;
|
rlm@46
|
3179 },
|
rlm@46
|
3180
|
rlm@46
|
3181
|
rlm@46
|
3182 alignTo : function(element, position, offsets, animate){
|
rlm@46
|
3183 var xy = this.getAlignToXY(element, position, offsets);
|
rlm@46
|
3184 this.setXY(xy, this.preanim(arguments, 3));
|
rlm@46
|
3185 return this;
|
rlm@46
|
3186 },
|
rlm@46
|
3187
|
rlm@46
|
3188
|
rlm@46
|
3189 anchorTo : function(el, alignment, offsets, animate, monitorScroll, callback){
|
rlm@46
|
3190 var action = function(){
|
rlm@46
|
3191 this.alignTo(el, alignment, offsets, animate);
|
rlm@46
|
3192 Ext.callback(callback, this);
|
rlm@46
|
3193 };
|
rlm@46
|
3194 Ext.EventManager.onWindowResize(action, this);
|
rlm@46
|
3195 var tm = typeof monitorScroll;
|
rlm@46
|
3196 if(tm != 'undefined'){
|
rlm@46
|
3197 Ext.EventManager.on(window, 'scroll', action, this,
|
rlm@46
|
3198 {buffer: tm == 'number' ? monitorScroll : 50});
|
rlm@46
|
3199 }
|
rlm@46
|
3200 action.call(this); return this;
|
rlm@46
|
3201 },
|
rlm@46
|
3202
|
rlm@46
|
3203 clearOpacity : function(){
|
rlm@46
|
3204 if (window.ActiveXObject) {
|
rlm@46
|
3205 if(typeof this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){
|
rlm@46
|
3206 this.dom.style.filter = "";
|
rlm@46
|
3207 }
|
rlm@46
|
3208 } else {
|
rlm@46
|
3209 this.dom.style.opacity = "";
|
rlm@46
|
3210 this.dom.style["-moz-opacity"] = "";
|
rlm@46
|
3211 this.dom.style["-khtml-opacity"] = "";
|
rlm@46
|
3212 }
|
rlm@46
|
3213 return this;
|
rlm@46
|
3214 },
|
rlm@46
|
3215
|
rlm@46
|
3216
|
rlm@46
|
3217 hide : function(animate){
|
rlm@46
|
3218 this.setVisible(false, this.preanim(arguments, 0));
|
rlm@46
|
3219 return this;
|
rlm@46
|
3220 },
|
rlm@46
|
3221
|
rlm@46
|
3222
|
rlm@46
|
3223 show : function(animate){
|
rlm@46
|
3224 this.setVisible(true, this.preanim(arguments, 0));
|
rlm@46
|
3225 return this;
|
rlm@46
|
3226 },
|
rlm@46
|
3227
|
rlm@46
|
3228
|
rlm@46
|
3229 addUnits : function(size){
|
rlm@46
|
3230 return Ext.Element.addUnits(size, this.defaultUnit);
|
rlm@46
|
3231 },
|
rlm@46
|
3232
|
rlm@46
|
3233
|
rlm@46
|
3234 update : function(html, loadScripts, callback){
|
rlm@46
|
3235 if(typeof html == "undefined"){
|
rlm@46
|
3236 html = "";
|
rlm@46
|
3237 }
|
rlm@46
|
3238 if(loadScripts !== true){
|
rlm@46
|
3239 this.dom.innerHTML = html;
|
rlm@46
|
3240 if(typeof callback == "function"){
|
rlm@46
|
3241 callback();
|
rlm@46
|
3242 }
|
rlm@46
|
3243 return this;
|
rlm@46
|
3244 }
|
rlm@46
|
3245 var id = Ext.id();
|
rlm@46
|
3246 var dom = this.dom;
|
rlm@46
|
3247
|
rlm@46
|
3248 html += '<span id="' + id + '"></span>';
|
rlm@46
|
3249
|
rlm@46
|
3250 E.onAvailable(id, function(){
|
rlm@46
|
3251 var hd = document.getElementsByTagName("head")[0];
|
rlm@46
|
3252 var re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
|
rlm@46
|
3253 var srcRe = /\ssrc=([\'\"])(.*?)\1/i;
|
rlm@46
|
3254 var typeRe = /\stype=([\'\"])(.*?)\1/i;
|
rlm@46
|
3255
|
rlm@46
|
3256 var match;
|
rlm@46
|
3257 while(match = re.exec(html)){
|
rlm@46
|
3258 var attrs = match[1];
|
rlm@46
|
3259 var srcMatch = attrs ? attrs.match(srcRe) : false;
|
rlm@46
|
3260 if(srcMatch && srcMatch[2]){
|
rlm@46
|
3261 var s = document.createElement("script");
|
rlm@46
|
3262 s.src = srcMatch[2];
|
rlm@46
|
3263 var typeMatch = attrs.match(typeRe);
|
rlm@46
|
3264 if(typeMatch && typeMatch[2]){
|
rlm@46
|
3265 s.type = typeMatch[2];
|
rlm@46
|
3266 }
|
rlm@46
|
3267 hd.appendChild(s);
|
rlm@46
|
3268 }else if(match[2] && match[2].length > 0){
|
rlm@46
|
3269 if(window.execScript) {
|
rlm@46
|
3270 window.execScript(match[2]);
|
rlm@46
|
3271 } else {
|
rlm@46
|
3272 window.eval(match[2]);
|
rlm@46
|
3273 }
|
rlm@46
|
3274 }
|
rlm@46
|
3275 }
|
rlm@46
|
3276 var el = document.getElementById(id);
|
rlm@46
|
3277 if(el){Ext.removeNode(el);}
|
rlm@46
|
3278 if(typeof callback == "function"){
|
rlm@46
|
3279 callback();
|
rlm@46
|
3280 }
|
rlm@46
|
3281 });
|
rlm@46
|
3282 dom.innerHTML = html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
|
rlm@46
|
3283 return this;
|
rlm@46
|
3284 },
|
rlm@46
|
3285
|
rlm@46
|
3286
|
rlm@46
|
3287 load : function(){
|
rlm@46
|
3288 var um = this.getUpdater();
|
rlm@46
|
3289 um.update.apply(um, arguments);
|
rlm@46
|
3290 return this;
|
rlm@46
|
3291 },
|
rlm@46
|
3292
|
rlm@46
|
3293
|
rlm@46
|
3294 getUpdater : function(){
|
rlm@46
|
3295 if(!this.updateManager){
|
rlm@46
|
3296 this.updateManager = new Ext.Updater(this);
|
rlm@46
|
3297 }
|
rlm@46
|
3298 return this.updateManager;
|
rlm@46
|
3299 },
|
rlm@46
|
3300
|
rlm@46
|
3301
|
rlm@46
|
3302 unselectable : function(){
|
rlm@46
|
3303 this.dom.unselectable = "on";
|
rlm@46
|
3304 this.swallowEvent("selectstart", true);
|
rlm@46
|
3305 this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
|
rlm@46
|
3306 this.addClass("x-unselectable");
|
rlm@46
|
3307 return this;
|
rlm@46
|
3308 },
|
rlm@46
|
3309
|
rlm@46
|
3310
|
rlm@46
|
3311 getCenterXY : function(){
|
rlm@46
|
3312 return this.getAlignToXY(document, 'c-c');
|
rlm@46
|
3313 },
|
rlm@46
|
3314
|
rlm@46
|
3315
|
rlm@46
|
3316 center : function(centerIn){
|
rlm@46
|
3317 this.alignTo(centerIn || document, 'c-c');
|
rlm@46
|
3318 return this;
|
rlm@46
|
3319 },
|
rlm@46
|
3320
|
rlm@46
|
3321
|
rlm@46
|
3322 isBorderBox : function(){
|
rlm@46
|
3323 return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox;
|
rlm@46
|
3324 },
|
rlm@46
|
3325
|
rlm@46
|
3326
|
rlm@46
|
3327 getBox : function(contentBox, local){
|
rlm@46
|
3328 var xy;
|
rlm@46
|
3329 if(!local){
|
rlm@46
|
3330 xy = this.getXY();
|
rlm@46
|
3331 }else{
|
rlm@46
|
3332 var left = parseInt(this.getStyle("left"), 10) || 0;
|
rlm@46
|
3333 var top = parseInt(this.getStyle("top"), 10) || 0;
|
rlm@46
|
3334 xy = [left, top];
|
rlm@46
|
3335 }
|
rlm@46
|
3336 var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
|
rlm@46
|
3337 if(!contentBox){
|
rlm@46
|
3338 bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
|
rlm@46
|
3339 }else{
|
rlm@46
|
3340 var l = this.getBorderWidth("l")+this.getPadding("l");
|
rlm@46
|
3341 var r = this.getBorderWidth("r")+this.getPadding("r");
|
rlm@46
|
3342 var t = this.getBorderWidth("t")+this.getPadding("t");
|
rlm@46
|
3343 var b = this.getBorderWidth("b")+this.getPadding("b");
|
rlm@46
|
3344 bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
|
rlm@46
|
3345 }
|
rlm@46
|
3346 bx.right = bx.x + bx.width;
|
rlm@46
|
3347 bx.bottom = bx.y + bx.height;
|
rlm@46
|
3348 return bx;
|
rlm@46
|
3349 },
|
rlm@46
|
3350
|
rlm@46
|
3351
|
rlm@46
|
3352 getFrameWidth : function(sides, onlyContentBox){
|
rlm@46
|
3353 return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
|
rlm@46
|
3354 },
|
rlm@46
|
3355
|
rlm@46
|
3356
|
rlm@46
|
3357 setBox : function(box, adjust, animate){
|
rlm@46
|
3358 var w = box.width, h = box.height;
|
rlm@46
|
3359 if((adjust && !this.autoBoxAdjust) && !this.isBorderBox()){
|
rlm@46
|
3360 w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
|
rlm@46
|
3361 h -= (this.getBorderWidth("tb") + this.getPadding("tb"));
|
rlm@46
|
3362 }
|
rlm@46
|
3363 this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2));
|
rlm@46
|
3364 return this;
|
rlm@46
|
3365 },
|
rlm@46
|
3366
|
rlm@46
|
3367
|
rlm@46
|
3368 repaint : function(){
|
rlm@46
|
3369 var dom = this.dom;
|
rlm@46
|
3370 this.addClass("x-repaint");
|
rlm@46
|
3371 setTimeout(function(){
|
rlm@46
|
3372 Ext.get(dom).removeClass("x-repaint");
|
rlm@46
|
3373 }, 1);
|
rlm@46
|
3374 return this;
|
rlm@46
|
3375 },
|
rlm@46
|
3376
|
rlm@46
|
3377
|
rlm@46
|
3378 getMargins : function(side){
|
rlm@46
|
3379 if(!side){
|
rlm@46
|
3380 return {
|
rlm@46
|
3381 top: parseInt(this.getStyle("margin-top"), 10) || 0,
|
rlm@46
|
3382 left: parseInt(this.getStyle("margin-left"), 10) || 0,
|
rlm@46
|
3383 bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0,
|
rlm@46
|
3384 right: parseInt(this.getStyle("margin-right"), 10) || 0
|
rlm@46
|
3385 };
|
rlm@46
|
3386 }else{
|
rlm@46
|
3387 return this.addStyles(side, El.margins);
|
rlm@46
|
3388 }
|
rlm@46
|
3389 },
|
rlm@46
|
3390
|
rlm@46
|
3391 addStyles : function(sides, styles){
|
rlm@46
|
3392 var val = 0, v, w;
|
rlm@46
|
3393 for(var i = 0, len = sides.length; i < len; i++){
|
rlm@46
|
3394 v = this.getStyle(styles[sides.charAt(i)]);
|
rlm@46
|
3395 if(v){
|
rlm@46
|
3396 w = parseInt(v, 10);
|
rlm@46
|
3397 if(w){ val += (w >= 0 ? w : -1 * w); }
|
rlm@46
|
3398 }
|
rlm@46
|
3399 }
|
rlm@46
|
3400 return val;
|
rlm@46
|
3401 },
|
rlm@46
|
3402
|
rlm@46
|
3403
|
rlm@46
|
3404 createProxy : function(config, renderTo, matchBox){
|
rlm@46
|
3405 config = typeof config == "object" ?
|
rlm@46
|
3406 config : {tag : "div", cls: config};
|
rlm@46
|
3407
|
rlm@46
|
3408 var proxy;
|
rlm@46
|
3409 if(renderTo){
|
rlm@46
|
3410 proxy = Ext.DomHelper.append(renderTo, config, true);
|
rlm@46
|
3411 }else {
|
rlm@46
|
3412 proxy = Ext.DomHelper.insertBefore(this.dom, config, true);
|
rlm@46
|
3413 }
|
rlm@46
|
3414 if(matchBox){
|
rlm@46
|
3415 proxy.setBox(this.getBox());
|
rlm@46
|
3416 }
|
rlm@46
|
3417 return proxy;
|
rlm@46
|
3418 },
|
rlm@46
|
3419
|
rlm@46
|
3420
|
rlm@46
|
3421 mask : function(msg, msgCls){
|
rlm@46
|
3422 if(this.getStyle("position") == "static"){
|
rlm@46
|
3423 this.setStyle("position", "relative");
|
rlm@46
|
3424 }
|
rlm@46
|
3425 if(this._maskMsg){
|
rlm@46
|
3426 this._maskMsg.remove();
|
rlm@46
|
3427 }
|
rlm@46
|
3428 if(this._mask){
|
rlm@46
|
3429 this._mask.remove();
|
rlm@46
|
3430 }
|
rlm@46
|
3431
|
rlm@46
|
3432 this._mask = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask"}, true);
|
rlm@46
|
3433
|
rlm@46
|
3434 this.addClass("x-masked");
|
rlm@46
|
3435 this._mask.setDisplayed(true);
|
rlm@46
|
3436 if(typeof msg == 'string'){
|
rlm@46
|
3437 this._maskMsg = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask-msg", cn:{tag:'div'}}, true);
|
rlm@46
|
3438 var mm = this._maskMsg;
|
rlm@46
|
3439 mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";
|
rlm@46
|
3440 mm.dom.firstChild.innerHTML = msg;
|
rlm@46
|
3441 mm.setDisplayed(true);
|
rlm@46
|
3442 mm.center(this);
|
rlm@46
|
3443 }
|
rlm@46
|
3444 if(Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && this.getStyle('height') == 'auto'){ this._mask.setSize(this.dom.clientWidth, this.getHeight());
|
rlm@46
|
3445 }
|
rlm@46
|
3446 return this._mask;
|
rlm@46
|
3447 },
|
rlm@46
|
3448
|
rlm@46
|
3449
|
rlm@46
|
3450 unmask : function(){
|
rlm@46
|
3451 if(this._mask){
|
rlm@46
|
3452 if(this._maskMsg){
|
rlm@46
|
3453 this._maskMsg.remove();
|
rlm@46
|
3454 delete this._maskMsg;
|
rlm@46
|
3455 }
|
rlm@46
|
3456 this._mask.remove();
|
rlm@46
|
3457 delete this._mask;
|
rlm@46
|
3458 }
|
rlm@46
|
3459 this.removeClass("x-masked");
|
rlm@46
|
3460 },
|
rlm@46
|
3461
|
rlm@46
|
3462
|
rlm@46
|
3463 isMasked : function(){
|
rlm@46
|
3464 return this._mask && this._mask.isVisible();
|
rlm@46
|
3465 },
|
rlm@46
|
3466
|
rlm@46
|
3467
|
rlm@46
|
3468 createShim : function(){
|
rlm@46
|
3469 var el = document.createElement('iframe');
|
rlm@46
|
3470 el.frameBorder = 'no';
|
rlm@46
|
3471 el.className = 'ext-shim';
|
rlm@46
|
3472 if(Ext.isIE && Ext.isSecure){
|
rlm@46
|
3473 el.src = Ext.SSL_SECURE_URL;
|
rlm@46
|
3474 }
|
rlm@46
|
3475 var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));
|
rlm@46
|
3476 shim.autoBoxAdjust = false;
|
rlm@46
|
3477 return shim;
|
rlm@46
|
3478 },
|
rlm@46
|
3479
|
rlm@46
|
3480
|
rlm@46
|
3481 remove : function(){
|
rlm@46
|
3482 Ext.removeNode(this.dom);
|
rlm@46
|
3483 delete El.cache[this.dom.id];
|
rlm@46
|
3484 },
|
rlm@46
|
3485
|
rlm@46
|
3486
|
rlm@46
|
3487 hover : function(overFn, outFn, scope){
|
rlm@46
|
3488 var preOverFn = function(e){
|
rlm@46
|
3489 if(!e.within(this, true)){
|
rlm@46
|
3490 overFn.apply(scope || this, arguments);
|
rlm@46
|
3491 }
|
rlm@46
|
3492 };
|
rlm@46
|
3493 var preOutFn = function(e){
|
rlm@46
|
3494 if(!e.within(this, true)){
|
rlm@46
|
3495 outFn.apply(scope || this, arguments);
|
rlm@46
|
3496 }
|
rlm@46
|
3497 };
|
rlm@46
|
3498 this.on("mouseover", preOverFn, this.dom);
|
rlm@46
|
3499 this.on("mouseout", preOutFn, this.dom);
|
rlm@46
|
3500 return this;
|
rlm@46
|
3501 },
|
rlm@46
|
3502
|
rlm@46
|
3503
|
rlm@46
|
3504 addClassOnOver : function(className){
|
rlm@46
|
3505 this.hover(
|
rlm@46
|
3506 function(){
|
rlm@46
|
3507 Ext.fly(this, '_internal').addClass(className);
|
rlm@46
|
3508 },
|
rlm@46
|
3509 function(){
|
rlm@46
|
3510 Ext.fly(this, '_internal').removeClass(className);
|
rlm@46
|
3511 }
|
rlm@46
|
3512 );
|
rlm@46
|
3513 return this;
|
rlm@46
|
3514 },
|
rlm@46
|
3515
|
rlm@46
|
3516
|
rlm@46
|
3517 addClassOnFocus : function(className){
|
rlm@46
|
3518 this.on("focus", function(){
|
rlm@46
|
3519 Ext.fly(this, '_internal').addClass(className);
|
rlm@46
|
3520 }, this.dom);
|
rlm@46
|
3521 this.on("blur", function(){
|
rlm@46
|
3522 Ext.fly(this, '_internal').removeClass(className);
|
rlm@46
|
3523 }, this.dom);
|
rlm@46
|
3524 return this;
|
rlm@46
|
3525 },
|
rlm@46
|
3526
|
rlm@46
|
3527 addClassOnClick : function(className){
|
rlm@46
|
3528 var dom = this.dom;
|
rlm@46
|
3529 this.on("mousedown", function(){
|
rlm@46
|
3530 Ext.fly(dom, '_internal').addClass(className);
|
rlm@46
|
3531 var d = Ext.getDoc();
|
rlm@46
|
3532 var fn = function(){
|
rlm@46
|
3533 Ext.fly(dom, '_internal').removeClass(className);
|
rlm@46
|
3534 d.removeListener("mouseup", fn);
|
rlm@46
|
3535 };
|
rlm@46
|
3536 d.on("mouseup", fn);
|
rlm@46
|
3537 });
|
rlm@46
|
3538 return this;
|
rlm@46
|
3539 },
|
rlm@46
|
3540
|
rlm@46
|
3541
|
rlm@46
|
3542 swallowEvent : function(eventName, preventDefault){
|
rlm@46
|
3543 var fn = function(e){
|
rlm@46
|
3544 e.stopPropagation();
|
rlm@46
|
3545 if(preventDefault){
|
rlm@46
|
3546 e.preventDefault();
|
rlm@46
|
3547 }
|
rlm@46
|
3548 };
|
rlm@46
|
3549 if(Ext.isArray(eventName)){
|
rlm@46
|
3550 for(var i = 0, len = eventName.length; i < len; i++){
|
rlm@46
|
3551 this.on(eventName[i], fn);
|
rlm@46
|
3552 }
|
rlm@46
|
3553 return this;
|
rlm@46
|
3554 }
|
rlm@46
|
3555 this.on(eventName, fn);
|
rlm@46
|
3556 return this;
|
rlm@46
|
3557 },
|
rlm@46
|
3558
|
rlm@46
|
3559
|
rlm@46
|
3560 parent : function(selector, returnDom){
|
rlm@46
|
3561 return this.matchNode('parentNode', 'parentNode', selector, returnDom);
|
rlm@46
|
3562 },
|
rlm@46
|
3563
|
rlm@46
|
3564
|
rlm@46
|
3565 next : function(selector, returnDom){
|
rlm@46
|
3566 return this.matchNode('nextSibling', 'nextSibling', selector, returnDom);
|
rlm@46
|
3567 },
|
rlm@46
|
3568
|
rlm@46
|
3569
|
rlm@46
|
3570 prev : function(selector, returnDom){
|
rlm@46
|
3571 return this.matchNode('previousSibling', 'previousSibling', selector, returnDom);
|
rlm@46
|
3572 },
|
rlm@46
|
3573
|
rlm@46
|
3574
|
rlm@46
|
3575
|
rlm@46
|
3576 first : function(selector, returnDom){
|
rlm@46
|
3577 return this.matchNode('nextSibling', 'firstChild', selector, returnDom);
|
rlm@46
|
3578 },
|
rlm@46
|
3579
|
rlm@46
|
3580
|
rlm@46
|
3581 last : function(selector, returnDom){
|
rlm@46
|
3582 return this.matchNode('previousSibling', 'lastChild', selector, returnDom);
|
rlm@46
|
3583 },
|
rlm@46
|
3584
|
rlm@46
|
3585 matchNode : function(dir, start, selector, returnDom){
|
rlm@46
|
3586 var n = this.dom[start];
|
rlm@46
|
3587 while(n){
|
rlm@46
|
3588 if(n.nodeType == 1 && (!selector || Ext.DomQuery.is(n, selector))){
|
rlm@46
|
3589 return !returnDom ? Ext.get(n) : n;
|
rlm@46
|
3590 }
|
rlm@46
|
3591 n = n[dir];
|
rlm@46
|
3592 }
|
rlm@46
|
3593 return null;
|
rlm@46
|
3594 },
|
rlm@46
|
3595
|
rlm@46
|
3596
|
rlm@46
|
3597 appendChild: function(el){
|
rlm@46
|
3598 el = Ext.get(el);
|
rlm@46
|
3599 el.appendTo(this);
|
rlm@46
|
3600 return this;
|
rlm@46
|
3601 },
|
rlm@46
|
3602
|
rlm@46
|
3603
|
rlm@46
|
3604 createChild: function(config, insertBefore, returnDom){
|
rlm@46
|
3605 config = config || {tag:'div'};
|
rlm@46
|
3606 if(insertBefore){
|
rlm@46
|
3607 return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true);
|
rlm@46
|
3608 }
|
rlm@46
|
3609 return Ext.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, config, returnDom !== true);
|
rlm@46
|
3610 },
|
rlm@46
|
3611
|
rlm@46
|
3612
|
rlm@46
|
3613 appendTo: function(el){
|
rlm@46
|
3614 el = Ext.getDom(el);
|
rlm@46
|
3615 el.appendChild(this.dom);
|
rlm@46
|
3616 return this;
|
rlm@46
|
3617 },
|
rlm@46
|
3618
|
rlm@46
|
3619
|
rlm@46
|
3620 insertBefore: function(el){
|
rlm@46
|
3621 el = Ext.getDom(el);
|
rlm@46
|
3622 el.parentNode.insertBefore(this.dom, el);
|
rlm@46
|
3623 return this;
|
rlm@46
|
3624 },
|
rlm@46
|
3625
|
rlm@46
|
3626
|
rlm@46
|
3627 insertAfter: function(el){
|
rlm@46
|
3628 el = Ext.getDom(el);
|
rlm@46
|
3629 el.parentNode.insertBefore(this.dom, el.nextSibling);
|
rlm@46
|
3630 return this;
|
rlm@46
|
3631 },
|
rlm@46
|
3632
|
rlm@46
|
3633
|
rlm@46
|
3634 insertFirst: function(el, returnDom){
|
rlm@46
|
3635 el = el || {};
|
rlm@46
|
3636 if(typeof el == 'object' && !el.nodeType && !el.dom){ return this.createChild(el, this.dom.firstChild, returnDom);
|
rlm@46
|
3637 }else{
|
rlm@46
|
3638 el = Ext.getDom(el);
|
rlm@46
|
3639 this.dom.insertBefore(el, this.dom.firstChild);
|
rlm@46
|
3640 return !returnDom ? Ext.get(el) : el;
|
rlm@46
|
3641 }
|
rlm@46
|
3642 },
|
rlm@46
|
3643
|
rlm@46
|
3644
|
rlm@46
|
3645 insertSibling: function(el, where, returnDom){
|
rlm@46
|
3646 var rt;
|
rlm@46
|
3647 if(Ext.isArray(el)){
|
rlm@46
|
3648 for(var i = 0, len = el.length; i < len; i++){
|
rlm@46
|
3649 rt = this.insertSibling(el[i], where, returnDom);
|
rlm@46
|
3650 }
|
rlm@46
|
3651 return rt;
|
rlm@46
|
3652 }
|
rlm@46
|
3653 where = where ? where.toLowerCase() : 'before';
|
rlm@46
|
3654 el = el || {};
|
rlm@46
|
3655 var refNode = where == 'before' ? this.dom : this.dom.nextSibling;
|
rlm@46
|
3656
|
rlm@46
|
3657 if(typeof el == 'object' && !el.nodeType && !el.dom){ if(where == 'after' && !this.dom.nextSibling){
|
rlm@46
|
3658 rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom);
|
rlm@46
|
3659 }else{
|
rlm@46
|
3660 rt = Ext.DomHelper[where == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !returnDom);
|
rlm@46
|
3661 }
|
rlm@46
|
3662
|
rlm@46
|
3663 }else{
|
rlm@46
|
3664 rt = this.dom.parentNode.insertBefore(Ext.getDom(el), refNode);
|
rlm@46
|
3665 if(!returnDom){
|
rlm@46
|
3666 rt = Ext.get(rt);
|
rlm@46
|
3667 }
|
rlm@46
|
3668 }
|
rlm@46
|
3669 return rt;
|
rlm@46
|
3670 },
|
rlm@46
|
3671
|
rlm@46
|
3672
|
rlm@46
|
3673 wrap: function(config, returnDom){
|
rlm@46
|
3674 if(!config){
|
rlm@46
|
3675 config = {tag: "div"};
|
rlm@46
|
3676 }
|
rlm@46
|
3677 var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom);
|
rlm@46
|
3678 newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom);
|
rlm@46
|
3679 return newEl;
|
rlm@46
|
3680 },
|
rlm@46
|
3681
|
rlm@46
|
3682
|
rlm@46
|
3683 replace: function(el){
|
rlm@46
|
3684 el = Ext.get(el);
|
rlm@46
|
3685 this.insertBefore(el);
|
rlm@46
|
3686 el.remove();
|
rlm@46
|
3687 return this;
|
rlm@46
|
3688 },
|
rlm@46
|
3689
|
rlm@46
|
3690
|
rlm@46
|
3691 replaceWith: function(el){
|
rlm@46
|
3692 if(typeof el == 'object' && !el.nodeType && !el.dom){ el = this.insertSibling(el, 'before');
|
rlm@46
|
3693 }else{
|
rlm@46
|
3694 el = Ext.getDom(el);
|
rlm@46
|
3695 this.dom.parentNode.insertBefore(el, this.dom);
|
rlm@46
|
3696 }
|
rlm@46
|
3697 El.uncache(this.id);
|
rlm@46
|
3698 this.dom.parentNode.removeChild(this.dom);
|
rlm@46
|
3699 this.dom = el;
|
rlm@46
|
3700 this.id = Ext.id(el);
|
rlm@46
|
3701 El.cache[this.id] = this;
|
rlm@46
|
3702 return this;
|
rlm@46
|
3703 },
|
rlm@46
|
3704
|
rlm@46
|
3705
|
rlm@46
|
3706 insertHtml : function(where, html, returnEl){
|
rlm@46
|
3707 var el = Ext.DomHelper.insertHtml(where, this.dom, html);
|
rlm@46
|
3708 return returnEl ? Ext.get(el) : el;
|
rlm@46
|
3709 },
|
rlm@46
|
3710
|
rlm@46
|
3711
|
rlm@46
|
3712 set : function(o, useSet){
|
rlm@46
|
3713 var el = this.dom;
|
rlm@46
|
3714 useSet = typeof useSet == 'undefined' ? (el.setAttribute ? true : false) : useSet;
|
rlm@46
|
3715 for(var attr in o){
|
rlm@46
|
3716 if(attr == "style" || typeof o[attr] == "function") continue;
|
rlm@46
|
3717 if(attr=="cls"){
|
rlm@46
|
3718 el.className = o["cls"];
|
rlm@46
|
3719 }else if(o.hasOwnProperty(attr)){
|
rlm@46
|
3720 if(useSet) el.setAttribute(attr, o[attr]);
|
rlm@46
|
3721 else el[attr] = o[attr];
|
rlm@46
|
3722 }
|
rlm@46
|
3723 }
|
rlm@46
|
3724 if(o.style){
|
rlm@46
|
3725 Ext.DomHelper.applyStyles(el, o.style);
|
rlm@46
|
3726 }
|
rlm@46
|
3727 return this;
|
rlm@46
|
3728 },
|
rlm@46
|
3729
|
rlm@46
|
3730
|
rlm@46
|
3731 addKeyListener : function(key, fn, scope){
|
rlm@46
|
3732 var config;
|
rlm@46
|
3733 if(typeof key != "object" || Ext.isArray(key)){
|
rlm@46
|
3734 config = {
|
rlm@46
|
3735 key: key,
|
rlm@46
|
3736 fn: fn,
|
rlm@46
|
3737 scope: scope
|
rlm@46
|
3738 };
|
rlm@46
|
3739 }else{
|
rlm@46
|
3740 config = {
|
rlm@46
|
3741 key : key.key,
|
rlm@46
|
3742 shift : key.shift,
|
rlm@46
|
3743 ctrl : key.ctrl,
|
rlm@46
|
3744 alt : key.alt,
|
rlm@46
|
3745 fn: fn,
|
rlm@46
|
3746 scope: scope
|
rlm@46
|
3747 };
|
rlm@46
|
3748 }
|
rlm@46
|
3749 return new Ext.KeyMap(this, config);
|
rlm@46
|
3750 },
|
rlm@46
|
3751
|
rlm@46
|
3752
|
rlm@46
|
3753 addKeyMap : function(config){
|
rlm@46
|
3754 return new Ext.KeyMap(this, config);
|
rlm@46
|
3755 },
|
rlm@46
|
3756
|
rlm@46
|
3757
|
rlm@46
|
3758 isScrollable : function(){
|
rlm@46
|
3759 var dom = this.dom;
|
rlm@46
|
3760 return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth;
|
rlm@46
|
3761 },
|
rlm@46
|
3762
|
rlm@46
|
3763
|
rlm@46
|
3764 scrollTo : function(side, value, animate){
|
rlm@46
|
3765 var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
|
rlm@46
|
3766 if(!animate || !A){
|
rlm@46
|
3767 this.dom[prop] = value;
|
rlm@46
|
3768 }else{
|
rlm@46
|
3769 var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value];
|
rlm@46
|
3770 this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll');
|
rlm@46
|
3771 }
|
rlm@46
|
3772 return this;
|
rlm@46
|
3773 },
|
rlm@46
|
3774
|
rlm@46
|
3775
|
rlm@46
|
3776 scroll : function(direction, distance, animate){
|
rlm@46
|
3777 if(!this.isScrollable()){
|
rlm@46
|
3778 return;
|
rlm@46
|
3779 }
|
rlm@46
|
3780 var el = this.dom;
|
rlm@46
|
3781 var l = el.scrollLeft, t = el.scrollTop;
|
rlm@46
|
3782 var w = el.scrollWidth, h = el.scrollHeight;
|
rlm@46
|
3783 var cw = el.clientWidth, ch = el.clientHeight;
|
rlm@46
|
3784 direction = direction.toLowerCase();
|
rlm@46
|
3785 var scrolled = false;
|
rlm@46
|
3786 var a = this.preanim(arguments, 2);
|
rlm@46
|
3787 switch(direction){
|
rlm@46
|
3788 case "l":
|
rlm@46
|
3789 case "left":
|
rlm@46
|
3790 if(w - l > cw){
|
rlm@46
|
3791 var v = Math.min(l + distance, w-cw);
|
rlm@46
|
3792 this.scrollTo("left", v, a);
|
rlm@46
|
3793 scrolled = true;
|
rlm@46
|
3794 }
|
rlm@46
|
3795 break;
|
rlm@46
|
3796 case "r":
|
rlm@46
|
3797 case "right":
|
rlm@46
|
3798 if(l > 0){
|
rlm@46
|
3799 var v = Math.max(l - distance, 0);
|
rlm@46
|
3800 this.scrollTo("left", v, a);
|
rlm@46
|
3801 scrolled = true;
|
rlm@46
|
3802 }
|
rlm@46
|
3803 break;
|
rlm@46
|
3804 case "t":
|
rlm@46
|
3805 case "top":
|
rlm@46
|
3806 case "up":
|
rlm@46
|
3807 if(t > 0){
|
rlm@46
|
3808 var v = Math.max(t - distance, 0);
|
rlm@46
|
3809 this.scrollTo("top", v, a);
|
rlm@46
|
3810 scrolled = true;
|
rlm@46
|
3811 }
|
rlm@46
|
3812 break;
|
rlm@46
|
3813 case "b":
|
rlm@46
|
3814 case "bottom":
|
rlm@46
|
3815 case "down":
|
rlm@46
|
3816 if(h - t > ch){
|
rlm@46
|
3817 var v = Math.min(t + distance, h-ch);
|
rlm@46
|
3818 this.scrollTo("top", v, a);
|
rlm@46
|
3819 scrolled = true;
|
rlm@46
|
3820 }
|
rlm@46
|
3821 break;
|
rlm@46
|
3822 }
|
rlm@46
|
3823 return scrolled;
|
rlm@46
|
3824 },
|
rlm@46
|
3825
|
rlm@46
|
3826
|
rlm@46
|
3827 translatePoints : function(x, y){
|
rlm@46
|
3828 if(typeof x == 'object' || Ext.isArray(x)){
|
rlm@46
|
3829 y = x[1]; x = x[0];
|
rlm@46
|
3830 }
|
rlm@46
|
3831 var p = this.getStyle('position');
|
rlm@46
|
3832 var o = this.getXY();
|
rlm@46
|
3833
|
rlm@46
|
3834 var l = parseInt(this.getStyle('left'), 10);
|
rlm@46
|
3835 var t = parseInt(this.getStyle('top'), 10);
|
rlm@46
|
3836
|
rlm@46
|
3837 if(isNaN(l)){
|
rlm@46
|
3838 l = (p == "relative") ? 0 : this.dom.offsetLeft;
|
rlm@46
|
3839 }
|
rlm@46
|
3840 if(isNaN(t)){
|
rlm@46
|
3841 t = (p == "relative") ? 0 : this.dom.offsetTop;
|
rlm@46
|
3842 }
|
rlm@46
|
3843
|
rlm@46
|
3844 return {left: (x - o[0] + l), top: (y - o[1] + t)};
|
rlm@46
|
3845 },
|
rlm@46
|
3846
|
rlm@46
|
3847
|
rlm@46
|
3848 getScroll : function(){
|
rlm@46
|
3849 var d = this.dom, doc = document;
|
rlm@46
|
3850 if(d == doc || d == doc.body){
|
rlm@46
|
3851 var l, t;
|
rlm@46
|
3852 if(Ext.isIE && Ext.isStrict){
|
rlm@46
|
3853 l = doc.documentElement.scrollLeft || (doc.body.scrollLeft || 0);
|
rlm@46
|
3854 t = doc.documentElement.scrollTop || (doc.body.scrollTop || 0);
|
rlm@46
|
3855 }else{
|
rlm@46
|
3856 l = window.pageXOffset || (doc.body.scrollLeft || 0);
|
rlm@46
|
3857 t = window.pageYOffset || (doc.body.scrollTop || 0);
|
rlm@46
|
3858 }
|
rlm@46
|
3859 return {left: l, top: t};
|
rlm@46
|
3860 }else{
|
rlm@46
|
3861 return {left: d.scrollLeft, top: d.scrollTop};
|
rlm@46
|
3862 }
|
rlm@46
|
3863 },
|
rlm@46
|
3864
|
rlm@46
|
3865
|
rlm@46
|
3866 getColor : function(attr, defaultValue, prefix){
|
rlm@46
|
3867 var v = this.getStyle(attr);
|
rlm@46
|
3868 if(!v || v == "transparent" || v == "inherit") {
|
rlm@46
|
3869 return defaultValue;
|
rlm@46
|
3870 }
|
rlm@46
|
3871 var color = typeof prefix == "undefined" ? "#" : prefix;
|
rlm@46
|
3872 if(v.substr(0, 4) == "rgb("){
|
rlm@46
|
3873 var rvs = v.slice(4, v.length -1).split(",");
|
rlm@46
|
3874 for(var i = 0; i < 3; i++){
|
rlm@46
|
3875 var h = parseInt(rvs[i]);
|
rlm@46
|
3876 var s = h.toString(16);
|
rlm@46
|
3877 if(h < 16){
|
rlm@46
|
3878 s = "0" + s;
|
rlm@46
|
3879 }
|
rlm@46
|
3880 color += s;
|
rlm@46
|
3881 }
|
rlm@46
|
3882 } else {
|
rlm@46
|
3883 if(v.substr(0, 1) == "#"){
|
rlm@46
|
3884 if(v.length == 4) {
|
rlm@46
|
3885 for(var i = 1; i < 4; i++){
|
rlm@46
|
3886 var c = v.charAt(i);
|
rlm@46
|
3887 color += c + c;
|
rlm@46
|
3888 }
|
rlm@46
|
3889 }else if(v.length == 7){
|
rlm@46
|
3890 color += v.substr(1);
|
rlm@46
|
3891 }
|
rlm@46
|
3892 }
|
rlm@46
|
3893 }
|
rlm@46
|
3894 return(color.length > 5 ? color.toLowerCase() : defaultValue);
|
rlm@46
|
3895 },
|
rlm@46
|
3896
|
rlm@46
|
3897
|
rlm@46
|
3898 boxWrap : function(cls){
|
rlm@46
|
3899 cls = cls || 'x-box';
|
rlm@46
|
3900 var el = Ext.get(this.insertHtml('beforeBegin', String.format('<div class="{0}">'+El.boxMarkup+'</div>', cls)));
|
rlm@46
|
3901 el.child('.'+cls+'-mc').dom.appendChild(this.dom);
|
rlm@46
|
3902 return el;
|
rlm@46
|
3903 },
|
rlm@46
|
3904
|
rlm@46
|
3905
|
rlm@46
|
3906 getAttributeNS : Ext.isIE ? function(ns, name){
|
rlm@46
|
3907 var d = this.dom;
|
rlm@46
|
3908 var type = typeof d[ns+":"+name];
|
rlm@46
|
3909 if(type != 'undefined' && type != 'unknown'){
|
rlm@46
|
3910 return d[ns+":"+name];
|
rlm@46
|
3911 }
|
rlm@46
|
3912 return d[name];
|
rlm@46
|
3913 } : function(ns, name){
|
rlm@46
|
3914 var d = this.dom;
|
rlm@46
|
3915 return d.getAttributeNS(ns, name) || d.getAttribute(ns+":"+name) || d.getAttribute(name) || d[name];
|
rlm@46
|
3916 },
|
rlm@46
|
3917
|
rlm@46
|
3918 getTextWidth : function(text, min, max){
|
rlm@46
|
3919 return (Ext.util.TextMetrics.measure(this.dom, Ext.value(text, this.dom.innerHTML, true)).width).constrain(min || 0, max || 1000000);
|
rlm@46
|
3920 }
|
rlm@46
|
3921 };
|
rlm@46
|
3922
|
rlm@46
|
3923 var ep = El.prototype;
|
rlm@46
|
3924
|
rlm@46
|
3925
|
rlm@46
|
3926 ep.on = ep.addListener;
|
rlm@46
|
3927 ep.mon = ep.addListener;
|
rlm@46
|
3928
|
rlm@46
|
3929 ep.getUpdateManager = ep.getUpdater;
|
rlm@46
|
3930
|
rlm@46
|
3931
|
rlm@46
|
3932 ep.un = ep.removeListener;
|
rlm@46
|
3933
|
rlm@46
|
3934
|
rlm@46
|
3935 ep.autoBoxAdjust = true;
|
rlm@46
|
3936
|
rlm@46
|
3937 El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
|
rlm@46
|
3938
|
rlm@46
|
3939 El.addUnits = function(v, defaultUnit){
|
rlm@46
|
3940 if(v === "" || v == "auto"){
|
rlm@46
|
3941 return v;
|
rlm@46
|
3942 }
|
rlm@46
|
3943 if(v === undefined){
|
rlm@46
|
3944 return '';
|
rlm@46
|
3945 }
|
rlm@46
|
3946 if(typeof v == "number" || !El.unitPattern.test(v)){
|
rlm@46
|
3947 return v + (defaultUnit || 'px');
|
rlm@46
|
3948 }
|
rlm@46
|
3949 return v;
|
rlm@46
|
3950 };
|
rlm@46
|
3951
|
rlm@46
|
3952 El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
|
rlm@46
|
3953
|
rlm@46
|
3954 El.VISIBILITY = 1;
|
rlm@46
|
3955
|
rlm@46
|
3956 El.DISPLAY = 2;
|
rlm@46
|
3957
|
rlm@46
|
3958 El.borders = {l: "border-left-width", r: "border-right-width", t: "border-top-width", b: "border-bottom-width"};
|
rlm@46
|
3959 El.paddings = {l: "padding-left", r: "padding-right", t: "padding-top", b: "padding-bottom"};
|
rlm@46
|
3960 El.margins = {l: "margin-left", r: "margin-right", t: "margin-top", b: "margin-bottom"};
|
rlm@46
|
3961
|
rlm@46
|
3962
|
rlm@46
|
3963
|
rlm@46
|
3964
|
rlm@46
|
3965 El.cache = {};
|
rlm@46
|
3966
|
rlm@46
|
3967 var docEl;
|
rlm@46
|
3968
|
rlm@46
|
3969
|
rlm@46
|
3970 El.get = function(el){
|
rlm@46
|
3971 var ex, elm, id;
|
rlm@46
|
3972 if(!el){ return null; }
|
rlm@46
|
3973 if(typeof el == "string"){ if(!(elm = document.getElementById(el))){
|
rlm@46
|
3974 return null;
|
rlm@46
|
3975 }
|
rlm@46
|
3976 if(ex = El.cache[el]){
|
rlm@46
|
3977 ex.dom = elm;
|
rlm@46
|
3978 }else{
|
rlm@46
|
3979 ex = El.cache[el] = new El(elm);
|
rlm@46
|
3980 }
|
rlm@46
|
3981 return ex;
|
rlm@46
|
3982 }else if(el.tagName){ if(!(id = el.id)){
|
rlm@46
|
3983 id = Ext.id(el);
|
rlm@46
|
3984 }
|
rlm@46
|
3985 if(ex = El.cache[id]){
|
rlm@46
|
3986 ex.dom = el;
|
rlm@46
|
3987 }else{
|
rlm@46
|
3988 ex = El.cache[id] = new El(el);
|
rlm@46
|
3989 }
|
rlm@46
|
3990 return ex;
|
rlm@46
|
3991 }else if(el instanceof El){
|
rlm@46
|
3992 if(el != docEl){
|
rlm@46
|
3993 el.dom = document.getElementById(el.id) || el.dom; El.cache[el.id] = el; }
|
rlm@46
|
3994 return el;
|
rlm@46
|
3995 }else if(el.isComposite){
|
rlm@46
|
3996 return el;
|
rlm@46
|
3997 }else if(Ext.isArray(el)){
|
rlm@46
|
3998 return El.select(el);
|
rlm@46
|
3999 }else if(el == document){
|
rlm@46
|
4000 if(!docEl){
|
rlm@46
|
4001 var f = function(){};
|
rlm@46
|
4002 f.prototype = El.prototype;
|
rlm@46
|
4003 docEl = new f();
|
rlm@46
|
4004 docEl.dom = document;
|
rlm@46
|
4005 }
|
rlm@46
|
4006 return docEl;
|
rlm@46
|
4007 }
|
rlm@46
|
4008 return null;
|
rlm@46
|
4009 };
|
rlm@46
|
4010
|
rlm@46
|
4011 El.uncache = function(el){
|
rlm@46
|
4012 for(var i = 0, a = arguments, len = a.length; i < len; i++) {
|
rlm@46
|
4013 if(a[i]){
|
rlm@46
|
4014 delete El.cache[a[i].id || a[i]];
|
rlm@46
|
4015 }
|
rlm@46
|
4016 }
|
rlm@46
|
4017 };
|
rlm@46
|
4018
|
rlm@46
|
4019 El.garbageCollect = function(){
|
rlm@46
|
4020 if(!Ext.enableGarbageCollector){
|
rlm@46
|
4021 clearInterval(El.collectorThread);
|
rlm@46
|
4022 return;
|
rlm@46
|
4023 }
|
rlm@46
|
4024 for(var eid in El.cache){
|
rlm@46
|
4025 var el = El.cache[eid], d = el.dom;
|
rlm@46
|
4026 if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){
|
rlm@46
|
4027 delete El.cache[eid];
|
rlm@46
|
4028 if(d && Ext.enableListenerCollection){
|
rlm@46
|
4029 E.purgeElement(d);
|
rlm@46
|
4030 }
|
rlm@46
|
4031 }
|
rlm@46
|
4032 }
|
rlm@46
|
4033 }
|
rlm@46
|
4034 El.collectorThreadId = setInterval(El.garbageCollect, 30000);
|
rlm@46
|
4035
|
rlm@46
|
4036 var flyFn = function(){};
|
rlm@46
|
4037 flyFn.prototype = El.prototype;
|
rlm@46
|
4038 var _cls = new flyFn();
|
rlm@46
|
4039
|
rlm@46
|
4040 El.Flyweight = function(dom){
|
rlm@46
|
4041 this.dom = dom;
|
rlm@46
|
4042 };
|
rlm@46
|
4043
|
rlm@46
|
4044 El.Flyweight.prototype = _cls;
|
rlm@46
|
4045 El.Flyweight.prototype.isFlyweight = true;
|
rlm@46
|
4046
|
rlm@46
|
4047 El._flyweights = {};
|
rlm@46
|
4048
|
rlm@46
|
4049 El.fly = function(el, named){
|
rlm@46
|
4050 named = named || '_global';
|
rlm@46
|
4051 el = Ext.getDom(el);
|
rlm@46
|
4052 if(!el){
|
rlm@46
|
4053 return null;
|
rlm@46
|
4054 }
|
rlm@46
|
4055 if(!El._flyweights[named]){
|
rlm@46
|
4056 El._flyweights[named] = new El.Flyweight();
|
rlm@46
|
4057 }
|
rlm@46
|
4058 El._flyweights[named].dom = el;
|
rlm@46
|
4059 return El._flyweights[named];
|
rlm@46
|
4060 };
|
rlm@46
|
4061
|
rlm@46
|
4062
|
rlm@46
|
4063 Ext.get = El.get;
|
rlm@46
|
4064
|
rlm@46
|
4065 Ext.fly = El.fly;
|
rlm@46
|
4066
|
rlm@46
|
4067 var noBoxAdjust = Ext.isStrict ? {
|
rlm@46
|
4068 select:1
|
rlm@46
|
4069 } : {
|
rlm@46
|
4070 input:1, select:1, textarea:1
|
rlm@46
|
4071 };
|
rlm@46
|
4072 if(Ext.isIE || Ext.isGecko){
|
rlm@46
|
4073 noBoxAdjust['button'] = 1;
|
rlm@46
|
4074 }
|
rlm@46
|
4075
|
rlm@46
|
4076
|
rlm@46
|
4077 Ext.EventManager.on(window, 'unload', function(){
|
rlm@46
|
4078 delete El.cache;
|
rlm@46
|
4079 delete El._flyweights;
|
rlm@46
|
4080 });
|
rlm@46
|
4081 })();
|
rlm@46
|
4082
|
rlm@46
|
4083 Ext.enableFx = true;
|
rlm@46
|
4084
|
rlm@46
|
4085
|
rlm@46
|
4086 Ext.Fx = {
|
rlm@46
|
4087
|
rlm@46
|
4088 slideIn : function(anchor, o){
|
rlm@46
|
4089 var el = this.getFxEl();
|
rlm@46
|
4090 o = o || {};
|
rlm@46
|
4091
|
rlm@46
|
4092 el.queueFx(o, function(){
|
rlm@46
|
4093
|
rlm@46
|
4094 anchor = anchor || "t";
|
rlm@46
|
4095
|
rlm@46
|
4096 this.fixDisplay();
|
rlm@46
|
4097
|
rlm@46
|
4098 var r = this.getFxRestore();
|
rlm@46
|
4099 var b = this.getBox();
|
rlm@46
|
4100 this.setSize(b);
|
rlm@46
|
4101
|
rlm@46
|
4102 var wrap = this.fxWrap(r.pos, o, "hidden");
|
rlm@46
|
4103
|
rlm@46
|
4104 var st = this.dom.style;
|
rlm@46
|
4105 st.visibility = "visible";
|
rlm@46
|
4106 st.position = "absolute";
|
rlm@46
|
4107
|
rlm@46
|
4108 var after = function(){
|
rlm@46
|
4109 el.fxUnwrap(wrap, r.pos, o);
|
rlm@46
|
4110 st.width = r.width;
|
rlm@46
|
4111 st.height = r.height;
|
rlm@46
|
4112 el.afterFx(o);
|
rlm@46
|
4113 };
|
rlm@46
|
4114 var a, pt = {to: [b.x, b.y]}, bw = {to: b.width}, bh = {to: b.height};
|
rlm@46
|
4115
|
rlm@46
|
4116 switch(anchor.toLowerCase()){
|
rlm@46
|
4117 case "t":
|
rlm@46
|
4118 wrap.setSize(b.width, 0);
|
rlm@46
|
4119 st.left = st.bottom = "0";
|
rlm@46
|
4120 a = {height: bh};
|
rlm@46
|
4121 break;
|
rlm@46
|
4122 case "l":
|
rlm@46
|
4123 wrap.setSize(0, b.height);
|
rlm@46
|
4124 st.right = st.top = "0";
|
rlm@46
|
4125 a = {width: bw};
|
rlm@46
|
4126 break;
|
rlm@46
|
4127 case "r":
|
rlm@46
|
4128 wrap.setSize(0, b.height);
|
rlm@46
|
4129 wrap.setX(b.right);
|
rlm@46
|
4130 st.left = st.top = "0";
|
rlm@46
|
4131 a = {width: bw, points: pt};
|
rlm@46
|
4132 break;
|
rlm@46
|
4133 case "b":
|
rlm@46
|
4134 wrap.setSize(b.width, 0);
|
rlm@46
|
4135 wrap.setY(b.bottom);
|
rlm@46
|
4136 st.left = st.top = "0";
|
rlm@46
|
4137 a = {height: bh, points: pt};
|
rlm@46
|
4138 break;
|
rlm@46
|
4139 case "tl":
|
rlm@46
|
4140 wrap.setSize(0, 0);
|
rlm@46
|
4141 st.right = st.bottom = "0";
|
rlm@46
|
4142 a = {width: bw, height: bh};
|
rlm@46
|
4143 break;
|
rlm@46
|
4144 case "bl":
|
rlm@46
|
4145 wrap.setSize(0, 0);
|
rlm@46
|
4146 wrap.setY(b.y+b.height);
|
rlm@46
|
4147 st.right = st.top = "0";
|
rlm@46
|
4148 a = {width: bw, height: bh, points: pt};
|
rlm@46
|
4149 break;
|
rlm@46
|
4150 case "br":
|
rlm@46
|
4151 wrap.setSize(0, 0);
|
rlm@46
|
4152 wrap.setXY([b.right, b.bottom]);
|
rlm@46
|
4153 st.left = st.top = "0";
|
rlm@46
|
4154 a = {width: bw, height: bh, points: pt};
|
rlm@46
|
4155 break;
|
rlm@46
|
4156 case "tr":
|
rlm@46
|
4157 wrap.setSize(0, 0);
|
rlm@46
|
4158 wrap.setX(b.x+b.width);
|
rlm@46
|
4159 st.left = st.bottom = "0";
|
rlm@46
|
4160 a = {width: bw, height: bh, points: pt};
|
rlm@46
|
4161 break;
|
rlm@46
|
4162 }
|
rlm@46
|
4163 this.dom.style.visibility = "visible";
|
rlm@46
|
4164 wrap.show();
|
rlm@46
|
4165
|
rlm@46
|
4166 arguments.callee.anim = wrap.fxanim(a,
|
rlm@46
|
4167 o,
|
rlm@46
|
4168 'motion',
|
rlm@46
|
4169 .5,
|
rlm@46
|
4170 'easeOut', after);
|
rlm@46
|
4171 });
|
rlm@46
|
4172 return this;
|
rlm@46
|
4173 },
|
rlm@46
|
4174
|
rlm@46
|
4175
|
rlm@46
|
4176 slideOut : function(anchor, o){
|
rlm@46
|
4177 var el = this.getFxEl();
|
rlm@46
|
4178 o = o || {};
|
rlm@46
|
4179
|
rlm@46
|
4180 el.queueFx(o, function(){
|
rlm@46
|
4181
|
rlm@46
|
4182 anchor = anchor || "t";
|
rlm@46
|
4183
|
rlm@46
|
4184 var r = this.getFxRestore();
|
rlm@46
|
4185
|
rlm@46
|
4186 var b = this.getBox();
|
rlm@46
|
4187 this.setSize(b);
|
rlm@46
|
4188
|
rlm@46
|
4189 var wrap = this.fxWrap(r.pos, o, "visible");
|
rlm@46
|
4190
|
rlm@46
|
4191 var st = this.dom.style;
|
rlm@46
|
4192 st.visibility = "visible";
|
rlm@46
|
4193 st.position = "absolute";
|
rlm@46
|
4194
|
rlm@46
|
4195 wrap.setSize(b);
|
rlm@46
|
4196
|
rlm@46
|
4197 var after = function(){
|
rlm@46
|
4198 if(o.useDisplay){
|
rlm@46
|
4199 el.setDisplayed(false);
|
rlm@46
|
4200 }else{
|
rlm@46
|
4201 el.hide();
|
rlm@46
|
4202 }
|
rlm@46
|
4203
|
rlm@46
|
4204 el.fxUnwrap(wrap, r.pos, o);
|
rlm@46
|
4205
|
rlm@46
|
4206 st.width = r.width;
|
rlm@46
|
4207 st.height = r.height;
|
rlm@46
|
4208
|
rlm@46
|
4209 el.afterFx(o);
|
rlm@46
|
4210 };
|
rlm@46
|
4211
|
rlm@46
|
4212 var a, zero = {to: 0};
|
rlm@46
|
4213 switch(anchor.toLowerCase()){
|
rlm@46
|
4214 case "t":
|
rlm@46
|
4215 st.left = st.bottom = "0";
|
rlm@46
|
4216 a = {height: zero};
|
rlm@46
|
4217 break;
|
rlm@46
|
4218 case "l":
|
rlm@46
|
4219 st.right = st.top = "0";
|
rlm@46
|
4220 a = {width: zero};
|
rlm@46
|
4221 break;
|
rlm@46
|
4222 case "r":
|
rlm@46
|
4223 st.left = st.top = "0";
|
rlm@46
|
4224 a = {width: zero, points: {to:[b.right, b.y]}};
|
rlm@46
|
4225 break;
|
rlm@46
|
4226 case "b":
|
rlm@46
|
4227 st.left = st.top = "0";
|
rlm@46
|
4228 a = {height: zero, points: {to:[b.x, b.bottom]}};
|
rlm@46
|
4229 break;
|
rlm@46
|
4230 case "tl":
|
rlm@46
|
4231 st.right = st.bottom = "0";
|
rlm@46
|
4232 a = {width: zero, height: zero};
|
rlm@46
|
4233 break;
|
rlm@46
|
4234 case "bl":
|
rlm@46
|
4235 st.right = st.top = "0";
|
rlm@46
|
4236 a = {width: zero, height: zero, points: {to:[b.x, b.bottom]}};
|
rlm@46
|
4237 break;
|
rlm@46
|
4238 case "br":
|
rlm@46
|
4239 st.left = st.top = "0";
|
rlm@46
|
4240 a = {width: zero, height: zero, points: {to:[b.x+b.width, b.bottom]}};
|
rlm@46
|
4241 break;
|
rlm@46
|
4242 case "tr":
|
rlm@46
|
4243 st.left = st.bottom = "0";
|
rlm@46
|
4244 a = {width: zero, height: zero, points: {to:[b.right, b.y]}};
|
rlm@46
|
4245 break;
|
rlm@46
|
4246 }
|
rlm@46
|
4247
|
rlm@46
|
4248 arguments.callee.anim = wrap.fxanim(a,
|
rlm@46
|
4249 o,
|
rlm@46
|
4250 'motion',
|
rlm@46
|
4251 .5,
|
rlm@46
|
4252 "easeOut", after);
|
rlm@46
|
4253 });
|
rlm@46
|
4254 return this;
|
rlm@46
|
4255 },
|
rlm@46
|
4256
|
rlm@46
|
4257
|
rlm@46
|
4258 puff : function(o){
|
rlm@46
|
4259 var el = this.getFxEl();
|
rlm@46
|
4260 o = o || {};
|
rlm@46
|
4261
|
rlm@46
|
4262 el.queueFx(o, function(){
|
rlm@46
|
4263 this.clearOpacity();
|
rlm@46
|
4264 this.show();
|
rlm@46
|
4265
|
rlm@46
|
4266 var r = this.getFxRestore();
|
rlm@46
|
4267 var st = this.dom.style;
|
rlm@46
|
4268
|
rlm@46
|
4269 var after = function(){
|
rlm@46
|
4270 if(o.useDisplay){
|
rlm@46
|
4271 el.setDisplayed(false);
|
rlm@46
|
4272 }else{
|
rlm@46
|
4273 el.hide();
|
rlm@46
|
4274 }
|
rlm@46
|
4275
|
rlm@46
|
4276 el.clearOpacity();
|
rlm@46
|
4277
|
rlm@46
|
4278 el.setPositioning(r.pos);
|
rlm@46
|
4279 st.width = r.width;
|
rlm@46
|
4280 st.height = r.height;
|
rlm@46
|
4281 st.fontSize = '';
|
rlm@46
|
4282 el.afterFx(o);
|
rlm@46
|
4283 };
|
rlm@46
|
4284
|
rlm@46
|
4285 var width = this.getWidth();
|
rlm@46
|
4286 var height = this.getHeight();
|
rlm@46
|
4287
|
rlm@46
|
4288 arguments.callee.anim = this.fxanim({
|
rlm@46
|
4289 width : {to: this.adjustWidth(width * 2)},
|
rlm@46
|
4290 height : {to: this.adjustHeight(height * 2)},
|
rlm@46
|
4291 points : {by: [-(width * .5), -(height * .5)]},
|
rlm@46
|
4292 opacity : {to: 0},
|
rlm@46
|
4293 fontSize: {to:200, unit: "%"}
|
rlm@46
|
4294 },
|
rlm@46
|
4295 o,
|
rlm@46
|
4296 'motion',
|
rlm@46
|
4297 .5,
|
rlm@46
|
4298 "easeOut", after);
|
rlm@46
|
4299 });
|
rlm@46
|
4300 return this;
|
rlm@46
|
4301 },
|
rlm@46
|
4302
|
rlm@46
|
4303
|
rlm@46
|
4304 switchOff : function(o){
|
rlm@46
|
4305 var el = this.getFxEl();
|
rlm@46
|
4306 o = o || {};
|
rlm@46
|
4307
|
rlm@46
|
4308 el.queueFx(o, function(){
|
rlm@46
|
4309 this.clearOpacity();
|
rlm@46
|
4310 this.clip();
|
rlm@46
|
4311
|
rlm@46
|
4312 var r = this.getFxRestore();
|
rlm@46
|
4313 var st = this.dom.style;
|
rlm@46
|
4314
|
rlm@46
|
4315 var after = function(){
|
rlm@46
|
4316 if(o.useDisplay){
|
rlm@46
|
4317 el.setDisplayed(false);
|
rlm@46
|
4318 }else{
|
rlm@46
|
4319 el.hide();
|
rlm@46
|
4320 }
|
rlm@46
|
4321
|
rlm@46
|
4322 el.clearOpacity();
|
rlm@46
|
4323 el.setPositioning(r.pos);
|
rlm@46
|
4324 st.width = r.width;
|
rlm@46
|
4325 st.height = r.height;
|
rlm@46
|
4326
|
rlm@46
|
4327 el.afterFx(o);
|
rlm@46
|
4328 };
|
rlm@46
|
4329
|
rlm@46
|
4330 this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){
|
rlm@46
|
4331 this.clearOpacity();
|
rlm@46
|
4332 (function(){
|
rlm@46
|
4333 this.fxanim({
|
rlm@46
|
4334 height:{to:1},
|
rlm@46
|
4335 points:{by:[0, this.getHeight() * .5]}
|
rlm@46
|
4336 }, o, 'motion', 0.3, 'easeIn', after);
|
rlm@46
|
4337 }).defer(100, this);
|
rlm@46
|
4338 });
|
rlm@46
|
4339 });
|
rlm@46
|
4340 return this;
|
rlm@46
|
4341 },
|
rlm@46
|
4342
|
rlm@46
|
4343
|
rlm@46
|
4344 highlight : function(color, o){
|
rlm@46
|
4345 var el = this.getFxEl();
|
rlm@46
|
4346 o = o || {};
|
rlm@46
|
4347
|
rlm@46
|
4348 el.queueFx(o, function(){
|
rlm@46
|
4349 color = color || "ffff9c";
|
rlm@46
|
4350 var attr = o.attr || "backgroundColor";
|
rlm@46
|
4351
|
rlm@46
|
4352 this.clearOpacity();
|
rlm@46
|
4353 this.show();
|
rlm@46
|
4354
|
rlm@46
|
4355 var origColor = this.getColor(attr);
|
rlm@46
|
4356 var restoreColor = this.dom.style[attr];
|
rlm@46
|
4357 var endColor = (o.endColor || origColor) || "ffffff";
|
rlm@46
|
4358
|
rlm@46
|
4359 var after = function(){
|
rlm@46
|
4360 el.dom.style[attr] = restoreColor;
|
rlm@46
|
4361 el.afterFx(o);
|
rlm@46
|
4362 };
|
rlm@46
|
4363
|
rlm@46
|
4364 var a = {};
|
rlm@46
|
4365 a[attr] = {from: color, to: endColor};
|
rlm@46
|
4366 arguments.callee.anim = this.fxanim(a,
|
rlm@46
|
4367 o,
|
rlm@46
|
4368 'color',
|
rlm@46
|
4369 1,
|
rlm@46
|
4370 'easeIn', after);
|
rlm@46
|
4371 });
|
rlm@46
|
4372 return this;
|
rlm@46
|
4373 },
|
rlm@46
|
4374
|
rlm@46
|
4375
|
rlm@46
|
4376 frame : function(color, count, o){
|
rlm@46
|
4377 var el = this.getFxEl();
|
rlm@46
|
4378 o = o || {};
|
rlm@46
|
4379
|
rlm@46
|
4380 el.queueFx(o, function(){
|
rlm@46
|
4381 color = color || "#C3DAF9";
|
rlm@46
|
4382 if(color.length == 6){
|
rlm@46
|
4383 color = "#" + color;
|
rlm@46
|
4384 }
|
rlm@46
|
4385 count = count || 1;
|
rlm@46
|
4386 var duration = o.duration || 1;
|
rlm@46
|
4387 this.show();
|
rlm@46
|
4388
|
rlm@46
|
4389 var b = this.getBox();
|
rlm@46
|
4390 var animFn = function(){
|
rlm@46
|
4391 var proxy = Ext.getBody().createChild({
|
rlm@46
|
4392 style:{
|
rlm@46
|
4393 visbility:"hidden",
|
rlm@46
|
4394 position:"absolute",
|
rlm@46
|
4395 "z-index":"35000", border:"0px solid " + color
|
rlm@46
|
4396 }
|
rlm@46
|
4397 });
|
rlm@46
|
4398 var scale = Ext.isBorderBox ? 2 : 1;
|
rlm@46
|
4399 proxy.animate({
|
rlm@46
|
4400 top:{from:b.y, to:b.y - 20},
|
rlm@46
|
4401 left:{from:b.x, to:b.x - 20},
|
rlm@46
|
4402 borderWidth:{from:0, to:10},
|
rlm@46
|
4403 opacity:{from:1, to:0},
|
rlm@46
|
4404 height:{from:b.height, to:(b.height + (20*scale))},
|
rlm@46
|
4405 width:{from:b.width, to:(b.width + (20*scale))}
|
rlm@46
|
4406 }, duration, function(){
|
rlm@46
|
4407 proxy.remove();
|
rlm@46
|
4408 if(--count > 0){
|
rlm@46
|
4409 animFn();
|
rlm@46
|
4410 }else{
|
rlm@46
|
4411 el.afterFx(o);
|
rlm@46
|
4412 }
|
rlm@46
|
4413 });
|
rlm@46
|
4414 };
|
rlm@46
|
4415 animFn.call(this);
|
rlm@46
|
4416 });
|
rlm@46
|
4417 return this;
|
rlm@46
|
4418 },
|
rlm@46
|
4419
|
rlm@46
|
4420
|
rlm@46
|
4421 pause : function(seconds){
|
rlm@46
|
4422 var el = this.getFxEl();
|
rlm@46
|
4423 var o = {};
|
rlm@46
|
4424
|
rlm@46
|
4425 el.queueFx(o, function(){
|
rlm@46
|
4426 setTimeout(function(){
|
rlm@46
|
4427 el.afterFx(o);
|
rlm@46
|
4428 }, seconds * 1000);
|
rlm@46
|
4429 });
|
rlm@46
|
4430 return this;
|
rlm@46
|
4431 },
|
rlm@46
|
4432
|
rlm@46
|
4433
|
rlm@46
|
4434 fadeIn : function(o){
|
rlm@46
|
4435 var el = this.getFxEl();
|
rlm@46
|
4436 o = o || {};
|
rlm@46
|
4437 el.queueFx(o, function(){
|
rlm@46
|
4438 this.setOpacity(0);
|
rlm@46
|
4439 this.fixDisplay();
|
rlm@46
|
4440 this.dom.style.visibility = 'visible';
|
rlm@46
|
4441 var to = o.endOpacity || 1;
|
rlm@46
|
4442 arguments.callee.anim = this.fxanim({opacity:{to:to}},
|
rlm@46
|
4443 o, null, .5, "easeOut", function(){
|
rlm@46
|
4444 if(to == 1){
|
rlm@46
|
4445 this.clearOpacity();
|
rlm@46
|
4446 }
|
rlm@46
|
4447 el.afterFx(o);
|
rlm@46
|
4448 });
|
rlm@46
|
4449 });
|
rlm@46
|
4450 return this;
|
rlm@46
|
4451 },
|
rlm@46
|
4452
|
rlm@46
|
4453
|
rlm@46
|
4454 fadeOut : function(o){
|
rlm@46
|
4455 var el = this.getFxEl();
|
rlm@46
|
4456 o = o || {};
|
rlm@46
|
4457 el.queueFx(o, function(){
|
rlm@46
|
4458 arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
|
rlm@46
|
4459 o, null, .5, "easeOut", function(){
|
rlm@46
|
4460 if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
|
rlm@46
|
4461 this.dom.style.display = "none";
|
rlm@46
|
4462 }else{
|
rlm@46
|
4463 this.dom.style.visibility = "hidden";
|
rlm@46
|
4464 }
|
rlm@46
|
4465 this.clearOpacity();
|
rlm@46
|
4466 el.afterFx(o);
|
rlm@46
|
4467 });
|
rlm@46
|
4468 });
|
rlm@46
|
4469 return this;
|
rlm@46
|
4470 },
|
rlm@46
|
4471
|
rlm@46
|
4472
|
rlm@46
|
4473 scale : function(w, h, o){
|
rlm@46
|
4474 this.shift(Ext.apply({}, o, {
|
rlm@46
|
4475 width: w,
|
rlm@46
|
4476 height: h
|
rlm@46
|
4477 }));
|
rlm@46
|
4478 return this;
|
rlm@46
|
4479 },
|
rlm@46
|
4480
|
rlm@46
|
4481
|
rlm@46
|
4482 shift : function(o){
|
rlm@46
|
4483 var el = this.getFxEl();
|
rlm@46
|
4484 o = o || {};
|
rlm@46
|
4485 el.queueFx(o, function(){
|
rlm@46
|
4486 var a = {}, w = o.width, h = o.height, x = o.x, y = o.y, op = o.opacity;
|
rlm@46
|
4487 if(w !== undefined){
|
rlm@46
|
4488 a.width = {to: this.adjustWidth(w)};
|
rlm@46
|
4489 }
|
rlm@46
|
4490 if(h !== undefined){
|
rlm@46
|
4491 a.height = {to: this.adjustHeight(h)};
|
rlm@46
|
4492 }
|
rlm@46
|
4493 if(o.left !== undefined){
|
rlm@46
|
4494 a.left = {to: o.left};
|
rlm@46
|
4495 }
|
rlm@46
|
4496 if(o.top !== undefined){
|
rlm@46
|
4497 a.top = {to: o.top};
|
rlm@46
|
4498 }
|
rlm@46
|
4499 if(o.right !== undefined){
|
rlm@46
|
4500 a.right = {to: o.right};
|
rlm@46
|
4501 }
|
rlm@46
|
4502 if(o.bottom !== undefined){
|
rlm@46
|
4503 a.bottom = {to: o.bottom};
|
rlm@46
|
4504 }
|
rlm@46
|
4505 if(x !== undefined || y !== undefined){
|
rlm@46
|
4506 a.points = {to: [
|
rlm@46
|
4507 x !== undefined ? x : this.getX(),
|
rlm@46
|
4508 y !== undefined ? y : this.getY()
|
rlm@46
|
4509 ]};
|
rlm@46
|
4510 }
|
rlm@46
|
4511 if(op !== undefined){
|
rlm@46
|
4512 a.opacity = {to: op};
|
rlm@46
|
4513 }
|
rlm@46
|
4514 if(o.xy !== undefined){
|
rlm@46
|
4515 a.points = {to: o.xy};
|
rlm@46
|
4516 }
|
rlm@46
|
4517 arguments.callee.anim = this.fxanim(a,
|
rlm@46
|
4518 o, 'motion', .35, "easeOut", function(){
|
rlm@46
|
4519 el.afterFx(o);
|
rlm@46
|
4520 });
|
rlm@46
|
4521 });
|
rlm@46
|
4522 return this;
|
rlm@46
|
4523 },
|
rlm@46
|
4524
|
rlm@46
|
4525
|
rlm@46
|
4526 ghost : function(anchor, o){
|
rlm@46
|
4527 var el = this.getFxEl();
|
rlm@46
|
4528 o = o || {};
|
rlm@46
|
4529
|
rlm@46
|
4530 el.queueFx(o, function(){
|
rlm@46
|
4531 anchor = anchor || "b";
|
rlm@46
|
4532
|
rlm@46
|
4533 var r = this.getFxRestore();
|
rlm@46
|
4534 var w = this.getWidth(),
|
rlm@46
|
4535 h = this.getHeight();
|
rlm@46
|
4536
|
rlm@46
|
4537 var st = this.dom.style;
|
rlm@46
|
4538
|
rlm@46
|
4539 var after = function(){
|
rlm@46
|
4540 if(o.useDisplay){
|
rlm@46
|
4541 el.setDisplayed(false);
|
rlm@46
|
4542 }else{
|
rlm@46
|
4543 el.hide();
|
rlm@46
|
4544 }
|
rlm@46
|
4545
|
rlm@46
|
4546 el.clearOpacity();
|
rlm@46
|
4547 el.setPositioning(r.pos);
|
rlm@46
|
4548 st.width = r.width;
|
rlm@46
|
4549 st.height = r.height;
|
rlm@46
|
4550
|
rlm@46
|
4551 el.afterFx(o);
|
rlm@46
|
4552 };
|
rlm@46
|
4553
|
rlm@46
|
4554 var a = {opacity: {to: 0}, points: {}}, pt = a.points;
|
rlm@46
|
4555 switch(anchor.toLowerCase()){
|
rlm@46
|
4556 case "t":
|
rlm@46
|
4557 pt.by = [0, -h];
|
rlm@46
|
4558 break;
|
rlm@46
|
4559 case "l":
|
rlm@46
|
4560 pt.by = [-w, 0];
|
rlm@46
|
4561 break;
|
rlm@46
|
4562 case "r":
|
rlm@46
|
4563 pt.by = [w, 0];
|
rlm@46
|
4564 break;
|
rlm@46
|
4565 case "b":
|
rlm@46
|
4566 pt.by = [0, h];
|
rlm@46
|
4567 break;
|
rlm@46
|
4568 case "tl":
|
rlm@46
|
4569 pt.by = [-w, -h];
|
rlm@46
|
4570 break;
|
rlm@46
|
4571 case "bl":
|
rlm@46
|
4572 pt.by = [-w, h];
|
rlm@46
|
4573 break;
|
rlm@46
|
4574 case "br":
|
rlm@46
|
4575 pt.by = [w, h];
|
rlm@46
|
4576 break;
|
rlm@46
|
4577 case "tr":
|
rlm@46
|
4578 pt.by = [w, -h];
|
rlm@46
|
4579 break;
|
rlm@46
|
4580 }
|
rlm@46
|
4581
|
rlm@46
|
4582 arguments.callee.anim = this.fxanim(a,
|
rlm@46
|
4583 o,
|
rlm@46
|
4584 'motion',
|
rlm@46
|
4585 .5,
|
rlm@46
|
4586 "easeOut", after);
|
rlm@46
|
4587 });
|
rlm@46
|
4588 return this;
|
rlm@46
|
4589 },
|
rlm@46
|
4590
|
rlm@46
|
4591
|
rlm@46
|
4592 syncFx : function(){
|
rlm@46
|
4593 this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
|
rlm@46
|
4594 block : false,
|
rlm@46
|
4595 concurrent : true,
|
rlm@46
|
4596 stopFx : false
|
rlm@46
|
4597 });
|
rlm@46
|
4598 return this;
|
rlm@46
|
4599 },
|
rlm@46
|
4600
|
rlm@46
|
4601
|
rlm@46
|
4602 sequenceFx : function(){
|
rlm@46
|
4603 this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
|
rlm@46
|
4604 block : false,
|
rlm@46
|
4605 concurrent : false,
|
rlm@46
|
4606 stopFx : false
|
rlm@46
|
4607 });
|
rlm@46
|
4608 return this;
|
rlm@46
|
4609 },
|
rlm@46
|
4610
|
rlm@46
|
4611
|
rlm@46
|
4612 nextFx : function(){
|
rlm@46
|
4613 var ef = this.fxQueue[0];
|
rlm@46
|
4614 if(ef){
|
rlm@46
|
4615 ef.call(this);
|
rlm@46
|
4616 }
|
rlm@46
|
4617 },
|
rlm@46
|
4618
|
rlm@46
|
4619
|
rlm@46
|
4620 hasActiveFx : function(){
|
rlm@46
|
4621 return this.fxQueue && this.fxQueue[0];
|
rlm@46
|
4622 },
|
rlm@46
|
4623
|
rlm@46
|
4624
|
rlm@46
|
4625 stopFx : function(){
|
rlm@46
|
4626 if(this.hasActiveFx()){
|
rlm@46
|
4627 var cur = this.fxQueue[0];
|
rlm@46
|
4628 if(cur && cur.anim && cur.anim.isAnimated()){
|
rlm@46
|
4629 this.fxQueue = [cur]; cur.anim.stop(true);
|
rlm@46
|
4630 }
|
rlm@46
|
4631 }
|
rlm@46
|
4632 return this;
|
rlm@46
|
4633 },
|
rlm@46
|
4634
|
rlm@46
|
4635
|
rlm@46
|
4636 beforeFx : function(o){
|
rlm@46
|
4637 if(this.hasActiveFx() && !o.concurrent){
|
rlm@46
|
4638 if(o.stopFx){
|
rlm@46
|
4639 this.stopFx();
|
rlm@46
|
4640 return true;
|
rlm@46
|
4641 }
|
rlm@46
|
4642 return false;
|
rlm@46
|
4643 }
|
rlm@46
|
4644 return true;
|
rlm@46
|
4645 },
|
rlm@46
|
4646
|
rlm@46
|
4647
|
rlm@46
|
4648 hasFxBlock : function(){
|
rlm@46
|
4649 var q = this.fxQueue;
|
rlm@46
|
4650 return q && q[0] && q[0].block;
|
rlm@46
|
4651 },
|
rlm@46
|
4652
|
rlm@46
|
4653
|
rlm@46
|
4654 queueFx : function(o, fn){
|
rlm@46
|
4655 if(!this.fxQueue){
|
rlm@46
|
4656 this.fxQueue = [];
|
rlm@46
|
4657 }
|
rlm@46
|
4658 if(!this.hasFxBlock()){
|
rlm@46
|
4659 Ext.applyIf(o, this.fxDefaults);
|
rlm@46
|
4660 if(!o.concurrent){
|
rlm@46
|
4661 var run = this.beforeFx(o);
|
rlm@46
|
4662 fn.block = o.block;
|
rlm@46
|
4663 this.fxQueue.push(fn);
|
rlm@46
|
4664 if(run){
|
rlm@46
|
4665 this.nextFx();
|
rlm@46
|
4666 }
|
rlm@46
|
4667 }else{
|
rlm@46
|
4668 fn.call(this);
|
rlm@46
|
4669 }
|
rlm@46
|
4670 }
|
rlm@46
|
4671 return this;
|
rlm@46
|
4672 },
|
rlm@46
|
4673
|
rlm@46
|
4674
|
rlm@46
|
4675 fxWrap : function(pos, o, vis){
|
rlm@46
|
4676 var wrap;
|
rlm@46
|
4677 if(!o.wrap || !(wrap = Ext.get(o.wrap))){
|
rlm@46
|
4678 var wrapXY;
|
rlm@46
|
4679 if(o.fixPosition){
|
rlm@46
|
4680 wrapXY = this.getXY();
|
rlm@46
|
4681 }
|
rlm@46
|
4682 var div = document.createElement("div");
|
rlm@46
|
4683 div.style.visibility = vis;
|
rlm@46
|
4684 wrap = Ext.get(this.dom.parentNode.insertBefore(div, this.dom));
|
rlm@46
|
4685 wrap.setPositioning(pos);
|
rlm@46
|
4686 if(wrap.getStyle("position") == "static"){
|
rlm@46
|
4687 wrap.position("relative");
|
rlm@46
|
4688 }
|
rlm@46
|
4689 this.clearPositioning('auto');
|
rlm@46
|
4690 wrap.clip();
|
rlm@46
|
4691 wrap.dom.appendChild(this.dom);
|
rlm@46
|
4692 if(wrapXY){
|
rlm@46
|
4693 wrap.setXY(wrapXY);
|
rlm@46
|
4694 }
|
rlm@46
|
4695 }
|
rlm@46
|
4696 return wrap;
|
rlm@46
|
4697 },
|
rlm@46
|
4698
|
rlm@46
|
4699
|
rlm@46
|
4700 fxUnwrap : function(wrap, pos, o){
|
rlm@46
|
4701 this.clearPositioning();
|
rlm@46
|
4702 this.setPositioning(pos);
|
rlm@46
|
4703 if(!o.wrap){
|
rlm@46
|
4704 wrap.dom.parentNode.insertBefore(this.dom, wrap.dom);
|
rlm@46
|
4705 wrap.remove();
|
rlm@46
|
4706 }
|
rlm@46
|
4707 },
|
rlm@46
|
4708
|
rlm@46
|
4709
|
rlm@46
|
4710 getFxRestore : function(){
|
rlm@46
|
4711 var st = this.dom.style;
|
rlm@46
|
4712 return {pos: this.getPositioning(), width: st.width, height : st.height};
|
rlm@46
|
4713 },
|
rlm@46
|
4714
|
rlm@46
|
4715
|
rlm@46
|
4716 afterFx : function(o){
|
rlm@46
|
4717 if(o.afterStyle){
|
rlm@46
|
4718 this.applyStyles(o.afterStyle);
|
rlm@46
|
4719 }
|
rlm@46
|
4720 if(o.afterCls){
|
rlm@46
|
4721 this.addClass(o.afterCls);
|
rlm@46
|
4722 }
|
rlm@46
|
4723 if(o.remove === true){
|
rlm@46
|
4724 this.remove();
|
rlm@46
|
4725 }
|
rlm@46
|
4726 Ext.callback(o.callback, o.scope, [this]);
|
rlm@46
|
4727 if(!o.concurrent){
|
rlm@46
|
4728 this.fxQueue.shift();
|
rlm@46
|
4729 this.nextFx();
|
rlm@46
|
4730 }
|
rlm@46
|
4731 },
|
rlm@46
|
4732
|
rlm@46
|
4733
|
rlm@46
|
4734 getFxEl : function(){ return Ext.get(this.dom);
|
rlm@46
|
4735 },
|
rlm@46
|
4736
|
rlm@46
|
4737
|
rlm@46
|
4738 fxanim : function(args, opt, animType, defaultDur, defaultEase, cb){
|
rlm@46
|
4739 animType = animType || 'run';
|
rlm@46
|
4740 opt = opt || {};
|
rlm@46
|
4741 var anim = Ext.lib.Anim[animType](
|
rlm@46
|
4742 this.dom, args,
|
rlm@46
|
4743 (opt.duration || defaultDur) || .35,
|
rlm@46
|
4744 (opt.easing || defaultEase) || 'easeOut',
|
rlm@46
|
4745 function(){
|
rlm@46
|
4746 Ext.callback(cb, this);
|
rlm@46
|
4747 },
|
rlm@46
|
4748 this
|
rlm@46
|
4749 );
|
rlm@46
|
4750 opt.anim = anim;
|
rlm@46
|
4751 return anim;
|
rlm@46
|
4752 }
|
rlm@46
|
4753 };
|
rlm@46
|
4754
|
rlm@46
|
4755 Ext.Fx.resize = Ext.Fx.scale;
|
rlm@46
|
4756
|
rlm@46
|
4757 Ext.apply(Ext.Element.prototype, Ext.Fx);
|
rlm@46
|
4758
|
rlm@46
|
4759
|
rlm@46
|
4760 Ext.CompositeElement = function(els){
|
rlm@46
|
4761 this.elements = [];
|
rlm@46
|
4762 this.addElements(els);
|
rlm@46
|
4763 };
|
rlm@46
|
4764 Ext.CompositeElement.prototype = {
|
rlm@46
|
4765 isComposite: true,
|
rlm@46
|
4766 addElements : function(els){
|
rlm@46
|
4767 if(!els) return this;
|
rlm@46
|
4768 if(typeof els == "string"){
|
rlm@46
|
4769 els = Ext.Element.selectorFunction(els);
|
rlm@46
|
4770 }
|
rlm@46
|
4771 var yels = this.elements;
|
rlm@46
|
4772 var index = yels.length-1;
|
rlm@46
|
4773 for(var i = 0, len = els.length; i < len; i++) {
|
rlm@46
|
4774 yels[++index] = Ext.get(els[i]);
|
rlm@46
|
4775 }
|
rlm@46
|
4776 return this;
|
rlm@46
|
4777 },
|
rlm@46
|
4778
|
rlm@46
|
4779
|
rlm@46
|
4780 fill : function(els){
|
rlm@46
|
4781 this.elements = [];
|
rlm@46
|
4782 this.add(els);
|
rlm@46
|
4783 return this;
|
rlm@46
|
4784 },
|
rlm@46
|
4785
|
rlm@46
|
4786
|
rlm@46
|
4787 filter : function(selector){
|
rlm@46
|
4788 var els = [];
|
rlm@46
|
4789 this.each(function(el){
|
rlm@46
|
4790 if(el.is(selector)){
|
rlm@46
|
4791 els[els.length] = el.dom;
|
rlm@46
|
4792 }
|
rlm@46
|
4793 });
|
rlm@46
|
4794 this.fill(els);
|
rlm@46
|
4795 return this;
|
rlm@46
|
4796 },
|
rlm@46
|
4797
|
rlm@46
|
4798 invoke : function(fn, args){
|
rlm@46
|
4799 var els = this.elements;
|
rlm@46
|
4800 for(var i = 0, len = els.length; i < len; i++) {
|
rlm@46
|
4801 Ext.Element.prototype[fn].apply(els[i], args);
|
rlm@46
|
4802 }
|
rlm@46
|
4803 return this;
|
rlm@46
|
4804 },
|
rlm@46
|
4805
|
rlm@46
|
4806 add : function(els){
|
rlm@46
|
4807 if(typeof els == "string"){
|
rlm@46
|
4808 this.addElements(Ext.Element.selectorFunction(els));
|
rlm@46
|
4809 }else if(els.length !== undefined){
|
rlm@46
|
4810 this.addElements(els);
|
rlm@46
|
4811 }else{
|
rlm@46
|
4812 this.addElements([els]);
|
rlm@46
|
4813 }
|
rlm@46
|
4814 return this;
|
rlm@46
|
4815 },
|
rlm@46
|
4816
|
rlm@46
|
4817 each : function(fn, scope){
|
rlm@46
|
4818 var els = this.elements;
|
rlm@46
|
4819 for(var i = 0, len = els.length; i < len; i++){
|
rlm@46
|
4820 if(fn.call(scope || els[i], els[i], this, i) === false) {
|
rlm@46
|
4821 break;
|
rlm@46
|
4822 }
|
rlm@46
|
4823 }
|
rlm@46
|
4824 return this;
|
rlm@46
|
4825 },
|
rlm@46
|
4826
|
rlm@46
|
4827
|
rlm@46
|
4828 item : function(index){
|
rlm@46
|
4829 return this.elements[index] || null;
|
rlm@46
|
4830 },
|
rlm@46
|
4831
|
rlm@46
|
4832
|
rlm@46
|
4833 first : function(){
|
rlm@46
|
4834 return this.item(0);
|
rlm@46
|
4835 },
|
rlm@46
|
4836
|
rlm@46
|
4837
|
rlm@46
|
4838 last : function(){
|
rlm@46
|
4839 return this.item(this.elements.length-1);
|
rlm@46
|
4840 },
|
rlm@46
|
4841
|
rlm@46
|
4842
|
rlm@46
|
4843 getCount : function(){
|
rlm@46
|
4844 return this.elements.length;
|
rlm@46
|
4845 },
|
rlm@46
|
4846
|
rlm@46
|
4847
|
rlm@46
|
4848 contains : function(el){
|
rlm@46
|
4849 return this.indexOf(el) !== -1;
|
rlm@46
|
4850 },
|
rlm@46
|
4851
|
rlm@46
|
4852
|
rlm@46
|
4853 indexOf : function(el){
|
rlm@46
|
4854 return this.elements.indexOf(Ext.get(el));
|
rlm@46
|
4855 },
|
rlm@46
|
4856
|
rlm@46
|
4857
|
rlm@46
|
4858
|
rlm@46
|
4859 removeElement : function(el, removeDom){
|
rlm@46
|
4860 if(Ext.isArray(el)){
|
rlm@46
|
4861 for(var i = 0, len = el.length; i < len; i++){
|
rlm@46
|
4862 this.removeElement(el[i]);
|
rlm@46
|
4863 }
|
rlm@46
|
4864 return this;
|
rlm@46
|
4865 }
|
rlm@46
|
4866 var index = typeof el == 'number' ? el : this.indexOf(el);
|
rlm@46
|
4867 if(index !== -1 && this.elements[index]){
|
rlm@46
|
4868 if(removeDom){
|
rlm@46
|
4869 var d = this.elements[index];
|
rlm@46
|
4870 if(d.dom){
|
rlm@46
|
4871 d.remove();
|
rlm@46
|
4872 }else{
|
rlm@46
|
4873 Ext.removeNode(d);
|
rlm@46
|
4874 }
|
rlm@46
|
4875 }
|
rlm@46
|
4876 this.elements.splice(index, 1);
|
rlm@46
|
4877 }
|
rlm@46
|
4878 return this;
|
rlm@46
|
4879 },
|
rlm@46
|
4880
|
rlm@46
|
4881
|
rlm@46
|
4882 replaceElement : function(el, replacement, domReplace){
|
rlm@46
|
4883 var index = typeof el == 'number' ? el : this.indexOf(el);
|
rlm@46
|
4884 if(index !== -1){
|
rlm@46
|
4885 if(domReplace){
|
rlm@46
|
4886 this.elements[index].replaceWith(replacement);
|
rlm@46
|
4887 }else{
|
rlm@46
|
4888 this.elements.splice(index, 1, Ext.get(replacement))
|
rlm@46
|
4889 }
|
rlm@46
|
4890 }
|
rlm@46
|
4891 return this;
|
rlm@46
|
4892 },
|
rlm@46
|
4893
|
rlm@46
|
4894
|
rlm@46
|
4895 clear : function(){
|
rlm@46
|
4896 this.elements = [];
|
rlm@46
|
4897 }
|
rlm@46
|
4898 };
|
rlm@46
|
4899 (function(){
|
rlm@46
|
4900 Ext.CompositeElement.createCall = function(proto, fnName){
|
rlm@46
|
4901 if(!proto[fnName]){
|
rlm@46
|
4902 proto[fnName] = function(){
|
rlm@46
|
4903 return this.invoke(fnName, arguments);
|
rlm@46
|
4904 };
|
rlm@46
|
4905 }
|
rlm@46
|
4906 };
|
rlm@46
|
4907 for(var fnName in Ext.Element.prototype){
|
rlm@46
|
4908 if(typeof Ext.Element.prototype[fnName] == "function"){
|
rlm@46
|
4909 Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName);
|
rlm@46
|
4910 }
|
rlm@46
|
4911 };
|
rlm@46
|
4912 })();
|
rlm@46
|
4913
|
rlm@46
|
4914
|
rlm@46
|
4915 Ext.CompositeElementLite = function(els){
|
rlm@46
|
4916 Ext.CompositeElementLite.superclass.constructor.call(this, els);
|
rlm@46
|
4917 this.el = new Ext.Element.Flyweight();
|
rlm@46
|
4918 };
|
rlm@46
|
4919 Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {
|
rlm@46
|
4920 addElements : function(els){
|
rlm@46
|
4921 if(els){
|
rlm@46
|
4922 if(Ext.isArray(els)){
|
rlm@46
|
4923 this.elements = this.elements.concat(els);
|
rlm@46
|
4924 }else{
|
rlm@46
|
4925 var yels = this.elements;
|
rlm@46
|
4926 var index = yels.length-1;
|
rlm@46
|
4927 for(var i = 0, len = els.length; i < len; i++) {
|
rlm@46
|
4928 yels[++index] = els[i];
|
rlm@46
|
4929 }
|
rlm@46
|
4930 }
|
rlm@46
|
4931 }
|
rlm@46
|
4932 return this;
|
rlm@46
|
4933 },
|
rlm@46
|
4934 invoke : function(fn, args){
|
rlm@46
|
4935 var els = this.elements;
|
rlm@46
|
4936 var el = this.el;
|
rlm@46
|
4937 for(var i = 0, len = els.length; i < len; i++) {
|
rlm@46
|
4938 el.dom = els[i];
|
rlm@46
|
4939 Ext.Element.prototype[fn].apply(el, args);
|
rlm@46
|
4940 }
|
rlm@46
|
4941 return this;
|
rlm@46
|
4942 },
|
rlm@46
|
4943
|
rlm@46
|
4944 item : function(index){
|
rlm@46
|
4945 if(!this.elements[index]){
|
rlm@46
|
4946 return null;
|
rlm@46
|
4947 }
|
rlm@46
|
4948 this.el.dom = this.elements[index];
|
rlm@46
|
4949 return this.el;
|
rlm@46
|
4950 },
|
rlm@46
|
4951
|
rlm@46
|
4952
|
rlm@46
|
4953 addListener : function(eventName, handler, scope, opt){
|
rlm@46
|
4954 var els = this.elements;
|
rlm@46
|
4955 for(var i = 0, len = els.length; i < len; i++) {
|
rlm@46
|
4956 Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt);
|
rlm@46
|
4957 }
|
rlm@46
|
4958 return this;
|
rlm@46
|
4959 },
|
rlm@46
|
4960
|
rlm@46
|
4961
|
rlm@46
|
4962 each : function(fn, scope){
|
rlm@46
|
4963 var els = this.elements;
|
rlm@46
|
4964 var el = this.el;
|
rlm@46
|
4965 for(var i = 0, len = els.length; i < len; i++){
|
rlm@46
|
4966 el.dom = els[i];
|
rlm@46
|
4967 if(fn.call(scope || el, el, this, i) === false){
|
rlm@46
|
4968 break;
|
rlm@46
|
4969 }
|
rlm@46
|
4970 }
|
rlm@46
|
4971 return this;
|
rlm@46
|
4972 },
|
rlm@46
|
4973
|
rlm@46
|
4974 indexOf : function(el){
|
rlm@46
|
4975 return this.elements.indexOf(Ext.getDom(el));
|
rlm@46
|
4976 },
|
rlm@46
|
4977
|
rlm@46
|
4978 replaceElement : function(el, replacement, domReplace){
|
rlm@46
|
4979 var index = typeof el == 'number' ? el : this.indexOf(el);
|
rlm@46
|
4980 if(index !== -1){
|
rlm@46
|
4981 replacement = Ext.getDom(replacement);
|
rlm@46
|
4982 if(domReplace){
|
rlm@46
|
4983 var d = this.elements[index];
|
rlm@46
|
4984 d.parentNode.insertBefore(replacement, d);
|
rlm@46
|
4985 Ext.removeNode(d);
|
rlm@46
|
4986 }
|
rlm@46
|
4987 this.elements.splice(index, 1, replacement);
|
rlm@46
|
4988 }
|
rlm@46
|
4989 return this;
|
rlm@46
|
4990 }
|
rlm@46
|
4991 });
|
rlm@46
|
4992 Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
|
rlm@46
|
4993 if(Ext.DomQuery){
|
rlm@46
|
4994 Ext.Element.selectorFunction = Ext.DomQuery.select;
|
rlm@46
|
4995 }
|
rlm@46
|
4996
|
rlm@46
|
4997 Ext.Element.select = function(selector, unique, root){
|
rlm@46
|
4998 var els;
|
rlm@46
|
4999 if(typeof selector == "string"){
|
rlm@46
|
5000 els = Ext.Element.selectorFunction(selector, root);
|
rlm@46
|
5001 }else if(selector.length !== undefined){
|
rlm@46
|
5002 els = selector;
|
rlm@46
|
5003 }else{
|
rlm@46
|
5004 throw "Invalid selector";
|
rlm@46
|
5005 }
|
rlm@46
|
5006 if(unique === true){
|
rlm@46
|
5007 return new Ext.CompositeElement(els);
|
rlm@46
|
5008 }else{
|
rlm@46
|
5009 return new Ext.CompositeElementLite(els);
|
rlm@46
|
5010 }
|
rlm@46
|
5011 };
|
rlm@46
|
5012
|
rlm@46
|
5013 Ext.select = Ext.Element.select;
|
rlm@46
|
5014
|
rlm@46
|
5015 Ext.data.Connection = function(config){
|
rlm@46
|
5016 Ext.apply(this, config);
|
rlm@46
|
5017 this.addEvents(
|
rlm@46
|
5018
|
rlm@46
|
5019 "beforerequest",
|
rlm@46
|
5020
|
rlm@46
|
5021 "requestcomplete",
|
rlm@46
|
5022
|
rlm@46
|
5023 "requestexception"
|
rlm@46
|
5024 );
|
rlm@46
|
5025 Ext.data.Connection.superclass.constructor.call(this);
|
rlm@46
|
5026 };
|
rlm@46
|
5027
|
rlm@46
|
5028 Ext.extend(Ext.data.Connection, Ext.util.Observable, {
|
rlm@46
|
5029
|
rlm@46
|
5030
|
rlm@46
|
5031
|
rlm@46
|
5032
|
rlm@46
|
5033
|
rlm@46
|
5034 timeout : 30000,
|
rlm@46
|
5035
|
rlm@46
|
5036 autoAbort:false,
|
rlm@46
|
5037
|
rlm@46
|
5038
|
rlm@46
|
5039 disableCaching: true,
|
rlm@46
|
5040
|
rlm@46
|
5041
|
rlm@46
|
5042 request : function(o){
|
rlm@46
|
5043 if(this.fireEvent("beforerequest", this, o) !== false){
|
rlm@46
|
5044 var p = o.params;
|
rlm@46
|
5045
|
rlm@46
|
5046 if(typeof p == "function"){
|
rlm@46
|
5047 p = p.call(o.scope||window, o);
|
rlm@46
|
5048 }
|
rlm@46
|
5049 if(typeof p == "object"){
|
rlm@46
|
5050 p = Ext.urlEncode(p);
|
rlm@46
|
5051 }
|
rlm@46
|
5052 if(this.extraParams){
|
rlm@46
|
5053 var extras = Ext.urlEncode(this.extraParams);
|
rlm@46
|
5054 p = p ? (p + '&' + extras) : extras;
|
rlm@46
|
5055 }
|
rlm@46
|
5056
|
rlm@46
|
5057 var url = o.url || this.url;
|
rlm@46
|
5058 if(typeof url == 'function'){
|
rlm@46
|
5059 url = url.call(o.scope||window, o);
|
rlm@46
|
5060 }
|
rlm@46
|
5061
|
rlm@46
|
5062 if(o.form){
|
rlm@46
|
5063 var form = Ext.getDom(o.form);
|
rlm@46
|
5064 url = url || form.action;
|
rlm@46
|
5065
|
rlm@46
|
5066 var enctype = form.getAttribute("enctype");
|
rlm@46
|
5067 if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){
|
rlm@46
|
5068 return this.doFormUpload(o, p, url);
|
rlm@46
|
5069 }
|
rlm@46
|
5070 var f = Ext.lib.Ajax.serializeForm(form);
|
rlm@46
|
5071 p = p ? (p + '&' + f) : f;
|
rlm@46
|
5072 }
|
rlm@46
|
5073
|
rlm@46
|
5074 var hs = o.headers;
|
rlm@46
|
5075 if(this.defaultHeaders){
|
rlm@46
|
5076 hs = Ext.apply(hs || {}, this.defaultHeaders);
|
rlm@46
|
5077 if(!o.headers){
|
rlm@46
|
5078 o.headers = hs;
|
rlm@46
|
5079 }
|
rlm@46
|
5080 }
|
rlm@46
|
5081
|
rlm@46
|
5082 var cb = {
|
rlm@46
|
5083 success: this.handleResponse,
|
rlm@46
|
5084 failure: this.handleFailure,
|
rlm@46
|
5085 scope: this,
|
rlm@46
|
5086 argument: {options: o},
|
rlm@46
|
5087 timeout : o.timeout || this.timeout
|
rlm@46
|
5088 };
|
rlm@46
|
5089
|
rlm@46
|
5090 var method = o.method||this.method||(p ? "POST" : "GET");
|
rlm@46
|
5091
|
rlm@46
|
5092 if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){
|
rlm@46
|
5093 url += (url.indexOf('?') != -1 ? '&' : '?') + '_dc=' + (new Date().getTime());
|
rlm@46
|
5094 }
|
rlm@46
|
5095
|
rlm@46
|
5096 if(typeof o.autoAbort == 'boolean'){ if(o.autoAbort){
|
rlm@46
|
5097 this.abort();
|
rlm@46
|
5098 }
|
rlm@46
|
5099 }else if(this.autoAbort !== false){
|
rlm@46
|
5100 this.abort();
|
rlm@46
|
5101 }
|
rlm@46
|
5102 if((method == 'GET' || o.xmlData || o.jsonData) && p){
|
rlm@46
|
5103 url += (url.indexOf('?') != -1 ? '&' : '?') + p;
|
rlm@46
|
5104 p = '';
|
rlm@46
|
5105 }
|
rlm@46
|
5106 this.transId = Ext.lib.Ajax.request(method, url, cb, p, o);
|
rlm@46
|
5107 return this.transId;
|
rlm@46
|
5108 }else{
|
rlm@46
|
5109 Ext.callback(o.callback, o.scope, [o, null, null]);
|
rlm@46
|
5110 return null;
|
rlm@46
|
5111 }
|
rlm@46
|
5112 },
|
rlm@46
|
5113
|
rlm@46
|
5114
|
rlm@46
|
5115 isLoading : function(transId){
|
rlm@46
|
5116 if(transId){
|
rlm@46
|
5117 return Ext.lib.Ajax.isCallInProgress(transId);
|
rlm@46
|
5118 }else{
|
rlm@46
|
5119 return this.transId ? true : false;
|
rlm@46
|
5120 }
|
rlm@46
|
5121 },
|
rlm@46
|
5122
|
rlm@46
|
5123
|
rlm@46
|
5124 abort : function(transId){
|
rlm@46
|
5125 if(transId || this.isLoading()){
|
rlm@46
|
5126 Ext.lib.Ajax.abort(transId || this.transId);
|
rlm@46
|
5127 }
|
rlm@46
|
5128 },
|
rlm@46
|
5129
|
rlm@46
|
5130 handleResponse : function(response){
|
rlm@46
|
5131 this.transId = false;
|
rlm@46
|
5132 var options = response.argument.options;
|
rlm@46
|
5133 response.argument = options ? options.argument : null;
|
rlm@46
|
5134 this.fireEvent("requestcomplete", this, response, options);
|
rlm@46
|
5135 Ext.callback(options.success, options.scope, [response, options]);
|
rlm@46
|
5136 Ext.callback(options.callback, options.scope, [options, true, response]);
|
rlm@46
|
5137 },
|
rlm@46
|
5138
|
rlm@46
|
5139 handleFailure : function(response, e){
|
rlm@46
|
5140 this.transId = false;
|
rlm@46
|
5141 var options = response.argument.options;
|
rlm@46
|
5142 response.argument = options ? options.argument : null;
|
rlm@46
|
5143 this.fireEvent("requestexception", this, response, options, e);
|
rlm@46
|
5144 Ext.callback(options.failure, options.scope, [response, options]);
|
rlm@46
|
5145 Ext.callback(options.callback, options.scope, [options, false, response]);
|
rlm@46
|
5146 },
|
rlm@46
|
5147
|
rlm@46
|
5148 doFormUpload : function(o, ps, url){
|
rlm@46
|
5149 var id = Ext.id();
|
rlm@46
|
5150 var frame = document.createElement('iframe');
|
rlm@46
|
5151 frame.id = id;
|
rlm@46
|
5152 frame.name = id;
|
rlm@46
|
5153 frame.className = 'x-hidden';
|
rlm@46
|
5154 if(Ext.isIE){
|
rlm@46
|
5155 frame.src = Ext.SSL_SECURE_URL;
|
rlm@46
|
5156 }
|
rlm@46
|
5157 document.body.appendChild(frame);
|
rlm@46
|
5158
|
rlm@46
|
5159 if(Ext.isIE){
|
rlm@46
|
5160 document.frames[id].name = id;
|
rlm@46
|
5161 }
|
rlm@46
|
5162
|
rlm@46
|
5163 var form = Ext.getDom(o.form);
|
rlm@46
|
5164 form.target = id;
|
rlm@46
|
5165 form.method = 'POST';
|
rlm@46
|
5166 form.enctype = form.encoding = 'multipart/form-data';
|
rlm@46
|
5167 if(url){
|
rlm@46
|
5168 form.action = url;
|
rlm@46
|
5169 }
|
rlm@46
|
5170
|
rlm@46
|
5171 var hiddens, hd;
|
rlm@46
|
5172 if(ps){ hiddens = [];
|
rlm@46
|
5173 ps = Ext.urlDecode(ps, false);
|
rlm@46
|
5174 for(var k in ps){
|
rlm@46
|
5175 if(ps.hasOwnProperty(k)){
|
rlm@46
|
5176 hd = document.createElement('input');
|
rlm@46
|
5177 hd.type = 'hidden';
|
rlm@46
|
5178 hd.name = k;
|
rlm@46
|
5179 hd.value = ps[k];
|
rlm@46
|
5180 form.appendChild(hd);
|
rlm@46
|
5181 hiddens.push(hd);
|
rlm@46
|
5182 }
|
rlm@46
|
5183 }
|
rlm@46
|
5184 }
|
rlm@46
|
5185
|
rlm@46
|
5186 function cb(){
|
rlm@46
|
5187 var r = { responseText : '',
|
rlm@46
|
5188 responseXML : null
|
rlm@46
|
5189 };
|
rlm@46
|
5190
|
rlm@46
|
5191 r.argument = o ? o.argument : null;
|
rlm@46
|
5192
|
rlm@46
|
5193 try { var doc;
|
rlm@46
|
5194 if(Ext.isIE){
|
rlm@46
|
5195 doc = frame.contentWindow.document;
|
rlm@46
|
5196 }else {
|
rlm@46
|
5197 doc = (frame.contentDocument || window.frames[id].document);
|
rlm@46
|
5198 }
|
rlm@46
|
5199 if(doc && doc.body){
|
rlm@46
|
5200 r.responseText = doc.body.innerHTML;
|
rlm@46
|
5201 }
|
rlm@46
|
5202 if(doc && doc.XMLDocument){
|
rlm@46
|
5203 r.responseXML = doc.XMLDocument;
|
rlm@46
|
5204 }else {
|
rlm@46
|
5205 r.responseXML = doc;
|
rlm@46
|
5206 }
|
rlm@46
|
5207 }
|
rlm@46
|
5208 catch(e) {
|
rlm@46
|
5209 }
|
rlm@46
|
5210
|
rlm@46
|
5211 Ext.EventManager.removeListener(frame, 'load', cb, this);
|
rlm@46
|
5212
|
rlm@46
|
5213 this.fireEvent("requestcomplete", this, r, o);
|
rlm@46
|
5214
|
rlm@46
|
5215 Ext.callback(o.success, o.scope, [r, o]);
|
rlm@46
|
5216 Ext.callback(o.callback, o.scope, [o, true, r]);
|
rlm@46
|
5217
|
rlm@46
|
5218 setTimeout(function(){Ext.removeNode(frame);}, 100);
|
rlm@46
|
5219 }
|
rlm@46
|
5220
|
rlm@46
|
5221 Ext.EventManager.on(frame, 'load', cb, this);
|
rlm@46
|
5222 form.submit();
|
rlm@46
|
5223
|
rlm@46
|
5224 if(hiddens){ for(var i = 0, len = hiddens.length; i < len; i++){
|
rlm@46
|
5225 Ext.removeNode(hiddens[i]);
|
rlm@46
|
5226 }
|
rlm@46
|
5227 }
|
rlm@46
|
5228 }
|
rlm@46
|
5229 });
|
rlm@46
|
5230
|
rlm@46
|
5231
|
rlm@46
|
5232 Ext.Ajax = new Ext.data.Connection({
|
rlm@46
|
5233
|
rlm@46
|
5234
|
rlm@46
|
5235
|
rlm@46
|
5236
|
rlm@46
|
5237
|
rlm@46
|
5238
|
rlm@46
|
5239
|
rlm@46
|
5240
|
rlm@46
|
5241
|
rlm@46
|
5242
|
rlm@46
|
5243
|
rlm@46
|
5244
|
rlm@46
|
5245
|
rlm@46
|
5246
|
rlm@46
|
5247
|
rlm@46
|
5248
|
rlm@46
|
5249
|
rlm@46
|
5250 autoAbort : false,
|
rlm@46
|
5251
|
rlm@46
|
5252
|
rlm@46
|
5253 serializeForm : function(form){
|
rlm@46
|
5254 return Ext.lib.Ajax.serializeForm(form);
|
rlm@46
|
5255 }
|
rlm@46
|
5256 });
|
rlm@46
|
5257
|
rlm@46
|
5258 Ext.Updater = function(el, forceNew){
|
rlm@46
|
5259 el = Ext.get(el);
|
rlm@46
|
5260 if(!forceNew && el.updateManager){
|
rlm@46
|
5261 return el.updateManager;
|
rlm@46
|
5262 }
|
rlm@46
|
5263
|
rlm@46
|
5264 this.el = el;
|
rlm@46
|
5265
|
rlm@46
|
5266 this.defaultUrl = null;
|
rlm@46
|
5267
|
rlm@46
|
5268 this.addEvents(
|
rlm@46
|
5269
|
rlm@46
|
5270 "beforeupdate",
|
rlm@46
|
5271
|
rlm@46
|
5272 "update",
|
rlm@46
|
5273
|
rlm@46
|
5274 "failure"
|
rlm@46
|
5275 );
|
rlm@46
|
5276 var d = Ext.Updater.defaults;
|
rlm@46
|
5277
|
rlm@46
|
5278 this.sslBlankUrl = d.sslBlankUrl;
|
rlm@46
|
5279
|
rlm@46
|
5280 this.disableCaching = d.disableCaching;
|
rlm@46
|
5281
|
rlm@46
|
5282 this.indicatorText = d.indicatorText;
|
rlm@46
|
5283
|
rlm@46
|
5284 this.showLoadIndicator = d.showLoadIndicator;
|
rlm@46
|
5285
|
rlm@46
|
5286 this.timeout = d.timeout;
|
rlm@46
|
5287
|
rlm@46
|
5288 this.loadScripts = d.loadScripts;
|
rlm@46
|
5289
|
rlm@46
|
5290 this.transaction = null;
|
rlm@46
|
5291
|
rlm@46
|
5292 this.refreshDelegate = this.refresh.createDelegate(this);
|
rlm@46
|
5293
|
rlm@46
|
5294 this.updateDelegate = this.update.createDelegate(this);
|
rlm@46
|
5295
|
rlm@46
|
5296 this.formUpdateDelegate = this.formUpdate.createDelegate(this);
|
rlm@46
|
5297
|
rlm@46
|
5298 if(!this.renderer){
|
rlm@46
|
5299
|
rlm@46
|
5300 this.renderer = new Ext.Updater.BasicRenderer();
|
rlm@46
|
5301 }
|
rlm@46
|
5302 Ext.Updater.superclass.constructor.call(this);
|
rlm@46
|
5303 };
|
rlm@46
|
5304
|
rlm@46
|
5305 Ext.extend(Ext.Updater, Ext.util.Observable, {
|
rlm@46
|
5306
|
rlm@46
|
5307 getEl : function(){
|
rlm@46
|
5308 return this.el;
|
rlm@46
|
5309 },
|
rlm@46
|
5310
|
rlm@46
|
5311
|
rlm@46
|
5312 update : function(url, params, callback, discardUrl){
|
rlm@46
|
5313 if(this.fireEvent("beforeupdate", this.el, url, params) !== false){
|
rlm@46
|
5314 var cfg, callerScope;
|
rlm@46
|
5315 if(typeof url == "object"){
|
rlm@46
|
5316 cfg = url;
|
rlm@46
|
5317 url = cfg.url;
|
rlm@46
|
5318 params = params || cfg.params;
|
rlm@46
|
5319 callback = callback || cfg.callback;
|
rlm@46
|
5320 discardUrl = discardUrl || cfg.discardUrl;
|
rlm@46
|
5321 callerScope = cfg.scope;
|
rlm@46
|
5322 if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};
|
rlm@46
|
5323 if(typeof cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};
|
rlm@46
|
5324 if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};
|
rlm@46
|
5325 if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;};
|
rlm@46
|
5326 }
|
rlm@46
|
5327 this.showLoading();
|
rlm@46
|
5328
|
rlm@46
|
5329 if(!discardUrl){
|
rlm@46
|
5330 this.defaultUrl = url;
|
rlm@46
|
5331 }
|
rlm@46
|
5332 if(typeof url == "function"){
|
rlm@46
|
5333 url = url.call(this);
|
rlm@46
|
5334 }
|
rlm@46
|
5335
|
rlm@46
|
5336 var o = Ext.apply(cfg ||{}, {
|
rlm@46
|
5337 url : url,
|
rlm@46
|
5338 params: (typeof params == "function" && callerScope) ? params.createDelegate(callerScope) : params,
|
rlm@46
|
5339 success: this.processSuccess,
|
rlm@46
|
5340 failure: this.processFailure,
|
rlm@46
|
5341 scope: this,
|
rlm@46
|
5342 callback: undefined,
|
rlm@46
|
5343 timeout: (this.timeout*1000),
|
rlm@46
|
5344 disableCaching: this.disableCaching,
|
rlm@46
|
5345 argument: {
|
rlm@46
|
5346 "options": cfg,
|
rlm@46
|
5347 "url": url,
|
rlm@46
|
5348 "form": null,
|
rlm@46
|
5349 "callback": callback,
|
rlm@46
|
5350 "scope": callerScope || window,
|
rlm@46
|
5351 "params": params
|
rlm@46
|
5352 }
|
rlm@46
|
5353 });
|
rlm@46
|
5354
|
rlm@46
|
5355 this.transaction = Ext.Ajax.request(o);
|
rlm@46
|
5356 }
|
rlm@46
|
5357 },
|
rlm@46
|
5358
|
rlm@46
|
5359
|
rlm@46
|
5360 formUpdate : function(form, url, reset, callback){
|
rlm@46
|
5361 if(this.fireEvent("beforeupdate", this.el, form, url) !== false){
|
rlm@46
|
5362 if(typeof url == "function"){
|
rlm@46
|
5363 url = url.call(this);
|
rlm@46
|
5364 }
|
rlm@46
|
5365 form = Ext.getDom(form)
|
rlm@46
|
5366 this.transaction = Ext.Ajax.request({
|
rlm@46
|
5367 form: form,
|
rlm@46
|
5368 url:url,
|
rlm@46
|
5369 success: this.processSuccess,
|
rlm@46
|
5370 failure: this.processFailure,
|
rlm@46
|
5371 scope: this,
|
rlm@46
|
5372 timeout: (this.timeout*1000),
|
rlm@46
|
5373 argument: {
|
rlm@46
|
5374 "url": url,
|
rlm@46
|
5375 "form": form,
|
rlm@46
|
5376 "callback": callback,
|
rlm@46
|
5377 "reset": reset
|
rlm@46
|
5378 }
|
rlm@46
|
5379 });
|
rlm@46
|
5380 this.showLoading.defer(1, this);
|
rlm@46
|
5381 }
|
rlm@46
|
5382 },
|
rlm@46
|
5383
|
rlm@46
|
5384
|
rlm@46
|
5385 refresh : function(callback){
|
rlm@46
|
5386 if(this.defaultUrl == null){
|
rlm@46
|
5387 return;
|
rlm@46
|
5388 }
|
rlm@46
|
5389 this.update(this.defaultUrl, null, callback, true);
|
rlm@46
|
5390 },
|
rlm@46
|
5391
|
rlm@46
|
5392
|
rlm@46
|
5393 startAutoRefresh : function(interval, url, params, callback, refreshNow){
|
rlm@46
|
5394 if(refreshNow){
|
rlm@46
|
5395 this.update(url || this.defaultUrl, params, callback, true);
|
rlm@46
|
5396 }
|
rlm@46
|
5397 if(this.autoRefreshProcId){
|
rlm@46
|
5398 clearInterval(this.autoRefreshProcId);
|
rlm@46
|
5399 }
|
rlm@46
|
5400 this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*1000);
|
rlm@46
|
5401 },
|
rlm@46
|
5402
|
rlm@46
|
5403
|
rlm@46
|
5404 stopAutoRefresh : function(){
|
rlm@46
|
5405 if(this.autoRefreshProcId){
|
rlm@46
|
5406 clearInterval(this.autoRefreshProcId);
|
rlm@46
|
5407 delete this.autoRefreshProcId;
|
rlm@46
|
5408 }
|
rlm@46
|
5409 },
|
rlm@46
|
5410
|
rlm@46
|
5411
|
rlm@46
|
5412 isAutoRefreshing : function(){
|
rlm@46
|
5413 return this.autoRefreshProcId ? true : false;
|
rlm@46
|
5414 },
|
rlm@46
|
5415
|
rlm@46
|
5416
|
rlm@46
|
5417 showLoading : function(){
|
rlm@46
|
5418 if(this.showLoadIndicator){
|
rlm@46
|
5419 this.el.update(this.indicatorText);
|
rlm@46
|
5420 }
|
rlm@46
|
5421 },
|
rlm@46
|
5422
|
rlm@46
|
5423
|
rlm@46
|
5424 processSuccess : function(response){
|
rlm@46
|
5425 this.transaction = null;
|
rlm@46
|
5426 if(response.argument.form && response.argument.reset){
|
rlm@46
|
5427 try{
|
rlm@46
|
5428 response.argument.form.reset();
|
rlm@46
|
5429 }catch(e){}
|
rlm@46
|
5430 }
|
rlm@46
|
5431 if(this.loadScripts){
|
rlm@46
|
5432 this.renderer.render(this.el, response, this,
|
rlm@46
|
5433 this.updateComplete.createDelegate(this, [response]));
|
rlm@46
|
5434 }else{
|
rlm@46
|
5435 this.renderer.render(this.el, response, this);
|
rlm@46
|
5436 this.updateComplete(response);
|
rlm@46
|
5437 }
|
rlm@46
|
5438 },
|
rlm@46
|
5439
|
rlm@46
|
5440
|
rlm@46
|
5441 updateComplete : function(response){
|
rlm@46
|
5442 this.fireEvent("update", this.el, response);
|
rlm@46
|
5443 if(typeof response.argument.callback == "function"){
|
rlm@46
|
5444 response.argument.callback.call(response.argument.scope, this.el, true, response, response.argument.options);
|
rlm@46
|
5445 }
|
rlm@46
|
5446 },
|
rlm@46
|
5447
|
rlm@46
|
5448
|
rlm@46
|
5449 processFailure : function(response){
|
rlm@46
|
5450 this.transaction = null;
|
rlm@46
|
5451 this.fireEvent("failure", this.el, response);
|
rlm@46
|
5452 if(typeof response.argument.callback == "function"){
|
rlm@46
|
5453 response.argument.callback.call(response.argument.scope, this.el, false, response, response.argument.options);
|
rlm@46
|
5454 }
|
rlm@46
|
5455 },
|
rlm@46
|
5456
|
rlm@46
|
5457
|
rlm@46
|
5458 setRenderer : function(renderer){
|
rlm@46
|
5459 this.renderer = renderer;
|
rlm@46
|
5460 },
|
rlm@46
|
5461
|
rlm@46
|
5462
|
rlm@46
|
5463 getRenderer : function(){
|
rlm@46
|
5464 return this.renderer;
|
rlm@46
|
5465 },
|
rlm@46
|
5466
|
rlm@46
|
5467
|
rlm@46
|
5468 setDefaultUrl : function(defaultUrl){
|
rlm@46
|
5469 this.defaultUrl = defaultUrl;
|
rlm@46
|
5470 },
|
rlm@46
|
5471
|
rlm@46
|
5472
|
rlm@46
|
5473 abort : function(){
|
rlm@46
|
5474 if(this.transaction){
|
rlm@46
|
5475 Ext.Ajax.abort(this.transaction);
|
rlm@46
|
5476 }
|
rlm@46
|
5477 },
|
rlm@46
|
5478
|
rlm@46
|
5479
|
rlm@46
|
5480 isUpdating : function(){
|
rlm@46
|
5481 if(this.transaction){
|
rlm@46
|
5482 return Ext.Ajax.isLoading(this.transaction);
|
rlm@46
|
5483 }
|
rlm@46
|
5484 return false;
|
rlm@46
|
5485 }
|
rlm@46
|
5486 });
|
rlm@46
|
5487
|
rlm@46
|
5488
|
rlm@46
|
5489 Ext.Updater.defaults = {
|
rlm@46
|
5490
|
rlm@46
|
5491 timeout : 30,
|
rlm@46
|
5492
|
rlm@46
|
5493 loadScripts : false,
|
rlm@46
|
5494
|
rlm@46
|
5495 sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"),
|
rlm@46
|
5496
|
rlm@46
|
5497 disableCaching : false,
|
rlm@46
|
5498
|
rlm@46
|
5499 showLoadIndicator : true,
|
rlm@46
|
5500
|
rlm@46
|
5501 indicatorText : '<div class="loading-indicator">Loading...</div>'
|
rlm@46
|
5502 };
|
rlm@46
|
5503
|
rlm@46
|
5504
|
rlm@46
|
5505 Ext.Updater.updateElement = function(el, url, params, options){
|
rlm@46
|
5506 var um = Ext.get(el).getUpdater();
|
rlm@46
|
5507 Ext.apply(um, options);
|
rlm@46
|
5508 um.update(url, params, options ? options.callback : null);
|
rlm@46
|
5509 };
|
rlm@46
|
5510
|
rlm@46
|
5511 Ext.Updater.BasicRenderer = function(){};
|
rlm@46
|
5512
|
rlm@46
|
5513 Ext.Updater.BasicRenderer.prototype = {
|
rlm@46
|
5514
|
rlm@46
|
5515 render : function(el, response, updateManager, callback){
|
rlm@46
|
5516 el.update(response.responseText, updateManager.loadScripts, callback);
|
rlm@46
|
5517 }
|
rlm@46
|
5518 };
|
rlm@46
|
5519
|
rlm@46
|
5520 Ext.UpdateManager = Ext.Updater;
|
rlm@46
|
5521
|
rlm@46
|
5522
|
rlm@46
|
5523
|
rlm@46
|
5524
|
rlm@46
|
5525
|
rlm@46
|
5526 Date.parseFunctions = {count:0};
|
rlm@46
|
5527 Date.parseRegexes = [];
|
rlm@46
|
5528 Date.formatFunctions = {count:0};
|
rlm@46
|
5529
|
rlm@46
|
5530 Date.prototype.dateFormat = function(format) {
|
rlm@46
|
5531 if (Date.formatFunctions[format] == null) {
|
rlm@46
|
5532 Date.createNewFormat(format);
|
rlm@46
|
5533 }
|
rlm@46
|
5534 var func = Date.formatFunctions[format];
|
rlm@46
|
5535 return this[func]();
|
rlm@46
|
5536 };
|
rlm@46
|
5537
|
rlm@46
|
5538
|
rlm@46
|
5539
|
rlm@46
|
5540 Date.prototype.format = Date.prototype.dateFormat;
|
rlm@46
|
5541
|
rlm@46
|
5542 Date.createNewFormat = function(format) {
|
rlm@46
|
5543 var funcName = "format" + Date.formatFunctions.count++;
|
rlm@46
|
5544 Date.formatFunctions[format] = funcName;
|
rlm@46
|
5545 var code = "Date.prototype." + funcName + " = function(){return ";
|
rlm@46
|
5546 var special = false;
|
rlm@46
|
5547 var ch = '';
|
rlm@46
|
5548 for (var i = 0; i < format.length; ++i) {
|
rlm@46
|
5549 ch = format.charAt(i);
|
rlm@46
|
5550 if (!special && ch == "\\") {
|
rlm@46
|
5551 special = true;
|
rlm@46
|
5552 }
|
rlm@46
|
5553 else if (special) {
|
rlm@46
|
5554 special = false;
|
rlm@46
|
5555 code += "'" + String.escape(ch) + "' + ";
|
rlm@46
|
5556 }
|
rlm@46
|
5557 else {
|
rlm@46
|
5558 code += Date.getFormatCode(ch) + " + ";
|
rlm@46
|
5559 }
|
rlm@46
|
5560 }
|
rlm@46
|
5561 eval(code.substring(0, code.length - 3) + ";}");
|
rlm@46
|
5562 };
|
rlm@46
|
5563
|
rlm@46
|
5564
|
rlm@46
|
5565 Date.formatCodes = {
|
rlm@46
|
5566 d: "String.leftPad(this.getDate(), 2, '0')",
|
rlm@46
|
5567 D: "Date.getShortDayName(this.getDay())", j: "this.getDate()",
|
rlm@46
|
5568 l: "Date.dayNames[this.getDay()]",
|
rlm@46
|
5569 N: "(this.getDay() ? this.getDay() : 7)",
|
rlm@46
|
5570 S: "this.getSuffix()",
|
rlm@46
|
5571 w: "this.getDay()",
|
rlm@46
|
5572 z: "this.getDayOfYear()",
|
rlm@46
|
5573 W: "String.leftPad(this.getWeekOfYear(), 2, '0')",
|
rlm@46
|
5574 F: "Date.monthNames[this.getMonth()]",
|
rlm@46
|
5575 m: "String.leftPad(this.getMonth() + 1, 2, '0')",
|
rlm@46
|
5576 M: "Date.getShortMonthName(this.getMonth())", n: "(this.getMonth() + 1)",
|
rlm@46
|
5577 t: "this.getDaysInMonth()",
|
rlm@46
|
5578 L: "(this.isLeapYear() ? 1 : 0)",
|
rlm@46
|
5579 o: "(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",
|
rlm@46
|
5580 Y: "this.getFullYear()",
|
rlm@46
|
5581 y: "('' + this.getFullYear()).substring(2, 4)",
|
rlm@46
|
5582 a: "(this.getHours() < 12 ? 'am' : 'pm')",
|
rlm@46
|
5583 A: "(this.getHours() < 12 ? 'AM' : 'PM')",
|
rlm@46
|
5584 g: "((this.getHours() % 12) ? this.getHours() % 12 : 12)",
|
rlm@46
|
5585 G: "this.getHours()",
|
rlm@46
|
5586 h: "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",
|
rlm@46
|
5587 H: "String.leftPad(this.getHours(), 2, '0')",
|
rlm@46
|
5588 i: "String.leftPad(this.getMinutes(), 2, '0')",
|
rlm@46
|
5589 s: "String.leftPad(this.getSeconds(), 2, '0')",
|
rlm@46
|
5590 u: "String.leftPad(this.getMilliseconds(), 3, '0')",
|
rlm@46
|
5591 O: "this.getGMTOffset()",
|
rlm@46
|
5592 P: "this.getGMTOffset(true)",
|
rlm@46
|
5593 T: "this.getTimezone()",
|
rlm@46
|
5594 Z: "(this.getTimezoneOffset() * -60)",
|
rlm@46
|
5595 c: function() { for (var c = "Y-m-dTH:i:sP", code = [], i = 0, l = c.length; i < l; ++i) {
|
rlm@46
|
5596 var e = c.charAt(i);
|
rlm@46
|
5597 code.push(e == "T" ? "'T'" : Date.getFormatCode(e)); }
|
rlm@46
|
5598 return code.join(" + ");
|
rlm@46
|
5599 },
|
rlm@46
|
5600
|
rlm@46
|
5601 U: "Math.round(this.getTime() / 1000)"
|
rlm@46
|
5602 }
|
rlm@46
|
5603
|
rlm@46
|
5604 Date.getFormatCode = function(character) {
|
rlm@46
|
5605 var f = Date.formatCodes[character];
|
rlm@46
|
5606
|
rlm@46
|
5607 if (f) {
|
rlm@46
|
5608 f = Ext.type(f) == 'function'? f() : f;
|
rlm@46
|
5609 Date.formatCodes[character] = f; }
|
rlm@46
|
5610
|
rlm@46
|
5611 return f || ("'" + String.escape(character) + "'");
|
rlm@46
|
5612 };
|
rlm@46
|
5613
|
rlm@46
|
5614
|
rlm@46
|
5615 Date.parseDate = function(input, format) {
|
rlm@46
|
5616 if (Date.parseFunctions[format] == null) {
|
rlm@46
|
5617 Date.createParser(format);
|
rlm@46
|
5618 }
|
rlm@46
|
5619 var func = Date.parseFunctions[format];
|
rlm@46
|
5620 return Date[func](input);
|
rlm@46
|
5621 };
|
rlm@46
|
5622
|
rlm@46
|
5623 Date.createParser = function(format) {
|
rlm@46
|
5624 var funcName = "parse" + Date.parseFunctions.count++;
|
rlm@46
|
5625 var regexNum = Date.parseRegexes.length;
|
rlm@46
|
5626 var currentGroup = 1;
|
rlm@46
|
5627 Date.parseFunctions[format] = funcName;
|
rlm@46
|
5628
|
rlm@46
|
5629 var code = "Date." + funcName + " = function(input){\n"
|
rlm@46
|
5630 + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, ms = -1, o, z, u, v;\n"
|
rlm@46
|
5631 + "input = String(input);var d = new Date();\n"
|
rlm@46
|
5632 + "y = d.getFullYear();\n"
|
rlm@46
|
5633 + "m = d.getMonth();\n"
|
rlm@46
|
5634 + "d = d.getDate();\n"
|
rlm@46
|
5635 + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
|
rlm@46
|
5636 + "if (results && results.length > 0) {";
|
rlm@46
|
5637 var regex = "";
|
rlm@46
|
5638
|
rlm@46
|
5639 var special = false;
|
rlm@46
|
5640 var ch = '';
|
rlm@46
|
5641 for (var i = 0; i < format.length; ++i) {
|
rlm@46
|
5642 ch = format.charAt(i);
|
rlm@46
|
5643 if (!special && ch == "\\") {
|
rlm@46
|
5644 special = true;
|
rlm@46
|
5645 }
|
rlm@46
|
5646 else if (special) {
|
rlm@46
|
5647 special = false;
|
rlm@46
|
5648 regex += String.escape(ch);
|
rlm@46
|
5649 }
|
rlm@46
|
5650 else {
|
rlm@46
|
5651 var obj = Date.formatCodeToRegex(ch, currentGroup);
|
rlm@46
|
5652 currentGroup += obj.g;
|
rlm@46
|
5653 regex += obj.s;
|
rlm@46
|
5654 if (obj.g && obj.c) {
|
rlm@46
|
5655 code += obj.c;
|
rlm@46
|
5656 }
|
rlm@46
|
5657 }
|
rlm@46
|
5658 }
|
rlm@46
|
5659
|
rlm@46
|
5660 code += "if (u){\n"
|
rlm@46
|
5661 + "v = new Date(u * 1000);\n" + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){\n"
|
rlm@46
|
5662 + "v = new Date(y, m, d, h, i, s, ms);\n"
|
rlm@46
|
5663 + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){\n"
|
rlm@46
|
5664 + "v = new Date(y, m, d, h, i, s);\n"
|
rlm@46
|
5665 + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){\n"
|
rlm@46
|
5666 + "v = new Date(y, m, d, h, i);\n"
|
rlm@46
|
5667 + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){\n"
|
rlm@46
|
5668 + "v = new Date(y, m, d, h);\n"
|
rlm@46
|
5669 + "}else if (y >= 0 && m >= 0 && d > 0){\n"
|
rlm@46
|
5670 + "v = new Date(y, m, d);\n"
|
rlm@46
|
5671 + "}else if (y >= 0 && m >= 0){\n"
|
rlm@46
|
5672 + "v = new Date(y, m);\n"
|
rlm@46
|
5673 + "}else if (y >= 0){\n"
|
rlm@46
|
5674 + "v = new Date(y);\n"
|
rlm@46
|
5675 + "}\n}\nreturn (v && Ext.type(z || o) == 'number')?" + " (Ext.type(z) == 'number' ? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + z) :" + " v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v;\n" + "}";
|
rlm@46
|
5676
|
rlm@46
|
5677 Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
|
rlm@46
|
5678 eval(code);
|
rlm@46
|
5679 };
|
rlm@46
|
5680
|
rlm@46
|
5681 Date.parseCodes = {
|
rlm@46
|
5682
|
rlm@46
|
5683 d: {
|
rlm@46
|
5684 g:1,
|
rlm@46
|
5685 c:"d = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5686 s:"(\\d{2})" },
|
rlm@46
|
5687 j: function() {
|
rlm@46
|
5688 return Ext.applyIf({
|
rlm@46
|
5689 s:"(\\d{1,2})" }, Date.parseCodes["d"]);
|
rlm@46
|
5690 },
|
rlm@46
|
5691 D: function() {
|
rlm@46
|
5692 for (var a = [], i = 0; i < 7; a.push(Date.getShortDayName(i)), ++i); return {
|
rlm@46
|
5693 g:0,
|
rlm@46
|
5694 c:null,
|
rlm@46
|
5695 s:"(?:" + a.join("|") +")"
|
rlm@46
|
5696 }
|
rlm@46
|
5697 },
|
rlm@46
|
5698 l: function() {
|
rlm@46
|
5699 return {
|
rlm@46
|
5700 g:0,
|
rlm@46
|
5701 c:null,
|
rlm@46
|
5702 s:"(?:" + Date.dayNames.join("|") + ")"
|
rlm@46
|
5703 }
|
rlm@46
|
5704 },
|
rlm@46
|
5705 N: {
|
rlm@46
|
5706 g:0,
|
rlm@46
|
5707 c:null,
|
rlm@46
|
5708 s:"[1-7]" },
|
rlm@46
|
5709 S: {
|
rlm@46
|
5710 g:0,
|
rlm@46
|
5711 c:null,
|
rlm@46
|
5712 s:"(?:st|nd|rd|th)"
|
rlm@46
|
5713 },
|
rlm@46
|
5714 w: {
|
rlm@46
|
5715 g:0,
|
rlm@46
|
5716 c:null,
|
rlm@46
|
5717 s:"[0-6]" },
|
rlm@46
|
5718 z: {
|
rlm@46
|
5719 g:0,
|
rlm@46
|
5720 c:null,
|
rlm@46
|
5721 s:"(?:\\d{1,3}" },
|
rlm@46
|
5722 W: {
|
rlm@46
|
5723 g:0,
|
rlm@46
|
5724 c:null,
|
rlm@46
|
5725 s:"(?:\\d{2})" },
|
rlm@46
|
5726 F: function() {
|
rlm@46
|
5727 return {
|
rlm@46
|
5728 g:1,
|
rlm@46
|
5729 c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n", s:"(" + Date.monthNames.join("|") + ")"
|
rlm@46
|
5730 }
|
rlm@46
|
5731 },
|
rlm@46
|
5732 M: function() {
|
rlm@46
|
5733 for (var a = [], i = 0; i < 12; a.push(Date.getShortMonthName(i)), ++i); return Ext.applyIf({
|
rlm@46
|
5734 s:"(" + a.join("|") + ")"
|
rlm@46
|
5735 }, Date.parseCodes["F"]);
|
rlm@46
|
5736 },
|
rlm@46
|
5737 m: {
|
rlm@46
|
5738 g:1,
|
rlm@46
|
5739 c:"m = parseInt(results[{0}], 10) - 1;\n",
|
rlm@46
|
5740 s:"(\\d{2})" },
|
rlm@46
|
5741 n: function() {
|
rlm@46
|
5742 return Ext.applyIf({
|
rlm@46
|
5743 s:"(\\d{1,2})" }, Date.parseCodes["m"]);
|
rlm@46
|
5744 },
|
rlm@46
|
5745 t: {
|
rlm@46
|
5746 g:0,
|
rlm@46
|
5747 c:null,
|
rlm@46
|
5748 s:"(?:\\d{2})" },
|
rlm@46
|
5749 L: {
|
rlm@46
|
5750 g:0,
|
rlm@46
|
5751 c:null,
|
rlm@46
|
5752 s:"(?:1|0)"
|
rlm@46
|
5753 },
|
rlm@46
|
5754 o: function() {
|
rlm@46
|
5755 return Date.parseCodes["Y"];
|
rlm@46
|
5756 },
|
rlm@46
|
5757 Y: {
|
rlm@46
|
5758 g:1,
|
rlm@46
|
5759 c:"y = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5760 s:"(\\d{4})" },
|
rlm@46
|
5761 y: {
|
rlm@46
|
5762 g:1,
|
rlm@46
|
5763 c:"var ty = parseInt(results[{0}], 10);\n"
|
rlm@46
|
5764 + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n", s:"(\\d{1,2})"
|
rlm@46
|
5765 },
|
rlm@46
|
5766 a: {
|
rlm@46
|
5767 g:1,
|
rlm@46
|
5768 c:"if (results[{0}] == 'am') {\n"
|
rlm@46
|
5769 + "if (h == 12) { h = 0; }\n"
|
rlm@46
|
5770 + "} else { if (h < 12) { h += 12; }}",
|
rlm@46
|
5771 s:"(am|pm)"
|
rlm@46
|
5772 },
|
rlm@46
|
5773 A: {
|
rlm@46
|
5774 g:1,
|
rlm@46
|
5775 c:"if (results[{0}] == 'AM') {\n"
|
rlm@46
|
5776 + "if (h == 12) { h = 0; }\n"
|
rlm@46
|
5777 + "} else { if (h < 12) { h += 12; }}",
|
rlm@46
|
5778 s:"(AM|PM)"
|
rlm@46
|
5779 },
|
rlm@46
|
5780 g: function() {
|
rlm@46
|
5781 return Date.parseCodes["G"];
|
rlm@46
|
5782 },
|
rlm@46
|
5783 G: {
|
rlm@46
|
5784 g:1,
|
rlm@46
|
5785 c:"h = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5786 s:"(\\d{1,2})" },
|
rlm@46
|
5787 h: function() {
|
rlm@46
|
5788 return Date.parseCodes["H"];
|
rlm@46
|
5789 },
|
rlm@46
|
5790 H: {
|
rlm@46
|
5791 g:1,
|
rlm@46
|
5792 c:"h = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5793 s:"(\\d{2})" },
|
rlm@46
|
5794 i: {
|
rlm@46
|
5795 g:1,
|
rlm@46
|
5796 c:"i = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5797 s:"(\\d{2})" },
|
rlm@46
|
5798 s: {
|
rlm@46
|
5799 g:1,
|
rlm@46
|
5800 c:"s = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5801 s:"(\\d{2})" },
|
rlm@46
|
5802 u: {
|
rlm@46
|
5803 g:1,
|
rlm@46
|
5804 c:"ms = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5805 s:"(\\d{3})" },
|
rlm@46
|
5806 O: {
|
rlm@46
|
5807 g:1,
|
rlm@46
|
5808 c:[
|
rlm@46
|
5809 "o = results[{0}];",
|
rlm@46
|
5810 "var sn = o.substring(0,1);", "var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);", "var mn = o.substring(3,5) % 60;", "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n" ].join("\n"),
|
rlm@46
|
5811 s: "([+\-]\\d{4})" },
|
rlm@46
|
5812 P: function() {
|
rlm@46
|
5813 return Ext.applyIf({
|
rlm@46
|
5814 s: "([+\-]\\d{2}:\\d{2})" }, Date.parseCodes["O"]);
|
rlm@46
|
5815 },
|
rlm@46
|
5816 T: {
|
rlm@46
|
5817 g:0,
|
rlm@46
|
5818 c:null,
|
rlm@46
|
5819 s:"[A-Z]{1,4}" },
|
rlm@46
|
5820 Z: {
|
rlm@46
|
5821 g:1,
|
rlm@46
|
5822 c:"z = results[{0}] * 1;\n" + "z = (-43200 <= z && z <= 50400)? z : null;\n",
|
rlm@46
|
5823 s:"([+\-]?\\d{1,5})" },
|
rlm@46
|
5824 c: function() {
|
rlm@46
|
5825 var df = Date.formatCodeToRegex, calc = [];
|
rlm@46
|
5826 var arr = [
|
rlm@46
|
5827 df("Y", 1),
|
rlm@46
|
5828 df("m", 2),
|
rlm@46
|
5829 df("d", 3),
|
rlm@46
|
5830 df("h", 4),
|
rlm@46
|
5831 df("i", 5),
|
rlm@46
|
5832 df("s", 6),
|
rlm@46
|
5833 {c:"if(results[7] == 'Z'){\no = 0;\n}else{\n" + df("P", 7).c + "\n}"} ];
|
rlm@46
|
5834 for (var i = 0, l = arr.length; i < l; ++i) {
|
rlm@46
|
5835 calc.push(arr[i].c);
|
rlm@46
|
5836 }
|
rlm@46
|
5837
|
rlm@46
|
5838 return {
|
rlm@46
|
5839 g:1,
|
rlm@46
|
5840 c:calc.join(""),
|
rlm@46
|
5841 s:arr[0].s + "-" + arr[1].s + "-" + arr[2].s + "T" + arr[3].s + ":" + arr[4].s + ":" + arr[5].s + "(" + df("P", 7).s + "|Z)"
|
rlm@46
|
5842 }
|
rlm@46
|
5843 },
|
rlm@46
|
5844 U: {
|
rlm@46
|
5845 g:1,
|
rlm@46
|
5846 c:"u = parseInt(results[{0}], 10);\n",
|
rlm@46
|
5847 s:"(-?\\d+)" }
|
rlm@46
|
5848 }
|
rlm@46
|
5849
|
rlm@46
|
5850 Date.formatCodeToRegex = function(character, currentGroup) {
|
rlm@46
|
5851 var p = Date.parseCodes[character];
|
rlm@46
|
5852
|
rlm@46
|
5853 if (p) {
|
rlm@46
|
5854 p = Ext.type(p) == 'function'? p() : p;
|
rlm@46
|
5855 Date.parseCodes[character] = p;
|
rlm@46
|
5856 if (p.c) {
|
rlm@46
|
5857 p.c = String.format(p.c, currentGroup);
|
rlm@46
|
5858 }
|
rlm@46
|
5859 }
|
rlm@46
|
5860
|
rlm@46
|
5861 return p || {
|
rlm@46
|
5862 g:0,
|
rlm@46
|
5863 c:null,
|
rlm@46
|
5864 s:Ext.escapeRe(character) }
|
rlm@46
|
5865 };
|
rlm@46
|
5866
|
rlm@46
|
5867
|
rlm@46
|
5868 Date.prototype.getTimezone = function() {
|
rlm@46
|
5869 return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, "");
|
rlm@46
|
5870 };
|
rlm@46
|
5871
|
rlm@46
|
5872
|
rlm@46
|
5873 Date.prototype.getGMTOffset = function(colon) {
|
rlm@46
|
5874 return (this.getTimezoneOffset() > 0 ? "-" : "+")
|
rlm@46
|
5875 + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")
|
rlm@46
|
5876 + (colon ? ":" : "")
|
rlm@46
|
5877 + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
|
rlm@46
|
5878 };
|
rlm@46
|
5879
|
rlm@46
|
5880
|
rlm@46
|
5881 Date.prototype.getDayOfYear = function() {
|
rlm@46
|
5882 var num = 0;
|
rlm@46
|
5883 Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
|
rlm@46
|
5884 for (var i = 0; i < this.getMonth(); ++i) {
|
rlm@46
|
5885 num += Date.daysInMonth[i];
|
rlm@46
|
5886 }
|
rlm@46
|
5887 return num + this.getDate() - 1;
|
rlm@46
|
5888 };
|
rlm@46
|
5889
|
rlm@46
|
5890
|
rlm@46
|
5891 Date.prototype.getWeekOfYear = function() {
|
rlm@46
|
5892 var ms1d = 864e5; var ms7d = 7 * ms1d; var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d; var AWN = Math.floor(DC3 / 7); var Wyr = new Date(AWN * ms7d).getUTCFullYear();
|
rlm@46
|
5893 return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
|
rlm@46
|
5894 };
|
rlm@46
|
5895
|
rlm@46
|
5896
|
rlm@46
|
5897 Date.prototype.isLeapYear = function() {
|
rlm@46
|
5898 var year = this.getFullYear();
|
rlm@46
|
5899 return !!((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
|
rlm@46
|
5900 };
|
rlm@46
|
5901
|
rlm@46
|
5902
|
rlm@46
|
5903 Date.prototype.getFirstDayOfMonth = function() {
|
rlm@46
|
5904 var day = (this.getDay() - (this.getDate() - 1)) % 7;
|
rlm@46
|
5905 return (day < 0) ? (day + 7) : day;
|
rlm@46
|
5906 };
|
rlm@46
|
5907
|
rlm@46
|
5908
|
rlm@46
|
5909 Date.prototype.getLastDayOfMonth = function() {
|
rlm@46
|
5910 var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
|
rlm@46
|
5911 return (day < 0) ? (day + 7) : day;
|
rlm@46
|
5912 };
|
rlm@46
|
5913
|
rlm@46
|
5914
|
rlm@46
|
5915
|
rlm@46
|
5916 Date.prototype.getFirstDateOfMonth = function() {
|
rlm@46
|
5917 return new Date(this.getFullYear(), this.getMonth(), 1);
|
rlm@46
|
5918 };
|
rlm@46
|
5919
|
rlm@46
|
5920
|
rlm@46
|
5921 Date.prototype.getLastDateOfMonth = function() {
|
rlm@46
|
5922 return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());
|
rlm@46
|
5923 };
|
rlm@46
|
5924
|
rlm@46
|
5925 Date.prototype.getDaysInMonth = function() {
|
rlm@46
|
5926 Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
|
rlm@46
|
5927 return Date.daysInMonth[this.getMonth()];
|
rlm@46
|
5928 };
|
rlm@46
|
5929
|
rlm@46
|
5930
|
rlm@46
|
5931 Date.prototype.getSuffix = function() {
|
rlm@46
|
5932 switch (this.getDate()) {
|
rlm@46
|
5933 case 1:
|
rlm@46
|
5934 case 21:
|
rlm@46
|
5935 case 31:
|
rlm@46
|
5936 return "st";
|
rlm@46
|
5937 case 2:
|
rlm@46
|
5938 case 22:
|
rlm@46
|
5939 return "nd";
|
rlm@46
|
5940 case 3:
|
rlm@46
|
5941 case 23:
|
rlm@46
|
5942 return "rd";
|
rlm@46
|
5943 default:
|
rlm@46
|
5944 return "th";
|
rlm@46
|
5945 }
|
rlm@46
|
5946 };
|
rlm@46
|
5947
|
rlm@46
|
5948 Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
|
rlm@46
|
5949
|
rlm@46
|
5950
|
rlm@46
|
5951 Date.monthNames = [
|
rlm@46
|
5952 "January",
|
rlm@46
|
5953 "February",
|
rlm@46
|
5954 "March",
|
rlm@46
|
5955 "April",
|
rlm@46
|
5956 "May",
|
rlm@46
|
5957 "June",
|
rlm@46
|
5958 "July",
|
rlm@46
|
5959 "August",
|
rlm@46
|
5960 "September",
|
rlm@46
|
5961 "October",
|
rlm@46
|
5962 "November",
|
rlm@46
|
5963 "December"
|
rlm@46
|
5964 ];
|
rlm@46
|
5965
|
rlm@46
|
5966
|
rlm@46
|
5967 Date.getShortMonthName = function(month) {
|
rlm@46
|
5968 return Date.monthNames[month].substring(0, 3);
|
rlm@46
|
5969 }
|
rlm@46
|
5970
|
rlm@46
|
5971
|
rlm@46
|
5972 Date.dayNames = [
|
rlm@46
|
5973 "Sunday",
|
rlm@46
|
5974 "Monday",
|
rlm@46
|
5975 "Tuesday",
|
rlm@46
|
5976 "Wednesday",
|
rlm@46
|
5977 "Thursday",
|
rlm@46
|
5978 "Friday",
|
rlm@46
|
5979 "Saturday"
|
rlm@46
|
5980 ];
|
rlm@46
|
5981
|
rlm@46
|
5982
|
rlm@46
|
5983 Date.getShortDayName = function(day) {
|
rlm@46
|
5984 return Date.dayNames[day].substring(0, 3);
|
rlm@46
|
5985 }
|
rlm@46
|
5986
|
rlm@46
|
5987 Date.y2kYear = 50;
|
rlm@46
|
5988
|
rlm@46
|
5989
|
rlm@46
|
5990 Date.monthNumbers = {
|
rlm@46
|
5991 Jan:0,
|
rlm@46
|
5992 Feb:1,
|
rlm@46
|
5993 Mar:2,
|
rlm@46
|
5994 Apr:3,
|
rlm@46
|
5995 May:4,
|
rlm@46
|
5996 Jun:5,
|
rlm@46
|
5997 Jul:6,
|
rlm@46
|
5998 Aug:7,
|
rlm@46
|
5999 Sep:8,
|
rlm@46
|
6000 Oct:9,
|
rlm@46
|
6001 Nov:10,
|
rlm@46
|
6002 Dec:11
|
rlm@46
|
6003 };
|
rlm@46
|
6004
|
rlm@46
|
6005
|
rlm@46
|
6006 Date.getMonthNumber = function(name) {
|
rlm@46
|
6007 return Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()];
|
rlm@46
|
6008 }
|
rlm@46
|
6009
|
rlm@46
|
6010
|
rlm@46
|
6011 Date.prototype.clone = function() {
|
rlm@46
|
6012 return new Date(this.getTime());
|
rlm@46
|
6013 };
|
rlm@46
|
6014
|
rlm@46
|
6015
|
rlm@46
|
6016 Date.prototype.clearTime = function(clone){
|
rlm@46
|
6017 if(clone){
|
rlm@46
|
6018 return this.clone().clearTime();
|
rlm@46
|
6019 }
|
rlm@46
|
6020 this.setHours(0);
|
rlm@46
|
6021 this.setMinutes(0);
|
rlm@46
|
6022 this.setSeconds(0);
|
rlm@46
|
6023 this.setMilliseconds(0);
|
rlm@46
|
6024 return this;
|
rlm@46
|
6025 };
|
rlm@46
|
6026
|
rlm@46
|
6027 if(Ext.isSafari){
|
rlm@46
|
6028 Date.brokenSetMonth = Date.prototype.setMonth;
|
rlm@46
|
6029 Date.prototype.setMonth = function(num){
|
rlm@46
|
6030 if(num <= -1){
|
rlm@46
|
6031 var n = Math.ceil(-num);
|
rlm@46
|
6032 var back_year = Math.ceil(n/12);
|
rlm@46
|
6033 var month = (n % 12) ? 12 - n % 12 : 0 ;
|
rlm@46
|
6034 this.setFullYear(this.getFullYear() - back_year);
|
rlm@46
|
6035 return Date.brokenSetMonth.call(this, month);
|
rlm@46
|
6036 } else {
|
rlm@46
|
6037 return Date.brokenSetMonth.apply(this, arguments);
|
rlm@46
|
6038 }
|
rlm@46
|
6039 };
|
rlm@46
|
6040 }
|
rlm@46
|
6041
|
rlm@46
|
6042
|
rlm@46
|
6043 Date.MILLI = "ms";
|
rlm@46
|
6044
|
rlm@46
|
6045 Date.SECOND = "s";
|
rlm@46
|
6046
|
rlm@46
|
6047 Date.MINUTE = "mi";
|
rlm@46
|
6048
|
rlm@46
|
6049 Date.HOUR = "h";
|
rlm@46
|
6050
|
rlm@46
|
6051 Date.DAY = "d";
|
rlm@46
|
6052
|
rlm@46
|
6053 Date.MONTH = "mo";
|
rlm@46
|
6054
|
rlm@46
|
6055 Date.YEAR = "y";
|
rlm@46
|
6056
|
rlm@46
|
6057
|
rlm@46
|
6058 Date.prototype.add = function(interval, value){
|
rlm@46
|
6059 var d = this.clone();
|
rlm@46
|
6060 if (!interval || value === 0) return d;
|
rlm@46
|
6061 switch(interval.toLowerCase()){
|
rlm@46
|
6062 case Date.MILLI:
|
rlm@46
|
6063 d.setMilliseconds(this.getMilliseconds() + value);
|
rlm@46
|
6064 break;
|
rlm@46
|
6065 case Date.SECOND:
|
rlm@46
|
6066 d.setSeconds(this.getSeconds() + value);
|
rlm@46
|
6067 break;
|
rlm@46
|
6068 case Date.MINUTE:
|
rlm@46
|
6069 d.setMinutes(this.getMinutes() + value);
|
rlm@46
|
6070 break;
|
rlm@46
|
6071 case Date.HOUR:
|
rlm@46
|
6072 d.setHours(this.getHours() + value);
|
rlm@46
|
6073 break;
|
rlm@46
|
6074 case Date.DAY:
|
rlm@46
|
6075 d.setDate(this.getDate() + value);
|
rlm@46
|
6076 break;
|
rlm@46
|
6077 case Date.MONTH:
|
rlm@46
|
6078 var day = this.getDate();
|
rlm@46
|
6079 if(day > 28){
|
rlm@46
|
6080 day = Math.min(day, this.getFirstDateOfMonth().add('mo', value).getLastDateOfMonth().getDate());
|
rlm@46
|
6081 }
|
rlm@46
|
6082 d.setDate(day);
|
rlm@46
|
6083 d.setMonth(this.getMonth() + value);
|
rlm@46
|
6084 break;
|
rlm@46
|
6085 case Date.YEAR:
|
rlm@46
|
6086 d.setFullYear(this.getFullYear() + value);
|
rlm@46
|
6087 break;
|
rlm@46
|
6088 }
|
rlm@46
|
6089 return d;
|
rlm@46
|
6090 };
|
rlm@46
|
6091
|
rlm@46
|
6092
|
rlm@46
|
6093 Date.prototype.between = function(start, end){
|
rlm@46
|
6094 var t = this.getTime();
|
rlm@46
|
6095 return start.getTime() <= t && t <= end.getTime();
|
rlm@46
|
6096 }
|
rlm@46
|
6097
|
rlm@46
|
6098 Ext.util.DelayedTask = function(fn, scope, args){
|
rlm@46
|
6099 var id = null, d, t;
|
rlm@46
|
6100
|
rlm@46
|
6101 var call = function(){
|
rlm@46
|
6102 var now = new Date().getTime();
|
rlm@46
|
6103 if(now - t >= d){
|
rlm@46
|
6104 clearInterval(id);
|
rlm@46
|
6105 id = null;
|
rlm@46
|
6106 fn.apply(scope, args || []);
|
rlm@46
|
6107 }
|
rlm@46
|
6108 };
|
rlm@46
|
6109
|
rlm@46
|
6110 this.delay = function(delay, newFn, newScope, newArgs){
|
rlm@46
|
6111 if(id && delay != d){
|
rlm@46
|
6112 this.cancel();
|
rlm@46
|
6113 }
|
rlm@46
|
6114 d = delay;
|
rlm@46
|
6115 t = new Date().getTime();
|
rlm@46
|
6116 fn = newFn || fn;
|
rlm@46
|
6117 scope = newScope || scope;
|
rlm@46
|
6118 args = newArgs || args;
|
rlm@46
|
6119 if(!id){
|
rlm@46
|
6120 id = setInterval(call, d);
|
rlm@46
|
6121 }
|
rlm@46
|
6122 };
|
rlm@46
|
6123
|
rlm@46
|
6124
|
rlm@46
|
6125 this.cancel = function(){
|
rlm@46
|
6126 if(id){
|
rlm@46
|
6127 clearInterval(id);
|
rlm@46
|
6128 id = null;
|
rlm@46
|
6129 }
|
rlm@46
|
6130 };
|
rlm@46
|
6131 };
|
rlm@46
|
6132
|
rlm@46
|
6133 Ext.util.TaskRunner = function(interval){
|
rlm@46
|
6134 interval = interval || 10;
|
rlm@46
|
6135 var tasks = [], removeQueue = [];
|
rlm@46
|
6136 var id = 0;
|
rlm@46
|
6137 var running = false;
|
rlm@46
|
6138
|
rlm@46
|
6139 var stopThread = function(){
|
rlm@46
|
6140 running = false;
|
rlm@46
|
6141 clearInterval(id);
|
rlm@46
|
6142 id = 0;
|
rlm@46
|
6143 };
|
rlm@46
|
6144
|
rlm@46
|
6145 var startThread = function(){
|
rlm@46
|
6146 if(!running){
|
rlm@46
|
6147 running = true;
|
rlm@46
|
6148 id = setInterval(runTasks, interval);
|
rlm@46
|
6149 }
|
rlm@46
|
6150 };
|
rlm@46
|
6151
|
rlm@46
|
6152 var removeTask = function(t){
|
rlm@46
|
6153 removeQueue.push(t);
|
rlm@46
|
6154 if(t.onStop){
|
rlm@46
|
6155 t.onStop.apply(t.scope || t);
|
rlm@46
|
6156 }
|
rlm@46
|
6157 };
|
rlm@46
|
6158
|
rlm@46
|
6159 var runTasks = function(){
|
rlm@46
|
6160 if(removeQueue.length > 0){
|
rlm@46
|
6161 for(var i = 0, len = removeQueue.length; i < len; i++){
|
rlm@46
|
6162 tasks.remove(removeQueue[i]);
|
rlm@46
|
6163 }
|
rlm@46
|
6164 removeQueue = [];
|
rlm@46
|
6165 if(tasks.length < 1){
|
rlm@46
|
6166 stopThread();
|
rlm@46
|
6167 return;
|
rlm@46
|
6168 }
|
rlm@46
|
6169 }
|
rlm@46
|
6170 var now = new Date().getTime();
|
rlm@46
|
6171 for(var i = 0, len = tasks.length; i < len; ++i){
|
rlm@46
|
6172 var t = tasks[i];
|
rlm@46
|
6173 var itime = now - t.taskRunTime;
|
rlm@46
|
6174 if(t.interval <= itime){
|
rlm@46
|
6175 var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
|
rlm@46
|
6176 t.taskRunTime = now;
|
rlm@46
|
6177 if(rt === false || t.taskRunCount === t.repeat){
|
rlm@46
|
6178 removeTask(t);
|
rlm@46
|
6179 return;
|
rlm@46
|
6180 }
|
rlm@46
|
6181 }
|
rlm@46
|
6182 if(t.duration && t.duration <= (now - t.taskStartTime)){
|
rlm@46
|
6183 removeTask(t);
|
rlm@46
|
6184 }
|
rlm@46
|
6185 }
|
rlm@46
|
6186 };
|
rlm@46
|
6187
|
rlm@46
|
6188
|
rlm@46
|
6189 this.start = function(task){
|
rlm@46
|
6190 tasks.push(task);
|
rlm@46
|
6191 task.taskStartTime = new Date().getTime();
|
rlm@46
|
6192 task.taskRunTime = 0;
|
rlm@46
|
6193 task.taskRunCount = 0;
|
rlm@46
|
6194 startThread();
|
rlm@46
|
6195 return task;
|
rlm@46
|
6196 };
|
rlm@46
|
6197
|
rlm@46
|
6198
|
rlm@46
|
6199 this.stop = function(task){
|
rlm@46
|
6200 removeTask(task);
|
rlm@46
|
6201 return task;
|
rlm@46
|
6202 };
|
rlm@46
|
6203
|
rlm@46
|
6204
|
rlm@46
|
6205 this.stopAll = function(){
|
rlm@46
|
6206 stopThread();
|
rlm@46
|
6207 for(var i = 0, len = tasks.length; i < len; i++){
|
rlm@46
|
6208 if(tasks[i].onStop){
|
rlm@46
|
6209 tasks[i].onStop();
|
rlm@46
|
6210 }
|
rlm@46
|
6211 }
|
rlm@46
|
6212 tasks = [];
|
rlm@46
|
6213 removeQueue = [];
|
rlm@46
|
6214 };
|
rlm@46
|
6215 };
|
rlm@46
|
6216
|
rlm@46
|
6217
|
rlm@46
|
6218 Ext.TaskMgr = new Ext.util.TaskRunner();
|
rlm@46
|
6219
|
rlm@46
|
6220 Ext.util.MixedCollection = function(allowFunctions, keyFn){
|
rlm@46
|
6221 this.items = [];
|
rlm@46
|
6222 this.map = {};
|
rlm@46
|
6223 this.keys = [];
|
rlm@46
|
6224 this.length = 0;
|
rlm@46
|
6225 this.addEvents(
|
rlm@46
|
6226
|
rlm@46
|
6227 "clear",
|
rlm@46
|
6228
|
rlm@46
|
6229 "add",
|
rlm@46
|
6230
|
rlm@46
|
6231 "replace",
|
rlm@46
|
6232
|
rlm@46
|
6233 "remove",
|
rlm@46
|
6234 "sort"
|
rlm@46
|
6235 );
|
rlm@46
|
6236 this.allowFunctions = allowFunctions === true;
|
rlm@46
|
6237 if(keyFn){
|
rlm@46
|
6238 this.getKey = keyFn;
|
rlm@46
|
6239 }
|
rlm@46
|
6240 Ext.util.MixedCollection.superclass.constructor.call(this);
|
rlm@46
|
6241 };
|
rlm@46
|
6242
|
rlm@46
|
6243 Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {
|
rlm@46
|
6244 allowFunctions : false,
|
rlm@46
|
6245
|
rlm@46
|
6246
|
rlm@46
|
6247 add : function(key, o){
|
rlm@46
|
6248 if(arguments.length == 1){
|
rlm@46
|
6249 o = arguments[0];
|
rlm@46
|
6250 key = this.getKey(o);
|
rlm@46
|
6251 }
|
rlm@46
|
6252 if(typeof key == "undefined" || key === null){
|
rlm@46
|
6253 this.length++;
|
rlm@46
|
6254 this.items.push(o);
|
rlm@46
|
6255 this.keys.push(null);
|
rlm@46
|
6256 }else{
|
rlm@46
|
6257 var old = this.map[key];
|
rlm@46
|
6258 if(old){
|
rlm@46
|
6259 return this.replace(key, o);
|
rlm@46
|
6260 }
|
rlm@46
|
6261 this.length++;
|
rlm@46
|
6262 this.items.push(o);
|
rlm@46
|
6263 this.map[key] = o;
|
rlm@46
|
6264 this.keys.push(key);
|
rlm@46
|
6265 }
|
rlm@46
|
6266 this.fireEvent("add", this.length-1, o, key);
|
rlm@46
|
6267 return o;
|
rlm@46
|
6268 },
|
rlm@46
|
6269
|
rlm@46
|
6270
|
rlm@46
|
6271 getKey : function(o){
|
rlm@46
|
6272 return o.id;
|
rlm@46
|
6273 },
|
rlm@46
|
6274
|
rlm@46
|
6275
|
rlm@46
|
6276 replace : function(key, o){
|
rlm@46
|
6277 if(arguments.length == 1){
|
rlm@46
|
6278 o = arguments[0];
|
rlm@46
|
6279 key = this.getKey(o);
|
rlm@46
|
6280 }
|
rlm@46
|
6281 var old = this.item(key);
|
rlm@46
|
6282 if(typeof key == "undefined" || key === null || typeof old == "undefined"){
|
rlm@46
|
6283 return this.add(key, o);
|
rlm@46
|
6284 }
|
rlm@46
|
6285 var index = this.indexOfKey(key);
|
rlm@46
|
6286 this.items[index] = o;
|
rlm@46
|
6287 this.map[key] = o;
|
rlm@46
|
6288 this.fireEvent("replace", key, old, o);
|
rlm@46
|
6289 return o;
|
rlm@46
|
6290 },
|
rlm@46
|
6291
|
rlm@46
|
6292
|
rlm@46
|
6293 addAll : function(objs){
|
rlm@46
|
6294 if(arguments.length > 1 || Ext.isArray(objs)){
|
rlm@46
|
6295 var args = arguments.length > 1 ? arguments : objs;
|
rlm@46
|
6296 for(var i = 0, len = args.length; i < len; i++){
|
rlm@46
|
6297 this.add(args[i]);
|
rlm@46
|
6298 }
|
rlm@46
|
6299 }else{
|
rlm@46
|
6300 for(var key in objs){
|
rlm@46
|
6301 if(this.allowFunctions || typeof objs[key] != "function"){
|
rlm@46
|
6302 this.add(key, objs[key]);
|
rlm@46
|
6303 }
|
rlm@46
|
6304 }
|
rlm@46
|
6305 }
|
rlm@46
|
6306 },
|
rlm@46
|
6307
|
rlm@46
|
6308
|
rlm@46
|
6309 each : function(fn, scope){
|
rlm@46
|
6310 var items = [].concat(this.items);
|
rlm@46
|
6311 for(var i = 0, len = items.length; i < len; i++){
|
rlm@46
|
6312 if(fn.call(scope || items[i], items[i], i, len) === false){
|
rlm@46
|
6313 break;
|
rlm@46
|
6314 }
|
rlm@46
|
6315 }
|
rlm@46
|
6316 },
|
rlm@46
|
6317
|
rlm@46
|
6318
|
rlm@46
|
6319 eachKey : function(fn, scope){
|
rlm@46
|
6320 for(var i = 0, len = this.keys.length; i < len; i++){
|
rlm@46
|
6321 fn.call(scope || window, this.keys[i], this.items[i], i, len);
|
rlm@46
|
6322 }
|
rlm@46
|
6323 },
|
rlm@46
|
6324
|
rlm@46
|
6325
|
rlm@46
|
6326 find : function(fn, scope){
|
rlm@46
|
6327 for(var i = 0, len = this.items.length; i < len; i++){
|
rlm@46
|
6328 if(fn.call(scope || window, this.items[i], this.keys[i])){
|
rlm@46
|
6329 return this.items[i];
|
rlm@46
|
6330 }
|
rlm@46
|
6331 }
|
rlm@46
|
6332 return null;
|
rlm@46
|
6333 },
|
rlm@46
|
6334
|
rlm@46
|
6335
|
rlm@46
|
6336 insert : function(index, key, o){
|
rlm@46
|
6337 if(arguments.length == 2){
|
rlm@46
|
6338 o = arguments[1];
|
rlm@46
|
6339 key = this.getKey(o);
|
rlm@46
|
6340 }
|
rlm@46
|
6341 if(index >= this.length){
|
rlm@46
|
6342 return this.add(key, o);
|
rlm@46
|
6343 }
|
rlm@46
|
6344 this.length++;
|
rlm@46
|
6345 this.items.splice(index, 0, o);
|
rlm@46
|
6346 if(typeof key != "undefined" && key != null){
|
rlm@46
|
6347 this.map[key] = o;
|
rlm@46
|
6348 }
|
rlm@46
|
6349 this.keys.splice(index, 0, key);
|
rlm@46
|
6350 this.fireEvent("add", index, o, key);
|
rlm@46
|
6351 return o;
|
rlm@46
|
6352 },
|
rlm@46
|
6353
|
rlm@46
|
6354
|
rlm@46
|
6355 remove : function(o){
|
rlm@46
|
6356 return this.removeAt(this.indexOf(o));
|
rlm@46
|
6357 },
|
rlm@46
|
6358
|
rlm@46
|
6359
|
rlm@46
|
6360 removeAt : function(index){
|
rlm@46
|
6361 if(index < this.length && index >= 0){
|
rlm@46
|
6362 this.length--;
|
rlm@46
|
6363 var o = this.items[index];
|
rlm@46
|
6364 this.items.splice(index, 1);
|
rlm@46
|
6365 var key = this.keys[index];
|
rlm@46
|
6366 if(typeof key != "undefined"){
|
rlm@46
|
6367 delete this.map[key];
|
rlm@46
|
6368 }
|
rlm@46
|
6369 this.keys.splice(index, 1);
|
rlm@46
|
6370 this.fireEvent("remove", o, key);
|
rlm@46
|
6371 return o;
|
rlm@46
|
6372 }
|
rlm@46
|
6373 return false;
|
rlm@46
|
6374 },
|
rlm@46
|
6375
|
rlm@46
|
6376
|
rlm@46
|
6377 removeKey : function(key){
|
rlm@46
|
6378 return this.removeAt(this.indexOfKey(key));
|
rlm@46
|
6379 },
|
rlm@46
|
6380
|
rlm@46
|
6381
|
rlm@46
|
6382 getCount : function(){
|
rlm@46
|
6383 return this.length;
|
rlm@46
|
6384 },
|
rlm@46
|
6385
|
rlm@46
|
6386
|
rlm@46
|
6387 indexOf : function(o){
|
rlm@46
|
6388 return this.items.indexOf(o);
|
rlm@46
|
6389 },
|
rlm@46
|
6390
|
rlm@46
|
6391
|
rlm@46
|
6392 indexOfKey : function(key){
|
rlm@46
|
6393 return this.keys.indexOf(key);
|
rlm@46
|
6394 },
|
rlm@46
|
6395
|
rlm@46
|
6396
|
rlm@46
|
6397 item : function(key){
|
rlm@46
|
6398 var item = typeof this.map[key] != "undefined" ? this.map[key] : this.items[key];
|
rlm@46
|
6399 return typeof item != 'function' || this.allowFunctions ? item : null;
|
rlm@46
|
6400 },
|
rlm@46
|
6401
|
rlm@46
|
6402
|
rlm@46
|
6403 itemAt : function(index){
|
rlm@46
|
6404 return this.items[index];
|
rlm@46
|
6405 },
|
rlm@46
|
6406
|
rlm@46
|
6407
|
rlm@46
|
6408 key : function(key){
|
rlm@46
|
6409 return this.map[key];
|
rlm@46
|
6410 },
|
rlm@46
|
6411
|
rlm@46
|
6412
|
rlm@46
|
6413 contains : function(o){
|
rlm@46
|
6414 return this.indexOf(o) != -1;
|
rlm@46
|
6415 },
|
rlm@46
|
6416
|
rlm@46
|
6417
|
rlm@46
|
6418 containsKey : function(key){
|
rlm@46
|
6419 return typeof this.map[key] != "undefined";
|
rlm@46
|
6420 },
|
rlm@46
|
6421
|
rlm@46
|
6422
|
rlm@46
|
6423 clear : function(){
|
rlm@46
|
6424 this.length = 0;
|
rlm@46
|
6425 this.items = [];
|
rlm@46
|
6426 this.keys = [];
|
rlm@46
|
6427 this.map = {};
|
rlm@46
|
6428 this.fireEvent("clear");
|
rlm@46
|
6429 },
|
rlm@46
|
6430
|
rlm@46
|
6431
|
rlm@46
|
6432 first : function(){
|
rlm@46
|
6433 return this.items[0];
|
rlm@46
|
6434 },
|
rlm@46
|
6435
|
rlm@46
|
6436
|
rlm@46
|
6437 last : function(){
|
rlm@46
|
6438 return this.items[this.length-1];
|
rlm@46
|
6439 },
|
rlm@46
|
6440
|
rlm@46
|
6441
|
rlm@46
|
6442 _sort : function(property, dir, fn){
|
rlm@46
|
6443 var dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1;
|
rlm@46
|
6444 fn = fn || function(a, b){
|
rlm@46
|
6445 return a-b;
|
rlm@46
|
6446 };
|
rlm@46
|
6447 var c = [], k = this.keys, items = this.items;
|
rlm@46
|
6448 for(var i = 0, len = items.length; i < len; i++){
|
rlm@46
|
6449 c[c.length] = {key: k[i], value: items[i], index: i};
|
rlm@46
|
6450 }
|
rlm@46
|
6451 c.sort(function(a, b){
|
rlm@46
|
6452 var v = fn(a[property], b[property]) * dsc;
|
rlm@46
|
6453 if(v == 0){
|
rlm@46
|
6454 v = (a.index < b.index ? -1 : 1);
|
rlm@46
|
6455 }
|
rlm@46
|
6456 return v;
|
rlm@46
|
6457 });
|
rlm@46
|
6458 for(var i = 0, len = c.length; i < len; i++){
|
rlm@46
|
6459 items[i] = c[i].value;
|
rlm@46
|
6460 k[i] = c[i].key;
|
rlm@46
|
6461 }
|
rlm@46
|
6462 this.fireEvent("sort", this);
|
rlm@46
|
6463 },
|
rlm@46
|
6464
|
rlm@46
|
6465
|
rlm@46
|
6466 sort : function(dir, fn){
|
rlm@46
|
6467 this._sort("value", dir, fn);
|
rlm@46
|
6468 },
|
rlm@46
|
6469
|
rlm@46
|
6470
|
rlm@46
|
6471 keySort : function(dir, fn){
|
rlm@46
|
6472 this._sort("key", dir, fn || function(a, b){
|
rlm@46
|
6473 return String(a).toUpperCase()-String(b).toUpperCase();
|
rlm@46
|
6474 });
|
rlm@46
|
6475 },
|
rlm@46
|
6476
|
rlm@46
|
6477
|
rlm@46
|
6478 getRange : function(start, end){
|
rlm@46
|
6479 var items = this.items;
|
rlm@46
|
6480 if(items.length < 1){
|
rlm@46
|
6481 return [];
|
rlm@46
|
6482 }
|
rlm@46
|
6483 start = start || 0;
|
rlm@46
|
6484 end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1);
|
rlm@46
|
6485 var r = [];
|
rlm@46
|
6486 if(start <= end){
|
rlm@46
|
6487 for(var i = start; i <= end; i++) {
|
rlm@46
|
6488 r[r.length] = items[i];
|
rlm@46
|
6489 }
|
rlm@46
|
6490 }else{
|
rlm@46
|
6491 for(var i = start; i >= end; i--) {
|
rlm@46
|
6492 r[r.length] = items[i];
|
rlm@46
|
6493 }
|
rlm@46
|
6494 }
|
rlm@46
|
6495 return r;
|
rlm@46
|
6496 },
|
rlm@46
|
6497
|
rlm@46
|
6498
|
rlm@46
|
6499 filter : function(property, value, anyMatch, caseSensitive){
|
rlm@46
|
6500 if(Ext.isEmpty(value, false)){
|
rlm@46
|
6501 return this.clone();
|
rlm@46
|
6502 }
|
rlm@46
|
6503 value = this.createValueMatcher(value, anyMatch, caseSensitive);
|
rlm@46
|
6504 return this.filterBy(function(o){
|
rlm@46
|
6505 return o && value.test(o[property]);
|
rlm@46
|
6506 });
|
rlm@46
|
6507 },
|
rlm@46
|
6508
|
rlm@46
|
6509
|
rlm@46
|
6510 filterBy : function(fn, scope){
|
rlm@46
|
6511 var r = new Ext.util.MixedCollection();
|
rlm@46
|
6512 r.getKey = this.getKey;
|
rlm@46
|
6513 var k = this.keys, it = this.items;
|
rlm@46
|
6514 for(var i = 0, len = it.length; i < len; i++){
|
rlm@46
|
6515 if(fn.call(scope||this, it[i], k[i])){
|
rlm@46
|
6516 r.add(k[i], it[i]);
|
rlm@46
|
6517 }
|
rlm@46
|
6518 }
|
rlm@46
|
6519 return r;
|
rlm@46
|
6520 },
|
rlm@46
|
6521
|
rlm@46
|
6522
|
rlm@46
|
6523 findIndex : function(property, value, start, anyMatch, caseSensitive){
|
rlm@46
|
6524 if(Ext.isEmpty(value, false)){
|
rlm@46
|
6525 return -1;
|
rlm@46
|
6526 }
|
rlm@46
|
6527 value = this.createValueMatcher(value, anyMatch, caseSensitive);
|
rlm@46
|
6528 return this.findIndexBy(function(o){
|
rlm@46
|
6529 return o && value.test(o[property]);
|
rlm@46
|
6530 }, null, start);
|
rlm@46
|
6531 },
|
rlm@46
|
6532
|
rlm@46
|
6533
|
rlm@46
|
6534 findIndexBy : function(fn, scope, start){
|
rlm@46
|
6535 var k = this.keys, it = this.items;
|
rlm@46
|
6536 for(var i = (start||0), len = it.length; i < len; i++){
|
rlm@46
|
6537 if(fn.call(scope||this, it[i], k[i])){
|
rlm@46
|
6538 return i;
|
rlm@46
|
6539 }
|
rlm@46
|
6540 }
|
rlm@46
|
6541 if(typeof start == 'number' && start > 0){
|
rlm@46
|
6542 for(var i = 0; i < start; i++){
|
rlm@46
|
6543 if(fn.call(scope||this, it[i], k[i])){
|
rlm@46
|
6544 return i;
|
rlm@46
|
6545 }
|
rlm@46
|
6546 }
|
rlm@46
|
6547 }
|
rlm@46
|
6548 return -1;
|
rlm@46
|
6549 },
|
rlm@46
|
6550
|
rlm@46
|
6551
|
rlm@46
|
6552 createValueMatcher : function(value, anyMatch, caseSensitive){
|
rlm@46
|
6553 if(!value.exec){
|
rlm@46
|
6554 value = String(value);
|
rlm@46
|
6555 value = new RegExp((anyMatch === true ? '' : '^') + Ext.escapeRe(value), caseSensitive ? '' : 'i');
|
rlm@46
|
6556 }
|
rlm@46
|
6557 return value;
|
rlm@46
|
6558 },
|
rlm@46
|
6559
|
rlm@46
|
6560
|
rlm@46
|
6561 clone : function(){
|
rlm@46
|
6562 var r = new Ext.util.MixedCollection();
|
rlm@46
|
6563 var k = this.keys, it = this.items;
|
rlm@46
|
6564 for(var i = 0, len = it.length; i < len; i++){
|
rlm@46
|
6565 r.add(k[i], it[i]);
|
rlm@46
|
6566 }
|
rlm@46
|
6567 r.getKey = this.getKey;
|
rlm@46
|
6568 return r;
|
rlm@46
|
6569 }
|
rlm@46
|
6570 });
|
rlm@46
|
6571
|
rlm@46
|
6572 Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
|
rlm@46
|
6573
|
rlm@46
|
6574 Ext.util.JSON = new (function(){
|
rlm@46
|
6575 var useHasOwn = !!{}.hasOwnProperty;
|
rlm@46
|
6576
|
rlm@46
|
6577
|
rlm@46
|
6578 var pad = function(n) {
|
rlm@46
|
6579 return n < 10 ? "0" + n : n;
|
rlm@46
|
6580 };
|
rlm@46
|
6581
|
rlm@46
|
6582 var m = {
|
rlm@46
|
6583 "\b": '\\b',
|
rlm@46
|
6584 "\t": '\\t',
|
rlm@46
|
6585 "\n": '\\n',
|
rlm@46
|
6586 "\f": '\\f',
|
rlm@46
|
6587 "\r": '\\r',
|
rlm@46
|
6588 '"' : '\\"',
|
rlm@46
|
6589 "\\": '\\\\'
|
rlm@46
|
6590 };
|
rlm@46
|
6591
|
rlm@46
|
6592 var encodeString = function(s){
|
rlm@46
|
6593 if (/["\\\x00-\x1f]/.test(s)) {
|
rlm@46
|
6594 return '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) {
|
rlm@46
|
6595 var c = m[b];
|
rlm@46
|
6596 if(c){
|
rlm@46
|
6597 return c;
|
rlm@46
|
6598 }
|
rlm@46
|
6599 c = b.charCodeAt();
|
rlm@46
|
6600 return "\\u00" +
|
rlm@46
|
6601 Math.floor(c / 16).toString(16) +
|
rlm@46
|
6602 (c % 16).toString(16);
|
rlm@46
|
6603 }) + '"';
|
rlm@46
|
6604 }
|
rlm@46
|
6605 return '"' + s + '"';
|
rlm@46
|
6606 };
|
rlm@46
|
6607
|
rlm@46
|
6608 var encodeArray = function(o){
|
rlm@46
|
6609 var a = ["["], b, i, l = o.length, v;
|
rlm@46
|
6610 for (i = 0; i < l; i += 1) {
|
rlm@46
|
6611 v = o[i];
|
rlm@46
|
6612 switch (typeof v) {
|
rlm@46
|
6613 case "undefined":
|
rlm@46
|
6614 case "function":
|
rlm@46
|
6615 case "unknown":
|
rlm@46
|
6616 break;
|
rlm@46
|
6617 default:
|
rlm@46
|
6618 if (b) {
|
rlm@46
|
6619 a.push(',');
|
rlm@46
|
6620 }
|
rlm@46
|
6621 a.push(v === null ? "null" : Ext.util.JSON.encode(v));
|
rlm@46
|
6622 b = true;
|
rlm@46
|
6623 }
|
rlm@46
|
6624 }
|
rlm@46
|
6625 a.push("]");
|
rlm@46
|
6626 return a.join("");
|
rlm@46
|
6627 };
|
rlm@46
|
6628
|
rlm@46
|
6629 this.encodeDate = function(o){
|
rlm@46
|
6630 return '"' + o.getFullYear() + "-" +
|
rlm@46
|
6631 pad(o.getMonth() + 1) + "-" +
|
rlm@46
|
6632 pad(o.getDate()) + "T" +
|
rlm@46
|
6633 pad(o.getHours()) + ":" +
|
rlm@46
|
6634 pad(o.getMinutes()) + ":" +
|
rlm@46
|
6635 pad(o.getSeconds()) + '"';
|
rlm@46
|
6636 };
|
rlm@46
|
6637
|
rlm@46
|
6638
|
rlm@46
|
6639 this.encode = function(o){
|
rlm@46
|
6640 if(typeof o == "undefined" || o === null){
|
rlm@46
|
6641 return "null";
|
rlm@46
|
6642 }else if(Ext.isArray(o)){
|
rlm@46
|
6643 return encodeArray(o);
|
rlm@46
|
6644 }else if(Ext.isDate(o)){
|
rlm@46
|
6645 return Ext.util.JSON.encodeDate(o);
|
rlm@46
|
6646 }else if(typeof o == "string"){
|
rlm@46
|
6647 return encodeString(o);
|
rlm@46
|
6648 }else if(typeof o == "number"){
|
rlm@46
|
6649 return isFinite(o) ? String(o) : "null";
|
rlm@46
|
6650 }else if(typeof o == "boolean"){
|
rlm@46
|
6651 return String(o);
|
rlm@46
|
6652 }else {
|
rlm@46
|
6653 var a = ["{"], b, i, v;
|
rlm@46
|
6654 for (i in o) {
|
rlm@46
|
6655 if(!useHasOwn || o.hasOwnProperty(i)) {
|
rlm@46
|
6656 v = o[i];
|
rlm@46
|
6657 switch (typeof v) {
|
rlm@46
|
6658 case "undefined":
|
rlm@46
|
6659 case "function":
|
rlm@46
|
6660 case "unknown":
|
rlm@46
|
6661 break;
|
rlm@46
|
6662 default:
|
rlm@46
|
6663 if(b){
|
rlm@46
|
6664 a.push(',');
|
rlm@46
|
6665 }
|
rlm@46
|
6666 a.push(this.encode(i), ":",
|
rlm@46
|
6667 v === null ? "null" : this.encode(v));
|
rlm@46
|
6668 b = true;
|
rlm@46
|
6669 }
|
rlm@46
|
6670 }
|
rlm@46
|
6671 }
|
rlm@46
|
6672 a.push("}");
|
rlm@46
|
6673 return a.join("");
|
rlm@46
|
6674 }
|
rlm@46
|
6675 };
|
rlm@46
|
6676
|
rlm@46
|
6677
|
rlm@46
|
6678 this.decode = function(json){
|
rlm@46
|
6679 return eval("(" + json + ')');
|
rlm@46
|
6680 };
|
rlm@46
|
6681 })();
|
rlm@46
|
6682
|
rlm@46
|
6683 Ext.encode = Ext.util.JSON.encode;
|
rlm@46
|
6684
|
rlm@46
|
6685 Ext.decode = Ext.util.JSON.decode;
|
rlm@46
|
6686
|
rlm@46
|
6687
|
rlm@46
|
6688 Ext.util.Format = function(){
|
rlm@46
|
6689 var trimRe = /^\s+|\s+$/g;
|
rlm@46
|
6690 return {
|
rlm@46
|
6691
|
rlm@46
|
6692 ellipsis : function(value, len){
|
rlm@46
|
6693 if(value && value.length > len){
|
rlm@46
|
6694 return value.substr(0, len-3)+"...";
|
rlm@46
|
6695 }
|
rlm@46
|
6696 return value;
|
rlm@46
|
6697 },
|
rlm@46
|
6698
|
rlm@46
|
6699
|
rlm@46
|
6700 undef : function(value){
|
rlm@46
|
6701 return value !== undefined ? value : "";
|
rlm@46
|
6702 },
|
rlm@46
|
6703
|
rlm@46
|
6704
|
rlm@46
|
6705 defaultValue : function(value, defaultValue){
|
rlm@46
|
6706 return value !== undefined && value !== '' ? value : defaultValue;
|
rlm@46
|
6707 },
|
rlm@46
|
6708
|
rlm@46
|
6709
|
rlm@46
|
6710 htmlEncode : function(value){
|
rlm@46
|
6711 return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """);
|
rlm@46
|
6712 },
|
rlm@46
|
6713
|
rlm@46
|
6714
|
rlm@46
|
6715 htmlDecode : function(value){
|
rlm@46
|
6716 return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, '"');
|
rlm@46
|
6717 },
|
rlm@46
|
6718
|
rlm@46
|
6719
|
rlm@46
|
6720 trim : function(value){
|
rlm@46
|
6721 return String(value).replace(trimRe, "");
|
rlm@46
|
6722 },
|
rlm@46
|
6723
|
rlm@46
|
6724
|
rlm@46
|
6725 substr : function(value, start, length){
|
rlm@46
|
6726 return String(value).substr(start, length);
|
rlm@46
|
6727 },
|
rlm@46
|
6728
|
rlm@46
|
6729
|
rlm@46
|
6730 lowercase : function(value){
|
rlm@46
|
6731 return String(value).toLowerCase();
|
rlm@46
|
6732 },
|
rlm@46
|
6733
|
rlm@46
|
6734
|
rlm@46
|
6735 uppercase : function(value){
|
rlm@46
|
6736 return String(value).toUpperCase();
|
rlm@46
|
6737 },
|
rlm@46
|
6738
|
rlm@46
|
6739
|
rlm@46
|
6740 capitalize : function(value){
|
rlm@46
|
6741 return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
|
rlm@46
|
6742 },
|
rlm@46
|
6743
|
rlm@46
|
6744
|
rlm@46
|
6745 call : function(value, fn){
|
rlm@46
|
6746 if(arguments.length > 2){
|
rlm@46
|
6747 var args = Array.prototype.slice.call(arguments, 2);
|
rlm@46
|
6748 args.unshift(value);
|
rlm@46
|
6749 return eval(fn).apply(window, args);
|
rlm@46
|
6750 }else{
|
rlm@46
|
6751 return eval(fn).call(window, value);
|
rlm@46
|
6752 }
|
rlm@46
|
6753 },
|
rlm@46
|
6754
|
rlm@46
|
6755
|
rlm@46
|
6756 usMoney : function(v){
|
rlm@46
|
6757 v = (Math.round((v-0)*100))/100;
|
rlm@46
|
6758 v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
|
rlm@46
|
6759 v = String(v);
|
rlm@46
|
6760 var ps = v.split('.');
|
rlm@46
|
6761 var whole = ps[0];
|
rlm@46
|
6762 var sub = ps[1] ? '.'+ ps[1] : '.00';
|
rlm@46
|
6763 var r = /(\d+)(\d{3})/;
|
rlm@46
|
6764 while (r.test(whole)) {
|
rlm@46
|
6765 whole = whole.replace(r, '$1' + ',' + '$2');
|
rlm@46
|
6766 }
|
rlm@46
|
6767 v = whole + sub;
|
rlm@46
|
6768 if(v.charAt(0) == '-'){
|
rlm@46
|
6769 return '-$' + v.substr(1);
|
rlm@46
|
6770 }
|
rlm@46
|
6771 return "$" + v;
|
rlm@46
|
6772 },
|
rlm@46
|
6773
|
rlm@46
|
6774
|
rlm@46
|
6775 date : function(v, format){
|
rlm@46
|
6776 if(!v){
|
rlm@46
|
6777 return "";
|
rlm@46
|
6778 }
|
rlm@46
|
6779 if(!Ext.isDate(v)){
|
rlm@46
|
6780 v = new Date(Date.parse(v));
|
rlm@46
|
6781 }
|
rlm@46
|
6782 return v.dateFormat(format || "m/d/Y");
|
rlm@46
|
6783 },
|
rlm@46
|
6784
|
rlm@46
|
6785
|
rlm@46
|
6786 dateRenderer : function(format){
|
rlm@46
|
6787 return function(v){
|
rlm@46
|
6788 return Ext.util.Format.date(v, format);
|
rlm@46
|
6789 };
|
rlm@46
|
6790 },
|
rlm@46
|
6791
|
rlm@46
|
6792
|
rlm@46
|
6793 stripTagsRE : /<\/?[^>]+>/gi,
|
rlm@46
|
6794
|
rlm@46
|
6795
|
rlm@46
|
6796 stripTags : function(v){
|
rlm@46
|
6797 return !v ? v : String(v).replace(this.stripTagsRE, "");
|
rlm@46
|
6798 },
|
rlm@46
|
6799
|
rlm@46
|
6800 stripScriptsRe : /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,
|
rlm@46
|
6801
|
rlm@46
|
6802
|
rlm@46
|
6803 stripScripts : function(v){
|
rlm@46
|
6804 return !v ? v : String(v).replace(this.stripScriptsRe, "");
|
rlm@46
|
6805 },
|
rlm@46
|
6806
|
rlm@46
|
6807
|
rlm@46
|
6808 fileSize : function(size){
|
rlm@46
|
6809 if(size < 1024) {
|
rlm@46
|
6810 return size + " bytes";
|
rlm@46
|
6811 } else if(size < 1048576) {
|
rlm@46
|
6812 return (Math.round(((size*10) / 1024))/10) + " KB";
|
rlm@46
|
6813 } else {
|
rlm@46
|
6814 return (Math.round(((size*10) / 1048576))/10) + " MB";
|
rlm@46
|
6815 }
|
rlm@46
|
6816 },
|
rlm@46
|
6817
|
rlm@46
|
6818 math : function(){
|
rlm@46
|
6819 var fns = {};
|
rlm@46
|
6820 return function(v, a){
|
rlm@46
|
6821 if(!fns[a]){
|
rlm@46
|
6822 fns[a] = new Function('v', 'return v ' + a + ';');
|
rlm@46
|
6823 }
|
rlm@46
|
6824 return fns[a](v);
|
rlm@46
|
6825 }
|
rlm@46
|
6826 }()
|
rlm@46
|
6827 };
|
rlm@46
|
6828 }();
|
rlm@46
|
6829
|
rlm@46
|
6830 Ext.XTemplate = function(){
|
rlm@46
|
6831 Ext.XTemplate.superclass.constructor.apply(this, arguments);
|
rlm@46
|
6832 var s = this.html;
|
rlm@46
|
6833
|
rlm@46
|
6834 s = ['<tpl>', s, '</tpl>'].join('');
|
rlm@46
|
6835
|
rlm@46
|
6836 var re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
|
rlm@46
|
6837
|
rlm@46
|
6838 var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;
|
rlm@46
|
6839 var ifRe = /^<tpl\b[^>]*?if="(.*?)"/;
|
rlm@46
|
6840 var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;
|
rlm@46
|
6841 var m, id = 0;
|
rlm@46
|
6842 var tpls = [];
|
rlm@46
|
6843
|
rlm@46
|
6844 while(m = s.match(re)){
|
rlm@46
|
6845 var m2 = m[0].match(nameRe);
|
rlm@46
|
6846 var m3 = m[0].match(ifRe);
|
rlm@46
|
6847 var m4 = m[0].match(execRe);
|
rlm@46
|
6848 var exp = null, fn = null, exec = null;
|
rlm@46
|
6849 var name = m2 && m2[1] ? m2[1] : '';
|
rlm@46
|
6850 if(m3){
|
rlm@46
|
6851 exp = m3 && m3[1] ? m3[1] : null;
|
rlm@46
|
6852 if(exp){
|
rlm@46
|
6853 fn = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ return '+(Ext.util.Format.htmlDecode(exp))+'; }');
|
rlm@46
|
6854 }
|
rlm@46
|
6855 }
|
rlm@46
|
6856 if(m4){
|
rlm@46
|
6857 exp = m4 && m4[1] ? m4[1] : null;
|
rlm@46
|
6858 if(exp){
|
rlm@46
|
6859 exec = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ '+(Ext.util.Format.htmlDecode(exp))+'; }');
|
rlm@46
|
6860 }
|
rlm@46
|
6861 }
|
rlm@46
|
6862 if(name){
|
rlm@46
|
6863 switch(name){
|
rlm@46
|
6864 case '.': name = new Function('values', 'parent', 'with(values){ return values; }'); break;
|
rlm@46
|
6865 case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
|
rlm@46
|
6866 default: name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
|
rlm@46
|
6867 }
|
rlm@46
|
6868 }
|
rlm@46
|
6869 tpls.push({
|
rlm@46
|
6870 id: id,
|
rlm@46
|
6871 target: name,
|
rlm@46
|
6872 exec: exec,
|
rlm@46
|
6873 test: fn,
|
rlm@46
|
6874 body: m[1]||''
|
rlm@46
|
6875 });
|
rlm@46
|
6876 s = s.replace(m[0], '{xtpl'+ id + '}');
|
rlm@46
|
6877 ++id;
|
rlm@46
|
6878 }
|
rlm@46
|
6879 for(var i = tpls.length-1; i >= 0; --i){
|
rlm@46
|
6880 this.compileTpl(tpls[i]);
|
rlm@46
|
6881 }
|
rlm@46
|
6882 this.master = tpls[tpls.length-1];
|
rlm@46
|
6883 this.tpls = tpls;
|
rlm@46
|
6884 };
|
rlm@46
|
6885 Ext.extend(Ext.XTemplate, Ext.Template, {
|
rlm@46
|
6886 re : /\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,
|
rlm@46
|
6887 codeRe : /\{\[((?:\\\]|.|\n)*?)\]\}/g,
|
rlm@46
|
6888
|
rlm@46
|
6889 applySubTemplate : function(id, values, parent, xindex, xcount){
|
rlm@46
|
6890 var t = this.tpls[id];
|
rlm@46
|
6891 if(t.test && !t.test.call(this, values, parent, xindex, xcount)){
|
rlm@46
|
6892 return '';
|
rlm@46
|
6893 }
|
rlm@46
|
6894 if(t.exec && t.exec.call(this, values, parent, xindex, xcount)){
|
rlm@46
|
6895 return '';
|
rlm@46
|
6896 }
|
rlm@46
|
6897 var vs = t.target ? t.target.call(this, values, parent) : values;
|
rlm@46
|
6898 parent = t.target ? values : parent;
|
rlm@46
|
6899 if(t.target && Ext.isArray(vs)){
|
rlm@46
|
6900 var buf = [];
|
rlm@46
|
6901 for(var i = 0, len = vs.length; i < len; i++){
|
rlm@46
|
6902 buf[buf.length] = t.compiled.call(this, vs[i], parent, i+1, len);
|
rlm@46
|
6903 }
|
rlm@46
|
6904 return buf.join('');
|
rlm@46
|
6905 }
|
rlm@46
|
6906 return t.compiled.call(this, vs, parent, xindex, xcount);
|
rlm@46
|
6907 },
|
rlm@46
|
6908
|
rlm@46
|
6909 compileTpl : function(tpl){
|
rlm@46
|
6910 var fm = Ext.util.Format;
|
rlm@46
|
6911 var useF = this.disableFormats !== true;
|
rlm@46
|
6912 var sep = Ext.isGecko ? "+" : ",";
|
rlm@46
|
6913 var fn = function(m, name, format, args, math){
|
rlm@46
|
6914 if(name.substr(0, 4) == 'xtpl'){
|
rlm@46
|
6915 return "'"+ sep +'this.applySubTemplate('+name.substr(4)+', values, parent, xindex, xcount)'+sep+"'";
|
rlm@46
|
6916 }
|
rlm@46
|
6917 var v;
|
rlm@46
|
6918 if(name === '.'){
|
rlm@46
|
6919 v = 'values';
|
rlm@46
|
6920 }else if(name === '#'){
|
rlm@46
|
6921 v = 'xindex';
|
rlm@46
|
6922 }else if(name.indexOf('.') != -1){
|
rlm@46
|
6923 v = name;
|
rlm@46
|
6924 }else{
|
rlm@46
|
6925 v = "values['" + name + "']";
|
rlm@46
|
6926 }
|
rlm@46
|
6927 if(math){
|
rlm@46
|
6928 v = '(' + v + math + ')';
|
rlm@46
|
6929 }
|
rlm@46
|
6930 if(format && useF){
|
rlm@46
|
6931 args = args ? ',' + args : "";
|
rlm@46
|
6932 if(format.substr(0, 5) != "this."){
|
rlm@46
|
6933 format = "fm." + format + '(';
|
rlm@46
|
6934 }else{
|
rlm@46
|
6935 format = 'this.call("'+ format.substr(5) + '", ';
|
rlm@46
|
6936 args = ", values";
|
rlm@46
|
6937 }
|
rlm@46
|
6938 }else{
|
rlm@46
|
6939 args= ''; format = "("+v+" === undefined ? '' : ";
|
rlm@46
|
6940 }
|
rlm@46
|
6941 return "'"+ sep + format + v + args + ")"+sep+"'";
|
rlm@46
|
6942 };
|
rlm@46
|
6943 var codeFn = function(m, code){
|
rlm@46
|
6944 return "'"+ sep +'('+code+')'+sep+"'";
|
rlm@46
|
6945 };
|
rlm@46
|
6946
|
rlm@46
|
6947 var body;
|
rlm@46
|
6948 if(Ext.isGecko){
|
rlm@46
|
6949 body = "tpl.compiled = function(values, parent, xindex, xcount){ return '" +
|
rlm@46
|
6950 tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn) +
|
rlm@46
|
6951 "';};";
|
rlm@46
|
6952 }else{
|
rlm@46
|
6953 body = ["tpl.compiled = function(values, parent, xindex, xcount){ return ['"];
|
rlm@46
|
6954 body.push(tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn));
|
rlm@46
|
6955 body.push("'].join('');};");
|
rlm@46
|
6956 body = body.join('');
|
rlm@46
|
6957 }
|
rlm@46
|
6958 eval(body);
|
rlm@46
|
6959 return this;
|
rlm@46
|
6960 },
|
rlm@46
|
6961
|
rlm@46
|
6962
|
rlm@46
|
6963 applyTemplate : function(values){
|
rlm@46
|
6964 return this.master.compiled.call(this, values, {}, 1, 1);
|
rlm@46
|
6965 },
|
rlm@46
|
6966
|
rlm@46
|
6967
|
rlm@46
|
6968 compile : function(){return this;}
|
rlm@46
|
6969
|
rlm@46
|
6970
|
rlm@46
|
6971
|
rlm@46
|
6972
|
rlm@46
|
6973
|
rlm@46
|
6974 });
|
rlm@46
|
6975
|
rlm@46
|
6976 Ext.XTemplate.prototype.apply = Ext.XTemplate.prototype.applyTemplate;
|
rlm@46
|
6977
|
rlm@46
|
6978
|
rlm@46
|
6979 Ext.XTemplate.from = function(el){
|
rlm@46
|
6980 el = Ext.getDom(el);
|
rlm@46
|
6981 return new Ext.XTemplate(el.value || el.innerHTML);
|
rlm@46
|
6982 };
|
rlm@46
|
6983
|
rlm@46
|
6984 Ext.util.CSS = function(){
|
rlm@46
|
6985 var rules = null;
|
rlm@46
|
6986 var doc = document;
|
rlm@46
|
6987
|
rlm@46
|
6988 var camelRe = /(-[a-z])/gi;
|
rlm@46
|
6989 var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
|
rlm@46
|
6990
|
rlm@46
|
6991 return {
|
rlm@46
|
6992
|
rlm@46
|
6993 createStyleSheet : function(cssText, id){
|
rlm@46
|
6994 var ss;
|
rlm@46
|
6995 var head = doc.getElementsByTagName("head")[0];
|
rlm@46
|
6996 var rules = doc.createElement("style");
|
rlm@46
|
6997 rules.setAttribute("type", "text/css");
|
rlm@46
|
6998 if(id){
|
rlm@46
|
6999 rules.setAttribute("id", id);
|
rlm@46
|
7000 }
|
rlm@46
|
7001 if(Ext.isIE){
|
rlm@46
|
7002 head.appendChild(rules);
|
rlm@46
|
7003 ss = rules.styleSheet;
|
rlm@46
|
7004 ss.cssText = cssText;
|
rlm@46
|
7005 }else{
|
rlm@46
|
7006 try{
|
rlm@46
|
7007 rules.appendChild(doc.createTextNode(cssText));
|
rlm@46
|
7008 }catch(e){
|
rlm@46
|
7009 rules.cssText = cssText;
|
rlm@46
|
7010 }
|
rlm@46
|
7011 head.appendChild(rules);
|
rlm@46
|
7012 ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]);
|
rlm@46
|
7013 }
|
rlm@46
|
7014 this.cacheStyleSheet(ss);
|
rlm@46
|
7015 return ss;
|
rlm@46
|
7016 },
|
rlm@46
|
7017
|
rlm@46
|
7018
|
rlm@46
|
7019 removeStyleSheet : function(id){
|
rlm@46
|
7020 var existing = doc.getElementById(id);
|
rlm@46
|
7021 if(existing){
|
rlm@46
|
7022 existing.parentNode.removeChild(existing);
|
rlm@46
|
7023 }
|
rlm@46
|
7024 },
|
rlm@46
|
7025
|
rlm@46
|
7026
|
rlm@46
|
7027 swapStyleSheet : function(id, url){
|
rlm@46
|
7028 this.removeStyleSheet(id);
|
rlm@46
|
7029 var ss = doc.createElement("link");
|
rlm@46
|
7030 ss.setAttribute("rel", "stylesheet");
|
rlm@46
|
7031 ss.setAttribute("type", "text/css");
|
rlm@46
|
7032 ss.setAttribute("id", id);
|
rlm@46
|
7033 ss.setAttribute("href", url);
|
rlm@46
|
7034 doc.getElementsByTagName("head")[0].appendChild(ss);
|
rlm@46
|
7035 },
|
rlm@46
|
7036
|
rlm@46
|
7037
|
rlm@46
|
7038 refreshCache : function(){
|
rlm@46
|
7039 return this.getRules(true);
|
rlm@46
|
7040 },
|
rlm@46
|
7041
|
rlm@46
|
7042
|
rlm@46
|
7043 cacheStyleSheet : function(ss){
|
rlm@46
|
7044 if(!rules){
|
rlm@46
|
7045 rules = {};
|
rlm@46
|
7046 }
|
rlm@46
|
7047 try{
|
rlm@46
|
7048 var ssRules = ss.cssRules || ss.rules;
|
rlm@46
|
7049 for(var j = ssRules.length-1; j >= 0; --j){
|
rlm@46
|
7050 rules[ssRules[j].selectorText] = ssRules[j];
|
rlm@46
|
7051 }
|
rlm@46
|
7052 }catch(e){}
|
rlm@46
|
7053 },
|
rlm@46
|
7054
|
rlm@46
|
7055
|
rlm@46
|
7056 getRules : function(refreshCache){
|
rlm@46
|
7057 if(rules == null || refreshCache){
|
rlm@46
|
7058 rules = {};
|
rlm@46
|
7059 var ds = doc.styleSheets;
|
rlm@46
|
7060 for(var i =0, len = ds.length; i < len; i++){
|
rlm@46
|
7061 try{
|
rlm@46
|
7062 this.cacheStyleSheet(ds[i]);
|
rlm@46
|
7063 }catch(e){}
|
rlm@46
|
7064 }
|
rlm@46
|
7065 }
|
rlm@46
|
7066 return rules;
|
rlm@46
|
7067 },
|
rlm@46
|
7068
|
rlm@46
|
7069
|
rlm@46
|
7070 getRule : function(selector, refreshCache){
|
rlm@46
|
7071 var rs = this.getRules(refreshCache);
|
rlm@46
|
7072 if(!Ext.isArray(selector)){
|
rlm@46
|
7073 return rs[selector];
|
rlm@46
|
7074 }
|
rlm@46
|
7075 for(var i = 0; i < selector.length; i++){
|
rlm@46
|
7076 if(rs[selector[i]]){
|
rlm@46
|
7077 return rs[selector[i]];
|
rlm@46
|
7078 }
|
rlm@46
|
7079 }
|
rlm@46
|
7080 return null;
|
rlm@46
|
7081 },
|
rlm@46
|
7082
|
rlm@46
|
7083
|
rlm@46
|
7084
|
rlm@46
|
7085 updateRule : function(selector, property, value){
|
rlm@46
|
7086 if(!Ext.isArray(selector)){
|
rlm@46
|
7087 var rule = this.getRule(selector);
|
rlm@46
|
7088 if(rule){
|
rlm@46
|
7089 rule.style[property.replace(camelRe, camelFn)] = value;
|
rlm@46
|
7090 return true;
|
rlm@46
|
7091 }
|
rlm@46
|
7092 }else{
|
rlm@46
|
7093 for(var i = 0; i < selector.length; i++){
|
rlm@46
|
7094 if(this.updateRule(selector[i], property, value)){
|
rlm@46
|
7095 return true;
|
rlm@46
|
7096 }
|
rlm@46
|
7097 }
|
rlm@46
|
7098 }
|
rlm@46
|
7099 return false;
|
rlm@46
|
7100 }
|
rlm@46
|
7101 };
|
rlm@46
|
7102 }();
|
rlm@46
|
7103
|
rlm@46
|
7104 Ext.util.ClickRepeater = function(el, config)
|
rlm@46
|
7105 {
|
rlm@46
|
7106 this.el = Ext.get(el);
|
rlm@46
|
7107 this.el.unselectable();
|
rlm@46
|
7108
|
rlm@46
|
7109 Ext.apply(this, config);
|
rlm@46
|
7110
|
rlm@46
|
7111 this.addEvents(
|
rlm@46
|
7112
|
rlm@46
|
7113 "mousedown",
|
rlm@46
|
7114
|
rlm@46
|
7115 "click",
|
rlm@46
|
7116
|
rlm@46
|
7117 "mouseup"
|
rlm@46
|
7118 );
|
rlm@46
|
7119
|
rlm@46
|
7120 this.el.on("mousedown", this.handleMouseDown, this);
|
rlm@46
|
7121 if(this.preventDefault || this.stopDefault){
|
rlm@46
|
7122 this.el.on("click", function(e){
|
rlm@46
|
7123 if(this.preventDefault){
|
rlm@46
|
7124 e.preventDefault();
|
rlm@46
|
7125 }
|
rlm@46
|
7126 if(this.stopDefault){
|
rlm@46
|
7127 e.stopEvent();
|
rlm@46
|
7128 }
|
rlm@46
|
7129 }, this);
|
rlm@46
|
7130 }
|
rlm@46
|
7131
|
rlm@46
|
7132 if(this.handler){
|
rlm@46
|
7133 this.on("click", this.handler, this.scope || this);
|
rlm@46
|
7134 }
|
rlm@46
|
7135
|
rlm@46
|
7136 Ext.util.ClickRepeater.superclass.constructor.call(this);
|
rlm@46
|
7137 };
|
rlm@46
|
7138
|
rlm@46
|
7139 Ext.extend(Ext.util.ClickRepeater, Ext.util.Observable, {
|
rlm@46
|
7140 interval : 20,
|
rlm@46
|
7141 delay: 250,
|
rlm@46
|
7142 preventDefault : true,
|
rlm@46
|
7143 stopDefault : false,
|
rlm@46
|
7144 timer : 0,
|
rlm@46
|
7145
|
rlm@46
|
7146 handleMouseDown : function(){
|
rlm@46
|
7147 clearTimeout(this.timer);
|
rlm@46
|
7148 this.el.blur();
|
rlm@46
|
7149 if(this.pressClass){
|
rlm@46
|
7150 this.el.addClass(this.pressClass);
|
rlm@46
|
7151 }
|
rlm@46
|
7152 this.mousedownTime = new Date();
|
rlm@46
|
7153
|
rlm@46
|
7154 Ext.getDoc().on("mouseup", this.handleMouseUp, this);
|
rlm@46
|
7155 this.el.on("mouseout", this.handleMouseOut, this);
|
rlm@46
|
7156
|
rlm@46
|
7157 this.fireEvent("mousedown", this);
|
rlm@46
|
7158 this.fireEvent("click", this);
|
rlm@46
|
7159
|
rlm@46
|
7160 if (this.accelerate) {
|
rlm@46
|
7161 this.delay = 400;
|
rlm@46
|
7162 }
|
rlm@46
|
7163 this.timer = this.click.defer(this.delay || this.interval, this);
|
rlm@46
|
7164 },
|
rlm@46
|
7165
|
rlm@46
|
7166 click : function(){
|
rlm@46
|
7167 this.fireEvent("click", this);
|
rlm@46
|
7168 this.timer = this.click.defer(this.accelerate ?
|
rlm@46
|
7169 this.easeOutExpo(this.mousedownTime.getElapsed(),
|
rlm@46
|
7170 400,
|
rlm@46
|
7171 -390,
|
rlm@46
|
7172 12000) :
|
rlm@46
|
7173 this.interval, this);
|
rlm@46
|
7174 },
|
rlm@46
|
7175
|
rlm@46
|
7176 easeOutExpo : function (t, b, c, d) {
|
rlm@46
|
7177 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
|
rlm@46
|
7178 },
|
rlm@46
|
7179
|
rlm@46
|
7180 handleMouseOut : function(){
|
rlm@46
|
7181 clearTimeout(this.timer);
|
rlm@46
|
7182 if(this.pressClass){
|
rlm@46
|
7183 this.el.removeClass(this.pressClass);
|
rlm@46
|
7184 }
|
rlm@46
|
7185 this.el.on("mouseover", this.handleMouseReturn, this);
|
rlm@46
|
7186 },
|
rlm@46
|
7187
|
rlm@46
|
7188 handleMouseReturn : function(){
|
rlm@46
|
7189 this.el.un("mouseover", this.handleMouseReturn);
|
rlm@46
|
7190 if(this.pressClass){
|
rlm@46
|
7191 this.el.addClass(this.pressClass);
|
rlm@46
|
7192 }
|
rlm@46
|
7193 this.click();
|
rlm@46
|
7194 },
|
rlm@46
|
7195
|
rlm@46
|
7196 handleMouseUp : function(){
|
rlm@46
|
7197 clearTimeout(this.timer);
|
rlm@46
|
7198 this.el.un("mouseover", this.handleMouseReturn);
|
rlm@46
|
7199 this.el.un("mouseout", this.handleMouseOut);
|
rlm@46
|
7200 Ext.getDoc().un("mouseup", this.handleMouseUp);
|
rlm@46
|
7201 this.el.removeClass(this.pressClass);
|
rlm@46
|
7202 this.fireEvent("mouseup", this);
|
rlm@46
|
7203 }
|
rlm@46
|
7204 });
|
rlm@46
|
7205
|
rlm@46
|
7206 Ext.KeyNav = function(el, config){
|
rlm@46
|
7207 this.el = Ext.get(el);
|
rlm@46
|
7208 Ext.apply(this, config);
|
rlm@46
|
7209 if(!this.disabled){
|
rlm@46
|
7210 this.disabled = true;
|
rlm@46
|
7211 this.enable();
|
rlm@46
|
7212 }
|
rlm@46
|
7213 };
|
rlm@46
|
7214
|
rlm@46
|
7215 Ext.KeyNav.prototype = {
|
rlm@46
|
7216
|
rlm@46
|
7217 disabled : false,
|
rlm@46
|
7218
|
rlm@46
|
7219 defaultEventAction: "stopEvent",
|
rlm@46
|
7220
|
rlm@46
|
7221 forceKeyDown : false,
|
rlm@46
|
7222
|
rlm@46
|
7223 prepareEvent : function(e){
|
rlm@46
|
7224 var k = e.getKey();
|
rlm@46
|
7225 var h = this.keyToHandler[k];
|
rlm@46
|
7226 if(Ext.isSafari2 && h && k >= 37 && k <= 40){
|
rlm@46
|
7227 e.stopEvent();
|
rlm@46
|
7228 }
|
rlm@46
|
7229 },
|
rlm@46
|
7230
|
rlm@46
|
7231 relay : function(e){
|
rlm@46
|
7232 var k = e.getKey();
|
rlm@46
|
7233 var h = this.keyToHandler[k];
|
rlm@46
|
7234 if(h && this[h]){
|
rlm@46
|
7235 if(this.doRelay(e, this[h], h) !== true){
|
rlm@46
|
7236 e[this.defaultEventAction]();
|
rlm@46
|
7237 }
|
rlm@46
|
7238 }
|
rlm@46
|
7239 },
|
rlm@46
|
7240
|
rlm@46
|
7241 doRelay : function(e, h, hname){
|
rlm@46
|
7242 return h.call(this.scope || this, e);
|
rlm@46
|
7243 },
|
rlm@46
|
7244
|
rlm@46
|
7245 enter : false,
|
rlm@46
|
7246 left : false,
|
rlm@46
|
7247 right : false,
|
rlm@46
|
7248 up : false,
|
rlm@46
|
7249 down : false,
|
rlm@46
|
7250 tab : false,
|
rlm@46
|
7251 esc : false,
|
rlm@46
|
7252 pageUp : false,
|
rlm@46
|
7253 pageDown : false,
|
rlm@46
|
7254 del : false,
|
rlm@46
|
7255 home : false,
|
rlm@46
|
7256 end : false,
|
rlm@46
|
7257
|
rlm@46
|
7258 keyToHandler : {
|
rlm@46
|
7259 37 : "left",
|
rlm@46
|
7260 39 : "right",
|
rlm@46
|
7261 38 : "up",
|
rlm@46
|
7262 40 : "down",
|
rlm@46
|
7263 33 : "pageUp",
|
rlm@46
|
7264 34 : "pageDown",
|
rlm@46
|
7265 46 : "del",
|
rlm@46
|
7266 36 : "home",
|
rlm@46
|
7267 35 : "end",
|
rlm@46
|
7268 13 : "enter",
|
rlm@46
|
7269 27 : "esc",
|
rlm@46
|
7270 9 : "tab"
|
rlm@46
|
7271 },
|
rlm@46
|
7272
|
rlm@46
|
7273
|
rlm@46
|
7274 enable: function(){
|
rlm@46
|
7275 if(this.disabled){
|
rlm@46
|
7276 if(this.forceKeyDown || Ext.isIE || Ext.isSafari3 || Ext.isAir){
|
rlm@46
|
7277 this.el.on("keydown", this.relay, this);
|
rlm@46
|
7278 }else{
|
rlm@46
|
7279 this.el.on("keydown", this.prepareEvent, this);
|
rlm@46
|
7280 this.el.on("keypress", this.relay, this);
|
rlm@46
|
7281 }
|
rlm@46
|
7282 this.disabled = false;
|
rlm@46
|
7283 }
|
rlm@46
|
7284 },
|
rlm@46
|
7285
|
rlm@46
|
7286
|
rlm@46
|
7287 disable: function(){
|
rlm@46
|
7288 if(!this.disabled){
|
rlm@46
|
7289 if(this.forceKeyDown || Ext.isIE || Ext.isSafari3 || Ext.isAir){
|
rlm@46
|
7290 this.el.un("keydown", this.relay);
|
rlm@46
|
7291 }else{
|
rlm@46
|
7292 this.el.un("keydown", this.prepareEvent);
|
rlm@46
|
7293 this.el.un("keypress", this.relay);
|
rlm@46
|
7294 }
|
rlm@46
|
7295 this.disabled = true;
|
rlm@46
|
7296 }
|
rlm@46
|
7297 }
|
rlm@46
|
7298 };
|
rlm@46
|
7299
|
rlm@46
|
7300 Ext.KeyMap = function(el, config, eventName){
|
rlm@46
|
7301 this.el = Ext.get(el);
|
rlm@46
|
7302 this.eventName = eventName || "keydown";
|
rlm@46
|
7303 this.bindings = [];
|
rlm@46
|
7304 if(config){
|
rlm@46
|
7305 this.addBinding(config);
|
rlm@46
|
7306 }
|
rlm@46
|
7307 this.enable();
|
rlm@46
|
7308 };
|
rlm@46
|
7309
|
rlm@46
|
7310 Ext.KeyMap.prototype = {
|
rlm@46
|
7311
|
rlm@46
|
7312 stopEvent : false,
|
rlm@46
|
7313
|
rlm@46
|
7314
|
rlm@46
|
7315 addBinding : function(config){
|
rlm@46
|
7316 if(Ext.isArray(config)){
|
rlm@46
|
7317 for(var i = 0, len = config.length; i < len; i++){
|
rlm@46
|
7318 this.addBinding(config[i]);
|
rlm@46
|
7319 }
|
rlm@46
|
7320 return;
|
rlm@46
|
7321 }
|
rlm@46
|
7322 var keyCode = config.key,
|
rlm@46
|
7323 shift = config.shift,
|
rlm@46
|
7324 ctrl = config.ctrl,
|
rlm@46
|
7325 alt = config.alt,
|
rlm@46
|
7326 fn = config.fn || config.handler,
|
rlm@46
|
7327 scope = config.scope;
|
rlm@46
|
7328
|
rlm@46
|
7329 if(typeof keyCode == "string"){
|
rlm@46
|
7330 var ks = [];
|
rlm@46
|
7331 var keyString = keyCode.toUpperCase();
|
rlm@46
|
7332 for(var j = 0, len = keyString.length; j < len; j++){
|
rlm@46
|
7333 ks.push(keyString.charCodeAt(j));
|
rlm@46
|
7334 }
|
rlm@46
|
7335 keyCode = ks;
|
rlm@46
|
7336 }
|
rlm@46
|
7337 var keyArray = Ext.isArray(keyCode);
|
rlm@46
|
7338
|
rlm@46
|
7339 var handler = function(e){
|
rlm@46
|
7340 if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) && (!alt || e.altKey)){
|
rlm@46
|
7341 var k = e.getKey();
|
rlm@46
|
7342 if(keyArray){
|
rlm@46
|
7343 for(var i = 0, len = keyCode.length; i < len; i++){
|
rlm@46
|
7344 if(keyCode[i] == k){
|
rlm@46
|
7345 if(this.stopEvent){
|
rlm@46
|
7346 e.stopEvent();
|
rlm@46
|
7347 }
|
rlm@46
|
7348 fn.call(scope || window, k, e);
|
rlm@46
|
7349 return;
|
rlm@46
|
7350 }
|
rlm@46
|
7351 }
|
rlm@46
|
7352 }else{
|
rlm@46
|
7353 if(k == keyCode){
|
rlm@46
|
7354 if(this.stopEvent){
|
rlm@46
|
7355 e.stopEvent();
|
rlm@46
|
7356 }
|
rlm@46
|
7357 fn.call(scope || window, k, e);
|
rlm@46
|
7358 }
|
rlm@46
|
7359 }
|
rlm@46
|
7360 }
|
rlm@46
|
7361 };
|
rlm@46
|
7362 this.bindings.push(handler);
|
rlm@46
|
7363 },
|
rlm@46
|
7364
|
rlm@46
|
7365
|
rlm@46
|
7366 on : function(key, fn, scope){
|
rlm@46
|
7367 var keyCode, shift, ctrl, alt;
|
rlm@46
|
7368 if(typeof key == "object" && !Ext.isArray(key)){
|
rlm@46
|
7369 keyCode = key.key;
|
rlm@46
|
7370 shift = key.shift;
|
rlm@46
|
7371 ctrl = key.ctrl;
|
rlm@46
|
7372 alt = key.alt;
|
rlm@46
|
7373 }else{
|
rlm@46
|
7374 keyCode = key;
|
rlm@46
|
7375 }
|
rlm@46
|
7376 this.addBinding({
|
rlm@46
|
7377 key: keyCode,
|
rlm@46
|
7378 shift: shift,
|
rlm@46
|
7379 ctrl: ctrl,
|
rlm@46
|
7380 alt: alt,
|
rlm@46
|
7381 fn: fn,
|
rlm@46
|
7382 scope: scope
|
rlm@46
|
7383 })
|
rlm@46
|
7384 },
|
rlm@46
|
7385
|
rlm@46
|
7386
|
rlm@46
|
7387 handleKeyDown : function(e){
|
rlm@46
|
7388 if(this.enabled){
|
rlm@46
|
7389 var b = this.bindings;
|
rlm@46
|
7390 for(var i = 0, len = b.length; i < len; i++){
|
rlm@46
|
7391 b[i].call(this, e);
|
rlm@46
|
7392 }
|
rlm@46
|
7393 }
|
rlm@46
|
7394 },
|
rlm@46
|
7395
|
rlm@46
|
7396
|
rlm@46
|
7397 isEnabled : function(){
|
rlm@46
|
7398 return this.enabled;
|
rlm@46
|
7399 },
|
rlm@46
|
7400
|
rlm@46
|
7401
|
rlm@46
|
7402 enable: function(){
|
rlm@46
|
7403 if(!this.enabled){
|
rlm@46
|
7404 this.el.on(this.eventName, this.handleKeyDown, this);
|
rlm@46
|
7405 this.enabled = true;
|
rlm@46
|
7406 }
|
rlm@46
|
7407 },
|
rlm@46
|
7408
|
rlm@46
|
7409
|
rlm@46
|
7410 disable: function(){
|
rlm@46
|
7411 if(this.enabled){
|
rlm@46
|
7412 this.el.removeListener(this.eventName, this.handleKeyDown, this);
|
rlm@46
|
7413 this.enabled = false;
|
rlm@46
|
7414 }
|
rlm@46
|
7415 }
|
rlm@46
|
7416 };
|
rlm@46
|
7417
|
rlm@46
|
7418 Ext.util.TextMetrics = function(){
|
rlm@46
|
7419 var shared;
|
rlm@46
|
7420 return {
|
rlm@46
|
7421
|
rlm@46
|
7422 measure : function(el, text, fixedWidth){
|
rlm@46
|
7423 if(!shared){
|
rlm@46
|
7424 shared = Ext.util.TextMetrics.Instance(el, fixedWidth);
|
rlm@46
|
7425 }
|
rlm@46
|
7426 shared.bind(el);
|
rlm@46
|
7427 shared.setFixedWidth(fixedWidth || 'auto');
|
rlm@46
|
7428 return shared.getSize(text);
|
rlm@46
|
7429 },
|
rlm@46
|
7430
|
rlm@46
|
7431
|
rlm@46
|
7432 createInstance : function(el, fixedWidth){
|
rlm@46
|
7433 return Ext.util.TextMetrics.Instance(el, fixedWidth);
|
rlm@46
|
7434 }
|
rlm@46
|
7435 };
|
rlm@46
|
7436 }();
|
rlm@46
|
7437
|
rlm@46
|
7438 Ext.util.TextMetrics.Instance = function(bindTo, fixedWidth){
|
rlm@46
|
7439 var ml = new Ext.Element(document.createElement('div'));
|
rlm@46
|
7440 document.body.appendChild(ml.dom);
|
rlm@46
|
7441 ml.position('absolute');
|
rlm@46
|
7442 ml.setLeftTop(-1000, -1000);
|
rlm@46
|
7443 ml.hide();
|
rlm@46
|
7444
|
rlm@46
|
7445 if(fixedWidth){
|
rlm@46
|
7446 ml.setWidth(fixedWidth);
|
rlm@46
|
7447 }
|
rlm@46
|
7448
|
rlm@46
|
7449 var instance = {
|
rlm@46
|
7450
|
rlm@46
|
7451 getSize : function(text){
|
rlm@46
|
7452 ml.update(text);
|
rlm@46
|
7453 var s = ml.getSize();
|
rlm@46
|
7454 ml.update('');
|
rlm@46
|
7455 return s;
|
rlm@46
|
7456 },
|
rlm@46
|
7457
|
rlm@46
|
7458
|
rlm@46
|
7459 bind : function(el){
|
rlm@46
|
7460 ml.setStyle(
|
rlm@46
|
7461 Ext.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing')
|
rlm@46
|
7462 );
|
rlm@46
|
7463 },
|
rlm@46
|
7464
|
rlm@46
|
7465
|
rlm@46
|
7466 setFixedWidth : function(width){
|
rlm@46
|
7467 ml.setWidth(width);
|
rlm@46
|
7468 },
|
rlm@46
|
7469
|
rlm@46
|
7470
|
rlm@46
|
7471 getWidth : function(text){
|
rlm@46
|
7472 ml.dom.style.width = 'auto';
|
rlm@46
|
7473 return this.getSize(text).width;
|
rlm@46
|
7474 },
|
rlm@46
|
7475
|
rlm@46
|
7476
|
rlm@46
|
7477 getHeight : function(text){
|
rlm@46
|
7478 return this.getSize(text).height;
|
rlm@46
|
7479 }
|
rlm@46
|
7480 };
|
rlm@46
|
7481
|
rlm@46
|
7482 instance.bind(bindTo);
|
rlm@46
|
7483
|
rlm@46
|
7484 return instance;
|
rlm@46
|
7485 };
|
rlm@46
|
7486
|
rlm@46
|
7487 Ext.Element.measureText = Ext.util.TextMetrics.measure;
|
rlm@46
|
7488
|
rlm@46
|
7489
|
rlm@46
|
7490 (function() {
|
rlm@46
|
7491
|
rlm@46
|
7492 var Event=Ext.EventManager;
|
rlm@46
|
7493 var Dom=Ext.lib.Dom;
|
rlm@46
|
7494
|
rlm@46
|
7495
|
rlm@46
|
7496 Ext.dd.DragDrop = function(id, sGroup, config) {
|
rlm@46
|
7497 if(id) {
|
rlm@46
|
7498 this.init(id, sGroup, config);
|
rlm@46
|
7499 }
|
rlm@46
|
7500 };
|
rlm@46
|
7501
|
rlm@46
|
7502 Ext.dd.DragDrop.prototype = {
|
rlm@46
|
7503
|
rlm@46
|
7504
|
rlm@46
|
7505 id: null,
|
rlm@46
|
7506
|
rlm@46
|
7507
|
rlm@46
|
7508 config: null,
|
rlm@46
|
7509
|
rlm@46
|
7510
|
rlm@46
|
7511 dragElId: null,
|
rlm@46
|
7512
|
rlm@46
|
7513
|
rlm@46
|
7514 handleElId: null,
|
rlm@46
|
7515
|
rlm@46
|
7516
|
rlm@46
|
7517 invalidHandleTypes: null,
|
rlm@46
|
7518
|
rlm@46
|
7519
|
rlm@46
|
7520 invalidHandleIds: null,
|
rlm@46
|
7521
|
rlm@46
|
7522
|
rlm@46
|
7523 invalidHandleClasses: null,
|
rlm@46
|
7524
|
rlm@46
|
7525
|
rlm@46
|
7526 startPageX: 0,
|
rlm@46
|
7527
|
rlm@46
|
7528
|
rlm@46
|
7529 startPageY: 0,
|
rlm@46
|
7530
|
rlm@46
|
7531
|
rlm@46
|
7532 groups: null,
|
rlm@46
|
7533
|
rlm@46
|
7534
|
rlm@46
|
7535 locked: false,
|
rlm@46
|
7536
|
rlm@46
|
7537
|
rlm@46
|
7538 lock: function() { this.locked = true; },
|
rlm@46
|
7539
|
rlm@46
|
7540
|
rlm@46
|
7541 unlock: function() { this.locked = false; },
|
rlm@46
|
7542
|
rlm@46
|
7543
|
rlm@46
|
7544 isTarget: true,
|
rlm@46
|
7545
|
rlm@46
|
7546
|
rlm@46
|
7547 padding: null,
|
rlm@46
|
7548
|
rlm@46
|
7549
|
rlm@46
|
7550 _domRef: null,
|
rlm@46
|
7551
|
rlm@46
|
7552
|
rlm@46
|
7553 __ygDragDrop: true,
|
rlm@46
|
7554
|
rlm@46
|
7555
|
rlm@46
|
7556 constrainX: false,
|
rlm@46
|
7557
|
rlm@46
|
7558
|
rlm@46
|
7559 constrainY: false,
|
rlm@46
|
7560
|
rlm@46
|
7561
|
rlm@46
|
7562 minX: 0,
|
rlm@46
|
7563
|
rlm@46
|
7564
|
rlm@46
|
7565 maxX: 0,
|
rlm@46
|
7566
|
rlm@46
|
7567
|
rlm@46
|
7568 minY: 0,
|
rlm@46
|
7569
|
rlm@46
|
7570
|
rlm@46
|
7571 maxY: 0,
|
rlm@46
|
7572
|
rlm@46
|
7573
|
rlm@46
|
7574 maintainOffset: false,
|
rlm@46
|
7575
|
rlm@46
|
7576
|
rlm@46
|
7577 xTicks: null,
|
rlm@46
|
7578
|
rlm@46
|
7579
|
rlm@46
|
7580 yTicks: null,
|
rlm@46
|
7581
|
rlm@46
|
7582
|
rlm@46
|
7583 primaryButtonOnly: true,
|
rlm@46
|
7584
|
rlm@46
|
7585
|
rlm@46
|
7586 available: false,
|
rlm@46
|
7587
|
rlm@46
|
7588
|
rlm@46
|
7589 hasOuterHandles: false,
|
rlm@46
|
7590
|
rlm@46
|
7591
|
rlm@46
|
7592 b4StartDrag: function(x, y) { },
|
rlm@46
|
7593
|
rlm@46
|
7594
|
rlm@46
|
7595 startDrag: function(x, y) { },
|
rlm@46
|
7596
|
rlm@46
|
7597
|
rlm@46
|
7598 b4Drag: function(e) { },
|
rlm@46
|
7599
|
rlm@46
|
7600
|
rlm@46
|
7601 onDrag: function(e) { },
|
rlm@46
|
7602
|
rlm@46
|
7603
|
rlm@46
|
7604 onDragEnter: function(e, id) { },
|
rlm@46
|
7605
|
rlm@46
|
7606
|
rlm@46
|
7607 b4DragOver: function(e) { },
|
rlm@46
|
7608
|
rlm@46
|
7609
|
rlm@46
|
7610 onDragOver: function(e, id) { },
|
rlm@46
|
7611
|
rlm@46
|
7612
|
rlm@46
|
7613 b4DragOut: function(e) { },
|
rlm@46
|
7614
|
rlm@46
|
7615
|
rlm@46
|
7616 onDragOut: function(e, id) { },
|
rlm@46
|
7617
|
rlm@46
|
7618
|
rlm@46
|
7619 b4DragDrop: function(e) { },
|
rlm@46
|
7620
|
rlm@46
|
7621
|
rlm@46
|
7622 onDragDrop: function(e, id) { },
|
rlm@46
|
7623
|
rlm@46
|
7624
|
rlm@46
|
7625 onInvalidDrop: function(e) { },
|
rlm@46
|
7626
|
rlm@46
|
7627
|
rlm@46
|
7628 b4EndDrag: function(e) { },
|
rlm@46
|
7629
|
rlm@46
|
7630
|
rlm@46
|
7631 endDrag: function(e) { },
|
rlm@46
|
7632
|
rlm@46
|
7633
|
rlm@46
|
7634 b4MouseDown: function(e) { },
|
rlm@46
|
7635
|
rlm@46
|
7636
|
rlm@46
|
7637 onMouseDown: function(e) { },
|
rlm@46
|
7638
|
rlm@46
|
7639
|
rlm@46
|
7640 onMouseUp: function(e) { },
|
rlm@46
|
7641
|
rlm@46
|
7642
|
rlm@46
|
7643 onAvailable: function () {
|
rlm@46
|
7644 },
|
rlm@46
|
7645
|
rlm@46
|
7646
|
rlm@46
|
7647 defaultPadding : {left:0, right:0, top:0, bottom:0},
|
rlm@46
|
7648
|
rlm@46
|
7649
|
rlm@46
|
7650 constrainTo : function(constrainTo, pad, inContent){
|
rlm@46
|
7651 if(typeof pad == "number"){
|
rlm@46
|
7652 pad = {left: pad, right:pad, top:pad, bottom:pad};
|
rlm@46
|
7653 }
|
rlm@46
|
7654 pad = pad || this.defaultPadding;
|
rlm@46
|
7655 var b = Ext.get(this.getEl()).getBox();
|
rlm@46
|
7656 var ce = Ext.get(constrainTo);
|
rlm@46
|
7657 var s = ce.getScroll();
|
rlm@46
|
7658 var c, cd = ce.dom;
|
rlm@46
|
7659 if(cd == document.body){
|
rlm@46
|
7660 c = { x: s.left, y: s.top, width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()};
|
rlm@46
|
7661 }else{
|
rlm@46
|
7662 var xy = ce.getXY();
|
rlm@46
|
7663 c = {x : xy[0]+s.left, y: xy[1]+s.top, width: cd.clientWidth, height: cd.clientHeight};
|
rlm@46
|
7664 }
|
rlm@46
|
7665
|
rlm@46
|
7666
|
rlm@46
|
7667 var topSpace = b.y - c.y;
|
rlm@46
|
7668 var leftSpace = b.x - c.x;
|
rlm@46
|
7669
|
rlm@46
|
7670 this.resetConstraints();
|
rlm@46
|
7671 this.setXConstraint(leftSpace - (pad.left||0),
|
rlm@46
|
7672 c.width - leftSpace - b.width - (pad.right||0),
|
rlm@46
|
7673 this.xTickSize
|
rlm@46
|
7674 );
|
rlm@46
|
7675 this.setYConstraint(topSpace - (pad.top||0),
|
rlm@46
|
7676 c.height - topSpace - b.height - (pad.bottom||0),
|
rlm@46
|
7677 this.yTickSize
|
rlm@46
|
7678 );
|
rlm@46
|
7679 },
|
rlm@46
|
7680
|
rlm@46
|
7681
|
rlm@46
|
7682 getEl: function() {
|
rlm@46
|
7683 if (!this._domRef) {
|
rlm@46
|
7684 this._domRef = Ext.getDom(this.id);
|
rlm@46
|
7685 }
|
rlm@46
|
7686
|
rlm@46
|
7687 return this._domRef;
|
rlm@46
|
7688 },
|
rlm@46
|
7689
|
rlm@46
|
7690
|
rlm@46
|
7691 getDragEl: function() {
|
rlm@46
|
7692 return Ext.getDom(this.dragElId);
|
rlm@46
|
7693 },
|
rlm@46
|
7694
|
rlm@46
|
7695
|
rlm@46
|
7696 init: function(id, sGroup, config) {
|
rlm@46
|
7697 this.initTarget(id, sGroup, config);
|
rlm@46
|
7698 Event.on(this.id, "mousedown", this.handleMouseDown, this);
|
rlm@46
|
7699
|
rlm@46
|
7700 },
|
rlm@46
|
7701
|
rlm@46
|
7702
|
rlm@46
|
7703 initTarget: function(id, sGroup, config) {
|
rlm@46
|
7704
|
rlm@46
|
7705
|
rlm@46
|
7706 this.config = config || {};
|
rlm@46
|
7707
|
rlm@46
|
7708
|
rlm@46
|
7709 this.DDM = Ext.dd.DDM;
|
rlm@46
|
7710
|
rlm@46
|
7711 this.groups = {};
|
rlm@46
|
7712
|
rlm@46
|
7713
|
rlm@46
|
7714
|
rlm@46
|
7715 if (typeof id !== "string") {
|
rlm@46
|
7716 id = Ext.id(id);
|
rlm@46
|
7717 }
|
rlm@46
|
7718
|
rlm@46
|
7719
|
rlm@46
|
7720 this.id = id;
|
rlm@46
|
7721
|
rlm@46
|
7722
|
rlm@46
|
7723 this.addToGroup((sGroup) ? sGroup : "default");
|
rlm@46
|
7724
|
rlm@46
|
7725
|
rlm@46
|
7726
|
rlm@46
|
7727 this.handleElId = id;
|
rlm@46
|
7728
|
rlm@46
|
7729
|
rlm@46
|
7730 this.setDragElId(id);
|
rlm@46
|
7731
|
rlm@46
|
7732
|
rlm@46
|
7733 this.invalidHandleTypes = { A: "A" };
|
rlm@46
|
7734 this.invalidHandleIds = {};
|
rlm@46
|
7735 this.invalidHandleClasses = [];
|
rlm@46
|
7736
|
rlm@46
|
7737 this.applyConfig();
|
rlm@46
|
7738
|
rlm@46
|
7739 this.handleOnAvailable();
|
rlm@46
|
7740 },
|
rlm@46
|
7741
|
rlm@46
|
7742
|
rlm@46
|
7743 applyConfig: function() {
|
rlm@46
|
7744
|
rlm@46
|
7745
|
rlm@46
|
7746
|
rlm@46
|
7747 this.padding = this.config.padding || [0, 0, 0, 0];
|
rlm@46
|
7748 this.isTarget = (this.config.isTarget !== false);
|
rlm@46
|
7749 this.maintainOffset = (this.config.maintainOffset);
|
rlm@46
|
7750 this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
|
rlm@46
|
7751
|
rlm@46
|
7752 },
|
rlm@46
|
7753
|
rlm@46
|
7754
|
rlm@46
|
7755 handleOnAvailable: function() {
|
rlm@46
|
7756 this.available = true;
|
rlm@46
|
7757 this.resetConstraints();
|
rlm@46
|
7758 this.onAvailable();
|
rlm@46
|
7759 },
|
rlm@46
|
7760
|
rlm@46
|
7761
|
rlm@46
|
7762 setPadding: function(iTop, iRight, iBot, iLeft) {
|
rlm@46
|
7763
|
rlm@46
|
7764 if (!iRight && 0 !== iRight) {
|
rlm@46
|
7765 this.padding = [iTop, iTop, iTop, iTop];
|
rlm@46
|
7766 } else if (!iBot && 0 !== iBot) {
|
rlm@46
|
7767 this.padding = [iTop, iRight, iTop, iRight];
|
rlm@46
|
7768 } else {
|
rlm@46
|
7769 this.padding = [iTop, iRight, iBot, iLeft];
|
rlm@46
|
7770 }
|
rlm@46
|
7771 },
|
rlm@46
|
7772
|
rlm@46
|
7773
|
rlm@46
|
7774 setInitPosition: function(diffX, diffY) {
|
rlm@46
|
7775 var el = this.getEl();
|
rlm@46
|
7776
|
rlm@46
|
7777 if (!this.DDM.verifyEl(el)) {
|
rlm@46
|
7778 return;
|
rlm@46
|
7779 }
|
rlm@46
|
7780
|
rlm@46
|
7781 var dx = diffX || 0;
|
rlm@46
|
7782 var dy = diffY || 0;
|
rlm@46
|
7783
|
rlm@46
|
7784 var p = Dom.getXY( el );
|
rlm@46
|
7785
|
rlm@46
|
7786 this.initPageX = p[0] - dx;
|
rlm@46
|
7787 this.initPageY = p[1] - dy;
|
rlm@46
|
7788
|
rlm@46
|
7789 this.lastPageX = p[0];
|
rlm@46
|
7790 this.lastPageY = p[1];
|
rlm@46
|
7791
|
rlm@46
|
7792
|
rlm@46
|
7793 this.setStartPosition(p);
|
rlm@46
|
7794 },
|
rlm@46
|
7795
|
rlm@46
|
7796
|
rlm@46
|
7797 setStartPosition: function(pos) {
|
rlm@46
|
7798 var p = pos || Dom.getXY( this.getEl() );
|
rlm@46
|
7799 this.deltaSetXY = null;
|
rlm@46
|
7800
|
rlm@46
|
7801 this.startPageX = p[0];
|
rlm@46
|
7802 this.startPageY = p[1];
|
rlm@46
|
7803 },
|
rlm@46
|
7804
|
rlm@46
|
7805
|
rlm@46
|
7806 addToGroup: function(sGroup) {
|
rlm@46
|
7807 this.groups[sGroup] = true;
|
rlm@46
|
7808 this.DDM.regDragDrop(this, sGroup);
|
rlm@46
|
7809 },
|
rlm@46
|
7810
|
rlm@46
|
7811
|
rlm@46
|
7812 removeFromGroup: function(sGroup) {
|
rlm@46
|
7813 if (this.groups[sGroup]) {
|
rlm@46
|
7814 delete this.groups[sGroup];
|
rlm@46
|
7815 }
|
rlm@46
|
7816
|
rlm@46
|
7817 this.DDM.removeDDFromGroup(this, sGroup);
|
rlm@46
|
7818 },
|
rlm@46
|
7819
|
rlm@46
|
7820
|
rlm@46
|
7821 setDragElId: function(id) {
|
rlm@46
|
7822 this.dragElId = id;
|
rlm@46
|
7823 },
|
rlm@46
|
7824
|
rlm@46
|
7825
|
rlm@46
|
7826 setHandleElId: function(id) {
|
rlm@46
|
7827 if (typeof id !== "string") {
|
rlm@46
|
7828 id = Ext.id(id);
|
rlm@46
|
7829 }
|
rlm@46
|
7830 this.handleElId = id;
|
rlm@46
|
7831 this.DDM.regHandle(this.id, id);
|
rlm@46
|
7832 },
|
rlm@46
|
7833
|
rlm@46
|
7834
|
rlm@46
|
7835 setOuterHandleElId: function(id) {
|
rlm@46
|
7836 if (typeof id !== "string") {
|
rlm@46
|
7837 id = Ext.id(id);
|
rlm@46
|
7838 }
|
rlm@46
|
7839 Event.on(id, "mousedown",
|
rlm@46
|
7840 this.handleMouseDown, this);
|
rlm@46
|
7841 this.setHandleElId(id);
|
rlm@46
|
7842
|
rlm@46
|
7843 this.hasOuterHandles = true;
|
rlm@46
|
7844 },
|
rlm@46
|
7845
|
rlm@46
|
7846
|
rlm@46
|
7847 unreg: function() {
|
rlm@46
|
7848 Event.un(this.id, "mousedown",
|
rlm@46
|
7849 this.handleMouseDown);
|
rlm@46
|
7850 this._domRef = null;
|
rlm@46
|
7851 this.DDM._remove(this);
|
rlm@46
|
7852 },
|
rlm@46
|
7853
|
rlm@46
|
7854 destroy : function(){
|
rlm@46
|
7855 this.unreg();
|
rlm@46
|
7856 },
|
rlm@46
|
7857
|
rlm@46
|
7858
|
rlm@46
|
7859 isLocked: function() {
|
rlm@46
|
7860 return (this.DDM.isLocked() || this.locked);
|
rlm@46
|
7861 },
|
rlm@46
|
7862
|
rlm@46
|
7863
|
rlm@46
|
7864 handleMouseDown: function(e, oDD){
|
rlm@46
|
7865 if (this.primaryButtonOnly && e.button != 0) {
|
rlm@46
|
7866 return;
|
rlm@46
|
7867 }
|
rlm@46
|
7868
|
rlm@46
|
7869 if (this.isLocked()) {
|
rlm@46
|
7870 return;
|
rlm@46
|
7871 }
|
rlm@46
|
7872
|
rlm@46
|
7873 this.DDM.refreshCache(this.groups);
|
rlm@46
|
7874
|
rlm@46
|
7875 var pt = new Ext.lib.Point(Ext.lib.Event.getPageX(e), Ext.lib.Event.getPageY(e));
|
rlm@46
|
7876 if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) ) {
|
rlm@46
|
7877 } else {
|
rlm@46
|
7878 if (this.clickValidator(e)) {
|
rlm@46
|
7879
|
rlm@46
|
7880
|
rlm@46
|
7881 this.setStartPosition();
|
rlm@46
|
7882
|
rlm@46
|
7883
|
rlm@46
|
7884 this.b4MouseDown(e);
|
rlm@46
|
7885 this.onMouseDown(e);
|
rlm@46
|
7886
|
rlm@46
|
7887 this.DDM.handleMouseDown(e, this);
|
rlm@46
|
7888
|
rlm@46
|
7889 this.DDM.stopEvent(e);
|
rlm@46
|
7890 } else {
|
rlm@46
|
7891
|
rlm@46
|
7892
|
rlm@46
|
7893 }
|
rlm@46
|
7894 }
|
rlm@46
|
7895 },
|
rlm@46
|
7896
|
rlm@46
|
7897 clickValidator: function(e) {
|
rlm@46
|
7898 var target = e.getTarget();
|
rlm@46
|
7899 return ( this.isValidHandleChild(target) &&
|
rlm@46
|
7900 (this.id == this.handleElId ||
|
rlm@46
|
7901 this.DDM.handleWasClicked(target, this.id)) );
|
rlm@46
|
7902 },
|
rlm@46
|
7903
|
rlm@46
|
7904
|
rlm@46
|
7905 addInvalidHandleType: function(tagName) {
|
rlm@46
|
7906 var type = tagName.toUpperCase();
|
rlm@46
|
7907 this.invalidHandleTypes[type] = type;
|
rlm@46
|
7908 },
|
rlm@46
|
7909
|
rlm@46
|
7910
|
rlm@46
|
7911 addInvalidHandleId: function(id) {
|
rlm@46
|
7912 if (typeof id !== "string") {
|
rlm@46
|
7913 id = Ext.id(id);
|
rlm@46
|
7914 }
|
rlm@46
|
7915 this.invalidHandleIds[id] = id;
|
rlm@46
|
7916 },
|
rlm@46
|
7917
|
rlm@46
|
7918
|
rlm@46
|
7919 addInvalidHandleClass: function(cssClass) {
|
rlm@46
|
7920 this.invalidHandleClasses.push(cssClass);
|
rlm@46
|
7921 },
|
rlm@46
|
7922
|
rlm@46
|
7923
|
rlm@46
|
7924 removeInvalidHandleType: function(tagName) {
|
rlm@46
|
7925 var type = tagName.toUpperCase();
|
rlm@46
|
7926
|
rlm@46
|
7927 delete this.invalidHandleTypes[type];
|
rlm@46
|
7928 },
|
rlm@46
|
7929
|
rlm@46
|
7930
|
rlm@46
|
7931 removeInvalidHandleId: function(id) {
|
rlm@46
|
7932 if (typeof id !== "string") {
|
rlm@46
|
7933 id = Ext.id(id);
|
rlm@46
|
7934 }
|
rlm@46
|
7935 delete this.invalidHandleIds[id];
|
rlm@46
|
7936 },
|
rlm@46
|
7937
|
rlm@46
|
7938
|
rlm@46
|
7939 removeInvalidHandleClass: function(cssClass) {
|
rlm@46
|
7940 for (var i=0, len=this.invalidHandleClasses.length; i<len; ++i) {
|
rlm@46
|
7941 if (this.invalidHandleClasses[i] == cssClass) {
|
rlm@46
|
7942 delete this.invalidHandleClasses[i];
|
rlm@46
|
7943 }
|
rlm@46
|
7944 }
|
rlm@46
|
7945 },
|
rlm@46
|
7946
|
rlm@46
|
7947
|
rlm@46
|
7948 isValidHandleChild: function(node) {
|
rlm@46
|
7949
|
rlm@46
|
7950 var valid = true;
|
rlm@46
|
7951
|
rlm@46
|
7952 var nodeName;
|
rlm@46
|
7953 try {
|
rlm@46
|
7954 nodeName = node.nodeName.toUpperCase();
|
rlm@46
|
7955 } catch(e) {
|
rlm@46
|
7956 nodeName = node.nodeName;
|
rlm@46
|
7957 }
|
rlm@46
|
7958 valid = valid && !this.invalidHandleTypes[nodeName];
|
rlm@46
|
7959 valid = valid && !this.invalidHandleIds[node.id];
|
rlm@46
|
7960
|
rlm@46
|
7961 for (var i=0, len=this.invalidHandleClasses.length; valid && i<len; ++i) {
|
rlm@46
|
7962 valid = !Dom.hasClass(node, this.invalidHandleClasses[i]);
|
rlm@46
|
7963 }
|
rlm@46
|
7964
|
rlm@46
|
7965
|
rlm@46
|
7966 return valid;
|
rlm@46
|
7967
|
rlm@46
|
7968 },
|
rlm@46
|
7969
|
rlm@46
|
7970
|
rlm@46
|
7971 setXTicks: function(iStartX, iTickSize) {
|
rlm@46
|
7972 this.xTicks = [];
|
rlm@46
|
7973 this.xTickSize = iTickSize;
|
rlm@46
|
7974
|
rlm@46
|
7975 var tickMap = {};
|
rlm@46
|
7976
|
rlm@46
|
7977 for (var i = this.initPageX; i >= this.minX; i = i - iTickSize) {
|
rlm@46
|
7978 if (!tickMap[i]) {
|
rlm@46
|
7979 this.xTicks[this.xTicks.length] = i;
|
rlm@46
|
7980 tickMap[i] = true;
|
rlm@46
|
7981 }
|
rlm@46
|
7982 }
|
rlm@46
|
7983
|
rlm@46
|
7984 for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) {
|
rlm@46
|
7985 if (!tickMap[i]) {
|
rlm@46
|
7986 this.xTicks[this.xTicks.length] = i;
|
rlm@46
|
7987 tickMap[i] = true;
|
rlm@46
|
7988 }
|
rlm@46
|
7989 }
|
rlm@46
|
7990
|
rlm@46
|
7991 this.xTicks.sort(this.DDM.numericSort) ;
|
rlm@46
|
7992 },
|
rlm@46
|
7993
|
rlm@46
|
7994
|
rlm@46
|
7995 setYTicks: function(iStartY, iTickSize) {
|
rlm@46
|
7996 this.yTicks = [];
|
rlm@46
|
7997 this.yTickSize = iTickSize;
|
rlm@46
|
7998
|
rlm@46
|
7999 var tickMap = {};
|
rlm@46
|
8000
|
rlm@46
|
8001 for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) {
|
rlm@46
|
8002 if (!tickMap[i]) {
|
rlm@46
|
8003 this.yTicks[this.yTicks.length] = i;
|
rlm@46
|
8004 tickMap[i] = true;
|
rlm@46
|
8005 }
|
rlm@46
|
8006 }
|
rlm@46
|
8007
|
rlm@46
|
8008 for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) {
|
rlm@46
|
8009 if (!tickMap[i]) {
|
rlm@46
|
8010 this.yTicks[this.yTicks.length] = i;
|
rlm@46
|
8011 tickMap[i] = true;
|
rlm@46
|
8012 }
|
rlm@46
|
8013 }
|
rlm@46
|
8014
|
rlm@46
|
8015 this.yTicks.sort(this.DDM.numericSort) ;
|
rlm@46
|
8016 },
|
rlm@46
|
8017
|
rlm@46
|
8018
|
rlm@46
|
8019 setXConstraint: function(iLeft, iRight, iTickSize) {
|
rlm@46
|
8020 this.leftConstraint = iLeft;
|
rlm@46
|
8021 this.rightConstraint = iRight;
|
rlm@46
|
8022
|
rlm@46
|
8023 this.minX = this.initPageX - iLeft;
|
rlm@46
|
8024 this.maxX = this.initPageX + iRight;
|
rlm@46
|
8025 if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }
|
rlm@46
|
8026
|
rlm@46
|
8027 this.constrainX = true;
|
rlm@46
|
8028 },
|
rlm@46
|
8029
|
rlm@46
|
8030
|
rlm@46
|
8031 clearConstraints: function() {
|
rlm@46
|
8032 this.constrainX = false;
|
rlm@46
|
8033 this.constrainY = false;
|
rlm@46
|
8034 this.clearTicks();
|
rlm@46
|
8035 },
|
rlm@46
|
8036
|
rlm@46
|
8037
|
rlm@46
|
8038 clearTicks: function() {
|
rlm@46
|
8039 this.xTicks = null;
|
rlm@46
|
8040 this.yTicks = null;
|
rlm@46
|
8041 this.xTickSize = 0;
|
rlm@46
|
8042 this.yTickSize = 0;
|
rlm@46
|
8043 },
|
rlm@46
|
8044
|
rlm@46
|
8045
|
rlm@46
|
8046 setYConstraint: function(iUp, iDown, iTickSize) {
|
rlm@46
|
8047 this.topConstraint = iUp;
|
rlm@46
|
8048 this.bottomConstraint = iDown;
|
rlm@46
|
8049
|
rlm@46
|
8050 this.minY = this.initPageY - iUp;
|
rlm@46
|
8051 this.maxY = this.initPageY + iDown;
|
rlm@46
|
8052 if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }
|
rlm@46
|
8053
|
rlm@46
|
8054 this.constrainY = true;
|
rlm@46
|
8055
|
rlm@46
|
8056 },
|
rlm@46
|
8057
|
rlm@46
|
8058
|
rlm@46
|
8059 resetConstraints: function() {
|
rlm@46
|
8060
|
rlm@46
|
8061
|
rlm@46
|
8062
|
rlm@46
|
8063 if (this.initPageX || this.initPageX === 0) {
|
rlm@46
|
8064
|
rlm@46
|
8065 var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;
|
rlm@46
|
8066 var dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;
|
rlm@46
|
8067
|
rlm@46
|
8068 this.setInitPosition(dx, dy);
|
rlm@46
|
8069
|
rlm@46
|
8070
|
rlm@46
|
8071 } else {
|
rlm@46
|
8072 this.setInitPosition();
|
rlm@46
|
8073 }
|
rlm@46
|
8074
|
rlm@46
|
8075 if (this.constrainX) {
|
rlm@46
|
8076 this.setXConstraint( this.leftConstraint,
|
rlm@46
|
8077 this.rightConstraint,
|
rlm@46
|
8078 this.xTickSize );
|
rlm@46
|
8079 }
|
rlm@46
|
8080
|
rlm@46
|
8081 if (this.constrainY) {
|
rlm@46
|
8082 this.setYConstraint( this.topConstraint,
|
rlm@46
|
8083 this.bottomConstraint,
|
rlm@46
|
8084 this.yTickSize );
|
rlm@46
|
8085 }
|
rlm@46
|
8086 },
|
rlm@46
|
8087
|
rlm@46
|
8088
|
rlm@46
|
8089 getTick: function(val, tickArray) {
|
rlm@46
|
8090
|
rlm@46
|
8091 if (!tickArray) {
|
rlm@46
|
8092
|
rlm@46
|
8093
|
rlm@46
|
8094 return val;
|
rlm@46
|
8095 } else if (tickArray[0] >= val) {
|
rlm@46
|
8096
|
rlm@46
|
8097
|
rlm@46
|
8098 return tickArray[0];
|
rlm@46
|
8099 } else {
|
rlm@46
|
8100 for (var i=0, len=tickArray.length; i<len; ++i) {
|
rlm@46
|
8101 var next = i + 1;
|
rlm@46
|
8102 if (tickArray[next] && tickArray[next] >= val) {
|
rlm@46
|
8103 var diff1 = val - tickArray[i];
|
rlm@46
|
8104 var diff2 = tickArray[next] - val;
|
rlm@46
|
8105 return (diff2 > diff1) ? tickArray[i] : tickArray[next];
|
rlm@46
|
8106 }
|
rlm@46
|
8107 }
|
rlm@46
|
8108
|
rlm@46
|
8109
|
rlm@46
|
8110
|
rlm@46
|
8111 return tickArray[tickArray.length - 1];
|
rlm@46
|
8112 }
|
rlm@46
|
8113 },
|
rlm@46
|
8114
|
rlm@46
|
8115
|
rlm@46
|
8116 toString: function() {
|
rlm@46
|
8117 return ("DragDrop " + this.id);
|
rlm@46
|
8118 }
|
rlm@46
|
8119
|
rlm@46
|
8120 };
|
rlm@46
|
8121
|
rlm@46
|
8122 })();
|
rlm@46
|
8123
|
rlm@46
|
8124
|
rlm@46
|
8125
|
rlm@46
|
8126
|
rlm@46
|
8127 if (!Ext.dd.DragDropMgr) {
|
rlm@46
|
8128
|
rlm@46
|
8129
|
rlm@46
|
8130 Ext.dd.DragDropMgr = function() {
|
rlm@46
|
8131
|
rlm@46
|
8132 var Event = Ext.EventManager;
|
rlm@46
|
8133
|
rlm@46
|
8134 return {
|
rlm@46
|
8135
|
rlm@46
|
8136
|
rlm@46
|
8137 ids: {},
|
rlm@46
|
8138
|
rlm@46
|
8139
|
rlm@46
|
8140 handleIds: {},
|
rlm@46
|
8141
|
rlm@46
|
8142
|
rlm@46
|
8143 dragCurrent: null,
|
rlm@46
|
8144
|
rlm@46
|
8145
|
rlm@46
|
8146 dragOvers: {},
|
rlm@46
|
8147
|
rlm@46
|
8148
|
rlm@46
|
8149 deltaX: 0,
|
rlm@46
|
8150
|
rlm@46
|
8151
|
rlm@46
|
8152 deltaY: 0,
|
rlm@46
|
8153
|
rlm@46
|
8154
|
rlm@46
|
8155 preventDefault: true,
|
rlm@46
|
8156
|
rlm@46
|
8157
|
rlm@46
|
8158 stopPropagation: true,
|
rlm@46
|
8159
|
rlm@46
|
8160
|
rlm@46
|
8161 initialized: false,
|
rlm@46
|
8162
|
rlm@46
|
8163
|
rlm@46
|
8164 locked: false,
|
rlm@46
|
8165
|
rlm@46
|
8166
|
rlm@46
|
8167 init: function() {
|
rlm@46
|
8168 this.initialized = true;
|
rlm@46
|
8169 },
|
rlm@46
|
8170
|
rlm@46
|
8171
|
rlm@46
|
8172 POINT: 0,
|
rlm@46
|
8173
|
rlm@46
|
8174
|
rlm@46
|
8175 INTERSECT: 1,
|
rlm@46
|
8176
|
rlm@46
|
8177
|
rlm@46
|
8178 mode: 0,
|
rlm@46
|
8179
|
rlm@46
|
8180
|
rlm@46
|
8181 _execOnAll: function(sMethod, args) {
|
rlm@46
|
8182 for (var i in this.ids) {
|
rlm@46
|
8183 for (var j in this.ids[i]) {
|
rlm@46
|
8184 var oDD = this.ids[i][j];
|
rlm@46
|
8185 if (! this.isTypeOfDD(oDD)) {
|
rlm@46
|
8186 continue;
|
rlm@46
|
8187 }
|
rlm@46
|
8188 oDD[sMethod].apply(oDD, args);
|
rlm@46
|
8189 }
|
rlm@46
|
8190 }
|
rlm@46
|
8191 },
|
rlm@46
|
8192
|
rlm@46
|
8193
|
rlm@46
|
8194 _onLoad: function() {
|
rlm@46
|
8195
|
rlm@46
|
8196 this.init();
|
rlm@46
|
8197
|
rlm@46
|
8198
|
rlm@46
|
8199 Event.on(document, "mouseup", this.handleMouseUp, this, true);
|
rlm@46
|
8200 Event.on(document, "mousemove", this.handleMouseMove, this, true);
|
rlm@46
|
8201 Event.on(window, "unload", this._onUnload, this, true);
|
rlm@46
|
8202 Event.on(window, "resize", this._onResize, this, true);
|
rlm@46
|
8203
|
rlm@46
|
8204
|
rlm@46
|
8205 },
|
rlm@46
|
8206
|
rlm@46
|
8207
|
rlm@46
|
8208 _onResize: function(e) {
|
rlm@46
|
8209 this._execOnAll("resetConstraints", []);
|
rlm@46
|
8210 },
|
rlm@46
|
8211
|
rlm@46
|
8212
|
rlm@46
|
8213 lock: function() { this.locked = true; },
|
rlm@46
|
8214
|
rlm@46
|
8215
|
rlm@46
|
8216 unlock: function() { this.locked = false; },
|
rlm@46
|
8217
|
rlm@46
|
8218
|
rlm@46
|
8219 isLocked: function() { return this.locked; },
|
rlm@46
|
8220
|
rlm@46
|
8221
|
rlm@46
|
8222 locationCache: {},
|
rlm@46
|
8223
|
rlm@46
|
8224
|
rlm@46
|
8225 useCache: true,
|
rlm@46
|
8226
|
rlm@46
|
8227
|
rlm@46
|
8228 clickPixelThresh: 3,
|
rlm@46
|
8229
|
rlm@46
|
8230
|
rlm@46
|
8231 clickTimeThresh: 350,
|
rlm@46
|
8232
|
rlm@46
|
8233
|
rlm@46
|
8234 dragThreshMet: false,
|
rlm@46
|
8235
|
rlm@46
|
8236
|
rlm@46
|
8237 clickTimeout: null,
|
rlm@46
|
8238
|
rlm@46
|
8239
|
rlm@46
|
8240 startX: 0,
|
rlm@46
|
8241
|
rlm@46
|
8242
|
rlm@46
|
8243 startY: 0,
|
rlm@46
|
8244
|
rlm@46
|
8245
|
rlm@46
|
8246 regDragDrop: function(oDD, sGroup) {
|
rlm@46
|
8247 if (!this.initialized) { this.init(); }
|
rlm@46
|
8248
|
rlm@46
|
8249 if (!this.ids[sGroup]) {
|
rlm@46
|
8250 this.ids[sGroup] = {};
|
rlm@46
|
8251 }
|
rlm@46
|
8252 this.ids[sGroup][oDD.id] = oDD;
|
rlm@46
|
8253 },
|
rlm@46
|
8254
|
rlm@46
|
8255
|
rlm@46
|
8256 removeDDFromGroup: function(oDD, sGroup) {
|
rlm@46
|
8257 if (!this.ids[sGroup]) {
|
rlm@46
|
8258 this.ids[sGroup] = {};
|
rlm@46
|
8259 }
|
rlm@46
|
8260
|
rlm@46
|
8261 var obj = this.ids[sGroup];
|
rlm@46
|
8262 if (obj && obj[oDD.id]) {
|
rlm@46
|
8263 delete obj[oDD.id];
|
rlm@46
|
8264 }
|
rlm@46
|
8265 },
|
rlm@46
|
8266
|
rlm@46
|
8267
|
rlm@46
|
8268 _remove: function(oDD) {
|
rlm@46
|
8269 for (var g in oDD.groups) {
|
rlm@46
|
8270 if (g && this.ids[g][oDD.id]) {
|
rlm@46
|
8271 delete this.ids[g][oDD.id];
|
rlm@46
|
8272 }
|
rlm@46
|
8273 }
|
rlm@46
|
8274 delete this.handleIds[oDD.id];
|
rlm@46
|
8275 },
|
rlm@46
|
8276
|
rlm@46
|
8277
|
rlm@46
|
8278 regHandle: function(sDDId, sHandleId) {
|
rlm@46
|
8279 if (!this.handleIds[sDDId]) {
|
rlm@46
|
8280 this.handleIds[sDDId] = {};
|
rlm@46
|
8281 }
|
rlm@46
|
8282 this.handleIds[sDDId][sHandleId] = sHandleId;
|
rlm@46
|
8283 },
|
rlm@46
|
8284
|
rlm@46
|
8285
|
rlm@46
|
8286 isDragDrop: function(id) {
|
rlm@46
|
8287 return ( this.getDDById(id) ) ? true : false;
|
rlm@46
|
8288 },
|
rlm@46
|
8289
|
rlm@46
|
8290
|
rlm@46
|
8291 getRelated: function(p_oDD, bTargetsOnly) {
|
rlm@46
|
8292 var oDDs = [];
|
rlm@46
|
8293 for (var i in p_oDD.groups) {
|
rlm@46
|
8294 for (j in this.ids[i]) {
|
rlm@46
|
8295 var dd = this.ids[i][j];
|
rlm@46
|
8296 if (! this.isTypeOfDD(dd)) {
|
rlm@46
|
8297 continue;
|
rlm@46
|
8298 }
|
rlm@46
|
8299 if (!bTargetsOnly || dd.isTarget) {
|
rlm@46
|
8300 oDDs[oDDs.length] = dd;
|
rlm@46
|
8301 }
|
rlm@46
|
8302 }
|
rlm@46
|
8303 }
|
rlm@46
|
8304
|
rlm@46
|
8305 return oDDs;
|
rlm@46
|
8306 },
|
rlm@46
|
8307
|
rlm@46
|
8308
|
rlm@46
|
8309 isLegalTarget: function (oDD, oTargetDD) {
|
rlm@46
|
8310 var targets = this.getRelated(oDD, true);
|
rlm@46
|
8311 for (var i=0, len=targets.length;i<len;++i) {
|
rlm@46
|
8312 if (targets[i].id == oTargetDD.id) {
|
rlm@46
|
8313 return true;
|
rlm@46
|
8314 }
|
rlm@46
|
8315 }
|
rlm@46
|
8316
|
rlm@46
|
8317 return false;
|
rlm@46
|
8318 },
|
rlm@46
|
8319
|
rlm@46
|
8320
|
rlm@46
|
8321 isTypeOfDD: function (oDD) {
|
rlm@46
|
8322 return (oDD && oDD.__ygDragDrop);
|
rlm@46
|
8323 },
|
rlm@46
|
8324
|
rlm@46
|
8325
|
rlm@46
|
8326 isHandle: function(sDDId, sHandleId) {
|
rlm@46
|
8327 return ( this.handleIds[sDDId] &&
|
rlm@46
|
8328 this.handleIds[sDDId][sHandleId] );
|
rlm@46
|
8329 },
|
rlm@46
|
8330
|
rlm@46
|
8331
|
rlm@46
|
8332 getDDById: function(id) {
|
rlm@46
|
8333 for (var i in this.ids) {
|
rlm@46
|
8334 if (this.ids[i][id]) {
|
rlm@46
|
8335 return this.ids[i][id];
|
rlm@46
|
8336 }
|
rlm@46
|
8337 }
|
rlm@46
|
8338 return null;
|
rlm@46
|
8339 },
|
rlm@46
|
8340
|
rlm@46
|
8341
|
rlm@46
|
8342 handleMouseDown: function(e, oDD) {
|
rlm@46
|
8343 if(Ext.QuickTips){
|
rlm@46
|
8344 Ext.QuickTips.disable();
|
rlm@46
|
8345 }
|
rlm@46
|
8346 this.currentTarget = e.getTarget();
|
rlm@46
|
8347
|
rlm@46
|
8348 this.dragCurrent = oDD;
|
rlm@46
|
8349
|
rlm@46
|
8350 var el = oDD.getEl();
|
rlm@46
|
8351
|
rlm@46
|
8352
|
rlm@46
|
8353 this.startX = e.getPageX();
|
rlm@46
|
8354 this.startY = e.getPageY();
|
rlm@46
|
8355
|
rlm@46
|
8356 this.deltaX = this.startX - el.offsetLeft;
|
rlm@46
|
8357 this.deltaY = this.startY - el.offsetTop;
|
rlm@46
|
8358
|
rlm@46
|
8359 this.dragThreshMet = false;
|
rlm@46
|
8360
|
rlm@46
|
8361 this.clickTimeout = setTimeout(
|
rlm@46
|
8362 function() {
|
rlm@46
|
8363 var DDM = Ext.dd.DDM;
|
rlm@46
|
8364 DDM.startDrag(DDM.startX, DDM.startY);
|
rlm@46
|
8365 },
|
rlm@46
|
8366 this.clickTimeThresh );
|
rlm@46
|
8367 },
|
rlm@46
|
8368
|
rlm@46
|
8369
|
rlm@46
|
8370 startDrag: function(x, y) {
|
rlm@46
|
8371 clearTimeout(this.clickTimeout);
|
rlm@46
|
8372 if (this.dragCurrent) {
|
rlm@46
|
8373 this.dragCurrent.b4StartDrag(x, y);
|
rlm@46
|
8374 this.dragCurrent.startDrag(x, y);
|
rlm@46
|
8375 }
|
rlm@46
|
8376 this.dragThreshMet = true;
|
rlm@46
|
8377 },
|
rlm@46
|
8378
|
rlm@46
|
8379
|
rlm@46
|
8380 handleMouseUp: function(e) {
|
rlm@46
|
8381
|
rlm@46
|
8382 if(Ext.QuickTips){
|
rlm@46
|
8383 Ext.QuickTips.enable();
|
rlm@46
|
8384 }
|
rlm@46
|
8385 if (! this.dragCurrent) {
|
rlm@46
|
8386 return;
|
rlm@46
|
8387 }
|
rlm@46
|
8388
|
rlm@46
|
8389 clearTimeout(this.clickTimeout);
|
rlm@46
|
8390
|
rlm@46
|
8391 if (this.dragThreshMet) {
|
rlm@46
|
8392 this.fireEvents(e, true);
|
rlm@46
|
8393 } else {
|
rlm@46
|
8394 }
|
rlm@46
|
8395
|
rlm@46
|
8396 this.stopDrag(e);
|
rlm@46
|
8397
|
rlm@46
|
8398 this.stopEvent(e);
|
rlm@46
|
8399 },
|
rlm@46
|
8400
|
rlm@46
|
8401
|
rlm@46
|
8402 stopEvent: function(e){
|
rlm@46
|
8403 if(this.stopPropagation) {
|
rlm@46
|
8404 e.stopPropagation();
|
rlm@46
|
8405 }
|
rlm@46
|
8406
|
rlm@46
|
8407 if (this.preventDefault) {
|
rlm@46
|
8408 e.preventDefault();
|
rlm@46
|
8409 }
|
rlm@46
|
8410 },
|
rlm@46
|
8411
|
rlm@46
|
8412
|
rlm@46
|
8413 stopDrag: function(e) {
|
rlm@46
|
8414
|
rlm@46
|
8415 if (this.dragCurrent) {
|
rlm@46
|
8416 if (this.dragThreshMet) {
|
rlm@46
|
8417 this.dragCurrent.b4EndDrag(e);
|
rlm@46
|
8418 this.dragCurrent.endDrag(e);
|
rlm@46
|
8419 }
|
rlm@46
|
8420
|
rlm@46
|
8421 this.dragCurrent.onMouseUp(e);
|
rlm@46
|
8422 }
|
rlm@46
|
8423
|
rlm@46
|
8424 this.dragCurrent = null;
|
rlm@46
|
8425 this.dragOvers = {};
|
rlm@46
|
8426 },
|
rlm@46
|
8427
|
rlm@46
|
8428
|
rlm@46
|
8429 handleMouseMove: function(e) {
|
rlm@46
|
8430 if (! this.dragCurrent) {
|
rlm@46
|
8431 return true;
|
rlm@46
|
8432 }
|
rlm@46
|
8433
|
rlm@46
|
8434
|
rlm@46
|
8435
|
rlm@46
|
8436
|
rlm@46
|
8437 if (Ext.isIE && (e.button !== 0 && e.button !== 1 && e.button !== 2)) {
|
rlm@46
|
8438 this.stopEvent(e);
|
rlm@46
|
8439 return this.handleMouseUp(e);
|
rlm@46
|
8440 }
|
rlm@46
|
8441
|
rlm@46
|
8442 if (!this.dragThreshMet) {
|
rlm@46
|
8443 var diffX = Math.abs(this.startX - e.getPageX());
|
rlm@46
|
8444 var diffY = Math.abs(this.startY - e.getPageY());
|
rlm@46
|
8445 if (diffX > this.clickPixelThresh ||
|
rlm@46
|
8446 diffY > this.clickPixelThresh) {
|
rlm@46
|
8447 this.startDrag(this.startX, this.startY);
|
rlm@46
|
8448 }
|
rlm@46
|
8449 }
|
rlm@46
|
8450
|
rlm@46
|
8451 if (this.dragThreshMet) {
|
rlm@46
|
8452 this.dragCurrent.b4Drag(e);
|
rlm@46
|
8453 this.dragCurrent.onDrag(e);
|
rlm@46
|
8454 if(!this.dragCurrent.moveOnly){
|
rlm@46
|
8455 this.fireEvents(e, false);
|
rlm@46
|
8456 }
|
rlm@46
|
8457 }
|
rlm@46
|
8458
|
rlm@46
|
8459 this.stopEvent(e);
|
rlm@46
|
8460
|
rlm@46
|
8461 return true;
|
rlm@46
|
8462 },
|
rlm@46
|
8463
|
rlm@46
|
8464
|
rlm@46
|
8465 fireEvents: function(e, isDrop) {
|
rlm@46
|
8466 var dc = this.dragCurrent;
|
rlm@46
|
8467
|
rlm@46
|
8468
|
rlm@46
|
8469
|
rlm@46
|
8470 if (!dc || dc.isLocked()) {
|
rlm@46
|
8471 return;
|
rlm@46
|
8472 }
|
rlm@46
|
8473
|
rlm@46
|
8474 var pt = e.getPoint();
|
rlm@46
|
8475
|
rlm@46
|
8476
|
rlm@46
|
8477 var oldOvers = [];
|
rlm@46
|
8478
|
rlm@46
|
8479 var outEvts = [];
|
rlm@46
|
8480 var overEvts = [];
|
rlm@46
|
8481 var dropEvts = [];
|
rlm@46
|
8482 var enterEvts = [];
|
rlm@46
|
8483
|
rlm@46
|
8484
|
rlm@46
|
8485
|
rlm@46
|
8486 for (var i in this.dragOvers) {
|
rlm@46
|
8487
|
rlm@46
|
8488 var ddo = this.dragOvers[i];
|
rlm@46
|
8489
|
rlm@46
|
8490 if (! this.isTypeOfDD(ddo)) {
|
rlm@46
|
8491 continue;
|
rlm@46
|
8492 }
|
rlm@46
|
8493
|
rlm@46
|
8494 if (! this.isOverTarget(pt, ddo, this.mode)) {
|
rlm@46
|
8495 outEvts.push( ddo );
|
rlm@46
|
8496 }
|
rlm@46
|
8497
|
rlm@46
|
8498 oldOvers[i] = true;
|
rlm@46
|
8499 delete this.dragOvers[i];
|
rlm@46
|
8500 }
|
rlm@46
|
8501
|
rlm@46
|
8502 for (var sGroup in dc.groups) {
|
rlm@46
|
8503
|
rlm@46
|
8504 if ("string" != typeof sGroup) {
|
rlm@46
|
8505 continue;
|
rlm@46
|
8506 }
|
rlm@46
|
8507
|
rlm@46
|
8508 for (i in this.ids[sGroup]) {
|
rlm@46
|
8509 var oDD = this.ids[sGroup][i];
|
rlm@46
|
8510 if (! this.isTypeOfDD(oDD)) {
|
rlm@46
|
8511 continue;
|
rlm@46
|
8512 }
|
rlm@46
|
8513
|
rlm@46
|
8514 if (oDD.isTarget && !oDD.isLocked() && oDD != dc) {
|
rlm@46
|
8515 if (this.isOverTarget(pt, oDD, this.mode)) {
|
rlm@46
|
8516
|
rlm@46
|
8517 if (isDrop) {
|
rlm@46
|
8518 dropEvts.push( oDD );
|
rlm@46
|
8519
|
rlm@46
|
8520 } else {
|
rlm@46
|
8521
|
rlm@46
|
8522
|
rlm@46
|
8523 if (!oldOvers[oDD.id]) {
|
rlm@46
|
8524 enterEvts.push( oDD );
|
rlm@46
|
8525
|
rlm@46
|
8526 } else {
|
rlm@46
|
8527 overEvts.push( oDD );
|
rlm@46
|
8528 }
|
rlm@46
|
8529
|
rlm@46
|
8530 this.dragOvers[oDD.id] = oDD;
|
rlm@46
|
8531 }
|
rlm@46
|
8532 }
|
rlm@46
|
8533 }
|
rlm@46
|
8534 }
|
rlm@46
|
8535 }
|
rlm@46
|
8536
|
rlm@46
|
8537 if (this.mode) {
|
rlm@46
|
8538 if (outEvts.length) {
|
rlm@46
|
8539 dc.b4DragOut(e, outEvts);
|
rlm@46
|
8540 dc.onDragOut(e, outEvts);
|
rlm@46
|
8541 }
|
rlm@46
|
8542
|
rlm@46
|
8543 if (enterEvts.length) {
|
rlm@46
|
8544 dc.onDragEnter(e, enterEvts);
|
rlm@46
|
8545 }
|
rlm@46
|
8546
|
rlm@46
|
8547 if (overEvts.length) {
|
rlm@46
|
8548 dc.b4DragOver(e, overEvts);
|
rlm@46
|
8549 dc.onDragOver(e, overEvts);
|
rlm@46
|
8550 }
|
rlm@46
|
8551
|
rlm@46
|
8552 if (dropEvts.length) {
|
rlm@46
|
8553 dc.b4DragDrop(e, dropEvts);
|
rlm@46
|
8554 dc.onDragDrop(e, dropEvts);
|
rlm@46
|
8555 }
|
rlm@46
|
8556
|
rlm@46
|
8557 } else {
|
rlm@46
|
8558
|
rlm@46
|
8559 var len = 0;
|
rlm@46
|
8560 for (i=0, len=outEvts.length; i<len; ++i) {
|
rlm@46
|
8561 dc.b4DragOut(e, outEvts[i].id);
|
rlm@46
|
8562 dc.onDragOut(e, outEvts[i].id);
|
rlm@46
|
8563 }
|
rlm@46
|
8564
|
rlm@46
|
8565
|
rlm@46
|
8566 for (i=0,len=enterEvts.length; i<len; ++i) {
|
rlm@46
|
8567
|
rlm@46
|
8568 dc.onDragEnter(e, enterEvts[i].id);
|
rlm@46
|
8569 }
|
rlm@46
|
8570
|
rlm@46
|
8571
|
rlm@46
|
8572 for (i=0,len=overEvts.length; i<len; ++i) {
|
rlm@46
|
8573 dc.b4DragOver(e, overEvts[i].id);
|
rlm@46
|
8574 dc.onDragOver(e, overEvts[i].id);
|
rlm@46
|
8575 }
|
rlm@46
|
8576
|
rlm@46
|
8577
|
rlm@46
|
8578 for (i=0, len=dropEvts.length; i<len; ++i) {
|
rlm@46
|
8579 dc.b4DragDrop(e, dropEvts[i].id);
|
rlm@46
|
8580 dc.onDragDrop(e, dropEvts[i].id);
|
rlm@46
|
8581 }
|
rlm@46
|
8582
|
rlm@46
|
8583 }
|
rlm@46
|
8584
|
rlm@46
|
8585
|
rlm@46
|
8586 if (isDrop && !dropEvts.length) {
|
rlm@46
|
8587 dc.onInvalidDrop(e);
|
rlm@46
|
8588 }
|
rlm@46
|
8589
|
rlm@46
|
8590 },
|
rlm@46
|
8591
|
rlm@46
|
8592
|
rlm@46
|
8593 getBestMatch: function(dds) {
|
rlm@46
|
8594 var winner = null;
|
rlm@46
|
8595
|
rlm@46
|
8596
|
rlm@46
|
8597
|
rlm@46
|
8598
|
rlm@46
|
8599
|
rlm@46
|
8600
|
rlm@46
|
8601 var len = dds.length;
|
rlm@46
|
8602
|
rlm@46
|
8603 if (len == 1) {
|
rlm@46
|
8604 winner = dds[0];
|
rlm@46
|
8605 } else {
|
rlm@46
|
8606
|
rlm@46
|
8607 for (var i=0; i<len; ++i) {
|
rlm@46
|
8608 var dd = dds[i];
|
rlm@46
|
8609
|
rlm@46
|
8610
|
rlm@46
|
8611
|
rlm@46
|
8612 if (dd.cursorIsOver) {
|
rlm@46
|
8613 winner = dd;
|
rlm@46
|
8614 break;
|
rlm@46
|
8615
|
rlm@46
|
8616 } else {
|
rlm@46
|
8617 if (!winner ||
|
rlm@46
|
8618 winner.overlap.getArea() < dd.overlap.getArea()) {
|
rlm@46
|
8619 winner = dd;
|
rlm@46
|
8620 }
|
rlm@46
|
8621 }
|
rlm@46
|
8622 }
|
rlm@46
|
8623 }
|
rlm@46
|
8624
|
rlm@46
|
8625 return winner;
|
rlm@46
|
8626 },
|
rlm@46
|
8627
|
rlm@46
|
8628
|
rlm@46
|
8629 refreshCache: function(groups) {
|
rlm@46
|
8630 for (var sGroup in groups) {
|
rlm@46
|
8631 if ("string" != typeof sGroup) {
|
rlm@46
|
8632 continue;
|
rlm@46
|
8633 }
|
rlm@46
|
8634 for (var i in this.ids[sGroup]) {
|
rlm@46
|
8635 var oDD = this.ids[sGroup][i];
|
rlm@46
|
8636
|
rlm@46
|
8637 if (this.isTypeOfDD(oDD)) {
|
rlm@46
|
8638
|
rlm@46
|
8639 var loc = this.getLocation(oDD);
|
rlm@46
|
8640 if (loc) {
|
rlm@46
|
8641 this.locationCache[oDD.id] = loc;
|
rlm@46
|
8642 } else {
|
rlm@46
|
8643 delete this.locationCache[oDD.id];
|
rlm@46
|
8644
|
rlm@46
|
8645
|
rlm@46
|
8646
|
rlm@46
|
8647 }
|
rlm@46
|
8648 }
|
rlm@46
|
8649 }
|
rlm@46
|
8650 }
|
rlm@46
|
8651 },
|
rlm@46
|
8652
|
rlm@46
|
8653
|
rlm@46
|
8654 verifyEl: function(el) {
|
rlm@46
|
8655 if (el) {
|
rlm@46
|
8656 var parent;
|
rlm@46
|
8657 if(Ext.isIE){
|
rlm@46
|
8658 try{
|
rlm@46
|
8659 parent = el.offsetParent;
|
rlm@46
|
8660 }catch(e){}
|
rlm@46
|
8661 }else{
|
rlm@46
|
8662 parent = el.offsetParent;
|
rlm@46
|
8663 }
|
rlm@46
|
8664 if (parent) {
|
rlm@46
|
8665 return true;
|
rlm@46
|
8666 }
|
rlm@46
|
8667 }
|
rlm@46
|
8668
|
rlm@46
|
8669 return false;
|
rlm@46
|
8670 },
|
rlm@46
|
8671
|
rlm@46
|
8672
|
rlm@46
|
8673 getLocation: function(oDD) {
|
rlm@46
|
8674 if (! this.isTypeOfDD(oDD)) {
|
rlm@46
|
8675 return null;
|
rlm@46
|
8676 }
|
rlm@46
|
8677
|
rlm@46
|
8678 var el = oDD.getEl(), pos, x1, x2, y1, y2, t, r, b, l;
|
rlm@46
|
8679
|
rlm@46
|
8680 try {
|
rlm@46
|
8681 pos= Ext.lib.Dom.getXY(el);
|
rlm@46
|
8682 } catch (e) { }
|
rlm@46
|
8683
|
rlm@46
|
8684 if (!pos) {
|
rlm@46
|
8685 return null;
|
rlm@46
|
8686 }
|
rlm@46
|
8687
|
rlm@46
|
8688 x1 = pos[0];
|
rlm@46
|
8689 x2 = x1 + el.offsetWidth;
|
rlm@46
|
8690 y1 = pos[1];
|
rlm@46
|
8691 y2 = y1 + el.offsetHeight;
|
rlm@46
|
8692
|
rlm@46
|
8693 t = y1 - oDD.padding[0];
|
rlm@46
|
8694 r = x2 + oDD.padding[1];
|
rlm@46
|
8695 b = y2 + oDD.padding[2];
|
rlm@46
|
8696 l = x1 - oDD.padding[3];
|
rlm@46
|
8697
|
rlm@46
|
8698 return new Ext.lib.Region( t, r, b, l );
|
rlm@46
|
8699 },
|
rlm@46
|
8700
|
rlm@46
|
8701
|
rlm@46
|
8702 isOverTarget: function(pt, oTarget, intersect) {
|
rlm@46
|
8703
|
rlm@46
|
8704 var loc = this.locationCache[oTarget.id];
|
rlm@46
|
8705 if (!loc || !this.useCache) {
|
rlm@46
|
8706 loc = this.getLocation(oTarget);
|
rlm@46
|
8707 this.locationCache[oTarget.id] = loc;
|
rlm@46
|
8708
|
rlm@46
|
8709 }
|
rlm@46
|
8710
|
rlm@46
|
8711 if (!loc) {
|
rlm@46
|
8712 return false;
|
rlm@46
|
8713 }
|
rlm@46
|
8714
|
rlm@46
|
8715 oTarget.cursorIsOver = loc.contains( pt );
|
rlm@46
|
8716
|
rlm@46
|
8717
|
rlm@46
|
8718
|
rlm@46
|
8719
|
rlm@46
|
8720
|
rlm@46
|
8721
|
rlm@46
|
8722 var dc = this.dragCurrent;
|
rlm@46
|
8723 if (!dc || !dc.getTargetCoord ||
|
rlm@46
|
8724 (!intersect && !dc.constrainX && !dc.constrainY)) {
|
rlm@46
|
8725 return oTarget.cursorIsOver;
|
rlm@46
|
8726 }
|
rlm@46
|
8727
|
rlm@46
|
8728 oTarget.overlap = null;
|
rlm@46
|
8729
|
rlm@46
|
8730
|
rlm@46
|
8731
|
rlm@46
|
8732
|
rlm@46
|
8733
|
rlm@46
|
8734 var pos = dc.getTargetCoord(pt.x, pt.y);
|
rlm@46
|
8735
|
rlm@46
|
8736 var el = dc.getDragEl();
|
rlm@46
|
8737 var curRegion = new Ext.lib.Region( pos.y,
|
rlm@46
|
8738 pos.x + el.offsetWidth,
|
rlm@46
|
8739 pos.y + el.offsetHeight,
|
rlm@46
|
8740 pos.x );
|
rlm@46
|
8741
|
rlm@46
|
8742 var overlap = curRegion.intersect(loc);
|
rlm@46
|
8743
|
rlm@46
|
8744 if (overlap) {
|
rlm@46
|
8745 oTarget.overlap = overlap;
|
rlm@46
|
8746 return (intersect) ? true : oTarget.cursorIsOver;
|
rlm@46
|
8747 } else {
|
rlm@46
|
8748 return false;
|
rlm@46
|
8749 }
|
rlm@46
|
8750 },
|
rlm@46
|
8751
|
rlm@46
|
8752
|
rlm@46
|
8753 _onUnload: function(e, me) {
|
rlm@46
|
8754 Ext.dd.DragDropMgr.unregAll();
|
rlm@46
|
8755 },
|
rlm@46
|
8756
|
rlm@46
|
8757
|
rlm@46
|
8758 unregAll: function() {
|
rlm@46
|
8759
|
rlm@46
|
8760 if (this.dragCurrent) {
|
rlm@46
|
8761 this.stopDrag();
|
rlm@46
|
8762 this.dragCurrent = null;
|
rlm@46
|
8763 }
|
rlm@46
|
8764
|
rlm@46
|
8765 this._execOnAll("unreg", []);
|
rlm@46
|
8766
|
rlm@46
|
8767 for (var i in this.elementCache) {
|
rlm@46
|
8768 delete this.elementCache[i];
|
rlm@46
|
8769 }
|
rlm@46
|
8770
|
rlm@46
|
8771 this.elementCache = {};
|
rlm@46
|
8772 this.ids = {};
|
rlm@46
|
8773 },
|
rlm@46
|
8774
|
rlm@46
|
8775
|
rlm@46
|
8776 elementCache: {},
|
rlm@46
|
8777
|
rlm@46
|
8778
|
rlm@46
|
8779 getElWrapper: function(id) {
|
rlm@46
|
8780 var oWrapper = this.elementCache[id];
|
rlm@46
|
8781 if (!oWrapper || !oWrapper.el) {
|
rlm@46
|
8782 oWrapper = this.elementCache[id] =
|
rlm@46
|
8783 new this.ElementWrapper(Ext.getDom(id));
|
rlm@46
|
8784 }
|
rlm@46
|
8785 return oWrapper;
|
rlm@46
|
8786 },
|
rlm@46
|
8787
|
rlm@46
|
8788
|
rlm@46
|
8789 getElement: function(id) {
|
rlm@46
|
8790 return Ext.getDom(id);
|
rlm@46
|
8791 },
|
rlm@46
|
8792
|
rlm@46
|
8793
|
rlm@46
|
8794 getCss: function(id) {
|
rlm@46
|
8795 var el = Ext.getDom(id);
|
rlm@46
|
8796 return (el) ? el.style : null;
|
rlm@46
|
8797 },
|
rlm@46
|
8798
|
rlm@46
|
8799
|
rlm@46
|
8800 ElementWrapper: function(el) {
|
rlm@46
|
8801
|
rlm@46
|
8802 this.el = el || null;
|
rlm@46
|
8803
|
rlm@46
|
8804 this.id = this.el && el.id;
|
rlm@46
|
8805
|
rlm@46
|
8806 this.css = this.el && el.style;
|
rlm@46
|
8807 },
|
rlm@46
|
8808
|
rlm@46
|
8809
|
rlm@46
|
8810 getPosX: function(el) {
|
rlm@46
|
8811 return Ext.lib.Dom.getX(el);
|
rlm@46
|
8812 },
|
rlm@46
|
8813
|
rlm@46
|
8814
|
rlm@46
|
8815 getPosY: function(el) {
|
rlm@46
|
8816 return Ext.lib.Dom.getY(el);
|
rlm@46
|
8817 },
|
rlm@46
|
8818
|
rlm@46
|
8819
|
rlm@46
|
8820 swapNode: function(n1, n2) {
|
rlm@46
|
8821 if (n1.swapNode) {
|
rlm@46
|
8822 n1.swapNode(n2);
|
rlm@46
|
8823 } else {
|
rlm@46
|
8824 var p = n2.parentNode;
|
rlm@46
|
8825 var s = n2.nextSibling;
|
rlm@46
|
8826
|
rlm@46
|
8827 if (s == n1) {
|
rlm@46
|
8828 p.insertBefore(n1, n2);
|
rlm@46
|
8829 } else if (n2 == n1.nextSibling) {
|
rlm@46
|
8830 p.insertBefore(n2, n1);
|
rlm@46
|
8831 } else {
|
rlm@46
|
8832 n1.parentNode.replaceChild(n2, n1);
|
rlm@46
|
8833 p.insertBefore(n1, s);
|
rlm@46
|
8834 }
|
rlm@46
|
8835 }
|
rlm@46
|
8836 },
|
rlm@46
|
8837
|
rlm@46
|
8838
|
rlm@46
|
8839 getScroll: function () {
|
rlm@46
|
8840 var t, l, dde=document.documentElement, db=document.body;
|
rlm@46
|
8841 if (dde && (dde.scrollTop || dde.scrollLeft)) {
|
rlm@46
|
8842 t = dde.scrollTop;
|
rlm@46
|
8843 l = dde.scrollLeft;
|
rlm@46
|
8844 } else if (db) {
|
rlm@46
|
8845 t = db.scrollTop;
|
rlm@46
|
8846 l = db.scrollLeft;
|
rlm@46
|
8847 } else {
|
rlm@46
|
8848
|
rlm@46
|
8849 }
|
rlm@46
|
8850 return { top: t, left: l };
|
rlm@46
|
8851 },
|
rlm@46
|
8852
|
rlm@46
|
8853
|
rlm@46
|
8854 getStyle: function(el, styleProp) {
|
rlm@46
|
8855 return Ext.fly(el).getStyle(styleProp);
|
rlm@46
|
8856 },
|
rlm@46
|
8857
|
rlm@46
|
8858
|
rlm@46
|
8859 getScrollTop: function () { return this.getScroll().top; },
|
rlm@46
|
8860
|
rlm@46
|
8861
|
rlm@46
|
8862 getScrollLeft: function () { return this.getScroll().left; },
|
rlm@46
|
8863
|
rlm@46
|
8864
|
rlm@46
|
8865 moveToEl: function (moveEl, targetEl) {
|
rlm@46
|
8866 var aCoord = Ext.lib.Dom.getXY(targetEl);
|
rlm@46
|
8867 Ext.lib.Dom.setXY(moveEl, aCoord);
|
rlm@46
|
8868 },
|
rlm@46
|
8869
|
rlm@46
|
8870
|
rlm@46
|
8871 numericSort: function(a, b) { return (a - b); },
|
rlm@46
|
8872
|
rlm@46
|
8873
|
rlm@46
|
8874 _timeoutCount: 0,
|
rlm@46
|
8875
|
rlm@46
|
8876
|
rlm@46
|
8877 _addListeners: function() {
|
rlm@46
|
8878 var DDM = Ext.dd.DDM;
|
rlm@46
|
8879 if ( Ext.lib.Event && document ) {
|
rlm@46
|
8880 DDM._onLoad();
|
rlm@46
|
8881 } else {
|
rlm@46
|
8882 if (DDM._timeoutCount > 2000) {
|
rlm@46
|
8883 } else {
|
rlm@46
|
8884 setTimeout(DDM._addListeners, 10);
|
rlm@46
|
8885 if (document && document.body) {
|
rlm@46
|
8886 DDM._timeoutCount += 1;
|
rlm@46
|
8887 }
|
rlm@46
|
8888 }
|
rlm@46
|
8889 }
|
rlm@46
|
8890 },
|
rlm@46
|
8891
|
rlm@46
|
8892
|
rlm@46
|
8893 handleWasClicked: function(node, id) {
|
rlm@46
|
8894 if (this.isHandle(id, node.id)) {
|
rlm@46
|
8895 return true;
|
rlm@46
|
8896 } else {
|
rlm@46
|
8897
|
rlm@46
|
8898 var p = node.parentNode;
|
rlm@46
|
8899
|
rlm@46
|
8900 while (p) {
|
rlm@46
|
8901 if (this.isHandle(id, p.id)) {
|
rlm@46
|
8902 return true;
|
rlm@46
|
8903 } else {
|
rlm@46
|
8904 p = p.parentNode;
|
rlm@46
|
8905 }
|
rlm@46
|
8906 }
|
rlm@46
|
8907 }
|
rlm@46
|
8908
|
rlm@46
|
8909 return false;
|
rlm@46
|
8910 }
|
rlm@46
|
8911
|
rlm@46
|
8912 };
|
rlm@46
|
8913
|
rlm@46
|
8914 }();
|
rlm@46
|
8915
|
rlm@46
|
8916
|
rlm@46
|
8917 Ext.dd.DDM = Ext.dd.DragDropMgr;
|
rlm@46
|
8918 Ext.dd.DDM._addListeners();
|
rlm@46
|
8919
|
rlm@46
|
8920 }
|
rlm@46
|
8921
|
rlm@46
|
8922
|
rlm@46
|
8923 Ext.dd.DD = function(id, sGroup, config) {
|
rlm@46
|
8924 if (id) {
|
rlm@46
|
8925 this.init(id, sGroup, config);
|
rlm@46
|
8926 }
|
rlm@46
|
8927 };
|
rlm@46
|
8928
|
rlm@46
|
8929 Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, {
|
rlm@46
|
8930
|
rlm@46
|
8931
|
rlm@46
|
8932 scroll: true,
|
rlm@46
|
8933
|
rlm@46
|
8934
|
rlm@46
|
8935 autoOffset: function(iPageX, iPageY) {
|
rlm@46
|
8936 var x = iPageX - this.startPageX;
|
rlm@46
|
8937 var y = iPageY - this.startPageY;
|
rlm@46
|
8938 this.setDelta(x, y);
|
rlm@46
|
8939 },
|
rlm@46
|
8940
|
rlm@46
|
8941
|
rlm@46
|
8942 setDelta: function(iDeltaX, iDeltaY) {
|
rlm@46
|
8943 this.deltaX = iDeltaX;
|
rlm@46
|
8944 this.deltaY = iDeltaY;
|
rlm@46
|
8945 },
|
rlm@46
|
8946
|
rlm@46
|
8947
|
rlm@46
|
8948 setDragElPos: function(iPageX, iPageY) {
|
rlm@46
|
8949
|
rlm@46
|
8950
|
rlm@46
|
8951
|
rlm@46
|
8952 var el = this.getDragEl();
|
rlm@46
|
8953 this.alignElWithMouse(el, iPageX, iPageY);
|
rlm@46
|
8954 },
|
rlm@46
|
8955
|
rlm@46
|
8956
|
rlm@46
|
8957 alignElWithMouse: function(el, iPageX, iPageY) {
|
rlm@46
|
8958 var oCoord = this.getTargetCoord(iPageX, iPageY);
|
rlm@46
|
8959 var fly = el.dom ? el : Ext.fly(el, '_dd');
|
rlm@46
|
8960 if (!this.deltaSetXY) {
|
rlm@46
|
8961 var aCoord = [oCoord.x, oCoord.y];
|
rlm@46
|
8962 fly.setXY(aCoord);
|
rlm@46
|
8963 var newLeft = fly.getLeft(true);
|
rlm@46
|
8964 var newTop = fly.getTop(true);
|
rlm@46
|
8965 this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ];
|
rlm@46
|
8966 } else {
|
rlm@46
|
8967 fly.setLeftTop(oCoord.x + this.deltaSetXY[0], oCoord.y + this.deltaSetXY[1]);
|
rlm@46
|
8968 }
|
rlm@46
|
8969
|
rlm@46
|
8970 this.cachePosition(oCoord.x, oCoord.y);
|
rlm@46
|
8971 this.autoScroll(oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth);
|
rlm@46
|
8972 return oCoord;
|
rlm@46
|
8973 },
|
rlm@46
|
8974
|
rlm@46
|
8975
|
rlm@46
|
8976 cachePosition: function(iPageX, iPageY) {
|
rlm@46
|
8977 if (iPageX) {
|
rlm@46
|
8978 this.lastPageX = iPageX;
|
rlm@46
|
8979 this.lastPageY = iPageY;
|
rlm@46
|
8980 } else {
|
rlm@46
|
8981 var aCoord = Ext.lib.Dom.getXY(this.getEl());
|
rlm@46
|
8982 this.lastPageX = aCoord[0];
|
rlm@46
|
8983 this.lastPageY = aCoord[1];
|
rlm@46
|
8984 }
|
rlm@46
|
8985 },
|
rlm@46
|
8986
|
rlm@46
|
8987
|
rlm@46
|
8988 autoScroll: function(x, y, h, w) {
|
rlm@46
|
8989
|
rlm@46
|
8990 if (this.scroll) {
|
rlm@46
|
8991
|
rlm@46
|
8992 var clientH = Ext.lib.Dom.getViewHeight();
|
rlm@46
|
8993
|
rlm@46
|
8994
|
rlm@46
|
8995 var clientW = Ext.lib.Dom.getViewWidth();
|
rlm@46
|
8996
|
rlm@46
|
8997
|
rlm@46
|
8998 var st = this.DDM.getScrollTop();
|
rlm@46
|
8999
|
rlm@46
|
9000
|
rlm@46
|
9001 var sl = this.DDM.getScrollLeft();
|
rlm@46
|
9002
|
rlm@46
|
9003
|
rlm@46
|
9004 var bot = h + y;
|
rlm@46
|
9005
|
rlm@46
|
9006
|
rlm@46
|
9007 var right = w + x;
|
rlm@46
|
9008
|
rlm@46
|
9009
|
rlm@46
|
9010
|
rlm@46
|
9011
|
rlm@46
|
9012 var toBot = (clientH + st - y - this.deltaY);
|
rlm@46
|
9013
|
rlm@46
|
9014
|
rlm@46
|
9015 var toRight = (clientW + sl - x - this.deltaX);
|
rlm@46
|
9016
|
rlm@46
|
9017
|
rlm@46
|
9018
|
rlm@46
|
9019
|
rlm@46
|
9020 var thresh = 40;
|
rlm@46
|
9021
|
rlm@46
|
9022
|
rlm@46
|
9023
|
rlm@46
|
9024
|
rlm@46
|
9025 var scrAmt = (document.all) ? 80 : 30;
|
rlm@46
|
9026
|
rlm@46
|
9027
|
rlm@46
|
9028
|
rlm@46
|
9029 if ( bot > clientH && toBot < thresh ) {
|
rlm@46
|
9030 window.scrollTo(sl, st + scrAmt);
|
rlm@46
|
9031 }
|
rlm@46
|
9032
|
rlm@46
|
9033
|
rlm@46
|
9034
|
rlm@46
|
9035 if ( y < st && st > 0 && y - st < thresh ) {
|
rlm@46
|
9036 window.scrollTo(sl, st - scrAmt);
|
rlm@46
|
9037 }
|
rlm@46
|
9038
|
rlm@46
|
9039
|
rlm@46
|
9040
|
rlm@46
|
9041 if ( right > clientW && toRight < thresh ) {
|
rlm@46
|
9042 window.scrollTo(sl + scrAmt, st);
|
rlm@46
|
9043 }
|
rlm@46
|
9044
|
rlm@46
|
9045
|
rlm@46
|
9046
|
rlm@46
|
9047 if ( x < sl && sl > 0 && x - sl < thresh ) {
|
rlm@46
|
9048 window.scrollTo(sl - scrAmt, st);
|
rlm@46
|
9049 }
|
rlm@46
|
9050 }
|
rlm@46
|
9051 },
|
rlm@46
|
9052
|
rlm@46
|
9053
|
rlm@46
|
9054 getTargetCoord: function(iPageX, iPageY) {
|
rlm@46
|
9055
|
rlm@46
|
9056
|
rlm@46
|
9057 var x = iPageX - this.deltaX;
|
rlm@46
|
9058 var y = iPageY - this.deltaY;
|
rlm@46
|
9059
|
rlm@46
|
9060 if (this.constrainX) {
|
rlm@46
|
9061 if (x < this.minX) { x = this.minX; }
|
rlm@46
|
9062 if (x > this.maxX) { x = this.maxX; }
|
rlm@46
|
9063 }
|
rlm@46
|
9064
|
rlm@46
|
9065 if (this.constrainY) {
|
rlm@46
|
9066 if (y < this.minY) { y = this.minY; }
|
rlm@46
|
9067 if (y > this.maxY) { y = this.maxY; }
|
rlm@46
|
9068 }
|
rlm@46
|
9069
|
rlm@46
|
9070 x = this.getTick(x, this.xTicks);
|
rlm@46
|
9071 y = this.getTick(y, this.yTicks);
|
rlm@46
|
9072
|
rlm@46
|
9073
|
rlm@46
|
9074 return {x:x, y:y};
|
rlm@46
|
9075 },
|
rlm@46
|
9076
|
rlm@46
|
9077
|
rlm@46
|
9078 applyConfig: function() {
|
rlm@46
|
9079 Ext.dd.DD.superclass.applyConfig.call(this);
|
rlm@46
|
9080 this.scroll = (this.config.scroll !== false);
|
rlm@46
|
9081 },
|
rlm@46
|
9082
|
rlm@46
|
9083
|
rlm@46
|
9084 b4MouseDown: function(e) {
|
rlm@46
|
9085
|
rlm@46
|
9086 this.autoOffset(e.getPageX(),
|
rlm@46
|
9087 e.getPageY());
|
rlm@46
|
9088 },
|
rlm@46
|
9089
|
rlm@46
|
9090
|
rlm@46
|
9091 b4Drag: function(e) {
|
rlm@46
|
9092 this.setDragElPos(e.getPageX(),
|
rlm@46
|
9093 e.getPageY());
|
rlm@46
|
9094 },
|
rlm@46
|
9095
|
rlm@46
|
9096 toString: function() {
|
rlm@46
|
9097 return ("DD " + this.id);
|
rlm@46
|
9098 }
|
rlm@46
|
9099
|
rlm@46
|
9100
|
rlm@46
|
9101
|
rlm@46
|
9102
|
rlm@46
|
9103
|
rlm@46
|
9104
|
rlm@46
|
9105 });
|
rlm@46
|
9106
|
rlm@46
|
9107 Ext.dd.DDProxy = function(id, sGroup, config) {
|
rlm@46
|
9108 if (id) {
|
rlm@46
|
9109 this.init(id, sGroup, config);
|
rlm@46
|
9110 this.initFrame();
|
rlm@46
|
9111 }
|
rlm@46
|
9112 };
|
rlm@46
|
9113
|
rlm@46
|
9114
|
rlm@46
|
9115 Ext.dd.DDProxy.dragElId = "ygddfdiv";
|
rlm@46
|
9116
|
rlm@46
|
9117 Ext.extend(Ext.dd.DDProxy, Ext.dd.DD, {
|
rlm@46
|
9118
|
rlm@46
|
9119
|
rlm@46
|
9120 resizeFrame: true,
|
rlm@46
|
9121
|
rlm@46
|
9122
|
rlm@46
|
9123 centerFrame: false,
|
rlm@46
|
9124
|
rlm@46
|
9125
|
rlm@46
|
9126 createFrame: function() {
|
rlm@46
|
9127 var self = this;
|
rlm@46
|
9128 var body = document.body;
|
rlm@46
|
9129
|
rlm@46
|
9130 if (!body || !body.firstChild) {
|
rlm@46
|
9131 setTimeout( function() { self.createFrame(); }, 50 );
|
rlm@46
|
9132 return;
|
rlm@46
|
9133 }
|
rlm@46
|
9134
|
rlm@46
|
9135 var div = this.getDragEl();
|
rlm@46
|
9136
|
rlm@46
|
9137 if (!div) {
|
rlm@46
|
9138 div = document.createElement("div");
|
rlm@46
|
9139 div.id = this.dragElId;
|
rlm@46
|
9140 var s = div.style;
|
rlm@46
|
9141
|
rlm@46
|
9142 s.position = "absolute";
|
rlm@46
|
9143 s.visibility = "hidden";
|
rlm@46
|
9144 s.cursor = "move";
|
rlm@46
|
9145 s.border = "2px solid #aaa";
|
rlm@46
|
9146 s.zIndex = 999;
|
rlm@46
|
9147
|
rlm@46
|
9148
|
rlm@46
|
9149
|
rlm@46
|
9150
|
rlm@46
|
9151 body.insertBefore(div, body.firstChild);
|
rlm@46
|
9152 }
|
rlm@46
|
9153 },
|
rlm@46
|
9154
|
rlm@46
|
9155
|
rlm@46
|
9156 initFrame: function() {
|
rlm@46
|
9157 this.createFrame();
|
rlm@46
|
9158 },
|
rlm@46
|
9159
|
rlm@46
|
9160 applyConfig: function() {
|
rlm@46
|
9161 Ext.dd.DDProxy.superclass.applyConfig.call(this);
|
rlm@46
|
9162
|
rlm@46
|
9163 this.resizeFrame = (this.config.resizeFrame !== false);
|
rlm@46
|
9164 this.centerFrame = (this.config.centerFrame);
|
rlm@46
|
9165 this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId);
|
rlm@46
|
9166 },
|
rlm@46
|
9167
|
rlm@46
|
9168
|
rlm@46
|
9169 showFrame: function(iPageX, iPageY) {
|
rlm@46
|
9170 var el = this.getEl();
|
rlm@46
|
9171 var dragEl = this.getDragEl();
|
rlm@46
|
9172 var s = dragEl.style;
|
rlm@46
|
9173
|
rlm@46
|
9174 this._resizeProxy();
|
rlm@46
|
9175
|
rlm@46
|
9176 if (this.centerFrame) {
|
rlm@46
|
9177 this.setDelta( Math.round(parseInt(s.width, 10)/2),
|
rlm@46
|
9178 Math.round(parseInt(s.height, 10)/2) );
|
rlm@46
|
9179 }
|
rlm@46
|
9180
|
rlm@46
|
9181 this.setDragElPos(iPageX, iPageY);
|
rlm@46
|
9182
|
rlm@46
|
9183 Ext.fly(dragEl).show();
|
rlm@46
|
9184 },
|
rlm@46
|
9185
|
rlm@46
|
9186
|
rlm@46
|
9187 _resizeProxy: function() {
|
rlm@46
|
9188 if (this.resizeFrame) {
|
rlm@46
|
9189 var el = this.getEl();
|
rlm@46
|
9190 Ext.fly(this.getDragEl()).setSize(el.offsetWidth, el.offsetHeight);
|
rlm@46
|
9191 }
|
rlm@46
|
9192 },
|
rlm@46
|
9193
|
rlm@46
|
9194
|
rlm@46
|
9195 b4MouseDown: function(e) {
|
rlm@46
|
9196 var x = e.getPageX();
|
rlm@46
|
9197 var y = e.getPageY();
|
rlm@46
|
9198 this.autoOffset(x, y);
|
rlm@46
|
9199 this.setDragElPos(x, y);
|
rlm@46
|
9200 },
|
rlm@46
|
9201
|
rlm@46
|
9202
|
rlm@46
|
9203 b4StartDrag: function(x, y) {
|
rlm@46
|
9204
|
rlm@46
|
9205 this.showFrame(x, y);
|
rlm@46
|
9206 },
|
rlm@46
|
9207
|
rlm@46
|
9208
|
rlm@46
|
9209 b4EndDrag: function(e) {
|
rlm@46
|
9210 Ext.fly(this.getDragEl()).hide();
|
rlm@46
|
9211 },
|
rlm@46
|
9212
|
rlm@46
|
9213
|
rlm@46
|
9214
|
rlm@46
|
9215
|
rlm@46
|
9216 endDrag: function(e) {
|
rlm@46
|
9217
|
rlm@46
|
9218 var lel = this.getEl();
|
rlm@46
|
9219 var del = this.getDragEl();
|
rlm@46
|
9220
|
rlm@46
|
9221
|
rlm@46
|
9222 del.style.visibility = "";
|
rlm@46
|
9223
|
rlm@46
|
9224 this.beforeMove();
|
rlm@46
|
9225
|
rlm@46
|
9226
|
rlm@46
|
9227 lel.style.visibility = "hidden";
|
rlm@46
|
9228 Ext.dd.DDM.moveToEl(lel, del);
|
rlm@46
|
9229 del.style.visibility = "hidden";
|
rlm@46
|
9230 lel.style.visibility = "";
|
rlm@46
|
9231
|
rlm@46
|
9232 this.afterDrag();
|
rlm@46
|
9233 },
|
rlm@46
|
9234
|
rlm@46
|
9235 beforeMove : function(){
|
rlm@46
|
9236
|
rlm@46
|
9237 },
|
rlm@46
|
9238
|
rlm@46
|
9239 afterDrag : function(){
|
rlm@46
|
9240
|
rlm@46
|
9241 },
|
rlm@46
|
9242
|
rlm@46
|
9243 toString: function() {
|
rlm@46
|
9244 return ("DDProxy " + this.id);
|
rlm@46
|
9245 }
|
rlm@46
|
9246
|
rlm@46
|
9247 });
|
rlm@46
|
9248
|
rlm@46
|
9249 Ext.dd.DDTarget = function(id, sGroup, config) {
|
rlm@46
|
9250 if (id) {
|
rlm@46
|
9251 this.initTarget(id, sGroup, config);
|
rlm@46
|
9252 }
|
rlm@46
|
9253 };
|
rlm@46
|
9254
|
rlm@46
|
9255
|
rlm@46
|
9256 Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, {
|
rlm@46
|
9257 toString: function() {
|
rlm@46
|
9258 return ("DDTarget " + this.id);
|
rlm@46
|
9259 }
|
rlm@46
|
9260 });
|
rlm@46
|
9261
|
rlm@46
|
9262 Ext.dd.DragTracker = function(config){
|
rlm@46
|
9263 Ext.apply(this, config);
|
rlm@46
|
9264 this.addEvents(
|
rlm@46
|
9265 'mousedown',
|
rlm@46
|
9266 'mouseup',
|
rlm@46
|
9267 'mousemove',
|
rlm@46
|
9268 'dragstart',
|
rlm@46
|
9269 'dragend',
|
rlm@46
|
9270 'drag'
|
rlm@46
|
9271 );
|
rlm@46
|
9272
|
rlm@46
|
9273 this.dragRegion = new Ext.lib.Region(0,0,0,0);
|
rlm@46
|
9274
|
rlm@46
|
9275 if(this.el){
|
rlm@46
|
9276 this.initEl(this.el);
|
rlm@46
|
9277 }
|
rlm@46
|
9278 }
|
rlm@46
|
9279
|
rlm@46
|
9280 Ext.extend(Ext.dd.DragTracker, Ext.util.Observable, {
|
rlm@46
|
9281 active: false,
|
rlm@46
|
9282 tolerance: 5,
|
rlm@46
|
9283 autoStart: false,
|
rlm@46
|
9284
|
rlm@46
|
9285 initEl: function(el){
|
rlm@46
|
9286 this.el = Ext.get(el);
|
rlm@46
|
9287 el.on('mousedown', this.onMouseDown, this,
|
rlm@46
|
9288 this.delegate ? {delegate: this.delegate} : undefined);
|
rlm@46
|
9289 },
|
rlm@46
|
9290
|
rlm@46
|
9291 destroy : function(){
|
rlm@46
|
9292 this.el.un('mousedown', this.onMouseDown, this);
|
rlm@46
|
9293 },
|
rlm@46
|
9294
|
rlm@46
|
9295 onMouseDown: function(e, target){
|
rlm@46
|
9296 if(this.fireEvent('mousedown', this, e) !== false && this.onBeforeStart(e) !== false){
|
rlm@46
|
9297 this.startXY = this.lastXY = e.getXY();
|
rlm@46
|
9298 this.dragTarget = this.delegate ? target : this.el.dom;
|
rlm@46
|
9299 e.preventDefault();
|
rlm@46
|
9300 var doc = Ext.getDoc();
|
rlm@46
|
9301 doc.on('mouseup', this.onMouseUp, this);
|
rlm@46
|
9302 doc.on('mousemove', this.onMouseMove, this);
|
rlm@46
|
9303 doc.on('selectstart', this.stopSelect, this);
|
rlm@46
|
9304 if(this.autoStart){
|
rlm@46
|
9305 this.timer = this.triggerStart.defer(this.autoStart === true ? 1000 : this.autoStart, this);
|
rlm@46
|
9306 }
|
rlm@46
|
9307 }
|
rlm@46
|
9308 },
|
rlm@46
|
9309
|
rlm@46
|
9310 onMouseMove: function(e, target){
|
rlm@46
|
9311 e.preventDefault();
|
rlm@46
|
9312 var xy = e.getXY(), s = this.startXY;
|
rlm@46
|
9313 this.lastXY = xy;
|
rlm@46
|
9314 if(!this.active){
|
rlm@46
|
9315 if(Math.abs(s[0]-xy[0]) > this.tolerance || Math.abs(s[1]-xy[1]) > this.tolerance){
|
rlm@46
|
9316 this.triggerStart();
|
rlm@46
|
9317 }else{
|
rlm@46
|
9318 return;
|
rlm@46
|
9319 }
|
rlm@46
|
9320 }
|
rlm@46
|
9321 this.fireEvent('mousemove', this, e);
|
rlm@46
|
9322 this.onDrag(e);
|
rlm@46
|
9323 this.fireEvent('drag', this, e);
|
rlm@46
|
9324 },
|
rlm@46
|
9325
|
rlm@46
|
9326 onMouseUp: function(e){
|
rlm@46
|
9327 var doc = Ext.getDoc();
|
rlm@46
|
9328 doc.un('mousemove', this.onMouseMove, this);
|
rlm@46
|
9329 doc.un('mouseup', this.onMouseUp, this);
|
rlm@46
|
9330 doc.un('selectstart', this.stopSelect, this);
|
rlm@46
|
9331 e.preventDefault();
|
rlm@46
|
9332 this.clearStart();
|
rlm@46
|
9333 this.active = false;
|
rlm@46
|
9334 delete this.elRegion;
|
rlm@46
|
9335 this.fireEvent('mouseup', this, e);
|
rlm@46
|
9336 this.onEnd(e);
|
rlm@46
|
9337 this.fireEvent('dragend', this, e);
|
rlm@46
|
9338 },
|
rlm@46
|
9339
|
rlm@46
|
9340 triggerStart: function(isTimer){
|
rlm@46
|
9341 this.clearStart();
|
rlm@46
|
9342 this.active = true;
|
rlm@46
|
9343 this.onStart(this.startXY);
|
rlm@46
|
9344 this.fireEvent('dragstart', this, this.startXY);
|
rlm@46
|
9345 },
|
rlm@46
|
9346
|
rlm@46
|
9347 clearStart : function(){
|
rlm@46
|
9348 if(this.timer){
|
rlm@46
|
9349 clearTimeout(this.timer);
|
rlm@46
|
9350 delete this.timer;
|
rlm@46
|
9351 }
|
rlm@46
|
9352 },
|
rlm@46
|
9353
|
rlm@46
|
9354 stopSelect : function(e){
|
rlm@46
|
9355 e.stopEvent();
|
rlm@46
|
9356 return false;
|
rlm@46
|
9357 },
|
rlm@46
|
9358
|
rlm@46
|
9359 onBeforeStart : function(e){
|
rlm@46
|
9360
|
rlm@46
|
9361 },
|
rlm@46
|
9362
|
rlm@46
|
9363 onStart : function(xy){
|
rlm@46
|
9364
|
rlm@46
|
9365 },
|
rlm@46
|
9366
|
rlm@46
|
9367 onDrag : function(e){
|
rlm@46
|
9368
|
rlm@46
|
9369 },
|
rlm@46
|
9370
|
rlm@46
|
9371 onEnd : function(e){
|
rlm@46
|
9372
|
rlm@46
|
9373 },
|
rlm@46
|
9374
|
rlm@46
|
9375 getDragTarget : function(){
|
rlm@46
|
9376 return this.dragTarget;
|
rlm@46
|
9377 },
|
rlm@46
|
9378
|
rlm@46
|
9379 getDragCt : function(){
|
rlm@46
|
9380 return this.el;
|
rlm@46
|
9381 },
|
rlm@46
|
9382
|
rlm@46
|
9383 getXY : function(constrain){
|
rlm@46
|
9384 return constrain ?
|
rlm@46
|
9385 this.constrainModes[constrain].call(this, this.lastXY) : this.lastXY;
|
rlm@46
|
9386 },
|
rlm@46
|
9387
|
rlm@46
|
9388 getOffset : function(constrain){
|
rlm@46
|
9389 var xy = this.getXY(constrain);
|
rlm@46
|
9390 var s = this.startXY;
|
rlm@46
|
9391 return [s[0]-xy[0], s[1]-xy[1]];
|
rlm@46
|
9392 },
|
rlm@46
|
9393
|
rlm@46
|
9394 constrainModes: {
|
rlm@46
|
9395 'point' : function(xy){
|
rlm@46
|
9396
|
rlm@46
|
9397 if(!this.elRegion){
|
rlm@46
|
9398 this.elRegion = this.getDragCt().getRegion();
|
rlm@46
|
9399 }
|
rlm@46
|
9400
|
rlm@46
|
9401 var dr = this.dragRegion;
|
rlm@46
|
9402
|
rlm@46
|
9403 dr.left = xy[0];
|
rlm@46
|
9404 dr.top = xy[1];
|
rlm@46
|
9405 dr.right = xy[0];
|
rlm@46
|
9406 dr.bottom = xy[1];
|
rlm@46
|
9407
|
rlm@46
|
9408 dr.constrainTo(this.elRegion);
|
rlm@46
|
9409
|
rlm@46
|
9410 return [dr.left, dr.top];
|
rlm@46
|
9411 }
|
rlm@46
|
9412 }
|
rlm@46
|
9413 });
|
rlm@46
|
9414
|
rlm@46
|
9415 Ext.dd.ScrollManager = function(){
|
rlm@46
|
9416 var ddm = Ext.dd.DragDropMgr;
|
rlm@46
|
9417 var els = {};
|
rlm@46
|
9418 var dragEl = null;
|
rlm@46
|
9419 var proc = {};
|
rlm@46
|
9420
|
rlm@46
|
9421 var onStop = function(e){
|
rlm@46
|
9422 dragEl = null;
|
rlm@46
|
9423 clearProc();
|
rlm@46
|
9424 };
|
rlm@46
|
9425
|
rlm@46
|
9426 var triggerRefresh = function(){
|
rlm@46
|
9427 if(ddm.dragCurrent){
|
rlm@46
|
9428 ddm.refreshCache(ddm.dragCurrent.groups);
|
rlm@46
|
9429 }
|
rlm@46
|
9430 };
|
rlm@46
|
9431
|
rlm@46
|
9432 var doScroll = function(){
|
rlm@46
|
9433 if(ddm.dragCurrent){
|
rlm@46
|
9434 var dds = Ext.dd.ScrollManager;
|
rlm@46
|
9435 var inc = proc.el.ddScrollConfig ?
|
rlm@46
|
9436 proc.el.ddScrollConfig.increment : dds.increment;
|
rlm@46
|
9437 if(!dds.animate){
|
rlm@46
|
9438 if(proc.el.scroll(proc.dir, inc)){
|
rlm@46
|
9439 triggerRefresh();
|
rlm@46
|
9440 }
|
rlm@46
|
9441 }else{
|
rlm@46
|
9442 proc.el.scroll(proc.dir, inc, true, dds.animDuration, triggerRefresh);
|
rlm@46
|
9443 }
|
rlm@46
|
9444 }
|
rlm@46
|
9445 };
|
rlm@46
|
9446
|
rlm@46
|
9447 var clearProc = function(){
|
rlm@46
|
9448 if(proc.id){
|
rlm@46
|
9449 clearInterval(proc.id);
|
rlm@46
|
9450 }
|
rlm@46
|
9451 proc.id = 0;
|
rlm@46
|
9452 proc.el = null;
|
rlm@46
|
9453 proc.dir = "";
|
rlm@46
|
9454 };
|
rlm@46
|
9455
|
rlm@46
|
9456 var startProc = function(el, dir){
|
rlm@46
|
9457 clearProc();
|
rlm@46
|
9458 proc.el = el;
|
rlm@46
|
9459 proc.dir = dir;
|
rlm@46
|
9460 proc.id = setInterval(doScroll, Ext.dd.ScrollManager.frequency);
|
rlm@46
|
9461 };
|
rlm@46
|
9462
|
rlm@46
|
9463 var onFire = function(e, isDrop){
|
rlm@46
|
9464 if(isDrop || !ddm.dragCurrent){ return; }
|
rlm@46
|
9465 var dds = Ext.dd.ScrollManager;
|
rlm@46
|
9466 if(!dragEl || dragEl != ddm.dragCurrent){
|
rlm@46
|
9467 dragEl = ddm.dragCurrent;
|
rlm@46
|
9468
|
rlm@46
|
9469 dds.refreshCache();
|
rlm@46
|
9470 }
|
rlm@46
|
9471
|
rlm@46
|
9472 var xy = Ext.lib.Event.getXY(e);
|
rlm@46
|
9473 var pt = new Ext.lib.Point(xy[0], xy[1]);
|
rlm@46
|
9474 for(var id in els){
|
rlm@46
|
9475 var el = els[id], r = el._region;
|
rlm@46
|
9476 var c = el.ddScrollConfig ? el.ddScrollConfig : dds;
|
rlm@46
|
9477 if(r && r.contains(pt) && el.isScrollable()){
|
rlm@46
|
9478 if(r.bottom - pt.y <= c.vthresh){
|
rlm@46
|
9479 if(proc.el != el){
|
rlm@46
|
9480 startProc(el, "down");
|
rlm@46
|
9481 }
|
rlm@46
|
9482 return;
|
rlm@46
|
9483 }else if(r.right - pt.x <= c.hthresh){
|
rlm@46
|
9484 if(proc.el != el){
|
rlm@46
|
9485 startProc(el, "left");
|
rlm@46
|
9486 }
|
rlm@46
|
9487 return;
|
rlm@46
|
9488 }else if(pt.y - r.top <= c.vthresh){
|
rlm@46
|
9489 if(proc.el != el){
|
rlm@46
|
9490 startProc(el, "up");
|
rlm@46
|
9491 }
|
rlm@46
|
9492 return;
|
rlm@46
|
9493 }else if(pt.x - r.left <= c.hthresh){
|
rlm@46
|
9494 if(proc.el != el){
|
rlm@46
|
9495 startProc(el, "right");
|
rlm@46
|
9496 }
|
rlm@46
|
9497 return;
|
rlm@46
|
9498 }
|
rlm@46
|
9499 }
|
rlm@46
|
9500 }
|
rlm@46
|
9501 clearProc();
|
rlm@46
|
9502 };
|
rlm@46
|
9503
|
rlm@46
|
9504 ddm.fireEvents = ddm.fireEvents.createSequence(onFire, ddm);
|
rlm@46
|
9505 ddm.stopDrag = ddm.stopDrag.createSequence(onStop, ddm);
|
rlm@46
|
9506
|
rlm@46
|
9507 return {
|
rlm@46
|
9508
|
rlm@46
|
9509 register : function(el){
|
rlm@46
|
9510 if(Ext.isArray(el)){
|
rlm@46
|
9511 for(var i = 0, len = el.length; i < len; i++) {
|
rlm@46
|
9512 this.register(el[i]);
|
rlm@46
|
9513 }
|
rlm@46
|
9514 }else{
|
rlm@46
|
9515 el = Ext.get(el);
|
rlm@46
|
9516 els[el.id] = el;
|
rlm@46
|
9517 }
|
rlm@46
|
9518 },
|
rlm@46
|
9519
|
rlm@46
|
9520
|
rlm@46
|
9521 unregister : function(el){
|
rlm@46
|
9522 if(Ext.isArray(el)){
|
rlm@46
|
9523 for(var i = 0, len = el.length; i < len; i++) {
|
rlm@46
|
9524 this.unregister(el[i]);
|
rlm@46
|
9525 }
|
rlm@46
|
9526 }else{
|
rlm@46
|
9527 el = Ext.get(el);
|
rlm@46
|
9528 delete els[el.id];
|
rlm@46
|
9529 }
|
rlm@46
|
9530 },
|
rlm@46
|
9531
|
rlm@46
|
9532
|
rlm@46
|
9533 vthresh : 25,
|
rlm@46
|
9534
|
rlm@46
|
9535 hthresh : 25,
|
rlm@46
|
9536
|
rlm@46
|
9537
|
rlm@46
|
9538 increment : 100,
|
rlm@46
|
9539
|
rlm@46
|
9540
|
rlm@46
|
9541 frequency : 500,
|
rlm@46
|
9542
|
rlm@46
|
9543
|
rlm@46
|
9544 animate: true,
|
rlm@46
|
9545
|
rlm@46
|
9546
|
rlm@46
|
9547 animDuration: .4,
|
rlm@46
|
9548
|
rlm@46
|
9549
|
rlm@46
|
9550 refreshCache : function(){
|
rlm@46
|
9551 for(var id in els){
|
rlm@46
|
9552 if(typeof els[id] == 'object'){
|
rlm@46
|
9553 els[id]._region = els[id].getRegion();
|
rlm@46
|
9554 }
|
rlm@46
|
9555 }
|
rlm@46
|
9556 }
|
rlm@46
|
9557 };
|
rlm@46
|
9558 }();
|
rlm@46
|
9559
|
rlm@46
|
9560 Ext.dd.Registry = function(){
|
rlm@46
|
9561 var elements = {};
|
rlm@46
|
9562 var handles = {};
|
rlm@46
|
9563 var autoIdSeed = 0;
|
rlm@46
|
9564
|
rlm@46
|
9565 var getId = function(el, autogen){
|
rlm@46
|
9566 if(typeof el == "string"){
|
rlm@46
|
9567 return el;
|
rlm@46
|
9568 }
|
rlm@46
|
9569 var id = el.id;
|
rlm@46
|
9570 if(!id && autogen !== false){
|
rlm@46
|
9571 id = "extdd-" + (++autoIdSeed);
|
rlm@46
|
9572 el.id = id;
|
rlm@46
|
9573 }
|
rlm@46
|
9574 return id;
|
rlm@46
|
9575 };
|
rlm@46
|
9576
|
rlm@46
|
9577 return {
|
rlm@46
|
9578
|
rlm@46
|
9579 register : function(el, data){
|
rlm@46
|
9580 data = data || {};
|
rlm@46
|
9581 if(typeof el == "string"){
|
rlm@46
|
9582 el = document.getElementById(el);
|
rlm@46
|
9583 }
|
rlm@46
|
9584 data.ddel = el;
|
rlm@46
|
9585 elements[getId(el)] = data;
|
rlm@46
|
9586 if(data.isHandle !== false){
|
rlm@46
|
9587 handles[data.ddel.id] = data;
|
rlm@46
|
9588 }
|
rlm@46
|
9589 if(data.handles){
|
rlm@46
|
9590 var hs = data.handles;
|
rlm@46
|
9591 for(var i = 0, len = hs.length; i < len; i++){
|
rlm@46
|
9592 handles[getId(hs[i])] = data;
|
rlm@46
|
9593 }
|
rlm@46
|
9594 }
|
rlm@46
|
9595 },
|
rlm@46
|
9596
|
rlm@46
|
9597
|
rlm@46
|
9598 unregister : function(el){
|
rlm@46
|
9599 var id = getId(el, false);
|
rlm@46
|
9600 var data = elements[id];
|
rlm@46
|
9601 if(data){
|
rlm@46
|
9602 delete elements[id];
|
rlm@46
|
9603 if(data.handles){
|
rlm@46
|
9604 var hs = data.handles;
|
rlm@46
|
9605 for(var i = 0, len = hs.length; i < len; i++){
|
rlm@46
|
9606 delete handles[getId(hs[i], false)];
|
rlm@46
|
9607 }
|
rlm@46
|
9608 }
|
rlm@46
|
9609 }
|
rlm@46
|
9610 },
|
rlm@46
|
9611
|
rlm@46
|
9612
|
rlm@46
|
9613 getHandle : function(id){
|
rlm@46
|
9614 if(typeof id != "string"){
|
rlm@46
|
9615 id = id.id;
|
rlm@46
|
9616 }
|
rlm@46
|
9617 return handles[id];
|
rlm@46
|
9618 },
|
rlm@46
|
9619
|
rlm@46
|
9620
|
rlm@46
|
9621 getHandleFromEvent : function(e){
|
rlm@46
|
9622 var t = Ext.lib.Event.getTarget(e);
|
rlm@46
|
9623 return t ? handles[t.id] : null;
|
rlm@46
|
9624 },
|
rlm@46
|
9625
|
rlm@46
|
9626
|
rlm@46
|
9627 getTarget : function(id){
|
rlm@46
|
9628 if(typeof id != "string"){
|
rlm@46
|
9629 id = id.id;
|
rlm@46
|
9630 }
|
rlm@46
|
9631 return elements[id];
|
rlm@46
|
9632 },
|
rlm@46
|
9633
|
rlm@46
|
9634
|
rlm@46
|
9635 getTargetFromEvent : function(e){
|
rlm@46
|
9636 var t = Ext.lib.Event.getTarget(e);
|
rlm@46
|
9637 return t ? elements[t.id] || handles[t.id] : null;
|
rlm@46
|
9638 }
|
rlm@46
|
9639 };
|
rlm@46
|
9640 }();
|
rlm@46
|
9641
|
rlm@46
|
9642 Ext.dd.StatusProxy = function(config){
|
rlm@46
|
9643 Ext.apply(this, config);
|
rlm@46
|
9644 this.id = this.id || Ext.id();
|
rlm@46
|
9645 this.el = new Ext.Layer({
|
rlm@46
|
9646 dh: {
|
rlm@46
|
9647 id: this.id, tag: "div", cls: "x-dd-drag-proxy "+this.dropNotAllowed, children: [
|
rlm@46
|
9648 {tag: "div", cls: "x-dd-drop-icon"},
|
rlm@46
|
9649 {tag: "div", cls: "x-dd-drag-ghost"}
|
rlm@46
|
9650 ]
|
rlm@46
|
9651 },
|
rlm@46
|
9652 shadow: !config || config.shadow !== false
|
rlm@46
|
9653 });
|
rlm@46
|
9654 this.ghost = Ext.get(this.el.dom.childNodes[1]);
|
rlm@46
|
9655 this.dropStatus = this.dropNotAllowed;
|
rlm@46
|
9656 };
|
rlm@46
|
9657
|
rlm@46
|
9658 Ext.dd.StatusProxy.prototype = {
|
rlm@46
|
9659
|
rlm@46
|
9660 dropAllowed : "x-dd-drop-ok",
|
rlm@46
|
9661
|
rlm@46
|
9662 dropNotAllowed : "x-dd-drop-nodrop",
|
rlm@46
|
9663
|
rlm@46
|
9664
|
rlm@46
|
9665 setStatus : function(cssClass){
|
rlm@46
|
9666 cssClass = cssClass || this.dropNotAllowed;
|
rlm@46
|
9667 if(this.dropStatus != cssClass){
|
rlm@46
|
9668 this.el.replaceClass(this.dropStatus, cssClass);
|
rlm@46
|
9669 this.dropStatus = cssClass;
|
rlm@46
|
9670 }
|
rlm@46
|
9671 },
|
rlm@46
|
9672
|
rlm@46
|
9673
|
rlm@46
|
9674 reset : function(clearGhost){
|
rlm@46
|
9675 this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed;
|
rlm@46
|
9676 this.dropStatus = this.dropNotAllowed;
|
rlm@46
|
9677 if(clearGhost){
|
rlm@46
|
9678 this.ghost.update("");
|
rlm@46
|
9679 }
|
rlm@46
|
9680 },
|
rlm@46
|
9681
|
rlm@46
|
9682
|
rlm@46
|
9683 update : function(html){
|
rlm@46
|
9684 if(typeof html == "string"){
|
rlm@46
|
9685 this.ghost.update(html);
|
rlm@46
|
9686 }else{
|
rlm@46
|
9687 this.ghost.update("");
|
rlm@46
|
9688 html.style.margin = "0";
|
rlm@46
|
9689 this.ghost.dom.appendChild(html);
|
rlm@46
|
9690 }
|
rlm@46
|
9691 },
|
rlm@46
|
9692
|
rlm@46
|
9693
|
rlm@46
|
9694 getEl : function(){
|
rlm@46
|
9695 return this.el;
|
rlm@46
|
9696 },
|
rlm@46
|
9697
|
rlm@46
|
9698
|
rlm@46
|
9699 getGhost : function(){
|
rlm@46
|
9700 return this.ghost;
|
rlm@46
|
9701 },
|
rlm@46
|
9702
|
rlm@46
|
9703
|
rlm@46
|
9704 hide : function(clear){
|
rlm@46
|
9705 this.el.hide();
|
rlm@46
|
9706 if(clear){
|
rlm@46
|
9707 this.reset(true);
|
rlm@46
|
9708 }
|
rlm@46
|
9709 },
|
rlm@46
|
9710
|
rlm@46
|
9711
|
rlm@46
|
9712 stop : function(){
|
rlm@46
|
9713 if(this.anim && this.anim.isAnimated && this.anim.isAnimated()){
|
rlm@46
|
9714 this.anim.stop();
|
rlm@46
|
9715 }
|
rlm@46
|
9716 },
|
rlm@46
|
9717
|
rlm@46
|
9718
|
rlm@46
|
9719 show : function(){
|
rlm@46
|
9720 this.el.show();
|
rlm@46
|
9721 },
|
rlm@46
|
9722
|
rlm@46
|
9723
|
rlm@46
|
9724 sync : function(){
|
rlm@46
|
9725 this.el.sync();
|
rlm@46
|
9726 },
|
rlm@46
|
9727
|
rlm@46
|
9728
|
rlm@46
|
9729 repair : function(xy, callback, scope){
|
rlm@46
|
9730 this.callback = callback;
|
rlm@46
|
9731 this.scope = scope;
|
rlm@46
|
9732 if(xy && this.animRepair !== false){
|
rlm@46
|
9733 this.el.addClass("x-dd-drag-repair");
|
rlm@46
|
9734 this.el.hideUnders(true);
|
rlm@46
|
9735 this.anim = this.el.shift({
|
rlm@46
|
9736 duration: this.repairDuration || .5,
|
rlm@46
|
9737 easing: 'easeOut',
|
rlm@46
|
9738 xy: xy,
|
rlm@46
|
9739 stopFx: true,
|
rlm@46
|
9740 callback: this.afterRepair,
|
rlm@46
|
9741 scope: this
|
rlm@46
|
9742 });
|
rlm@46
|
9743 }else{
|
rlm@46
|
9744 this.afterRepair();
|
rlm@46
|
9745 }
|
rlm@46
|
9746 },
|
rlm@46
|
9747
|
rlm@46
|
9748
|
rlm@46
|
9749 afterRepair : function(){
|
rlm@46
|
9750 this.hide(true);
|
rlm@46
|
9751 if(typeof this.callback == "function"){
|
rlm@46
|
9752 this.callback.call(this.scope || this);
|
rlm@46
|
9753 }
|
rlm@46
|
9754 this.callback = null;
|
rlm@46
|
9755 this.scope = null;
|
rlm@46
|
9756 }
|
rlm@46
|
9757 };
|
rlm@46
|
9758
|
rlm@46
|
9759 Ext.dd.DragSource = function(el, config){
|
rlm@46
|
9760 this.el = Ext.get(el);
|
rlm@46
|
9761 if(!this.dragData){
|
rlm@46
|
9762 this.dragData = {};
|
rlm@46
|
9763 }
|
rlm@46
|
9764
|
rlm@46
|
9765 Ext.apply(this, config);
|
rlm@46
|
9766
|
rlm@46
|
9767 if(!this.proxy){
|
rlm@46
|
9768 this.proxy = new Ext.dd.StatusProxy();
|
rlm@46
|
9769 }
|
rlm@46
|
9770 Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group,
|
rlm@46
|
9771 {dragElId : this.proxy.id, resizeFrame: false, isTarget: false, scroll: this.scroll === true});
|
rlm@46
|
9772
|
rlm@46
|
9773 this.dragging = false;
|
rlm@46
|
9774 };
|
rlm@46
|
9775
|
rlm@46
|
9776 Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
|
rlm@46
|
9777
|
rlm@46
|
9778
|
rlm@46
|
9779 dropAllowed : "x-dd-drop-ok",
|
rlm@46
|
9780
|
rlm@46
|
9781 dropNotAllowed : "x-dd-drop-nodrop",
|
rlm@46
|
9782
|
rlm@46
|
9783
|
rlm@46
|
9784 getDragData : function(e){
|
rlm@46
|
9785 return this.dragData;
|
rlm@46
|
9786 },
|
rlm@46
|
9787
|
rlm@46
|
9788
|
rlm@46
|
9789 onDragEnter : function(e, id){
|
rlm@46
|
9790 var target = Ext.dd.DragDropMgr.getDDById(id);
|
rlm@46
|
9791 this.cachedTarget = target;
|
rlm@46
|
9792 if(this.beforeDragEnter(target, e, id) !== false){
|
rlm@46
|
9793 if(target.isNotifyTarget){
|
rlm@46
|
9794 var status = target.notifyEnter(this, e, this.dragData);
|
rlm@46
|
9795 this.proxy.setStatus(status);
|
rlm@46
|
9796 }else{
|
rlm@46
|
9797 this.proxy.setStatus(this.dropAllowed);
|
rlm@46
|
9798 }
|
rlm@46
|
9799
|
rlm@46
|
9800 if(this.afterDragEnter){
|
rlm@46
|
9801
|
rlm@46
|
9802 this.afterDragEnter(target, e, id);
|
rlm@46
|
9803 }
|
rlm@46
|
9804 }
|
rlm@46
|
9805 },
|
rlm@46
|
9806
|
rlm@46
|
9807
|
rlm@46
|
9808 beforeDragEnter : function(target, e, id){
|
rlm@46
|
9809 return true;
|
rlm@46
|
9810 },
|
rlm@46
|
9811
|
rlm@46
|
9812
|
rlm@46
|
9813 alignElWithMouse: function() {
|
rlm@46
|
9814 Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments);
|
rlm@46
|
9815 this.proxy.sync();
|
rlm@46
|
9816 },
|
rlm@46
|
9817
|
rlm@46
|
9818
|
rlm@46
|
9819 onDragOver : function(e, id){
|
rlm@46
|
9820 var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
|
rlm@46
|
9821 if(this.beforeDragOver(target, e, id) !== false){
|
rlm@46
|
9822 if(target.isNotifyTarget){
|
rlm@46
|
9823 var status = target.notifyOver(this, e, this.dragData);
|
rlm@46
|
9824 this.proxy.setStatus(status);
|
rlm@46
|
9825 }
|
rlm@46
|
9826
|
rlm@46
|
9827 if(this.afterDragOver){
|
rlm@46
|
9828
|
rlm@46
|
9829 this.afterDragOver(target, e, id);
|
rlm@46
|
9830 }
|
rlm@46
|
9831 }
|
rlm@46
|
9832 },
|
rlm@46
|
9833
|
rlm@46
|
9834
|
rlm@46
|
9835 beforeDragOver : function(target, e, id){
|
rlm@46
|
9836 return true;
|
rlm@46
|
9837 },
|
rlm@46
|
9838
|
rlm@46
|
9839
|
rlm@46
|
9840 onDragOut : function(e, id){
|
rlm@46
|
9841 var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
|
rlm@46
|
9842 if(this.beforeDragOut(target, e, id) !== false){
|
rlm@46
|
9843 if(target.isNotifyTarget){
|
rlm@46
|
9844 target.notifyOut(this, e, this.dragData);
|
rlm@46
|
9845 }
|
rlm@46
|
9846 this.proxy.reset();
|
rlm@46
|
9847 if(this.afterDragOut){
|
rlm@46
|
9848
|
rlm@46
|
9849 this.afterDragOut(target, e, id);
|
rlm@46
|
9850 }
|
rlm@46
|
9851 }
|
rlm@46
|
9852 this.cachedTarget = null;
|
rlm@46
|
9853 },
|
rlm@46
|
9854
|
rlm@46
|
9855
|
rlm@46
|
9856 beforeDragOut : function(target, e, id){
|
rlm@46
|
9857 return true;
|
rlm@46
|
9858 },
|
rlm@46
|
9859
|
rlm@46
|
9860
|
rlm@46
|
9861 onDragDrop : function(e, id){
|
rlm@46
|
9862 var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
|
rlm@46
|
9863 if(this.beforeDragDrop(target, e, id) !== false){
|
rlm@46
|
9864 if(target.isNotifyTarget){
|
rlm@46
|
9865 if(target.notifyDrop(this, e, this.dragData)){
|
rlm@46
|
9866 this.onValidDrop(target, e, id);
|
rlm@46
|
9867 }else{
|
rlm@46
|
9868 this.onInvalidDrop(target, e, id);
|
rlm@46
|
9869 }
|
rlm@46
|
9870 }else{
|
rlm@46
|
9871 this.onValidDrop(target, e, id);
|
rlm@46
|
9872 }
|
rlm@46
|
9873
|
rlm@46
|
9874 if(this.afterDragDrop){
|
rlm@46
|
9875
|
rlm@46
|
9876 this.afterDragDrop(target, e, id);
|
rlm@46
|
9877 }
|
rlm@46
|
9878 }
|
rlm@46
|
9879 delete this.cachedTarget;
|
rlm@46
|
9880 },
|
rlm@46
|
9881
|
rlm@46
|
9882
|
rlm@46
|
9883 beforeDragDrop : function(target, e, id){
|
rlm@46
|
9884 return true;
|
rlm@46
|
9885 },
|
rlm@46
|
9886
|
rlm@46
|
9887
|
rlm@46
|
9888 onValidDrop : function(target, e, id){
|
rlm@46
|
9889 this.hideProxy();
|
rlm@46
|
9890 if(this.afterValidDrop){
|
rlm@46
|
9891
|
rlm@46
|
9892 this.afterValidDrop(target, e, id);
|
rlm@46
|
9893 }
|
rlm@46
|
9894 },
|
rlm@46
|
9895
|
rlm@46
|
9896
|
rlm@46
|
9897 getRepairXY : function(e, data){
|
rlm@46
|
9898 return this.el.getXY();
|
rlm@46
|
9899 },
|
rlm@46
|
9900
|
rlm@46
|
9901
|
rlm@46
|
9902 onInvalidDrop : function(target, e, id){
|
rlm@46
|
9903 this.beforeInvalidDrop(target, e, id);
|
rlm@46
|
9904 if(this.cachedTarget){
|
rlm@46
|
9905 if(this.cachedTarget.isNotifyTarget){
|
rlm@46
|
9906 this.cachedTarget.notifyOut(this, e, this.dragData);
|
rlm@46
|
9907 }
|
rlm@46
|
9908 this.cacheTarget = null;
|
rlm@46
|
9909 }
|
rlm@46
|
9910 this.proxy.repair(this.getRepairXY(e, this.dragData), this.afterRepair, this);
|
rlm@46
|
9911
|
rlm@46
|
9912 if(this.afterInvalidDrop){
|
rlm@46
|
9913
|
rlm@46
|
9914 this.afterInvalidDrop(e, id);
|
rlm@46
|
9915 }
|
rlm@46
|
9916 },
|
rlm@46
|
9917
|
rlm@46
|
9918
|
rlm@46
|
9919 afterRepair : function(){
|
rlm@46
|
9920 if(Ext.enableFx){
|
rlm@46
|
9921 this.el.highlight(this.hlColor || "c3daf9");
|
rlm@46
|
9922 }
|
rlm@46
|
9923 this.dragging = false;
|
rlm@46
|
9924 },
|
rlm@46
|
9925
|
rlm@46
|
9926
|
rlm@46
|
9927 beforeInvalidDrop : function(target, e, id){
|
rlm@46
|
9928 return true;
|
rlm@46
|
9929 },
|
rlm@46
|
9930
|
rlm@46
|
9931
|
rlm@46
|
9932 handleMouseDown : function(e){
|
rlm@46
|
9933 if(this.dragging) {
|
rlm@46
|
9934 return;
|
rlm@46
|
9935 }
|
rlm@46
|
9936 var data = this.getDragData(e);
|
rlm@46
|
9937 if(data && this.onBeforeDrag(data, e) !== false){
|
rlm@46
|
9938 this.dragData = data;
|
rlm@46
|
9939 this.proxy.stop();
|
rlm@46
|
9940 Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments);
|
rlm@46
|
9941 }
|
rlm@46
|
9942 },
|
rlm@46
|
9943
|
rlm@46
|
9944
|
rlm@46
|
9945 onBeforeDrag : function(data, e){
|
rlm@46
|
9946 return true;
|
rlm@46
|
9947 },
|
rlm@46
|
9948
|
rlm@46
|
9949
|
rlm@46
|
9950 onStartDrag : Ext.emptyFn,
|
rlm@46
|
9951
|
rlm@46
|
9952
|
rlm@46
|
9953 startDrag : function(x, y){
|
rlm@46
|
9954 this.proxy.reset();
|
rlm@46
|
9955 this.dragging = true;
|
rlm@46
|
9956 this.proxy.update("");
|
rlm@46
|
9957 this.onInitDrag(x, y);
|
rlm@46
|
9958 this.proxy.show();
|
rlm@46
|
9959 },
|
rlm@46
|
9960
|
rlm@46
|
9961
|
rlm@46
|
9962 onInitDrag : function(x, y){
|
rlm@46
|
9963 var clone = this.el.dom.cloneNode(true);
|
rlm@46
|
9964 clone.id = Ext.id();
|
rlm@46
|
9965 this.proxy.update(clone);
|
rlm@46
|
9966 this.onStartDrag(x, y);
|
rlm@46
|
9967 return true;
|
rlm@46
|
9968 },
|
rlm@46
|
9969
|
rlm@46
|
9970
|
rlm@46
|
9971 getProxy : function(){
|
rlm@46
|
9972 return this.proxy;
|
rlm@46
|
9973 },
|
rlm@46
|
9974
|
rlm@46
|
9975
|
rlm@46
|
9976 hideProxy : function(){
|
rlm@46
|
9977 this.proxy.hide();
|
rlm@46
|
9978 this.proxy.reset(true);
|
rlm@46
|
9979 this.dragging = false;
|
rlm@46
|
9980 },
|
rlm@46
|
9981
|
rlm@46
|
9982
|
rlm@46
|
9983 triggerCacheRefresh : function(){
|
rlm@46
|
9984 Ext.dd.DDM.refreshCache(this.groups);
|
rlm@46
|
9985 },
|
rlm@46
|
9986
|
rlm@46
|
9987
|
rlm@46
|
9988 b4EndDrag: function(e) {
|
rlm@46
|
9989 },
|
rlm@46
|
9990
|
rlm@46
|
9991
|
rlm@46
|
9992 endDrag : function(e){
|
rlm@46
|
9993 this.onEndDrag(this.dragData, e);
|
rlm@46
|
9994 },
|
rlm@46
|
9995
|
rlm@46
|
9996
|
rlm@46
|
9997 onEndDrag : function(data, e){
|
rlm@46
|
9998 },
|
rlm@46
|
9999
|
rlm@46
|
10000
|
rlm@46
|
10001 autoOffset : function(x, y) {
|
rlm@46
|
10002 this.setDelta(-12, -20);
|
rlm@46
|
10003 }
|
rlm@46
|
10004 });
|
rlm@46
|
10005
|
rlm@46
|
10006 Ext.dd.DropTarget = function(el, config){
|
rlm@46
|
10007 this.el = Ext.get(el);
|
rlm@46
|
10008
|
rlm@46
|
10009 Ext.apply(this, config);
|
rlm@46
|
10010
|
rlm@46
|
10011 if(this.containerScroll){
|
rlm@46
|
10012 Ext.dd.ScrollManager.register(this.el);
|
rlm@46
|
10013 }
|
rlm@46
|
10014
|
rlm@46
|
10015 Ext.dd.DropTarget.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group,
|
rlm@46
|
10016 {isTarget: true});
|
rlm@46
|
10017
|
rlm@46
|
10018 };
|
rlm@46
|
10019
|
rlm@46
|
10020 Ext.extend(Ext.dd.DropTarget, Ext.dd.DDTarget, {
|
rlm@46
|
10021
|
rlm@46
|
10022
|
rlm@46
|
10023
|
rlm@46
|
10024 dropAllowed : "x-dd-drop-ok",
|
rlm@46
|
10025
|
rlm@46
|
10026 dropNotAllowed : "x-dd-drop-nodrop",
|
rlm@46
|
10027
|
rlm@46
|
10028
|
rlm@46
|
10029 isTarget : true,
|
rlm@46
|
10030
|
rlm@46
|
10031
|
rlm@46
|
10032 isNotifyTarget : true,
|
rlm@46
|
10033
|
rlm@46
|
10034
|
rlm@46
|
10035 notifyEnter : function(dd, e, data){
|
rlm@46
|
10036 if(this.overClass){
|
rlm@46
|
10037 this.el.addClass(this.overClass);
|
rlm@46
|
10038 }
|
rlm@46
|
10039 return this.dropAllowed;
|
rlm@46
|
10040 },
|
rlm@46
|
10041
|
rlm@46
|
10042
|
rlm@46
|
10043 notifyOver : function(dd, e, data){
|
rlm@46
|
10044 return this.dropAllowed;
|
rlm@46
|
10045 },
|
rlm@46
|
10046
|
rlm@46
|
10047
|
rlm@46
|
10048 notifyOut : function(dd, e, data){
|
rlm@46
|
10049 if(this.overClass){
|
rlm@46
|
10050 this.el.removeClass(this.overClass);
|
rlm@46
|
10051 }
|
rlm@46
|
10052 },
|
rlm@46
|
10053
|
rlm@46
|
10054
|
rlm@46
|
10055 notifyDrop : function(dd, e, data){
|
rlm@46
|
10056 return false;
|
rlm@46
|
10057 }
|
rlm@46
|
10058 });
|
rlm@46
|
10059
|
rlm@46
|
10060 Ext.dd.DragZone = function(el, config){
|
rlm@46
|
10061 Ext.dd.DragZone.superclass.constructor.call(this, el, config);
|
rlm@46
|
10062 if(this.containerScroll){
|
rlm@46
|
10063 Ext.dd.ScrollManager.register(this.el);
|
rlm@46
|
10064 }
|
rlm@46
|
10065 };
|
rlm@46
|
10066
|
rlm@46
|
10067 Ext.extend(Ext.dd.DragZone, Ext.dd.DragSource, {
|
rlm@46
|
10068
|
rlm@46
|
10069
|
rlm@46
|
10070
|
rlm@46
|
10071
|
rlm@46
|
10072 getDragData : function(e){
|
rlm@46
|
10073 return Ext.dd.Registry.getHandleFromEvent(e);
|
rlm@46
|
10074 },
|
rlm@46
|
10075
|
rlm@46
|
10076
|
rlm@46
|
10077 onInitDrag : function(x, y){
|
rlm@46
|
10078 this.proxy.update(this.dragData.ddel.cloneNode(true));
|
rlm@46
|
10079 this.onStartDrag(x, y);
|
rlm@46
|
10080 return true;
|
rlm@46
|
10081 },
|
rlm@46
|
10082
|
rlm@46
|
10083
|
rlm@46
|
10084 afterRepair : function(){
|
rlm@46
|
10085 if(Ext.enableFx){
|
rlm@46
|
10086 Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9");
|
rlm@46
|
10087 }
|
rlm@46
|
10088 this.dragging = false;
|
rlm@46
|
10089 },
|
rlm@46
|
10090
|
rlm@46
|
10091
|
rlm@46
|
10092 getRepairXY : function(e){
|
rlm@46
|
10093 return Ext.Element.fly(this.dragData.ddel).getXY();
|
rlm@46
|
10094 }
|
rlm@46
|
10095 });
|
rlm@46
|
10096
|
rlm@46
|
10097 Ext.dd.DropZone = function(el, config){
|
rlm@46
|
10098 Ext.dd.DropZone.superclass.constructor.call(this, el, config);
|
rlm@46
|
10099 };
|
rlm@46
|
10100
|
rlm@46
|
10101 Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, {
|
rlm@46
|
10102
|
rlm@46
|
10103 getTargetFromEvent : function(e){
|
rlm@46
|
10104 return Ext.dd.Registry.getTargetFromEvent(e);
|
rlm@46
|
10105 },
|
rlm@46
|
10106
|
rlm@46
|
10107
|
rlm@46
|
10108 onNodeEnter : function(n, dd, e, data){
|
rlm@46
|
10109
|
rlm@46
|
10110 },
|
rlm@46
|
10111
|
rlm@46
|
10112
|
rlm@46
|
10113 onNodeOver : function(n, dd, e, data){
|
rlm@46
|
10114 return this.dropAllowed;
|
rlm@46
|
10115 },
|
rlm@46
|
10116
|
rlm@46
|
10117
|
rlm@46
|
10118 onNodeOut : function(n, dd, e, data){
|
rlm@46
|
10119
|
rlm@46
|
10120 },
|
rlm@46
|
10121
|
rlm@46
|
10122
|
rlm@46
|
10123 onNodeDrop : function(n, dd, e, data){
|
rlm@46
|
10124 return false;
|
rlm@46
|
10125 },
|
rlm@46
|
10126
|
rlm@46
|
10127
|
rlm@46
|
10128 onContainerOver : function(dd, e, data){
|
rlm@46
|
10129 return this.dropNotAllowed;
|
rlm@46
|
10130 },
|
rlm@46
|
10131
|
rlm@46
|
10132
|
rlm@46
|
10133 onContainerDrop : function(dd, e, data){
|
rlm@46
|
10134 return false;
|
rlm@46
|
10135 },
|
rlm@46
|
10136
|
rlm@46
|
10137
|
rlm@46
|
10138 notifyEnter : function(dd, e, data){
|
rlm@46
|
10139 return this.dropNotAllowed;
|
rlm@46
|
10140 },
|
rlm@46
|
10141
|
rlm@46
|
10142
|
rlm@46
|
10143 notifyOver : function(dd, e, data){
|
rlm@46
|
10144 var n = this.getTargetFromEvent(e);
|
rlm@46
|
10145 if(!n){
|
rlm@46
|
10146 if(this.lastOverNode){
|
rlm@46
|
10147 this.onNodeOut(this.lastOverNode, dd, e, data);
|
rlm@46
|
10148 this.lastOverNode = null;
|
rlm@46
|
10149 }
|
rlm@46
|
10150 return this.onContainerOver(dd, e, data);
|
rlm@46
|
10151 }
|
rlm@46
|
10152 if(this.lastOverNode != n){
|
rlm@46
|
10153 if(this.lastOverNode){
|
rlm@46
|
10154 this.onNodeOut(this.lastOverNode, dd, e, data);
|
rlm@46
|
10155 }
|
rlm@46
|
10156 this.onNodeEnter(n, dd, e, data);
|
rlm@46
|
10157 this.lastOverNode = n;
|
rlm@46
|
10158 }
|
rlm@46
|
10159 return this.onNodeOver(n, dd, e, data);
|
rlm@46
|
10160 },
|
rlm@46
|
10161
|
rlm@46
|
10162
|
rlm@46
|
10163 notifyOut : function(dd, e, data){
|
rlm@46
|
10164 if(this.lastOverNode){
|
rlm@46
|
10165 this.onNodeOut(this.lastOverNode, dd, e, data);
|
rlm@46
|
10166 this.lastOverNode = null;
|
rlm@46
|
10167 }
|
rlm@46
|
10168 },
|
rlm@46
|
10169
|
rlm@46
|
10170
|
rlm@46
|
10171 notifyDrop : function(dd, e, data){
|
rlm@46
|
10172 if(this.lastOverNode){
|
rlm@46
|
10173 this.onNodeOut(this.lastOverNode, dd, e, data);
|
rlm@46
|
10174 this.lastOverNode = null;
|
rlm@46
|
10175 }
|
rlm@46
|
10176 var n = this.getTargetFromEvent(e);
|
rlm@46
|
10177 return n ?
|
rlm@46
|
10178 this.onNodeDrop(n, dd, e, data) :
|
rlm@46
|
10179 this.onContainerDrop(dd, e, data);
|
rlm@46
|
10180 },
|
rlm@46
|
10181
|
rlm@46
|
10182
|
rlm@46
|
10183 triggerCacheRefresh : function(){
|
rlm@46
|
10184 Ext.dd.DDM.refreshCache(this.groups);
|
rlm@46
|
10185 }
|
rlm@46
|
10186 });
|
rlm@46
|
10187
|
rlm@46
|
10188
|
rlm@46
|
10189 Ext.data.SortTypes = {
|
rlm@46
|
10190
|
rlm@46
|
10191 none : function(s){
|
rlm@46
|
10192 return s;
|
rlm@46
|
10193 },
|
rlm@46
|
10194
|
rlm@46
|
10195
|
rlm@46
|
10196 stripTagsRE : /<\/?[^>]+>/gi,
|
rlm@46
|
10197
|
rlm@46
|
10198
|
rlm@46
|
10199 asText : function(s){
|
rlm@46
|
10200 return String(s).replace(this.stripTagsRE, "");
|
rlm@46
|
10201 },
|
rlm@46
|
10202
|
rlm@46
|
10203
|
rlm@46
|
10204 asUCText : function(s){
|
rlm@46
|
10205 return String(s).toUpperCase().replace(this.stripTagsRE, "");
|
rlm@46
|
10206 },
|
rlm@46
|
10207
|
rlm@46
|
10208
|
rlm@46
|
10209 asUCString : function(s) {
|
rlm@46
|
10210 return String(s).toUpperCase();
|
rlm@46
|
10211 },
|
rlm@46
|
10212
|
rlm@46
|
10213
|
rlm@46
|
10214 asDate : function(s) {
|
rlm@46
|
10215 if(!s){
|
rlm@46
|
10216 return 0;
|
rlm@46
|
10217 }
|
rlm@46
|
10218 if(Ext.isDate(s)){
|
rlm@46
|
10219 return s.getTime();
|
rlm@46
|
10220 }
|
rlm@46
|
10221 return Date.parse(String(s));
|
rlm@46
|
10222 },
|
rlm@46
|
10223
|
rlm@46
|
10224
|
rlm@46
|
10225 asFloat : function(s) {
|
rlm@46
|
10226 var val = parseFloat(String(s).replace(/,/g, ""));
|
rlm@46
|
10227 if(isNaN(val)) val = 0;
|
rlm@46
|
10228 return val;
|
rlm@46
|
10229 },
|
rlm@46
|
10230
|
rlm@46
|
10231
|
rlm@46
|
10232 asInt : function(s) {
|
rlm@46
|
10233 var val = parseInt(String(s).replace(/,/g, ""));
|
rlm@46
|
10234 if(isNaN(val)) val = 0;
|
rlm@46
|
10235 return val;
|
rlm@46
|
10236 }
|
rlm@46
|
10237 };
|
rlm@46
|
10238
|
rlm@46
|
10239 Ext.data.Record = function(data, id){
|
rlm@46
|
10240 this.id = (id || id === 0) ? id : ++Ext.data.Record.AUTO_ID;
|
rlm@46
|
10241 this.data = data;
|
rlm@46
|
10242 };
|
rlm@46
|
10243
|
rlm@46
|
10244
|
rlm@46
|
10245 Ext.data.Record.create = function(o){
|
rlm@46
|
10246 var f = Ext.extend(Ext.data.Record, {});
|
rlm@46
|
10247 var p = f.prototype;
|
rlm@46
|
10248 p.fields = new Ext.util.MixedCollection(false, function(field){
|
rlm@46
|
10249 return field.name;
|
rlm@46
|
10250 });
|
rlm@46
|
10251 for(var i = 0, len = o.length; i < len; i++){
|
rlm@46
|
10252 p.fields.add(new Ext.data.Field(o[i]));
|
rlm@46
|
10253 }
|
rlm@46
|
10254 f.getField = function(name){
|
rlm@46
|
10255 return p.fields.get(name);
|
rlm@46
|
10256 };
|
rlm@46
|
10257 return f;
|
rlm@46
|
10258 };
|
rlm@46
|
10259
|
rlm@46
|
10260 Ext.data.Record.AUTO_ID = 1000;
|
rlm@46
|
10261 Ext.data.Record.EDIT = 'edit';
|
rlm@46
|
10262 Ext.data.Record.REJECT = 'reject';
|
rlm@46
|
10263 Ext.data.Record.COMMIT = 'commit';
|
rlm@46
|
10264
|
rlm@46
|
10265 Ext.data.Record.prototype = {
|
rlm@46
|
10266
|
rlm@46
|
10267
|
rlm@46
|
10268
|
rlm@46
|
10269 dirty : false,
|
rlm@46
|
10270 editing : false,
|
rlm@46
|
10271 error: null,
|
rlm@46
|
10272
|
rlm@46
|
10273 modified: null,
|
rlm@46
|
10274
|
rlm@46
|
10275 join : function(store){
|
rlm@46
|
10276 this.store = store;
|
rlm@46
|
10277 },
|
rlm@46
|
10278
|
rlm@46
|
10279
|
rlm@46
|
10280 set : function(name, value){
|
rlm@46
|
10281 if(String(this.data[name]) == String(value)){
|
rlm@46
|
10282 return;
|
rlm@46
|
10283 }
|
rlm@46
|
10284 this.dirty = true;
|
rlm@46
|
10285 if(!this.modified){
|
rlm@46
|
10286 this.modified = {};
|
rlm@46
|
10287 }
|
rlm@46
|
10288 if(typeof this.modified[name] == 'undefined'){
|
rlm@46
|
10289 this.modified[name] = this.data[name];
|
rlm@46
|
10290 }
|
rlm@46
|
10291 this.data[name] = value;
|
rlm@46
|
10292 if(!this.editing && this.store){
|
rlm@46
|
10293 this.store.afterEdit(this);
|
rlm@46
|
10294 }
|
rlm@46
|
10295 },
|
rlm@46
|
10296
|
rlm@46
|
10297
|
rlm@46
|
10298 get : function(name){
|
rlm@46
|
10299 return this.data[name];
|
rlm@46
|
10300 },
|
rlm@46
|
10301
|
rlm@46
|
10302
|
rlm@46
|
10303 beginEdit : function(){
|
rlm@46
|
10304 this.editing = true;
|
rlm@46
|
10305 this.modified = {};
|
rlm@46
|
10306 },
|
rlm@46
|
10307
|
rlm@46
|
10308
|
rlm@46
|
10309 cancelEdit : function(){
|
rlm@46
|
10310 this.editing = false;
|
rlm@46
|
10311 delete this.modified;
|
rlm@46
|
10312 },
|
rlm@46
|
10313
|
rlm@46
|
10314
|
rlm@46
|
10315 endEdit : function(){
|
rlm@46
|
10316 this.editing = false;
|
rlm@46
|
10317 if(this.dirty && this.store){
|
rlm@46
|
10318 this.store.afterEdit(this);
|
rlm@46
|
10319 }
|
rlm@46
|
10320 },
|
rlm@46
|
10321
|
rlm@46
|
10322
|
rlm@46
|
10323 reject : function(silent){
|
rlm@46
|
10324 var m = this.modified;
|
rlm@46
|
10325 for(var n in m){
|
rlm@46
|
10326 if(typeof m[n] != "function"){
|
rlm@46
|
10327 this.data[n] = m[n];
|
rlm@46
|
10328 }
|
rlm@46
|
10329 }
|
rlm@46
|
10330 this.dirty = false;
|
rlm@46
|
10331 delete this.modified;
|
rlm@46
|
10332 this.editing = false;
|
rlm@46
|
10333 if(this.store && silent !== true){
|
rlm@46
|
10334 this.store.afterReject(this);
|
rlm@46
|
10335 }
|
rlm@46
|
10336 },
|
rlm@46
|
10337
|
rlm@46
|
10338
|
rlm@46
|
10339 commit : function(silent){
|
rlm@46
|
10340 this.dirty = false;
|
rlm@46
|
10341 delete this.modified;
|
rlm@46
|
10342 this.editing = false;
|
rlm@46
|
10343 if(this.store && silent !== true){
|
rlm@46
|
10344 this.store.afterCommit(this);
|
rlm@46
|
10345 }
|
rlm@46
|
10346 },
|
rlm@46
|
10347
|
rlm@46
|
10348
|
rlm@46
|
10349 getChanges : function(){
|
rlm@46
|
10350 var m = this.modified, cs = {};
|
rlm@46
|
10351 for(var n in m){
|
rlm@46
|
10352 if(m.hasOwnProperty(n)){
|
rlm@46
|
10353 cs[n] = this.data[n];
|
rlm@46
|
10354 }
|
rlm@46
|
10355 }
|
rlm@46
|
10356 return cs;
|
rlm@46
|
10357 },
|
rlm@46
|
10358
|
rlm@46
|
10359 hasError : function(){
|
rlm@46
|
10360 return this.error != null;
|
rlm@46
|
10361 },
|
rlm@46
|
10362
|
rlm@46
|
10363 clearError : function(){
|
rlm@46
|
10364 this.error = null;
|
rlm@46
|
10365 },
|
rlm@46
|
10366
|
rlm@46
|
10367
|
rlm@46
|
10368 copy : function(newId) {
|
rlm@46
|
10369 return new this.constructor(Ext.apply({}, this.data), newId || this.id);
|
rlm@46
|
10370 },
|
rlm@46
|
10371
|
rlm@46
|
10372
|
rlm@46
|
10373 isModified : function(fieldName){
|
rlm@46
|
10374 return this.modified && this.modified.hasOwnProperty(fieldName);
|
rlm@46
|
10375 }
|
rlm@46
|
10376 };
|
rlm@46
|
10377
|
rlm@46
|
10378 Ext.StoreMgr = Ext.apply(new Ext.util.MixedCollection(), {
|
rlm@46
|
10379
|
rlm@46
|
10380
|
rlm@46
|
10381
|
rlm@46
|
10382 register : function(){
|
rlm@46
|
10383 for(var i = 0, s; s = arguments[i]; i++){
|
rlm@46
|
10384 this.add(s);
|
rlm@46
|
10385 }
|
rlm@46
|
10386 },
|
rlm@46
|
10387
|
rlm@46
|
10388
|
rlm@46
|
10389 unregister : function(){
|
rlm@46
|
10390 for(var i = 0, s; s = arguments[i]; i++){
|
rlm@46
|
10391 this.remove(this.lookup(s));
|
rlm@46
|
10392 }
|
rlm@46
|
10393 },
|
rlm@46
|
10394
|
rlm@46
|
10395
|
rlm@46
|
10396 lookup : function(id){
|
rlm@46
|
10397 return typeof id == "object" ? id : this.get(id);
|
rlm@46
|
10398 },
|
rlm@46
|
10399
|
rlm@46
|
10400 getKey : function(o){
|
rlm@46
|
10401 return o.storeId || o.id;
|
rlm@46
|
10402 }
|
rlm@46
|
10403 });
|
rlm@46
|
10404
|
rlm@46
|
10405 Ext.data.Store = function(config){
|
rlm@46
|
10406 this.data = new Ext.util.MixedCollection(false);
|
rlm@46
|
10407 this.data.getKey = function(o){
|
rlm@46
|
10408 return o.id;
|
rlm@46
|
10409 };
|
rlm@46
|
10410
|
rlm@46
|
10411 this.baseParams = {};
|
rlm@46
|
10412 this.paramNames = {
|
rlm@46
|
10413 "start" : "start",
|
rlm@46
|
10414 "limit" : "limit",
|
rlm@46
|
10415 "sort" : "sort",
|
rlm@46
|
10416 "dir" : "dir"
|
rlm@46
|
10417 };
|
rlm@46
|
10418
|
rlm@46
|
10419 if(config && config.data){
|
rlm@46
|
10420 this.inlineData = config.data;
|
rlm@46
|
10421 delete config.data;
|
rlm@46
|
10422 }
|
rlm@46
|
10423
|
rlm@46
|
10424 Ext.apply(this, config);
|
rlm@46
|
10425
|
rlm@46
|
10426 if(this.url && !this.proxy){
|
rlm@46
|
10427 this.proxy = new Ext.data.HttpProxy({url: this.url});
|
rlm@46
|
10428 }
|
rlm@46
|
10429
|
rlm@46
|
10430 if(this.reader){ if(!this.recordType){
|
rlm@46
|
10431 this.recordType = this.reader.recordType;
|
rlm@46
|
10432 }
|
rlm@46
|
10433 if(this.reader.onMetaChange){
|
rlm@46
|
10434 this.reader.onMetaChange = this.onMetaChange.createDelegate(this);
|
rlm@46
|
10435 }
|
rlm@46
|
10436 }
|
rlm@46
|
10437
|
rlm@46
|
10438 if(this.recordType){
|
rlm@46
|
10439 this.fields = this.recordType.prototype.fields;
|
rlm@46
|
10440 }
|
rlm@46
|
10441 this.modified = [];
|
rlm@46
|
10442
|
rlm@46
|
10443 this.addEvents(
|
rlm@46
|
10444
|
rlm@46
|
10445 'datachanged',
|
rlm@46
|
10446
|
rlm@46
|
10447 'metachange',
|
rlm@46
|
10448
|
rlm@46
|
10449 'add',
|
rlm@46
|
10450
|
rlm@46
|
10451 'remove',
|
rlm@46
|
10452
|
rlm@46
|
10453 'update',
|
rlm@46
|
10454
|
rlm@46
|
10455 'clear',
|
rlm@46
|
10456
|
rlm@46
|
10457 'beforeload',
|
rlm@46
|
10458
|
rlm@46
|
10459 'load',
|
rlm@46
|
10460
|
rlm@46
|
10461 'loadexception'
|
rlm@46
|
10462 );
|
rlm@46
|
10463
|
rlm@46
|
10464 if(this.proxy){
|
rlm@46
|
10465 this.relayEvents(this.proxy, ["loadexception"]);
|
rlm@46
|
10466 }
|
rlm@46
|
10467
|
rlm@46
|
10468 this.sortToggle = {};
|
rlm@46
|
10469 if(this.sortInfo){
|
rlm@46
|
10470 this.setDefaultSort(this.sortInfo.field, this.sortInfo.direction);
|
rlm@46
|
10471 }
|
rlm@46
|
10472
|
rlm@46
|
10473 Ext.data.Store.superclass.constructor.call(this);
|
rlm@46
|
10474
|
rlm@46
|
10475 if(this.storeId || this.id){
|
rlm@46
|
10476 Ext.StoreMgr.register(this);
|
rlm@46
|
10477 }
|
rlm@46
|
10478 if(this.inlineData){
|
rlm@46
|
10479 this.loadData(this.inlineData);
|
rlm@46
|
10480 delete this.inlineData;
|
rlm@46
|
10481 }else if(this.autoLoad){
|
rlm@46
|
10482 this.load.defer(10, this, [
|
rlm@46
|
10483 typeof this.autoLoad == 'object' ?
|
rlm@46
|
10484 this.autoLoad : undefined]);
|
rlm@46
|
10485 }
|
rlm@46
|
10486 };
|
rlm@46
|
10487 Ext.extend(Ext.data.Store, Ext.util.Observable, {
|
rlm@46
|
10488
|
rlm@46
|
10489
|
rlm@46
|
10490
|
rlm@46
|
10491
|
rlm@46
|
10492
|
rlm@46
|
10493
|
rlm@46
|
10494
|
rlm@46
|
10495
|
rlm@46
|
10496
|
rlm@46
|
10497 remoteSort : false,
|
rlm@46
|
10498
|
rlm@46
|
10499
|
rlm@46
|
10500 pruneModifiedRecords : false,
|
rlm@46
|
10501
|
rlm@46
|
10502
|
rlm@46
|
10503 lastOptions : null,
|
rlm@46
|
10504
|
rlm@46
|
10505 destroy : function(){
|
rlm@46
|
10506 if(this.id){
|
rlm@46
|
10507 Ext.StoreMgr.unregister(this);
|
rlm@46
|
10508 }
|
rlm@46
|
10509 this.data = null;
|
rlm@46
|
10510 this.purgeListeners();
|
rlm@46
|
10511 },
|
rlm@46
|
10512
|
rlm@46
|
10513
|
rlm@46
|
10514 add : function(records){
|
rlm@46
|
10515 records = [].concat(records);
|
rlm@46
|
10516 if(records.length < 1){
|
rlm@46
|
10517 return;
|
rlm@46
|
10518 }
|
rlm@46
|
10519 for(var i = 0, len = records.length; i < len; i++){
|
rlm@46
|
10520 records[i].join(this);
|
rlm@46
|
10521 }
|
rlm@46
|
10522 var index = this.data.length;
|
rlm@46
|
10523 this.data.addAll(records);
|
rlm@46
|
10524 if(this.snapshot){
|
rlm@46
|
10525 this.snapshot.addAll(records);
|
rlm@46
|
10526 }
|
rlm@46
|
10527 this.fireEvent("add", this, records, index);
|
rlm@46
|
10528 },
|
rlm@46
|
10529
|
rlm@46
|
10530
|
rlm@46
|
10531 addSorted : function(record){
|
rlm@46
|
10532 var index = this.findInsertIndex(record);
|
rlm@46
|
10533 this.insert(index, record);
|
rlm@46
|
10534 },
|
rlm@46
|
10535
|
rlm@46
|
10536
|
rlm@46
|
10537 remove : function(record){
|
rlm@46
|
10538 var index = this.data.indexOf(record);
|
rlm@46
|
10539 this.data.removeAt(index);
|
rlm@46
|
10540 if(this.pruneModifiedRecords){
|
rlm@46
|
10541 this.modified.remove(record);
|
rlm@46
|
10542 }
|
rlm@46
|
10543 if(this.snapshot){
|
rlm@46
|
10544 this.snapshot.remove(record);
|
rlm@46
|
10545 }
|
rlm@46
|
10546 this.fireEvent("remove", this, record, index);
|
rlm@46
|
10547 },
|
rlm@46
|
10548
|
rlm@46
|
10549
|
rlm@46
|
10550 removeAll : function(){
|
rlm@46
|
10551 this.data.clear();
|
rlm@46
|
10552 if(this.snapshot){
|
rlm@46
|
10553 this.snapshot.clear();
|
rlm@46
|
10554 }
|
rlm@46
|
10555 if(this.pruneModifiedRecords){
|
rlm@46
|
10556 this.modified = [];
|
rlm@46
|
10557 }
|
rlm@46
|
10558 this.fireEvent("clear", this);
|
rlm@46
|
10559 },
|
rlm@46
|
10560
|
rlm@46
|
10561
|
rlm@46
|
10562 insert : function(index, records){
|
rlm@46
|
10563 records = [].concat(records);
|
rlm@46
|
10564 for(var i = 0, len = records.length; i < len; i++){
|
rlm@46
|
10565 this.data.insert(index, records[i]);
|
rlm@46
|
10566 records[i].join(this);
|
rlm@46
|
10567 }
|
rlm@46
|
10568 this.fireEvent("add", this, records, index);
|
rlm@46
|
10569 },
|
rlm@46
|
10570
|
rlm@46
|
10571
|
rlm@46
|
10572 indexOf : function(record){
|
rlm@46
|
10573 return this.data.indexOf(record);
|
rlm@46
|
10574 },
|
rlm@46
|
10575
|
rlm@46
|
10576
|
rlm@46
|
10577 indexOfId : function(id){
|
rlm@46
|
10578 return this.data.indexOfKey(id);
|
rlm@46
|
10579 },
|
rlm@46
|
10580
|
rlm@46
|
10581
|
rlm@46
|
10582 getById : function(id){
|
rlm@46
|
10583 return this.data.key(id);
|
rlm@46
|
10584 },
|
rlm@46
|
10585
|
rlm@46
|
10586
|
rlm@46
|
10587 getAt : function(index){
|
rlm@46
|
10588 return this.data.itemAt(index);
|
rlm@46
|
10589 },
|
rlm@46
|
10590
|
rlm@46
|
10591
|
rlm@46
|
10592 getRange : function(start, end){
|
rlm@46
|
10593 return this.data.getRange(start, end);
|
rlm@46
|
10594 },
|
rlm@46
|
10595
|
rlm@46
|
10596 storeOptions : function(o){
|
rlm@46
|
10597 o = Ext.apply({}, o);
|
rlm@46
|
10598 delete o.callback;
|
rlm@46
|
10599 delete o.scope;
|
rlm@46
|
10600 this.lastOptions = o;
|
rlm@46
|
10601 },
|
rlm@46
|
10602
|
rlm@46
|
10603
|
rlm@46
|
10604 load : function(options){
|
rlm@46
|
10605 options = options || {};
|
rlm@46
|
10606 if(this.fireEvent("beforeload", this, options) !== false){
|
rlm@46
|
10607 this.storeOptions(options);
|
rlm@46
|
10608 var p = Ext.apply(options.params || {}, this.baseParams);
|
rlm@46
|
10609 if(this.sortInfo && this.remoteSort){
|
rlm@46
|
10610 var pn = this.paramNames;
|
rlm@46
|
10611 p[pn["sort"]] = this.sortInfo.field;
|
rlm@46
|
10612 p[pn["dir"]] = this.sortInfo.direction;
|
rlm@46
|
10613 }
|
rlm@46
|
10614 this.proxy.load(p, this.reader, this.loadRecords, this, options);
|
rlm@46
|
10615 return true;
|
rlm@46
|
10616 } else {
|
rlm@46
|
10617 return false;
|
rlm@46
|
10618 }
|
rlm@46
|
10619 },
|
rlm@46
|
10620
|
rlm@46
|
10621
|
rlm@46
|
10622 reload : function(options){
|
rlm@46
|
10623 this.load(Ext.applyIf(options||{}, this.lastOptions));
|
rlm@46
|
10624 },
|
rlm@46
|
10625
|
rlm@46
|
10626 loadRecords : function(o, options, success){
|
rlm@46
|
10627 if(!o || success === false){
|
rlm@46
|
10628 if(success !== false){
|
rlm@46
|
10629 this.fireEvent("load", this, [], options);
|
rlm@46
|
10630 }
|
rlm@46
|
10631 if(options.callback){
|
rlm@46
|
10632 options.callback.call(options.scope || this, [], options, false);
|
rlm@46
|
10633 }
|
rlm@46
|
10634 return;
|
rlm@46
|
10635 }
|
rlm@46
|
10636 var r = o.records, t = o.totalRecords || r.length;
|
rlm@46
|
10637 if(!options || options.add !== true){
|
rlm@46
|
10638 if(this.pruneModifiedRecords){
|
rlm@46
|
10639 this.modified = [];
|
rlm@46
|
10640 }
|
rlm@46
|
10641 for(var i = 0, len = r.length; i < len; i++){
|
rlm@46
|
10642 r[i].join(this);
|
rlm@46
|
10643 }
|
rlm@46
|
10644 if(this.snapshot){
|
rlm@46
|
10645 this.data = this.snapshot;
|
rlm@46
|
10646 delete this.snapshot;
|
rlm@46
|
10647 }
|
rlm@46
|
10648 this.data.clear();
|
rlm@46
|
10649 this.data.addAll(r);
|
rlm@46
|
10650 this.totalLength = t;
|
rlm@46
|
10651 this.applySort();
|
rlm@46
|
10652 this.fireEvent("datachanged", this);
|
rlm@46
|
10653 }else{
|
rlm@46
|
10654 this.totalLength = Math.max(t, this.data.length+r.length);
|
rlm@46
|
10655 this.add(r);
|
rlm@46
|
10656 }
|
rlm@46
|
10657 this.fireEvent("load", this, r, options);
|
rlm@46
|
10658 if(options.callback){
|
rlm@46
|
10659 options.callback.call(options.scope || this, r, options, true);
|
rlm@46
|
10660 }
|
rlm@46
|
10661 },
|
rlm@46
|
10662
|
rlm@46
|
10663
|
rlm@46
|
10664 loadData : function(o, append){
|
rlm@46
|
10665 var r = this.reader.readRecords(o);
|
rlm@46
|
10666 this.loadRecords(r, {add: append}, true);
|
rlm@46
|
10667 },
|
rlm@46
|
10668
|
rlm@46
|
10669
|
rlm@46
|
10670 getCount : function(){
|
rlm@46
|
10671 return this.data.length || 0;
|
rlm@46
|
10672 },
|
rlm@46
|
10673
|
rlm@46
|
10674
|
rlm@46
|
10675 getTotalCount : function(){
|
rlm@46
|
10676 return this.totalLength || 0;
|
rlm@46
|
10677 },
|
rlm@46
|
10678
|
rlm@46
|
10679
|
rlm@46
|
10680 getSortState : function(){
|
rlm@46
|
10681 return this.sortInfo;
|
rlm@46
|
10682 },
|
rlm@46
|
10683
|
rlm@46
|
10684 applySort : function(){
|
rlm@46
|
10685 if(this.sortInfo && !this.remoteSort){
|
rlm@46
|
10686 var s = this.sortInfo, f = s.field;
|
rlm@46
|
10687 this.sortData(f, s.direction);
|
rlm@46
|
10688 }
|
rlm@46
|
10689 },
|
rlm@46
|
10690
|
rlm@46
|
10691 sortData : function(f, direction){
|
rlm@46
|
10692 direction = direction || 'ASC';
|
rlm@46
|
10693 var st = this.fields.get(f).sortType;
|
rlm@46
|
10694 var fn = function(r1, r2){
|
rlm@46
|
10695 var v1 = st(r1.data[f]), v2 = st(r2.data[f]);
|
rlm@46
|
10696 return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
|
rlm@46
|
10697 };
|
rlm@46
|
10698 this.data.sort(direction, fn);
|
rlm@46
|
10699 if(this.snapshot && this.snapshot != this.data){
|
rlm@46
|
10700 this.snapshot.sort(direction, fn);
|
rlm@46
|
10701 }
|
rlm@46
|
10702 },
|
rlm@46
|
10703
|
rlm@46
|
10704
|
rlm@46
|
10705 setDefaultSort : function(field, dir){
|
rlm@46
|
10706 dir = dir ? dir.toUpperCase() : "ASC";
|
rlm@46
|
10707 this.sortInfo = {field: field, direction: dir};
|
rlm@46
|
10708 this.sortToggle[field] = dir;
|
rlm@46
|
10709 },
|
rlm@46
|
10710
|
rlm@46
|
10711
|
rlm@46
|
10712 sort : function(fieldName, dir){
|
rlm@46
|
10713 var f = this.fields.get(fieldName);
|
rlm@46
|
10714 if(!f){
|
rlm@46
|
10715 return false;
|
rlm@46
|
10716 }
|
rlm@46
|
10717 if(!dir){
|
rlm@46
|
10718 if(this.sortInfo && this.sortInfo.field == f.name){ dir = (this.sortToggle[f.name] || "ASC").toggle("ASC", "DESC");
|
rlm@46
|
10719 }else{
|
rlm@46
|
10720 dir = f.sortDir;
|
rlm@46
|
10721 }
|
rlm@46
|
10722 }
|
rlm@46
|
10723 var st = (this.sortToggle) ? this.sortToggle[f.name] : null;
|
rlm@46
|
10724 var si = (this.sortInfo) ? this.sortInfo : null;
|
rlm@46
|
10725
|
rlm@46
|
10726 this.sortToggle[f.name] = dir;
|
rlm@46
|
10727 this.sortInfo = {field: f.name, direction: dir};
|
rlm@46
|
10728 if(!this.remoteSort){
|
rlm@46
|
10729 this.applySort();
|
rlm@46
|
10730 this.fireEvent("datachanged", this);
|
rlm@46
|
10731 }else{
|
rlm@46
|
10732 if (!this.load(this.lastOptions)) {
|
rlm@46
|
10733 if (st) {
|
rlm@46
|
10734 this.sortToggle[f.name] = st;
|
rlm@46
|
10735 }
|
rlm@46
|
10736 if (si) {
|
rlm@46
|
10737 this.sortInfo = si;
|
rlm@46
|
10738 }
|
rlm@46
|
10739 }
|
rlm@46
|
10740 }
|
rlm@46
|
10741 },
|
rlm@46
|
10742
|
rlm@46
|
10743
|
rlm@46
|
10744 each : function(fn, scope){
|
rlm@46
|
10745 this.data.each(fn, scope);
|
rlm@46
|
10746 },
|
rlm@46
|
10747
|
rlm@46
|
10748
|
rlm@46
|
10749 getModifiedRecords : function(){
|
rlm@46
|
10750 return this.modified;
|
rlm@46
|
10751 },
|
rlm@46
|
10752
|
rlm@46
|
10753 createFilterFn : function(property, value, anyMatch, caseSensitive){
|
rlm@46
|
10754 if(Ext.isEmpty(value, false)){
|
rlm@46
|
10755 return false;
|
rlm@46
|
10756 }
|
rlm@46
|
10757 value = this.data.createValueMatcher(value, anyMatch, caseSensitive);
|
rlm@46
|
10758 return function(r){
|
rlm@46
|
10759 return value.test(r.data[property]);
|
rlm@46
|
10760 };
|
rlm@46
|
10761 },
|
rlm@46
|
10762
|
rlm@46
|
10763
|
rlm@46
|
10764 sum : function(property, start, end){
|
rlm@46
|
10765 var rs = this.data.items, v = 0;
|
rlm@46
|
10766 start = start || 0;
|
rlm@46
|
10767 end = (end || end === 0) ? end : rs.length-1;
|
rlm@46
|
10768
|
rlm@46
|
10769 for(var i = start; i <= end; i++){
|
rlm@46
|
10770 v += (rs[i].data[property] || 0);
|
rlm@46
|
10771 }
|
rlm@46
|
10772 return v;
|
rlm@46
|
10773 },
|
rlm@46
|
10774
|
rlm@46
|
10775
|
rlm@46
|
10776 filter : function(property, value, anyMatch, caseSensitive){
|
rlm@46
|
10777 var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);
|
rlm@46
|
10778 return fn ? this.filterBy(fn) : this.clearFilter();
|
rlm@46
|
10779 },
|
rlm@46
|
10780
|
rlm@46
|
10781
|
rlm@46
|
10782 filterBy : function(fn, scope){
|
rlm@46
|
10783 this.snapshot = this.snapshot || this.data;
|
rlm@46
|
10784 this.data = this.queryBy(fn, scope||this);
|
rlm@46
|
10785 this.fireEvent("datachanged", this);
|
rlm@46
|
10786 },
|
rlm@46
|
10787
|
rlm@46
|
10788
|
rlm@46
|
10789 query : function(property, value, anyMatch, caseSensitive){
|
rlm@46
|
10790 var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);
|
rlm@46
|
10791 return fn ? this.queryBy(fn) : this.data.clone();
|
rlm@46
|
10792 },
|
rlm@46
|
10793
|
rlm@46
|
10794
|
rlm@46
|
10795 queryBy : function(fn, scope){
|
rlm@46
|
10796 var data = this.snapshot || this.data;
|
rlm@46
|
10797 return data.filterBy(fn, scope||this);
|
rlm@46
|
10798 },
|
rlm@46
|
10799
|
rlm@46
|
10800
|
rlm@46
|
10801 find : function(property, value, start, anyMatch, caseSensitive){
|
rlm@46
|
10802 var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);
|
rlm@46
|
10803 return fn ? this.data.findIndexBy(fn, null, start) : -1;
|
rlm@46
|
10804 },
|
rlm@46
|
10805
|
rlm@46
|
10806
|
rlm@46
|
10807 findBy : function(fn, scope, start){
|
rlm@46
|
10808 return this.data.findIndexBy(fn, scope, start);
|
rlm@46
|
10809 },
|
rlm@46
|
10810
|
rlm@46
|
10811
|
rlm@46
|
10812 collect : function(dataIndex, allowNull, bypassFilter){
|
rlm@46
|
10813 var d = (bypassFilter === true && this.snapshot) ?
|
rlm@46
|
10814 this.snapshot.items : this.data.items;
|
rlm@46
|
10815 var v, sv, r = [], l = {};
|
rlm@46
|
10816 for(var i = 0, len = d.length; i < len; i++){
|
rlm@46
|
10817 v = d[i].data[dataIndex];
|
rlm@46
|
10818 sv = String(v);
|
rlm@46
|
10819 if((allowNull || !Ext.isEmpty(v)) && !l[sv]){
|
rlm@46
|
10820 l[sv] = true;
|
rlm@46
|
10821 r[r.length] = v;
|
rlm@46
|
10822 }
|
rlm@46
|
10823 }
|
rlm@46
|
10824 return r;
|
rlm@46
|
10825 },
|
rlm@46
|
10826
|
rlm@46
|
10827
|
rlm@46
|
10828 clearFilter : function(suppressEvent){
|
rlm@46
|
10829 if(this.isFiltered()){
|
rlm@46
|
10830 this.data = this.snapshot;
|
rlm@46
|
10831 delete this.snapshot;
|
rlm@46
|
10832 if(suppressEvent !== true){
|
rlm@46
|
10833 this.fireEvent("datachanged", this);
|
rlm@46
|
10834 }
|
rlm@46
|
10835 }
|
rlm@46
|
10836 },
|
rlm@46
|
10837
|
rlm@46
|
10838
|
rlm@46
|
10839 isFiltered : function(){
|
rlm@46
|
10840 return this.snapshot && this.snapshot != this.data;
|
rlm@46
|
10841 },
|
rlm@46
|
10842
|
rlm@46
|
10843 afterEdit : function(record){
|
rlm@46
|
10844 if(this.modified.indexOf(record) == -1){
|
rlm@46
|
10845 this.modified.push(record);
|
rlm@46
|
10846 }
|
rlm@46
|
10847 this.fireEvent("update", this, record, Ext.data.Record.EDIT);
|
rlm@46
|
10848 },
|
rlm@46
|
10849
|
rlm@46
|
10850 afterReject : function(record){
|
rlm@46
|
10851 this.modified.remove(record);
|
rlm@46
|
10852 this.fireEvent("update", this, record, Ext.data.Record.REJECT);
|
rlm@46
|
10853 },
|
rlm@46
|
10854
|
rlm@46
|
10855 afterCommit : function(record){
|
rlm@46
|
10856 this.modified.remove(record);
|
rlm@46
|
10857 this.fireEvent("update", this, record, Ext.data.Record.COMMIT);
|
rlm@46
|
10858 },
|
rlm@46
|
10859
|
rlm@46
|
10860
|
rlm@46
|
10861 commitChanges : function(){
|
rlm@46
|
10862 var m = this.modified.slice(0);
|
rlm@46
|
10863 this.modified = [];
|
rlm@46
|
10864 for(var i = 0, len = m.length; i < len; i++){
|
rlm@46
|
10865 m[i].commit();
|
rlm@46
|
10866 }
|
rlm@46
|
10867 },
|
rlm@46
|
10868
|
rlm@46
|
10869
|
rlm@46
|
10870 rejectChanges : function(){
|
rlm@46
|
10871 var m = this.modified.slice(0);
|
rlm@46
|
10872 this.modified = [];
|
rlm@46
|
10873 for(var i = 0, len = m.length; i < len; i++){
|
rlm@46
|
10874 m[i].reject();
|
rlm@46
|
10875 }
|
rlm@46
|
10876 },
|
rlm@46
|
10877
|
rlm@46
|
10878 onMetaChange : function(meta, rtype, o){
|
rlm@46
|
10879 this.recordType = rtype;
|
rlm@46
|
10880 this.fields = rtype.prototype.fields;
|
rlm@46
|
10881 delete this.snapshot;
|
rlm@46
|
10882 this.sortInfo = meta.sortInfo;
|
rlm@46
|
10883 this.modified = [];
|
rlm@46
|
10884 this.fireEvent('metachange', this, this.reader.meta);
|
rlm@46
|
10885 },
|
rlm@46
|
10886
|
rlm@46
|
10887 findInsertIndex : function(record){
|
rlm@46
|
10888 this.suspendEvents();
|
rlm@46
|
10889 var data = this.data.clone();
|
rlm@46
|
10890 this.data.add(record);
|
rlm@46
|
10891 this.applySort();
|
rlm@46
|
10892 var index = this.data.indexOf(record);
|
rlm@46
|
10893 this.data = data;
|
rlm@46
|
10894 this.resumeEvents();
|
rlm@46
|
10895 return index;
|
rlm@46
|
10896 }
|
rlm@46
|
10897 });
|
rlm@46
|
10898
|
rlm@46
|
10899 Ext.data.SimpleStore = function(config){
|
rlm@46
|
10900 Ext.data.SimpleStore.superclass.constructor.call(this, Ext.apply(config, {
|
rlm@46
|
10901 reader: new Ext.data.ArrayReader({
|
rlm@46
|
10902 id: config.id
|
rlm@46
|
10903 },
|
rlm@46
|
10904 Ext.data.Record.create(config.fields)
|
rlm@46
|
10905 )
|
rlm@46
|
10906 }));
|
rlm@46
|
10907 };
|
rlm@46
|
10908 Ext.extend(Ext.data.SimpleStore, Ext.data.Store, {
|
rlm@46
|
10909 loadData : function(data, append){
|
rlm@46
|
10910 if(this.expandData === true){
|
rlm@46
|
10911 var r = [];
|
rlm@46
|
10912 for(var i = 0, len = data.length; i < len; i++){
|
rlm@46
|
10913 r[r.length] = [data[i]];
|
rlm@46
|
10914 }
|
rlm@46
|
10915 data = r;
|
rlm@46
|
10916 }
|
rlm@46
|
10917 Ext.data.SimpleStore.superclass.loadData.call(this, data, append);
|
rlm@46
|
10918 }
|
rlm@46
|
10919 });
|
rlm@46
|
10920
|
rlm@46
|
10921 Ext.data.JsonStore = function(c){
|
rlm@46
|
10922 Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(c, {
|
rlm@46
|
10923 proxy: !c.data ? new Ext.data.HttpProxy({url: c.url}) : undefined,
|
rlm@46
|
10924 reader: new Ext.data.JsonReader(c, c.fields)
|
rlm@46
|
10925 }));
|
rlm@46
|
10926 };
|
rlm@46
|
10927 Ext.extend(Ext.data.JsonStore, Ext.data.Store);
|
rlm@46
|
10928
|
rlm@46
|
10929
|
rlm@46
|
10930
|
rlm@46
|
10931 Ext.data.Field = function(config){
|
rlm@46
|
10932 if(typeof config == "string"){
|
rlm@46
|
10933 config = {name: config};
|
rlm@46
|
10934 }
|
rlm@46
|
10935 Ext.apply(this, config);
|
rlm@46
|
10936
|
rlm@46
|
10937 if(!this.type){
|
rlm@46
|
10938 this.type = "auto";
|
rlm@46
|
10939 }
|
rlm@46
|
10940
|
rlm@46
|
10941 var st = Ext.data.SortTypes;
|
rlm@46
|
10942
|
rlm@46
|
10943 if(typeof this.sortType == "string"){
|
rlm@46
|
10944 this.sortType = st[this.sortType];
|
rlm@46
|
10945 }
|
rlm@46
|
10946
|
rlm@46
|
10947
|
rlm@46
|
10948 if(!this.sortType){
|
rlm@46
|
10949 switch(this.type){
|
rlm@46
|
10950 case "string":
|
rlm@46
|
10951 this.sortType = st.asUCString;
|
rlm@46
|
10952 break;
|
rlm@46
|
10953 case "date":
|
rlm@46
|
10954 this.sortType = st.asDate;
|
rlm@46
|
10955 break;
|
rlm@46
|
10956 default:
|
rlm@46
|
10957 this.sortType = st.none;
|
rlm@46
|
10958 }
|
rlm@46
|
10959 }
|
rlm@46
|
10960
|
rlm@46
|
10961
|
rlm@46
|
10962 var stripRe = /[\$,%]/g;
|
rlm@46
|
10963
|
rlm@46
|
10964
|
rlm@46
|
10965
|
rlm@46
|
10966 if(!this.convert){
|
rlm@46
|
10967 var cv, dateFormat = this.dateFormat;
|
rlm@46
|
10968 switch(this.type){
|
rlm@46
|
10969 case "":
|
rlm@46
|
10970 case "auto":
|
rlm@46
|
10971 case undefined:
|
rlm@46
|
10972 cv = function(v){ return v; };
|
rlm@46
|
10973 break;
|
rlm@46
|
10974 case "string":
|
rlm@46
|
10975 cv = function(v){ return (v === undefined || v === null) ? '' : String(v); };
|
rlm@46
|
10976 break;
|
rlm@46
|
10977 case "int":
|
rlm@46
|
10978 cv = function(v){
|
rlm@46
|
10979 return v !== undefined && v !== null && v !== '' ?
|
rlm@46
|
10980 parseInt(String(v).replace(stripRe, ""), 10) : '';
|
rlm@46
|
10981 };
|
rlm@46
|
10982 break;
|
rlm@46
|
10983 case "float":
|
rlm@46
|
10984 cv = function(v){
|
rlm@46
|
10985 return v !== undefined && v !== null && v !== '' ?
|
rlm@46
|
10986 parseFloat(String(v).replace(stripRe, ""), 10) : '';
|
rlm@46
|
10987 };
|
rlm@46
|
10988 break;
|
rlm@46
|
10989 case "bool":
|
rlm@46
|
10990 case "boolean":
|
rlm@46
|
10991 cv = function(v){ return v === true || v === "true" || v == 1; };
|
rlm@46
|
10992 break;
|
rlm@46
|
10993 case "date":
|
rlm@46
|
10994 cv = function(v){
|
rlm@46
|
10995 if(!v){
|
rlm@46
|
10996 return '';
|
rlm@46
|
10997 }
|
rlm@46
|
10998 if(Ext.isDate(v)){
|
rlm@46
|
10999 return v;
|
rlm@46
|
11000 }
|
rlm@46
|
11001 if(dateFormat){
|
rlm@46
|
11002 if(dateFormat == "timestamp"){
|
rlm@46
|
11003 return new Date(v*1000);
|
rlm@46
|
11004 }
|
rlm@46
|
11005 if(dateFormat == "time"){
|
rlm@46
|
11006 return new Date(parseInt(v, 10));
|
rlm@46
|
11007 }
|
rlm@46
|
11008 return Date.parseDate(v, dateFormat);
|
rlm@46
|
11009 }
|
rlm@46
|
11010 var parsed = Date.parse(v);
|
rlm@46
|
11011 return parsed ? new Date(parsed) : null;
|
rlm@46
|
11012 };
|
rlm@46
|
11013 break;
|
rlm@46
|
11014
|
rlm@46
|
11015 }
|
rlm@46
|
11016 this.convert = cv;
|
rlm@46
|
11017 }
|
rlm@46
|
11018 };
|
rlm@46
|
11019
|
rlm@46
|
11020 Ext.data.Field.prototype = {
|
rlm@46
|
11021 dateFormat: null,
|
rlm@46
|
11022 defaultValue: "",
|
rlm@46
|
11023 mapping: null,
|
rlm@46
|
11024 sortType : null,
|
rlm@46
|
11025 sortDir : "ASC"
|
rlm@46
|
11026 };
|
rlm@46
|
11027
|
rlm@46
|
11028 Ext.data.DataReader = function(meta, recordType){
|
rlm@46
|
11029
|
rlm@46
|
11030 this.meta = meta;
|
rlm@46
|
11031 this.recordType = Ext.isArray(recordType) ?
|
rlm@46
|
11032 Ext.data.Record.create(recordType) : recordType;
|
rlm@46
|
11033 };
|
rlm@46
|
11034
|
rlm@46
|
11035 Ext.data.DataReader.prototype = {
|
rlm@46
|
11036
|
rlm@46
|
11037 };
|
rlm@46
|
11038
|
rlm@46
|
11039 Ext.data.DataProxy = function(){
|
rlm@46
|
11040 this.addEvents(
|
rlm@46
|
11041
|
rlm@46
|
11042 'beforeload',
|
rlm@46
|
11043
|
rlm@46
|
11044 'load'
|
rlm@46
|
11045 );
|
rlm@46
|
11046 Ext.data.DataProxy.superclass.constructor.call(this);
|
rlm@46
|
11047 };
|
rlm@46
|
11048
|
rlm@46
|
11049 Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
|
rlm@46
|
11050
|
rlm@46
|
11051 Ext.data.MemoryProxy = function(data){
|
rlm@46
|
11052 Ext.data.MemoryProxy.superclass.constructor.call(this);
|
rlm@46
|
11053 this.data = data;
|
rlm@46
|
11054 };
|
rlm@46
|
11055
|
rlm@46
|
11056 Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, {
|
rlm@46
|
11057
|
rlm@46
|
11058
|
rlm@46
|
11059
|
rlm@46
|
11060 load : function(params, reader, callback, scope, arg){
|
rlm@46
|
11061 params = params || {};
|
rlm@46
|
11062 var result;
|
rlm@46
|
11063 try {
|
rlm@46
|
11064 result = reader.readRecords(this.data);
|
rlm@46
|
11065 }catch(e){
|
rlm@46
|
11066 this.fireEvent("loadexception", this, arg, null, e);
|
rlm@46
|
11067 callback.call(scope, null, arg, false);
|
rlm@46
|
11068 return;
|
rlm@46
|
11069 }
|
rlm@46
|
11070 callback.call(scope, result, arg, true);
|
rlm@46
|
11071 },
|
rlm@46
|
11072
|
rlm@46
|
11073
|
rlm@46
|
11074 update : function(params, records){
|
rlm@46
|
11075
|
rlm@46
|
11076 }
|
rlm@46
|
11077 });
|
rlm@46
|
11078
|
rlm@46
|
11079 Ext.data.HttpProxy = function(conn){
|
rlm@46
|
11080 Ext.data.HttpProxy.superclass.constructor.call(this);
|
rlm@46
|
11081
|
rlm@46
|
11082 this.conn = conn;
|
rlm@46
|
11083 this.useAjax = !conn || !conn.events;
|
rlm@46
|
11084
|
rlm@46
|
11085
|
rlm@46
|
11086 };
|
rlm@46
|
11087
|
rlm@46
|
11088 Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, {
|
rlm@46
|
11089
|
rlm@46
|
11090 getConnection : function(){
|
rlm@46
|
11091 return this.useAjax ? Ext.Ajax : this.conn;
|
rlm@46
|
11092 },
|
rlm@46
|
11093
|
rlm@46
|
11094
|
rlm@46
|
11095 load : function(params, reader, callback, scope, arg){
|
rlm@46
|
11096 if(this.fireEvent("beforeload", this, params) !== false){
|
rlm@46
|
11097 var o = {
|
rlm@46
|
11098 params : params || {},
|
rlm@46
|
11099 request: {
|
rlm@46
|
11100 callback : callback,
|
rlm@46
|
11101 scope : scope,
|
rlm@46
|
11102 arg : arg
|
rlm@46
|
11103 },
|
rlm@46
|
11104 reader: reader,
|
rlm@46
|
11105 callback : this.loadResponse,
|
rlm@46
|
11106 scope: this
|
rlm@46
|
11107 };
|
rlm@46
|
11108 if(this.useAjax){
|
rlm@46
|
11109 Ext.applyIf(o, this.conn);
|
rlm@46
|
11110 if(this.activeRequest){
|
rlm@46
|
11111 Ext.Ajax.abort(this.activeRequest);
|
rlm@46
|
11112 }
|
rlm@46
|
11113 this.activeRequest = Ext.Ajax.request(o);
|
rlm@46
|
11114 }else{
|
rlm@46
|
11115 this.conn.request(o);
|
rlm@46
|
11116 }
|
rlm@46
|
11117 }else{
|
rlm@46
|
11118 callback.call(scope||this, null, arg, false);
|
rlm@46
|
11119 }
|
rlm@46
|
11120 },
|
rlm@46
|
11121
|
rlm@46
|
11122
|
rlm@46
|
11123 loadResponse : function(o, success, response){
|
rlm@46
|
11124 delete this.activeRequest;
|
rlm@46
|
11125 if(!success){
|
rlm@46
|
11126 this.fireEvent("loadexception", this, o, response);
|
rlm@46
|
11127 o.request.callback.call(o.request.scope, null, o.request.arg, false);
|
rlm@46
|
11128 return;
|
rlm@46
|
11129 }
|
rlm@46
|
11130 var result;
|
rlm@46
|
11131 try {
|
rlm@46
|
11132 result = o.reader.read(response);
|
rlm@46
|
11133 }catch(e){
|
rlm@46
|
11134 this.fireEvent("loadexception", this, o, response, e);
|
rlm@46
|
11135 o.request.callback.call(o.request.scope, null, o.request.arg, false);
|
rlm@46
|
11136 return;
|
rlm@46
|
11137 }
|
rlm@46
|
11138 this.fireEvent("load", this, o, o.request.arg);
|
rlm@46
|
11139 o.request.callback.call(o.request.scope, result, o.request.arg, true);
|
rlm@46
|
11140 },
|
rlm@46
|
11141
|
rlm@46
|
11142
|
rlm@46
|
11143 update : function(dataSet){
|
rlm@46
|
11144
|
rlm@46
|
11145 },
|
rlm@46
|
11146
|
rlm@46
|
11147
|
rlm@46
|
11148 updateResponse : function(dataSet){
|
rlm@46
|
11149
|
rlm@46
|
11150 }
|
rlm@46
|
11151 });
|
rlm@46
|
11152
|
rlm@46
|
11153 Ext.data.ScriptTagProxy = function(config){
|
rlm@46
|
11154 Ext.data.ScriptTagProxy.superclass.constructor.call(this);
|
rlm@46
|
11155 Ext.apply(this, config);
|
rlm@46
|
11156 this.head = document.getElementsByTagName("head")[0];
|
rlm@46
|
11157
|
rlm@46
|
11158
|
rlm@46
|
11159 };
|
rlm@46
|
11160
|
rlm@46
|
11161 Ext.data.ScriptTagProxy.TRANS_ID = 1000;
|
rlm@46
|
11162
|
rlm@46
|
11163 Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, {
|
rlm@46
|
11164
|
rlm@46
|
11165
|
rlm@46
|
11166 timeout : 30000,
|
rlm@46
|
11167
|
rlm@46
|
11168 callbackParam : "callback",
|
rlm@46
|
11169
|
rlm@46
|
11170 nocache : true,
|
rlm@46
|
11171
|
rlm@46
|
11172
|
rlm@46
|
11173 load : function(params, reader, callback, scope, arg){
|
rlm@46
|
11174 if(this.fireEvent("beforeload", this, params) !== false){
|
rlm@46
|
11175
|
rlm@46
|
11176 var p = Ext.urlEncode(Ext.apply(params, this.extraParams));
|
rlm@46
|
11177
|
rlm@46
|
11178 var url = this.url;
|
rlm@46
|
11179 url += (url.indexOf("?") != -1 ? "&" : "?") + p;
|
rlm@46
|
11180 if(this.nocache){
|
rlm@46
|
11181 url += "&_dc=" + (new Date().getTime());
|
rlm@46
|
11182 }
|
rlm@46
|
11183 var transId = ++Ext.data.ScriptTagProxy.TRANS_ID;
|
rlm@46
|
11184 var trans = {
|
rlm@46
|
11185 id : transId,
|
rlm@46
|
11186 cb : "stcCallback"+transId,
|
rlm@46
|
11187 scriptId : "stcScript"+transId,
|
rlm@46
|
11188 params : params,
|
rlm@46
|
11189 arg : arg,
|
rlm@46
|
11190 url : url,
|
rlm@46
|
11191 callback : callback,
|
rlm@46
|
11192 scope : scope,
|
rlm@46
|
11193 reader : reader
|
rlm@46
|
11194 };
|
rlm@46
|
11195 var conn = this;
|
rlm@46
|
11196
|
rlm@46
|
11197 window[trans.cb] = function(o){
|
rlm@46
|
11198 conn.handleResponse(o, trans);
|
rlm@46
|
11199 };
|
rlm@46
|
11200
|
rlm@46
|
11201 url += String.format("&{0}={1}", this.callbackParam, trans.cb);
|
rlm@46
|
11202
|
rlm@46
|
11203 if(this.autoAbort !== false){
|
rlm@46
|
11204 this.abort();
|
rlm@46
|
11205 }
|
rlm@46
|
11206
|
rlm@46
|
11207 trans.timeoutId = this.handleFailure.defer(this.timeout, this, [trans]);
|
rlm@46
|
11208
|
rlm@46
|
11209 var script = document.createElement("script");
|
rlm@46
|
11210 script.setAttribute("src", url);
|
rlm@46
|
11211 script.setAttribute("type", "text/javascript");
|
rlm@46
|
11212 script.setAttribute("id", trans.scriptId);
|
rlm@46
|
11213 this.head.appendChild(script);
|
rlm@46
|
11214
|
rlm@46
|
11215 this.trans = trans;
|
rlm@46
|
11216 }else{
|
rlm@46
|
11217 callback.call(scope||this, null, arg, false);
|
rlm@46
|
11218 }
|
rlm@46
|
11219 },
|
rlm@46
|
11220
|
rlm@46
|
11221
|
rlm@46
|
11222 isLoading : function(){
|
rlm@46
|
11223 return this.trans ? true : false;
|
rlm@46
|
11224 },
|
rlm@46
|
11225
|
rlm@46
|
11226
|
rlm@46
|
11227 abort : function(){
|
rlm@46
|
11228 if(this.isLoading()){
|
rlm@46
|
11229 this.destroyTrans(this.trans);
|
rlm@46
|
11230 }
|
rlm@46
|
11231 },
|
rlm@46
|
11232
|
rlm@46
|
11233
|
rlm@46
|
11234 destroyTrans : function(trans, isLoaded){
|
rlm@46
|
11235 this.head.removeChild(document.getElementById(trans.scriptId));
|
rlm@46
|
11236 clearTimeout(trans.timeoutId);
|
rlm@46
|
11237 if(isLoaded){
|
rlm@46
|
11238 window[trans.cb] = undefined;
|
rlm@46
|
11239 try{
|
rlm@46
|
11240 delete window[trans.cb];
|
rlm@46
|
11241 }catch(e){}
|
rlm@46
|
11242 }else{
|
rlm@46
|
11243
|
rlm@46
|
11244 window[trans.cb] = function(){
|
rlm@46
|
11245 window[trans.cb] = undefined;
|
rlm@46
|
11246 try{
|
rlm@46
|
11247 delete window[trans.cb];
|
rlm@46
|
11248 }catch(e){}
|
rlm@46
|
11249 };
|
rlm@46
|
11250 }
|
rlm@46
|
11251 },
|
rlm@46
|
11252
|
rlm@46
|
11253
|
rlm@46
|
11254 handleResponse : function(o, trans){
|
rlm@46
|
11255 this.trans = false;
|
rlm@46
|
11256 this.destroyTrans(trans, true);
|
rlm@46
|
11257 var result;
|
rlm@46
|
11258 try {
|
rlm@46
|
11259 result = trans.reader.readRecords(o);
|
rlm@46
|
11260 }catch(e){
|
rlm@46
|
11261 this.fireEvent("loadexception", this, o, trans.arg, e);
|
rlm@46
|
11262 trans.callback.call(trans.scope||window, null, trans.arg, false);
|
rlm@46
|
11263 return;
|
rlm@46
|
11264 }
|
rlm@46
|
11265 this.fireEvent("load", this, o, trans.arg);
|
rlm@46
|
11266 trans.callback.call(trans.scope||window, result, trans.arg, true);
|
rlm@46
|
11267 },
|
rlm@46
|
11268
|
rlm@46
|
11269
|
rlm@46
|
11270 handleFailure : function(trans){
|
rlm@46
|
11271 this.trans = false;
|
rlm@46
|
11272 this.destroyTrans(trans, false);
|
rlm@46
|
11273 this.fireEvent("loadexception", this, null, trans.arg);
|
rlm@46
|
11274 trans.callback.call(trans.scope||window, null, trans.arg, false);
|
rlm@46
|
11275 }
|
rlm@46
|
11276 });
|
rlm@46
|
11277
|
rlm@46
|
11278 Ext.data.JsonReader = function(meta, recordType){
|
rlm@46
|
11279 meta = meta || {};
|
rlm@46
|
11280 Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
|
rlm@46
|
11281 };
|
rlm@46
|
11282 Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, {
|
rlm@46
|
11283
|
rlm@46
|
11284
|
rlm@46
|
11285 read : function(response){
|
rlm@46
|
11286 var json = response.responseText;
|
rlm@46
|
11287 var o = eval("("+json+")");
|
rlm@46
|
11288 if(!o) {
|
rlm@46
|
11289 throw {message: "JsonReader.read: Json object not found"};
|
rlm@46
|
11290 }
|
rlm@46
|
11291 return this.readRecords(o);
|
rlm@46
|
11292 },
|
rlm@46
|
11293
|
rlm@46
|
11294 onMetaChange : function(meta, recordType, o){
|
rlm@46
|
11295
|
rlm@46
|
11296 },
|
rlm@46
|
11297
|
rlm@46
|
11298
|
rlm@46
|
11299 simpleAccess: function(obj, subsc) {
|
rlm@46
|
11300 return obj[subsc];
|
rlm@46
|
11301 },
|
rlm@46
|
11302
|
rlm@46
|
11303
|
rlm@46
|
11304 getJsonAccessor: function(){
|
rlm@46
|
11305 var re = /[\[\.]/;
|
rlm@46
|
11306 return function(expr) {
|
rlm@46
|
11307 try {
|
rlm@46
|
11308 return(re.test(expr))
|
rlm@46
|
11309 ? new Function("obj", "return obj." + expr)
|
rlm@46
|
11310 : function(obj){
|
rlm@46
|
11311 return obj[expr];
|
rlm@46
|
11312 };
|
rlm@46
|
11313 } catch(e){}
|
rlm@46
|
11314 return Ext.emptyFn;
|
rlm@46
|
11315 };
|
rlm@46
|
11316 }(),
|
rlm@46
|
11317
|
rlm@46
|
11318
|
rlm@46
|
11319 readRecords : function(o){
|
rlm@46
|
11320
|
rlm@46
|
11321 this.jsonData = o;
|
rlm@46
|
11322 if(o.metaData){
|
rlm@46
|
11323 delete this.ef;
|
rlm@46
|
11324 this.meta = o.metaData;
|
rlm@46
|
11325 this.recordType = Ext.data.Record.create(o.metaData.fields);
|
rlm@46
|
11326 this.onMetaChange(this.meta, this.recordType, o);
|
rlm@46
|
11327 }
|
rlm@46
|
11328 var s = this.meta, Record = this.recordType,
|
rlm@46
|
11329 f = Record.prototype.fields, fi = f.items, fl = f.length;
|
rlm@46
|
11330
|
rlm@46
|
11331 if (!this.ef) {
|
rlm@46
|
11332 if(s.totalProperty) {
|
rlm@46
|
11333 this.getTotal = this.getJsonAccessor(s.totalProperty);
|
rlm@46
|
11334 }
|
rlm@46
|
11335 if(s.successProperty) {
|
rlm@46
|
11336 this.getSuccess = this.getJsonAccessor(s.successProperty);
|
rlm@46
|
11337 }
|
rlm@46
|
11338 this.getRoot = s.root ? this.getJsonAccessor(s.root) : function(p){return p;};
|
rlm@46
|
11339 if (s.id) {
|
rlm@46
|
11340 var g = this.getJsonAccessor(s.id);
|
rlm@46
|
11341 this.getId = function(rec) {
|
rlm@46
|
11342 var r = g(rec);
|
rlm@46
|
11343 return (r === undefined || r === "") ? null : r;
|
rlm@46
|
11344 };
|
rlm@46
|
11345 } else {
|
rlm@46
|
11346 this.getId = function(){return null;};
|
rlm@46
|
11347 }
|
rlm@46
|
11348 this.ef = [];
|
rlm@46
|
11349 for(var i = 0; i < fl; i++){
|
rlm@46
|
11350 f = fi[i];
|
rlm@46
|
11351 var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
|
rlm@46
|
11352 this.ef[i] = this.getJsonAccessor(map);
|
rlm@46
|
11353 }
|
rlm@46
|
11354 }
|
rlm@46
|
11355
|
rlm@46
|
11356 var root = this.getRoot(o), c = root.length, totalRecords = c, success = true;
|
rlm@46
|
11357 if(s.totalProperty){
|
rlm@46
|
11358 var v = parseInt(this.getTotal(o), 10);
|
rlm@46
|
11359 if(!isNaN(v)){
|
rlm@46
|
11360 totalRecords = v;
|
rlm@46
|
11361 }
|
rlm@46
|
11362 }
|
rlm@46
|
11363 if(s.successProperty){
|
rlm@46
|
11364 var v = this.getSuccess(o);
|
rlm@46
|
11365 if(v === false || v === 'false'){
|
rlm@46
|
11366 success = false;
|
rlm@46
|
11367 }
|
rlm@46
|
11368 }
|
rlm@46
|
11369 var records = [];
|
rlm@46
|
11370 for(var i = 0; i < c; i++){
|
rlm@46
|
11371 var n = root[i];
|
rlm@46
|
11372 var values = {};
|
rlm@46
|
11373 var id = this.getId(n);
|
rlm@46
|
11374 for(var j = 0; j < fl; j++){
|
rlm@46
|
11375 f = fi[j];
|
rlm@46
|
11376 var v = this.ef[j](n);
|
rlm@46
|
11377 values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue, n);
|
rlm@46
|
11378 }
|
rlm@46
|
11379 var record = new Record(values, id);
|
rlm@46
|
11380 record.json = n;
|
rlm@46
|
11381 records[i] = record;
|
rlm@46
|
11382 }
|
rlm@46
|
11383 return {
|
rlm@46
|
11384 success : success,
|
rlm@46
|
11385 records : records,
|
rlm@46
|
11386 totalRecords : totalRecords
|
rlm@46
|
11387 };
|
rlm@46
|
11388 }
|
rlm@46
|
11389 });
|
rlm@46
|
11390
|
rlm@46
|
11391 Ext.data.XmlReader = function(meta, recordType){
|
rlm@46
|
11392 meta = meta || {};
|
rlm@46
|
11393 Ext.data.XmlReader.superclass.constructor.call(this, meta, recordType || meta.fields);
|
rlm@46
|
11394 };
|
rlm@46
|
11395 Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {
|
rlm@46
|
11396
|
rlm@46
|
11397 read : function(response){
|
rlm@46
|
11398 var doc = response.responseXML;
|
rlm@46
|
11399 if(!doc) {
|
rlm@46
|
11400 throw {message: "XmlReader.read: XML Document not available"};
|
rlm@46
|
11401 }
|
rlm@46
|
11402 return this.readRecords(doc);
|
rlm@46
|
11403 },
|
rlm@46
|
11404
|
rlm@46
|
11405
|
rlm@46
|
11406 readRecords : function(doc){
|
rlm@46
|
11407
|
rlm@46
|
11408 this.xmlData = doc;
|
rlm@46
|
11409 var root = doc.documentElement || doc;
|
rlm@46
|
11410 var q = Ext.DomQuery;
|
rlm@46
|
11411 var recordType = this.recordType, fields = recordType.prototype.fields;
|
rlm@46
|
11412 var sid = this.meta.id;
|
rlm@46
|
11413 var totalRecords = 0, success = true;
|
rlm@46
|
11414 if(this.meta.totalRecords){
|
rlm@46
|
11415 totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
|
rlm@46
|
11416 }
|
rlm@46
|
11417
|
rlm@46
|
11418 if(this.meta.success){
|
rlm@46
|
11419 var sv = q.selectValue(this.meta.success, root, true);
|
rlm@46
|
11420 success = sv !== false && sv !== 'false';
|
rlm@46
|
11421 }
|
rlm@46
|
11422 var records = [];
|
rlm@46
|
11423 var ns = q.select(this.meta.record, root);
|
rlm@46
|
11424 for(var i = 0, len = ns.length; i < len; i++) {
|
rlm@46
|
11425 var n = ns[i];
|
rlm@46
|
11426 var values = {};
|
rlm@46
|
11427 var id = sid ? q.selectValue(sid, n) : undefined;
|
rlm@46
|
11428 for(var j = 0, jlen = fields.length; j < jlen; j++){
|
rlm@46
|
11429 var f = fields.items[j];
|
rlm@46
|
11430 var v = q.selectValue(f.mapping || f.name, n, f.defaultValue);
|
rlm@46
|
11431 v = f.convert(v, n);
|
rlm@46
|
11432 values[f.name] = v;
|
rlm@46
|
11433 }
|
rlm@46
|
11434 var record = new recordType(values, id);
|
rlm@46
|
11435 record.node = n;
|
rlm@46
|
11436 records[records.length] = record;
|
rlm@46
|
11437 }
|
rlm@46
|
11438
|
rlm@46
|
11439 return {
|
rlm@46
|
11440 success : success,
|
rlm@46
|
11441 records : records,
|
rlm@46
|
11442 totalRecords : totalRecords || records.length
|
rlm@46
|
11443 };
|
rlm@46
|
11444 }
|
rlm@46
|
11445 });
|
rlm@46
|
11446
|
rlm@46
|
11447 Ext.data.ArrayReader = Ext.extend(Ext.data.JsonReader, {
|
rlm@46
|
11448
|
rlm@46
|
11449 readRecords : function(o){
|
rlm@46
|
11450 var sid = this.meta ? this.meta.id : null;
|
rlm@46
|
11451 var recordType = this.recordType, fields = recordType.prototype.fields;
|
rlm@46
|
11452 var records = [];
|
rlm@46
|
11453 var root = o;
|
rlm@46
|
11454 for(var i = 0; i < root.length; i++){
|
rlm@46
|
11455 var n = root[i];
|
rlm@46
|
11456 var values = {};
|
rlm@46
|
11457 var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
|
rlm@46
|
11458 for(var j = 0, jlen = fields.length; j < jlen; j++){
|
rlm@46
|
11459 var f = fields.items[j];
|
rlm@46
|
11460 var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j;
|
rlm@46
|
11461 var v = n[k] !== undefined ? n[k] : f.defaultValue;
|
rlm@46
|
11462 v = f.convert(v, n);
|
rlm@46
|
11463 values[f.name] = v;
|
rlm@46
|
11464 }
|
rlm@46
|
11465 var record = new recordType(values, id);
|
rlm@46
|
11466 record.json = n;
|
rlm@46
|
11467 records[records.length] = record;
|
rlm@46
|
11468 }
|
rlm@46
|
11469 return {
|
rlm@46
|
11470 records : records,
|
rlm@46
|
11471 totalRecords : records.length
|
rlm@46
|
11472 };
|
rlm@46
|
11473 }
|
rlm@46
|
11474 });
|
rlm@46
|
11475
|
rlm@46
|
11476 Ext.data.Tree = function(root){
|
rlm@46
|
11477 this.nodeHash = {};
|
rlm@46
|
11478
|
rlm@46
|
11479 this.root = null;
|
rlm@46
|
11480 if(root){
|
rlm@46
|
11481 this.setRootNode(root);
|
rlm@46
|
11482 }
|
rlm@46
|
11483 this.addEvents(
|
rlm@46
|
11484
|
rlm@46
|
11485 "append",
|
rlm@46
|
11486
|
rlm@46
|
11487 "remove",
|
rlm@46
|
11488
|
rlm@46
|
11489 "move",
|
rlm@46
|
11490
|
rlm@46
|
11491 "insert",
|
rlm@46
|
11492
|
rlm@46
|
11493 "beforeappend",
|
rlm@46
|
11494
|
rlm@46
|
11495 "beforeremove",
|
rlm@46
|
11496
|
rlm@46
|
11497 "beforemove",
|
rlm@46
|
11498
|
rlm@46
|
11499 "beforeinsert"
|
rlm@46
|
11500 );
|
rlm@46
|
11501
|
rlm@46
|
11502 Ext.data.Tree.superclass.constructor.call(this);
|
rlm@46
|
11503 };
|
rlm@46
|
11504
|
rlm@46
|
11505 Ext.extend(Ext.data.Tree, Ext.util.Observable, {
|
rlm@46
|
11506
|
rlm@46
|
11507 pathSeparator: "/",
|
rlm@46
|
11508
|
rlm@46
|
11509
|
rlm@46
|
11510 proxyNodeEvent : function(){
|
rlm@46
|
11511 return this.fireEvent.apply(this, arguments);
|
rlm@46
|
11512 },
|
rlm@46
|
11513
|
rlm@46
|
11514
|
rlm@46
|
11515 getRootNode : function(){
|
rlm@46
|
11516 return this.root;
|
rlm@46
|
11517 },
|
rlm@46
|
11518
|
rlm@46
|
11519
|
rlm@46
|
11520 setRootNode : function(node){
|
rlm@46
|
11521 this.root = node;
|
rlm@46
|
11522 node.ownerTree = this;
|
rlm@46
|
11523 node.isRoot = true;
|
rlm@46
|
11524 this.registerNode(node);
|
rlm@46
|
11525 return node;
|
rlm@46
|
11526 },
|
rlm@46
|
11527
|
rlm@46
|
11528
|
rlm@46
|
11529 getNodeById : function(id){
|
rlm@46
|
11530 return this.nodeHash[id];
|
rlm@46
|
11531 },
|
rlm@46
|
11532
|
rlm@46
|
11533
|
rlm@46
|
11534 registerNode : function(node){
|
rlm@46
|
11535 this.nodeHash[node.id] = node;
|
rlm@46
|
11536 },
|
rlm@46
|
11537
|
rlm@46
|
11538
|
rlm@46
|
11539 unregisterNode : function(node){
|
rlm@46
|
11540 delete this.nodeHash[node.id];
|
rlm@46
|
11541 },
|
rlm@46
|
11542
|
rlm@46
|
11543 toString : function(){
|
rlm@46
|
11544 return "[Tree"+(this.id?" "+this.id:"")+"]";
|
rlm@46
|
11545 }
|
rlm@46
|
11546 });
|
rlm@46
|
11547
|
rlm@46
|
11548
|
rlm@46
|
11549 Ext.data.Node = function(attributes){
|
rlm@46
|
11550
|
rlm@46
|
11551 this.attributes = attributes || {};
|
rlm@46
|
11552 this.leaf = this.attributes.leaf;
|
rlm@46
|
11553
|
rlm@46
|
11554 this.id = this.attributes.id;
|
rlm@46
|
11555 if(!this.id){
|
rlm@46
|
11556 this.id = Ext.id(null, "ynode-");
|
rlm@46
|
11557 this.attributes.id = this.id;
|
rlm@46
|
11558 }
|
rlm@46
|
11559
|
rlm@46
|
11560 this.childNodes = [];
|
rlm@46
|
11561 if(!this.childNodes.indexOf){
|
rlm@46
|
11562 this.childNodes.indexOf = function(o){
|
rlm@46
|
11563 for(var i = 0, len = this.length; i < len; i++){
|
rlm@46
|
11564 if(this[i] == o) return i;
|
rlm@46
|
11565 }
|
rlm@46
|
11566 return -1;
|
rlm@46
|
11567 };
|
rlm@46
|
11568 }
|
rlm@46
|
11569
|
rlm@46
|
11570 this.parentNode = null;
|
rlm@46
|
11571
|
rlm@46
|
11572 this.firstChild = null;
|
rlm@46
|
11573
|
rlm@46
|
11574 this.lastChild = null;
|
rlm@46
|
11575
|
rlm@46
|
11576 this.previousSibling = null;
|
rlm@46
|
11577
|
rlm@46
|
11578 this.nextSibling = null;
|
rlm@46
|
11579
|
rlm@46
|
11580 this.addEvents({
|
rlm@46
|
11581
|
rlm@46
|
11582 "append" : true,
|
rlm@46
|
11583
|
rlm@46
|
11584 "remove" : true,
|
rlm@46
|
11585
|
rlm@46
|
11586 "move" : true,
|
rlm@46
|
11587
|
rlm@46
|
11588 "insert" : true,
|
rlm@46
|
11589
|
rlm@46
|
11590 "beforeappend" : true,
|
rlm@46
|
11591
|
rlm@46
|
11592 "beforeremove" : true,
|
rlm@46
|
11593
|
rlm@46
|
11594 "beforemove" : true,
|
rlm@46
|
11595
|
rlm@46
|
11596 "beforeinsert" : true
|
rlm@46
|
11597 });
|
rlm@46
|
11598 this.listeners = this.attributes.listeners;
|
rlm@46
|
11599 Ext.data.Node.superclass.constructor.call(this);
|
rlm@46
|
11600 };
|
rlm@46
|
11601
|
rlm@46
|
11602 Ext.extend(Ext.data.Node, Ext.util.Observable, {
|
rlm@46
|
11603
|
rlm@46
|
11604 fireEvent : function(evtName){
|
rlm@46
|
11605
|
rlm@46
|
11606 if(Ext.data.Node.superclass.fireEvent.apply(this, arguments) === false){
|
rlm@46
|
11607 return false;
|
rlm@46
|
11608 }
|
rlm@46
|
11609
|
rlm@46
|
11610 var ot = this.getOwnerTree();
|
rlm@46
|
11611 if(ot){
|
rlm@46
|
11612 if(ot.proxyNodeEvent.apply(ot, arguments) === false){
|
rlm@46
|
11613 return false;
|
rlm@46
|
11614 }
|
rlm@46
|
11615 }
|
rlm@46
|
11616 return true;
|
rlm@46
|
11617 },
|
rlm@46
|
11618
|
rlm@46
|
11619
|
rlm@46
|
11620 isLeaf : function(){
|
rlm@46
|
11621 return this.leaf === true;
|
rlm@46
|
11622 },
|
rlm@46
|
11623
|
rlm@46
|
11624
|
rlm@46
|
11625 setFirstChild : function(node){
|
rlm@46
|
11626 this.firstChild = node;
|
rlm@46
|
11627 },
|
rlm@46
|
11628
|
rlm@46
|
11629
|
rlm@46
|
11630 setLastChild : function(node){
|
rlm@46
|
11631 this.lastChild = node;
|
rlm@46
|
11632 },
|
rlm@46
|
11633
|
rlm@46
|
11634
|
rlm@46
|
11635
|
rlm@46
|
11636 isLast : function(){
|
rlm@46
|
11637 return (!this.parentNode ? true : this.parentNode.lastChild == this);
|
rlm@46
|
11638 },
|
rlm@46
|
11639
|
rlm@46
|
11640
|
rlm@46
|
11641 isFirst : function(){
|
rlm@46
|
11642 return (!this.parentNode ? true : this.parentNode.firstChild == this);
|
rlm@46
|
11643 },
|
rlm@46
|
11644
|
rlm@46
|
11645 hasChildNodes : function(){
|
rlm@46
|
11646 return !this.isLeaf() && this.childNodes.length > 0;
|
rlm@46
|
11647 },
|
rlm@46
|
11648
|
rlm@46
|
11649
|
rlm@46
|
11650 appendChild : function(node){
|
rlm@46
|
11651 var multi = false;
|
rlm@46
|
11652 if(Ext.isArray(node)){
|
rlm@46
|
11653 multi = node;
|
rlm@46
|
11654 }else if(arguments.length > 1){
|
rlm@46
|
11655 multi = arguments;
|
rlm@46
|
11656 }
|
rlm@46
|
11657
|
rlm@46
|
11658 if(multi){
|
rlm@46
|
11659 for(var i = 0, len = multi.length; i < len; i++) {
|
rlm@46
|
11660 this.appendChild(multi[i]);
|
rlm@46
|
11661 }
|
rlm@46
|
11662 }else{
|
rlm@46
|
11663 if(this.fireEvent("beforeappend", this.ownerTree, this, node) === false){
|
rlm@46
|
11664 return false;
|
rlm@46
|
11665 }
|
rlm@46
|
11666 var index = this.childNodes.length;
|
rlm@46
|
11667 var oldParent = node.parentNode;
|
rlm@46
|
11668
|
rlm@46
|
11669 if(oldParent){
|
rlm@46
|
11670 if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index) === false){
|
rlm@46
|
11671 return false;
|
rlm@46
|
11672 }
|
rlm@46
|
11673 oldParent.removeChild(node);
|
rlm@46
|
11674 }
|
rlm@46
|
11675 index = this.childNodes.length;
|
rlm@46
|
11676 if(index == 0){
|
rlm@46
|
11677 this.setFirstChild(node);
|
rlm@46
|
11678 }
|
rlm@46
|
11679 this.childNodes.push(node);
|
rlm@46
|
11680 node.parentNode = this;
|
rlm@46
|
11681 var ps = this.childNodes[index-1];
|
rlm@46
|
11682 if(ps){
|
rlm@46
|
11683 node.previousSibling = ps;
|
rlm@46
|
11684 ps.nextSibling = node;
|
rlm@46
|
11685 }else{
|
rlm@46
|
11686 node.previousSibling = null;
|
rlm@46
|
11687 }
|
rlm@46
|
11688 node.nextSibling = null;
|
rlm@46
|
11689 this.setLastChild(node);
|
rlm@46
|
11690 node.setOwnerTree(this.getOwnerTree());
|
rlm@46
|
11691 this.fireEvent("append", this.ownerTree, this, node, index);
|
rlm@46
|
11692 if(oldParent){
|
rlm@46
|
11693 node.fireEvent("move", this.ownerTree, node, oldParent, this, index);
|
rlm@46
|
11694 }
|
rlm@46
|
11695 return node;
|
rlm@46
|
11696 }
|
rlm@46
|
11697 },
|
rlm@46
|
11698
|
rlm@46
|
11699
|
rlm@46
|
11700 removeChild : function(node){
|
rlm@46
|
11701 var index = this.childNodes.indexOf(node);
|
rlm@46
|
11702 if(index == -1){
|
rlm@46
|
11703 return false;
|
rlm@46
|
11704 }
|
rlm@46
|
11705 if(this.fireEvent("beforeremove", this.ownerTree, this, node) === false){
|
rlm@46
|
11706 return false;
|
rlm@46
|
11707 }
|
rlm@46
|
11708
|
rlm@46
|
11709
|
rlm@46
|
11710 this.childNodes.splice(index, 1);
|
rlm@46
|
11711
|
rlm@46
|
11712
|
rlm@46
|
11713 if(node.previousSibling){
|
rlm@46
|
11714 node.previousSibling.nextSibling = node.nextSibling;
|
rlm@46
|
11715 }
|
rlm@46
|
11716 if(node.nextSibling){
|
rlm@46
|
11717 node.nextSibling.previousSibling = node.previousSibling;
|
rlm@46
|
11718 }
|
rlm@46
|
11719
|
rlm@46
|
11720
|
rlm@46
|
11721 if(this.firstChild == node){
|
rlm@46
|
11722 this.setFirstChild(node.nextSibling);
|
rlm@46
|
11723 }
|
rlm@46
|
11724 if(this.lastChild == node){
|
rlm@46
|
11725 this.setLastChild(node.previousSibling);
|
rlm@46
|
11726 }
|
rlm@46
|
11727
|
rlm@46
|
11728 node.setOwnerTree(null);
|
rlm@46
|
11729
|
rlm@46
|
11730 node.parentNode = null;
|
rlm@46
|
11731 node.previousSibling = null;
|
rlm@46
|
11732 node.nextSibling = null;
|
rlm@46
|
11733 this.fireEvent("remove", this.ownerTree, this, node);
|
rlm@46
|
11734 return node;
|
rlm@46
|
11735 },
|
rlm@46
|
11736
|
rlm@46
|
11737
|
rlm@46
|
11738 insertBefore : function(node, refNode){
|
rlm@46
|
11739 if(!refNode){
|
rlm@46
|
11740 return this.appendChild(node);
|
rlm@46
|
11741 }
|
rlm@46
|
11742
|
rlm@46
|
11743 if(node == refNode){
|
rlm@46
|
11744 return false;
|
rlm@46
|
11745 }
|
rlm@46
|
11746
|
rlm@46
|
11747 if(this.fireEvent("beforeinsert", this.ownerTree, this, node, refNode) === false){
|
rlm@46
|
11748 return false;
|
rlm@46
|
11749 }
|
rlm@46
|
11750 var index = this.childNodes.indexOf(refNode);
|
rlm@46
|
11751 var oldParent = node.parentNode;
|
rlm@46
|
11752 var refIndex = index;
|
rlm@46
|
11753
|
rlm@46
|
11754
|
rlm@46
|
11755 if(oldParent == this && this.childNodes.indexOf(node) < index){
|
rlm@46
|
11756 refIndex--;
|
rlm@46
|
11757 }
|
rlm@46
|
11758
|
rlm@46
|
11759
|
rlm@46
|
11760 if(oldParent){
|
rlm@46
|
11761 if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index, refNode) === false){
|
rlm@46
|
11762 return false;
|
rlm@46
|
11763 }
|
rlm@46
|
11764 oldParent.removeChild(node);
|
rlm@46
|
11765 }
|
rlm@46
|
11766 if(refIndex == 0){
|
rlm@46
|
11767 this.setFirstChild(node);
|
rlm@46
|
11768 }
|
rlm@46
|
11769 this.childNodes.splice(refIndex, 0, node);
|
rlm@46
|
11770 node.parentNode = this;
|
rlm@46
|
11771 var ps = this.childNodes[refIndex-1];
|
rlm@46
|
11772 if(ps){
|
rlm@46
|
11773 node.previousSibling = ps;
|
rlm@46
|
11774 ps.nextSibling = node;
|
rlm@46
|
11775 }else{
|
rlm@46
|
11776 node.previousSibling = null;
|
rlm@46
|
11777 }
|
rlm@46
|
11778 node.nextSibling = refNode;
|
rlm@46
|
11779 refNode.previousSibling = node;
|
rlm@46
|
11780 node.setOwnerTree(this.getOwnerTree());
|
rlm@46
|
11781 this.fireEvent("insert", this.ownerTree, this, node, refNode);
|
rlm@46
|
11782 if(oldParent){
|
rlm@46
|
11783 node.fireEvent("move", this.ownerTree, node, oldParent, this, refIndex, refNode);
|
rlm@46
|
11784 }
|
rlm@46
|
11785 return node;
|
rlm@46
|
11786 },
|
rlm@46
|
11787
|
rlm@46
|
11788
|
rlm@46
|
11789 remove : function(){
|
rlm@46
|
11790 this.parentNode.removeChild(this);
|
rlm@46
|
11791 return this;
|
rlm@46
|
11792 },
|
rlm@46
|
11793
|
rlm@46
|
11794
|
rlm@46
|
11795 item : function(index){
|
rlm@46
|
11796 return this.childNodes[index];
|
rlm@46
|
11797 },
|
rlm@46
|
11798
|
rlm@46
|
11799
|
rlm@46
|
11800 replaceChild : function(newChild, oldChild){
|
rlm@46
|
11801 this.insertBefore(newChild, oldChild);
|
rlm@46
|
11802 this.removeChild(oldChild);
|
rlm@46
|
11803 return oldChild;
|
rlm@46
|
11804 },
|
rlm@46
|
11805
|
rlm@46
|
11806
|
rlm@46
|
11807 indexOf : function(child){
|
rlm@46
|
11808 return this.childNodes.indexOf(child);
|
rlm@46
|
11809 },
|
rlm@46
|
11810
|
rlm@46
|
11811
|
rlm@46
|
11812 getOwnerTree : function(){
|
rlm@46
|
11813
|
rlm@46
|
11814 if(!this.ownerTree){
|
rlm@46
|
11815 var p = this;
|
rlm@46
|
11816 while(p){
|
rlm@46
|
11817 if(p.ownerTree){
|
rlm@46
|
11818 this.ownerTree = p.ownerTree;
|
rlm@46
|
11819 break;
|
rlm@46
|
11820 }
|
rlm@46
|
11821 p = p.parentNode;
|
rlm@46
|
11822 }
|
rlm@46
|
11823 }
|
rlm@46
|
11824 return this.ownerTree;
|
rlm@46
|
11825 },
|
rlm@46
|
11826
|
rlm@46
|
11827
|
rlm@46
|
11828 getDepth : function(){
|
rlm@46
|
11829 var depth = 0;
|
rlm@46
|
11830 var p = this;
|
rlm@46
|
11831 while(p.parentNode){
|
rlm@46
|
11832 ++depth;
|
rlm@46
|
11833 p = p.parentNode;
|
rlm@46
|
11834 }
|
rlm@46
|
11835 return depth;
|
rlm@46
|
11836 },
|
rlm@46
|
11837
|
rlm@46
|
11838
|
rlm@46
|
11839 setOwnerTree : function(tree){
|
rlm@46
|
11840
|
rlm@46
|
11841 if(tree != this.ownerTree){
|
rlm@46
|
11842 if(this.ownerTree){
|
rlm@46
|
11843 this.ownerTree.unregisterNode(this);
|
rlm@46
|
11844 }
|
rlm@46
|
11845 this.ownerTree = tree;
|
rlm@46
|
11846 var cs = this.childNodes;
|
rlm@46
|
11847 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
11848 cs[i].setOwnerTree(tree);
|
rlm@46
|
11849 }
|
rlm@46
|
11850 if(tree){
|
rlm@46
|
11851 tree.registerNode(this);
|
rlm@46
|
11852 }
|
rlm@46
|
11853 }
|
rlm@46
|
11854 },
|
rlm@46
|
11855
|
rlm@46
|
11856
|
rlm@46
|
11857 getPath : function(attr){
|
rlm@46
|
11858 attr = attr || "id";
|
rlm@46
|
11859 var p = this.parentNode;
|
rlm@46
|
11860 var b = [this.attributes[attr]];
|
rlm@46
|
11861 while(p){
|
rlm@46
|
11862 b.unshift(p.attributes[attr]);
|
rlm@46
|
11863 p = p.parentNode;
|
rlm@46
|
11864 }
|
rlm@46
|
11865 var sep = this.getOwnerTree().pathSeparator;
|
rlm@46
|
11866 return sep + b.join(sep);
|
rlm@46
|
11867 },
|
rlm@46
|
11868
|
rlm@46
|
11869
|
rlm@46
|
11870 bubble : function(fn, scope, args){
|
rlm@46
|
11871 var p = this;
|
rlm@46
|
11872 while(p){
|
rlm@46
|
11873 if(fn.apply(scope || p, args || [p]) === false){
|
rlm@46
|
11874 break;
|
rlm@46
|
11875 }
|
rlm@46
|
11876 p = p.parentNode;
|
rlm@46
|
11877 }
|
rlm@46
|
11878 },
|
rlm@46
|
11879
|
rlm@46
|
11880
|
rlm@46
|
11881 cascade : function(fn, scope, args){
|
rlm@46
|
11882 if(fn.apply(scope || this, args || [this]) !== false){
|
rlm@46
|
11883 var cs = this.childNodes;
|
rlm@46
|
11884 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
11885 cs[i].cascade(fn, scope, args);
|
rlm@46
|
11886 }
|
rlm@46
|
11887 }
|
rlm@46
|
11888 },
|
rlm@46
|
11889
|
rlm@46
|
11890
|
rlm@46
|
11891 eachChild : function(fn, scope, args){
|
rlm@46
|
11892 var cs = this.childNodes;
|
rlm@46
|
11893 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
11894 if(fn.apply(scope || this, args || [cs[i]]) === false){
|
rlm@46
|
11895 break;
|
rlm@46
|
11896 }
|
rlm@46
|
11897 }
|
rlm@46
|
11898 },
|
rlm@46
|
11899
|
rlm@46
|
11900
|
rlm@46
|
11901 findChild : function(attribute, value){
|
rlm@46
|
11902 var cs = this.childNodes;
|
rlm@46
|
11903 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
11904 if(cs[i].attributes[attribute] == value){
|
rlm@46
|
11905 return cs[i];
|
rlm@46
|
11906 }
|
rlm@46
|
11907 }
|
rlm@46
|
11908 return null;
|
rlm@46
|
11909 },
|
rlm@46
|
11910
|
rlm@46
|
11911
|
rlm@46
|
11912 findChildBy : function(fn, scope){
|
rlm@46
|
11913 var cs = this.childNodes;
|
rlm@46
|
11914 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
11915 if(fn.call(scope||cs[i], cs[i]) === true){
|
rlm@46
|
11916 return cs[i];
|
rlm@46
|
11917 }
|
rlm@46
|
11918 }
|
rlm@46
|
11919 return null;
|
rlm@46
|
11920 },
|
rlm@46
|
11921
|
rlm@46
|
11922
|
rlm@46
|
11923 sort : function(fn, scope){
|
rlm@46
|
11924 var cs = this.childNodes;
|
rlm@46
|
11925 var len = cs.length;
|
rlm@46
|
11926 if(len > 0){
|
rlm@46
|
11927 var sortFn = scope ? function(){fn.apply(scope, arguments);} : fn;
|
rlm@46
|
11928 cs.sort(sortFn);
|
rlm@46
|
11929 for(var i = 0; i < len; i++){
|
rlm@46
|
11930 var n = cs[i];
|
rlm@46
|
11931 n.previousSibling = cs[i-1];
|
rlm@46
|
11932 n.nextSibling = cs[i+1];
|
rlm@46
|
11933 if(i == 0){
|
rlm@46
|
11934 this.setFirstChild(n);
|
rlm@46
|
11935 }
|
rlm@46
|
11936 if(i == len-1){
|
rlm@46
|
11937 this.setLastChild(n);
|
rlm@46
|
11938 }
|
rlm@46
|
11939 }
|
rlm@46
|
11940 }
|
rlm@46
|
11941 },
|
rlm@46
|
11942
|
rlm@46
|
11943
|
rlm@46
|
11944 contains : function(node){
|
rlm@46
|
11945 return node.isAncestor(this);
|
rlm@46
|
11946 },
|
rlm@46
|
11947
|
rlm@46
|
11948
|
rlm@46
|
11949 isAncestor : function(node){
|
rlm@46
|
11950 var p = this.parentNode;
|
rlm@46
|
11951 while(p){
|
rlm@46
|
11952 if(p == node){
|
rlm@46
|
11953 return true;
|
rlm@46
|
11954 }
|
rlm@46
|
11955 p = p.parentNode;
|
rlm@46
|
11956 }
|
rlm@46
|
11957 return false;
|
rlm@46
|
11958 },
|
rlm@46
|
11959
|
rlm@46
|
11960 toString : function(){
|
rlm@46
|
11961 return "[Node"+(this.id?" "+this.id:"")+"]";
|
rlm@46
|
11962 }
|
rlm@46
|
11963 });
|
rlm@46
|
11964
|
rlm@46
|
11965 Ext.data.GroupingStore = Ext.extend(Ext.data.Store, {
|
rlm@46
|
11966
|
rlm@46
|
11967
|
rlm@46
|
11968 remoteGroup : false,
|
rlm@46
|
11969
|
rlm@46
|
11970 groupOnSort:false,
|
rlm@46
|
11971
|
rlm@46
|
11972
|
rlm@46
|
11973 clearGrouping : function(){
|
rlm@46
|
11974 this.groupField = false;
|
rlm@46
|
11975 if(this.remoteGroup){
|
rlm@46
|
11976 if(this.baseParams){
|
rlm@46
|
11977 delete this.baseParams.groupBy;
|
rlm@46
|
11978 }
|
rlm@46
|
11979 this.reload();
|
rlm@46
|
11980 }else{
|
rlm@46
|
11981 this.applySort();
|
rlm@46
|
11982 this.fireEvent('datachanged', this);
|
rlm@46
|
11983 }
|
rlm@46
|
11984 },
|
rlm@46
|
11985
|
rlm@46
|
11986
|
rlm@46
|
11987 groupBy : function(field, forceRegroup){
|
rlm@46
|
11988 if(this.groupField == field && !forceRegroup){
|
rlm@46
|
11989 return;
|
rlm@46
|
11990 }
|
rlm@46
|
11991 this.groupField = field;
|
rlm@46
|
11992 if(this.remoteGroup){
|
rlm@46
|
11993 if(!this.baseParams){
|
rlm@46
|
11994 this.baseParams = {};
|
rlm@46
|
11995 }
|
rlm@46
|
11996 this.baseParams['groupBy'] = field;
|
rlm@46
|
11997 }
|
rlm@46
|
11998 if(this.groupOnSort){
|
rlm@46
|
11999 this.sort(field);
|
rlm@46
|
12000 return;
|
rlm@46
|
12001 }
|
rlm@46
|
12002 if(this.remoteGroup){
|
rlm@46
|
12003 this.reload();
|
rlm@46
|
12004 }else{
|
rlm@46
|
12005 var si = this.sortInfo || {};
|
rlm@46
|
12006 if(si.field != field){
|
rlm@46
|
12007 this.applySort();
|
rlm@46
|
12008 }else{
|
rlm@46
|
12009 this.sortData(field);
|
rlm@46
|
12010 }
|
rlm@46
|
12011 this.fireEvent('datachanged', this);
|
rlm@46
|
12012 }
|
rlm@46
|
12013 },
|
rlm@46
|
12014
|
rlm@46
|
12015
|
rlm@46
|
12016 applySort : function(){
|
rlm@46
|
12017 Ext.data.GroupingStore.superclass.applySort.call(this);
|
rlm@46
|
12018 if(!this.groupOnSort && !this.remoteGroup){
|
rlm@46
|
12019 var gs = this.getGroupState();
|
rlm@46
|
12020 if(gs && gs != this.sortInfo.field){
|
rlm@46
|
12021 this.sortData(this.groupField);
|
rlm@46
|
12022 }
|
rlm@46
|
12023 }
|
rlm@46
|
12024 },
|
rlm@46
|
12025
|
rlm@46
|
12026
|
rlm@46
|
12027 applyGrouping : function(alwaysFireChange){
|
rlm@46
|
12028 if(this.groupField !== false){
|
rlm@46
|
12029 this.groupBy(this.groupField, true);
|
rlm@46
|
12030 return true;
|
rlm@46
|
12031 }else{
|
rlm@46
|
12032 if(alwaysFireChange === true){
|
rlm@46
|
12033 this.fireEvent('datachanged', this);
|
rlm@46
|
12034 }
|
rlm@46
|
12035 return false;
|
rlm@46
|
12036 }
|
rlm@46
|
12037 },
|
rlm@46
|
12038
|
rlm@46
|
12039
|
rlm@46
|
12040 getGroupState : function(){
|
rlm@46
|
12041 return this.groupOnSort && this.groupField !== false ?
|
rlm@46
|
12042 (this.sortInfo ? this.sortInfo.field : undefined) : this.groupField;
|
rlm@46
|
12043 }
|
rlm@46
|
12044 });
|
rlm@46
|
12045
|
rlm@46
|
12046 Ext.ComponentMgr = function(){
|
rlm@46
|
12047 var all = new Ext.util.MixedCollection();
|
rlm@46
|
12048 var types = {};
|
rlm@46
|
12049
|
rlm@46
|
12050 return {
|
rlm@46
|
12051
|
rlm@46
|
12052 register : function(c){
|
rlm@46
|
12053 all.add(c);
|
rlm@46
|
12054 },
|
rlm@46
|
12055
|
rlm@46
|
12056
|
rlm@46
|
12057 unregister : function(c){
|
rlm@46
|
12058 all.remove(c);
|
rlm@46
|
12059 },
|
rlm@46
|
12060
|
rlm@46
|
12061
|
rlm@46
|
12062 get : function(id){
|
rlm@46
|
12063 return all.get(id);
|
rlm@46
|
12064 },
|
rlm@46
|
12065
|
rlm@46
|
12066
|
rlm@46
|
12067 onAvailable : function(id, fn, scope){
|
rlm@46
|
12068 all.on("add", function(index, o){
|
rlm@46
|
12069 if(o.id == id){
|
rlm@46
|
12070 fn.call(scope || o, o);
|
rlm@46
|
12071 all.un("add", fn, scope);
|
rlm@46
|
12072 }
|
rlm@46
|
12073 });
|
rlm@46
|
12074 },
|
rlm@46
|
12075
|
rlm@46
|
12076
|
rlm@46
|
12077 all : all,
|
rlm@46
|
12078
|
rlm@46
|
12079
|
rlm@46
|
12080 registerType : function(xtype, cls){
|
rlm@46
|
12081 types[xtype] = cls;
|
rlm@46
|
12082 cls.xtype = xtype;
|
rlm@46
|
12083 },
|
rlm@46
|
12084
|
rlm@46
|
12085 create : function(config, defaultType){
|
rlm@46
|
12086 return new types[config.xtype || defaultType](config);
|
rlm@46
|
12087 }
|
rlm@46
|
12088 };
|
rlm@46
|
12089 }();
|
rlm@46
|
12090
|
rlm@46
|
12091
|
rlm@46
|
12092 Ext.reg = Ext.ComponentMgr.registerType; // this will be called a lot internally, shorthand to keep the bytes down
|
rlm@46
|
12093
|
rlm@46
|
12094 Ext.Component = function(config){
|
rlm@46
|
12095 config = config || {};
|
rlm@46
|
12096 if(config.initialConfig){
|
rlm@46
|
12097 if(config.isAction){ this.baseAction = config;
|
rlm@46
|
12098 }
|
rlm@46
|
12099 config = config.initialConfig; }else if(config.tagName || config.dom || typeof config == "string"){ config = {applyTo: config, id: config.id || config};
|
rlm@46
|
12100 }
|
rlm@46
|
12101
|
rlm@46
|
12102
|
rlm@46
|
12103 this.initialConfig = config;
|
rlm@46
|
12104
|
rlm@46
|
12105 Ext.apply(this, config);
|
rlm@46
|
12106 this.addEvents(
|
rlm@46
|
12107
|
rlm@46
|
12108 'disable',
|
rlm@46
|
12109
|
rlm@46
|
12110 'enable',
|
rlm@46
|
12111
|
rlm@46
|
12112 'beforeshow',
|
rlm@46
|
12113
|
rlm@46
|
12114 'show',
|
rlm@46
|
12115
|
rlm@46
|
12116 'beforehide',
|
rlm@46
|
12117
|
rlm@46
|
12118 'hide',
|
rlm@46
|
12119
|
rlm@46
|
12120 'beforerender',
|
rlm@46
|
12121
|
rlm@46
|
12122 'render',
|
rlm@46
|
12123
|
rlm@46
|
12124 'beforedestroy',
|
rlm@46
|
12125
|
rlm@46
|
12126 'destroy',
|
rlm@46
|
12127
|
rlm@46
|
12128 'beforestaterestore',
|
rlm@46
|
12129
|
rlm@46
|
12130 'staterestore',
|
rlm@46
|
12131
|
rlm@46
|
12132 'beforestatesave',
|
rlm@46
|
12133
|
rlm@46
|
12134 'statesave'
|
rlm@46
|
12135 );
|
rlm@46
|
12136 this.getId();
|
rlm@46
|
12137 Ext.ComponentMgr.register(this);
|
rlm@46
|
12138 Ext.Component.superclass.constructor.call(this);
|
rlm@46
|
12139
|
rlm@46
|
12140 if(this.baseAction){
|
rlm@46
|
12141 this.baseAction.addComponent(this);
|
rlm@46
|
12142 }
|
rlm@46
|
12143
|
rlm@46
|
12144 this.initComponent();
|
rlm@46
|
12145
|
rlm@46
|
12146 if(this.plugins){
|
rlm@46
|
12147 if(Ext.isArray(this.plugins)){
|
rlm@46
|
12148 for(var i = 0, len = this.plugins.length; i < len; i++){
|
rlm@46
|
12149 this.plugins[i].init(this);
|
rlm@46
|
12150 }
|
rlm@46
|
12151 }else{
|
rlm@46
|
12152 this.plugins.init(this);
|
rlm@46
|
12153 }
|
rlm@46
|
12154 }
|
rlm@46
|
12155
|
rlm@46
|
12156 if(this.stateful !== false){
|
rlm@46
|
12157 this.initState(config);
|
rlm@46
|
12158 }
|
rlm@46
|
12159
|
rlm@46
|
12160 if(this.applyTo){
|
rlm@46
|
12161 this.applyToMarkup(this.applyTo);
|
rlm@46
|
12162 delete this.applyTo;
|
rlm@46
|
12163 }else if(this.renderTo){
|
rlm@46
|
12164 this.render(this.renderTo);
|
rlm@46
|
12165 delete this.renderTo;
|
rlm@46
|
12166 }
|
rlm@46
|
12167 };
|
rlm@46
|
12168
|
rlm@46
|
12169 Ext.Component.AUTO_ID = 1000;
|
rlm@46
|
12170
|
rlm@46
|
12171 Ext.extend(Ext.Component, Ext.util.Observable, {
|
rlm@46
|
12172
|
rlm@46
|
12173
|
rlm@46
|
12174
|
rlm@46
|
12175
|
rlm@46
|
12176
|
rlm@46
|
12177
|
rlm@46
|
12178
|
rlm@46
|
12179
|
rlm@46
|
12180
|
rlm@46
|
12181
|
rlm@46
|
12182
|
rlm@46
|
12183
|
rlm@46
|
12184
|
rlm@46
|
12185
|
rlm@46
|
12186
|
rlm@46
|
12187
|
rlm@46
|
12188 disabledClass : "x-item-disabled",
|
rlm@46
|
12189
|
rlm@46
|
12190 allowDomMove : true,
|
rlm@46
|
12191
|
rlm@46
|
12192 autoShow : false,
|
rlm@46
|
12193
|
rlm@46
|
12194 hideMode: 'display',
|
rlm@46
|
12195
|
rlm@46
|
12196 hideParent: false,
|
rlm@46
|
12197
|
rlm@46
|
12198
|
rlm@46
|
12199
|
rlm@46
|
12200 hidden : false,
|
rlm@46
|
12201
|
rlm@46
|
12202 disabled : false,
|
rlm@46
|
12203
|
rlm@46
|
12204 rendered : false,
|
rlm@46
|
12205
|
rlm@46
|
12206 ctype : "Ext.Component",
|
rlm@46
|
12207
|
rlm@46
|
12208 actionMode : "el",
|
rlm@46
|
12209
|
rlm@46
|
12210 getActionEl : function(){
|
rlm@46
|
12211 return this[this.actionMode];
|
rlm@46
|
12212 },
|
rlm@46
|
12213
|
rlm@46
|
12214
|
rlm@46
|
12215 initComponent : Ext.emptyFn,
|
rlm@46
|
12216
|
rlm@46
|
12217
|
rlm@46
|
12218 render : function(container, position){
|
rlm@46
|
12219 if(!this.rendered && this.fireEvent("beforerender", this) !== false){
|
rlm@46
|
12220 if(!container && this.el){
|
rlm@46
|
12221 this.el = Ext.get(this.el);
|
rlm@46
|
12222 container = this.el.dom.parentNode;
|
rlm@46
|
12223 this.allowDomMove = false;
|
rlm@46
|
12224 }
|
rlm@46
|
12225 this.container = Ext.get(container);
|
rlm@46
|
12226 if(this.ctCls){
|
rlm@46
|
12227 this.container.addClass(this.ctCls);
|
rlm@46
|
12228 }
|
rlm@46
|
12229 this.rendered = true;
|
rlm@46
|
12230 if(position !== undefined){
|
rlm@46
|
12231 if(typeof position == 'number'){
|
rlm@46
|
12232 position = this.container.dom.childNodes[position];
|
rlm@46
|
12233 }else{
|
rlm@46
|
12234 position = Ext.getDom(position);
|
rlm@46
|
12235 }
|
rlm@46
|
12236 }
|
rlm@46
|
12237 this.onRender(this.container, position || null);
|
rlm@46
|
12238 if(this.autoShow){
|
rlm@46
|
12239 this.el.removeClass(['x-hidden','x-hide-' + this.hideMode]);
|
rlm@46
|
12240 }
|
rlm@46
|
12241 if(this.cls){
|
rlm@46
|
12242 this.el.addClass(this.cls);
|
rlm@46
|
12243 delete this.cls;
|
rlm@46
|
12244 }
|
rlm@46
|
12245 if(this.style){
|
rlm@46
|
12246 this.el.applyStyles(this.style);
|
rlm@46
|
12247 delete this.style;
|
rlm@46
|
12248 }
|
rlm@46
|
12249 this.fireEvent("render", this);
|
rlm@46
|
12250 this.afterRender(this.container);
|
rlm@46
|
12251 if(this.hidden){
|
rlm@46
|
12252 this.hide();
|
rlm@46
|
12253 }
|
rlm@46
|
12254 if(this.disabled){
|
rlm@46
|
12255 this.disable();
|
rlm@46
|
12256 }
|
rlm@46
|
12257
|
rlm@46
|
12258 this.initStateEvents();
|
rlm@46
|
12259 }
|
rlm@46
|
12260 return this;
|
rlm@46
|
12261 },
|
rlm@46
|
12262
|
rlm@46
|
12263 initState : function(config){
|
rlm@46
|
12264 if(Ext.state.Manager){
|
rlm@46
|
12265 var state = Ext.state.Manager.get(this.stateId || this.id);
|
rlm@46
|
12266 if(state){
|
rlm@46
|
12267 if(this.fireEvent('beforestaterestore', this, state) !== false){
|
rlm@46
|
12268 this.applyState(state);
|
rlm@46
|
12269 this.fireEvent('staterestore', this, state);
|
rlm@46
|
12270 }
|
rlm@46
|
12271 }
|
rlm@46
|
12272 }
|
rlm@46
|
12273 },
|
rlm@46
|
12274
|
rlm@46
|
12275 initStateEvents : function(){
|
rlm@46
|
12276 if(this.stateEvents){
|
rlm@46
|
12277 for(var i = 0, e; e = this.stateEvents[i]; i++){
|
rlm@46
|
12278 this.on(e, this.saveState, this, {delay:100});
|
rlm@46
|
12279 }
|
rlm@46
|
12280 }
|
rlm@46
|
12281 },
|
rlm@46
|
12282
|
rlm@46
|
12283 applyState : function(state, config){
|
rlm@46
|
12284 if(state){
|
rlm@46
|
12285 Ext.apply(this, state);
|
rlm@46
|
12286 }
|
rlm@46
|
12287 },
|
rlm@46
|
12288
|
rlm@46
|
12289 getState : function(){
|
rlm@46
|
12290 return null;
|
rlm@46
|
12291 },
|
rlm@46
|
12292
|
rlm@46
|
12293 saveState : function(){
|
rlm@46
|
12294 if(Ext.state.Manager){
|
rlm@46
|
12295 var state = this.getState();
|
rlm@46
|
12296 if(this.fireEvent('beforestatesave', this, state) !== false){
|
rlm@46
|
12297 Ext.state.Manager.set(this.stateId || this.id, state);
|
rlm@46
|
12298 this.fireEvent('statesave', this, state);
|
rlm@46
|
12299 }
|
rlm@46
|
12300 }
|
rlm@46
|
12301 },
|
rlm@46
|
12302
|
rlm@46
|
12303
|
rlm@46
|
12304 applyToMarkup : function(el){
|
rlm@46
|
12305 this.allowDomMove = false;
|
rlm@46
|
12306 this.el = Ext.get(el);
|
rlm@46
|
12307 this.render(this.el.dom.parentNode);
|
rlm@46
|
12308 },
|
rlm@46
|
12309
|
rlm@46
|
12310
|
rlm@46
|
12311 addClass : function(cls){
|
rlm@46
|
12312 if(this.el){
|
rlm@46
|
12313 this.el.addClass(cls);
|
rlm@46
|
12314 }else{
|
rlm@46
|
12315 this.cls = this.cls ? this.cls + ' ' + cls : cls;
|
rlm@46
|
12316 }
|
rlm@46
|
12317 },
|
rlm@46
|
12318
|
rlm@46
|
12319
|
rlm@46
|
12320 removeClass : function(cls){
|
rlm@46
|
12321 if(this.el){
|
rlm@46
|
12322 this.el.removeClass(cls);
|
rlm@46
|
12323 }else if(this.cls){
|
rlm@46
|
12324 this.cls = this.cls.split(' ').remove(cls).join(' ');
|
rlm@46
|
12325 }
|
rlm@46
|
12326 },
|
rlm@46
|
12327
|
rlm@46
|
12328 onRender : function(ct, position){
|
rlm@46
|
12329 if(this.autoEl){
|
rlm@46
|
12330 if(typeof this.autoEl == 'string'){
|
rlm@46
|
12331 this.el = document.createElement(this.autoEl);
|
rlm@46
|
12332 }else{
|
rlm@46
|
12333 var div = document.createElement('div');
|
rlm@46
|
12334 Ext.DomHelper.overwrite(div, this.autoEl);
|
rlm@46
|
12335 this.el = div.firstChild;
|
rlm@46
|
12336 }
|
rlm@46
|
12337 if (!this.el.id) {
|
rlm@46
|
12338 this.el.id = this.getId();
|
rlm@46
|
12339 }
|
rlm@46
|
12340 }
|
rlm@46
|
12341 if(this.el){
|
rlm@46
|
12342 this.el = Ext.get(this.el);
|
rlm@46
|
12343 if(this.allowDomMove !== false){
|
rlm@46
|
12344 ct.dom.insertBefore(this.el.dom, position);
|
rlm@46
|
12345 }
|
rlm@46
|
12346 if(this.overCls) {
|
rlm@46
|
12347 this.el.addClassOnOver(this.overCls);
|
rlm@46
|
12348 }
|
rlm@46
|
12349 }
|
rlm@46
|
12350 },
|
rlm@46
|
12351
|
rlm@46
|
12352 getAutoCreate : function(){
|
rlm@46
|
12353 var cfg = typeof this.autoCreate == "object" ?
|
rlm@46
|
12354 this.autoCreate : Ext.apply({}, this.defaultAutoCreate);
|
rlm@46
|
12355 if(this.id && !cfg.id){
|
rlm@46
|
12356 cfg.id = this.id;
|
rlm@46
|
12357 }
|
rlm@46
|
12358 return cfg;
|
rlm@46
|
12359 },
|
rlm@46
|
12360
|
rlm@46
|
12361 afterRender : Ext.emptyFn,
|
rlm@46
|
12362
|
rlm@46
|
12363
|
rlm@46
|
12364 destroy : function(){
|
rlm@46
|
12365 if(this.fireEvent("beforedestroy", this) !== false){
|
rlm@46
|
12366 this.beforeDestroy();
|
rlm@46
|
12367 if(this.rendered){
|
rlm@46
|
12368 this.el.removeAllListeners();
|
rlm@46
|
12369 this.el.remove();
|
rlm@46
|
12370 if(this.actionMode == "container"){
|
rlm@46
|
12371 this.container.remove();
|
rlm@46
|
12372 }
|
rlm@46
|
12373 }
|
rlm@46
|
12374 this.onDestroy();
|
rlm@46
|
12375 Ext.ComponentMgr.unregister(this);
|
rlm@46
|
12376 this.fireEvent("destroy", this);
|
rlm@46
|
12377 this.purgeListeners();
|
rlm@46
|
12378 }
|
rlm@46
|
12379 },
|
rlm@46
|
12380
|
rlm@46
|
12381 beforeDestroy : Ext.emptyFn,
|
rlm@46
|
12382
|
rlm@46
|
12383 onDestroy : Ext.emptyFn,
|
rlm@46
|
12384
|
rlm@46
|
12385
|
rlm@46
|
12386 getEl : function(){
|
rlm@46
|
12387 return this.el;
|
rlm@46
|
12388 },
|
rlm@46
|
12389
|
rlm@46
|
12390
|
rlm@46
|
12391 getId : function(){
|
rlm@46
|
12392 return this.id || (this.id = "ext-comp-" + (++Ext.Component.AUTO_ID));
|
rlm@46
|
12393 },
|
rlm@46
|
12394
|
rlm@46
|
12395
|
rlm@46
|
12396 getItemId : function(){
|
rlm@46
|
12397 return this.itemId || this.getId();
|
rlm@46
|
12398 },
|
rlm@46
|
12399
|
rlm@46
|
12400
|
rlm@46
|
12401 focus : function(selectText, delay){
|
rlm@46
|
12402 if(delay){
|
rlm@46
|
12403 this.focus.defer(typeof delay == 'number' ? delay : 10, this, [selectText, false]);
|
rlm@46
|
12404 return;
|
rlm@46
|
12405 }
|
rlm@46
|
12406 if(this.rendered){
|
rlm@46
|
12407 this.el.focus();
|
rlm@46
|
12408 if(selectText === true){
|
rlm@46
|
12409 this.el.dom.select();
|
rlm@46
|
12410 }
|
rlm@46
|
12411 }
|
rlm@46
|
12412 return this;
|
rlm@46
|
12413 },
|
rlm@46
|
12414
|
rlm@46
|
12415 blur : function(){
|
rlm@46
|
12416 if(this.rendered){
|
rlm@46
|
12417 this.el.blur();
|
rlm@46
|
12418 }
|
rlm@46
|
12419 return this;
|
rlm@46
|
12420 },
|
rlm@46
|
12421
|
rlm@46
|
12422
|
rlm@46
|
12423 disable : function(){
|
rlm@46
|
12424 if(this.rendered){
|
rlm@46
|
12425 this.onDisable();
|
rlm@46
|
12426 }
|
rlm@46
|
12427 this.disabled = true;
|
rlm@46
|
12428 this.fireEvent("disable", this);
|
rlm@46
|
12429 return this;
|
rlm@46
|
12430 },
|
rlm@46
|
12431
|
rlm@46
|
12432 onDisable : function(){
|
rlm@46
|
12433 this.getActionEl().addClass(this.disabledClass);
|
rlm@46
|
12434 this.el.dom.disabled = true;
|
rlm@46
|
12435 },
|
rlm@46
|
12436
|
rlm@46
|
12437
|
rlm@46
|
12438 enable : function(){
|
rlm@46
|
12439 if(this.rendered){
|
rlm@46
|
12440 this.onEnable();
|
rlm@46
|
12441 }
|
rlm@46
|
12442 this.disabled = false;
|
rlm@46
|
12443 this.fireEvent("enable", this);
|
rlm@46
|
12444 return this;
|
rlm@46
|
12445 },
|
rlm@46
|
12446
|
rlm@46
|
12447 onEnable : function(){
|
rlm@46
|
12448 this.getActionEl().removeClass(this.disabledClass);
|
rlm@46
|
12449 this.el.dom.disabled = false;
|
rlm@46
|
12450 },
|
rlm@46
|
12451
|
rlm@46
|
12452
|
rlm@46
|
12453 setDisabled : function(disabled){
|
rlm@46
|
12454 this[disabled ? "disable" : "enable"]();
|
rlm@46
|
12455 },
|
rlm@46
|
12456
|
rlm@46
|
12457
|
rlm@46
|
12458 show: function(){
|
rlm@46
|
12459 if(this.fireEvent("beforeshow", this) !== false){
|
rlm@46
|
12460 this.hidden = false;
|
rlm@46
|
12461 if(this.autoRender){
|
rlm@46
|
12462 this.render(typeof this.autoRender == 'boolean' ? Ext.getBody() : this.autoRender);
|
rlm@46
|
12463 }
|
rlm@46
|
12464 if(this.rendered){
|
rlm@46
|
12465 this.onShow();
|
rlm@46
|
12466 }
|
rlm@46
|
12467 this.fireEvent("show", this);
|
rlm@46
|
12468 }
|
rlm@46
|
12469 return this;
|
rlm@46
|
12470 },
|
rlm@46
|
12471
|
rlm@46
|
12472 onShow : function(){
|
rlm@46
|
12473 if(this.hideParent){
|
rlm@46
|
12474 this.container.removeClass('x-hide-' + this.hideMode);
|
rlm@46
|
12475 }else{
|
rlm@46
|
12476 this.getActionEl().removeClass('x-hide-' + this.hideMode);
|
rlm@46
|
12477 }
|
rlm@46
|
12478
|
rlm@46
|
12479 },
|
rlm@46
|
12480
|
rlm@46
|
12481
|
rlm@46
|
12482 hide: function(){
|
rlm@46
|
12483 if(this.fireEvent("beforehide", this) !== false){
|
rlm@46
|
12484 this.hidden = true;
|
rlm@46
|
12485 if(this.rendered){
|
rlm@46
|
12486 this.onHide();
|
rlm@46
|
12487 }
|
rlm@46
|
12488 this.fireEvent("hide", this);
|
rlm@46
|
12489 }
|
rlm@46
|
12490 return this;
|
rlm@46
|
12491 },
|
rlm@46
|
12492
|
rlm@46
|
12493 onHide : function(){
|
rlm@46
|
12494 if(this.hideParent){
|
rlm@46
|
12495 this.container.addClass('x-hide-' + this.hideMode);
|
rlm@46
|
12496 }else{
|
rlm@46
|
12497 this.getActionEl().addClass('x-hide-' + this.hideMode);
|
rlm@46
|
12498 }
|
rlm@46
|
12499 },
|
rlm@46
|
12500
|
rlm@46
|
12501
|
rlm@46
|
12502 setVisible: function(visible){
|
rlm@46
|
12503 if(visible) {
|
rlm@46
|
12504 this.show();
|
rlm@46
|
12505 }else{
|
rlm@46
|
12506 this.hide();
|
rlm@46
|
12507 }
|
rlm@46
|
12508 return this;
|
rlm@46
|
12509 },
|
rlm@46
|
12510
|
rlm@46
|
12511
|
rlm@46
|
12512 isVisible : function(){
|
rlm@46
|
12513 return this.rendered && this.getActionEl().isVisible();
|
rlm@46
|
12514 },
|
rlm@46
|
12515
|
rlm@46
|
12516
|
rlm@46
|
12517 cloneConfig : function(overrides){
|
rlm@46
|
12518 overrides = overrides || {};
|
rlm@46
|
12519 var id = overrides.id || Ext.id();
|
rlm@46
|
12520 var cfg = Ext.applyIf(overrides, this.initialConfig);
|
rlm@46
|
12521 cfg.id = id; return new this.constructor(cfg);
|
rlm@46
|
12522 },
|
rlm@46
|
12523
|
rlm@46
|
12524
|
rlm@46
|
12525 getXType : function(){
|
rlm@46
|
12526 return this.constructor.xtype;
|
rlm@46
|
12527 },
|
rlm@46
|
12528
|
rlm@46
|
12529
|
rlm@46
|
12530 isXType : function(xtype, shallow){
|
rlm@46
|
12531 return !shallow ?
|
rlm@46
|
12532 ('/' + this.getXTypes() + '/').indexOf('/' + xtype + '/') != -1 :
|
rlm@46
|
12533 this.constructor.xtype == xtype;
|
rlm@46
|
12534 },
|
rlm@46
|
12535
|
rlm@46
|
12536
|
rlm@46
|
12537 getXTypes : function(){
|
rlm@46
|
12538 var tc = this.constructor;
|
rlm@46
|
12539 if(!tc.xtypes){
|
rlm@46
|
12540 var c = [], sc = this;
|
rlm@46
|
12541 while(sc && sc.constructor.xtype){
|
rlm@46
|
12542 c.unshift(sc.constructor.xtype);
|
rlm@46
|
12543 sc = sc.constructor.superclass;
|
rlm@46
|
12544 }
|
rlm@46
|
12545 tc.xtypeChain = c;
|
rlm@46
|
12546 tc.xtypes = c.join('/');
|
rlm@46
|
12547 }
|
rlm@46
|
12548 return tc.xtypes;
|
rlm@46
|
12549 },
|
rlm@46
|
12550
|
rlm@46
|
12551
|
rlm@46
|
12552 findParentBy: function(fn) {
|
rlm@46
|
12553 for (var p = this.ownerCt; (p != null) && !fn(p, this); p = p.ownerCt);
|
rlm@46
|
12554 return p || null;
|
rlm@46
|
12555 },
|
rlm@46
|
12556
|
rlm@46
|
12557
|
rlm@46
|
12558 findParentByType: function(xtype) {
|
rlm@46
|
12559 return typeof xtype == 'function' ?
|
rlm@46
|
12560 this.findParentBy(function(p){
|
rlm@46
|
12561 return p.constructor === xtype;
|
rlm@46
|
12562 }) :
|
rlm@46
|
12563 this.findParentBy(function(p){
|
rlm@46
|
12564 return p.constructor.xtype === xtype;
|
rlm@46
|
12565 });
|
rlm@46
|
12566 },
|
rlm@46
|
12567
|
rlm@46
|
12568 mon : function(item, ename, fn, scope, opt){
|
rlm@46
|
12569 if(!this.mons){
|
rlm@46
|
12570 this.mons = [];
|
rlm@46
|
12571 this.on('beforedestroy', function(){
|
rlm@46
|
12572 for(var i= 0, len = this.mons.length; i < len; i++){
|
rlm@46
|
12573 var m = this.mons[i];
|
rlm@46
|
12574 m.item.un(m.ename, m.fn, m.scope);
|
rlm@46
|
12575 }
|
rlm@46
|
12576 }, this);
|
rlm@46
|
12577 }
|
rlm@46
|
12578 this.mons.push({
|
rlm@46
|
12579 item: item, ename: ename, fn: fn, scope: scope
|
rlm@46
|
12580 });
|
rlm@46
|
12581 item.on(ename, fn, scope, opt);
|
rlm@46
|
12582 }
|
rlm@46
|
12583 });
|
rlm@46
|
12584
|
rlm@46
|
12585 Ext.reg('component', Ext.Component);
|
rlm@46
|
12586
|
rlm@46
|
12587
|
rlm@46
|
12588 Ext.Action = function(config){
|
rlm@46
|
12589 this.initialConfig = config;
|
rlm@46
|
12590 this.items = [];
|
rlm@46
|
12591 }
|
rlm@46
|
12592
|
rlm@46
|
12593 Ext.Action.prototype = {
|
rlm@46
|
12594
|
rlm@46
|
12595
|
rlm@46
|
12596
|
rlm@46
|
12597
|
rlm@46
|
12598
|
rlm@46
|
12599
|
rlm@46
|
12600
|
rlm@46
|
12601
|
rlm@46
|
12602 isAction : true,
|
rlm@46
|
12603
|
rlm@46
|
12604
|
rlm@46
|
12605 setText : function(text){
|
rlm@46
|
12606 this.initialConfig.text = text;
|
rlm@46
|
12607 this.callEach('setText', [text]);
|
rlm@46
|
12608 },
|
rlm@46
|
12609
|
rlm@46
|
12610
|
rlm@46
|
12611 getText : function(){
|
rlm@46
|
12612 return this.initialConfig.text;
|
rlm@46
|
12613 },
|
rlm@46
|
12614
|
rlm@46
|
12615
|
rlm@46
|
12616 setIconClass : function(cls){
|
rlm@46
|
12617 this.initialConfig.iconCls = cls;
|
rlm@46
|
12618 this.callEach('setIconClass', [cls]);
|
rlm@46
|
12619 },
|
rlm@46
|
12620
|
rlm@46
|
12621
|
rlm@46
|
12622 getIconClass : function(){
|
rlm@46
|
12623 return this.initialConfig.iconCls;
|
rlm@46
|
12624 },
|
rlm@46
|
12625
|
rlm@46
|
12626
|
rlm@46
|
12627 setDisabled : function(v){
|
rlm@46
|
12628 this.initialConfig.disabled = v;
|
rlm@46
|
12629 this.callEach('setDisabled', [v]);
|
rlm@46
|
12630 },
|
rlm@46
|
12631
|
rlm@46
|
12632
|
rlm@46
|
12633 enable : function(){
|
rlm@46
|
12634 this.setDisabled(false);
|
rlm@46
|
12635 },
|
rlm@46
|
12636
|
rlm@46
|
12637
|
rlm@46
|
12638 disable : function(){
|
rlm@46
|
12639 this.setDisabled(true);
|
rlm@46
|
12640 },
|
rlm@46
|
12641
|
rlm@46
|
12642
|
rlm@46
|
12643 isDisabled : function(){
|
rlm@46
|
12644 return this.initialConfig.disabled;
|
rlm@46
|
12645 },
|
rlm@46
|
12646
|
rlm@46
|
12647
|
rlm@46
|
12648 setHidden : function(v){
|
rlm@46
|
12649 this.initialConfig.hidden = v;
|
rlm@46
|
12650 this.callEach('setVisible', [!v]);
|
rlm@46
|
12651 },
|
rlm@46
|
12652
|
rlm@46
|
12653
|
rlm@46
|
12654 show : function(){
|
rlm@46
|
12655 this.setHidden(false);
|
rlm@46
|
12656 },
|
rlm@46
|
12657
|
rlm@46
|
12658
|
rlm@46
|
12659 hide : function(){
|
rlm@46
|
12660 this.setHidden(true);
|
rlm@46
|
12661 },
|
rlm@46
|
12662
|
rlm@46
|
12663
|
rlm@46
|
12664 isHidden : function(){
|
rlm@46
|
12665 return this.initialConfig.hidden;
|
rlm@46
|
12666 },
|
rlm@46
|
12667
|
rlm@46
|
12668
|
rlm@46
|
12669 setHandler : function(fn, scope){
|
rlm@46
|
12670 this.initialConfig.handler = fn;
|
rlm@46
|
12671 this.initialConfig.scope = scope;
|
rlm@46
|
12672 this.callEach('setHandler', [fn, scope]);
|
rlm@46
|
12673 },
|
rlm@46
|
12674
|
rlm@46
|
12675
|
rlm@46
|
12676 each : function(fn, scope){
|
rlm@46
|
12677 Ext.each(this.items, fn, scope);
|
rlm@46
|
12678 },
|
rlm@46
|
12679
|
rlm@46
|
12680
|
rlm@46
|
12681 callEach : function(fnName, args){
|
rlm@46
|
12682 var cs = this.items;
|
rlm@46
|
12683 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
12684 cs[i][fnName].apply(cs[i], args);
|
rlm@46
|
12685 }
|
rlm@46
|
12686 },
|
rlm@46
|
12687
|
rlm@46
|
12688
|
rlm@46
|
12689 addComponent : function(comp){
|
rlm@46
|
12690 this.items.push(comp);
|
rlm@46
|
12691 comp.on('destroy', this.removeComponent, this);
|
rlm@46
|
12692 },
|
rlm@46
|
12693
|
rlm@46
|
12694
|
rlm@46
|
12695 removeComponent : function(comp){
|
rlm@46
|
12696 this.items.remove(comp);
|
rlm@46
|
12697 },
|
rlm@46
|
12698
|
rlm@46
|
12699
|
rlm@46
|
12700 execute : function(){
|
rlm@46
|
12701 this.initialConfig.handler.apply(this.initialConfig.scope || window, arguments);
|
rlm@46
|
12702 }
|
rlm@46
|
12703 };
|
rlm@46
|
12704
|
rlm@46
|
12705 (function(){
|
rlm@46
|
12706 Ext.Layer = function(config, existingEl){
|
rlm@46
|
12707 config = config || {};
|
rlm@46
|
12708 var dh = Ext.DomHelper;
|
rlm@46
|
12709 var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
|
rlm@46
|
12710 if(existingEl){
|
rlm@46
|
12711 this.dom = Ext.getDom(existingEl);
|
rlm@46
|
12712 }
|
rlm@46
|
12713 if(!this.dom){
|
rlm@46
|
12714 var o = config.dh || {tag: "div", cls: "x-layer"};
|
rlm@46
|
12715 this.dom = dh.append(pel, o);
|
rlm@46
|
12716 }
|
rlm@46
|
12717 if(config.cls){
|
rlm@46
|
12718 this.addClass(config.cls);
|
rlm@46
|
12719 }
|
rlm@46
|
12720 this.constrain = config.constrain !== false;
|
rlm@46
|
12721 this.visibilityMode = Ext.Element.VISIBILITY;
|
rlm@46
|
12722 if(config.id){
|
rlm@46
|
12723 this.id = this.dom.id = config.id;
|
rlm@46
|
12724 }else{
|
rlm@46
|
12725 this.id = Ext.id(this.dom);
|
rlm@46
|
12726 }
|
rlm@46
|
12727 this.zindex = config.zindex || this.getZIndex();
|
rlm@46
|
12728 this.position("absolute", this.zindex);
|
rlm@46
|
12729 if(config.shadow){
|
rlm@46
|
12730 this.shadowOffset = config.shadowOffset || 4;
|
rlm@46
|
12731 this.shadow = new Ext.Shadow({
|
rlm@46
|
12732 offset : this.shadowOffset,
|
rlm@46
|
12733 mode : config.shadow
|
rlm@46
|
12734 });
|
rlm@46
|
12735 }else{
|
rlm@46
|
12736 this.shadowOffset = 0;
|
rlm@46
|
12737 }
|
rlm@46
|
12738 this.useShim = config.shim !== false && Ext.useShims;
|
rlm@46
|
12739 this.useDisplay = config.useDisplay;
|
rlm@46
|
12740 this.hide();
|
rlm@46
|
12741 };
|
rlm@46
|
12742
|
rlm@46
|
12743 var supr = Ext.Element.prototype;
|
rlm@46
|
12744
|
rlm@46
|
12745
|
rlm@46
|
12746 var shims = [];
|
rlm@46
|
12747
|
rlm@46
|
12748 Ext.extend(Ext.Layer, Ext.Element, {
|
rlm@46
|
12749
|
rlm@46
|
12750 getZIndex : function(){
|
rlm@46
|
12751 return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;
|
rlm@46
|
12752 },
|
rlm@46
|
12753
|
rlm@46
|
12754 getShim : function(){
|
rlm@46
|
12755 if(!this.useShim){
|
rlm@46
|
12756 return null;
|
rlm@46
|
12757 }
|
rlm@46
|
12758 if(this.shim){
|
rlm@46
|
12759 return this.shim;
|
rlm@46
|
12760 }
|
rlm@46
|
12761 var shim = shims.shift();
|
rlm@46
|
12762 if(!shim){
|
rlm@46
|
12763 shim = this.createShim();
|
rlm@46
|
12764 shim.enableDisplayMode('block');
|
rlm@46
|
12765 shim.dom.style.display = 'none';
|
rlm@46
|
12766 shim.dom.style.visibility = 'visible';
|
rlm@46
|
12767 }
|
rlm@46
|
12768 var pn = this.dom.parentNode;
|
rlm@46
|
12769 if(shim.dom.parentNode != pn){
|
rlm@46
|
12770 pn.insertBefore(shim.dom, this.dom);
|
rlm@46
|
12771 }
|
rlm@46
|
12772 shim.setStyle('z-index', this.getZIndex()-2);
|
rlm@46
|
12773 this.shim = shim;
|
rlm@46
|
12774 return shim;
|
rlm@46
|
12775 },
|
rlm@46
|
12776
|
rlm@46
|
12777 hideShim : function(){
|
rlm@46
|
12778 if(this.shim){
|
rlm@46
|
12779 this.shim.setDisplayed(false);
|
rlm@46
|
12780 shims.push(this.shim);
|
rlm@46
|
12781 delete this.shim;
|
rlm@46
|
12782 }
|
rlm@46
|
12783 },
|
rlm@46
|
12784
|
rlm@46
|
12785 disableShadow : function(){
|
rlm@46
|
12786 if(this.shadow){
|
rlm@46
|
12787 this.shadowDisabled = true;
|
rlm@46
|
12788 this.shadow.hide();
|
rlm@46
|
12789 this.lastShadowOffset = this.shadowOffset;
|
rlm@46
|
12790 this.shadowOffset = 0;
|
rlm@46
|
12791 }
|
rlm@46
|
12792 },
|
rlm@46
|
12793
|
rlm@46
|
12794 enableShadow : function(show){
|
rlm@46
|
12795 if(this.shadow){
|
rlm@46
|
12796 this.shadowDisabled = false;
|
rlm@46
|
12797 this.shadowOffset = this.lastShadowOffset;
|
rlm@46
|
12798 delete this.lastShadowOffset;
|
rlm@46
|
12799 if(show){
|
rlm@46
|
12800 this.sync(true);
|
rlm@46
|
12801 }
|
rlm@46
|
12802 }
|
rlm@46
|
12803 },
|
rlm@46
|
12804
|
rlm@46
|
12805
|
rlm@46
|
12806
|
rlm@46
|
12807
|
rlm@46
|
12808 sync : function(doShow){
|
rlm@46
|
12809 var sw = this.shadow;
|
rlm@46
|
12810 if(!this.updating && this.isVisible() && (sw || this.useShim)){
|
rlm@46
|
12811 var sh = this.getShim();
|
rlm@46
|
12812
|
rlm@46
|
12813 var w = this.getWidth(),
|
rlm@46
|
12814 h = this.getHeight();
|
rlm@46
|
12815
|
rlm@46
|
12816 var l = this.getLeft(true),
|
rlm@46
|
12817 t = this.getTop(true);
|
rlm@46
|
12818
|
rlm@46
|
12819 if(sw && !this.shadowDisabled){
|
rlm@46
|
12820 if(doShow && !sw.isVisible()){
|
rlm@46
|
12821 sw.show(this);
|
rlm@46
|
12822 }else{
|
rlm@46
|
12823 sw.realign(l, t, w, h);
|
rlm@46
|
12824 }
|
rlm@46
|
12825 if(sh){
|
rlm@46
|
12826 if(doShow){
|
rlm@46
|
12827 sh.show();
|
rlm@46
|
12828 }
|
rlm@46
|
12829
|
rlm@46
|
12830 var a = sw.adjusts, s = sh.dom.style;
|
rlm@46
|
12831 s.left = (Math.min(l, l+a.l))+"px";
|
rlm@46
|
12832 s.top = (Math.min(t, t+a.t))+"px";
|
rlm@46
|
12833 s.width = (w+a.w)+"px";
|
rlm@46
|
12834 s.height = (h+a.h)+"px";
|
rlm@46
|
12835 }
|
rlm@46
|
12836 }else if(sh){
|
rlm@46
|
12837 if(doShow){
|
rlm@46
|
12838 sh.show();
|
rlm@46
|
12839 }
|
rlm@46
|
12840 sh.setSize(w, h);
|
rlm@46
|
12841 sh.setLeftTop(l, t);
|
rlm@46
|
12842 }
|
rlm@46
|
12843
|
rlm@46
|
12844 }
|
rlm@46
|
12845 },
|
rlm@46
|
12846
|
rlm@46
|
12847
|
rlm@46
|
12848 destroy : function(){
|
rlm@46
|
12849 this.hideShim();
|
rlm@46
|
12850 if(this.shadow){
|
rlm@46
|
12851 this.shadow.hide();
|
rlm@46
|
12852 }
|
rlm@46
|
12853 this.removeAllListeners();
|
rlm@46
|
12854 Ext.removeNode(this.dom);
|
rlm@46
|
12855 Ext.Element.uncache(this.id);
|
rlm@46
|
12856 },
|
rlm@46
|
12857
|
rlm@46
|
12858 remove : function(){
|
rlm@46
|
12859 this.destroy();
|
rlm@46
|
12860 },
|
rlm@46
|
12861
|
rlm@46
|
12862
|
rlm@46
|
12863 beginUpdate : function(){
|
rlm@46
|
12864 this.updating = true;
|
rlm@46
|
12865 },
|
rlm@46
|
12866
|
rlm@46
|
12867
|
rlm@46
|
12868 endUpdate : function(){
|
rlm@46
|
12869 this.updating = false;
|
rlm@46
|
12870 this.sync(true);
|
rlm@46
|
12871 },
|
rlm@46
|
12872
|
rlm@46
|
12873
|
rlm@46
|
12874 hideUnders : function(negOffset){
|
rlm@46
|
12875 if(this.shadow){
|
rlm@46
|
12876 this.shadow.hide();
|
rlm@46
|
12877 }
|
rlm@46
|
12878 this.hideShim();
|
rlm@46
|
12879 },
|
rlm@46
|
12880
|
rlm@46
|
12881
|
rlm@46
|
12882 constrainXY : function(){
|
rlm@46
|
12883 if(this.constrain){
|
rlm@46
|
12884 var vw = Ext.lib.Dom.getViewWidth(),
|
rlm@46
|
12885 vh = Ext.lib.Dom.getViewHeight();
|
rlm@46
|
12886 var s = Ext.getDoc().getScroll();
|
rlm@46
|
12887
|
rlm@46
|
12888 var xy = this.getXY();
|
rlm@46
|
12889 var x = xy[0], y = xy[1];
|
rlm@46
|
12890 var w = this.dom.offsetWidth+this.shadowOffset, h = this.dom.offsetHeight+this.shadowOffset;
|
rlm@46
|
12891
|
rlm@46
|
12892 var moved = false;
|
rlm@46
|
12893
|
rlm@46
|
12894 if((x + w) > vw+s.left){
|
rlm@46
|
12895 x = vw - w - this.shadowOffset;
|
rlm@46
|
12896 moved = true;
|
rlm@46
|
12897 }
|
rlm@46
|
12898 if((y + h) > vh+s.top){
|
rlm@46
|
12899 y = vh - h - this.shadowOffset;
|
rlm@46
|
12900 moved = true;
|
rlm@46
|
12901 }
|
rlm@46
|
12902
|
rlm@46
|
12903 if(x < s.left){
|
rlm@46
|
12904 x = s.left;
|
rlm@46
|
12905 moved = true;
|
rlm@46
|
12906 }
|
rlm@46
|
12907 if(y < s.top){
|
rlm@46
|
12908 y = s.top;
|
rlm@46
|
12909 moved = true;
|
rlm@46
|
12910 }
|
rlm@46
|
12911 if(moved){
|
rlm@46
|
12912 if(this.avoidY){
|
rlm@46
|
12913 var ay = this.avoidY;
|
rlm@46
|
12914 if(y <= ay && (y+h) >= ay){
|
rlm@46
|
12915 y = ay-h-5;
|
rlm@46
|
12916 }
|
rlm@46
|
12917 }
|
rlm@46
|
12918 xy = [x, y];
|
rlm@46
|
12919 this.storeXY(xy);
|
rlm@46
|
12920 supr.setXY.call(this, xy);
|
rlm@46
|
12921 this.sync();
|
rlm@46
|
12922 }
|
rlm@46
|
12923 }
|
rlm@46
|
12924 },
|
rlm@46
|
12925
|
rlm@46
|
12926 isVisible : function(){
|
rlm@46
|
12927 return this.visible;
|
rlm@46
|
12928 },
|
rlm@46
|
12929
|
rlm@46
|
12930
|
rlm@46
|
12931 showAction : function(){
|
rlm@46
|
12932 this.visible = true;
|
rlm@46
|
12933 if(this.useDisplay === true){
|
rlm@46
|
12934 this.setDisplayed("");
|
rlm@46
|
12935 }else if(this.lastXY){
|
rlm@46
|
12936 supr.setXY.call(this, this.lastXY);
|
rlm@46
|
12937 }else if(this.lastLT){
|
rlm@46
|
12938 supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
|
rlm@46
|
12939 }
|
rlm@46
|
12940 },
|
rlm@46
|
12941
|
rlm@46
|
12942
|
rlm@46
|
12943 hideAction : function(){
|
rlm@46
|
12944 this.visible = false;
|
rlm@46
|
12945 if(this.useDisplay === true){
|
rlm@46
|
12946 this.setDisplayed(false);
|
rlm@46
|
12947 }else{
|
rlm@46
|
12948 this.setLeftTop(-10000,-10000);
|
rlm@46
|
12949 }
|
rlm@46
|
12950 },
|
rlm@46
|
12951
|
rlm@46
|
12952
|
rlm@46
|
12953 setVisible : function(v, a, d, c, e){
|
rlm@46
|
12954 if(v){
|
rlm@46
|
12955 this.showAction();
|
rlm@46
|
12956 }
|
rlm@46
|
12957 if(a && v){
|
rlm@46
|
12958 var cb = function(){
|
rlm@46
|
12959 this.sync(true);
|
rlm@46
|
12960 if(c){
|
rlm@46
|
12961 c();
|
rlm@46
|
12962 }
|
rlm@46
|
12963 }.createDelegate(this);
|
rlm@46
|
12964 supr.setVisible.call(this, true, true, d, cb, e);
|
rlm@46
|
12965 }else{
|
rlm@46
|
12966 if(!v){
|
rlm@46
|
12967 this.hideUnders(true);
|
rlm@46
|
12968 }
|
rlm@46
|
12969 var cb = c;
|
rlm@46
|
12970 if(a){
|
rlm@46
|
12971 cb = function(){
|
rlm@46
|
12972 this.hideAction();
|
rlm@46
|
12973 if(c){
|
rlm@46
|
12974 c();
|
rlm@46
|
12975 }
|
rlm@46
|
12976 }.createDelegate(this);
|
rlm@46
|
12977 }
|
rlm@46
|
12978 supr.setVisible.call(this, v, a, d, cb, e);
|
rlm@46
|
12979 if(v){
|
rlm@46
|
12980 this.sync(true);
|
rlm@46
|
12981 }else if(!a){
|
rlm@46
|
12982 this.hideAction();
|
rlm@46
|
12983 }
|
rlm@46
|
12984 }
|
rlm@46
|
12985 },
|
rlm@46
|
12986
|
rlm@46
|
12987 storeXY : function(xy){
|
rlm@46
|
12988 delete this.lastLT;
|
rlm@46
|
12989 this.lastXY = xy;
|
rlm@46
|
12990 },
|
rlm@46
|
12991
|
rlm@46
|
12992 storeLeftTop : function(left, top){
|
rlm@46
|
12993 delete this.lastXY;
|
rlm@46
|
12994 this.lastLT = [left, top];
|
rlm@46
|
12995 },
|
rlm@46
|
12996
|
rlm@46
|
12997
|
rlm@46
|
12998 beforeFx : function(){
|
rlm@46
|
12999 this.beforeAction();
|
rlm@46
|
13000 return Ext.Layer.superclass.beforeFx.apply(this, arguments);
|
rlm@46
|
13001 },
|
rlm@46
|
13002
|
rlm@46
|
13003
|
rlm@46
|
13004 afterFx : function(){
|
rlm@46
|
13005 Ext.Layer.superclass.afterFx.apply(this, arguments);
|
rlm@46
|
13006 this.sync(this.isVisible());
|
rlm@46
|
13007 },
|
rlm@46
|
13008
|
rlm@46
|
13009
|
rlm@46
|
13010 beforeAction : function(){
|
rlm@46
|
13011 if(!this.updating && this.shadow){
|
rlm@46
|
13012 this.shadow.hide();
|
rlm@46
|
13013 }
|
rlm@46
|
13014 },
|
rlm@46
|
13015
|
rlm@46
|
13016
|
rlm@46
|
13017 setLeft : function(left){
|
rlm@46
|
13018 this.storeLeftTop(left, this.getTop(true));
|
rlm@46
|
13019 supr.setLeft.apply(this, arguments);
|
rlm@46
|
13020 this.sync();
|
rlm@46
|
13021 },
|
rlm@46
|
13022
|
rlm@46
|
13023 setTop : function(top){
|
rlm@46
|
13024 this.storeLeftTop(this.getLeft(true), top);
|
rlm@46
|
13025 supr.setTop.apply(this, arguments);
|
rlm@46
|
13026 this.sync();
|
rlm@46
|
13027 },
|
rlm@46
|
13028
|
rlm@46
|
13029 setLeftTop : function(left, top){
|
rlm@46
|
13030 this.storeLeftTop(left, top);
|
rlm@46
|
13031 supr.setLeftTop.apply(this, arguments);
|
rlm@46
|
13032 this.sync();
|
rlm@46
|
13033 },
|
rlm@46
|
13034
|
rlm@46
|
13035 setXY : function(xy, a, d, c, e){
|
rlm@46
|
13036 this.fixDisplay();
|
rlm@46
|
13037 this.beforeAction();
|
rlm@46
|
13038 this.storeXY(xy);
|
rlm@46
|
13039 var cb = this.createCB(c);
|
rlm@46
|
13040 supr.setXY.call(this, xy, a, d, cb, e);
|
rlm@46
|
13041 if(!a){
|
rlm@46
|
13042 cb();
|
rlm@46
|
13043 }
|
rlm@46
|
13044 },
|
rlm@46
|
13045
|
rlm@46
|
13046
|
rlm@46
|
13047 createCB : function(c){
|
rlm@46
|
13048 var el = this;
|
rlm@46
|
13049 return function(){
|
rlm@46
|
13050 el.constrainXY();
|
rlm@46
|
13051 el.sync(true);
|
rlm@46
|
13052 if(c){
|
rlm@46
|
13053 c();
|
rlm@46
|
13054 }
|
rlm@46
|
13055 };
|
rlm@46
|
13056 },
|
rlm@46
|
13057
|
rlm@46
|
13058
|
rlm@46
|
13059 setX : function(x, a, d, c, e){
|
rlm@46
|
13060 this.setXY([x, this.getY()], a, d, c, e);
|
rlm@46
|
13061 },
|
rlm@46
|
13062
|
rlm@46
|
13063
|
rlm@46
|
13064 setY : function(y, a, d, c, e){
|
rlm@46
|
13065 this.setXY([this.getX(), y], a, d, c, e);
|
rlm@46
|
13066 },
|
rlm@46
|
13067
|
rlm@46
|
13068
|
rlm@46
|
13069 setSize : function(w, h, a, d, c, e){
|
rlm@46
|
13070 this.beforeAction();
|
rlm@46
|
13071 var cb = this.createCB(c);
|
rlm@46
|
13072 supr.setSize.call(this, w, h, a, d, cb, e);
|
rlm@46
|
13073 if(!a){
|
rlm@46
|
13074 cb();
|
rlm@46
|
13075 }
|
rlm@46
|
13076 },
|
rlm@46
|
13077
|
rlm@46
|
13078
|
rlm@46
|
13079 setWidth : function(w, a, d, c, e){
|
rlm@46
|
13080 this.beforeAction();
|
rlm@46
|
13081 var cb = this.createCB(c);
|
rlm@46
|
13082 supr.setWidth.call(this, w, a, d, cb, e);
|
rlm@46
|
13083 if(!a){
|
rlm@46
|
13084 cb();
|
rlm@46
|
13085 }
|
rlm@46
|
13086 },
|
rlm@46
|
13087
|
rlm@46
|
13088
|
rlm@46
|
13089 setHeight : function(h, a, d, c, e){
|
rlm@46
|
13090 this.beforeAction();
|
rlm@46
|
13091 var cb = this.createCB(c);
|
rlm@46
|
13092 supr.setHeight.call(this, h, a, d, cb, e);
|
rlm@46
|
13093 if(!a){
|
rlm@46
|
13094 cb();
|
rlm@46
|
13095 }
|
rlm@46
|
13096 },
|
rlm@46
|
13097
|
rlm@46
|
13098
|
rlm@46
|
13099 setBounds : function(x, y, w, h, a, d, c, e){
|
rlm@46
|
13100 this.beforeAction();
|
rlm@46
|
13101 var cb = this.createCB(c);
|
rlm@46
|
13102 if(!a){
|
rlm@46
|
13103 this.storeXY([x, y]);
|
rlm@46
|
13104 supr.setXY.call(this, [x, y]);
|
rlm@46
|
13105 supr.setSize.call(this, w, h, a, d, cb, e);
|
rlm@46
|
13106 cb();
|
rlm@46
|
13107 }else{
|
rlm@46
|
13108 supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
|
rlm@46
|
13109 }
|
rlm@46
|
13110 return this;
|
rlm@46
|
13111 },
|
rlm@46
|
13112
|
rlm@46
|
13113
|
rlm@46
|
13114 setZIndex : function(zindex){
|
rlm@46
|
13115 this.zindex = zindex;
|
rlm@46
|
13116 this.setStyle("z-index", zindex + 2);
|
rlm@46
|
13117 if(this.shadow){
|
rlm@46
|
13118 this.shadow.setZIndex(zindex + 1);
|
rlm@46
|
13119 }
|
rlm@46
|
13120 if(this.shim){
|
rlm@46
|
13121 this.shim.setStyle("z-index", zindex);
|
rlm@46
|
13122 }
|
rlm@46
|
13123 }
|
rlm@46
|
13124 });
|
rlm@46
|
13125 })();
|
rlm@46
|
13126
|
rlm@46
|
13127 Ext.Shadow = function(config){
|
rlm@46
|
13128 Ext.apply(this, config);
|
rlm@46
|
13129 if(typeof this.mode != "string"){
|
rlm@46
|
13130 this.mode = this.defaultMode;
|
rlm@46
|
13131 }
|
rlm@46
|
13132 var o = this.offset, a = {h: 0};
|
rlm@46
|
13133 var rad = Math.floor(this.offset/2);
|
rlm@46
|
13134 switch(this.mode.toLowerCase()){ case "drop":
|
rlm@46
|
13135 a.w = 0;
|
rlm@46
|
13136 a.l = a.t = o;
|
rlm@46
|
13137 a.t -= 1;
|
rlm@46
|
13138 if(Ext.isIE){
|
rlm@46
|
13139 a.l -= this.offset + rad;
|
rlm@46
|
13140 a.t -= this.offset + rad;
|
rlm@46
|
13141 a.w -= rad;
|
rlm@46
|
13142 a.h -= rad;
|
rlm@46
|
13143 a.t += 1;
|
rlm@46
|
13144 }
|
rlm@46
|
13145 break;
|
rlm@46
|
13146 case "sides":
|
rlm@46
|
13147 a.w = (o*2);
|
rlm@46
|
13148 a.l = -o;
|
rlm@46
|
13149 a.t = o-1;
|
rlm@46
|
13150 if(Ext.isIE){
|
rlm@46
|
13151 a.l -= (this.offset - rad);
|
rlm@46
|
13152 a.t -= this.offset + rad;
|
rlm@46
|
13153 a.l += 1;
|
rlm@46
|
13154 a.w -= (this.offset - rad)*2;
|
rlm@46
|
13155 a.w -= rad + 1;
|
rlm@46
|
13156 a.h -= 1;
|
rlm@46
|
13157 }
|
rlm@46
|
13158 break;
|
rlm@46
|
13159 case "frame":
|
rlm@46
|
13160 a.w = a.h = (o*2);
|
rlm@46
|
13161 a.l = a.t = -o;
|
rlm@46
|
13162 a.t += 1;
|
rlm@46
|
13163 a.h -= 2;
|
rlm@46
|
13164 if(Ext.isIE){
|
rlm@46
|
13165 a.l -= (this.offset - rad);
|
rlm@46
|
13166 a.t -= (this.offset - rad);
|
rlm@46
|
13167 a.l += 1;
|
rlm@46
|
13168 a.w -= (this.offset + rad + 1);
|
rlm@46
|
13169 a.h -= (this.offset + rad);
|
rlm@46
|
13170 a.h += 1;
|
rlm@46
|
13171 }
|
rlm@46
|
13172 break;
|
rlm@46
|
13173 };
|
rlm@46
|
13174
|
rlm@46
|
13175 this.adjusts = a;
|
rlm@46
|
13176 };
|
rlm@46
|
13177
|
rlm@46
|
13178 Ext.Shadow.prototype = {
|
rlm@46
|
13179
|
rlm@46
|
13180
|
rlm@46
|
13181 offset: 4,
|
rlm@46
|
13182
|
rlm@46
|
13183 defaultMode: "drop",
|
rlm@46
|
13184
|
rlm@46
|
13185
|
rlm@46
|
13186 show : function(target){
|
rlm@46
|
13187 target = Ext.get(target);
|
rlm@46
|
13188 if(!this.el){
|
rlm@46
|
13189 this.el = Ext.Shadow.Pool.pull();
|
rlm@46
|
13190 if(this.el.dom.nextSibling != target.dom){
|
rlm@46
|
13191 this.el.insertBefore(target);
|
rlm@46
|
13192 }
|
rlm@46
|
13193 }
|
rlm@46
|
13194 this.el.setStyle("z-index", this.zIndex || parseInt(target.getStyle("z-index"), 10)-1);
|
rlm@46
|
13195 if(Ext.isIE){
|
rlm@46
|
13196 this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";
|
rlm@46
|
13197 }
|
rlm@46
|
13198 this.realign(
|
rlm@46
|
13199 target.getLeft(true),
|
rlm@46
|
13200 target.getTop(true),
|
rlm@46
|
13201 target.getWidth(),
|
rlm@46
|
13202 target.getHeight()
|
rlm@46
|
13203 );
|
rlm@46
|
13204 this.el.dom.style.display = "block";
|
rlm@46
|
13205 },
|
rlm@46
|
13206
|
rlm@46
|
13207
|
rlm@46
|
13208 isVisible : function(){
|
rlm@46
|
13209 return this.el ? true : false;
|
rlm@46
|
13210 },
|
rlm@46
|
13211
|
rlm@46
|
13212
|
rlm@46
|
13213 realign : function(l, t, w, h){
|
rlm@46
|
13214 if(!this.el){
|
rlm@46
|
13215 return;
|
rlm@46
|
13216 }
|
rlm@46
|
13217 var a = this.adjusts, d = this.el.dom, s = d.style;
|
rlm@46
|
13218 var iea = 0;
|
rlm@46
|
13219 s.left = (l+a.l)+"px";
|
rlm@46
|
13220 s.top = (t+a.t)+"px";
|
rlm@46
|
13221 var sw = (w+a.w), sh = (h+a.h), sws = sw +"px", shs = sh + "px";
|
rlm@46
|
13222 if(s.width != sws || s.height != shs){
|
rlm@46
|
13223 s.width = sws;
|
rlm@46
|
13224 s.height = shs;
|
rlm@46
|
13225 if(!Ext.isIE){
|
rlm@46
|
13226 var cn = d.childNodes;
|
rlm@46
|
13227 var sww = Math.max(0, (sw-12))+"px";
|
rlm@46
|
13228 cn[0].childNodes[1].style.width = sww;
|
rlm@46
|
13229 cn[1].childNodes[1].style.width = sww;
|
rlm@46
|
13230 cn[2].childNodes[1].style.width = sww;
|
rlm@46
|
13231 cn[1].style.height = Math.max(0, (sh-12))+"px";
|
rlm@46
|
13232 }
|
rlm@46
|
13233 }
|
rlm@46
|
13234 },
|
rlm@46
|
13235
|
rlm@46
|
13236
|
rlm@46
|
13237 hide : function(){
|
rlm@46
|
13238 if(this.el){
|
rlm@46
|
13239 this.el.dom.style.display = "none";
|
rlm@46
|
13240 Ext.Shadow.Pool.push(this.el);
|
rlm@46
|
13241 delete this.el;
|
rlm@46
|
13242 }
|
rlm@46
|
13243 },
|
rlm@46
|
13244
|
rlm@46
|
13245
|
rlm@46
|
13246 setZIndex : function(z){
|
rlm@46
|
13247 this.zIndex = z;
|
rlm@46
|
13248 if(this.el){
|
rlm@46
|
13249 this.el.setStyle("z-index", z);
|
rlm@46
|
13250 }
|
rlm@46
|
13251 }
|
rlm@46
|
13252 };
|
rlm@46
|
13253
|
rlm@46
|
13254 Ext.Shadow.Pool = function(){
|
rlm@46
|
13255 var p = [];
|
rlm@46
|
13256 var markup = Ext.isIE ?
|
rlm@46
|
13257 '<div class="x-ie-shadow"></div>' :
|
rlm@46
|
13258 '<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';
|
rlm@46
|
13259 return {
|
rlm@46
|
13260 pull : function(){
|
rlm@46
|
13261 var sh = p.shift();
|
rlm@46
|
13262 if(!sh){
|
rlm@46
|
13263 sh = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, markup));
|
rlm@46
|
13264 sh.autoBoxAdjust = false;
|
rlm@46
|
13265 }
|
rlm@46
|
13266 return sh;
|
rlm@46
|
13267 },
|
rlm@46
|
13268
|
rlm@46
|
13269 push : function(sh){
|
rlm@46
|
13270 p.push(sh);
|
rlm@46
|
13271 }
|
rlm@46
|
13272 };
|
rlm@46
|
13273 }();
|
rlm@46
|
13274
|
rlm@46
|
13275 Ext.BoxComponent = Ext.extend(Ext.Component, {
|
rlm@46
|
13276
|
rlm@46
|
13277
|
rlm@46
|
13278
|
rlm@46
|
13279
|
rlm@46
|
13280
|
rlm@46
|
13281
|
rlm@46
|
13282
|
rlm@46
|
13283
|
rlm@46
|
13284
|
rlm@46
|
13285
|
rlm@46
|
13286
|
rlm@46
|
13287 initComponent : function(){
|
rlm@46
|
13288 Ext.BoxComponent.superclass.initComponent.call(this);
|
rlm@46
|
13289 this.addEvents(
|
rlm@46
|
13290
|
rlm@46
|
13291 'resize',
|
rlm@46
|
13292
|
rlm@46
|
13293 'move'
|
rlm@46
|
13294 );
|
rlm@46
|
13295 },
|
rlm@46
|
13296
|
rlm@46
|
13297 boxReady : false,
|
rlm@46
|
13298 deferHeight: false,
|
rlm@46
|
13299
|
rlm@46
|
13300
|
rlm@46
|
13301 setSize : function(w, h){
|
rlm@46
|
13302 if(typeof w == 'object'){
|
rlm@46
|
13303 h = w.height;
|
rlm@46
|
13304 w = w.width;
|
rlm@46
|
13305 }
|
rlm@46
|
13306 if(!this.boxReady){
|
rlm@46
|
13307 this.width = w;
|
rlm@46
|
13308 this.height = h;
|
rlm@46
|
13309 return this;
|
rlm@46
|
13310 }
|
rlm@46
|
13311
|
rlm@46
|
13312 if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){
|
rlm@46
|
13313 return this;
|
rlm@46
|
13314 }
|
rlm@46
|
13315 this.lastSize = {width: w, height: h};
|
rlm@46
|
13316 var adj = this.adjustSize(w, h);
|
rlm@46
|
13317 var aw = adj.width, ah = adj.height;
|
rlm@46
|
13318 if(aw !== undefined || ah !== undefined){ var rz = this.getResizeEl();
|
rlm@46
|
13319 if(!this.deferHeight && aw !== undefined && ah !== undefined){
|
rlm@46
|
13320 rz.setSize(aw, ah);
|
rlm@46
|
13321 }else if(!this.deferHeight && ah !== undefined){
|
rlm@46
|
13322 rz.setHeight(ah);
|
rlm@46
|
13323 }else if(aw !== undefined){
|
rlm@46
|
13324 rz.setWidth(aw);
|
rlm@46
|
13325 }
|
rlm@46
|
13326 this.onResize(aw, ah, w, h);
|
rlm@46
|
13327 this.fireEvent('resize', this, aw, ah, w, h);
|
rlm@46
|
13328 }
|
rlm@46
|
13329 return this;
|
rlm@46
|
13330 },
|
rlm@46
|
13331
|
rlm@46
|
13332
|
rlm@46
|
13333 setWidth : function(width){
|
rlm@46
|
13334 return this.setSize(width);
|
rlm@46
|
13335 },
|
rlm@46
|
13336
|
rlm@46
|
13337
|
rlm@46
|
13338 setHeight : function(height){
|
rlm@46
|
13339 return this.setSize(undefined, height);
|
rlm@46
|
13340 },
|
rlm@46
|
13341
|
rlm@46
|
13342
|
rlm@46
|
13343 getSize : function(){
|
rlm@46
|
13344 return this.el.getSize();
|
rlm@46
|
13345 },
|
rlm@46
|
13346
|
rlm@46
|
13347
|
rlm@46
|
13348 getPosition : function(local){
|
rlm@46
|
13349 if(local === true){
|
rlm@46
|
13350 return [this.el.getLeft(true), this.el.getTop(true)];
|
rlm@46
|
13351 }
|
rlm@46
|
13352 return this.xy || this.el.getXY();
|
rlm@46
|
13353 },
|
rlm@46
|
13354
|
rlm@46
|
13355
|
rlm@46
|
13356 getBox : function(local){
|
rlm@46
|
13357 var s = this.el.getSize();
|
rlm@46
|
13358 if(local === true){
|
rlm@46
|
13359 s.x = this.el.getLeft(true);
|
rlm@46
|
13360 s.y = this.el.getTop(true);
|
rlm@46
|
13361 }else{
|
rlm@46
|
13362 var xy = this.xy || this.el.getXY();
|
rlm@46
|
13363 s.x = xy[0];
|
rlm@46
|
13364 s.y = xy[1];
|
rlm@46
|
13365 }
|
rlm@46
|
13366 return s;
|
rlm@46
|
13367 },
|
rlm@46
|
13368
|
rlm@46
|
13369
|
rlm@46
|
13370 updateBox : function(box){
|
rlm@46
|
13371 this.setSize(box.width, box.height);
|
rlm@46
|
13372 this.setPagePosition(box.x, box.y);
|
rlm@46
|
13373 return this;
|
rlm@46
|
13374 },
|
rlm@46
|
13375
|
rlm@46
|
13376 getResizeEl : function(){
|
rlm@46
|
13377 return this.resizeEl || this.el;
|
rlm@46
|
13378 },
|
rlm@46
|
13379
|
rlm@46
|
13380 getPositionEl : function(){
|
rlm@46
|
13381 return this.positionEl || this.el;
|
rlm@46
|
13382 },
|
rlm@46
|
13383
|
rlm@46
|
13384
|
rlm@46
|
13385 setPosition : function(x, y){
|
rlm@46
|
13386 if(x && typeof x[1] == 'number'){
|
rlm@46
|
13387 y = x[1];
|
rlm@46
|
13388 x = x[0];
|
rlm@46
|
13389 }
|
rlm@46
|
13390 this.x = x;
|
rlm@46
|
13391 this.y = y;
|
rlm@46
|
13392 if(!this.boxReady){
|
rlm@46
|
13393 return this;
|
rlm@46
|
13394 }
|
rlm@46
|
13395 var adj = this.adjustPosition(x, y);
|
rlm@46
|
13396 var ax = adj.x, ay = adj.y;
|
rlm@46
|
13397
|
rlm@46
|
13398 var el = this.getPositionEl();
|
rlm@46
|
13399 if(ax !== undefined || ay !== undefined){
|
rlm@46
|
13400 if(ax !== undefined && ay !== undefined){
|
rlm@46
|
13401 el.setLeftTop(ax, ay);
|
rlm@46
|
13402 }else if(ax !== undefined){
|
rlm@46
|
13403 el.setLeft(ax);
|
rlm@46
|
13404 }else if(ay !== undefined){
|
rlm@46
|
13405 el.setTop(ay);
|
rlm@46
|
13406 }
|
rlm@46
|
13407 this.onPosition(ax, ay);
|
rlm@46
|
13408 this.fireEvent('move', this, ax, ay);
|
rlm@46
|
13409 }
|
rlm@46
|
13410 return this;
|
rlm@46
|
13411 },
|
rlm@46
|
13412
|
rlm@46
|
13413
|
rlm@46
|
13414 setPagePosition : function(x, y){
|
rlm@46
|
13415 if(x && typeof x[1] == 'number'){
|
rlm@46
|
13416 y = x[1];
|
rlm@46
|
13417 x = x[0];
|
rlm@46
|
13418 }
|
rlm@46
|
13419 this.pageX = x;
|
rlm@46
|
13420 this.pageY = y;
|
rlm@46
|
13421 if(!this.boxReady){
|
rlm@46
|
13422 return;
|
rlm@46
|
13423 }
|
rlm@46
|
13424 if(x === undefined || y === undefined){ return;
|
rlm@46
|
13425 }
|
rlm@46
|
13426 var p = this.el.translatePoints(x, y);
|
rlm@46
|
13427 this.setPosition(p.left, p.top);
|
rlm@46
|
13428 return this;
|
rlm@46
|
13429 },
|
rlm@46
|
13430
|
rlm@46
|
13431 onRender : function(ct, position){
|
rlm@46
|
13432 Ext.BoxComponent.superclass.onRender.call(this, ct, position);
|
rlm@46
|
13433 if(this.resizeEl){
|
rlm@46
|
13434 this.resizeEl = Ext.get(this.resizeEl);
|
rlm@46
|
13435 }
|
rlm@46
|
13436 if(this.positionEl){
|
rlm@46
|
13437 this.positionEl = Ext.get(this.positionEl);
|
rlm@46
|
13438 }
|
rlm@46
|
13439 },
|
rlm@46
|
13440
|
rlm@46
|
13441 afterRender : function(){
|
rlm@46
|
13442 Ext.BoxComponent.superclass.afterRender.call(this);
|
rlm@46
|
13443 this.boxReady = true;
|
rlm@46
|
13444 this.setSize(this.width, this.height);
|
rlm@46
|
13445 if(this.x || this.y){
|
rlm@46
|
13446 this.setPosition(this.x, this.y);
|
rlm@46
|
13447 }else if(this.pageX || this.pageY){
|
rlm@46
|
13448 this.setPagePosition(this.pageX, this.pageY);
|
rlm@46
|
13449 }
|
rlm@46
|
13450 },
|
rlm@46
|
13451
|
rlm@46
|
13452
|
rlm@46
|
13453 syncSize : function(){
|
rlm@46
|
13454 delete this.lastSize;
|
rlm@46
|
13455 this.setSize(this.autoWidth ? undefined : this.el.getWidth(), this.autoHeight ? undefined : this.el.getHeight());
|
rlm@46
|
13456 return this;
|
rlm@46
|
13457 },
|
rlm@46
|
13458
|
rlm@46
|
13459
|
rlm@46
|
13460 onResize : function(adjWidth, adjHeight, rawWidth, rawHeight){
|
rlm@46
|
13461
|
rlm@46
|
13462 },
|
rlm@46
|
13463
|
rlm@46
|
13464
|
rlm@46
|
13465 onPosition : function(x, y){
|
rlm@46
|
13466
|
rlm@46
|
13467 },
|
rlm@46
|
13468
|
rlm@46
|
13469 adjustSize : function(w, h){
|
rlm@46
|
13470 if(this.autoWidth){
|
rlm@46
|
13471 w = 'auto';
|
rlm@46
|
13472 }
|
rlm@46
|
13473 if(this.autoHeight){
|
rlm@46
|
13474 h = 'auto';
|
rlm@46
|
13475 }
|
rlm@46
|
13476 return {width : w, height: h};
|
rlm@46
|
13477 },
|
rlm@46
|
13478
|
rlm@46
|
13479 adjustPosition : function(x, y){
|
rlm@46
|
13480 return {x : x, y: y};
|
rlm@46
|
13481 }
|
rlm@46
|
13482 });
|
rlm@46
|
13483 Ext.reg('box', Ext.BoxComponent);
|
rlm@46
|
13484
|
rlm@46
|
13485 Ext.SplitBar = function(dragElement, resizingElement, orientation, placement, existingProxy){
|
rlm@46
|
13486
|
rlm@46
|
13487
|
rlm@46
|
13488 this.el = Ext.get(dragElement, true);
|
rlm@46
|
13489 this.el.dom.unselectable = "on";
|
rlm@46
|
13490
|
rlm@46
|
13491 this.resizingEl = Ext.get(resizingElement, true);
|
rlm@46
|
13492
|
rlm@46
|
13493
|
rlm@46
|
13494 this.orientation = orientation || Ext.SplitBar.HORIZONTAL;
|
rlm@46
|
13495
|
rlm@46
|
13496
|
rlm@46
|
13497 this.minSize = 0;
|
rlm@46
|
13498
|
rlm@46
|
13499
|
rlm@46
|
13500 this.maxSize = 2000;
|
rlm@46
|
13501
|
rlm@46
|
13502
|
rlm@46
|
13503 this.animate = false;
|
rlm@46
|
13504
|
rlm@46
|
13505
|
rlm@46
|
13506 this.useShim = false;
|
rlm@46
|
13507
|
rlm@46
|
13508
|
rlm@46
|
13509 this.shim = null;
|
rlm@46
|
13510
|
rlm@46
|
13511 if(!existingProxy){
|
rlm@46
|
13512
|
rlm@46
|
13513 this.proxy = Ext.SplitBar.createProxy(this.orientation);
|
rlm@46
|
13514 }else{
|
rlm@46
|
13515 this.proxy = Ext.get(existingProxy).dom;
|
rlm@46
|
13516 }
|
rlm@46
|
13517
|
rlm@46
|
13518 this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId : this.proxy.id});
|
rlm@46
|
13519
|
rlm@46
|
13520
|
rlm@46
|
13521 this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this);
|
rlm@46
|
13522
|
rlm@46
|
13523
|
rlm@46
|
13524 this.dd.endDrag = this.onEndProxyDrag.createDelegate(this);
|
rlm@46
|
13525
|
rlm@46
|
13526
|
rlm@46
|
13527 this.dragSpecs = {};
|
rlm@46
|
13528
|
rlm@46
|
13529
|
rlm@46
|
13530 this.adapter = new Ext.SplitBar.BasicLayoutAdapter();
|
rlm@46
|
13531 this.adapter.init(this);
|
rlm@46
|
13532
|
rlm@46
|
13533 if(this.orientation == Ext.SplitBar.HORIZONTAL){
|
rlm@46
|
13534
|
rlm@46
|
13535 this.placement = placement || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT);
|
rlm@46
|
13536 this.el.addClass("x-splitbar-h");
|
rlm@46
|
13537 }else{
|
rlm@46
|
13538
|
rlm@46
|
13539 this.placement = placement || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM);
|
rlm@46
|
13540 this.el.addClass("x-splitbar-v");
|
rlm@46
|
13541 }
|
rlm@46
|
13542
|
rlm@46
|
13543 this.addEvents(
|
rlm@46
|
13544
|
rlm@46
|
13545 "resize",
|
rlm@46
|
13546
|
rlm@46
|
13547 "moved",
|
rlm@46
|
13548
|
rlm@46
|
13549 "beforeresize",
|
rlm@46
|
13550
|
rlm@46
|
13551 "beforeapply"
|
rlm@46
|
13552 );
|
rlm@46
|
13553
|
rlm@46
|
13554 Ext.SplitBar.superclass.constructor.call(this);
|
rlm@46
|
13555 };
|
rlm@46
|
13556
|
rlm@46
|
13557 Ext.extend(Ext.SplitBar, Ext.util.Observable, {
|
rlm@46
|
13558 onStartProxyDrag : function(x, y){
|
rlm@46
|
13559 this.fireEvent("beforeresize", this);
|
rlm@46
|
13560 this.overlay = Ext.DomHelper.append(document.body, {cls: "x-drag-overlay", html: " "}, true);
|
rlm@46
|
13561 this.overlay.unselectable();
|
rlm@46
|
13562 this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
|
rlm@46
|
13563 this.overlay.show();
|
rlm@46
|
13564 Ext.get(this.proxy).setDisplayed("block");
|
rlm@46
|
13565 var size = this.adapter.getElementSize(this);
|
rlm@46
|
13566 this.activeMinSize = this.getMinimumSize();;
|
rlm@46
|
13567 this.activeMaxSize = this.getMaximumSize();;
|
rlm@46
|
13568 var c1 = size - this.activeMinSize;
|
rlm@46
|
13569 var c2 = Math.max(this.activeMaxSize - size, 0);
|
rlm@46
|
13570 if(this.orientation == Ext.SplitBar.HORIZONTAL){
|
rlm@46
|
13571 this.dd.resetConstraints();
|
rlm@46
|
13572 this.dd.setXConstraint(
|
rlm@46
|
13573 this.placement == Ext.SplitBar.LEFT ? c1 : c2,
|
rlm@46
|
13574 this.placement == Ext.SplitBar.LEFT ? c2 : c1
|
rlm@46
|
13575 );
|
rlm@46
|
13576 this.dd.setYConstraint(0, 0);
|
rlm@46
|
13577 }else{
|
rlm@46
|
13578 this.dd.resetConstraints();
|
rlm@46
|
13579 this.dd.setXConstraint(0, 0);
|
rlm@46
|
13580 this.dd.setYConstraint(
|
rlm@46
|
13581 this.placement == Ext.SplitBar.TOP ? c1 : c2,
|
rlm@46
|
13582 this.placement == Ext.SplitBar.TOP ? c2 : c1
|
rlm@46
|
13583 );
|
rlm@46
|
13584 }
|
rlm@46
|
13585 this.dragSpecs.startSize = size;
|
rlm@46
|
13586 this.dragSpecs.startPoint = [x, y];
|
rlm@46
|
13587 Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, x, y);
|
rlm@46
|
13588 },
|
rlm@46
|
13589
|
rlm@46
|
13590
|
rlm@46
|
13591 onEndProxyDrag : function(e){
|
rlm@46
|
13592 Ext.get(this.proxy).setDisplayed(false);
|
rlm@46
|
13593 var endPoint = Ext.lib.Event.getXY(e);
|
rlm@46
|
13594 if(this.overlay){
|
rlm@46
|
13595 this.overlay.remove();
|
rlm@46
|
13596 delete this.overlay;
|
rlm@46
|
13597 }
|
rlm@46
|
13598 var newSize;
|
rlm@46
|
13599 if(this.orientation == Ext.SplitBar.HORIZONTAL){
|
rlm@46
|
13600 newSize = this.dragSpecs.startSize +
|
rlm@46
|
13601 (this.placement == Ext.SplitBar.LEFT ?
|
rlm@46
|
13602 endPoint[0] - this.dragSpecs.startPoint[0] :
|
rlm@46
|
13603 this.dragSpecs.startPoint[0] - endPoint[0]
|
rlm@46
|
13604 );
|
rlm@46
|
13605 }else{
|
rlm@46
|
13606 newSize = this.dragSpecs.startSize +
|
rlm@46
|
13607 (this.placement == Ext.SplitBar.TOP ?
|
rlm@46
|
13608 endPoint[1] - this.dragSpecs.startPoint[1] :
|
rlm@46
|
13609 this.dragSpecs.startPoint[1] - endPoint[1]
|
rlm@46
|
13610 );
|
rlm@46
|
13611 }
|
rlm@46
|
13612 newSize = Math.min(Math.max(newSize, this.activeMinSize), this.activeMaxSize);
|
rlm@46
|
13613 if(newSize != this.dragSpecs.startSize){
|
rlm@46
|
13614 if(this.fireEvent('beforeapply', this, newSize) !== false){
|
rlm@46
|
13615 this.adapter.setElementSize(this, newSize);
|
rlm@46
|
13616 this.fireEvent("moved", this, newSize);
|
rlm@46
|
13617 this.fireEvent("resize", this, newSize);
|
rlm@46
|
13618 }
|
rlm@46
|
13619 }
|
rlm@46
|
13620 },
|
rlm@46
|
13621
|
rlm@46
|
13622
|
rlm@46
|
13623 getAdapter : function(){
|
rlm@46
|
13624 return this.adapter;
|
rlm@46
|
13625 },
|
rlm@46
|
13626
|
rlm@46
|
13627
|
rlm@46
|
13628 setAdapter : function(adapter){
|
rlm@46
|
13629 this.adapter = adapter;
|
rlm@46
|
13630 this.adapter.init(this);
|
rlm@46
|
13631 },
|
rlm@46
|
13632
|
rlm@46
|
13633
|
rlm@46
|
13634 getMinimumSize : function(){
|
rlm@46
|
13635 return this.minSize;
|
rlm@46
|
13636 },
|
rlm@46
|
13637
|
rlm@46
|
13638
|
rlm@46
|
13639 setMinimumSize : function(minSize){
|
rlm@46
|
13640 this.minSize = minSize;
|
rlm@46
|
13641 },
|
rlm@46
|
13642
|
rlm@46
|
13643
|
rlm@46
|
13644 getMaximumSize : function(){
|
rlm@46
|
13645 return this.maxSize;
|
rlm@46
|
13646 },
|
rlm@46
|
13647
|
rlm@46
|
13648
|
rlm@46
|
13649 setMaximumSize : function(maxSize){
|
rlm@46
|
13650 this.maxSize = maxSize;
|
rlm@46
|
13651 },
|
rlm@46
|
13652
|
rlm@46
|
13653
|
rlm@46
|
13654 setCurrentSize : function(size){
|
rlm@46
|
13655 var oldAnimate = this.animate;
|
rlm@46
|
13656 this.animate = false;
|
rlm@46
|
13657 this.adapter.setElementSize(this, size);
|
rlm@46
|
13658 this.animate = oldAnimate;
|
rlm@46
|
13659 },
|
rlm@46
|
13660
|
rlm@46
|
13661
|
rlm@46
|
13662 destroy : function(removeEl){
|
rlm@46
|
13663 if(this.shim){
|
rlm@46
|
13664 this.shim.remove();
|
rlm@46
|
13665 }
|
rlm@46
|
13666 this.dd.unreg();
|
rlm@46
|
13667 Ext.removeNode(this.proxy);
|
rlm@46
|
13668 if(removeEl){
|
rlm@46
|
13669 this.el.remove();
|
rlm@46
|
13670 }
|
rlm@46
|
13671 }
|
rlm@46
|
13672 });
|
rlm@46
|
13673
|
rlm@46
|
13674
|
rlm@46
|
13675 Ext.SplitBar.createProxy = function(dir){
|
rlm@46
|
13676 var proxy = new Ext.Element(document.createElement("div"));
|
rlm@46
|
13677 proxy.unselectable();
|
rlm@46
|
13678 var cls = 'x-splitbar-proxy';
|
rlm@46
|
13679 proxy.addClass(cls + ' ' + (dir == Ext.SplitBar.HORIZONTAL ? cls +'-h' : cls + '-v'));
|
rlm@46
|
13680 document.body.appendChild(proxy.dom);
|
rlm@46
|
13681 return proxy.dom;
|
rlm@46
|
13682 };
|
rlm@46
|
13683
|
rlm@46
|
13684
|
rlm@46
|
13685 Ext.SplitBar.BasicLayoutAdapter = function(){
|
rlm@46
|
13686 };
|
rlm@46
|
13687
|
rlm@46
|
13688 Ext.SplitBar.BasicLayoutAdapter.prototype = {
|
rlm@46
|
13689
|
rlm@46
|
13690 init : function(s){
|
rlm@46
|
13691
|
rlm@46
|
13692 },
|
rlm@46
|
13693
|
rlm@46
|
13694 getElementSize : function(s){
|
rlm@46
|
13695 if(s.orientation == Ext.SplitBar.HORIZONTAL){
|
rlm@46
|
13696 return s.resizingEl.getWidth();
|
rlm@46
|
13697 }else{
|
rlm@46
|
13698 return s.resizingEl.getHeight();
|
rlm@46
|
13699 }
|
rlm@46
|
13700 },
|
rlm@46
|
13701
|
rlm@46
|
13702
|
rlm@46
|
13703 setElementSize : function(s, newSize, onComplete){
|
rlm@46
|
13704 if(s.orientation == Ext.SplitBar.HORIZONTAL){
|
rlm@46
|
13705 if(!s.animate){
|
rlm@46
|
13706 s.resizingEl.setWidth(newSize);
|
rlm@46
|
13707 if(onComplete){
|
rlm@46
|
13708 onComplete(s, newSize);
|
rlm@46
|
13709 }
|
rlm@46
|
13710 }else{
|
rlm@46
|
13711 s.resizingEl.setWidth(newSize, true, .1, onComplete, 'easeOut');
|
rlm@46
|
13712 }
|
rlm@46
|
13713 }else{
|
rlm@46
|
13714
|
rlm@46
|
13715 if(!s.animate){
|
rlm@46
|
13716 s.resizingEl.setHeight(newSize);
|
rlm@46
|
13717 if(onComplete){
|
rlm@46
|
13718 onComplete(s, newSize);
|
rlm@46
|
13719 }
|
rlm@46
|
13720 }else{
|
rlm@46
|
13721 s.resizingEl.setHeight(newSize, true, .1, onComplete, 'easeOut');
|
rlm@46
|
13722 }
|
rlm@46
|
13723 }
|
rlm@46
|
13724 }
|
rlm@46
|
13725 };
|
rlm@46
|
13726
|
rlm@46
|
13727
|
rlm@46
|
13728 Ext.SplitBar.AbsoluteLayoutAdapter = function(container){
|
rlm@46
|
13729 this.basic = new Ext.SplitBar.BasicLayoutAdapter();
|
rlm@46
|
13730 this.container = Ext.get(container);
|
rlm@46
|
13731 };
|
rlm@46
|
13732
|
rlm@46
|
13733 Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {
|
rlm@46
|
13734 init : function(s){
|
rlm@46
|
13735 this.basic.init(s);
|
rlm@46
|
13736 },
|
rlm@46
|
13737
|
rlm@46
|
13738 getElementSize : function(s){
|
rlm@46
|
13739 return this.basic.getElementSize(s);
|
rlm@46
|
13740 },
|
rlm@46
|
13741
|
rlm@46
|
13742 setElementSize : function(s, newSize, onComplete){
|
rlm@46
|
13743 this.basic.setElementSize(s, newSize, this.moveSplitter.createDelegate(this, [s]));
|
rlm@46
|
13744 },
|
rlm@46
|
13745
|
rlm@46
|
13746 moveSplitter : function(s){
|
rlm@46
|
13747 var yes = Ext.SplitBar;
|
rlm@46
|
13748 switch(s.placement){
|
rlm@46
|
13749 case yes.LEFT:
|
rlm@46
|
13750 s.el.setX(s.resizingEl.getRight());
|
rlm@46
|
13751 break;
|
rlm@46
|
13752 case yes.RIGHT:
|
rlm@46
|
13753 s.el.setStyle("right", (this.container.getWidth() - s.resizingEl.getLeft()) + "px");
|
rlm@46
|
13754 break;
|
rlm@46
|
13755 case yes.TOP:
|
rlm@46
|
13756 s.el.setY(s.resizingEl.getBottom());
|
rlm@46
|
13757 break;
|
rlm@46
|
13758 case yes.BOTTOM:
|
rlm@46
|
13759 s.el.setY(s.resizingEl.getTop() - s.el.getHeight());
|
rlm@46
|
13760 break;
|
rlm@46
|
13761 }
|
rlm@46
|
13762 }
|
rlm@46
|
13763 };
|
rlm@46
|
13764
|
rlm@46
|
13765
|
rlm@46
|
13766 Ext.SplitBar.VERTICAL = 1;
|
rlm@46
|
13767
|
rlm@46
|
13768
|
rlm@46
|
13769 Ext.SplitBar.HORIZONTAL = 2;
|
rlm@46
|
13770
|
rlm@46
|
13771
|
rlm@46
|
13772 Ext.SplitBar.LEFT = 1;
|
rlm@46
|
13773
|
rlm@46
|
13774
|
rlm@46
|
13775 Ext.SplitBar.RIGHT = 2;
|
rlm@46
|
13776
|
rlm@46
|
13777
|
rlm@46
|
13778 Ext.SplitBar.TOP = 3;
|
rlm@46
|
13779
|
rlm@46
|
13780
|
rlm@46
|
13781 Ext.SplitBar.BOTTOM = 4;
|
rlm@46
|
13782
|
rlm@46
|
13783
|
rlm@46
|
13784 Ext.Container = Ext.extend(Ext.BoxComponent, {
|
rlm@46
|
13785
|
rlm@46
|
13786
|
rlm@46
|
13787
|
rlm@46
|
13788
|
rlm@46
|
13789
|
rlm@46
|
13790
|
rlm@46
|
13791
|
rlm@46
|
13792
|
rlm@46
|
13793
|
rlm@46
|
13794 autoDestroy: true,
|
rlm@46
|
13795
|
rlm@46
|
13796
|
rlm@46
|
13797 defaultType: 'panel',
|
rlm@46
|
13798
|
rlm@46
|
13799 initComponent : function(){
|
rlm@46
|
13800 Ext.Container.superclass.initComponent.call(this);
|
rlm@46
|
13801
|
rlm@46
|
13802 this.addEvents(
|
rlm@46
|
13803
|
rlm@46
|
13804 'afterlayout',
|
rlm@46
|
13805
|
rlm@46
|
13806 'beforeadd',
|
rlm@46
|
13807
|
rlm@46
|
13808 'beforeremove',
|
rlm@46
|
13809
|
rlm@46
|
13810 'add',
|
rlm@46
|
13811
|
rlm@46
|
13812 'remove'
|
rlm@46
|
13813 );
|
rlm@46
|
13814
|
rlm@46
|
13815
|
rlm@46
|
13816 var items = this.items;
|
rlm@46
|
13817 if(items){
|
rlm@46
|
13818 delete this.items;
|
rlm@46
|
13819 if(Ext.isArray(items)){
|
rlm@46
|
13820 this.add.apply(this, items);
|
rlm@46
|
13821 }else{
|
rlm@46
|
13822 this.add(items);
|
rlm@46
|
13823 }
|
rlm@46
|
13824 }
|
rlm@46
|
13825 },
|
rlm@46
|
13826
|
rlm@46
|
13827 initItems : function(){
|
rlm@46
|
13828 if(!this.items){
|
rlm@46
|
13829 this.items = new Ext.util.MixedCollection(false, this.getComponentId);
|
rlm@46
|
13830 this.getLayout(); }
|
rlm@46
|
13831 },
|
rlm@46
|
13832
|
rlm@46
|
13833 setLayout : function(layout){
|
rlm@46
|
13834 if(this.layout && this.layout != layout){
|
rlm@46
|
13835 this.layout.setContainer(null);
|
rlm@46
|
13836 }
|
rlm@46
|
13837 this.initItems();
|
rlm@46
|
13838 this.layout = layout;
|
rlm@46
|
13839 layout.setContainer(this);
|
rlm@46
|
13840 },
|
rlm@46
|
13841
|
rlm@46
|
13842 render : function(){
|
rlm@46
|
13843 Ext.Container.superclass.render.apply(this, arguments);
|
rlm@46
|
13844 if(this.layout){
|
rlm@46
|
13845 if(typeof this.layout == 'string'){
|
rlm@46
|
13846 this.layout = new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig);
|
rlm@46
|
13847 }
|
rlm@46
|
13848 this.setLayout(this.layout);
|
rlm@46
|
13849
|
rlm@46
|
13850 if(this.activeItem !== undefined){
|
rlm@46
|
13851 var item = this.activeItem;
|
rlm@46
|
13852 delete this.activeItem;
|
rlm@46
|
13853 this.layout.setActiveItem(item);
|
rlm@46
|
13854 return;
|
rlm@46
|
13855 }
|
rlm@46
|
13856 }
|
rlm@46
|
13857 if(!this.ownerCt){
|
rlm@46
|
13858 this.doLayout();
|
rlm@46
|
13859 }
|
rlm@46
|
13860 if(this.monitorResize === true){
|
rlm@46
|
13861 Ext.EventManager.onWindowResize(this.doLayout, this, [false]);
|
rlm@46
|
13862 }
|
rlm@46
|
13863 },
|
rlm@46
|
13864
|
rlm@46
|
13865 getLayoutTarget : function(){
|
rlm@46
|
13866 return this.el;
|
rlm@46
|
13867 },
|
rlm@46
|
13868
|
rlm@46
|
13869 getComponentId : function(comp){
|
rlm@46
|
13870 return comp.itemId || comp.id;
|
rlm@46
|
13871 },
|
rlm@46
|
13872
|
rlm@46
|
13873
|
rlm@46
|
13874 add : function(comp){
|
rlm@46
|
13875 if(!this.items){
|
rlm@46
|
13876 this.initItems();
|
rlm@46
|
13877 }
|
rlm@46
|
13878 var a = arguments, len = a.length;
|
rlm@46
|
13879 if(len > 1){
|
rlm@46
|
13880 for(var i = 0; i < len; i++) {
|
rlm@46
|
13881 this.add(a[i]);
|
rlm@46
|
13882 }
|
rlm@46
|
13883 return;
|
rlm@46
|
13884 }
|
rlm@46
|
13885 var c = this.lookupComponent(this.applyDefaults(comp));
|
rlm@46
|
13886 var pos = this.items.length;
|
rlm@46
|
13887 if(this.fireEvent('beforeadd', this, c, pos) !== false && this.onBeforeAdd(c) !== false){
|
rlm@46
|
13888 this.items.add(c);
|
rlm@46
|
13889 c.ownerCt = this;
|
rlm@46
|
13890 this.fireEvent('add', this, c, pos);
|
rlm@46
|
13891 }
|
rlm@46
|
13892 return c;
|
rlm@46
|
13893 },
|
rlm@46
|
13894
|
rlm@46
|
13895
|
rlm@46
|
13896 insert : function(index, comp){
|
rlm@46
|
13897 if(!this.items){
|
rlm@46
|
13898 this.initItems();
|
rlm@46
|
13899 }
|
rlm@46
|
13900 var a = arguments, len = a.length;
|
rlm@46
|
13901 if(len > 2){
|
rlm@46
|
13902 for(var i = len-1; i >= 1; --i) {
|
rlm@46
|
13903 this.insert(index, a[i]);
|
rlm@46
|
13904 }
|
rlm@46
|
13905 return;
|
rlm@46
|
13906 }
|
rlm@46
|
13907 var c = this.lookupComponent(this.applyDefaults(comp));
|
rlm@46
|
13908
|
rlm@46
|
13909 if(c.ownerCt == this && this.items.indexOf(c) < index){
|
rlm@46
|
13910 --index;
|
rlm@46
|
13911 }
|
rlm@46
|
13912
|
rlm@46
|
13913 if(this.fireEvent('beforeadd', this, c, index) !== false && this.onBeforeAdd(c) !== false){
|
rlm@46
|
13914 this.items.insert(index, c);
|
rlm@46
|
13915 c.ownerCt = this;
|
rlm@46
|
13916 this.fireEvent('add', this, c, index);
|
rlm@46
|
13917 }
|
rlm@46
|
13918 return c;
|
rlm@46
|
13919 },
|
rlm@46
|
13920
|
rlm@46
|
13921 applyDefaults : function(c){
|
rlm@46
|
13922 if(this.defaults){
|
rlm@46
|
13923 if(typeof c == 'string'){
|
rlm@46
|
13924 c = Ext.ComponentMgr.get(c);
|
rlm@46
|
13925 Ext.apply(c, this.defaults);
|
rlm@46
|
13926 }else if(!c.events){
|
rlm@46
|
13927 Ext.applyIf(c, this.defaults);
|
rlm@46
|
13928 }else{
|
rlm@46
|
13929 Ext.apply(c, this.defaults);
|
rlm@46
|
13930 }
|
rlm@46
|
13931 }
|
rlm@46
|
13932 return c;
|
rlm@46
|
13933 },
|
rlm@46
|
13934
|
rlm@46
|
13935 onBeforeAdd : function(item){
|
rlm@46
|
13936 if(item.ownerCt){
|
rlm@46
|
13937 item.ownerCt.remove(item, false);
|
rlm@46
|
13938 }
|
rlm@46
|
13939 if(this.hideBorders === true){
|
rlm@46
|
13940 item.border = (item.border === true);
|
rlm@46
|
13941 }
|
rlm@46
|
13942 },
|
rlm@46
|
13943
|
rlm@46
|
13944
|
rlm@46
|
13945 remove : function(comp, autoDestroy){
|
rlm@46
|
13946 var c = this.getComponent(comp);
|
rlm@46
|
13947 if(c && this.fireEvent('beforeremove', this, c) !== false){
|
rlm@46
|
13948 this.items.remove(c);
|
rlm@46
|
13949 delete c.ownerCt;
|
rlm@46
|
13950 if(autoDestroy === true || (autoDestroy !== false && this.autoDestroy)){
|
rlm@46
|
13951 c.destroy();
|
rlm@46
|
13952 }
|
rlm@46
|
13953 if(this.layout && this.layout.activeItem == c){
|
rlm@46
|
13954 delete this.layout.activeItem;
|
rlm@46
|
13955 }
|
rlm@46
|
13956 this.fireEvent('remove', this, c);
|
rlm@46
|
13957 }
|
rlm@46
|
13958 return c;
|
rlm@46
|
13959 },
|
rlm@46
|
13960
|
rlm@46
|
13961
|
rlm@46
|
13962 getComponent : function(comp){
|
rlm@46
|
13963 if(typeof comp == 'object'){
|
rlm@46
|
13964 return comp;
|
rlm@46
|
13965 }
|
rlm@46
|
13966 return this.items.get(comp);
|
rlm@46
|
13967 },
|
rlm@46
|
13968
|
rlm@46
|
13969 lookupComponent : function(comp){
|
rlm@46
|
13970 if(typeof comp == 'string'){
|
rlm@46
|
13971 return Ext.ComponentMgr.get(comp);
|
rlm@46
|
13972 }else if(!comp.events){
|
rlm@46
|
13973 return this.createComponent(comp);
|
rlm@46
|
13974 }
|
rlm@46
|
13975 return comp;
|
rlm@46
|
13976 },
|
rlm@46
|
13977
|
rlm@46
|
13978 createComponent : function(config){
|
rlm@46
|
13979 return Ext.ComponentMgr.create(config, this.defaultType);
|
rlm@46
|
13980 },
|
rlm@46
|
13981
|
rlm@46
|
13982
|
rlm@46
|
13983 doLayout : function(shallow){
|
rlm@46
|
13984 if(this.rendered && this.layout){
|
rlm@46
|
13985 this.layout.layout();
|
rlm@46
|
13986 }
|
rlm@46
|
13987 if(shallow !== false && this.items){
|
rlm@46
|
13988 var cs = this.items.items;
|
rlm@46
|
13989 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
13990 var c = cs[i];
|
rlm@46
|
13991 if(c.doLayout){
|
rlm@46
|
13992 c.doLayout();
|
rlm@46
|
13993 }
|
rlm@46
|
13994 }
|
rlm@46
|
13995 }
|
rlm@46
|
13996 },
|
rlm@46
|
13997
|
rlm@46
|
13998
|
rlm@46
|
13999 getLayout : function(){
|
rlm@46
|
14000 if(!this.layout){
|
rlm@46
|
14001 var layout = new Ext.layout.ContainerLayout(this.layoutConfig);
|
rlm@46
|
14002 this.setLayout(layout);
|
rlm@46
|
14003 }
|
rlm@46
|
14004 return this.layout;
|
rlm@46
|
14005 },
|
rlm@46
|
14006
|
rlm@46
|
14007 onDestroy : function(){
|
rlm@46
|
14008 if(this.items){
|
rlm@46
|
14009 var cs = this.items.items;
|
rlm@46
|
14010 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
14011 Ext.destroy(cs[i]);
|
rlm@46
|
14012 }
|
rlm@46
|
14013 }
|
rlm@46
|
14014 if(this.monitorResize){
|
rlm@46
|
14015 Ext.EventManager.removeResizeListener(this.doLayout, this);
|
rlm@46
|
14016 }
|
rlm@46
|
14017 Ext.Container.superclass.onDestroy.call(this);
|
rlm@46
|
14018 },
|
rlm@46
|
14019
|
rlm@46
|
14020
|
rlm@46
|
14021 bubble : function(fn, scope, args){
|
rlm@46
|
14022 var p = this;
|
rlm@46
|
14023 while(p){
|
rlm@46
|
14024 if(fn.apply(scope || p, args || [p]) === false){
|
rlm@46
|
14025 break;
|
rlm@46
|
14026 }
|
rlm@46
|
14027 p = p.ownerCt;
|
rlm@46
|
14028 }
|
rlm@46
|
14029 },
|
rlm@46
|
14030
|
rlm@46
|
14031
|
rlm@46
|
14032 cascade : function(fn, scope, args){
|
rlm@46
|
14033 if(fn.apply(scope || this, args || [this]) !== false){
|
rlm@46
|
14034 if(this.items){
|
rlm@46
|
14035 var cs = this.items.items;
|
rlm@46
|
14036 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
14037 if(cs[i].cascade){
|
rlm@46
|
14038 cs[i].cascade(fn, scope, args);
|
rlm@46
|
14039 }else{
|
rlm@46
|
14040 fn.apply(scope || this, args || [cs[i]]);
|
rlm@46
|
14041 }
|
rlm@46
|
14042 }
|
rlm@46
|
14043 }
|
rlm@46
|
14044 }
|
rlm@46
|
14045 },
|
rlm@46
|
14046
|
rlm@46
|
14047
|
rlm@46
|
14048 findById : function(id){
|
rlm@46
|
14049 var m, ct = this;
|
rlm@46
|
14050 this.cascade(function(c){
|
rlm@46
|
14051 if(ct != c && c.id === id){
|
rlm@46
|
14052 m = c;
|
rlm@46
|
14053 return false;
|
rlm@46
|
14054 }
|
rlm@46
|
14055 });
|
rlm@46
|
14056 return m || null;
|
rlm@46
|
14057 },
|
rlm@46
|
14058
|
rlm@46
|
14059
|
rlm@46
|
14060 findByType : function(xtype){
|
rlm@46
|
14061 return typeof xtype == 'function' ?
|
rlm@46
|
14062 this.findBy(function(c){
|
rlm@46
|
14063 return c.constructor === xtype;
|
rlm@46
|
14064 }) :
|
rlm@46
|
14065 this.findBy(function(c){
|
rlm@46
|
14066 return c.constructor.xtype === xtype;
|
rlm@46
|
14067 });
|
rlm@46
|
14068 },
|
rlm@46
|
14069
|
rlm@46
|
14070
|
rlm@46
|
14071 find : function(prop, value){
|
rlm@46
|
14072 return this.findBy(function(c){
|
rlm@46
|
14073 return c[prop] === value;
|
rlm@46
|
14074 });
|
rlm@46
|
14075 },
|
rlm@46
|
14076
|
rlm@46
|
14077
|
rlm@46
|
14078 findBy : function(fn, scope){
|
rlm@46
|
14079 var m = [], ct = this;
|
rlm@46
|
14080 this.cascade(function(c){
|
rlm@46
|
14081 if(ct != c && fn.call(scope || c, c, ct) === true){
|
rlm@46
|
14082 m.push(c);
|
rlm@46
|
14083 }
|
rlm@46
|
14084 });
|
rlm@46
|
14085 return m;
|
rlm@46
|
14086 }
|
rlm@46
|
14087 });
|
rlm@46
|
14088
|
rlm@46
|
14089 Ext.Container.LAYOUTS = {};
|
rlm@46
|
14090 Ext.reg('container', Ext.Container);
|
rlm@46
|
14091
|
rlm@46
|
14092 Ext.layout.ContainerLayout = function(config){
|
rlm@46
|
14093 Ext.apply(this, config);
|
rlm@46
|
14094 };
|
rlm@46
|
14095
|
rlm@46
|
14096 Ext.layout.ContainerLayout.prototype = {
|
rlm@46
|
14097
|
rlm@46
|
14098
|
rlm@46
|
14099
|
rlm@46
|
14100
|
rlm@46
|
14101
|
rlm@46
|
14102 monitorResize:false,
|
rlm@46
|
14103 activeItem : null,
|
rlm@46
|
14104
|
rlm@46
|
14105 layout : function(){
|
rlm@46
|
14106 var target = this.container.getLayoutTarget();
|
rlm@46
|
14107 this.onLayout(this.container, target);
|
rlm@46
|
14108 this.container.fireEvent('afterlayout', this.container, this);
|
rlm@46
|
14109 },
|
rlm@46
|
14110
|
rlm@46
|
14111 onLayout : function(ct, target){
|
rlm@46
|
14112 this.renderAll(ct, target);
|
rlm@46
|
14113 },
|
rlm@46
|
14114
|
rlm@46
|
14115 isValidParent : function(c, target){
|
rlm@46
|
14116 var el = c.getPositionEl ? c.getPositionEl() : c.getEl();
|
rlm@46
|
14117 return el.dom.parentNode == target.dom;
|
rlm@46
|
14118 },
|
rlm@46
|
14119
|
rlm@46
|
14120 renderAll : function(ct, target){
|
rlm@46
|
14121 var items = ct.items.items;
|
rlm@46
|
14122 for(var i = 0, len = items.length; i < len; i++) {
|
rlm@46
|
14123 var c = items[i];
|
rlm@46
|
14124 if(c && (!c.rendered || !this.isValidParent(c, target))){
|
rlm@46
|
14125 this.renderItem(c, i, target);
|
rlm@46
|
14126 }
|
rlm@46
|
14127 }
|
rlm@46
|
14128 },
|
rlm@46
|
14129
|
rlm@46
|
14130 renderItem : function(c, position, target){
|
rlm@46
|
14131 if(c && !c.rendered){
|
rlm@46
|
14132 c.render(target, position);
|
rlm@46
|
14133 if(this.extraCls){
|
rlm@46
|
14134 var t = c.getPositionEl ? c.getPositionEl() : c;
|
rlm@46
|
14135 t.addClass(this.extraCls);
|
rlm@46
|
14136 }
|
rlm@46
|
14137 if (this.renderHidden && c != this.activeItem) {
|
rlm@46
|
14138 c.hide();
|
rlm@46
|
14139 }
|
rlm@46
|
14140 }else if(c && !this.isValidParent(c, target)){
|
rlm@46
|
14141 if(this.extraCls){
|
rlm@46
|
14142 c.addClass(this.extraCls);
|
rlm@46
|
14143 }
|
rlm@46
|
14144 if(typeof position == 'number'){
|
rlm@46
|
14145 position = target.dom.childNodes[position];
|
rlm@46
|
14146 }
|
rlm@46
|
14147 target.dom.insertBefore(c.getEl().dom, position || null);
|
rlm@46
|
14148 if (this.renderHidden && c != this.activeItem) {
|
rlm@46
|
14149 c.hide();
|
rlm@46
|
14150 }
|
rlm@46
|
14151 }
|
rlm@46
|
14152 },
|
rlm@46
|
14153
|
rlm@46
|
14154 onResize: function(){
|
rlm@46
|
14155 if(this.container.collapsed){
|
rlm@46
|
14156 return;
|
rlm@46
|
14157 }
|
rlm@46
|
14158 var b = this.container.bufferResize;
|
rlm@46
|
14159 if(b){
|
rlm@46
|
14160 if(!this.resizeTask){
|
rlm@46
|
14161 this.resizeTask = new Ext.util.DelayedTask(this.layout, this);
|
rlm@46
|
14162 this.resizeBuffer = typeof b == 'number' ? b : 100;
|
rlm@46
|
14163 }
|
rlm@46
|
14164 this.resizeTask.delay(this.resizeBuffer);
|
rlm@46
|
14165 }else{
|
rlm@46
|
14166 this.layout();
|
rlm@46
|
14167 }
|
rlm@46
|
14168 },
|
rlm@46
|
14169
|
rlm@46
|
14170 setContainer : function(ct){
|
rlm@46
|
14171 if(this.monitorResize && ct != this.container){
|
rlm@46
|
14172 if(this.container){
|
rlm@46
|
14173 this.container.un('resize', this.onResize, this);
|
rlm@46
|
14174 }
|
rlm@46
|
14175 if(ct){
|
rlm@46
|
14176 ct.on('resize', this.onResize, this);
|
rlm@46
|
14177 }
|
rlm@46
|
14178 }
|
rlm@46
|
14179 this.container = ct;
|
rlm@46
|
14180 },
|
rlm@46
|
14181
|
rlm@46
|
14182 parseMargins : function(v){
|
rlm@46
|
14183 var ms = v.split(' ');
|
rlm@46
|
14184 var len = ms.length;
|
rlm@46
|
14185 if(len == 1){
|
rlm@46
|
14186 ms[1] = ms[0];
|
rlm@46
|
14187 ms[2] = ms[0];
|
rlm@46
|
14188 ms[3] = ms[0];
|
rlm@46
|
14189 }
|
rlm@46
|
14190 if(len == 2){
|
rlm@46
|
14191 ms[2] = ms[0];
|
rlm@46
|
14192 ms[3] = ms[1];
|
rlm@46
|
14193 }
|
rlm@46
|
14194 return {
|
rlm@46
|
14195 top:parseInt(ms[0], 10) || 0,
|
rlm@46
|
14196 right:parseInt(ms[1], 10) || 0,
|
rlm@46
|
14197 bottom:parseInt(ms[2], 10) || 0,
|
rlm@46
|
14198 left:parseInt(ms[3], 10) || 0
|
rlm@46
|
14199 };
|
rlm@46
|
14200 }
|
rlm@46
|
14201 };
|
rlm@46
|
14202 Ext.Container.LAYOUTS['auto'] = Ext.layout.ContainerLayout;
|
rlm@46
|
14203
|
rlm@46
|
14204 Ext.layout.FitLayout = Ext.extend(Ext.layout.ContainerLayout, {
|
rlm@46
|
14205
|
rlm@46
|
14206 monitorResize:true,
|
rlm@46
|
14207
|
rlm@46
|
14208
|
rlm@46
|
14209 onLayout : function(ct, target){
|
rlm@46
|
14210 Ext.layout.FitLayout.superclass.onLayout.call(this, ct, target);
|
rlm@46
|
14211 if(!this.container.collapsed){
|
rlm@46
|
14212 this.setItemSize(this.activeItem || ct.items.itemAt(0), target.getStyleSize());
|
rlm@46
|
14213 }
|
rlm@46
|
14214 },
|
rlm@46
|
14215
|
rlm@46
|
14216
|
rlm@46
|
14217 setItemSize : function(item, size){
|
rlm@46
|
14218 if(item && size.height > 0){
|
rlm@46
|
14219 item.setSize(size);
|
rlm@46
|
14220 }
|
rlm@46
|
14221 }
|
rlm@46
|
14222 });
|
rlm@46
|
14223 Ext.Container.LAYOUTS['fit'] = Ext.layout.FitLayout;
|
rlm@46
|
14224
|
rlm@46
|
14225 Ext.layout.CardLayout = Ext.extend(Ext.layout.FitLayout, {
|
rlm@46
|
14226
|
rlm@46
|
14227 deferredRender : false,
|
rlm@46
|
14228
|
rlm@46
|
14229
|
rlm@46
|
14230 renderHidden : true,
|
rlm@46
|
14231
|
rlm@46
|
14232
|
rlm@46
|
14233 setActiveItem : function(item){
|
rlm@46
|
14234 item = this.container.getComponent(item);
|
rlm@46
|
14235 if(this.activeItem != item){
|
rlm@46
|
14236 if(this.activeItem){
|
rlm@46
|
14237 this.activeItem.hide();
|
rlm@46
|
14238 }
|
rlm@46
|
14239 this.activeItem = item;
|
rlm@46
|
14240 item.show();
|
rlm@46
|
14241 this.layout();
|
rlm@46
|
14242 }
|
rlm@46
|
14243 },
|
rlm@46
|
14244
|
rlm@46
|
14245
|
rlm@46
|
14246 renderAll : function(ct, target){
|
rlm@46
|
14247 if(this.deferredRender){
|
rlm@46
|
14248 this.renderItem(this.activeItem, undefined, target);
|
rlm@46
|
14249 }else{
|
rlm@46
|
14250 Ext.layout.CardLayout.superclass.renderAll.call(this, ct, target);
|
rlm@46
|
14251 }
|
rlm@46
|
14252 }
|
rlm@46
|
14253 });
|
rlm@46
|
14254 Ext.Container.LAYOUTS['card'] = Ext.layout.CardLayout;
|
rlm@46
|
14255
|
rlm@46
|
14256 Ext.layout.AnchorLayout = Ext.extend(Ext.layout.ContainerLayout, {
|
rlm@46
|
14257
|
rlm@46
|
14258 monitorResize:true,
|
rlm@46
|
14259
|
rlm@46
|
14260
|
rlm@46
|
14261 getAnchorViewSize : function(ct, target){
|
rlm@46
|
14262 return target.dom == document.body ?
|
rlm@46
|
14263 target.getViewSize() : target.getStyleSize();
|
rlm@46
|
14264 },
|
rlm@46
|
14265
|
rlm@46
|
14266
|
rlm@46
|
14267 onLayout : function(ct, target){
|
rlm@46
|
14268 Ext.layout.AnchorLayout.superclass.onLayout.call(this, ct, target);
|
rlm@46
|
14269
|
rlm@46
|
14270 var size = this.getAnchorViewSize(ct, target);
|
rlm@46
|
14271
|
rlm@46
|
14272 var w = size.width, h = size.height;
|
rlm@46
|
14273
|
rlm@46
|
14274 if(w < 20 || h < 20){
|
rlm@46
|
14275 return;
|
rlm@46
|
14276 }
|
rlm@46
|
14277
|
rlm@46
|
14278
|
rlm@46
|
14279 var aw, ah;
|
rlm@46
|
14280 if(ct.anchorSize){
|
rlm@46
|
14281 if(typeof ct.anchorSize == 'number'){
|
rlm@46
|
14282 aw = ct.anchorSize;
|
rlm@46
|
14283 }else{
|
rlm@46
|
14284 aw = ct.anchorSize.width;
|
rlm@46
|
14285 ah = ct.anchorSize.height;
|
rlm@46
|
14286 }
|
rlm@46
|
14287 }else{
|
rlm@46
|
14288 aw = ct.initialConfig.width;
|
rlm@46
|
14289 ah = ct.initialConfig.height;
|
rlm@46
|
14290 }
|
rlm@46
|
14291
|
rlm@46
|
14292 var cs = ct.items.items, len = cs.length, i, c, a, cw, ch;
|
rlm@46
|
14293 for(i = 0; i < len; i++){
|
rlm@46
|
14294 c = cs[i];
|
rlm@46
|
14295 if(c.anchor){
|
rlm@46
|
14296 a = c.anchorSpec;
|
rlm@46
|
14297 if(!a){
|
rlm@46
|
14298 var vs = c.anchor.split(' ');
|
rlm@46
|
14299 c.anchorSpec = a = {
|
rlm@46
|
14300 right: this.parseAnchor(vs[0], c.initialConfig.width, aw),
|
rlm@46
|
14301 bottom: this.parseAnchor(vs[1], c.initialConfig.height, ah)
|
rlm@46
|
14302 };
|
rlm@46
|
14303 }
|
rlm@46
|
14304 cw = a.right ? this.adjustWidthAnchor(a.right(w), c) : undefined;
|
rlm@46
|
14305 ch = a.bottom ? this.adjustHeightAnchor(a.bottom(h), c) : undefined;
|
rlm@46
|
14306
|
rlm@46
|
14307 if(cw || ch){
|
rlm@46
|
14308 c.setSize(cw || undefined, ch || undefined);
|
rlm@46
|
14309 }
|
rlm@46
|
14310 }
|
rlm@46
|
14311 }
|
rlm@46
|
14312 },
|
rlm@46
|
14313
|
rlm@46
|
14314
|
rlm@46
|
14315 parseAnchor : function(a, start, cstart){
|
rlm@46
|
14316 if(a && a != 'none'){
|
rlm@46
|
14317 var last;
|
rlm@46
|
14318 if(/^(r|right|b|bottom)$/i.test(a)){
|
rlm@46
|
14319 var diff = cstart - start;
|
rlm@46
|
14320 return function(v){
|
rlm@46
|
14321 if(v !== last){
|
rlm@46
|
14322 last = v;
|
rlm@46
|
14323 return v - diff;
|
rlm@46
|
14324 }
|
rlm@46
|
14325 }
|
rlm@46
|
14326 }else if(a.indexOf('%') != -1){
|
rlm@46
|
14327 var ratio = parseFloat(a.replace('%', ''))*.01;
|
rlm@46
|
14328 return function(v){
|
rlm@46
|
14329 if(v !== last){
|
rlm@46
|
14330 last = v;
|
rlm@46
|
14331 return Math.floor(v*ratio);
|
rlm@46
|
14332 }
|
rlm@46
|
14333 }
|
rlm@46
|
14334 }else{
|
rlm@46
|
14335 a = parseInt(a, 10);
|
rlm@46
|
14336 if(!isNaN(a)){
|
rlm@46
|
14337 return function(v){
|
rlm@46
|
14338 if(v !== last){
|
rlm@46
|
14339 last = v;
|
rlm@46
|
14340 return v + a;
|
rlm@46
|
14341 }
|
rlm@46
|
14342 }
|
rlm@46
|
14343 }
|
rlm@46
|
14344 }
|
rlm@46
|
14345 }
|
rlm@46
|
14346 return false;
|
rlm@46
|
14347 },
|
rlm@46
|
14348
|
rlm@46
|
14349
|
rlm@46
|
14350 adjustWidthAnchor : function(value, comp){
|
rlm@46
|
14351 return value;
|
rlm@46
|
14352 },
|
rlm@46
|
14353
|
rlm@46
|
14354
|
rlm@46
|
14355 adjustHeightAnchor : function(value, comp){
|
rlm@46
|
14356 return value;
|
rlm@46
|
14357 }
|
rlm@46
|
14358
|
rlm@46
|
14359
|
rlm@46
|
14360 });
|
rlm@46
|
14361 Ext.Container.LAYOUTS['anchor'] = Ext.layout.AnchorLayout;
|
rlm@46
|
14362
|
rlm@46
|
14363 Ext.layout.ColumnLayout = Ext.extend(Ext.layout.ContainerLayout, {
|
rlm@46
|
14364
|
rlm@46
|
14365 monitorResize:true,
|
rlm@46
|
14366
|
rlm@46
|
14367 extraCls: 'x-column',
|
rlm@46
|
14368
|
rlm@46
|
14369 scrollOffset : 0,
|
rlm@46
|
14370
|
rlm@46
|
14371
|
rlm@46
|
14372 isValidParent : function(c, target){
|
rlm@46
|
14373 return c.getEl().dom.parentNode == this.innerCt.dom;
|
rlm@46
|
14374 },
|
rlm@46
|
14375
|
rlm@46
|
14376
|
rlm@46
|
14377 onLayout : function(ct, target){
|
rlm@46
|
14378 var cs = ct.items.items, len = cs.length, c, i;
|
rlm@46
|
14379
|
rlm@46
|
14380 if(!this.innerCt){
|
rlm@46
|
14381 target.addClass('x-column-layout-ct');
|
rlm@46
|
14382
|
rlm@46
|
14383
|
rlm@46
|
14384
|
rlm@46
|
14385 this.innerCt = target.createChild({cls:'x-column-inner'});
|
rlm@46
|
14386 this.innerCt.createChild({cls:'x-clear'});
|
rlm@46
|
14387 }
|
rlm@46
|
14388 this.renderAll(ct, this.innerCt);
|
rlm@46
|
14389
|
rlm@46
|
14390 var size = target.getViewSize();
|
rlm@46
|
14391
|
rlm@46
|
14392 if(size.width < 1 && size.height < 1){
|
rlm@46
|
14393 return;
|
rlm@46
|
14394 }
|
rlm@46
|
14395
|
rlm@46
|
14396 var w = size.width - target.getPadding('lr') - this.scrollOffset,
|
rlm@46
|
14397 h = size.height - target.getPadding('tb'),
|
rlm@46
|
14398 pw = w;
|
rlm@46
|
14399
|
rlm@46
|
14400 this.innerCt.setWidth(w);
|
rlm@46
|
14401
|
rlm@46
|
14402
|
rlm@46
|
14403
|
rlm@46
|
14404
|
rlm@46
|
14405 for(i = 0; i < len; i++){
|
rlm@46
|
14406 c = cs[i];
|
rlm@46
|
14407 if(!c.columnWidth){
|
rlm@46
|
14408 pw -= (c.getSize().width + c.getEl().getMargins('lr'));
|
rlm@46
|
14409 }
|
rlm@46
|
14410 }
|
rlm@46
|
14411
|
rlm@46
|
14412 pw = pw < 0 ? 0 : pw;
|
rlm@46
|
14413
|
rlm@46
|
14414 for(i = 0; i < len; i++){
|
rlm@46
|
14415 c = cs[i];
|
rlm@46
|
14416 if(c.columnWidth){
|
rlm@46
|
14417 c.setSize(Math.floor(c.columnWidth*pw) - c.getEl().getMargins('lr'));
|
rlm@46
|
14418 }
|
rlm@46
|
14419 }
|
rlm@46
|
14420 }
|
rlm@46
|
14421
|
rlm@46
|
14422
|
rlm@46
|
14423 });
|
rlm@46
|
14424
|
rlm@46
|
14425 Ext.Container.LAYOUTS['column'] = Ext.layout.ColumnLayout;
|
rlm@46
|
14426
|
rlm@46
|
14427 Ext.layout.BorderLayout = Ext.extend(Ext.layout.ContainerLayout, {
|
rlm@46
|
14428 monitorResize:true,
|
rlm@46
|
14429 rendered : false,
|
rlm@46
|
14430
|
rlm@46
|
14431 onLayout : function(ct, target){
|
rlm@46
|
14432 var collapsed;
|
rlm@46
|
14433 if(!this.rendered){
|
rlm@46
|
14434 target.position();
|
rlm@46
|
14435 target.addClass('x-border-layout-ct');
|
rlm@46
|
14436 var items = ct.items.items;
|
rlm@46
|
14437 collapsed = [];
|
rlm@46
|
14438 for(var i = 0, len = items.length; i < len; i++) {
|
rlm@46
|
14439 var c = items[i];
|
rlm@46
|
14440 var pos = c.region;
|
rlm@46
|
14441 if(c.collapsed){
|
rlm@46
|
14442 collapsed.push(c);
|
rlm@46
|
14443 }
|
rlm@46
|
14444 c.collapsed = false;
|
rlm@46
|
14445 if(!c.rendered){
|
rlm@46
|
14446 c.cls = c.cls ? c.cls +' x-border-panel' : 'x-border-panel';
|
rlm@46
|
14447 c.render(target, i);
|
rlm@46
|
14448 }
|
rlm@46
|
14449 this[pos] = pos != 'center' && c.split ?
|
rlm@46
|
14450 new Ext.layout.BorderLayout.SplitRegion(this, c.initialConfig, pos) :
|
rlm@46
|
14451 new Ext.layout.BorderLayout.Region(this, c.initialConfig, pos);
|
rlm@46
|
14452 this[pos].render(target, c);
|
rlm@46
|
14453 }
|
rlm@46
|
14454 this.rendered = true;
|
rlm@46
|
14455 }
|
rlm@46
|
14456
|
rlm@46
|
14457 var size = target.getViewSize();
|
rlm@46
|
14458 if(size.width < 20 || size.height < 20){ if(collapsed){
|
rlm@46
|
14459 this.restoreCollapsed = collapsed;
|
rlm@46
|
14460 }
|
rlm@46
|
14461 return;
|
rlm@46
|
14462 }else if(this.restoreCollapsed){
|
rlm@46
|
14463 collapsed = this.restoreCollapsed;
|
rlm@46
|
14464 delete this.restoreCollapsed;
|
rlm@46
|
14465 }
|
rlm@46
|
14466
|
rlm@46
|
14467 var w = size.width, h = size.height;
|
rlm@46
|
14468 var centerW = w, centerH = h, centerY = 0, centerX = 0;
|
rlm@46
|
14469
|
rlm@46
|
14470 var n = this.north, s = this.south, west = this.west, e = this.east, c = this.center;
|
rlm@46
|
14471 if(!c){
|
rlm@46
|
14472 throw 'No center region defined in BorderLayout ' + ct.id;
|
rlm@46
|
14473 }
|
rlm@46
|
14474
|
rlm@46
|
14475 if(n && n.isVisible()){
|
rlm@46
|
14476 var b = n.getSize();
|
rlm@46
|
14477 var m = n.getMargins();
|
rlm@46
|
14478 b.width = w - (m.left+m.right);
|
rlm@46
|
14479 b.x = m.left;
|
rlm@46
|
14480 b.y = m.top;
|
rlm@46
|
14481 centerY = b.height + b.y + m.bottom;
|
rlm@46
|
14482 centerH -= centerY;
|
rlm@46
|
14483 n.applyLayout(b);
|
rlm@46
|
14484 }
|
rlm@46
|
14485 if(s && s.isVisible()){
|
rlm@46
|
14486 var b = s.getSize();
|
rlm@46
|
14487 var m = s.getMargins();
|
rlm@46
|
14488 b.width = w - (m.left+m.right);
|
rlm@46
|
14489 b.x = m.left;
|
rlm@46
|
14490 var totalHeight = (b.height + m.top + m.bottom);
|
rlm@46
|
14491 b.y = h - totalHeight + m.top;
|
rlm@46
|
14492 centerH -= totalHeight;
|
rlm@46
|
14493 s.applyLayout(b);
|
rlm@46
|
14494 }
|
rlm@46
|
14495 if(west && west.isVisible()){
|
rlm@46
|
14496 var b = west.getSize();
|
rlm@46
|
14497 var m = west.getMargins();
|
rlm@46
|
14498 b.height = centerH - (m.top+m.bottom);
|
rlm@46
|
14499 b.x = m.left;
|
rlm@46
|
14500 b.y = centerY + m.top;
|
rlm@46
|
14501 var totalWidth = (b.width + m.left + m.right);
|
rlm@46
|
14502 centerX += totalWidth;
|
rlm@46
|
14503 centerW -= totalWidth;
|
rlm@46
|
14504 west.applyLayout(b);
|
rlm@46
|
14505 }
|
rlm@46
|
14506 if(e && e.isVisible()){
|
rlm@46
|
14507 var b = e.getSize();
|
rlm@46
|
14508 var m = e.getMargins();
|
rlm@46
|
14509 b.height = centerH - (m.top+m.bottom);
|
rlm@46
|
14510 var totalWidth = (b.width + m.left + m.right);
|
rlm@46
|
14511 b.x = w - totalWidth + m.left;
|
rlm@46
|
14512 b.y = centerY + m.top;
|
rlm@46
|
14513 centerW -= totalWidth;
|
rlm@46
|
14514 e.applyLayout(b);
|
rlm@46
|
14515 }
|
rlm@46
|
14516
|
rlm@46
|
14517 var m = c.getMargins();
|
rlm@46
|
14518 var centerBox = {
|
rlm@46
|
14519 x: centerX + m.left,
|
rlm@46
|
14520 y: centerY + m.top,
|
rlm@46
|
14521 width: centerW - (m.left+m.right),
|
rlm@46
|
14522 height: centerH - (m.top+m.bottom)
|
rlm@46
|
14523 };
|
rlm@46
|
14524 c.applyLayout(centerBox);
|
rlm@46
|
14525
|
rlm@46
|
14526 if(collapsed){
|
rlm@46
|
14527 for(var i = 0, len = collapsed.length; i < len; i++){
|
rlm@46
|
14528 collapsed[i].collapse(false);
|
rlm@46
|
14529 }
|
rlm@46
|
14530 }
|
rlm@46
|
14531
|
rlm@46
|
14532 if(Ext.isIE && Ext.isStrict){ target.repaint();
|
rlm@46
|
14533 }
|
rlm@46
|
14534 }
|
rlm@46
|
14535
|
rlm@46
|
14536
|
rlm@46
|
14537 });
|
rlm@46
|
14538
|
rlm@46
|
14539
|
rlm@46
|
14540 Ext.layout.BorderLayout.Region = function(layout, config, pos){
|
rlm@46
|
14541 Ext.apply(this, config);
|
rlm@46
|
14542 this.layout = layout;
|
rlm@46
|
14543 this.position = pos;
|
rlm@46
|
14544 this.state = {};
|
rlm@46
|
14545 if(typeof this.margins == 'string'){
|
rlm@46
|
14546 this.margins = this.layout.parseMargins(this.margins);
|
rlm@46
|
14547 }
|
rlm@46
|
14548 this.margins = Ext.applyIf(this.margins || {}, this.defaultMargins);
|
rlm@46
|
14549 if(this.collapsible){
|
rlm@46
|
14550 if(typeof this.cmargins == 'string'){
|
rlm@46
|
14551 this.cmargins = this.layout.parseMargins(this.cmargins);
|
rlm@46
|
14552 }
|
rlm@46
|
14553 if(this.collapseMode == 'mini' && !this.cmargins){
|
rlm@46
|
14554 this.cmargins = {left:0,top:0,right:0,bottom:0};
|
rlm@46
|
14555 }else{
|
rlm@46
|
14556 this.cmargins = Ext.applyIf(this.cmargins || {},
|
rlm@46
|
14557 pos == 'north' || pos == 'south' ? this.defaultNSCMargins : this.defaultEWCMargins);
|
rlm@46
|
14558 }
|
rlm@46
|
14559 }
|
rlm@46
|
14560 };
|
rlm@46
|
14561
|
rlm@46
|
14562 Ext.layout.BorderLayout.Region.prototype = {
|
rlm@46
|
14563
|
rlm@46
|
14564
|
rlm@46
|
14565
|
rlm@46
|
14566
|
rlm@46
|
14567
|
rlm@46
|
14568
|
rlm@46
|
14569
|
rlm@46
|
14570 collapsible : false,
|
rlm@46
|
14571
|
rlm@46
|
14572 split:false,
|
rlm@46
|
14573
|
rlm@46
|
14574 floatable: true,
|
rlm@46
|
14575
|
rlm@46
|
14576 minWidth:50,
|
rlm@46
|
14577
|
rlm@46
|
14578 minHeight:50,
|
rlm@46
|
14579
|
rlm@46
|
14580 defaultMargins : {left:0,top:0,right:0,bottom:0},
|
rlm@46
|
14581 defaultNSCMargins : {left:5,top:5,right:5,bottom:5},
|
rlm@46
|
14582 defaultEWCMargins : {left:5,top:0,right:5,bottom:0},
|
rlm@46
|
14583
|
rlm@46
|
14584
|
rlm@46
|
14585 isCollapsed : false,
|
rlm@46
|
14586
|
rlm@46
|
14587
|
rlm@46
|
14588
|
rlm@46
|
14589
|
rlm@46
|
14590
|
rlm@46
|
14591 render : function(ct, p){
|
rlm@46
|
14592 this.panel = p;
|
rlm@46
|
14593 p.el.enableDisplayMode();
|
rlm@46
|
14594 this.targetEl = ct;
|
rlm@46
|
14595 this.el = p.el;
|
rlm@46
|
14596
|
rlm@46
|
14597 var gs = p.getState, ps = this.position;
|
rlm@46
|
14598 p.getState = function(){
|
rlm@46
|
14599 return Ext.apply(gs.call(p) || {}, this.state);
|
rlm@46
|
14600 }.createDelegate(this);
|
rlm@46
|
14601
|
rlm@46
|
14602 if(ps != 'center'){
|
rlm@46
|
14603 p.allowQueuedExpand = false;
|
rlm@46
|
14604 p.on({
|
rlm@46
|
14605 beforecollapse: this.beforeCollapse,
|
rlm@46
|
14606 collapse: this.onCollapse,
|
rlm@46
|
14607 beforeexpand: this.beforeExpand,
|
rlm@46
|
14608 expand: this.onExpand,
|
rlm@46
|
14609 hide: this.onHide,
|
rlm@46
|
14610 show: this.onShow,
|
rlm@46
|
14611 scope: this
|
rlm@46
|
14612 });
|
rlm@46
|
14613 if(this.collapsible){
|
rlm@46
|
14614 p.collapseEl = 'el';
|
rlm@46
|
14615 p.slideAnchor = this.getSlideAnchor();
|
rlm@46
|
14616 }
|
rlm@46
|
14617 if(p.tools && p.tools.toggle){
|
rlm@46
|
14618 p.tools.toggle.addClass('x-tool-collapse-'+ps);
|
rlm@46
|
14619 p.tools.toggle.addClassOnOver('x-tool-collapse-'+ps+'-over');
|
rlm@46
|
14620 }
|
rlm@46
|
14621 }
|
rlm@46
|
14622 },
|
rlm@46
|
14623
|
rlm@46
|
14624 getCollapsedEl : function(){
|
rlm@46
|
14625 if(!this.collapsedEl){
|
rlm@46
|
14626 if(!this.toolTemplate){
|
rlm@46
|
14627 var tt = new Ext.Template(
|
rlm@46
|
14628 '<div class="x-tool x-tool-{id}"> </div>'
|
rlm@46
|
14629 );
|
rlm@46
|
14630 tt.disableFormats = true;
|
rlm@46
|
14631 tt.compile();
|
rlm@46
|
14632 Ext.layout.BorderLayout.Region.prototype.toolTemplate = tt;
|
rlm@46
|
14633 }
|
rlm@46
|
14634 this.collapsedEl = this.targetEl.createChild({
|
rlm@46
|
14635 cls: "x-layout-collapsed x-layout-collapsed-"+this.position,
|
rlm@46
|
14636 id: this.panel.id + '-xcollapsed'
|
rlm@46
|
14637 });
|
rlm@46
|
14638 this.collapsedEl.enableDisplayMode('block');
|
rlm@46
|
14639
|
rlm@46
|
14640 if(this.collapseMode == 'mini'){
|
rlm@46
|
14641 this.collapsedEl.addClass('x-layout-cmini-'+this.position);
|
rlm@46
|
14642 this.miniCollapsedEl = this.collapsedEl.createChild({
|
rlm@46
|
14643 cls: "x-layout-mini x-layout-mini-"+this.position, html: " "
|
rlm@46
|
14644 });
|
rlm@46
|
14645 this.miniCollapsedEl.addClassOnOver('x-layout-mini-over');
|
rlm@46
|
14646 this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
|
rlm@46
|
14647 this.collapsedEl.on('click', this.onExpandClick, this, {stopEvent:true});
|
rlm@46
|
14648 }else {
|
rlm@46
|
14649 var t = this.toolTemplate.append(
|
rlm@46
|
14650 this.collapsedEl.dom,
|
rlm@46
|
14651 {id:'expand-'+this.position}, true);
|
rlm@46
|
14652 t.addClassOnOver('x-tool-expand-'+this.position+'-over');
|
rlm@46
|
14653 t.on('click', this.onExpandClick, this, {stopEvent:true});
|
rlm@46
|
14654
|
rlm@46
|
14655 if(this.floatable !== false){
|
rlm@46
|
14656 this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
|
rlm@46
|
14657 this.collapsedEl.on("click", this.collapseClick, this);
|
rlm@46
|
14658 }
|
rlm@46
|
14659 }
|
rlm@46
|
14660 }
|
rlm@46
|
14661 return this.collapsedEl;
|
rlm@46
|
14662 },
|
rlm@46
|
14663
|
rlm@46
|
14664 onExpandClick : function(e){
|
rlm@46
|
14665 if(this.isSlid){
|
rlm@46
|
14666 this.afterSlideIn();
|
rlm@46
|
14667 this.panel.expand(false);
|
rlm@46
|
14668 }else{
|
rlm@46
|
14669 this.panel.expand();
|
rlm@46
|
14670 }
|
rlm@46
|
14671 },
|
rlm@46
|
14672
|
rlm@46
|
14673 onCollapseClick : function(e){
|
rlm@46
|
14674 this.panel.collapse();
|
rlm@46
|
14675 },
|
rlm@46
|
14676
|
rlm@46
|
14677 beforeCollapse : function(p, animate){
|
rlm@46
|
14678 this.lastAnim = animate;
|
rlm@46
|
14679 if(this.splitEl){
|
rlm@46
|
14680 this.splitEl.hide();
|
rlm@46
|
14681 }
|
rlm@46
|
14682 this.getCollapsedEl().show();
|
rlm@46
|
14683 this.panel.el.setStyle('z-index', 100);
|
rlm@46
|
14684 this.isCollapsed = true;
|
rlm@46
|
14685 this.layout.layout();
|
rlm@46
|
14686 },
|
rlm@46
|
14687
|
rlm@46
|
14688 onCollapse : function(animate){
|
rlm@46
|
14689 this.panel.el.setStyle('z-index', 1);
|
rlm@46
|
14690 if(this.lastAnim === false || this.panel.animCollapse === false){
|
rlm@46
|
14691 this.getCollapsedEl().dom.style.visibility = 'visible';
|
rlm@46
|
14692 }else{
|
rlm@46
|
14693 this.getCollapsedEl().slideIn(this.panel.slideAnchor, {duration:.2});
|
rlm@46
|
14694 }
|
rlm@46
|
14695 this.state.collapsed = true;
|
rlm@46
|
14696 this.panel.saveState();
|
rlm@46
|
14697 },
|
rlm@46
|
14698
|
rlm@46
|
14699 beforeExpand : function(animate){
|
rlm@46
|
14700 var c = this.getCollapsedEl();
|
rlm@46
|
14701 this.el.show();
|
rlm@46
|
14702 if(this.position == 'east' || this.position == 'west'){
|
rlm@46
|
14703 this.panel.setSize(undefined, c.getHeight());
|
rlm@46
|
14704 }else{
|
rlm@46
|
14705 this.panel.setSize(c.getWidth(), undefined);
|
rlm@46
|
14706 }
|
rlm@46
|
14707 c.hide();
|
rlm@46
|
14708 c.dom.style.visibility = 'hidden';
|
rlm@46
|
14709 this.panel.el.setStyle('z-index', 100);
|
rlm@46
|
14710 },
|
rlm@46
|
14711
|
rlm@46
|
14712 onExpand : function(){
|
rlm@46
|
14713 this.isCollapsed = false;
|
rlm@46
|
14714 if(this.splitEl){
|
rlm@46
|
14715 this.splitEl.show();
|
rlm@46
|
14716 }
|
rlm@46
|
14717 this.layout.layout();
|
rlm@46
|
14718 this.panel.el.setStyle('z-index', 1);
|
rlm@46
|
14719 this.state.collapsed = false;
|
rlm@46
|
14720 this.panel.saveState();
|
rlm@46
|
14721 },
|
rlm@46
|
14722
|
rlm@46
|
14723 collapseClick : function(e){
|
rlm@46
|
14724 if(this.isSlid){
|
rlm@46
|
14725 e.stopPropagation();
|
rlm@46
|
14726 this.slideIn();
|
rlm@46
|
14727 }else{
|
rlm@46
|
14728 e.stopPropagation();
|
rlm@46
|
14729 this.slideOut();
|
rlm@46
|
14730 }
|
rlm@46
|
14731 },
|
rlm@46
|
14732
|
rlm@46
|
14733 onHide : function(){
|
rlm@46
|
14734 if(this.isCollapsed){
|
rlm@46
|
14735 this.getCollapsedEl().hide();
|
rlm@46
|
14736 }else if(this.splitEl){
|
rlm@46
|
14737 this.splitEl.hide();
|
rlm@46
|
14738 }
|
rlm@46
|
14739 },
|
rlm@46
|
14740
|
rlm@46
|
14741 onShow : function(){
|
rlm@46
|
14742 if(this.isCollapsed){
|
rlm@46
|
14743 this.getCollapsedEl().show();
|
rlm@46
|
14744 }else if(this.splitEl){
|
rlm@46
|
14745 this.splitEl.show();
|
rlm@46
|
14746 }
|
rlm@46
|
14747 },
|
rlm@46
|
14748
|
rlm@46
|
14749
|
rlm@46
|
14750 isVisible : function(){
|
rlm@46
|
14751 return !this.panel.hidden;
|
rlm@46
|
14752 },
|
rlm@46
|
14753
|
rlm@46
|
14754
|
rlm@46
|
14755 getMargins : function(){
|
rlm@46
|
14756 return this.isCollapsed && this.cmargins ? this.cmargins : this.margins;
|
rlm@46
|
14757 },
|
rlm@46
|
14758
|
rlm@46
|
14759
|
rlm@46
|
14760 getSize : function(){
|
rlm@46
|
14761 return this.isCollapsed ? this.getCollapsedEl().getSize() : this.panel.getSize();
|
rlm@46
|
14762 },
|
rlm@46
|
14763
|
rlm@46
|
14764
|
rlm@46
|
14765 setPanel : function(panel){
|
rlm@46
|
14766 this.panel = panel;
|
rlm@46
|
14767 },
|
rlm@46
|
14768
|
rlm@46
|
14769
|
rlm@46
|
14770 getMinWidth: function(){
|
rlm@46
|
14771 return this.minWidth;
|
rlm@46
|
14772 },
|
rlm@46
|
14773
|
rlm@46
|
14774
|
rlm@46
|
14775 getMinHeight: function(){
|
rlm@46
|
14776 return this.minHeight;
|
rlm@46
|
14777 },
|
rlm@46
|
14778
|
rlm@46
|
14779 applyLayoutCollapsed : function(box){
|
rlm@46
|
14780 var ce = this.getCollapsedEl();
|
rlm@46
|
14781 ce.setLeftTop(box.x, box.y);
|
rlm@46
|
14782 ce.setSize(box.width, box.height);
|
rlm@46
|
14783 },
|
rlm@46
|
14784
|
rlm@46
|
14785 applyLayout : function(box){
|
rlm@46
|
14786 if(this.isCollapsed){
|
rlm@46
|
14787 this.applyLayoutCollapsed(box);
|
rlm@46
|
14788 }else{
|
rlm@46
|
14789 this.panel.setPosition(box.x, box.y);
|
rlm@46
|
14790 this.panel.setSize(box.width, box.height);
|
rlm@46
|
14791 }
|
rlm@46
|
14792 },
|
rlm@46
|
14793
|
rlm@46
|
14794 beforeSlide: function(){
|
rlm@46
|
14795 this.panel.beforeEffect();
|
rlm@46
|
14796 },
|
rlm@46
|
14797
|
rlm@46
|
14798 afterSlide : function(){
|
rlm@46
|
14799 this.panel.afterEffect();
|
rlm@46
|
14800 },
|
rlm@46
|
14801
|
rlm@46
|
14802 initAutoHide : function(){
|
rlm@46
|
14803 if(this.autoHide !== false){
|
rlm@46
|
14804 if(!this.autoHideHd){
|
rlm@46
|
14805 var st = new Ext.util.DelayedTask(this.slideIn, this);
|
rlm@46
|
14806 this.autoHideHd = {
|
rlm@46
|
14807 "mouseout": function(e){
|
rlm@46
|
14808 if(!e.within(this.el, true)){
|
rlm@46
|
14809 st.delay(500);
|
rlm@46
|
14810 }
|
rlm@46
|
14811 },
|
rlm@46
|
14812 "mouseover" : function(e){
|
rlm@46
|
14813 st.cancel();
|
rlm@46
|
14814 },
|
rlm@46
|
14815 scope : this
|
rlm@46
|
14816 };
|
rlm@46
|
14817 }
|
rlm@46
|
14818 this.el.on(this.autoHideHd);
|
rlm@46
|
14819 }
|
rlm@46
|
14820 },
|
rlm@46
|
14821
|
rlm@46
|
14822 clearAutoHide : function(){
|
rlm@46
|
14823 if(this.autoHide !== false){
|
rlm@46
|
14824 this.el.un("mouseout", this.autoHideHd.mouseout);
|
rlm@46
|
14825 this.el.un("mouseover", this.autoHideHd.mouseover);
|
rlm@46
|
14826 }
|
rlm@46
|
14827 },
|
rlm@46
|
14828
|
rlm@46
|
14829 clearMonitor : function(){
|
rlm@46
|
14830 Ext.getDoc().un("click", this.slideInIf, this);
|
rlm@46
|
14831 },
|
rlm@46
|
14832
|
rlm@46
|
14833 slideOut : function(){
|
rlm@46
|
14834 if(this.isSlid || this.el.hasActiveFx()){
|
rlm@46
|
14835 return;
|
rlm@46
|
14836 }
|
rlm@46
|
14837 this.isSlid = true;
|
rlm@46
|
14838 var ts = this.panel.tools;
|
rlm@46
|
14839 if(ts && ts.toggle){
|
rlm@46
|
14840 ts.toggle.hide();
|
rlm@46
|
14841 }
|
rlm@46
|
14842 this.el.show();
|
rlm@46
|
14843 if(this.position == 'east' || this.position == 'west'){
|
rlm@46
|
14844 this.panel.setSize(undefined, this.collapsedEl.getHeight());
|
rlm@46
|
14845 }else{
|
rlm@46
|
14846 this.panel.setSize(this.collapsedEl.getWidth(), undefined);
|
rlm@46
|
14847 }
|
rlm@46
|
14848 this.restoreLT = [this.el.dom.style.left, this.el.dom.style.top];
|
rlm@46
|
14849 this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
|
rlm@46
|
14850 this.el.setStyle("z-index", 102);
|
rlm@46
|
14851 if(this.animFloat !== false){
|
rlm@46
|
14852 this.beforeSlide();
|
rlm@46
|
14853 this.el.slideIn(this.getSlideAnchor(), {
|
rlm@46
|
14854 callback: function(){
|
rlm@46
|
14855 this.afterSlide();
|
rlm@46
|
14856 this.initAutoHide();
|
rlm@46
|
14857 Ext.getDoc().on("click", this.slideInIf, this);
|
rlm@46
|
14858 },
|
rlm@46
|
14859 scope: this,
|
rlm@46
|
14860 block: true
|
rlm@46
|
14861 });
|
rlm@46
|
14862 }else{
|
rlm@46
|
14863 this.initAutoHide();
|
rlm@46
|
14864 Ext.getDoc().on("click", this.slideInIf, this);
|
rlm@46
|
14865 }
|
rlm@46
|
14866 },
|
rlm@46
|
14867
|
rlm@46
|
14868 afterSlideIn : function(){
|
rlm@46
|
14869 this.clearAutoHide();
|
rlm@46
|
14870 this.isSlid = false;
|
rlm@46
|
14871 this.clearMonitor();
|
rlm@46
|
14872 this.el.setStyle("z-index", "");
|
rlm@46
|
14873 this.el.dom.style.left = this.restoreLT[0];
|
rlm@46
|
14874 this.el.dom.style.top = this.restoreLT[1];
|
rlm@46
|
14875
|
rlm@46
|
14876 var ts = this.panel.tools;
|
rlm@46
|
14877 if(ts && ts.toggle){
|
rlm@46
|
14878 ts.toggle.show();
|
rlm@46
|
14879 }
|
rlm@46
|
14880 },
|
rlm@46
|
14881
|
rlm@46
|
14882 slideIn : function(cb){
|
rlm@46
|
14883 if(!this.isSlid || this.el.hasActiveFx()){
|
rlm@46
|
14884 Ext.callback(cb);
|
rlm@46
|
14885 return;
|
rlm@46
|
14886 }
|
rlm@46
|
14887 this.isSlid = false;
|
rlm@46
|
14888 if(this.animFloat !== false){
|
rlm@46
|
14889 this.beforeSlide();
|
rlm@46
|
14890 this.el.slideOut(this.getSlideAnchor(), {
|
rlm@46
|
14891 callback: function(){
|
rlm@46
|
14892 this.el.hide();
|
rlm@46
|
14893 this.afterSlide();
|
rlm@46
|
14894 this.afterSlideIn();
|
rlm@46
|
14895 Ext.callback(cb);
|
rlm@46
|
14896 },
|
rlm@46
|
14897 scope: this,
|
rlm@46
|
14898 block: true
|
rlm@46
|
14899 });
|
rlm@46
|
14900 }else{
|
rlm@46
|
14901 this.el.hide();
|
rlm@46
|
14902 this.afterSlideIn();
|
rlm@46
|
14903 }
|
rlm@46
|
14904 },
|
rlm@46
|
14905
|
rlm@46
|
14906 slideInIf : function(e){
|
rlm@46
|
14907 if(!e.within(this.el)){
|
rlm@46
|
14908 this.slideIn();
|
rlm@46
|
14909 }
|
rlm@46
|
14910 },
|
rlm@46
|
14911
|
rlm@46
|
14912 anchors : {
|
rlm@46
|
14913 "west" : "left",
|
rlm@46
|
14914 "east" : "right",
|
rlm@46
|
14915 "north" : "top",
|
rlm@46
|
14916 "south" : "bottom"
|
rlm@46
|
14917 },
|
rlm@46
|
14918
|
rlm@46
|
14919 sanchors : {
|
rlm@46
|
14920 "west" : "l",
|
rlm@46
|
14921 "east" : "r",
|
rlm@46
|
14922 "north" : "t",
|
rlm@46
|
14923 "south" : "b"
|
rlm@46
|
14924 },
|
rlm@46
|
14925
|
rlm@46
|
14926 canchors : {
|
rlm@46
|
14927 "west" : "tl-tr",
|
rlm@46
|
14928 "east" : "tr-tl",
|
rlm@46
|
14929 "north" : "tl-bl",
|
rlm@46
|
14930 "south" : "bl-tl"
|
rlm@46
|
14931 },
|
rlm@46
|
14932
|
rlm@46
|
14933 getAnchor : function(){
|
rlm@46
|
14934 return this.anchors[this.position];
|
rlm@46
|
14935 },
|
rlm@46
|
14936
|
rlm@46
|
14937 getCollapseAnchor : function(){
|
rlm@46
|
14938 return this.canchors[this.position];
|
rlm@46
|
14939 },
|
rlm@46
|
14940
|
rlm@46
|
14941 getSlideAnchor : function(){
|
rlm@46
|
14942 return this.sanchors[this.position];
|
rlm@46
|
14943 },
|
rlm@46
|
14944
|
rlm@46
|
14945 getAlignAdj : function(){
|
rlm@46
|
14946 var cm = this.cmargins;
|
rlm@46
|
14947 switch(this.position){
|
rlm@46
|
14948 case "west":
|
rlm@46
|
14949 return [0, 0];
|
rlm@46
|
14950 break;
|
rlm@46
|
14951 case "east":
|
rlm@46
|
14952 return [0, 0];
|
rlm@46
|
14953 break;
|
rlm@46
|
14954 case "north":
|
rlm@46
|
14955 return [0, 0];
|
rlm@46
|
14956 break;
|
rlm@46
|
14957 case "south":
|
rlm@46
|
14958 return [0, 0];
|
rlm@46
|
14959 break;
|
rlm@46
|
14960 }
|
rlm@46
|
14961 },
|
rlm@46
|
14962
|
rlm@46
|
14963 getExpandAdj : function(){
|
rlm@46
|
14964 var c = this.collapsedEl, cm = this.cmargins;
|
rlm@46
|
14965 switch(this.position){
|
rlm@46
|
14966 case "west":
|
rlm@46
|
14967 return [-(cm.right+c.getWidth()+cm.left), 0];
|
rlm@46
|
14968 break;
|
rlm@46
|
14969 case "east":
|
rlm@46
|
14970 return [cm.right+c.getWidth()+cm.left, 0];
|
rlm@46
|
14971 break;
|
rlm@46
|
14972 case "north":
|
rlm@46
|
14973 return [0, -(cm.top+cm.bottom+c.getHeight())];
|
rlm@46
|
14974 break;
|
rlm@46
|
14975 case "south":
|
rlm@46
|
14976 return [0, cm.top+cm.bottom+c.getHeight()];
|
rlm@46
|
14977 break;
|
rlm@46
|
14978 }
|
rlm@46
|
14979 }
|
rlm@46
|
14980 };
|
rlm@46
|
14981
|
rlm@46
|
14982
|
rlm@46
|
14983 Ext.layout.BorderLayout.SplitRegion = function(layout, config, pos){
|
rlm@46
|
14984 Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this, layout, config, pos);
|
rlm@46
|
14985 this.applyLayout = this.applyFns[pos];
|
rlm@46
|
14986 };
|
rlm@46
|
14987
|
rlm@46
|
14988 Ext.extend(Ext.layout.BorderLayout.SplitRegion, Ext.layout.BorderLayout.Region, {
|
rlm@46
|
14989
|
rlm@46
|
14990 splitTip : "Drag to resize.",
|
rlm@46
|
14991
|
rlm@46
|
14992 collapsibleSplitTip : "Drag to resize. Double click to hide.",
|
rlm@46
|
14993
|
rlm@46
|
14994 useSplitTips : false,
|
rlm@46
|
14995
|
rlm@46
|
14996 splitSettings : {
|
rlm@46
|
14997 north : {
|
rlm@46
|
14998 orientation: Ext.SplitBar.VERTICAL,
|
rlm@46
|
14999 placement: Ext.SplitBar.TOP,
|
rlm@46
|
15000 maxFn : 'getVMaxSize',
|
rlm@46
|
15001 minProp: 'minHeight',
|
rlm@46
|
15002 maxProp: 'maxHeight'
|
rlm@46
|
15003 },
|
rlm@46
|
15004 south : {
|
rlm@46
|
15005 orientation: Ext.SplitBar.VERTICAL,
|
rlm@46
|
15006 placement: Ext.SplitBar.BOTTOM,
|
rlm@46
|
15007 maxFn : 'getVMaxSize',
|
rlm@46
|
15008 minProp: 'minHeight',
|
rlm@46
|
15009 maxProp: 'maxHeight'
|
rlm@46
|
15010 },
|
rlm@46
|
15011 east : {
|
rlm@46
|
15012 orientation: Ext.SplitBar.HORIZONTAL,
|
rlm@46
|
15013 placement: Ext.SplitBar.RIGHT,
|
rlm@46
|
15014 maxFn : 'getHMaxSize',
|
rlm@46
|
15015 minProp: 'minWidth',
|
rlm@46
|
15016 maxProp: 'maxWidth'
|
rlm@46
|
15017 },
|
rlm@46
|
15018 west : {
|
rlm@46
|
15019 orientation: Ext.SplitBar.HORIZONTAL,
|
rlm@46
|
15020 placement: Ext.SplitBar.LEFT,
|
rlm@46
|
15021 maxFn : 'getHMaxSize',
|
rlm@46
|
15022 minProp: 'minWidth',
|
rlm@46
|
15023 maxProp: 'maxWidth'
|
rlm@46
|
15024 }
|
rlm@46
|
15025 },
|
rlm@46
|
15026
|
rlm@46
|
15027 applyFns : {
|
rlm@46
|
15028 west : function(box){
|
rlm@46
|
15029 if(this.isCollapsed){
|
rlm@46
|
15030 return this.applyLayoutCollapsed(box);
|
rlm@46
|
15031 }
|
rlm@46
|
15032 var sd = this.splitEl.dom, s = sd.style;
|
rlm@46
|
15033 this.panel.setPosition(box.x, box.y);
|
rlm@46
|
15034 var sw = sd.offsetWidth;
|
rlm@46
|
15035 s.left = (box.x+box.width-sw)+'px';
|
rlm@46
|
15036 s.top = (box.y)+'px';
|
rlm@46
|
15037 s.height = Math.max(0, box.height)+'px';
|
rlm@46
|
15038 this.panel.setSize(box.width-sw, box.height);
|
rlm@46
|
15039 },
|
rlm@46
|
15040 east : function(box){
|
rlm@46
|
15041 if(this.isCollapsed){
|
rlm@46
|
15042 return this.applyLayoutCollapsed(box);
|
rlm@46
|
15043 }
|
rlm@46
|
15044 var sd = this.splitEl.dom, s = sd.style;
|
rlm@46
|
15045 var sw = sd.offsetWidth;
|
rlm@46
|
15046 this.panel.setPosition(box.x+sw, box.y);
|
rlm@46
|
15047 s.left = (box.x)+'px';
|
rlm@46
|
15048 s.top = (box.y)+'px';
|
rlm@46
|
15049 s.height = Math.max(0, box.height)+'px';
|
rlm@46
|
15050 this.panel.setSize(box.width-sw, box.height);
|
rlm@46
|
15051 },
|
rlm@46
|
15052 north : function(box){
|
rlm@46
|
15053 if(this.isCollapsed){
|
rlm@46
|
15054 return this.applyLayoutCollapsed(box);
|
rlm@46
|
15055 }
|
rlm@46
|
15056 var sd = this.splitEl.dom, s = sd.style;
|
rlm@46
|
15057 var sh = sd.offsetHeight;
|
rlm@46
|
15058 this.panel.setPosition(box.x, box.y);
|
rlm@46
|
15059 s.left = (box.x)+'px';
|
rlm@46
|
15060 s.top = (box.y+box.height-sh)+'px';
|
rlm@46
|
15061 s.width = Math.max(0, box.width)+'px';
|
rlm@46
|
15062 this.panel.setSize(box.width, box.height-sh);
|
rlm@46
|
15063 },
|
rlm@46
|
15064 south : function(box){
|
rlm@46
|
15065 if(this.isCollapsed){
|
rlm@46
|
15066 return this.applyLayoutCollapsed(box);
|
rlm@46
|
15067 }
|
rlm@46
|
15068 var sd = this.splitEl.dom, s = sd.style;
|
rlm@46
|
15069 var sh = sd.offsetHeight;
|
rlm@46
|
15070 this.panel.setPosition(box.x, box.y+sh);
|
rlm@46
|
15071 s.left = (box.x)+'px';
|
rlm@46
|
15072 s.top = (box.y)+'px';
|
rlm@46
|
15073 s.width = Math.max(0, box.width)+'px';
|
rlm@46
|
15074 this.panel.setSize(box.width, box.height-sh);
|
rlm@46
|
15075 }
|
rlm@46
|
15076 },
|
rlm@46
|
15077
|
rlm@46
|
15078 render : function(ct, p){
|
rlm@46
|
15079 Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this, ct, p);
|
rlm@46
|
15080
|
rlm@46
|
15081 var ps = this.position;
|
rlm@46
|
15082
|
rlm@46
|
15083 this.splitEl = ct.createChild({
|
rlm@46
|
15084 cls: "x-layout-split x-layout-split-"+ps, html: " ",
|
rlm@46
|
15085 id: this.panel.id + '-xsplit'
|
rlm@46
|
15086 });
|
rlm@46
|
15087
|
rlm@46
|
15088 if(this.collapseMode == 'mini'){
|
rlm@46
|
15089 this.miniSplitEl = this.splitEl.createChild({
|
rlm@46
|
15090 cls: "x-layout-mini x-layout-mini-"+ps, html: " "
|
rlm@46
|
15091 });
|
rlm@46
|
15092 this.miniSplitEl.addClassOnOver('x-layout-mini-over');
|
rlm@46
|
15093 this.miniSplitEl.on('click', this.onCollapseClick, this, {stopEvent:true});
|
rlm@46
|
15094 }
|
rlm@46
|
15095
|
rlm@46
|
15096 var s = this.splitSettings[ps];
|
rlm@46
|
15097
|
rlm@46
|
15098 this.split = new Ext.SplitBar(this.splitEl.dom, p.el, s.orientation);
|
rlm@46
|
15099 this.split.placement = s.placement;
|
rlm@46
|
15100 this.split.getMaximumSize = this[s.maxFn].createDelegate(this);
|
rlm@46
|
15101 this.split.minSize = this.minSize || this[s.minProp];
|
rlm@46
|
15102 this.split.on("beforeapply", this.onSplitMove, this);
|
rlm@46
|
15103 this.split.useShim = this.useShim === true;
|
rlm@46
|
15104 this.maxSize = this.maxSize || this[s.maxProp];
|
rlm@46
|
15105
|
rlm@46
|
15106 if(p.hidden){
|
rlm@46
|
15107 this.splitEl.hide();
|
rlm@46
|
15108 }
|
rlm@46
|
15109
|
rlm@46
|
15110 if(this.useSplitTips){
|
rlm@46
|
15111 this.splitEl.dom.title = this.collapsible ? this.collapsibleSplitTip : this.splitTip;
|
rlm@46
|
15112 }
|
rlm@46
|
15113 if(this.collapsible){
|
rlm@46
|
15114 this.splitEl.on("dblclick", this.onCollapseClick, this);
|
rlm@46
|
15115 }
|
rlm@46
|
15116 },
|
rlm@46
|
15117
|
rlm@46
|
15118 getSize : function(){
|
rlm@46
|
15119 if(this.isCollapsed){
|
rlm@46
|
15120 return this.collapsedEl.getSize();
|
rlm@46
|
15121 }
|
rlm@46
|
15122 var s = this.panel.getSize();
|
rlm@46
|
15123 if(this.position == 'north' || this.position == 'south'){
|
rlm@46
|
15124 s.height += this.splitEl.dom.offsetHeight;
|
rlm@46
|
15125 }else{
|
rlm@46
|
15126 s.width += this.splitEl.dom.offsetWidth;
|
rlm@46
|
15127 }
|
rlm@46
|
15128 return s;
|
rlm@46
|
15129 },
|
rlm@46
|
15130
|
rlm@46
|
15131 getHMaxSize : function(){
|
rlm@46
|
15132 var cmax = this.maxSize || 10000;
|
rlm@46
|
15133 var center = this.layout.center;
|
rlm@46
|
15134 return Math.min(cmax, (this.el.getWidth()+center.el.getWidth())-center.getMinWidth());
|
rlm@46
|
15135 },
|
rlm@46
|
15136
|
rlm@46
|
15137 getVMaxSize : function(){
|
rlm@46
|
15138 var cmax = this.maxSize || 10000;
|
rlm@46
|
15139 var center = this.layout.center;
|
rlm@46
|
15140 return Math.min(cmax, (this.el.getHeight()+center.el.getHeight())-center.getMinHeight());
|
rlm@46
|
15141 },
|
rlm@46
|
15142
|
rlm@46
|
15143 onSplitMove : function(split, newSize){
|
rlm@46
|
15144 var s = this.panel.getSize();
|
rlm@46
|
15145 this.lastSplitSize = newSize;
|
rlm@46
|
15146 if(this.position == 'north' || this.position == 'south'){
|
rlm@46
|
15147 this.panel.setSize(s.width, newSize);
|
rlm@46
|
15148 this.state.height = newSize;
|
rlm@46
|
15149 }else{
|
rlm@46
|
15150 this.panel.setSize(newSize, s.height);
|
rlm@46
|
15151 this.state.width = newSize;
|
rlm@46
|
15152 }
|
rlm@46
|
15153 this.layout.layout();
|
rlm@46
|
15154 this.panel.saveState();
|
rlm@46
|
15155 return false;
|
rlm@46
|
15156 },
|
rlm@46
|
15157
|
rlm@46
|
15158
|
rlm@46
|
15159 getSplitBar : function(){
|
rlm@46
|
15160 return this.split;
|
rlm@46
|
15161 }
|
rlm@46
|
15162 });
|
rlm@46
|
15163
|
rlm@46
|
15164 Ext.Container.LAYOUTS['border'] = Ext.layout.BorderLayout;
|
rlm@46
|
15165
|
rlm@46
|
15166 Ext.layout.FormLayout = Ext.extend(Ext.layout.AnchorLayout, {
|
rlm@46
|
15167
|
rlm@46
|
15168
|
rlm@46
|
15169
|
rlm@46
|
15170 labelSeparator : ':',
|
rlm@46
|
15171
|
rlm@46
|
15172 getAnchorViewSize : function(ct, target){
|
rlm@46
|
15173 return ct.body.getStyleSize();
|
rlm@46
|
15174 },
|
rlm@46
|
15175
|
rlm@46
|
15176 setContainer : function(ct){
|
rlm@46
|
15177 Ext.layout.FormLayout.superclass.setContainer.call(this, ct);
|
rlm@46
|
15178
|
rlm@46
|
15179 if(ct.labelAlign){
|
rlm@46
|
15180 ct.addClass('x-form-label-'+ct.labelAlign);
|
rlm@46
|
15181 }
|
rlm@46
|
15182
|
rlm@46
|
15183 if(ct.hideLabels){
|
rlm@46
|
15184 this.labelStyle = "display:none";
|
rlm@46
|
15185 this.elementStyle = "padding-left:0;";
|
rlm@46
|
15186 this.labelAdjust = 0;
|
rlm@46
|
15187 }else{
|
rlm@46
|
15188 this.labelSeparator = ct.labelSeparator || this.labelSeparator;
|
rlm@46
|
15189 ct.labelWidth = ct.labelWidth || 100;
|
rlm@46
|
15190 if(typeof ct.labelWidth == 'number'){
|
rlm@46
|
15191 var pad = (typeof ct.labelPad == 'number' ? ct.labelPad : 5);
|
rlm@46
|
15192 this.labelAdjust = ct.labelWidth+pad;
|
rlm@46
|
15193 this.labelStyle = "width:"+ct.labelWidth+"px;";
|
rlm@46
|
15194 this.elementStyle = "padding-left:"+(ct.labelWidth+pad)+'px';
|
rlm@46
|
15195 }
|
rlm@46
|
15196 if(ct.labelAlign == 'top'){
|
rlm@46
|
15197 this.labelStyle = "width:auto;";
|
rlm@46
|
15198 this.labelAdjust = 0;
|
rlm@46
|
15199 this.elementStyle = "padding-left:0;";
|
rlm@46
|
15200 }
|
rlm@46
|
15201 }
|
rlm@46
|
15202
|
rlm@46
|
15203 if(!this.fieldTpl){
|
rlm@46
|
15204 var t = new Ext.Template(
|
rlm@46
|
15205 '<div class="x-form-item {5}" tabIndex="-1">',
|
rlm@46
|
15206 '<label for="{0}" style="{2}" class="x-form-item-label">{1}{4}</label>',
|
rlm@46
|
15207 '<div class="x-form-element" id="x-form-el-{0}" style="{3}">',
|
rlm@46
|
15208 '</div><div class="{6}"></div>',
|
rlm@46
|
15209 '</div>'
|
rlm@46
|
15210 );
|
rlm@46
|
15211 t.disableFormats = true;
|
rlm@46
|
15212 t.compile();
|
rlm@46
|
15213 Ext.layout.FormLayout.prototype.fieldTpl = t;
|
rlm@46
|
15214 }
|
rlm@46
|
15215 },
|
rlm@46
|
15216
|
rlm@46
|
15217 renderItem : function(c, position, target){
|
rlm@46
|
15218 if(c && !c.rendered && c.isFormField && c.inputType != 'hidden'){
|
rlm@46
|
15219 var args = [
|
rlm@46
|
15220 c.id, c.fieldLabel,
|
rlm@46
|
15221 c.labelStyle||this.labelStyle||'',
|
rlm@46
|
15222 this.elementStyle||'',
|
rlm@46
|
15223 typeof c.labelSeparator == 'undefined' ? this.labelSeparator : c.labelSeparator,
|
rlm@46
|
15224 (c.itemCls||this.container.itemCls||'') + (c.hideLabel ? ' x-hide-label' : ''),
|
rlm@46
|
15225 c.clearCls || 'x-form-clear-left'
|
rlm@46
|
15226 ];
|
rlm@46
|
15227 if(typeof position == 'number'){
|
rlm@46
|
15228 position = target.dom.childNodes[position] || null;
|
rlm@46
|
15229 }
|
rlm@46
|
15230 if(position){
|
rlm@46
|
15231 this.fieldTpl.insertBefore(position, args);
|
rlm@46
|
15232 }else{
|
rlm@46
|
15233 this.fieldTpl.append(target, args);
|
rlm@46
|
15234 }
|
rlm@46
|
15235 c.render('x-form-el-'+c.id);
|
rlm@46
|
15236 }else {
|
rlm@46
|
15237 Ext.layout.FormLayout.superclass.renderItem.apply(this, arguments);
|
rlm@46
|
15238 }
|
rlm@46
|
15239 },
|
rlm@46
|
15240
|
rlm@46
|
15241 adjustWidthAnchor : function(value, comp){
|
rlm@46
|
15242 return value - (comp.isFormField ? (comp.hideLabel ? 0 : this.labelAdjust) : 0);
|
rlm@46
|
15243 },
|
rlm@46
|
15244
|
rlm@46
|
15245 isValidParent : function(c, target){
|
rlm@46
|
15246 return true;
|
rlm@46
|
15247 }
|
rlm@46
|
15248
|
rlm@46
|
15249
|
rlm@46
|
15250 });
|
rlm@46
|
15251
|
rlm@46
|
15252 Ext.Container.LAYOUTS['form'] = Ext.layout.FormLayout;
|
rlm@46
|
15253
|
rlm@46
|
15254 Ext.layout.Accordion = Ext.extend(Ext.layout.FitLayout, {
|
rlm@46
|
15255
|
rlm@46
|
15256 fill : true,
|
rlm@46
|
15257
|
rlm@46
|
15258 autoWidth : true,
|
rlm@46
|
15259
|
rlm@46
|
15260 titleCollapse : true,
|
rlm@46
|
15261
|
rlm@46
|
15262 hideCollapseTool : false,
|
rlm@46
|
15263
|
rlm@46
|
15264 collapseFirst : false,
|
rlm@46
|
15265
|
rlm@46
|
15266 animate : false,
|
rlm@46
|
15267
|
rlm@46
|
15268 sequence : false,
|
rlm@46
|
15269
|
rlm@46
|
15270 activeOnTop : false,
|
rlm@46
|
15271
|
rlm@46
|
15272 renderItem : function(c){
|
rlm@46
|
15273 if(this.animate === false){
|
rlm@46
|
15274 c.animCollapse = false;
|
rlm@46
|
15275 }
|
rlm@46
|
15276 c.collapsible = true;
|
rlm@46
|
15277 if(this.autoWidth){
|
rlm@46
|
15278 c.autoWidth = true;
|
rlm@46
|
15279 }
|
rlm@46
|
15280 if(this.titleCollapse){
|
rlm@46
|
15281 c.titleCollapse = true;
|
rlm@46
|
15282 }
|
rlm@46
|
15283 if(this.hideCollapseTool){
|
rlm@46
|
15284 c.hideCollapseTool = true;
|
rlm@46
|
15285 }
|
rlm@46
|
15286 if(this.collapseFirst !== undefined){
|
rlm@46
|
15287 c.collapseFirst = this.collapseFirst;
|
rlm@46
|
15288 }
|
rlm@46
|
15289 if(!this.activeItem && !c.collapsed){
|
rlm@46
|
15290 this.activeItem = c;
|
rlm@46
|
15291 }else if(this.activeItem){
|
rlm@46
|
15292 c.collapsed = true;
|
rlm@46
|
15293 }
|
rlm@46
|
15294 Ext.layout.Accordion.superclass.renderItem.apply(this, arguments);
|
rlm@46
|
15295 c.header.addClass('x-accordion-hd');
|
rlm@46
|
15296 c.on('beforeexpand', this.beforeExpand, this);
|
rlm@46
|
15297 },
|
rlm@46
|
15298
|
rlm@46
|
15299
|
rlm@46
|
15300 beforeExpand : function(p, anim){
|
rlm@46
|
15301 var ai = this.activeItem;
|
rlm@46
|
15302 if(ai){
|
rlm@46
|
15303 if(this.sequence){
|
rlm@46
|
15304 delete this.activeItem;
|
rlm@46
|
15305 if (!ai.collapsed){
|
rlm@46
|
15306 ai.collapse({callback:function(){
|
rlm@46
|
15307 p.expand(anim || true);
|
rlm@46
|
15308 }, scope: this});
|
rlm@46
|
15309 return false;
|
rlm@46
|
15310 }
|
rlm@46
|
15311 }else{
|
rlm@46
|
15312 ai.collapse(this.animate);
|
rlm@46
|
15313 }
|
rlm@46
|
15314 }
|
rlm@46
|
15315 this.activeItem = p;
|
rlm@46
|
15316 if(this.activeOnTop){
|
rlm@46
|
15317 p.el.dom.parentNode.insertBefore(p.el.dom, p.el.dom.parentNode.firstChild);
|
rlm@46
|
15318 }
|
rlm@46
|
15319 this.layout();
|
rlm@46
|
15320 },
|
rlm@46
|
15321
|
rlm@46
|
15322
|
rlm@46
|
15323 setItemSize : function(item, size){
|
rlm@46
|
15324 if(this.fill && item){
|
rlm@46
|
15325 var items = this.container.items.items;
|
rlm@46
|
15326 var hh = 0;
|
rlm@46
|
15327 for(var i = 0, len = items.length; i < len; i++){
|
rlm@46
|
15328 var p = items[i];
|
rlm@46
|
15329 if(p != item){
|
rlm@46
|
15330 hh += (p.getSize().height - p.bwrap.getHeight());
|
rlm@46
|
15331 }
|
rlm@46
|
15332 }
|
rlm@46
|
15333 size.height -= hh;
|
rlm@46
|
15334 item.setSize(size);
|
rlm@46
|
15335 }
|
rlm@46
|
15336 }
|
rlm@46
|
15337 });
|
rlm@46
|
15338 Ext.Container.LAYOUTS['accordion'] = Ext.layout.Accordion;
|
rlm@46
|
15339
|
rlm@46
|
15340 Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {
|
rlm@46
|
15341
|
rlm@46
|
15342
|
rlm@46
|
15343
|
rlm@46
|
15344 monitorResize:false,
|
rlm@46
|
15345
|
rlm@46
|
15346
|
rlm@46
|
15347 setContainer : function(ct){
|
rlm@46
|
15348 Ext.layout.TableLayout.superclass.setContainer.call(this, ct);
|
rlm@46
|
15349
|
rlm@46
|
15350 this.currentRow = 0;
|
rlm@46
|
15351 this.currentColumn = 0;
|
rlm@46
|
15352 this.cells = [];
|
rlm@46
|
15353 },
|
rlm@46
|
15354
|
rlm@46
|
15355
|
rlm@46
|
15356 onLayout : function(ct, target){
|
rlm@46
|
15357 var cs = ct.items.items, len = cs.length, c, i;
|
rlm@46
|
15358
|
rlm@46
|
15359 if(!this.table){
|
rlm@46
|
15360 target.addClass('x-table-layout-ct');
|
rlm@46
|
15361
|
rlm@46
|
15362 this.table = target.createChild(
|
rlm@46
|
15363 {tag:'table', cls:'x-table-layout', cellspacing: 0, cn: {tag: 'tbody'}}, null, true);
|
rlm@46
|
15364
|
rlm@46
|
15365 this.renderAll(ct, target);
|
rlm@46
|
15366 }
|
rlm@46
|
15367 },
|
rlm@46
|
15368
|
rlm@46
|
15369
|
rlm@46
|
15370 getRow : function(index){
|
rlm@46
|
15371 var row = this.table.tBodies[0].childNodes[index];
|
rlm@46
|
15372 if(!row){
|
rlm@46
|
15373 row = document.createElement('tr');
|
rlm@46
|
15374 this.table.tBodies[0].appendChild(row);
|
rlm@46
|
15375 }
|
rlm@46
|
15376 return row;
|
rlm@46
|
15377 },
|
rlm@46
|
15378
|
rlm@46
|
15379
|
rlm@46
|
15380 getNextCell : function(c){
|
rlm@46
|
15381 var cell = this.getNextNonSpan(this.currentColumn, this.currentRow);
|
rlm@46
|
15382 var curCol = this.currentColumn = cell[0], curRow = this.currentRow = cell[1];
|
rlm@46
|
15383 for(var rowIndex = curRow; rowIndex < curRow + (c.rowspan || 1); rowIndex++){
|
rlm@46
|
15384 if(!this.cells[rowIndex]){
|
rlm@46
|
15385 this.cells[rowIndex] = [];
|
rlm@46
|
15386 }
|
rlm@46
|
15387 for(var colIndex = curCol; colIndex < curCol + (c.colspan || 1); colIndex++){
|
rlm@46
|
15388 this.cells[rowIndex][colIndex] = true;
|
rlm@46
|
15389 }
|
rlm@46
|
15390 }
|
rlm@46
|
15391 var td = document.createElement('td');
|
rlm@46
|
15392 if(c.cellId){
|
rlm@46
|
15393 td.id = c.cellId;
|
rlm@46
|
15394 }
|
rlm@46
|
15395 var cls = 'x-table-layout-cell';
|
rlm@46
|
15396 if(c.cellCls){
|
rlm@46
|
15397 cls += ' ' + c.cellCls;
|
rlm@46
|
15398 }
|
rlm@46
|
15399 td.className = cls;
|
rlm@46
|
15400 if(c.colspan){
|
rlm@46
|
15401 td.colSpan = c.colspan;
|
rlm@46
|
15402 }
|
rlm@46
|
15403 if(c.rowspan){
|
rlm@46
|
15404 td.rowSpan = c.rowspan;
|
rlm@46
|
15405 }
|
rlm@46
|
15406 this.getRow(curRow).appendChild(td);
|
rlm@46
|
15407 return td;
|
rlm@46
|
15408 },
|
rlm@46
|
15409
|
rlm@46
|
15410
|
rlm@46
|
15411 getNextNonSpan: function(colIndex, rowIndex){
|
rlm@46
|
15412 var cols = this.columns;
|
rlm@46
|
15413 while((cols && colIndex >= cols) || (this.cells[rowIndex] && this.cells[rowIndex][colIndex])) {
|
rlm@46
|
15414 if(cols && colIndex >= cols){
|
rlm@46
|
15415 rowIndex++;
|
rlm@46
|
15416 colIndex = 0;
|
rlm@46
|
15417 }else{
|
rlm@46
|
15418 colIndex++;
|
rlm@46
|
15419 }
|
rlm@46
|
15420 }
|
rlm@46
|
15421 return [colIndex, rowIndex];
|
rlm@46
|
15422 },
|
rlm@46
|
15423
|
rlm@46
|
15424
|
rlm@46
|
15425 renderItem : function(c, position, target){
|
rlm@46
|
15426 if(c && !c.rendered){
|
rlm@46
|
15427 c.render(this.getNextCell(c));
|
rlm@46
|
15428 }
|
rlm@46
|
15429 },
|
rlm@46
|
15430
|
rlm@46
|
15431
|
rlm@46
|
15432 isValidParent : function(c, target){
|
rlm@46
|
15433 return true;
|
rlm@46
|
15434 }
|
rlm@46
|
15435
|
rlm@46
|
15436
|
rlm@46
|
15437 });
|
rlm@46
|
15438
|
rlm@46
|
15439 Ext.Container.LAYOUTS['table'] = Ext.layout.TableLayout;
|
rlm@46
|
15440
|
rlm@46
|
15441 Ext.layout.AbsoluteLayout = Ext.extend(Ext.layout.AnchorLayout, {
|
rlm@46
|
15442 extraCls: 'x-abs-layout-item',
|
rlm@46
|
15443 isForm: false,
|
rlm@46
|
15444
|
rlm@46
|
15445 setContainer : function(ct){
|
rlm@46
|
15446 Ext.layout.AbsoluteLayout.superclass.setContainer.call(this, ct);
|
rlm@46
|
15447 if(ct.isXType('form')){
|
rlm@46
|
15448 this.isForm = true;
|
rlm@46
|
15449 }
|
rlm@46
|
15450 },
|
rlm@46
|
15451
|
rlm@46
|
15452 onLayout : function(ct, target){
|
rlm@46
|
15453 if(this.isForm){ ct.body.position(); } else { target.position(); }
|
rlm@46
|
15454 Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, ct, target);
|
rlm@46
|
15455 },
|
rlm@46
|
15456
|
rlm@46
|
15457
|
rlm@46
|
15458 getAnchorViewSize : function(ct, target){
|
rlm@46
|
15459 return this.isForm ? ct.body.getStyleSize() : Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this, ct, target);
|
rlm@46
|
15460 },
|
rlm@46
|
15461
|
rlm@46
|
15462
|
rlm@46
|
15463 isValidParent : function(c, target){
|
rlm@46
|
15464 return this.isForm ? true : Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this, c, target);
|
rlm@46
|
15465 },
|
rlm@46
|
15466
|
rlm@46
|
15467
|
rlm@46
|
15468 adjustWidthAnchor : function(value, comp){
|
rlm@46
|
15469 return value ? value - comp.getPosition(true)[0] : value;
|
rlm@46
|
15470 },
|
rlm@46
|
15471
|
rlm@46
|
15472
|
rlm@46
|
15473 adjustHeightAnchor : function(value, comp){
|
rlm@46
|
15474 return value ? value - comp.getPosition(true)[1] : value;
|
rlm@46
|
15475 }
|
rlm@46
|
15476
|
rlm@46
|
15477 });
|
rlm@46
|
15478 Ext.Container.LAYOUTS['absolute'] = Ext.layout.AbsoluteLayout;
|
rlm@46
|
15479
|
rlm@46
|
15480 Ext.Viewport = Ext.extend(Ext.Container, {
|
rlm@46
|
15481
|
rlm@46
|
15482
|
rlm@46
|
15483
|
rlm@46
|
15484
|
rlm@46
|
15485
|
rlm@46
|
15486
|
rlm@46
|
15487
|
rlm@46
|
15488
|
rlm@46
|
15489
|
rlm@46
|
15490
|
rlm@46
|
15491
|
rlm@46
|
15492
|
rlm@46
|
15493 initComponent : function() {
|
rlm@46
|
15494 Ext.Viewport.superclass.initComponent.call(this);
|
rlm@46
|
15495 document.getElementsByTagName('html')[0].className += ' x-viewport';
|
rlm@46
|
15496 this.el = Ext.getBody();
|
rlm@46
|
15497 this.el.setHeight = Ext.emptyFn;
|
rlm@46
|
15498 this.el.setWidth = Ext.emptyFn;
|
rlm@46
|
15499 this.el.setSize = Ext.emptyFn;
|
rlm@46
|
15500 this.el.dom.scroll = 'no';
|
rlm@46
|
15501 this.allowDomMove = false;
|
rlm@46
|
15502 this.autoWidth = true;
|
rlm@46
|
15503 this.autoHeight = true;
|
rlm@46
|
15504 Ext.EventManager.onWindowResize(this.fireResize, this);
|
rlm@46
|
15505 this.renderTo = this.el;
|
rlm@46
|
15506 },
|
rlm@46
|
15507
|
rlm@46
|
15508 fireResize : function(w, h){
|
rlm@46
|
15509 this.fireEvent('resize', this, w, h, w, h);
|
rlm@46
|
15510 }
|
rlm@46
|
15511 });
|
rlm@46
|
15512 Ext.reg('viewport', Ext.Viewport);
|
rlm@46
|
15513
|
rlm@46
|
15514 Ext.Panel = Ext.extend(Ext.Container, {
|
rlm@46
|
15515
|
rlm@46
|
15516
|
rlm@46
|
15517
|
rlm@46
|
15518
|
rlm@46
|
15519
|
rlm@46
|
15520
|
rlm@46
|
15521
|
rlm@46
|
15522
|
rlm@46
|
15523
|
rlm@46
|
15524
|
rlm@46
|
15525
|
rlm@46
|
15526
|
rlm@46
|
15527
|
rlm@46
|
15528
|
rlm@46
|
15529
|
rlm@46
|
15530
|
rlm@46
|
15531
|
rlm@46
|
15532
|
rlm@46
|
15533
|
rlm@46
|
15534
|
rlm@46
|
15535
|
rlm@46
|
15536
|
rlm@46
|
15537
|
rlm@46
|
15538
|
rlm@46
|
15539
|
rlm@46
|
15540
|
rlm@46
|
15541
|
rlm@46
|
15542
|
rlm@46
|
15543
|
rlm@46
|
15544
|
rlm@46
|
15545
|
rlm@46
|
15546
|
rlm@46
|
15547
|
rlm@46
|
15548 baseCls : 'x-panel',
|
rlm@46
|
15549
|
rlm@46
|
15550 collapsedCls : 'x-panel-collapsed',
|
rlm@46
|
15551
|
rlm@46
|
15552 maskDisabled: true,
|
rlm@46
|
15553
|
rlm@46
|
15554 animCollapse: Ext.enableFx,
|
rlm@46
|
15555
|
rlm@46
|
15556 headerAsText: true,
|
rlm@46
|
15557
|
rlm@46
|
15558 buttonAlign: 'right',
|
rlm@46
|
15559
|
rlm@46
|
15560 collapsed : false,
|
rlm@46
|
15561
|
rlm@46
|
15562 collapseFirst: true,
|
rlm@46
|
15563
|
rlm@46
|
15564 minButtonWidth:75,
|
rlm@46
|
15565
|
rlm@46
|
15566 elements : 'body',
|
rlm@46
|
15567
|
rlm@46
|
15568 toolTarget : 'header',
|
rlm@46
|
15569 collapseEl : 'bwrap',
|
rlm@46
|
15570 slideAnchor : 't',
|
rlm@46
|
15571
|
rlm@46
|
15572 deferHeight: true,
|
rlm@46
|
15573 expandDefaults: {
|
rlm@46
|
15574 duration:.25
|
rlm@46
|
15575 },
|
rlm@46
|
15576 collapseDefaults: {
|
rlm@46
|
15577 duration:.25
|
rlm@46
|
15578 },
|
rlm@46
|
15579
|
rlm@46
|
15580 initComponent : function(){
|
rlm@46
|
15581 Ext.Panel.superclass.initComponent.call(this);
|
rlm@46
|
15582
|
rlm@46
|
15583 this.addEvents(
|
rlm@46
|
15584
|
rlm@46
|
15585 'bodyresize',
|
rlm@46
|
15586
|
rlm@46
|
15587 'titlechange',
|
rlm@46
|
15588
|
rlm@46
|
15589 'collapse',
|
rlm@46
|
15590
|
rlm@46
|
15591 'expand',
|
rlm@46
|
15592
|
rlm@46
|
15593 'beforecollapse',
|
rlm@46
|
15594
|
rlm@46
|
15595 'beforeexpand',
|
rlm@46
|
15596
|
rlm@46
|
15597 'beforeclose',
|
rlm@46
|
15598
|
rlm@46
|
15599 'close',
|
rlm@46
|
15600
|
rlm@46
|
15601 'activate',
|
rlm@46
|
15602
|
rlm@46
|
15603 'deactivate'
|
rlm@46
|
15604 );
|
rlm@46
|
15605
|
rlm@46
|
15606 if(this.tbar){
|
rlm@46
|
15607 this.elements += ',tbar';
|
rlm@46
|
15608 if(typeof this.tbar == 'object'){
|
rlm@46
|
15609 this.topToolbar = this.tbar;
|
rlm@46
|
15610 }
|
rlm@46
|
15611 delete this.tbar;
|
rlm@46
|
15612 }
|
rlm@46
|
15613 if(this.bbar){
|
rlm@46
|
15614 this.elements += ',bbar';
|
rlm@46
|
15615 if(typeof this.bbar == 'object'){
|
rlm@46
|
15616 this.bottomToolbar = this.bbar;
|
rlm@46
|
15617 }
|
rlm@46
|
15618 delete this.bbar;
|
rlm@46
|
15619 }
|
rlm@46
|
15620
|
rlm@46
|
15621 if(this.header === true){
|
rlm@46
|
15622 this.elements += ',header';
|
rlm@46
|
15623 delete this.header;
|
rlm@46
|
15624 }else if(this.title && this.header !== false){
|
rlm@46
|
15625 this.elements += ',header';
|
rlm@46
|
15626 }
|
rlm@46
|
15627
|
rlm@46
|
15628 if(this.footer === true){
|
rlm@46
|
15629 this.elements += ',footer';
|
rlm@46
|
15630 delete this.footer;
|
rlm@46
|
15631 }
|
rlm@46
|
15632
|
rlm@46
|
15633 if(this.buttons){
|
rlm@46
|
15634 var btns = this.buttons;
|
rlm@46
|
15635
|
rlm@46
|
15636 this.buttons = [];
|
rlm@46
|
15637 for(var i = 0, len = btns.length; i < len; i++) {
|
rlm@46
|
15638 if(btns[i].render){ this.buttons.push(btns[i]);
|
rlm@46
|
15639 }else{
|
rlm@46
|
15640 this.addButton(btns[i]);
|
rlm@46
|
15641 }
|
rlm@46
|
15642 }
|
rlm@46
|
15643 }
|
rlm@46
|
15644 if(this.autoLoad){
|
rlm@46
|
15645 this.on('render', this.doAutoLoad, this, {delay:10});
|
rlm@46
|
15646 }
|
rlm@46
|
15647 },
|
rlm@46
|
15648
|
rlm@46
|
15649 createElement : function(name, pnode){
|
rlm@46
|
15650 if(this[name]){
|
rlm@46
|
15651 pnode.appendChild(this[name].dom);
|
rlm@46
|
15652 return;
|
rlm@46
|
15653 }
|
rlm@46
|
15654
|
rlm@46
|
15655 if(name === 'bwrap' || this.elements.indexOf(name) != -1){
|
rlm@46
|
15656 if(this[name+'Cfg']){
|
rlm@46
|
15657 this[name] = Ext.fly(pnode).createChild(this[name+'Cfg']);
|
rlm@46
|
15658 }else{
|
rlm@46
|
15659 var el = document.createElement('div');
|
rlm@46
|
15660 el.className = this[name+'Cls'];
|
rlm@46
|
15661 this[name] = Ext.get(pnode.appendChild(el));
|
rlm@46
|
15662 }
|
rlm@46
|
15663 }
|
rlm@46
|
15664 },
|
rlm@46
|
15665
|
rlm@46
|
15666 onRender : function(ct, position){
|
rlm@46
|
15667 Ext.Panel.superclass.onRender.call(this, ct, position);
|
rlm@46
|
15668
|
rlm@46
|
15669 this.createClasses();
|
rlm@46
|
15670
|
rlm@46
|
15671 if(this.el){ this.el.addClass(this.baseCls);
|
rlm@46
|
15672 this.header = this.el.down('.'+this.headerCls);
|
rlm@46
|
15673 this.bwrap = this.el.down('.'+this.bwrapCls);
|
rlm@46
|
15674 var cp = this.bwrap ? this.bwrap : this.el;
|
rlm@46
|
15675 this.tbar = cp.down('.'+this.tbarCls);
|
rlm@46
|
15676 this.body = cp.down('.'+this.bodyCls);
|
rlm@46
|
15677 this.bbar = cp.down('.'+this.bbarCls);
|
rlm@46
|
15678 this.footer = cp.down('.'+this.footerCls);
|
rlm@46
|
15679 this.fromMarkup = true;
|
rlm@46
|
15680 }else{
|
rlm@46
|
15681 this.el = ct.createChild({
|
rlm@46
|
15682 id: this.id,
|
rlm@46
|
15683 cls: this.baseCls
|
rlm@46
|
15684 }, position);
|
rlm@46
|
15685 }
|
rlm@46
|
15686 var el = this.el, d = el.dom;
|
rlm@46
|
15687
|
rlm@46
|
15688 if(this.cls){
|
rlm@46
|
15689 this.el.addClass(this.cls);
|
rlm@46
|
15690 }
|
rlm@46
|
15691
|
rlm@46
|
15692 if(this.buttons){
|
rlm@46
|
15693 this.elements += ',footer';
|
rlm@46
|
15694 }
|
rlm@46
|
15695
|
rlm@46
|
15696
|
rlm@46
|
15697 if(this.frame){
|
rlm@46
|
15698 el.insertHtml('afterBegin', String.format(Ext.Element.boxMarkup, this.baseCls));
|
rlm@46
|
15699
|
rlm@46
|
15700 this.createElement('header', d.firstChild.firstChild.firstChild);
|
rlm@46
|
15701 this.createElement('bwrap', d);
|
rlm@46
|
15702
|
rlm@46
|
15703 var bw = this.bwrap.dom;
|
rlm@46
|
15704 var ml = d.childNodes[1], bl = d.childNodes[2];
|
rlm@46
|
15705 bw.appendChild(ml);
|
rlm@46
|
15706 bw.appendChild(bl);
|
rlm@46
|
15707
|
rlm@46
|
15708 var mc = bw.firstChild.firstChild.firstChild;
|
rlm@46
|
15709 this.createElement('tbar', mc);
|
rlm@46
|
15710 this.createElement('body', mc);
|
rlm@46
|
15711 this.createElement('bbar', mc);
|
rlm@46
|
15712 this.createElement('footer', bw.lastChild.firstChild.firstChild);
|
rlm@46
|
15713
|
rlm@46
|
15714 if(!this.footer){
|
rlm@46
|
15715 this.bwrap.dom.lastChild.className += ' x-panel-nofooter';
|
rlm@46
|
15716 }
|
rlm@46
|
15717 }else{
|
rlm@46
|
15718 this.createElement('header', d);
|
rlm@46
|
15719 this.createElement('bwrap', d);
|
rlm@46
|
15720
|
rlm@46
|
15721 var bw = this.bwrap.dom;
|
rlm@46
|
15722 this.createElement('tbar', bw);
|
rlm@46
|
15723 this.createElement('body', bw);
|
rlm@46
|
15724 this.createElement('bbar', bw);
|
rlm@46
|
15725 this.createElement('footer', bw);
|
rlm@46
|
15726
|
rlm@46
|
15727 if(!this.header){
|
rlm@46
|
15728 this.body.addClass(this.bodyCls + '-noheader');
|
rlm@46
|
15729 if(this.tbar){
|
rlm@46
|
15730 this.tbar.addClass(this.tbarCls + '-noheader');
|
rlm@46
|
15731 }
|
rlm@46
|
15732 }
|
rlm@46
|
15733 }
|
rlm@46
|
15734
|
rlm@46
|
15735 if(this.border === false){
|
rlm@46
|
15736 this.el.addClass(this.baseCls + '-noborder');
|
rlm@46
|
15737 this.body.addClass(this.bodyCls + '-noborder');
|
rlm@46
|
15738 if(this.header){
|
rlm@46
|
15739 this.header.addClass(this.headerCls + '-noborder');
|
rlm@46
|
15740 }
|
rlm@46
|
15741 if(this.footer){
|
rlm@46
|
15742 this.footer.addClass(this.footerCls + '-noborder');
|
rlm@46
|
15743 }
|
rlm@46
|
15744 if(this.tbar){
|
rlm@46
|
15745 this.tbar.addClass(this.tbarCls + '-noborder');
|
rlm@46
|
15746 }
|
rlm@46
|
15747 if(this.bbar){
|
rlm@46
|
15748 this.bbar.addClass(this.bbarCls + '-noborder');
|
rlm@46
|
15749 }
|
rlm@46
|
15750 }
|
rlm@46
|
15751
|
rlm@46
|
15752 if(this.bodyBorder === false){
|
rlm@46
|
15753 this.body.addClass(this.bodyCls + '-noborder');
|
rlm@46
|
15754 }
|
rlm@46
|
15755
|
rlm@46
|
15756 if(this.bodyStyle){
|
rlm@46
|
15757 this.body.applyStyles(this.bodyStyle);
|
rlm@46
|
15758 }
|
rlm@46
|
15759
|
rlm@46
|
15760 this.bwrap.enableDisplayMode('block');
|
rlm@46
|
15761
|
rlm@46
|
15762 if(this.header){
|
rlm@46
|
15763 this.header.unselectable();
|
rlm@46
|
15764
|
rlm@46
|
15765 if(this.headerAsText){
|
rlm@46
|
15766 this.header.dom.innerHTML =
|
rlm@46
|
15767 '<span class="' + this.headerTextCls + '">'+this.header.dom.innerHTML+'</span>';
|
rlm@46
|
15768
|
rlm@46
|
15769 if(this.iconCls){
|
rlm@46
|
15770 this.setIconClass(this.iconCls);
|
rlm@46
|
15771 }
|
rlm@46
|
15772 }
|
rlm@46
|
15773 }
|
rlm@46
|
15774
|
rlm@46
|
15775 if(this.floating){
|
rlm@46
|
15776 this.makeFloating(this.floating);
|
rlm@46
|
15777 }
|
rlm@46
|
15778
|
rlm@46
|
15779 if(this.collapsible){
|
rlm@46
|
15780 this.tools = this.tools ? this.tools.slice(0) : [];
|
rlm@46
|
15781 if(!this.hideCollapseTool){
|
rlm@46
|
15782 this.tools[this.collapseFirst?'unshift':'push']({
|
rlm@46
|
15783 id: 'toggle',
|
rlm@46
|
15784 handler : this.toggleCollapse,
|
rlm@46
|
15785 scope: this
|
rlm@46
|
15786 });
|
rlm@46
|
15787 }
|
rlm@46
|
15788 if(this.titleCollapse && this.header){
|
rlm@46
|
15789 this.header.on('click', this.toggleCollapse, this);
|
rlm@46
|
15790 this.header.setStyle('cursor', 'pointer');
|
rlm@46
|
15791 }
|
rlm@46
|
15792 }
|
rlm@46
|
15793 if(this.tools){
|
rlm@46
|
15794 var ts = this.tools;
|
rlm@46
|
15795 this.tools = {};
|
rlm@46
|
15796 this.addTool.apply(this, ts);
|
rlm@46
|
15797 }else{
|
rlm@46
|
15798 this.tools = {};
|
rlm@46
|
15799 }
|
rlm@46
|
15800
|
rlm@46
|
15801 if(this.buttons && this.buttons.length > 0){
|
rlm@46
|
15802 var tb = this.footer.createChild({cls:'x-panel-btns-ct', cn: {
|
rlm@46
|
15803 cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,
|
rlm@46
|
15804 html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
|
rlm@46
|
15805 }}, null, true);
|
rlm@46
|
15806 var tr = tb.getElementsByTagName('tr')[0];
|
rlm@46
|
15807 for(var i = 0, len = this.buttons.length; i < len; i++) {
|
rlm@46
|
15808 var b = this.buttons[i];
|
rlm@46
|
15809 var td = document.createElement('td');
|
rlm@46
|
15810 td.className = 'x-panel-btn-td';
|
rlm@46
|
15811 b.render(tr.appendChild(td));
|
rlm@46
|
15812 }
|
rlm@46
|
15813 }
|
rlm@46
|
15814
|
rlm@46
|
15815 if(this.tbar && this.topToolbar){
|
rlm@46
|
15816 if(Ext.isArray(this.topToolbar)){
|
rlm@46
|
15817 this.topToolbar = new Ext.Toolbar(this.topToolbar);
|
rlm@46
|
15818 }
|
rlm@46
|
15819 this.topToolbar.render(this.tbar);
|
rlm@46
|
15820 this.topToolbar.ownerCt = this;
|
rlm@46
|
15821 }
|
rlm@46
|
15822 if(this.bbar && this.bottomToolbar){
|
rlm@46
|
15823 if(Ext.isArray(this.bottomToolbar)){
|
rlm@46
|
15824 this.bottomToolbar = new Ext.Toolbar(this.bottomToolbar);
|
rlm@46
|
15825 }
|
rlm@46
|
15826 this.bottomToolbar.render(this.bbar);
|
rlm@46
|
15827 this.bottomToolbar.ownerCt = this;
|
rlm@46
|
15828 }
|
rlm@46
|
15829 },
|
rlm@46
|
15830
|
rlm@46
|
15831
|
rlm@46
|
15832 setIconClass : function(cls){
|
rlm@46
|
15833 var old = this.iconCls;
|
rlm@46
|
15834 this.iconCls = cls;
|
rlm@46
|
15835 if(this.rendered && this.header){
|
rlm@46
|
15836 if(this.frame){
|
rlm@46
|
15837 this.header.addClass('x-panel-icon');
|
rlm@46
|
15838 this.header.replaceClass(old, this.iconCls);
|
rlm@46
|
15839 }else{
|
rlm@46
|
15840 var hd = this.header.dom;
|
rlm@46
|
15841 var img = hd.firstChild && String(hd.firstChild.tagName).toLowerCase() == 'img' ? hd.firstChild : null;
|
rlm@46
|
15842 if(img){
|
rlm@46
|
15843 Ext.fly(img).replaceClass(old, this.iconCls);
|
rlm@46
|
15844 }else{
|
rlm@46
|
15845 Ext.DomHelper.insertBefore(hd.firstChild, {
|
rlm@46
|
15846 tag:'img', src: Ext.BLANK_IMAGE_URL, cls:'x-panel-inline-icon '+this.iconCls
|
rlm@46
|
15847 });
|
rlm@46
|
15848 }
|
rlm@46
|
15849 }
|
rlm@46
|
15850 }
|
rlm@46
|
15851 },
|
rlm@46
|
15852
|
rlm@46
|
15853 makeFloating : function(cfg){
|
rlm@46
|
15854 this.floating = true;
|
rlm@46
|
15855 this.el = new Ext.Layer(
|
rlm@46
|
15856 typeof cfg == 'object' ? cfg : {
|
rlm@46
|
15857 shadow: this.shadow !== undefined ? this.shadow : 'sides',
|
rlm@46
|
15858 shadowOffset: this.shadowOffset,
|
rlm@46
|
15859 constrain:false,
|
rlm@46
|
15860 shim: this.shim === false ? false : undefined
|
rlm@46
|
15861 }, this.el
|
rlm@46
|
15862 );
|
rlm@46
|
15863 },
|
rlm@46
|
15864
|
rlm@46
|
15865
|
rlm@46
|
15866 getTopToolbar : function(){
|
rlm@46
|
15867 return this.topToolbar;
|
rlm@46
|
15868 },
|
rlm@46
|
15869
|
rlm@46
|
15870
|
rlm@46
|
15871 getBottomToolbar : function(){
|
rlm@46
|
15872 return this.bottomToolbar;
|
rlm@46
|
15873 },
|
rlm@46
|
15874
|
rlm@46
|
15875
|
rlm@46
|
15876 addButton : function(config, handler, scope){
|
rlm@46
|
15877 var bc = {
|
rlm@46
|
15878 handler: handler,
|
rlm@46
|
15879 scope: scope,
|
rlm@46
|
15880 minWidth: this.minButtonWidth,
|
rlm@46
|
15881 hideParent:true
|
rlm@46
|
15882 };
|
rlm@46
|
15883 if(typeof config == "string"){
|
rlm@46
|
15884 bc.text = config;
|
rlm@46
|
15885 }else{
|
rlm@46
|
15886 Ext.apply(bc, config);
|
rlm@46
|
15887 }
|
rlm@46
|
15888 var btn = new Ext.Button(bc);
|
rlm@46
|
15889 btn.ownerCt = this;
|
rlm@46
|
15890 if(!this.buttons){
|
rlm@46
|
15891 this.buttons = [];
|
rlm@46
|
15892 }
|
rlm@46
|
15893 this.buttons.push(btn);
|
rlm@46
|
15894 return btn;
|
rlm@46
|
15895 },
|
rlm@46
|
15896
|
rlm@46
|
15897 addTool : function(){
|
rlm@46
|
15898 if(!this[this.toolTarget]) { return;
|
rlm@46
|
15899 }
|
rlm@46
|
15900 if(!this.toolTemplate){
|
rlm@46
|
15901 var tt = new Ext.Template(
|
rlm@46
|
15902 '<div class="x-tool x-tool-{id}"> </div>'
|
rlm@46
|
15903 );
|
rlm@46
|
15904 tt.disableFormats = true;
|
rlm@46
|
15905 tt.compile();
|
rlm@46
|
15906 Ext.Panel.prototype.toolTemplate = tt;
|
rlm@46
|
15907 }
|
rlm@46
|
15908 for(var i = 0, a = arguments, len = a.length; i < len; i++) {
|
rlm@46
|
15909 var tc = a[i], overCls = 'x-tool-'+tc.id+'-over';
|
rlm@46
|
15910 var t = this.toolTemplate.insertFirst((tc.align !== 'left') ? this[this.toolTarget] : this[this.toolTarget].child('span'), tc, true);
|
rlm@46
|
15911 this.tools[tc.id] = t;
|
rlm@46
|
15912 t.enableDisplayMode('block');
|
rlm@46
|
15913 t.on('click', this.createToolHandler(t, tc, overCls, this));
|
rlm@46
|
15914 if(tc.on){
|
rlm@46
|
15915 t.on(tc.on);
|
rlm@46
|
15916 }
|
rlm@46
|
15917 if(tc.hidden){
|
rlm@46
|
15918 t.hide();
|
rlm@46
|
15919 }
|
rlm@46
|
15920 if(tc.qtip){
|
rlm@46
|
15921 if(typeof tc.qtip == 'object'){
|
rlm@46
|
15922 Ext.QuickTips.register(Ext.apply({
|
rlm@46
|
15923 target: t.id
|
rlm@46
|
15924 }, tc.qtip));
|
rlm@46
|
15925 } else {
|
rlm@46
|
15926 t.dom.qtip = tc.qtip;
|
rlm@46
|
15927 }
|
rlm@46
|
15928 }
|
rlm@46
|
15929 t.addClassOnOver(overCls);
|
rlm@46
|
15930 }
|
rlm@46
|
15931 },
|
rlm@46
|
15932
|
rlm@46
|
15933 onShow : function(){
|
rlm@46
|
15934 if(this.floating){
|
rlm@46
|
15935 return this.el.show();
|
rlm@46
|
15936 }
|
rlm@46
|
15937 Ext.Panel.superclass.onShow.call(this);
|
rlm@46
|
15938 },
|
rlm@46
|
15939
|
rlm@46
|
15940 onHide : function(){
|
rlm@46
|
15941 if(this.floating){
|
rlm@46
|
15942 return this.el.hide();
|
rlm@46
|
15943 }
|
rlm@46
|
15944 Ext.Panel.superclass.onHide.call(this);
|
rlm@46
|
15945 },
|
rlm@46
|
15946
|
rlm@46
|
15947 createToolHandler : function(t, tc, overCls, panel){
|
rlm@46
|
15948 return function(e){
|
rlm@46
|
15949 t.removeClass(overCls);
|
rlm@46
|
15950 e.stopEvent();
|
rlm@46
|
15951 if(tc.handler){
|
rlm@46
|
15952 tc.handler.call(tc.scope || t, e, t, panel);
|
rlm@46
|
15953 }
|
rlm@46
|
15954 };
|
rlm@46
|
15955 },
|
rlm@46
|
15956
|
rlm@46
|
15957 afterRender : function(){
|
rlm@46
|
15958 if(this.fromMarkup && this.height === undefined && !this.autoHeight){
|
rlm@46
|
15959 this.height = this.el.getHeight();
|
rlm@46
|
15960 }
|
rlm@46
|
15961 if(this.floating && !this.hidden && !this.initHidden){
|
rlm@46
|
15962 this.el.show();
|
rlm@46
|
15963 }
|
rlm@46
|
15964 if(this.title){
|
rlm@46
|
15965 this.setTitle(this.title);
|
rlm@46
|
15966 }
|
rlm@46
|
15967 this.setAutoScroll();
|
rlm@46
|
15968 if(this.html){
|
rlm@46
|
15969 this.body.update(typeof this.html == 'object' ?
|
rlm@46
|
15970 Ext.DomHelper.markup(this.html) :
|
rlm@46
|
15971 this.html);
|
rlm@46
|
15972 delete this.html;
|
rlm@46
|
15973 }
|
rlm@46
|
15974 if(this.contentEl){
|
rlm@46
|
15975 var ce = Ext.getDom(this.contentEl);
|
rlm@46
|
15976 Ext.fly(ce).removeClass(['x-hidden', 'x-hide-display']);
|
rlm@46
|
15977 this.body.dom.appendChild(ce);
|
rlm@46
|
15978 }
|
rlm@46
|
15979 if(this.collapsed){
|
rlm@46
|
15980 this.collapsed = false;
|
rlm@46
|
15981 this.collapse(false);
|
rlm@46
|
15982 }
|
rlm@46
|
15983 Ext.Panel.superclass.afterRender.call(this); this.initEvents();
|
rlm@46
|
15984 },
|
rlm@46
|
15985
|
rlm@46
|
15986 setAutoScroll : function(){
|
rlm@46
|
15987 if(this.rendered && this.autoScroll){
|
rlm@46
|
15988 this.body.setOverflow('auto');
|
rlm@46
|
15989 }
|
rlm@46
|
15990 },
|
rlm@46
|
15991
|
rlm@46
|
15992 getKeyMap : function(){
|
rlm@46
|
15993 if(!this.keyMap){
|
rlm@46
|
15994 this.keyMap = new Ext.KeyMap(this.el, this.keys);
|
rlm@46
|
15995 }
|
rlm@46
|
15996 return this.keyMap;
|
rlm@46
|
15997 },
|
rlm@46
|
15998
|
rlm@46
|
15999 initEvents : function(){
|
rlm@46
|
16000 if(this.keys){
|
rlm@46
|
16001 this.getKeyMap();
|
rlm@46
|
16002 }
|
rlm@46
|
16003 if(this.draggable){
|
rlm@46
|
16004 this.initDraggable();
|
rlm@46
|
16005 }
|
rlm@46
|
16006 },
|
rlm@46
|
16007
|
rlm@46
|
16008 initDraggable : function(){
|
rlm@46
|
16009
|
rlm@46
|
16010 this.dd = new Ext.Panel.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable);
|
rlm@46
|
16011 },
|
rlm@46
|
16012
|
rlm@46
|
16013 beforeEffect : function(){
|
rlm@46
|
16014 if(this.floating){
|
rlm@46
|
16015 this.el.beforeAction();
|
rlm@46
|
16016 }
|
rlm@46
|
16017 this.el.addClass('x-panel-animated');
|
rlm@46
|
16018 },
|
rlm@46
|
16019
|
rlm@46
|
16020 afterEffect : function(){
|
rlm@46
|
16021 this.syncShadow();
|
rlm@46
|
16022 this.el.removeClass('x-panel-animated');
|
rlm@46
|
16023 },
|
rlm@46
|
16024
|
rlm@46
|
16025 createEffect : function(a, cb, scope){
|
rlm@46
|
16026 var o = {
|
rlm@46
|
16027 scope:scope,
|
rlm@46
|
16028 block:true
|
rlm@46
|
16029 };
|
rlm@46
|
16030 if(a === true){
|
rlm@46
|
16031 o.callback = cb;
|
rlm@46
|
16032 return o;
|
rlm@46
|
16033 }else if(!a.callback){
|
rlm@46
|
16034 o.callback = cb;
|
rlm@46
|
16035 }else { o.callback = function(){
|
rlm@46
|
16036 cb.call(scope);
|
rlm@46
|
16037 Ext.callback(a.callback, a.scope);
|
rlm@46
|
16038 };
|
rlm@46
|
16039 }
|
rlm@46
|
16040 return Ext.applyIf(o, a);
|
rlm@46
|
16041 },
|
rlm@46
|
16042
|
rlm@46
|
16043
|
rlm@46
|
16044 collapse : function(animate){
|
rlm@46
|
16045 if(this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforecollapse', this, animate) === false){
|
rlm@46
|
16046 return;
|
rlm@46
|
16047 }
|
rlm@46
|
16048 var doAnim = animate === true || (animate !== false && this.animCollapse);
|
rlm@46
|
16049 this.beforeEffect();
|
rlm@46
|
16050 this.onCollapse(doAnim, animate);
|
rlm@46
|
16051 return this;
|
rlm@46
|
16052 },
|
rlm@46
|
16053
|
rlm@46
|
16054 onCollapse : function(doAnim, animArg){
|
rlm@46
|
16055 if(doAnim){
|
rlm@46
|
16056 this[this.collapseEl].slideOut(this.slideAnchor,
|
rlm@46
|
16057 Ext.apply(this.createEffect(animArg||true, this.afterCollapse, this),
|
rlm@46
|
16058 this.collapseDefaults));
|
rlm@46
|
16059 }else{
|
rlm@46
|
16060 this[this.collapseEl].hide();
|
rlm@46
|
16061 this.afterCollapse();
|
rlm@46
|
16062 }
|
rlm@46
|
16063 },
|
rlm@46
|
16064
|
rlm@46
|
16065 afterCollapse : function(){
|
rlm@46
|
16066 this.collapsed = true;
|
rlm@46
|
16067 this.el.addClass(this.collapsedCls);
|
rlm@46
|
16068 this.afterEffect();
|
rlm@46
|
16069 this.fireEvent('collapse', this);
|
rlm@46
|
16070 },
|
rlm@46
|
16071
|
rlm@46
|
16072
|
rlm@46
|
16073 expand : function(animate){
|
rlm@46
|
16074 if(!this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforeexpand', this, animate) === false){
|
rlm@46
|
16075 return;
|
rlm@46
|
16076 }
|
rlm@46
|
16077 var doAnim = animate === true || (animate !== false && this.animCollapse);
|
rlm@46
|
16078 this.el.removeClass(this.collapsedCls);
|
rlm@46
|
16079 this.beforeEffect();
|
rlm@46
|
16080 this.onExpand(doAnim, animate);
|
rlm@46
|
16081 return this;
|
rlm@46
|
16082 },
|
rlm@46
|
16083
|
rlm@46
|
16084 onExpand : function(doAnim, animArg){
|
rlm@46
|
16085 if(doAnim){
|
rlm@46
|
16086 this[this.collapseEl].slideIn(this.slideAnchor,
|
rlm@46
|
16087 Ext.apply(this.createEffect(animArg||true, this.afterExpand, this),
|
rlm@46
|
16088 this.expandDefaults));
|
rlm@46
|
16089 }else{
|
rlm@46
|
16090 this[this.collapseEl].show();
|
rlm@46
|
16091 this.afterExpand();
|
rlm@46
|
16092 }
|
rlm@46
|
16093 },
|
rlm@46
|
16094
|
rlm@46
|
16095 afterExpand : function(){
|
rlm@46
|
16096 this.collapsed = false;
|
rlm@46
|
16097 this.afterEffect();
|
rlm@46
|
16098 this.fireEvent('expand', this);
|
rlm@46
|
16099 },
|
rlm@46
|
16100
|
rlm@46
|
16101
|
rlm@46
|
16102 toggleCollapse : function(animate){
|
rlm@46
|
16103 this[this.collapsed ? 'expand' : 'collapse'](animate);
|
rlm@46
|
16104 return this;
|
rlm@46
|
16105 },
|
rlm@46
|
16106
|
rlm@46
|
16107 onDisable : function(){
|
rlm@46
|
16108 if(this.rendered && this.maskDisabled){
|
rlm@46
|
16109 this.el.mask();
|
rlm@46
|
16110 }
|
rlm@46
|
16111 Ext.Panel.superclass.onDisable.call(this);
|
rlm@46
|
16112 },
|
rlm@46
|
16113
|
rlm@46
|
16114 onEnable : function(){
|
rlm@46
|
16115 if(this.rendered && this.maskDisabled){
|
rlm@46
|
16116 this.el.unmask();
|
rlm@46
|
16117 }
|
rlm@46
|
16118 Ext.Panel.superclass.onEnable.call(this);
|
rlm@46
|
16119 },
|
rlm@46
|
16120
|
rlm@46
|
16121 onResize : function(w, h){
|
rlm@46
|
16122 if(w !== undefined || h !== undefined){
|
rlm@46
|
16123 if(!this.collapsed){
|
rlm@46
|
16124 if(typeof w == 'number'){
|
rlm@46
|
16125 this.body.setWidth(
|
rlm@46
|
16126 this.adjustBodyWidth(w - this.getFrameWidth()));
|
rlm@46
|
16127 }else if(w == 'auto'){
|
rlm@46
|
16128 this.body.setWidth(w);
|
rlm@46
|
16129 }
|
rlm@46
|
16130
|
rlm@46
|
16131 if(typeof h == 'number'){
|
rlm@46
|
16132 this.body.setHeight(
|
rlm@46
|
16133 this.adjustBodyHeight(h - this.getFrameHeight()));
|
rlm@46
|
16134 }else if(h == 'auto'){
|
rlm@46
|
16135 this.body.setHeight(h);
|
rlm@46
|
16136 }
|
rlm@46
|
16137 }else{
|
rlm@46
|
16138 this.queuedBodySize = {width: w, height: h};
|
rlm@46
|
16139 if(!this.queuedExpand && this.allowQueuedExpand !== false){
|
rlm@46
|
16140 this.queuedExpand = true;
|
rlm@46
|
16141 this.on('expand', function(){
|
rlm@46
|
16142 delete this.queuedExpand;
|
rlm@46
|
16143 this.onResize(this.queuedBodySize.width, this.queuedBodySize.height);
|
rlm@46
|
16144 this.doLayout();
|
rlm@46
|
16145 }, this, {single:true});
|
rlm@46
|
16146 }
|
rlm@46
|
16147 }
|
rlm@46
|
16148 this.fireEvent('bodyresize', this, w, h);
|
rlm@46
|
16149 }
|
rlm@46
|
16150 this.syncShadow();
|
rlm@46
|
16151 },
|
rlm@46
|
16152
|
rlm@46
|
16153 adjustBodyHeight : function(h){
|
rlm@46
|
16154 return h;
|
rlm@46
|
16155 },
|
rlm@46
|
16156
|
rlm@46
|
16157 adjustBodyWidth : function(w){
|
rlm@46
|
16158 return w;
|
rlm@46
|
16159 },
|
rlm@46
|
16160
|
rlm@46
|
16161 onPosition : function(){
|
rlm@46
|
16162 this.syncShadow();
|
rlm@46
|
16163 },
|
rlm@46
|
16164
|
rlm@46
|
16165 onDestroy : function(){
|
rlm@46
|
16166 if(this.tools){
|
rlm@46
|
16167 for(var k in this.tools){
|
rlm@46
|
16168 Ext.destroy(this.tools[k]);
|
rlm@46
|
16169 }
|
rlm@46
|
16170 }
|
rlm@46
|
16171 if(this.buttons){
|
rlm@46
|
16172 for(var b in this.buttons){
|
rlm@46
|
16173 Ext.destroy(this.buttons[b]);
|
rlm@46
|
16174 }
|
rlm@46
|
16175 }
|
rlm@46
|
16176 Ext.destroy(
|
rlm@46
|
16177 this.topToolbar,
|
rlm@46
|
16178 this.bottomToolbar
|
rlm@46
|
16179 );
|
rlm@46
|
16180 Ext.Panel.superclass.onDestroy.call(this);
|
rlm@46
|
16181 },
|
rlm@46
|
16182
|
rlm@46
|
16183
|
rlm@46
|
16184 getFrameWidth : function(){
|
rlm@46
|
16185 var w = this.el.getFrameWidth('lr');
|
rlm@46
|
16186
|
rlm@46
|
16187 if(this.frame){
|
rlm@46
|
16188 var l = this.bwrap.dom.firstChild;
|
rlm@46
|
16189 w += (Ext.fly(l).getFrameWidth('l') + Ext.fly(l.firstChild).getFrameWidth('r'));
|
rlm@46
|
16190 var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
|
rlm@46
|
16191 w += Ext.fly(mc).getFrameWidth('lr');
|
rlm@46
|
16192 }
|
rlm@46
|
16193 return w;
|
rlm@46
|
16194 },
|
rlm@46
|
16195
|
rlm@46
|
16196
|
rlm@46
|
16197 getFrameHeight : function(){
|
rlm@46
|
16198 var h = this.el.getFrameWidth('tb');
|
rlm@46
|
16199 h += (this.tbar ? this.tbar.getHeight() : 0) +
|
rlm@46
|
16200 (this.bbar ? this.bbar.getHeight() : 0);
|
rlm@46
|
16201
|
rlm@46
|
16202 if(this.frame){
|
rlm@46
|
16203 var hd = this.el.dom.firstChild;
|
rlm@46
|
16204 var ft = this.bwrap.dom.lastChild;
|
rlm@46
|
16205 h += (hd.offsetHeight + ft.offsetHeight);
|
rlm@46
|
16206 var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
|
rlm@46
|
16207 h += Ext.fly(mc).getFrameWidth('tb');
|
rlm@46
|
16208 }else{
|
rlm@46
|
16209 h += (this.header ? this.header.getHeight() : 0) +
|
rlm@46
|
16210 (this.footer ? this.footer.getHeight() : 0);
|
rlm@46
|
16211 }
|
rlm@46
|
16212 return h;
|
rlm@46
|
16213 },
|
rlm@46
|
16214
|
rlm@46
|
16215
|
rlm@46
|
16216 getInnerWidth : function(){
|
rlm@46
|
16217 return this.getSize().width - this.getFrameWidth();
|
rlm@46
|
16218 },
|
rlm@46
|
16219
|
rlm@46
|
16220
|
rlm@46
|
16221 getInnerHeight : function(){
|
rlm@46
|
16222 return this.getSize().height - this.getFrameHeight();
|
rlm@46
|
16223 },
|
rlm@46
|
16224
|
rlm@46
|
16225 syncShadow : function(){
|
rlm@46
|
16226 if(this.floating){
|
rlm@46
|
16227 this.el.sync(true);
|
rlm@46
|
16228 }
|
rlm@46
|
16229 },
|
rlm@46
|
16230
|
rlm@46
|
16231 getLayoutTarget : function(){
|
rlm@46
|
16232 return this.body;
|
rlm@46
|
16233 },
|
rlm@46
|
16234
|
rlm@46
|
16235
|
rlm@46
|
16236 setTitle : function(title, iconCls){
|
rlm@46
|
16237 this.title = title;
|
rlm@46
|
16238 if(this.header && this.headerAsText){
|
rlm@46
|
16239 this.header.child('span').update(title);
|
rlm@46
|
16240 }
|
rlm@46
|
16241 if(iconCls){
|
rlm@46
|
16242 this.setIconClass(iconCls);
|
rlm@46
|
16243 }
|
rlm@46
|
16244 this.fireEvent('titlechange', this, title);
|
rlm@46
|
16245 return this;
|
rlm@46
|
16246 },
|
rlm@46
|
16247
|
rlm@46
|
16248
|
rlm@46
|
16249 getUpdater : function(){
|
rlm@46
|
16250 return this.body.getUpdater();
|
rlm@46
|
16251 },
|
rlm@46
|
16252
|
rlm@46
|
16253
|
rlm@46
|
16254 load : function(){
|
rlm@46
|
16255 var um = this.body.getUpdater();
|
rlm@46
|
16256 um.update.apply(um, arguments);
|
rlm@46
|
16257 return this;
|
rlm@46
|
16258 },
|
rlm@46
|
16259
|
rlm@46
|
16260 beforeDestroy : function(){
|
rlm@46
|
16261 Ext.Element.uncache(
|
rlm@46
|
16262 this.header,
|
rlm@46
|
16263 this.tbar,
|
rlm@46
|
16264 this.bbar,
|
rlm@46
|
16265 this.footer,
|
rlm@46
|
16266 this.body
|
rlm@46
|
16267 );
|
rlm@46
|
16268 },
|
rlm@46
|
16269
|
rlm@46
|
16270 createClasses : function(){
|
rlm@46
|
16271 this.headerCls = this.baseCls + '-header';
|
rlm@46
|
16272 this.headerTextCls = this.baseCls + '-header-text';
|
rlm@46
|
16273 this.bwrapCls = this.baseCls + '-bwrap';
|
rlm@46
|
16274 this.tbarCls = this.baseCls + '-tbar';
|
rlm@46
|
16275 this.bodyCls = this.baseCls + '-body';
|
rlm@46
|
16276 this.bbarCls = this.baseCls + '-bbar';
|
rlm@46
|
16277 this.footerCls = this.baseCls + '-footer';
|
rlm@46
|
16278 },
|
rlm@46
|
16279
|
rlm@46
|
16280 createGhost : function(cls, useShim, appendTo){
|
rlm@46
|
16281 var el = document.createElement('div');
|
rlm@46
|
16282 el.className = 'x-panel-ghost ' + (cls ? cls : '');
|
rlm@46
|
16283 if(this.header){
|
rlm@46
|
16284 el.appendChild(this.el.dom.firstChild.cloneNode(true));
|
rlm@46
|
16285 }
|
rlm@46
|
16286 Ext.fly(el.appendChild(document.createElement('ul'))).setHeight(this.bwrap.getHeight());
|
rlm@46
|
16287 el.style.width = this.el.dom.offsetWidth + 'px';;
|
rlm@46
|
16288 if(!appendTo){
|
rlm@46
|
16289 this.container.dom.appendChild(el);
|
rlm@46
|
16290 }else{
|
rlm@46
|
16291 Ext.getDom(appendTo).appendChild(el);
|
rlm@46
|
16292 }
|
rlm@46
|
16293 if(useShim !== false && this.el.useShim !== false){
|
rlm@46
|
16294 var layer = new Ext.Layer({shadow:false, useDisplay:true, constrain:false}, el);
|
rlm@46
|
16295 layer.show();
|
rlm@46
|
16296 return layer;
|
rlm@46
|
16297 }else{
|
rlm@46
|
16298 return new Ext.Element(el);
|
rlm@46
|
16299 }
|
rlm@46
|
16300 },
|
rlm@46
|
16301
|
rlm@46
|
16302 doAutoLoad : function(){
|
rlm@46
|
16303 this.body.load(
|
rlm@46
|
16304 typeof this.autoLoad == 'object' ?
|
rlm@46
|
16305 this.autoLoad : {url: this.autoLoad});
|
rlm@46
|
16306 }
|
rlm@46
|
16307
|
rlm@46
|
16308
|
rlm@46
|
16309 });
|
rlm@46
|
16310 Ext.reg('panel', Ext.Panel);
|
rlm@46
|
16311
|
rlm@46
|
16312
|
rlm@46
|
16313 Ext.Window = Ext.extend(Ext.Panel, {
|
rlm@46
|
16314
|
rlm@46
|
16315
|
rlm@46
|
16316
|
rlm@46
|
16317
|
rlm@46
|
16318
|
rlm@46
|
16319
|
rlm@46
|
16320
|
rlm@46
|
16321
|
rlm@46
|
16322
|
rlm@46
|
16323 baseCls : 'x-window',
|
rlm@46
|
16324
|
rlm@46
|
16325 resizable:true,
|
rlm@46
|
16326
|
rlm@46
|
16327 draggable:true,
|
rlm@46
|
16328
|
rlm@46
|
16329 closable : true,
|
rlm@46
|
16330
|
rlm@46
|
16331 constrain:false,
|
rlm@46
|
16332
|
rlm@46
|
16333 constrainHeader:false,
|
rlm@46
|
16334
|
rlm@46
|
16335 plain:false,
|
rlm@46
|
16336
|
rlm@46
|
16337 minimizable : false,
|
rlm@46
|
16338
|
rlm@46
|
16339 maximizable : false,
|
rlm@46
|
16340
|
rlm@46
|
16341 minHeight: 100,
|
rlm@46
|
16342
|
rlm@46
|
16343 minWidth: 200,
|
rlm@46
|
16344
|
rlm@46
|
16345 expandOnShow: true,
|
rlm@46
|
16346
|
rlm@46
|
16347 closeAction: 'close',
|
rlm@46
|
16348
|
rlm@46
|
16349 elements: 'header,body',
|
rlm@46
|
16350
|
rlm@46
|
16351 collapsible:false,
|
rlm@46
|
16352
|
rlm@46
|
16353 initHidden : true,
|
rlm@46
|
16354
|
rlm@46
|
16355 monitorResize : true,
|
rlm@46
|
16356
|
rlm@46
|
16357 frame:true,
|
rlm@46
|
16358
|
rlm@46
|
16359 floating:true,
|
rlm@46
|
16360
|
rlm@46
|
16361 initComponent : function(){
|
rlm@46
|
16362 Ext.Window.superclass.initComponent.call(this);
|
rlm@46
|
16363 this.addEvents(
|
rlm@46
|
16364
|
rlm@46
|
16365
|
rlm@46
|
16366
|
rlm@46
|
16367 'resize',
|
rlm@46
|
16368
|
rlm@46
|
16369 'maximize',
|
rlm@46
|
16370
|
rlm@46
|
16371 'minimize',
|
rlm@46
|
16372
|
rlm@46
|
16373 'restore'
|
rlm@46
|
16374 );
|
rlm@46
|
16375 },
|
rlm@46
|
16376
|
rlm@46
|
16377 getState : function(){
|
rlm@46
|
16378 return Ext.apply(Ext.Window.superclass.getState.call(this) || {}, this.getBox());
|
rlm@46
|
16379 },
|
rlm@46
|
16380
|
rlm@46
|
16381 onRender : function(ct, position){
|
rlm@46
|
16382 Ext.Window.superclass.onRender.call(this, ct, position);
|
rlm@46
|
16383
|
rlm@46
|
16384 if(this.plain){
|
rlm@46
|
16385 this.el.addClass('x-window-plain');
|
rlm@46
|
16386 }
|
rlm@46
|
16387
|
rlm@46
|
16388 this.focusEl = this.el.createChild({
|
rlm@46
|
16389 tag: "a", href:"#", cls:"x-dlg-focus",
|
rlm@46
|
16390 tabIndex:"-1", html: " "});
|
rlm@46
|
16391 this.focusEl.swallowEvent('click', true);
|
rlm@46
|
16392
|
rlm@46
|
16393 this.proxy = this.el.createProxy("x-window-proxy");
|
rlm@46
|
16394 this.proxy.enableDisplayMode('block');
|
rlm@46
|
16395
|
rlm@46
|
16396 if(this.modal){
|
rlm@46
|
16397 this.mask = this.container.createChild({cls:"ext-el-mask"}, this.el.dom);
|
rlm@46
|
16398 this.mask.enableDisplayMode("block");
|
rlm@46
|
16399 this.mask.hide();
|
rlm@46
|
16400 }
|
rlm@46
|
16401 },
|
rlm@46
|
16402
|
rlm@46
|
16403 initEvents : function(){
|
rlm@46
|
16404 Ext.Window.superclass.initEvents.call(this);
|
rlm@46
|
16405 if(this.animateTarget){
|
rlm@46
|
16406 this.setAnimateTarget(this.animateTarget);
|
rlm@46
|
16407 }
|
rlm@46
|
16408
|
rlm@46
|
16409 if(this.resizable){
|
rlm@46
|
16410 this.resizer = new Ext.Resizable(this.el, {
|
rlm@46
|
16411 minWidth: this.minWidth,
|
rlm@46
|
16412 minHeight:this.minHeight,
|
rlm@46
|
16413 handles: this.resizeHandles || "all",
|
rlm@46
|
16414 pinned: true,
|
rlm@46
|
16415 resizeElement : this.resizerAction
|
rlm@46
|
16416 });
|
rlm@46
|
16417 this.resizer.window = this;
|
rlm@46
|
16418 this.resizer.on("beforeresize", this.beforeResize, this);
|
rlm@46
|
16419 }
|
rlm@46
|
16420
|
rlm@46
|
16421 if(this.draggable){
|
rlm@46
|
16422 this.header.addClass("x-window-draggable");
|
rlm@46
|
16423 }
|
rlm@46
|
16424 this.initTools();
|
rlm@46
|
16425
|
rlm@46
|
16426 this.el.on("mousedown", this.toFront, this);
|
rlm@46
|
16427 this.manager = this.manager || Ext.WindowMgr;
|
rlm@46
|
16428 this.manager.register(this);
|
rlm@46
|
16429 this.hidden = true;
|
rlm@46
|
16430 if(this.maximized){
|
rlm@46
|
16431 this.maximized = false;
|
rlm@46
|
16432 this.maximize();
|
rlm@46
|
16433 }
|
rlm@46
|
16434 if(this.closable){
|
rlm@46
|
16435 var km = this.getKeyMap();
|
rlm@46
|
16436 km.on(27, this.onEsc, this);
|
rlm@46
|
16437 km.disable();
|
rlm@46
|
16438 }
|
rlm@46
|
16439 },
|
rlm@46
|
16440
|
rlm@46
|
16441 initDraggable : function(){
|
rlm@46
|
16442
|
rlm@46
|
16443 this.dd = new Ext.Window.DD(this);
|
rlm@46
|
16444 },
|
rlm@46
|
16445
|
rlm@46
|
16446 onEsc : function(){
|
rlm@46
|
16447 this[this.closeAction]();
|
rlm@46
|
16448 },
|
rlm@46
|
16449
|
rlm@46
|
16450 beforeDestroy : function(){
|
rlm@46
|
16451 Ext.destroy(
|
rlm@46
|
16452 this.resizer,
|
rlm@46
|
16453 this.dd,
|
rlm@46
|
16454 this.proxy,
|
rlm@46
|
16455 this.mask
|
rlm@46
|
16456 );
|
rlm@46
|
16457 Ext.Window.superclass.beforeDestroy.call(this);
|
rlm@46
|
16458 },
|
rlm@46
|
16459
|
rlm@46
|
16460 onDestroy : function(){
|
rlm@46
|
16461 if(this.manager){
|
rlm@46
|
16462 this.manager.unregister(this);
|
rlm@46
|
16463 }
|
rlm@46
|
16464 Ext.Window.superclass.onDestroy.call(this);
|
rlm@46
|
16465 },
|
rlm@46
|
16466
|
rlm@46
|
16467 initTools : function(){
|
rlm@46
|
16468 if(this.minimizable){
|
rlm@46
|
16469 this.addTool({
|
rlm@46
|
16470 id: 'minimize',
|
rlm@46
|
16471 handler: this.minimize.createDelegate(this, [])
|
rlm@46
|
16472 });
|
rlm@46
|
16473 }
|
rlm@46
|
16474 if(this.maximizable){
|
rlm@46
|
16475 this.addTool({
|
rlm@46
|
16476 id: 'maximize',
|
rlm@46
|
16477 handler: this.maximize.createDelegate(this, [])
|
rlm@46
|
16478 });
|
rlm@46
|
16479 this.addTool({
|
rlm@46
|
16480 id: 'restore',
|
rlm@46
|
16481 handler: this.restore.createDelegate(this, []),
|
rlm@46
|
16482 hidden:true
|
rlm@46
|
16483 });
|
rlm@46
|
16484 this.header.on('dblclick', this.toggleMaximize, this);
|
rlm@46
|
16485 }
|
rlm@46
|
16486 if(this.closable){
|
rlm@46
|
16487 this.addTool({
|
rlm@46
|
16488 id: 'close',
|
rlm@46
|
16489 handler: this[this.closeAction].createDelegate(this, [])
|
rlm@46
|
16490 });
|
rlm@46
|
16491 }
|
rlm@46
|
16492 },
|
rlm@46
|
16493
|
rlm@46
|
16494 resizerAction : function(){
|
rlm@46
|
16495 var box = this.proxy.getBox();
|
rlm@46
|
16496 this.proxy.hide();
|
rlm@46
|
16497 this.window.handleResize(box);
|
rlm@46
|
16498 return box;
|
rlm@46
|
16499 },
|
rlm@46
|
16500
|
rlm@46
|
16501 beforeResize : function(){
|
rlm@46
|
16502 this.resizer.minHeight = Math.max(this.minHeight, this.getFrameHeight() + 40); this.resizer.minWidth = Math.max(this.minWidth, this.getFrameWidth() + 40);
|
rlm@46
|
16503 this.resizeBox = this.el.getBox();
|
rlm@46
|
16504 },
|
rlm@46
|
16505
|
rlm@46
|
16506 updateHandles : function(){
|
rlm@46
|
16507 if(Ext.isIE && this.resizer){
|
rlm@46
|
16508 this.resizer.syncHandleHeight();
|
rlm@46
|
16509 this.el.repaint();
|
rlm@46
|
16510 }
|
rlm@46
|
16511 },
|
rlm@46
|
16512
|
rlm@46
|
16513 handleResize : function(box){
|
rlm@46
|
16514 var rz = this.resizeBox;
|
rlm@46
|
16515 if(rz.x != box.x || rz.y != box.y){
|
rlm@46
|
16516 this.updateBox(box);
|
rlm@46
|
16517 }else{
|
rlm@46
|
16518 this.setSize(box);
|
rlm@46
|
16519 }
|
rlm@46
|
16520 this.focus();
|
rlm@46
|
16521 this.updateHandles();
|
rlm@46
|
16522 this.saveState();
|
rlm@46
|
16523 this.fireEvent("resize", this, box.width, box.height);
|
rlm@46
|
16524 },
|
rlm@46
|
16525
|
rlm@46
|
16526
|
rlm@46
|
16527 focus : function(){
|
rlm@46
|
16528 var f = this.focusEl, db = this.defaultButton, t = typeof db;
|
rlm@46
|
16529 if(t != 'undefined'){
|
rlm@46
|
16530 if(t == 'number'){
|
rlm@46
|
16531 f = this.buttons[db];
|
rlm@46
|
16532 }else if(t == 'string'){
|
rlm@46
|
16533 f = Ext.getCmp(db);
|
rlm@46
|
16534 }else{
|
rlm@46
|
16535 f = db;
|
rlm@46
|
16536 }
|
rlm@46
|
16537 }
|
rlm@46
|
16538 f.focus.defer(10, f);
|
rlm@46
|
16539 },
|
rlm@46
|
16540
|
rlm@46
|
16541
|
rlm@46
|
16542 setAnimateTarget : function(el){
|
rlm@46
|
16543 el = Ext.get(el);
|
rlm@46
|
16544 this.animateTarget = el;
|
rlm@46
|
16545 },
|
rlm@46
|
16546
|
rlm@46
|
16547 beforeShow : function(){
|
rlm@46
|
16548 delete this.el.lastXY;
|
rlm@46
|
16549 delete this.el.lastLT;
|
rlm@46
|
16550 if(this.x === undefined || this.y === undefined){
|
rlm@46
|
16551 var xy = this.el.getAlignToXY(this.container, 'c-c');
|
rlm@46
|
16552 var pos = this.el.translatePoints(xy[0], xy[1]);
|
rlm@46
|
16553 this.x = this.x === undefined? pos.left : this.x;
|
rlm@46
|
16554 this.y = this.y === undefined? pos.top : this.y;
|
rlm@46
|
16555 }
|
rlm@46
|
16556 this.el.setLeftTop(this.x, this.y);
|
rlm@46
|
16557
|
rlm@46
|
16558 if(this.expandOnShow){
|
rlm@46
|
16559 this.expand(false);
|
rlm@46
|
16560 }
|
rlm@46
|
16561
|
rlm@46
|
16562 if(this.modal){
|
rlm@46
|
16563 Ext.getBody().addClass("x-body-masked");
|
rlm@46
|
16564 this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
|
rlm@46
|
16565 this.mask.show();
|
rlm@46
|
16566 }
|
rlm@46
|
16567 },
|
rlm@46
|
16568
|
rlm@46
|
16569
|
rlm@46
|
16570 show : function(animateTarget, cb, scope){
|
rlm@46
|
16571 if(!this.rendered){
|
rlm@46
|
16572 this.render(Ext.getBody());
|
rlm@46
|
16573 }
|
rlm@46
|
16574 if(this.hidden === false){
|
rlm@46
|
16575 this.toFront();
|
rlm@46
|
16576 return;
|
rlm@46
|
16577 }
|
rlm@46
|
16578 if(this.fireEvent("beforeshow", this) === false){
|
rlm@46
|
16579 return;
|
rlm@46
|
16580 }
|
rlm@46
|
16581 if(cb){
|
rlm@46
|
16582 this.on('show', cb, scope, {single:true});
|
rlm@46
|
16583 }
|
rlm@46
|
16584 this.hidden = false;
|
rlm@46
|
16585 if(animateTarget !== undefined){
|
rlm@46
|
16586 this.setAnimateTarget(animateTarget);
|
rlm@46
|
16587 }
|
rlm@46
|
16588 this.beforeShow();
|
rlm@46
|
16589 if(this.animateTarget){
|
rlm@46
|
16590 this.animShow();
|
rlm@46
|
16591 }else{
|
rlm@46
|
16592 this.afterShow();
|
rlm@46
|
16593 }
|
rlm@46
|
16594 },
|
rlm@46
|
16595
|
rlm@46
|
16596 afterShow : function(){
|
rlm@46
|
16597 this.proxy.hide();
|
rlm@46
|
16598 this.el.setStyle('display', 'block');
|
rlm@46
|
16599 this.el.show();
|
rlm@46
|
16600 if(this.maximized){
|
rlm@46
|
16601 this.fitContainer();
|
rlm@46
|
16602 }
|
rlm@46
|
16603 if(Ext.isMac && Ext.isGecko){ this.cascade(this.setAutoScroll);
|
rlm@46
|
16604 }
|
rlm@46
|
16605
|
rlm@46
|
16606 if(this.monitorResize || this.modal || this.constrain || this.constrainHeader){
|
rlm@46
|
16607 Ext.EventManager.onWindowResize(this.onWindowResize, this);
|
rlm@46
|
16608 }
|
rlm@46
|
16609 this.doConstrain();
|
rlm@46
|
16610 if(this.layout){
|
rlm@46
|
16611 this.doLayout();
|
rlm@46
|
16612 }
|
rlm@46
|
16613 if(this.keyMap){
|
rlm@46
|
16614 this.keyMap.enable();
|
rlm@46
|
16615 }
|
rlm@46
|
16616 this.toFront();
|
rlm@46
|
16617 this.updateHandles();
|
rlm@46
|
16618 this.fireEvent("show", this);
|
rlm@46
|
16619 },
|
rlm@46
|
16620
|
rlm@46
|
16621 animShow : function(){
|
rlm@46
|
16622 this.proxy.show();
|
rlm@46
|
16623 this.proxy.setBox(this.animateTarget.getBox());
|
rlm@46
|
16624 this.proxy.setOpacity(0);
|
rlm@46
|
16625 var b = this.getBox(false);
|
rlm@46
|
16626 b.callback = this.afterShow;
|
rlm@46
|
16627 b.scope = this;
|
rlm@46
|
16628 b.duration = .25;
|
rlm@46
|
16629 b.easing = 'easeNone';
|
rlm@46
|
16630 b.opacity = .5;
|
rlm@46
|
16631 b.block = true;
|
rlm@46
|
16632 this.el.setStyle('display', 'none');
|
rlm@46
|
16633 this.proxy.shift(b);
|
rlm@46
|
16634 },
|
rlm@46
|
16635
|
rlm@46
|
16636
|
rlm@46
|
16637 hide : function(animateTarget, cb, scope){
|
rlm@46
|
16638 if(this.hidden || this.fireEvent("beforehide", this) === false){
|
rlm@46
|
16639 return;
|
rlm@46
|
16640 }
|
rlm@46
|
16641 if(cb){
|
rlm@46
|
16642 this.on('hide', cb, scope, {single:true});
|
rlm@46
|
16643 }
|
rlm@46
|
16644 this.hidden = true;
|
rlm@46
|
16645 if(animateTarget !== undefined){
|
rlm@46
|
16646 this.setAnimateTarget(animateTarget);
|
rlm@46
|
16647 }
|
rlm@46
|
16648 if(this.animateTarget){
|
rlm@46
|
16649 this.animHide();
|
rlm@46
|
16650 }else{
|
rlm@46
|
16651 this.el.hide();
|
rlm@46
|
16652 this.afterHide();
|
rlm@46
|
16653 }
|
rlm@46
|
16654 },
|
rlm@46
|
16655
|
rlm@46
|
16656 afterHide : function(){
|
rlm@46
|
16657 this.proxy.hide();
|
rlm@46
|
16658 if(this.monitorResize || this.modal || this.constrain || this.constrainHeader){
|
rlm@46
|
16659 Ext.EventManager.removeResizeListener(this.onWindowResize, this);
|
rlm@46
|
16660 }
|
rlm@46
|
16661 if(this.modal){
|
rlm@46
|
16662 this.mask.hide();
|
rlm@46
|
16663 Ext.getBody().removeClass("x-body-masked");
|
rlm@46
|
16664 }
|
rlm@46
|
16665 if(this.keyMap){
|
rlm@46
|
16666 this.keyMap.disable();
|
rlm@46
|
16667 }
|
rlm@46
|
16668 this.fireEvent("hide", this);
|
rlm@46
|
16669 },
|
rlm@46
|
16670
|
rlm@46
|
16671 animHide : function(){
|
rlm@46
|
16672 this.proxy.setOpacity(.5);
|
rlm@46
|
16673 this.proxy.show();
|
rlm@46
|
16674 var tb = this.getBox(false);
|
rlm@46
|
16675 this.proxy.setBox(tb);
|
rlm@46
|
16676 this.el.hide();
|
rlm@46
|
16677 var b = this.animateTarget.getBox();
|
rlm@46
|
16678 b.callback = this.afterHide;
|
rlm@46
|
16679 b.scope = this;
|
rlm@46
|
16680 b.duration = .25;
|
rlm@46
|
16681 b.easing = 'easeNone';
|
rlm@46
|
16682 b.block = true;
|
rlm@46
|
16683 b.opacity = 0;
|
rlm@46
|
16684 this.proxy.shift(b);
|
rlm@46
|
16685 },
|
rlm@46
|
16686
|
rlm@46
|
16687 onWindowResize : function(){
|
rlm@46
|
16688 if(this.maximized){
|
rlm@46
|
16689 this.fitContainer();
|
rlm@46
|
16690 }
|
rlm@46
|
16691 if(this.modal){
|
rlm@46
|
16692 this.mask.setSize('100%', '100%');
|
rlm@46
|
16693 var force = this.mask.dom.offsetHeight;
|
rlm@46
|
16694 this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
|
rlm@46
|
16695 }
|
rlm@46
|
16696 this.doConstrain();
|
rlm@46
|
16697 },
|
rlm@46
|
16698
|
rlm@46
|
16699 doConstrain : function(){
|
rlm@46
|
16700 if(this.constrain || this.constrainHeader){
|
rlm@46
|
16701 var offsets;
|
rlm@46
|
16702 if(this.constrain){
|
rlm@46
|
16703 offsets = {
|
rlm@46
|
16704 right:this.el.shadowOffset,
|
rlm@46
|
16705 left:this.el.shadowOffset,
|
rlm@46
|
16706 bottom:this.el.shadowOffset
|
rlm@46
|
16707 };
|
rlm@46
|
16708 }else {
|
rlm@46
|
16709 var s = this.getSize();
|
rlm@46
|
16710 offsets = {
|
rlm@46
|
16711 right:-(s.width - 100),
|
rlm@46
|
16712 bottom:-(s.height - 25)
|
rlm@46
|
16713 };
|
rlm@46
|
16714 }
|
rlm@46
|
16715
|
rlm@46
|
16716 var xy = this.el.getConstrainToXY(this.container, true, offsets);
|
rlm@46
|
16717 if(xy){
|
rlm@46
|
16718 this.setPosition(xy[0], xy[1]);
|
rlm@46
|
16719 }
|
rlm@46
|
16720 }
|
rlm@46
|
16721 },
|
rlm@46
|
16722
|
rlm@46
|
16723 ghost : function(cls){
|
rlm@46
|
16724 var ghost = this.createGhost(cls);
|
rlm@46
|
16725 var box = this.getBox(true);
|
rlm@46
|
16726 ghost.setLeftTop(box.x, box.y);
|
rlm@46
|
16727 ghost.setWidth(box.width);
|
rlm@46
|
16728 this.el.hide();
|
rlm@46
|
16729 this.activeGhost = ghost;
|
rlm@46
|
16730 return ghost;
|
rlm@46
|
16731 },
|
rlm@46
|
16732
|
rlm@46
|
16733 unghost : function(show, matchPosition){
|
rlm@46
|
16734 if(show !== false){
|
rlm@46
|
16735 this.el.show();
|
rlm@46
|
16736 this.focus();
|
rlm@46
|
16737 if(Ext.isMac && Ext.isGecko){ this.cascade(this.setAutoScroll);
|
rlm@46
|
16738 }
|
rlm@46
|
16739 }
|
rlm@46
|
16740 if(matchPosition !== false){
|
rlm@46
|
16741 this.setPosition(this.activeGhost.getLeft(true), this.activeGhost.getTop(true));
|
rlm@46
|
16742 }
|
rlm@46
|
16743 this.activeGhost.hide();
|
rlm@46
|
16744 this.activeGhost.remove();
|
rlm@46
|
16745 delete this.activeGhost;
|
rlm@46
|
16746 },
|
rlm@46
|
16747
|
rlm@46
|
16748
|
rlm@46
|
16749 minimize : function(){
|
rlm@46
|
16750 this.fireEvent('minimize', this);
|
rlm@46
|
16751 },
|
rlm@46
|
16752
|
rlm@46
|
16753
|
rlm@46
|
16754 close : function(){
|
rlm@46
|
16755 if(this.fireEvent("beforeclose", this) !== false){
|
rlm@46
|
16756 this.hide(null, function(){
|
rlm@46
|
16757 this.fireEvent('close', this);
|
rlm@46
|
16758 this.destroy();
|
rlm@46
|
16759 }, this);
|
rlm@46
|
16760 }
|
rlm@46
|
16761 },
|
rlm@46
|
16762
|
rlm@46
|
16763
|
rlm@46
|
16764 maximize : function(){
|
rlm@46
|
16765 if(!this.maximized){
|
rlm@46
|
16766 this.expand(false);
|
rlm@46
|
16767 this.restoreSize = this.getSize();
|
rlm@46
|
16768 this.restorePos = this.getPosition(true);
|
rlm@46
|
16769 if (this.maximizable){
|
rlm@46
|
16770 this.tools.maximize.hide();
|
rlm@46
|
16771 this.tools.restore.show();
|
rlm@46
|
16772 }
|
rlm@46
|
16773 this.maximized = true;
|
rlm@46
|
16774 this.el.disableShadow();
|
rlm@46
|
16775
|
rlm@46
|
16776 if(this.dd){
|
rlm@46
|
16777 this.dd.lock();
|
rlm@46
|
16778 }
|
rlm@46
|
16779 if(this.collapsible){
|
rlm@46
|
16780 this.tools.toggle.hide();
|
rlm@46
|
16781 }
|
rlm@46
|
16782 this.el.addClass('x-window-maximized');
|
rlm@46
|
16783 this.container.addClass('x-window-maximized-ct');
|
rlm@46
|
16784
|
rlm@46
|
16785 this.setPosition(0, 0);
|
rlm@46
|
16786 this.fitContainer();
|
rlm@46
|
16787 this.fireEvent('maximize', this);
|
rlm@46
|
16788 }
|
rlm@46
|
16789 },
|
rlm@46
|
16790
|
rlm@46
|
16791
|
rlm@46
|
16792 restore : function(){
|
rlm@46
|
16793 if(this.maximized){
|
rlm@46
|
16794 this.el.removeClass('x-window-maximized');
|
rlm@46
|
16795 this.tools.restore.hide();
|
rlm@46
|
16796 this.tools.maximize.show();
|
rlm@46
|
16797 this.setPosition(this.restorePos[0], this.restorePos[1]);
|
rlm@46
|
16798 this.setSize(this.restoreSize.width, this.restoreSize.height);
|
rlm@46
|
16799 delete this.restorePos;
|
rlm@46
|
16800 delete this.restoreSize;
|
rlm@46
|
16801 this.maximized = false;
|
rlm@46
|
16802 this.el.enableShadow(true);
|
rlm@46
|
16803
|
rlm@46
|
16804 if(this.dd){
|
rlm@46
|
16805 this.dd.unlock();
|
rlm@46
|
16806 }
|
rlm@46
|
16807 if(this.collapsible){
|
rlm@46
|
16808 this.tools.toggle.show();
|
rlm@46
|
16809 }
|
rlm@46
|
16810 this.container.removeClass('x-window-maximized-ct');
|
rlm@46
|
16811
|
rlm@46
|
16812 this.doConstrain();
|
rlm@46
|
16813 this.fireEvent('restore', this);
|
rlm@46
|
16814 }
|
rlm@46
|
16815 },
|
rlm@46
|
16816
|
rlm@46
|
16817
|
rlm@46
|
16818 toggleMaximize : function(){
|
rlm@46
|
16819 this[this.maximized ? 'restore' : 'maximize']();
|
rlm@46
|
16820 },
|
rlm@46
|
16821
|
rlm@46
|
16822 fitContainer : function(){
|
rlm@46
|
16823 var vs = this.container.getViewSize();
|
rlm@46
|
16824 this.setSize(vs.width, vs.height);
|
rlm@46
|
16825 },
|
rlm@46
|
16826
|
rlm@46
|
16827 setZIndex : function(index){
|
rlm@46
|
16828 if(this.modal){
|
rlm@46
|
16829 this.mask.setStyle("z-index", index);
|
rlm@46
|
16830 }
|
rlm@46
|
16831 this.el.setZIndex(++index);
|
rlm@46
|
16832 index += 5;
|
rlm@46
|
16833
|
rlm@46
|
16834 if(this.resizer){
|
rlm@46
|
16835 this.resizer.proxy.setStyle("z-index", ++index);
|
rlm@46
|
16836 }
|
rlm@46
|
16837
|
rlm@46
|
16838 this.lastZIndex = index;
|
rlm@46
|
16839 },
|
rlm@46
|
16840
|
rlm@46
|
16841
|
rlm@46
|
16842 alignTo : function(element, position, offsets){
|
rlm@46
|
16843 var xy = this.el.getAlignToXY(element, position, offsets);
|
rlm@46
|
16844 this.setPagePosition(xy[0], xy[1]);
|
rlm@46
|
16845 return this;
|
rlm@46
|
16846 },
|
rlm@46
|
16847
|
rlm@46
|
16848
|
rlm@46
|
16849 anchorTo : function(el, alignment, offsets, monitorScroll, _pname){
|
rlm@46
|
16850 var action = function(){
|
rlm@46
|
16851 this.alignTo(el, alignment, offsets);
|
rlm@46
|
16852 };
|
rlm@46
|
16853 Ext.EventManager.onWindowResize(action, this);
|
rlm@46
|
16854 var tm = typeof monitorScroll;
|
rlm@46
|
16855 if(tm != 'undefined'){
|
rlm@46
|
16856 Ext.EventManager.on(window, 'scroll', action, this,
|
rlm@46
|
16857 {buffer: tm == 'number' ? monitorScroll : 50});
|
rlm@46
|
16858 }
|
rlm@46
|
16859 action.call(this);
|
rlm@46
|
16860 this[_pname] = action;
|
rlm@46
|
16861 return this;
|
rlm@46
|
16862 },
|
rlm@46
|
16863
|
rlm@46
|
16864
|
rlm@46
|
16865 toFront : function(){
|
rlm@46
|
16866 if(this.manager.bringToFront(this)){
|
rlm@46
|
16867 this.focus();
|
rlm@46
|
16868 }
|
rlm@46
|
16869 return this;
|
rlm@46
|
16870 },
|
rlm@46
|
16871
|
rlm@46
|
16872
|
rlm@46
|
16873 setActive : function(active){
|
rlm@46
|
16874 if(active){
|
rlm@46
|
16875 if(!this.maximized){
|
rlm@46
|
16876 this.el.enableShadow(true);
|
rlm@46
|
16877 }
|
rlm@46
|
16878 this.fireEvent('activate', this);
|
rlm@46
|
16879 }else{
|
rlm@46
|
16880 this.el.disableShadow();
|
rlm@46
|
16881 this.fireEvent('deactivate', this);
|
rlm@46
|
16882 }
|
rlm@46
|
16883 },
|
rlm@46
|
16884
|
rlm@46
|
16885
|
rlm@46
|
16886 toBack : function(){
|
rlm@46
|
16887 this.manager.sendToBack(this);
|
rlm@46
|
16888 return this;
|
rlm@46
|
16889 },
|
rlm@46
|
16890
|
rlm@46
|
16891
|
rlm@46
|
16892 center : function(){
|
rlm@46
|
16893 var xy = this.el.getAlignToXY(this.container, 'c-c');
|
rlm@46
|
16894 this.setPagePosition(xy[0], xy[1]);
|
rlm@46
|
16895 return this;
|
rlm@46
|
16896 }
|
rlm@46
|
16897 });
|
rlm@46
|
16898 Ext.reg('window', Ext.Window);
|
rlm@46
|
16899
|
rlm@46
|
16900 Ext.Window.DD = function(win){
|
rlm@46
|
16901 this.win = win;
|
rlm@46
|
16902 Ext.Window.DD.superclass.constructor.call(this, win.el.id, 'WindowDD-'+win.id);
|
rlm@46
|
16903 this.setHandleElId(win.header.id);
|
rlm@46
|
16904 this.scroll = false;
|
rlm@46
|
16905 };
|
rlm@46
|
16906
|
rlm@46
|
16907 Ext.extend(Ext.Window.DD, Ext.dd.DD, {
|
rlm@46
|
16908 moveOnly:true,
|
rlm@46
|
16909 headerOffsets:[100, 25],
|
rlm@46
|
16910 startDrag : function(){
|
rlm@46
|
16911 var w = this.win;
|
rlm@46
|
16912 this.proxy = w.ghost();
|
rlm@46
|
16913 if(w.constrain !== false){
|
rlm@46
|
16914 var so = w.el.shadowOffset;
|
rlm@46
|
16915 this.constrainTo(w.container, {right: so, left: so, bottom: so});
|
rlm@46
|
16916 }else if(w.constrainHeader !== false){
|
rlm@46
|
16917 var s = this.proxy.getSize();
|
rlm@46
|
16918 this.constrainTo(w.container, {right: -(s.width-this.headerOffsets[0]), bottom: -(s.height-this.headerOffsets[1])});
|
rlm@46
|
16919 }
|
rlm@46
|
16920 },
|
rlm@46
|
16921 b4Drag : Ext.emptyFn,
|
rlm@46
|
16922
|
rlm@46
|
16923 onDrag : function(e){
|
rlm@46
|
16924 this.alignElWithMouse(this.proxy, e.getPageX(), e.getPageY());
|
rlm@46
|
16925 },
|
rlm@46
|
16926
|
rlm@46
|
16927 endDrag : function(e){
|
rlm@46
|
16928 this.win.unghost();
|
rlm@46
|
16929 this.win.saveState();
|
rlm@46
|
16930 }
|
rlm@46
|
16931 });
|
rlm@46
|
16932
|
rlm@46
|
16933
|
rlm@46
|
16934 Ext.WindowGroup = function(){
|
rlm@46
|
16935 var list = {};
|
rlm@46
|
16936 var accessList = [];
|
rlm@46
|
16937 var front = null;
|
rlm@46
|
16938
|
rlm@46
|
16939 var sortWindows = function(d1, d2){
|
rlm@46
|
16940 return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
|
rlm@46
|
16941 };
|
rlm@46
|
16942
|
rlm@46
|
16943 var orderWindows = function(){
|
rlm@46
|
16944 var a = accessList, len = a.length;
|
rlm@46
|
16945 if(len > 0){
|
rlm@46
|
16946 a.sort(sortWindows);
|
rlm@46
|
16947 var seed = a[0].manager.zseed;
|
rlm@46
|
16948 for(var i = 0; i < len; i++){
|
rlm@46
|
16949 var win = a[i];
|
rlm@46
|
16950 if(win && !win.hidden){
|
rlm@46
|
16951 win.setZIndex(seed + (i*10));
|
rlm@46
|
16952 }
|
rlm@46
|
16953 }
|
rlm@46
|
16954 }
|
rlm@46
|
16955 activateLast();
|
rlm@46
|
16956 };
|
rlm@46
|
16957
|
rlm@46
|
16958 var setActiveWin = function(win){
|
rlm@46
|
16959 if(win != front){
|
rlm@46
|
16960 if(front){
|
rlm@46
|
16961 front.setActive(false);
|
rlm@46
|
16962 }
|
rlm@46
|
16963 front = win;
|
rlm@46
|
16964 if(win){
|
rlm@46
|
16965 win.setActive(true);
|
rlm@46
|
16966 }
|
rlm@46
|
16967 }
|
rlm@46
|
16968 };
|
rlm@46
|
16969
|
rlm@46
|
16970 var activateLast = function(){
|
rlm@46
|
16971 for(var i = accessList.length-1; i >=0; --i) {
|
rlm@46
|
16972 if(!accessList[i].hidden){
|
rlm@46
|
16973 setActiveWin(accessList[i]);
|
rlm@46
|
16974 return;
|
rlm@46
|
16975 }
|
rlm@46
|
16976 }
|
rlm@46
|
16977 setActiveWin(null);
|
rlm@46
|
16978 };
|
rlm@46
|
16979
|
rlm@46
|
16980 return {
|
rlm@46
|
16981
|
rlm@46
|
16982 zseed : 9000,
|
rlm@46
|
16983
|
rlm@46
|
16984 register : function(win){
|
rlm@46
|
16985 list[win.id] = win;
|
rlm@46
|
16986 accessList.push(win);
|
rlm@46
|
16987 win.on('hide', activateLast);
|
rlm@46
|
16988 },
|
rlm@46
|
16989
|
rlm@46
|
16990 unregister : function(win){
|
rlm@46
|
16991 delete list[win.id];
|
rlm@46
|
16992 win.un('hide', activateLast);
|
rlm@46
|
16993 accessList.remove(win);
|
rlm@46
|
16994 },
|
rlm@46
|
16995
|
rlm@46
|
16996
|
rlm@46
|
16997 get : function(id){
|
rlm@46
|
16998 return typeof id == "object" ? id : list[id];
|
rlm@46
|
16999 },
|
rlm@46
|
17000
|
rlm@46
|
17001
|
rlm@46
|
17002 bringToFront : function(win){
|
rlm@46
|
17003 win = this.get(win);
|
rlm@46
|
17004 if(win != front){
|
rlm@46
|
17005 win._lastAccess = new Date().getTime();
|
rlm@46
|
17006 orderWindows();
|
rlm@46
|
17007 return true;
|
rlm@46
|
17008 }
|
rlm@46
|
17009 return false;
|
rlm@46
|
17010 },
|
rlm@46
|
17011
|
rlm@46
|
17012
|
rlm@46
|
17013 sendToBack : function(win){
|
rlm@46
|
17014 win = this.get(win);
|
rlm@46
|
17015 win._lastAccess = -(new Date().getTime());
|
rlm@46
|
17016 orderWindows();
|
rlm@46
|
17017 return win;
|
rlm@46
|
17018 },
|
rlm@46
|
17019
|
rlm@46
|
17020
|
rlm@46
|
17021 hideAll : function(){
|
rlm@46
|
17022 for(var id in list){
|
rlm@46
|
17023 if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
|
rlm@46
|
17024 list[id].hide();
|
rlm@46
|
17025 }
|
rlm@46
|
17026 }
|
rlm@46
|
17027 },
|
rlm@46
|
17028
|
rlm@46
|
17029
|
rlm@46
|
17030 getActive : function(){
|
rlm@46
|
17031 return front;
|
rlm@46
|
17032 },
|
rlm@46
|
17033
|
rlm@46
|
17034
|
rlm@46
|
17035 getBy : function(fn, scope){
|
rlm@46
|
17036 var r = [];
|
rlm@46
|
17037 for(var i = accessList.length-1; i >=0; --i) {
|
rlm@46
|
17038 var win = accessList[i];
|
rlm@46
|
17039 if(fn.call(scope||win, win) !== false){
|
rlm@46
|
17040 r.push(win);
|
rlm@46
|
17041 }
|
rlm@46
|
17042 }
|
rlm@46
|
17043 return r;
|
rlm@46
|
17044 },
|
rlm@46
|
17045
|
rlm@46
|
17046
|
rlm@46
|
17047 each : function(fn, scope){
|
rlm@46
|
17048 for(var id in list){
|
rlm@46
|
17049 if(list[id] && typeof list[id] != "function"){
|
rlm@46
|
17050 if(fn.call(scope || list[id], list[id]) === false){
|
rlm@46
|
17051 return;
|
rlm@46
|
17052 }
|
rlm@46
|
17053 }
|
rlm@46
|
17054 }
|
rlm@46
|
17055 }
|
rlm@46
|
17056 };
|
rlm@46
|
17057 };
|
rlm@46
|
17058
|
rlm@46
|
17059
|
rlm@46
|
17060
|
rlm@46
|
17061 Ext.WindowMgr = new Ext.WindowGroup();
|
rlm@46
|
17062
|
rlm@46
|
17063 Ext.dd.PanelProxy = function(panel, config){
|
rlm@46
|
17064 this.panel = panel;
|
rlm@46
|
17065 this.id = this.panel.id +'-ddproxy';
|
rlm@46
|
17066 Ext.apply(this, config);
|
rlm@46
|
17067 };
|
rlm@46
|
17068
|
rlm@46
|
17069 Ext.dd.PanelProxy.prototype = {
|
rlm@46
|
17070
|
rlm@46
|
17071 insertProxy : true,
|
rlm@46
|
17072
|
rlm@46
|
17073
|
rlm@46
|
17074 setStatus : Ext.emptyFn,
|
rlm@46
|
17075 reset : Ext.emptyFn,
|
rlm@46
|
17076 update : Ext.emptyFn,
|
rlm@46
|
17077 stop : Ext.emptyFn,
|
rlm@46
|
17078 sync: Ext.emptyFn,
|
rlm@46
|
17079
|
rlm@46
|
17080
|
rlm@46
|
17081 getEl : function(){
|
rlm@46
|
17082 return this.ghost;
|
rlm@46
|
17083 },
|
rlm@46
|
17084
|
rlm@46
|
17085
|
rlm@46
|
17086 getGhost : function(){
|
rlm@46
|
17087 return this.ghost;
|
rlm@46
|
17088 },
|
rlm@46
|
17089
|
rlm@46
|
17090
|
rlm@46
|
17091 getProxy : function(){
|
rlm@46
|
17092 return this.proxy;
|
rlm@46
|
17093 },
|
rlm@46
|
17094
|
rlm@46
|
17095
|
rlm@46
|
17096 hide : function(){
|
rlm@46
|
17097 if(this.ghost){
|
rlm@46
|
17098 if(this.proxy){
|
rlm@46
|
17099 this.proxy.remove();
|
rlm@46
|
17100 delete this.proxy;
|
rlm@46
|
17101 }
|
rlm@46
|
17102 this.panel.el.dom.style.display = '';
|
rlm@46
|
17103 this.ghost.remove();
|
rlm@46
|
17104 delete this.ghost;
|
rlm@46
|
17105 }
|
rlm@46
|
17106 },
|
rlm@46
|
17107
|
rlm@46
|
17108
|
rlm@46
|
17109 show : function(){
|
rlm@46
|
17110 if(!this.ghost){
|
rlm@46
|
17111 this.ghost = this.panel.createGhost(undefined, undefined, Ext.getBody());
|
rlm@46
|
17112 this.ghost.setXY(this.panel.el.getXY())
|
rlm@46
|
17113 if(this.insertProxy){
|
rlm@46
|
17114 this.proxy = this.panel.el.insertSibling({cls:'x-panel-dd-spacer'});
|
rlm@46
|
17115 this.proxy.setSize(this.panel.getSize());
|
rlm@46
|
17116 }
|
rlm@46
|
17117 this.panel.el.dom.style.display = 'none';
|
rlm@46
|
17118 }
|
rlm@46
|
17119 },
|
rlm@46
|
17120
|
rlm@46
|
17121
|
rlm@46
|
17122 repair : function(xy, callback, scope){
|
rlm@46
|
17123 this.hide();
|
rlm@46
|
17124 if(typeof callback == "function"){
|
rlm@46
|
17125 callback.call(scope || this);
|
rlm@46
|
17126 }
|
rlm@46
|
17127 },
|
rlm@46
|
17128
|
rlm@46
|
17129
|
rlm@46
|
17130 moveProxy : function(parentNode, before){
|
rlm@46
|
17131 if(this.proxy){
|
rlm@46
|
17132 parentNode.insertBefore(this.proxy.dom, before);
|
rlm@46
|
17133 }
|
rlm@46
|
17134 }
|
rlm@46
|
17135 };
|
rlm@46
|
17136
|
rlm@46
|
17137
|
rlm@46
|
17138 Ext.Panel.DD = function(panel, cfg){
|
rlm@46
|
17139 this.panel = panel;
|
rlm@46
|
17140 this.dragData = {panel: panel};
|
rlm@46
|
17141 this.proxy = new Ext.dd.PanelProxy(panel, cfg);
|
rlm@46
|
17142 Ext.Panel.DD.superclass.constructor.call(this, panel.el, cfg);
|
rlm@46
|
17143 var h = panel.header;
|
rlm@46
|
17144 if(h){
|
rlm@46
|
17145 this.setHandleElId(h.id);
|
rlm@46
|
17146 }
|
rlm@46
|
17147 (h ? h : this.panel.body).setStyle('cursor', 'move');
|
rlm@46
|
17148 this.scroll = false;
|
rlm@46
|
17149 };
|
rlm@46
|
17150
|
rlm@46
|
17151 Ext.extend(Ext.Panel.DD, Ext.dd.DragSource, {
|
rlm@46
|
17152 showFrame: Ext.emptyFn,
|
rlm@46
|
17153 startDrag: Ext.emptyFn,
|
rlm@46
|
17154 b4StartDrag: function(x, y) {
|
rlm@46
|
17155 this.proxy.show();
|
rlm@46
|
17156 },
|
rlm@46
|
17157 b4MouseDown: function(e) {
|
rlm@46
|
17158 var x = e.getPageX();
|
rlm@46
|
17159 var y = e.getPageY();
|
rlm@46
|
17160 this.autoOffset(x, y);
|
rlm@46
|
17161 },
|
rlm@46
|
17162 onInitDrag : function(x, y){
|
rlm@46
|
17163 this.onStartDrag(x, y);
|
rlm@46
|
17164 return true;
|
rlm@46
|
17165 },
|
rlm@46
|
17166 createFrame : Ext.emptyFn,
|
rlm@46
|
17167 getDragEl : function(e){
|
rlm@46
|
17168 return this.proxy.ghost.dom;
|
rlm@46
|
17169 },
|
rlm@46
|
17170 endDrag : function(e){
|
rlm@46
|
17171 this.proxy.hide();
|
rlm@46
|
17172 this.panel.saveState();
|
rlm@46
|
17173 },
|
rlm@46
|
17174
|
rlm@46
|
17175 autoOffset : function(x, y) {
|
rlm@46
|
17176 x -= this.startPageX;
|
rlm@46
|
17177 y -= this.startPageY;
|
rlm@46
|
17178 this.setDelta(x, y);
|
rlm@46
|
17179 }
|
rlm@46
|
17180 });
|
rlm@46
|
17181
|
rlm@46
|
17182 Ext.state.Provider = function(){
|
rlm@46
|
17183
|
rlm@46
|
17184 this.addEvents("statechange");
|
rlm@46
|
17185 this.state = {};
|
rlm@46
|
17186 Ext.state.Provider.superclass.constructor.call(this);
|
rlm@46
|
17187 };
|
rlm@46
|
17188 Ext.extend(Ext.state.Provider, Ext.util.Observable, {
|
rlm@46
|
17189
|
rlm@46
|
17190 get : function(name, defaultValue){
|
rlm@46
|
17191 return typeof this.state[name] == "undefined" ?
|
rlm@46
|
17192 defaultValue : this.state[name];
|
rlm@46
|
17193 },
|
rlm@46
|
17194
|
rlm@46
|
17195
|
rlm@46
|
17196 clear : function(name){
|
rlm@46
|
17197 delete this.state[name];
|
rlm@46
|
17198 this.fireEvent("statechange", this, name, null);
|
rlm@46
|
17199 },
|
rlm@46
|
17200
|
rlm@46
|
17201
|
rlm@46
|
17202 set : function(name, value){
|
rlm@46
|
17203 this.state[name] = value;
|
rlm@46
|
17204 this.fireEvent("statechange", this, name, value);
|
rlm@46
|
17205 },
|
rlm@46
|
17206
|
rlm@46
|
17207
|
rlm@46
|
17208 decodeValue : function(cookie){
|
rlm@46
|
17209 var re = /^(a|n|d|b|s|o)\:(.*)$/;
|
rlm@46
|
17210 var matches = re.exec(unescape(cookie));
|
rlm@46
|
17211 if(!matches || !matches[1]) return;
|
rlm@46
|
17212 var type = matches[1];
|
rlm@46
|
17213 var v = matches[2];
|
rlm@46
|
17214 switch(type){
|
rlm@46
|
17215 case "n":
|
rlm@46
|
17216 return parseFloat(v);
|
rlm@46
|
17217 case "d":
|
rlm@46
|
17218 return new Date(Date.parse(v));
|
rlm@46
|
17219 case "b":
|
rlm@46
|
17220 return (v == "1");
|
rlm@46
|
17221 case "a":
|
rlm@46
|
17222 var all = [];
|
rlm@46
|
17223 var values = v.split("^");
|
rlm@46
|
17224 for(var i = 0, len = values.length; i < len; i++){
|
rlm@46
|
17225 all.push(this.decodeValue(values[i]));
|
rlm@46
|
17226 }
|
rlm@46
|
17227 return all;
|
rlm@46
|
17228 case "o":
|
rlm@46
|
17229 var all = {};
|
rlm@46
|
17230 var values = v.split("^");
|
rlm@46
|
17231 for(var i = 0, len = values.length; i < len; i++){
|
rlm@46
|
17232 var kv = values[i].split("=");
|
rlm@46
|
17233 all[kv[0]] = this.decodeValue(kv[1]);
|
rlm@46
|
17234 }
|
rlm@46
|
17235 return all;
|
rlm@46
|
17236 default:
|
rlm@46
|
17237 return v;
|
rlm@46
|
17238 }
|
rlm@46
|
17239 },
|
rlm@46
|
17240
|
rlm@46
|
17241
|
rlm@46
|
17242 encodeValue : function(v){
|
rlm@46
|
17243 var enc;
|
rlm@46
|
17244 if(typeof v == "number"){
|
rlm@46
|
17245 enc = "n:" + v;
|
rlm@46
|
17246 }else if(typeof v == "boolean"){
|
rlm@46
|
17247 enc = "b:" + (v ? "1" : "0");
|
rlm@46
|
17248 }else if(Ext.isDate(v)){
|
rlm@46
|
17249 enc = "d:" + v.toGMTString();
|
rlm@46
|
17250 }else if(Ext.isArray(v)){
|
rlm@46
|
17251 var flat = "";
|
rlm@46
|
17252 for(var i = 0, len = v.length; i < len; i++){
|
rlm@46
|
17253 flat += this.encodeValue(v[i]);
|
rlm@46
|
17254 if(i != len-1) flat += "^";
|
rlm@46
|
17255 }
|
rlm@46
|
17256 enc = "a:" + flat;
|
rlm@46
|
17257 }else if(typeof v == "object"){
|
rlm@46
|
17258 var flat = "";
|
rlm@46
|
17259 for(var key in v){
|
rlm@46
|
17260 if(typeof v[key] != "function" && v[key] !== undefined){
|
rlm@46
|
17261 flat += key + "=" + this.encodeValue(v[key]) + "^";
|
rlm@46
|
17262 }
|
rlm@46
|
17263 }
|
rlm@46
|
17264 enc = "o:" + flat.substring(0, flat.length-1);
|
rlm@46
|
17265 }else{
|
rlm@46
|
17266 enc = "s:" + v;
|
rlm@46
|
17267 }
|
rlm@46
|
17268 return escape(enc);
|
rlm@46
|
17269 }
|
rlm@46
|
17270 });
|
rlm@46
|
17271
|
rlm@46
|
17272
|
rlm@46
|
17273 Ext.state.Manager = function(){
|
rlm@46
|
17274 var provider = new Ext.state.Provider();
|
rlm@46
|
17275
|
rlm@46
|
17276 return {
|
rlm@46
|
17277
|
rlm@46
|
17278 setProvider : function(stateProvider){
|
rlm@46
|
17279 provider = stateProvider;
|
rlm@46
|
17280 },
|
rlm@46
|
17281
|
rlm@46
|
17282
|
rlm@46
|
17283 get : function(key, defaultValue){
|
rlm@46
|
17284 return provider.get(key, defaultValue);
|
rlm@46
|
17285 },
|
rlm@46
|
17286
|
rlm@46
|
17287
|
rlm@46
|
17288 set : function(key, value){
|
rlm@46
|
17289 provider.set(key, value);
|
rlm@46
|
17290 },
|
rlm@46
|
17291
|
rlm@46
|
17292
|
rlm@46
|
17293 clear : function(key){
|
rlm@46
|
17294 provider.clear(key);
|
rlm@46
|
17295 },
|
rlm@46
|
17296
|
rlm@46
|
17297
|
rlm@46
|
17298 getProvider : function(){
|
rlm@46
|
17299 return provider;
|
rlm@46
|
17300 }
|
rlm@46
|
17301 };
|
rlm@46
|
17302 }();
|
rlm@46
|
17303
|
rlm@46
|
17304
|
rlm@46
|
17305 Ext.state.CookieProvider = function(config){
|
rlm@46
|
17306 Ext.state.CookieProvider.superclass.constructor.call(this);
|
rlm@46
|
17307 this.path = "/";
|
rlm@46
|
17308 this.expires = new Date(new Date().getTime()+(1000*60*60*24*7));
|
rlm@46
|
17309 this.domain = null;
|
rlm@46
|
17310 this.secure = false;
|
rlm@46
|
17311 Ext.apply(this, config);
|
rlm@46
|
17312 this.state = this.readCookies();
|
rlm@46
|
17313 };
|
rlm@46
|
17314
|
rlm@46
|
17315 Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, {
|
rlm@46
|
17316
|
rlm@46
|
17317 set : function(name, value){
|
rlm@46
|
17318 if(typeof value == "undefined" || value === null){
|
rlm@46
|
17319 this.clear(name);
|
rlm@46
|
17320 return;
|
rlm@46
|
17321 }
|
rlm@46
|
17322 this.setCookie(name, value);
|
rlm@46
|
17323 Ext.state.CookieProvider.superclass.set.call(this, name, value);
|
rlm@46
|
17324 },
|
rlm@46
|
17325
|
rlm@46
|
17326
|
rlm@46
|
17327 clear : function(name){
|
rlm@46
|
17328 this.clearCookie(name);
|
rlm@46
|
17329 Ext.state.CookieProvider.superclass.clear.call(this, name);
|
rlm@46
|
17330 },
|
rlm@46
|
17331
|
rlm@46
|
17332
|
rlm@46
|
17333 readCookies : function(){
|
rlm@46
|
17334 var cookies = {};
|
rlm@46
|
17335 var c = document.cookie + ";";
|
rlm@46
|
17336 var re = /\s?(.*?)=(.*?);/g;
|
rlm@46
|
17337 var matches;
|
rlm@46
|
17338 while((matches = re.exec(c)) != null){
|
rlm@46
|
17339 var name = matches[1];
|
rlm@46
|
17340 var value = matches[2];
|
rlm@46
|
17341 if(name && name.substring(0,3) == "ys-"){
|
rlm@46
|
17342 cookies[name.substr(3)] = this.decodeValue(value);
|
rlm@46
|
17343 }
|
rlm@46
|
17344 }
|
rlm@46
|
17345 return cookies;
|
rlm@46
|
17346 },
|
rlm@46
|
17347
|
rlm@46
|
17348
|
rlm@46
|
17349 setCookie : function(name, value){
|
rlm@46
|
17350 document.cookie = "ys-"+ name + "=" + this.encodeValue(value) +
|
rlm@46
|
17351 ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +
|
rlm@46
|
17352 ((this.path == null) ? "" : ("; path=" + this.path)) +
|
rlm@46
|
17353 ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
|
rlm@46
|
17354 ((this.secure == true) ? "; secure" : "");
|
rlm@46
|
17355 },
|
rlm@46
|
17356
|
rlm@46
|
17357
|
rlm@46
|
17358 clearCookie : function(name){
|
rlm@46
|
17359 document.cookie = "ys-" + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +
|
rlm@46
|
17360 ((this.path == null) ? "" : ("; path=" + this.path)) +
|
rlm@46
|
17361 ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
|
rlm@46
|
17362 ((this.secure == true) ? "; secure" : "");
|
rlm@46
|
17363 }
|
rlm@46
|
17364 });
|
rlm@46
|
17365
|
rlm@46
|
17366 Ext.DataView = Ext.extend(Ext.BoxComponent, {
|
rlm@46
|
17367
|
rlm@46
|
17368
|
rlm@46
|
17369
|
rlm@46
|
17370
|
rlm@46
|
17371
|
rlm@46
|
17372
|
rlm@46
|
17373
|
rlm@46
|
17374
|
rlm@46
|
17375
|
rlm@46
|
17376 selectedClass : "x-view-selected",
|
rlm@46
|
17377
|
rlm@46
|
17378 emptyText : "",
|
rlm@46
|
17379
|
rlm@46
|
17380
|
rlm@46
|
17381 deferEmptyText: true,
|
rlm@46
|
17382
|
rlm@46
|
17383 last: false,
|
rlm@46
|
17384
|
rlm@46
|
17385 initComponent : function(){
|
rlm@46
|
17386 Ext.DataView.superclass.initComponent.call(this);
|
rlm@46
|
17387 if(typeof this.tpl == "string"){
|
rlm@46
|
17388 this.tpl = new Ext.XTemplate(this.tpl);
|
rlm@46
|
17389 }
|
rlm@46
|
17390
|
rlm@46
|
17391 this.addEvents(
|
rlm@46
|
17392
|
rlm@46
|
17393 "beforeclick",
|
rlm@46
|
17394
|
rlm@46
|
17395 "click",
|
rlm@46
|
17396
|
rlm@46
|
17397 "containerclick",
|
rlm@46
|
17398
|
rlm@46
|
17399 "dblclick",
|
rlm@46
|
17400
|
rlm@46
|
17401 "contextmenu",
|
rlm@46
|
17402
|
rlm@46
|
17403 "selectionchange",
|
rlm@46
|
17404
|
rlm@46
|
17405
|
rlm@46
|
17406 "beforeselect"
|
rlm@46
|
17407 );
|
rlm@46
|
17408
|
rlm@46
|
17409 this.all = new Ext.CompositeElementLite();
|
rlm@46
|
17410 this.selected = new Ext.CompositeElementLite();
|
rlm@46
|
17411 },
|
rlm@46
|
17412
|
rlm@46
|
17413 onRender : function(){
|
rlm@46
|
17414 if(!this.el){
|
rlm@46
|
17415 this.el = document.createElement('div');
|
rlm@46
|
17416 this.el.id = this.id;
|
rlm@46
|
17417 }
|
rlm@46
|
17418 Ext.DataView.superclass.onRender.apply(this, arguments);
|
rlm@46
|
17419 },
|
rlm@46
|
17420
|
rlm@46
|
17421 afterRender : function(){
|
rlm@46
|
17422 Ext.DataView.superclass.afterRender.call(this);
|
rlm@46
|
17423
|
rlm@46
|
17424 this.el.on({
|
rlm@46
|
17425 "click": this.onClick,
|
rlm@46
|
17426 "dblclick": this.onDblClick,
|
rlm@46
|
17427 "contextmenu": this.onContextMenu,
|
rlm@46
|
17428 scope:this
|
rlm@46
|
17429 });
|
rlm@46
|
17430
|
rlm@46
|
17431 if(this.overClass){
|
rlm@46
|
17432 this.el.on({
|
rlm@46
|
17433 "mouseover": this.onMouseOver,
|
rlm@46
|
17434 "mouseout": this.onMouseOut,
|
rlm@46
|
17435 scope:this
|
rlm@46
|
17436 });
|
rlm@46
|
17437 }
|
rlm@46
|
17438
|
rlm@46
|
17439 if(this.store){
|
rlm@46
|
17440 this.setStore(this.store, true);
|
rlm@46
|
17441 }
|
rlm@46
|
17442 },
|
rlm@46
|
17443
|
rlm@46
|
17444
|
rlm@46
|
17445 refresh : function(){
|
rlm@46
|
17446 this.clearSelections(false, true);
|
rlm@46
|
17447 this.el.update("");
|
rlm@46
|
17448 var html = [];
|
rlm@46
|
17449 var records = this.store.getRange();
|
rlm@46
|
17450 if(records.length < 1){
|
rlm@46
|
17451 if(!this.deferEmptyText || this.hasSkippedEmptyText){
|
rlm@46
|
17452 this.el.update(this.emptyText);
|
rlm@46
|
17453 }
|
rlm@46
|
17454 this.hasSkippedEmptyText = true;
|
rlm@46
|
17455 this.all.clear();
|
rlm@46
|
17456 return;
|
rlm@46
|
17457 }
|
rlm@46
|
17458 this.tpl.overwrite(this.el, this.collectData(records, 0));
|
rlm@46
|
17459 this.all.fill(Ext.query(this.itemSelector, this.el.dom));
|
rlm@46
|
17460 this.updateIndexes(0);
|
rlm@46
|
17461 },
|
rlm@46
|
17462
|
rlm@46
|
17463
|
rlm@46
|
17464 prepareData : function(data){
|
rlm@46
|
17465 return data;
|
rlm@46
|
17466 },
|
rlm@46
|
17467
|
rlm@46
|
17468 collectData : function(records, startIndex){
|
rlm@46
|
17469 var r = [];
|
rlm@46
|
17470 for(var i = 0, len = records.length; i < len; i++){
|
rlm@46
|
17471 r[r.length] = this.prepareData(records[i].data, startIndex+i, records[i]);
|
rlm@46
|
17472 }
|
rlm@46
|
17473 return r;
|
rlm@46
|
17474 },
|
rlm@46
|
17475
|
rlm@46
|
17476 bufferRender : function(records){
|
rlm@46
|
17477 var div = document.createElement('div');
|
rlm@46
|
17478 this.tpl.overwrite(div, this.collectData(records));
|
rlm@46
|
17479 return Ext.query(this.itemSelector, div);
|
rlm@46
|
17480 },
|
rlm@46
|
17481
|
rlm@46
|
17482 onUpdate : function(ds, record){
|
rlm@46
|
17483 var index = this.store.indexOf(record);
|
rlm@46
|
17484 var sel = this.isSelected(index);
|
rlm@46
|
17485 var original = this.all.elements[index];
|
rlm@46
|
17486 var node = this.bufferRender([record], index)[0];
|
rlm@46
|
17487
|
rlm@46
|
17488 this.all.replaceElement(index, node, true);
|
rlm@46
|
17489 if(sel){
|
rlm@46
|
17490 this.selected.replaceElement(original, node);
|
rlm@46
|
17491 this.all.item(index).addClass(this.selectedClass);
|
rlm@46
|
17492 }
|
rlm@46
|
17493 this.updateIndexes(index, index);
|
rlm@46
|
17494 },
|
rlm@46
|
17495
|
rlm@46
|
17496 onAdd : function(ds, records, index){
|
rlm@46
|
17497 if(this.all.getCount() == 0){
|
rlm@46
|
17498 this.refresh();
|
rlm@46
|
17499 return;
|
rlm@46
|
17500 }
|
rlm@46
|
17501 var nodes = this.bufferRender(records, index), n, a = this.all.elements;
|
rlm@46
|
17502 if(index < this.all.getCount()){
|
rlm@46
|
17503 n = this.all.item(index).insertSibling(nodes, 'before', true);
|
rlm@46
|
17504 a.splice.apply(a, [index, 0].concat(nodes));
|
rlm@46
|
17505 }else{
|
rlm@46
|
17506 n = this.all.last().insertSibling(nodes, 'after', true);
|
rlm@46
|
17507 a.push.apply(a, nodes);
|
rlm@46
|
17508 }
|
rlm@46
|
17509 this.updateIndexes(index);
|
rlm@46
|
17510 },
|
rlm@46
|
17511
|
rlm@46
|
17512 onRemove : function(ds, record, index){
|
rlm@46
|
17513 this.deselect(index);
|
rlm@46
|
17514 this.all.removeElement(index, true);
|
rlm@46
|
17515 this.updateIndexes(index);
|
rlm@46
|
17516 },
|
rlm@46
|
17517
|
rlm@46
|
17518
|
rlm@46
|
17519 refreshNode : function(index){
|
rlm@46
|
17520 this.onUpdate(this.store, this.store.getAt(index));
|
rlm@46
|
17521 },
|
rlm@46
|
17522
|
rlm@46
|
17523 updateIndexes : function(startIndex, endIndex){
|
rlm@46
|
17524 var ns = this.all.elements;
|
rlm@46
|
17525 startIndex = startIndex || 0;
|
rlm@46
|
17526 endIndex = endIndex || ((endIndex === 0) ? 0 : (ns.length - 1));
|
rlm@46
|
17527 for(var i = startIndex; i <= endIndex; i++){
|
rlm@46
|
17528 ns[i].viewIndex = i;
|
rlm@46
|
17529 }
|
rlm@46
|
17530 },
|
rlm@46
|
17531
|
rlm@46
|
17532
|
rlm@46
|
17533 setStore : function(store, initial){
|
rlm@46
|
17534 if(!initial && this.store){
|
rlm@46
|
17535 this.store.un("beforeload", this.onBeforeLoad, this);
|
rlm@46
|
17536 this.store.un("datachanged", this.refresh, this);
|
rlm@46
|
17537 this.store.un("add", this.onAdd, this);
|
rlm@46
|
17538 this.store.un("remove", this.onRemove, this);
|
rlm@46
|
17539 this.store.un("update", this.onUpdate, this);
|
rlm@46
|
17540 this.store.un("clear", this.refresh, this);
|
rlm@46
|
17541 }
|
rlm@46
|
17542 if(store){
|
rlm@46
|
17543 store = Ext.StoreMgr.lookup(store);
|
rlm@46
|
17544 store.on("beforeload", this.onBeforeLoad, this);
|
rlm@46
|
17545 store.on("datachanged", this.refresh, this);
|
rlm@46
|
17546 store.on("add", this.onAdd, this);
|
rlm@46
|
17547 store.on("remove", this.onRemove, this);
|
rlm@46
|
17548 store.on("update", this.onUpdate, this);
|
rlm@46
|
17549 store.on("clear", this.refresh, this);
|
rlm@46
|
17550 }
|
rlm@46
|
17551 this.store = store;
|
rlm@46
|
17552 if(store){
|
rlm@46
|
17553 this.refresh();
|
rlm@46
|
17554 }
|
rlm@46
|
17555 },
|
rlm@46
|
17556
|
rlm@46
|
17557
|
rlm@46
|
17558 findItemFromChild : function(node){
|
rlm@46
|
17559 return Ext.fly(node).findParent(this.itemSelector, this.el);
|
rlm@46
|
17560 },
|
rlm@46
|
17561
|
rlm@46
|
17562 onClick : function(e){
|
rlm@46
|
17563 var item = e.getTarget(this.itemSelector, this.el);
|
rlm@46
|
17564 if(item){
|
rlm@46
|
17565 var index = this.indexOf(item);
|
rlm@46
|
17566 if(this.onItemClick(item, index, e) !== false){
|
rlm@46
|
17567 this.fireEvent("click", this, index, item, e);
|
rlm@46
|
17568 }
|
rlm@46
|
17569 }else{
|
rlm@46
|
17570 if(this.fireEvent("containerclick", this, e) !== false){
|
rlm@46
|
17571 this.clearSelections();
|
rlm@46
|
17572 }
|
rlm@46
|
17573 }
|
rlm@46
|
17574 },
|
rlm@46
|
17575
|
rlm@46
|
17576 onContextMenu : function(e){
|
rlm@46
|
17577 var item = e.getTarget(this.itemSelector, this.el);
|
rlm@46
|
17578 if(item){
|
rlm@46
|
17579 this.fireEvent("contextmenu", this, this.indexOf(item), item, e);
|
rlm@46
|
17580 }
|
rlm@46
|
17581 },
|
rlm@46
|
17582
|
rlm@46
|
17583 onDblClick : function(e){
|
rlm@46
|
17584 var item = e.getTarget(this.itemSelector, this.el);
|
rlm@46
|
17585 if(item){
|
rlm@46
|
17586 this.fireEvent("dblclick", this, this.indexOf(item), item, e);
|
rlm@46
|
17587 }
|
rlm@46
|
17588 },
|
rlm@46
|
17589
|
rlm@46
|
17590 onMouseOver : function(e){
|
rlm@46
|
17591 var item = e.getTarget(this.itemSelector, this.el);
|
rlm@46
|
17592 if(item && item !== this.lastItem){
|
rlm@46
|
17593 this.lastItem = item;
|
rlm@46
|
17594 Ext.fly(item).addClass(this.overClass);
|
rlm@46
|
17595 }
|
rlm@46
|
17596 },
|
rlm@46
|
17597
|
rlm@46
|
17598 onMouseOut : function(e){
|
rlm@46
|
17599 if(this.lastItem){
|
rlm@46
|
17600 if(!e.within(this.lastItem, true)){
|
rlm@46
|
17601 Ext.fly(this.lastItem).removeClass(this.overClass);
|
rlm@46
|
17602 delete this.lastItem;
|
rlm@46
|
17603 }
|
rlm@46
|
17604 }
|
rlm@46
|
17605 },
|
rlm@46
|
17606
|
rlm@46
|
17607 onItemClick : function(item, index, e){
|
rlm@46
|
17608 if(this.fireEvent("beforeclick", this, index, item, e) === false){
|
rlm@46
|
17609 return false;
|
rlm@46
|
17610 }
|
rlm@46
|
17611 if(this.multiSelect){
|
rlm@46
|
17612 this.doMultiSelection(item, index, e);
|
rlm@46
|
17613 e.preventDefault();
|
rlm@46
|
17614 }else if(this.singleSelect){
|
rlm@46
|
17615 this.doSingleSelection(item, index, e);
|
rlm@46
|
17616 e.preventDefault();
|
rlm@46
|
17617 }
|
rlm@46
|
17618 return true;
|
rlm@46
|
17619 },
|
rlm@46
|
17620
|
rlm@46
|
17621 doSingleSelection : function(item, index, e){
|
rlm@46
|
17622 if(e.ctrlKey && this.isSelected(index)){
|
rlm@46
|
17623 this.deselect(index);
|
rlm@46
|
17624 }else{
|
rlm@46
|
17625 this.select(index, false);
|
rlm@46
|
17626 }
|
rlm@46
|
17627 },
|
rlm@46
|
17628
|
rlm@46
|
17629 doMultiSelection : function(item, index, e){
|
rlm@46
|
17630 if(e.shiftKey && this.last !== false){
|
rlm@46
|
17631 var last = this.last;
|
rlm@46
|
17632 this.selectRange(last, index, e.ctrlKey);
|
rlm@46
|
17633 this.last = last; }else{
|
rlm@46
|
17634 if((e.ctrlKey||this.simpleSelect) && this.isSelected(index)){
|
rlm@46
|
17635 this.deselect(index);
|
rlm@46
|
17636 }else{
|
rlm@46
|
17637 this.select(index, e.ctrlKey || e.shiftKey || this.simpleSelect);
|
rlm@46
|
17638 }
|
rlm@46
|
17639 }
|
rlm@46
|
17640 },
|
rlm@46
|
17641
|
rlm@46
|
17642
|
rlm@46
|
17643 getSelectionCount : function(){
|
rlm@46
|
17644 return this.selected.getCount()
|
rlm@46
|
17645 },
|
rlm@46
|
17646
|
rlm@46
|
17647
|
rlm@46
|
17648 getSelectedNodes : function(){
|
rlm@46
|
17649 return this.selected.elements;
|
rlm@46
|
17650 },
|
rlm@46
|
17651
|
rlm@46
|
17652
|
rlm@46
|
17653 getSelectedIndexes : function(){
|
rlm@46
|
17654 var indexes = [], s = this.selected.elements;
|
rlm@46
|
17655 for(var i = 0, len = s.length; i < len; i++){
|
rlm@46
|
17656 indexes.push(s[i].viewIndex);
|
rlm@46
|
17657 }
|
rlm@46
|
17658 return indexes;
|
rlm@46
|
17659 },
|
rlm@46
|
17660
|
rlm@46
|
17661
|
rlm@46
|
17662 getSelectedRecords : function(){
|
rlm@46
|
17663 var r = [], s = this.selected.elements;
|
rlm@46
|
17664 for(var i = 0, len = s.length; i < len; i++){
|
rlm@46
|
17665 r[r.length] = this.store.getAt(s[i].viewIndex);
|
rlm@46
|
17666 }
|
rlm@46
|
17667 return r;
|
rlm@46
|
17668 },
|
rlm@46
|
17669
|
rlm@46
|
17670
|
rlm@46
|
17671 getRecords : function(nodes){
|
rlm@46
|
17672 var r = [], s = nodes;
|
rlm@46
|
17673 for(var i = 0, len = s.length; i < len; i++){
|
rlm@46
|
17674 r[r.length] = this.store.getAt(s[i].viewIndex);
|
rlm@46
|
17675 }
|
rlm@46
|
17676 return r;
|
rlm@46
|
17677 },
|
rlm@46
|
17678
|
rlm@46
|
17679
|
rlm@46
|
17680 getRecord : function(node){
|
rlm@46
|
17681 return this.store.getAt(node.viewIndex);
|
rlm@46
|
17682 },
|
rlm@46
|
17683
|
rlm@46
|
17684
|
rlm@46
|
17685 clearSelections : function(suppressEvent, skipUpdate){
|
rlm@46
|
17686 if((this.multiSelect || this.singleSelect) && this.selected.getCount() > 0){
|
rlm@46
|
17687 if(!skipUpdate){
|
rlm@46
|
17688 this.selected.removeClass(this.selectedClass);
|
rlm@46
|
17689 }
|
rlm@46
|
17690 this.selected.clear();
|
rlm@46
|
17691 this.last = false;
|
rlm@46
|
17692 if(!suppressEvent){
|
rlm@46
|
17693 this.fireEvent("selectionchange", this, this.selected.elements);
|
rlm@46
|
17694 }
|
rlm@46
|
17695 }
|
rlm@46
|
17696 },
|
rlm@46
|
17697
|
rlm@46
|
17698
|
rlm@46
|
17699 isSelected : function(node){
|
rlm@46
|
17700 return this.selected.contains(this.getNode(node));
|
rlm@46
|
17701 },
|
rlm@46
|
17702
|
rlm@46
|
17703
|
rlm@46
|
17704 deselect : function(node){
|
rlm@46
|
17705 if(this.isSelected(node)){
|
rlm@46
|
17706 var node = this.getNode(node);
|
rlm@46
|
17707 this.selected.removeElement(node);
|
rlm@46
|
17708 if(this.last == node.viewIndex){
|
rlm@46
|
17709 this.last = false;
|
rlm@46
|
17710 }
|
rlm@46
|
17711 Ext.fly(node).removeClass(this.selectedClass);
|
rlm@46
|
17712 this.fireEvent("selectionchange", this, this.selected.elements);
|
rlm@46
|
17713 }
|
rlm@46
|
17714 },
|
rlm@46
|
17715
|
rlm@46
|
17716
|
rlm@46
|
17717 select : function(nodeInfo, keepExisting, suppressEvent){
|
rlm@46
|
17718 if(Ext.isArray(nodeInfo)){
|
rlm@46
|
17719 if(!keepExisting){
|
rlm@46
|
17720 this.clearSelections(true);
|
rlm@46
|
17721 }
|
rlm@46
|
17722 for(var i = 0, len = nodeInfo.length; i < len; i++){
|
rlm@46
|
17723 this.select(nodeInfo[i], true, true);
|
rlm@46
|
17724 }
|
rlm@46
|
17725 if(!suppressEvent){
|
rlm@46
|
17726 this.fireEvent("selectionchange", this, this.selected.elements);
|
rlm@46
|
17727 }
|
rlm@46
|
17728 } else{
|
rlm@46
|
17729 var node = this.getNode(nodeInfo);
|
rlm@46
|
17730 if(!keepExisting){
|
rlm@46
|
17731 this.clearSelections(true);
|
rlm@46
|
17732 }
|
rlm@46
|
17733 if(node && !this.isSelected(node)){
|
rlm@46
|
17734 if(this.fireEvent("beforeselect", this, node, this.selected.elements) !== false){
|
rlm@46
|
17735 Ext.fly(node).addClass(this.selectedClass);
|
rlm@46
|
17736 this.selected.add(node);
|
rlm@46
|
17737 this.last = node.viewIndex;
|
rlm@46
|
17738 if(!suppressEvent){
|
rlm@46
|
17739 this.fireEvent("selectionchange", this, this.selected.elements);
|
rlm@46
|
17740 }
|
rlm@46
|
17741 }
|
rlm@46
|
17742 }
|
rlm@46
|
17743 }
|
rlm@46
|
17744 },
|
rlm@46
|
17745
|
rlm@46
|
17746
|
rlm@46
|
17747 selectRange : function(start, end, keepExisting){
|
rlm@46
|
17748 if(!keepExisting){
|
rlm@46
|
17749 this.clearSelections(true);
|
rlm@46
|
17750 }
|
rlm@46
|
17751 this.select(this.getNodes(start, end), true);
|
rlm@46
|
17752 },
|
rlm@46
|
17753
|
rlm@46
|
17754
|
rlm@46
|
17755 getNode : function(nodeInfo){
|
rlm@46
|
17756 if(typeof nodeInfo == "string"){
|
rlm@46
|
17757 return document.getElementById(nodeInfo);
|
rlm@46
|
17758 }else if(typeof nodeInfo == "number"){
|
rlm@46
|
17759 return this.all.elements[nodeInfo];
|
rlm@46
|
17760 }
|
rlm@46
|
17761 return nodeInfo;
|
rlm@46
|
17762 },
|
rlm@46
|
17763
|
rlm@46
|
17764
|
rlm@46
|
17765 getNodes : function(start, end){
|
rlm@46
|
17766 var ns = this.all.elements;
|
rlm@46
|
17767 start = start || 0;
|
rlm@46
|
17768 end = typeof end == "undefined" ? ns.length - 1 : end;
|
rlm@46
|
17769 var nodes = [], i;
|
rlm@46
|
17770 if(start <= end){
|
rlm@46
|
17771 for(i = start; i <= end; i++){
|
rlm@46
|
17772 nodes.push(ns[i]);
|
rlm@46
|
17773 }
|
rlm@46
|
17774 } else{
|
rlm@46
|
17775 for(i = start; i >= end; i--){
|
rlm@46
|
17776 nodes.push(ns[i]);
|
rlm@46
|
17777 }
|
rlm@46
|
17778 }
|
rlm@46
|
17779 return nodes;
|
rlm@46
|
17780 },
|
rlm@46
|
17781
|
rlm@46
|
17782
|
rlm@46
|
17783 indexOf : function(node){
|
rlm@46
|
17784 node = this.getNode(node);
|
rlm@46
|
17785 if(typeof node.viewIndex == "number"){
|
rlm@46
|
17786 return node.viewIndex;
|
rlm@46
|
17787 }
|
rlm@46
|
17788 return this.all.indexOf(node);
|
rlm@46
|
17789 },
|
rlm@46
|
17790
|
rlm@46
|
17791 onBeforeLoad : function(){
|
rlm@46
|
17792 if(this.loadingText){
|
rlm@46
|
17793 this.clearSelections(false, true);
|
rlm@46
|
17794 this.el.update('<div class="loading-indicator">'+this.loadingText+'</div>');
|
rlm@46
|
17795 this.all.clear();
|
rlm@46
|
17796 }
|
rlm@46
|
17797 },
|
rlm@46
|
17798
|
rlm@46
|
17799 onDestroy : function(){
|
rlm@46
|
17800 Ext.DataView.superclass.onDestroy.call(this);
|
rlm@46
|
17801 this.setStore(null);
|
rlm@46
|
17802 }
|
rlm@46
|
17803 });
|
rlm@46
|
17804
|
rlm@46
|
17805 Ext.reg('dataview', Ext.DataView);
|
rlm@46
|
17806
|
rlm@46
|
17807 Ext.ColorPalette = function(config){
|
rlm@46
|
17808 Ext.ColorPalette.superclass.constructor.call(this, config);
|
rlm@46
|
17809 this.addEvents(
|
rlm@46
|
17810
|
rlm@46
|
17811 'select'
|
rlm@46
|
17812 );
|
rlm@46
|
17813
|
rlm@46
|
17814 if(this.handler){
|
rlm@46
|
17815 this.on("select", this.handler, this.scope, true);
|
rlm@46
|
17816 }
|
rlm@46
|
17817 };
|
rlm@46
|
17818 Ext.extend(Ext.ColorPalette, Ext.Component, {
|
rlm@46
|
17819
|
rlm@46
|
17820
|
rlm@46
|
17821 itemCls : "x-color-palette",
|
rlm@46
|
17822
|
rlm@46
|
17823 value : null,
|
rlm@46
|
17824 clickEvent:'click',
|
rlm@46
|
17825 ctype: "Ext.ColorPalette",
|
rlm@46
|
17826
|
rlm@46
|
17827
|
rlm@46
|
17828 allowReselect : false,
|
rlm@46
|
17829
|
rlm@46
|
17830
|
rlm@46
|
17831 colors : [
|
rlm@46
|
17832 "000000", "993300", "333300", "003300", "003366", "000080", "333399", "333333",
|
rlm@46
|
17833 "800000", "FF6600", "808000", "008000", "008080", "0000FF", "666699", "808080",
|
rlm@46
|
17834 "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF", "800080", "969696",
|
rlm@46
|
17835 "FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0",
|
rlm@46
|
17836 "FF99CC", "FFCC99", "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"
|
rlm@46
|
17837 ],
|
rlm@46
|
17838
|
rlm@46
|
17839 onRender : function(container, position){
|
rlm@46
|
17840 var t = this.tpl || new Ext.XTemplate(
|
rlm@46
|
17841 '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on"> </span></em></a></tpl>'
|
rlm@46
|
17842 );
|
rlm@46
|
17843 var el = document.createElement("div");
|
rlm@46
|
17844 el.className = this.itemCls;
|
rlm@46
|
17845 t.overwrite(el, this.colors);
|
rlm@46
|
17846 container.dom.insertBefore(el, position);
|
rlm@46
|
17847 this.el = Ext.get(el);
|
rlm@46
|
17848 this.el.on(this.clickEvent, this.handleClick, this, {delegate: "a"});
|
rlm@46
|
17849 if(this.clickEvent != 'click'){
|
rlm@46
|
17850 this.el.on('click', Ext.emptyFn, this, {delegate: "a", preventDefault:true});
|
rlm@46
|
17851 }
|
rlm@46
|
17852 },
|
rlm@46
|
17853
|
rlm@46
|
17854 afterRender : function(){
|
rlm@46
|
17855 Ext.ColorPalette.superclass.afterRender.call(this);
|
rlm@46
|
17856 if(this.value){
|
rlm@46
|
17857 var s = this.value;
|
rlm@46
|
17858 this.value = null;
|
rlm@46
|
17859 this.select(s);
|
rlm@46
|
17860 }
|
rlm@46
|
17861 },
|
rlm@46
|
17862
|
rlm@46
|
17863 handleClick : function(e, t){
|
rlm@46
|
17864 e.preventDefault();
|
rlm@46
|
17865 if(!this.disabled){
|
rlm@46
|
17866 var c = t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];
|
rlm@46
|
17867 this.select(c.toUpperCase());
|
rlm@46
|
17868 }
|
rlm@46
|
17869 },
|
rlm@46
|
17870
|
rlm@46
|
17871
|
rlm@46
|
17872 select : function(color){
|
rlm@46
|
17873 color = color.replace("#", "");
|
rlm@46
|
17874 if(color != this.value || this.allowReselect){
|
rlm@46
|
17875 var el = this.el;
|
rlm@46
|
17876 if(this.value){
|
rlm@46
|
17877 el.child("a.color-"+this.value).removeClass("x-color-palette-sel");
|
rlm@46
|
17878 }
|
rlm@46
|
17879 el.child("a.color-"+color).addClass("x-color-palette-sel");
|
rlm@46
|
17880 this.value = color;
|
rlm@46
|
17881 this.fireEvent("select", this, color);
|
rlm@46
|
17882 }
|
rlm@46
|
17883 }
|
rlm@46
|
17884
|
rlm@46
|
17885
|
rlm@46
|
17886 });
|
rlm@46
|
17887 Ext.reg('colorpalette', Ext.ColorPalette);
|
rlm@46
|
17888
|
rlm@46
|
17889 Ext.DatePicker = Ext.extend(Ext.Component, {
|
rlm@46
|
17890
|
rlm@46
|
17891 todayText : "Today",
|
rlm@46
|
17892
|
rlm@46
|
17893 okText : " OK ",
|
rlm@46
|
17894
|
rlm@46
|
17895 cancelText : "Cancel",
|
rlm@46
|
17896
|
rlm@46
|
17897 todayTip : "{0} (Spacebar)",
|
rlm@46
|
17898
|
rlm@46
|
17899 minDate : null,
|
rlm@46
|
17900
|
rlm@46
|
17901 maxDate : null,
|
rlm@46
|
17902
|
rlm@46
|
17903 minText : "This date is before the minimum date",
|
rlm@46
|
17904
|
rlm@46
|
17905 maxText : "This date is after the maximum date",
|
rlm@46
|
17906
|
rlm@46
|
17907 format : "m/d/y",
|
rlm@46
|
17908
|
rlm@46
|
17909 disabledDays : null,
|
rlm@46
|
17910
|
rlm@46
|
17911 disabledDaysText : "",
|
rlm@46
|
17912
|
rlm@46
|
17913 disabledDatesRE : null,
|
rlm@46
|
17914
|
rlm@46
|
17915 disabledDatesText : "",
|
rlm@46
|
17916
|
rlm@46
|
17917 constrainToViewport : true,
|
rlm@46
|
17918
|
rlm@46
|
17919 monthNames : Date.monthNames,
|
rlm@46
|
17920
|
rlm@46
|
17921 dayNames : Date.dayNames,
|
rlm@46
|
17922
|
rlm@46
|
17923 nextText: 'Next Month (Control+Right)',
|
rlm@46
|
17924
|
rlm@46
|
17925 prevText: 'Previous Month (Control+Left)',
|
rlm@46
|
17926
|
rlm@46
|
17927 monthYearText: 'Choose a month (Control+Up/Down to move years)',
|
rlm@46
|
17928
|
rlm@46
|
17929 startDay : 0,
|
rlm@46
|
17930
|
rlm@46
|
17931 initComponent : function(){
|
rlm@46
|
17932 Ext.DatePicker.superclass.initComponent.call(this);
|
rlm@46
|
17933
|
rlm@46
|
17934 this.value = this.value ?
|
rlm@46
|
17935 this.value.clearTime() : new Date().clearTime();
|
rlm@46
|
17936
|
rlm@46
|
17937 this.addEvents(
|
rlm@46
|
17938
|
rlm@46
|
17939 'select'
|
rlm@46
|
17940 );
|
rlm@46
|
17941
|
rlm@46
|
17942 if(this.handler){
|
rlm@46
|
17943 this.on("select", this.handler, this.scope || this);
|
rlm@46
|
17944 }
|
rlm@46
|
17945
|
rlm@46
|
17946 this.initDisabledDays();
|
rlm@46
|
17947 },
|
rlm@46
|
17948
|
rlm@46
|
17949
|
rlm@46
|
17950 initDisabledDays : function(){
|
rlm@46
|
17951 if(!this.disabledDatesRE && this.disabledDates){
|
rlm@46
|
17952 var dd = this.disabledDates;
|
rlm@46
|
17953 var re = "(?:";
|
rlm@46
|
17954 for(var i = 0; i < dd.length; i++){
|
rlm@46
|
17955 re += dd[i];
|
rlm@46
|
17956 if(i != dd.length-1) re += "|";
|
rlm@46
|
17957 }
|
rlm@46
|
17958 this.disabledDatesRE = new RegExp(re + ")");
|
rlm@46
|
17959 }
|
rlm@46
|
17960 },
|
rlm@46
|
17961
|
rlm@46
|
17962
|
rlm@46
|
17963 setValue : function(value){
|
rlm@46
|
17964 var old = this.value;
|
rlm@46
|
17965 this.value = value.clearTime(true);
|
rlm@46
|
17966 if(this.el){
|
rlm@46
|
17967 this.update(this.value);
|
rlm@46
|
17968 }
|
rlm@46
|
17969 },
|
rlm@46
|
17970
|
rlm@46
|
17971
|
rlm@46
|
17972 getValue : function(){
|
rlm@46
|
17973 return this.value;
|
rlm@46
|
17974 },
|
rlm@46
|
17975
|
rlm@46
|
17976
|
rlm@46
|
17977 focus : function(){
|
rlm@46
|
17978 if(this.el){
|
rlm@46
|
17979 this.update(this.activeDate);
|
rlm@46
|
17980 }
|
rlm@46
|
17981 },
|
rlm@46
|
17982
|
rlm@46
|
17983
|
rlm@46
|
17984 onRender : function(container, position){
|
rlm@46
|
17985 var m = [
|
rlm@46
|
17986 '<table cellspacing="0">',
|
rlm@46
|
17987 '<tr><td class="x-date-left"><a href="#" title="', this.prevText ,'"> </a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="', this.nextText ,'"> </a></td></tr>',
|
rlm@46
|
17988 '<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'];
|
rlm@46
|
17989 var dn = this.dayNames;
|
rlm@46
|
17990 for(var i = 0; i < 7; i++){
|
rlm@46
|
17991 var d = this.startDay+i;
|
rlm@46
|
17992 if(d > 6){
|
rlm@46
|
17993 d = d-7;
|
rlm@46
|
17994 }
|
rlm@46
|
17995 m.push("<th><span>", dn[d].substr(0,1), "</span></th>");
|
rlm@46
|
17996 }
|
rlm@46
|
17997 m[m.length] = "</tr></thead><tbody><tr>";
|
rlm@46
|
17998 for(var i = 0; i < 42; i++) {
|
rlm@46
|
17999 if(i % 7 == 0 && i != 0){
|
rlm@46
|
18000 m[m.length] = "</tr><tr>";
|
rlm@46
|
18001 }
|
rlm@46
|
18002 m[m.length] = '<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>';
|
rlm@46
|
18003 }
|
rlm@46
|
18004 m[m.length] = '</tr></tbody></table></td></tr><tr><td colspan="3" class="x-date-bottom" align="center"></td></tr></table><div class="x-date-mp"></div>';
|
rlm@46
|
18005
|
rlm@46
|
18006 var el = document.createElement("div");
|
rlm@46
|
18007 el.className = "x-date-picker";
|
rlm@46
|
18008 el.innerHTML = m.join("");
|
rlm@46
|
18009
|
rlm@46
|
18010 container.dom.insertBefore(el, position);
|
rlm@46
|
18011
|
rlm@46
|
18012 this.el = Ext.get(el);
|
rlm@46
|
18013 this.eventEl = Ext.get(el.firstChild);
|
rlm@46
|
18014
|
rlm@46
|
18015 new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {
|
rlm@46
|
18016 handler: this.showPrevMonth,
|
rlm@46
|
18017 scope: this,
|
rlm@46
|
18018 preventDefault:true,
|
rlm@46
|
18019 stopDefault:true
|
rlm@46
|
18020 });
|
rlm@46
|
18021
|
rlm@46
|
18022 new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {
|
rlm@46
|
18023 handler: this.showNextMonth,
|
rlm@46
|
18024 scope: this,
|
rlm@46
|
18025 preventDefault:true,
|
rlm@46
|
18026 stopDefault:true
|
rlm@46
|
18027 });
|
rlm@46
|
18028
|
rlm@46
|
18029 this.eventEl.on("mousewheel", this.handleMouseWheel, this);
|
rlm@46
|
18030
|
rlm@46
|
18031 this.monthPicker = this.el.down('div.x-date-mp');
|
rlm@46
|
18032 this.monthPicker.enableDisplayMode('block');
|
rlm@46
|
18033
|
rlm@46
|
18034 var kn = new Ext.KeyNav(this.eventEl, {
|
rlm@46
|
18035 "left" : function(e){
|
rlm@46
|
18036 e.ctrlKey ?
|
rlm@46
|
18037 this.showPrevMonth() :
|
rlm@46
|
18038 this.update(this.activeDate.add("d", -1));
|
rlm@46
|
18039 },
|
rlm@46
|
18040
|
rlm@46
|
18041 "right" : function(e){
|
rlm@46
|
18042 e.ctrlKey ?
|
rlm@46
|
18043 this.showNextMonth() :
|
rlm@46
|
18044 this.update(this.activeDate.add("d", 1));
|
rlm@46
|
18045 },
|
rlm@46
|
18046
|
rlm@46
|
18047 "up" : function(e){
|
rlm@46
|
18048 e.ctrlKey ?
|
rlm@46
|
18049 this.showNextYear() :
|
rlm@46
|
18050 this.update(this.activeDate.add("d", -7));
|
rlm@46
|
18051 },
|
rlm@46
|
18052
|
rlm@46
|
18053 "down" : function(e){
|
rlm@46
|
18054 e.ctrlKey ?
|
rlm@46
|
18055 this.showPrevYear() :
|
rlm@46
|
18056 this.update(this.activeDate.add("d", 7));
|
rlm@46
|
18057 },
|
rlm@46
|
18058
|
rlm@46
|
18059 "pageUp" : function(e){
|
rlm@46
|
18060 this.showNextMonth();
|
rlm@46
|
18061 },
|
rlm@46
|
18062
|
rlm@46
|
18063 "pageDown" : function(e){
|
rlm@46
|
18064 this.showPrevMonth();
|
rlm@46
|
18065 },
|
rlm@46
|
18066
|
rlm@46
|
18067 "enter" : function(e){
|
rlm@46
|
18068 e.stopPropagation();
|
rlm@46
|
18069 return true;
|
rlm@46
|
18070 },
|
rlm@46
|
18071
|
rlm@46
|
18072 scope : this
|
rlm@46
|
18073 });
|
rlm@46
|
18074
|
rlm@46
|
18075 this.eventEl.on("click", this.handleDateClick, this, {delegate: "a.x-date-date"});
|
rlm@46
|
18076
|
rlm@46
|
18077 this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday, this);
|
rlm@46
|
18078
|
rlm@46
|
18079 this.el.unselectable();
|
rlm@46
|
18080
|
rlm@46
|
18081 this.cells = this.el.select("table.x-date-inner tbody td");
|
rlm@46
|
18082 this.textNodes = this.el.query("table.x-date-inner tbody span");
|
rlm@46
|
18083
|
rlm@46
|
18084 this.mbtn = new Ext.Button({
|
rlm@46
|
18085 text: " ",
|
rlm@46
|
18086 tooltip: this.monthYearText,
|
rlm@46
|
18087 renderTo: this.el.child("td.x-date-middle", true)
|
rlm@46
|
18088 });
|
rlm@46
|
18089
|
rlm@46
|
18090 this.mbtn.on('click', this.showMonthPicker, this);
|
rlm@46
|
18091 this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");
|
rlm@46
|
18092
|
rlm@46
|
18093
|
rlm@46
|
18094 var today = (new Date()).dateFormat(this.format);
|
rlm@46
|
18095 this.todayBtn = new Ext.Button({
|
rlm@46
|
18096 renderTo: this.el.child("td.x-date-bottom", true),
|
rlm@46
|
18097 text: String.format(this.todayText, today),
|
rlm@46
|
18098 tooltip: String.format(this.todayTip, today),
|
rlm@46
|
18099 handler: this.selectToday,
|
rlm@46
|
18100 scope: this
|
rlm@46
|
18101 });
|
rlm@46
|
18102
|
rlm@46
|
18103 if(Ext.isIE){
|
rlm@46
|
18104 this.el.repaint();
|
rlm@46
|
18105 }
|
rlm@46
|
18106 this.update(this.value);
|
rlm@46
|
18107 },
|
rlm@46
|
18108
|
rlm@46
|
18109 createMonthPicker : function(){
|
rlm@46
|
18110 if(!this.monthPicker.dom.firstChild){
|
rlm@46
|
18111 var buf = ['<table border="0" cellspacing="0">'];
|
rlm@46
|
18112 for(var i = 0; i < 6; i++){
|
rlm@46
|
18113 buf.push(
|
rlm@46
|
18114 '<tr><td class="x-date-mp-month"><a href="#">', this.monthNames[i].substr(0, 3), '</a></td>',
|
rlm@46
|
18115 '<td class="x-date-mp-month x-date-mp-sep"><a href="#">', this.monthNames[i+6].substr(0, 3), '</a></td>',
|
rlm@46
|
18116 i == 0 ?
|
rlm@46
|
18117 '<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td></tr>' :
|
rlm@46
|
18118 '<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>'
|
rlm@46
|
18119 );
|
rlm@46
|
18120 }
|
rlm@46
|
18121 buf.push(
|
rlm@46
|
18122 '<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',
|
rlm@46
|
18123 this.okText,
|
rlm@46
|
18124 '</button><button type="button" class="x-date-mp-cancel">',
|
rlm@46
|
18125 this.cancelText,
|
rlm@46
|
18126 '</button></td></tr>',
|
rlm@46
|
18127 '</table>'
|
rlm@46
|
18128 );
|
rlm@46
|
18129 this.monthPicker.update(buf.join(''));
|
rlm@46
|
18130 this.monthPicker.on('click', this.onMonthClick, this);
|
rlm@46
|
18131 this.monthPicker.on('dblclick', this.onMonthDblClick, this);
|
rlm@46
|
18132
|
rlm@46
|
18133 this.mpMonths = this.monthPicker.select('td.x-date-mp-month');
|
rlm@46
|
18134 this.mpYears = this.monthPicker.select('td.x-date-mp-year');
|
rlm@46
|
18135
|
rlm@46
|
18136 this.mpMonths.each(function(m, a, i){
|
rlm@46
|
18137 i += 1;
|
rlm@46
|
18138 if((i%2) == 0){
|
rlm@46
|
18139 m.dom.xmonth = 5 + Math.round(i * .5);
|
rlm@46
|
18140 }else{
|
rlm@46
|
18141 m.dom.xmonth = Math.round((i-1) * .5);
|
rlm@46
|
18142 }
|
rlm@46
|
18143 });
|
rlm@46
|
18144 }
|
rlm@46
|
18145 },
|
rlm@46
|
18146
|
rlm@46
|
18147 showMonthPicker : function(){
|
rlm@46
|
18148 this.createMonthPicker();
|
rlm@46
|
18149 var size = this.el.getSize();
|
rlm@46
|
18150 this.monthPicker.setSize(size);
|
rlm@46
|
18151 this.monthPicker.child('table').setSize(size);
|
rlm@46
|
18152
|
rlm@46
|
18153 this.mpSelMonth = (this.activeDate || this.value).getMonth();
|
rlm@46
|
18154 this.updateMPMonth(this.mpSelMonth);
|
rlm@46
|
18155 this.mpSelYear = (this.activeDate || this.value).getFullYear();
|
rlm@46
|
18156 this.updateMPYear(this.mpSelYear);
|
rlm@46
|
18157
|
rlm@46
|
18158 this.monthPicker.slideIn('t', {duration:.2});
|
rlm@46
|
18159 },
|
rlm@46
|
18160
|
rlm@46
|
18161 updateMPYear : function(y){
|
rlm@46
|
18162 this.mpyear = y;
|
rlm@46
|
18163 var ys = this.mpYears.elements;
|
rlm@46
|
18164 for(var i = 1; i <= 10; i++){
|
rlm@46
|
18165 var td = ys[i-1], y2;
|
rlm@46
|
18166 if((i%2) == 0){
|
rlm@46
|
18167 y2 = y + Math.round(i * .5);
|
rlm@46
|
18168 td.firstChild.innerHTML = y2;
|
rlm@46
|
18169 td.xyear = y2;
|
rlm@46
|
18170 }else{
|
rlm@46
|
18171 y2 = y - (5-Math.round(i * .5));
|
rlm@46
|
18172 td.firstChild.innerHTML = y2;
|
rlm@46
|
18173 td.xyear = y2;
|
rlm@46
|
18174 }
|
rlm@46
|
18175 this.mpYears.item(i-1)[y2 == this.mpSelYear ? 'addClass' : 'removeClass']('x-date-mp-sel');
|
rlm@46
|
18176 }
|
rlm@46
|
18177 },
|
rlm@46
|
18178
|
rlm@46
|
18179 updateMPMonth : function(sm){
|
rlm@46
|
18180 this.mpMonths.each(function(m, a, i){
|
rlm@46
|
18181 m[m.dom.xmonth == sm ? 'addClass' : 'removeClass']('x-date-mp-sel');
|
rlm@46
|
18182 });
|
rlm@46
|
18183 },
|
rlm@46
|
18184
|
rlm@46
|
18185 selectMPMonth: function(m){
|
rlm@46
|
18186
|
rlm@46
|
18187 },
|
rlm@46
|
18188
|
rlm@46
|
18189 onMonthClick : function(e, t){
|
rlm@46
|
18190 e.stopEvent();
|
rlm@46
|
18191 var el = new Ext.Element(t), pn;
|
rlm@46
|
18192 if(el.is('button.x-date-mp-cancel')){
|
rlm@46
|
18193 this.hideMonthPicker();
|
rlm@46
|
18194 }
|
rlm@46
|
18195 else if(el.is('button.x-date-mp-ok')){
|
rlm@46
|
18196 var d = new Date(this.mpSelYear, this.mpSelMonth, (this.activeDate || this.value).getDate());
|
rlm@46
|
18197 if(d.getMonth() != this.mpSelMonth){
|
rlm@46
|
18198
|
rlm@46
|
18199 d = new Date(this.mpSelYear, this.mpSelMonth, 1).getLastDateOfMonth();
|
rlm@46
|
18200 }
|
rlm@46
|
18201 this.update(d);
|
rlm@46
|
18202 this.hideMonthPicker();
|
rlm@46
|
18203 }
|
rlm@46
|
18204 else if(pn = el.up('td.x-date-mp-month', 2)){
|
rlm@46
|
18205 this.mpMonths.removeClass('x-date-mp-sel');
|
rlm@46
|
18206 pn.addClass('x-date-mp-sel');
|
rlm@46
|
18207 this.mpSelMonth = pn.dom.xmonth;
|
rlm@46
|
18208 }
|
rlm@46
|
18209 else if(pn = el.up('td.x-date-mp-year', 2)){
|
rlm@46
|
18210 this.mpYears.removeClass('x-date-mp-sel');
|
rlm@46
|
18211 pn.addClass('x-date-mp-sel');
|
rlm@46
|
18212 this.mpSelYear = pn.dom.xyear;
|
rlm@46
|
18213 }
|
rlm@46
|
18214 else if(el.is('a.x-date-mp-prev')){
|
rlm@46
|
18215 this.updateMPYear(this.mpyear-10);
|
rlm@46
|
18216 }
|
rlm@46
|
18217 else if(el.is('a.x-date-mp-next')){
|
rlm@46
|
18218 this.updateMPYear(this.mpyear+10);
|
rlm@46
|
18219 }
|
rlm@46
|
18220 },
|
rlm@46
|
18221
|
rlm@46
|
18222 onMonthDblClick : function(e, t){
|
rlm@46
|
18223 e.stopEvent();
|
rlm@46
|
18224 var el = new Ext.Element(t), pn;
|
rlm@46
|
18225 if(pn = el.up('td.x-date-mp-month', 2)){
|
rlm@46
|
18226 this.update(new Date(this.mpSelYear, pn.dom.xmonth, (this.activeDate || this.value).getDate()));
|
rlm@46
|
18227 this.hideMonthPicker();
|
rlm@46
|
18228 }
|
rlm@46
|
18229 else if(pn = el.up('td.x-date-mp-year', 2)){
|
rlm@46
|
18230 this.update(new Date(pn.dom.xyear, this.mpSelMonth, (this.activeDate || this.value).getDate()));
|
rlm@46
|
18231 this.hideMonthPicker();
|
rlm@46
|
18232 }
|
rlm@46
|
18233 },
|
rlm@46
|
18234
|
rlm@46
|
18235 hideMonthPicker : function(disableAnim){
|
rlm@46
|
18236 if(this.monthPicker){
|
rlm@46
|
18237 if(disableAnim === true){
|
rlm@46
|
18238 this.monthPicker.hide();
|
rlm@46
|
18239 }else{
|
rlm@46
|
18240 this.monthPicker.slideOut('t', {duration:.2});
|
rlm@46
|
18241 }
|
rlm@46
|
18242 }
|
rlm@46
|
18243 },
|
rlm@46
|
18244
|
rlm@46
|
18245
|
rlm@46
|
18246 showPrevMonth : function(e){
|
rlm@46
|
18247 this.update(this.activeDate.add("mo", -1));
|
rlm@46
|
18248 },
|
rlm@46
|
18249
|
rlm@46
|
18250
|
rlm@46
|
18251 showNextMonth : function(e){
|
rlm@46
|
18252 this.update(this.activeDate.add("mo", 1));
|
rlm@46
|
18253 },
|
rlm@46
|
18254
|
rlm@46
|
18255
|
rlm@46
|
18256 showPrevYear : function(){
|
rlm@46
|
18257 this.update(this.activeDate.add("y", -1));
|
rlm@46
|
18258 },
|
rlm@46
|
18259
|
rlm@46
|
18260
|
rlm@46
|
18261 showNextYear : function(){
|
rlm@46
|
18262 this.update(this.activeDate.add("y", 1));
|
rlm@46
|
18263 },
|
rlm@46
|
18264
|
rlm@46
|
18265
|
rlm@46
|
18266 handleMouseWheel : function(e){
|
rlm@46
|
18267 var delta = e.getWheelDelta();
|
rlm@46
|
18268 if(delta > 0){
|
rlm@46
|
18269 this.showPrevMonth();
|
rlm@46
|
18270 e.stopEvent();
|
rlm@46
|
18271 } else if(delta < 0){
|
rlm@46
|
18272 this.showNextMonth();
|
rlm@46
|
18273 e.stopEvent();
|
rlm@46
|
18274 }
|
rlm@46
|
18275 },
|
rlm@46
|
18276
|
rlm@46
|
18277
|
rlm@46
|
18278 handleDateClick : function(e, t){
|
rlm@46
|
18279 e.stopEvent();
|
rlm@46
|
18280 if(t.dateValue && !Ext.fly(t.parentNode).hasClass("x-date-disabled")){
|
rlm@46
|
18281 this.setValue(new Date(t.dateValue));
|
rlm@46
|
18282 this.fireEvent("select", this, this.value);
|
rlm@46
|
18283 }
|
rlm@46
|
18284 },
|
rlm@46
|
18285
|
rlm@46
|
18286
|
rlm@46
|
18287 selectToday : function(){
|
rlm@46
|
18288 this.setValue(new Date().clearTime());
|
rlm@46
|
18289 this.fireEvent("select", this, this.value);
|
rlm@46
|
18290 },
|
rlm@46
|
18291
|
rlm@46
|
18292
|
rlm@46
|
18293 update : function(date){
|
rlm@46
|
18294 var vd = this.activeDate;
|
rlm@46
|
18295 this.activeDate = date;
|
rlm@46
|
18296 if(vd && this.el){
|
rlm@46
|
18297 var t = date.getTime();
|
rlm@46
|
18298 if(vd.getMonth() == date.getMonth() && vd.getFullYear() == date.getFullYear()){
|
rlm@46
|
18299 this.cells.removeClass("x-date-selected");
|
rlm@46
|
18300 this.cells.each(function(c){
|
rlm@46
|
18301 if(c.dom.firstChild.dateValue == t){
|
rlm@46
|
18302 c.addClass("x-date-selected");
|
rlm@46
|
18303 setTimeout(function(){
|
rlm@46
|
18304 try{c.dom.firstChild.focus();}catch(e){}
|
rlm@46
|
18305 }, 50);
|
rlm@46
|
18306 return false;
|
rlm@46
|
18307 }
|
rlm@46
|
18308 });
|
rlm@46
|
18309 return;
|
rlm@46
|
18310 }
|
rlm@46
|
18311 }
|
rlm@46
|
18312 var days = date.getDaysInMonth();
|
rlm@46
|
18313 var firstOfMonth = date.getFirstDateOfMonth();
|
rlm@46
|
18314 var startingPos = firstOfMonth.getDay()-this.startDay;
|
rlm@46
|
18315
|
rlm@46
|
18316 if(startingPos <= this.startDay){
|
rlm@46
|
18317 startingPos += 7;
|
rlm@46
|
18318 }
|
rlm@46
|
18319
|
rlm@46
|
18320 var pm = date.add("mo", -1);
|
rlm@46
|
18321 var prevStart = pm.getDaysInMonth()-startingPos;
|
rlm@46
|
18322
|
rlm@46
|
18323 var cells = this.cells.elements;
|
rlm@46
|
18324 var textEls = this.textNodes;
|
rlm@46
|
18325 days += startingPos;
|
rlm@46
|
18326
|
rlm@46
|
18327
|
rlm@46
|
18328 var day = 86400000;
|
rlm@46
|
18329 var d = (new Date(pm.getFullYear(), pm.getMonth(), prevStart)).clearTime();
|
rlm@46
|
18330 var today = new Date().clearTime().getTime();
|
rlm@46
|
18331 var sel = date.clearTime().getTime();
|
rlm@46
|
18332 var min = this.minDate ? this.minDate.clearTime() : Number.NEGATIVE_INFINITY;
|
rlm@46
|
18333 var max = this.maxDate ? this.maxDate.clearTime() : Number.POSITIVE_INFINITY;
|
rlm@46
|
18334 var ddMatch = this.disabledDatesRE;
|
rlm@46
|
18335 var ddText = this.disabledDatesText;
|
rlm@46
|
18336 var ddays = this.disabledDays ? this.disabledDays.join("") : false;
|
rlm@46
|
18337 var ddaysText = this.disabledDaysText;
|
rlm@46
|
18338 var format = this.format;
|
rlm@46
|
18339
|
rlm@46
|
18340 var setCellClass = function(cal, cell){
|
rlm@46
|
18341 cell.title = "";
|
rlm@46
|
18342 var t = d.getTime();
|
rlm@46
|
18343 cell.firstChild.dateValue = t;
|
rlm@46
|
18344 if(t == today){
|
rlm@46
|
18345 cell.className += " x-date-today";
|
rlm@46
|
18346 cell.title = cal.todayText;
|
rlm@46
|
18347 }
|
rlm@46
|
18348 if(t == sel){
|
rlm@46
|
18349 cell.className += " x-date-selected";
|
rlm@46
|
18350 setTimeout(function(){
|
rlm@46
|
18351 try{cell.firstChild.focus();}catch(e){}
|
rlm@46
|
18352 }, 50);
|
rlm@46
|
18353 }
|
rlm@46
|
18354
|
rlm@46
|
18355 if(t < min) {
|
rlm@46
|
18356 cell.className = " x-date-disabled";
|
rlm@46
|
18357 cell.title = cal.minText;
|
rlm@46
|
18358 return;
|
rlm@46
|
18359 }
|
rlm@46
|
18360 if(t > max) {
|
rlm@46
|
18361 cell.className = " x-date-disabled";
|
rlm@46
|
18362 cell.title = cal.maxText;
|
rlm@46
|
18363 return;
|
rlm@46
|
18364 }
|
rlm@46
|
18365 if(ddays){
|
rlm@46
|
18366 if(ddays.indexOf(d.getDay()) != -1){
|
rlm@46
|
18367 cell.title = ddaysText;
|
rlm@46
|
18368 cell.className = " x-date-disabled";
|
rlm@46
|
18369 }
|
rlm@46
|
18370 }
|
rlm@46
|
18371 if(ddMatch && format){
|
rlm@46
|
18372 var fvalue = d.dateFormat(format);
|
rlm@46
|
18373 if(ddMatch.test(fvalue)){
|
rlm@46
|
18374 cell.title = ddText.replace("%0", fvalue);
|
rlm@46
|
18375 cell.className = " x-date-disabled";
|
rlm@46
|
18376 }
|
rlm@46
|
18377 }
|
rlm@46
|
18378 };
|
rlm@46
|
18379
|
rlm@46
|
18380 var i = 0;
|
rlm@46
|
18381 for(; i < startingPos; i++) {
|
rlm@46
|
18382 textEls[i].innerHTML = (++prevStart);
|
rlm@46
|
18383 d.setDate(d.getDate()+1);
|
rlm@46
|
18384 cells[i].className = "x-date-prevday";
|
rlm@46
|
18385 setCellClass(this, cells[i]);
|
rlm@46
|
18386 }
|
rlm@46
|
18387 for(; i < days; i++){
|
rlm@46
|
18388 intDay = i - startingPos + 1;
|
rlm@46
|
18389 textEls[i].innerHTML = (intDay);
|
rlm@46
|
18390 d.setDate(d.getDate()+1);
|
rlm@46
|
18391 cells[i].className = "x-date-active";
|
rlm@46
|
18392 setCellClass(this, cells[i]);
|
rlm@46
|
18393 }
|
rlm@46
|
18394 var extraDays = 0;
|
rlm@46
|
18395 for(; i < 42; i++) {
|
rlm@46
|
18396 textEls[i].innerHTML = (++extraDays);
|
rlm@46
|
18397 d.setDate(d.getDate()+1);
|
rlm@46
|
18398 cells[i].className = "x-date-nextday";
|
rlm@46
|
18399 setCellClass(this, cells[i]);
|
rlm@46
|
18400 }
|
rlm@46
|
18401
|
rlm@46
|
18402 this.mbtn.setText(this.monthNames[date.getMonth()] + " " + date.getFullYear());
|
rlm@46
|
18403
|
rlm@46
|
18404 if(!this.internalRender){
|
rlm@46
|
18405 var main = this.el.dom.firstChild;
|
rlm@46
|
18406 var w = main.offsetWidth;
|
rlm@46
|
18407 this.el.setWidth(w + this.el.getBorderWidth("lr"));
|
rlm@46
|
18408 Ext.fly(main).setWidth(w);
|
rlm@46
|
18409 this.internalRender = true;
|
rlm@46
|
18410
|
rlm@46
|
18411
|
rlm@46
|
18412
|
rlm@46
|
18413 if(Ext.isOpera && !this.secondPass){
|
rlm@46
|
18414 main.rows[0].cells[1].style.width = (w - (main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth)) + "px";
|
rlm@46
|
18415 this.secondPass = true;
|
rlm@46
|
18416 this.update.defer(10, this, [date]);
|
rlm@46
|
18417 }
|
rlm@46
|
18418 }
|
rlm@46
|
18419 },
|
rlm@46
|
18420
|
rlm@46
|
18421
|
rlm@46
|
18422 beforeDestroy : function() {
|
rlm@46
|
18423 if(this.rendered){
|
rlm@46
|
18424 this.mbtn.destroy();
|
rlm@46
|
18425 this.todayBtn.destroy();
|
rlm@46
|
18426 }
|
rlm@46
|
18427 }
|
rlm@46
|
18428
|
rlm@46
|
18429
|
rlm@46
|
18430 });
|
rlm@46
|
18431 Ext.reg('datepicker', Ext.DatePicker);
|
rlm@46
|
18432
|
rlm@46
|
18433 Ext.TabPanel = Ext.extend(Ext.Panel, {
|
rlm@46
|
18434
|
rlm@46
|
18435
|
rlm@46
|
18436 monitorResize : true,
|
rlm@46
|
18437
|
rlm@46
|
18438 deferredRender : true,
|
rlm@46
|
18439
|
rlm@46
|
18440 tabWidth: 120,
|
rlm@46
|
18441
|
rlm@46
|
18442 minTabWidth: 30,
|
rlm@46
|
18443
|
rlm@46
|
18444 resizeTabs:false,
|
rlm@46
|
18445
|
rlm@46
|
18446 enableTabScroll: false,
|
rlm@46
|
18447
|
rlm@46
|
18448 scrollIncrement : 0,
|
rlm@46
|
18449
|
rlm@46
|
18450 scrollRepeatInterval : 400,
|
rlm@46
|
18451
|
rlm@46
|
18452 scrollDuration : .35,
|
rlm@46
|
18453
|
rlm@46
|
18454 animScroll : true,
|
rlm@46
|
18455
|
rlm@46
|
18456 tabPosition: 'top',
|
rlm@46
|
18457
|
rlm@46
|
18458 baseCls: 'x-tab-panel',
|
rlm@46
|
18459
|
rlm@46
|
18460 autoTabs : false,
|
rlm@46
|
18461
|
rlm@46
|
18462 autoTabSelector:'div.x-tab',
|
rlm@46
|
18463
|
rlm@46
|
18464 activeTab : null,
|
rlm@46
|
18465
|
rlm@46
|
18466 tabMargin : 2,
|
rlm@46
|
18467
|
rlm@46
|
18468 plain: false,
|
rlm@46
|
18469
|
rlm@46
|
18470 wheelIncrement : 20,
|
rlm@46
|
18471
|
rlm@46
|
18472
|
rlm@46
|
18473 idDelimiter : '__',
|
rlm@46
|
18474
|
rlm@46
|
18475 itemCls : 'x-tab-item',
|
rlm@46
|
18476
|
rlm@46
|
18477 elements: 'body',
|
rlm@46
|
18478 headerAsText: false,
|
rlm@46
|
18479 frame: false,
|
rlm@46
|
18480 hideBorders:true,
|
rlm@46
|
18481
|
rlm@46
|
18482 initComponent : function(){
|
rlm@46
|
18483 this.frame = false;
|
rlm@46
|
18484 Ext.TabPanel.superclass.initComponent.call(this);
|
rlm@46
|
18485 this.addEvents(
|
rlm@46
|
18486
|
rlm@46
|
18487 'beforetabchange',
|
rlm@46
|
18488
|
rlm@46
|
18489 'tabchange',
|
rlm@46
|
18490
|
rlm@46
|
18491 'contextmenu'
|
rlm@46
|
18492 );
|
rlm@46
|
18493 this.setLayout(new Ext.layout.CardLayout({
|
rlm@46
|
18494 deferredRender: this.deferredRender
|
rlm@46
|
18495 }));
|
rlm@46
|
18496 if(this.tabPosition == 'top'){
|
rlm@46
|
18497 this.elements += ',header';
|
rlm@46
|
18498 this.stripTarget = 'header';
|
rlm@46
|
18499 }else {
|
rlm@46
|
18500 this.elements += ',footer';
|
rlm@46
|
18501 this.stripTarget = 'footer';
|
rlm@46
|
18502 }
|
rlm@46
|
18503 if(!this.stack){
|
rlm@46
|
18504 this.stack = Ext.TabPanel.AccessStack();
|
rlm@46
|
18505 }
|
rlm@46
|
18506 this.initItems();
|
rlm@46
|
18507 },
|
rlm@46
|
18508
|
rlm@46
|
18509 render : function(){
|
rlm@46
|
18510 Ext.TabPanel.superclass.render.apply(this, arguments);
|
rlm@46
|
18511 if(this.activeTab !== undefined){
|
rlm@46
|
18512 var item = this.activeTab;
|
rlm@46
|
18513 delete this.activeTab;
|
rlm@46
|
18514 this.setActiveTab(item);
|
rlm@46
|
18515 }
|
rlm@46
|
18516 },
|
rlm@46
|
18517
|
rlm@46
|
18518 onRender : function(ct, position){
|
rlm@46
|
18519 Ext.TabPanel.superclass.onRender.call(this, ct, position);
|
rlm@46
|
18520
|
rlm@46
|
18521 if(this.plain){
|
rlm@46
|
18522 var pos = this.tabPosition == 'top' ? 'header' : 'footer';
|
rlm@46
|
18523 this[pos].addClass('x-tab-panel-'+pos+'-plain');
|
rlm@46
|
18524 }
|
rlm@46
|
18525
|
rlm@46
|
18526 var st = this[this.stripTarget];
|
rlm@46
|
18527
|
rlm@46
|
18528 this.stripWrap = st.createChild({cls:'x-tab-strip-wrap', cn:{
|
rlm@46
|
18529 tag:'ul', cls:'x-tab-strip x-tab-strip-'+this.tabPosition}});
|
rlm@46
|
18530 this.stripSpacer = st.createChild({cls:'x-tab-strip-spacer'});
|
rlm@46
|
18531 this.strip = new Ext.Element(this.stripWrap.dom.firstChild);
|
rlm@46
|
18532
|
rlm@46
|
18533 this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge'});
|
rlm@46
|
18534 this.strip.createChild({cls:'x-clear'});
|
rlm@46
|
18535
|
rlm@46
|
18536 this.body.addClass('x-tab-panel-body-'+this.tabPosition);
|
rlm@46
|
18537
|
rlm@46
|
18538 if(!this.itemTpl){
|
rlm@46
|
18539 var tt = new Ext.Template(
|
rlm@46
|
18540 '<li class="{cls}" id="{id}"><a class="x-tab-strip-close" onclick="return false;"></a>',
|
rlm@46
|
18541 '<a class="x-tab-right" href="#" onclick="return false;"><em class="x-tab-left">',
|
rlm@46
|
18542 '<span class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>',
|
rlm@46
|
18543 '</em></a></li>'
|
rlm@46
|
18544 );
|
rlm@46
|
18545 tt.disableFormats = true;
|
rlm@46
|
18546 tt.compile();
|
rlm@46
|
18547 Ext.TabPanel.prototype.itemTpl = tt;
|
rlm@46
|
18548 }
|
rlm@46
|
18549
|
rlm@46
|
18550 this.items.each(this.initTab, this);
|
rlm@46
|
18551 },
|
rlm@46
|
18552
|
rlm@46
|
18553 afterRender : function(){
|
rlm@46
|
18554 Ext.TabPanel.superclass.afterRender.call(this);
|
rlm@46
|
18555 if(this.autoTabs){
|
rlm@46
|
18556 this.readTabs(false);
|
rlm@46
|
18557 }
|
rlm@46
|
18558 },
|
rlm@46
|
18559
|
rlm@46
|
18560 initEvents : function(){
|
rlm@46
|
18561 Ext.TabPanel.superclass.initEvents.call(this);
|
rlm@46
|
18562 this.on('add', this.onAdd, this);
|
rlm@46
|
18563 this.on('remove', this.onRemove, this);
|
rlm@46
|
18564
|
rlm@46
|
18565 this.strip.on('mousedown', this.onStripMouseDown, this);
|
rlm@46
|
18566 this.strip.on('click', this.onStripClick, this);
|
rlm@46
|
18567 this.strip.on('contextmenu', this.onStripContextMenu, this);
|
rlm@46
|
18568 if(this.enableTabScroll){
|
rlm@46
|
18569 this.strip.on('mousewheel', this.onWheel, this);
|
rlm@46
|
18570 }
|
rlm@46
|
18571 },
|
rlm@46
|
18572
|
rlm@46
|
18573 findTargets : function(e){
|
rlm@46
|
18574 var item = null;
|
rlm@46
|
18575 var itemEl = e.getTarget('li', this.strip);
|
rlm@46
|
18576 if(itemEl){
|
rlm@46
|
18577 item = this.getComponent(itemEl.id.split(this.idDelimiter)[1]);
|
rlm@46
|
18578 if(item.disabled){
|
rlm@46
|
18579 return {
|
rlm@46
|
18580 close : null,
|
rlm@46
|
18581 item : null,
|
rlm@46
|
18582 el : null
|
rlm@46
|
18583 };
|
rlm@46
|
18584 }
|
rlm@46
|
18585 }
|
rlm@46
|
18586 return {
|
rlm@46
|
18587 close : e.getTarget('.x-tab-strip-close', this.strip),
|
rlm@46
|
18588 item : item,
|
rlm@46
|
18589 el : itemEl
|
rlm@46
|
18590 };
|
rlm@46
|
18591 },
|
rlm@46
|
18592
|
rlm@46
|
18593 onStripMouseDown : function(e){
|
rlm@46
|
18594 e.preventDefault();
|
rlm@46
|
18595 if(e.button != 0){
|
rlm@46
|
18596 return;
|
rlm@46
|
18597 }
|
rlm@46
|
18598 var t = this.findTargets(e);
|
rlm@46
|
18599 if(t.close){
|
rlm@46
|
18600 this.remove(t.item);
|
rlm@46
|
18601 return;
|
rlm@46
|
18602 }
|
rlm@46
|
18603 if(t.item && t.item != this.activeTab){
|
rlm@46
|
18604 this.setActiveTab(t.item);
|
rlm@46
|
18605 }
|
rlm@46
|
18606 },
|
rlm@46
|
18607
|
rlm@46
|
18608 onStripClick : function(e){
|
rlm@46
|
18609 var t = this.findTargets(e);
|
rlm@46
|
18610 if(!t.close && t.item && t.item != this.activeTab){
|
rlm@46
|
18611 this.setActiveTab(t.item);
|
rlm@46
|
18612 }
|
rlm@46
|
18613 },
|
rlm@46
|
18614
|
rlm@46
|
18615 onStripContextMenu : function(e){
|
rlm@46
|
18616 e.preventDefault();
|
rlm@46
|
18617 var t = this.findTargets(e);
|
rlm@46
|
18618 if(t.item){
|
rlm@46
|
18619 this.fireEvent('contextmenu', this, t.item, e);
|
rlm@46
|
18620 }
|
rlm@46
|
18621 },
|
rlm@46
|
18622
|
rlm@46
|
18623
|
rlm@46
|
18624 readTabs : function(removeExisting){
|
rlm@46
|
18625 if(removeExisting === true){
|
rlm@46
|
18626 this.items.each(function(item){
|
rlm@46
|
18627 this.remove(item);
|
rlm@46
|
18628 }, this);
|
rlm@46
|
18629 }
|
rlm@46
|
18630 var tabs = this.el.query(this.autoTabSelector);
|
rlm@46
|
18631 for(var i = 0, len = tabs.length; i < len; i++){
|
rlm@46
|
18632 var tab = tabs[i];
|
rlm@46
|
18633 var title = tab.getAttribute('title');
|
rlm@46
|
18634 tab.removeAttribute('title');
|
rlm@46
|
18635 this.add({
|
rlm@46
|
18636 title: title,
|
rlm@46
|
18637 el: tab
|
rlm@46
|
18638 });
|
rlm@46
|
18639 }
|
rlm@46
|
18640 },
|
rlm@46
|
18641
|
rlm@46
|
18642 initTab : function(item, index){
|
rlm@46
|
18643 var before = this.strip.dom.childNodes[index];
|
rlm@46
|
18644 var cls = item.closable ? 'x-tab-strip-closable' : '';
|
rlm@46
|
18645 if(item.disabled){
|
rlm@46
|
18646 cls += ' x-item-disabled';
|
rlm@46
|
18647 }
|
rlm@46
|
18648 if(item.iconCls){
|
rlm@46
|
18649 cls += ' x-tab-with-icon';
|
rlm@46
|
18650 }
|
rlm@46
|
18651 if(item.tabCls){
|
rlm@46
|
18652 cls += ' ' + item.tabCls;
|
rlm@46
|
18653 }
|
rlm@46
|
18654
|
rlm@46
|
18655 var p = {
|
rlm@46
|
18656 id: this.id + this.idDelimiter + item.getItemId(),
|
rlm@46
|
18657 text: item.title,
|
rlm@46
|
18658 cls: cls,
|
rlm@46
|
18659 iconCls: item.iconCls || ''
|
rlm@46
|
18660 };
|
rlm@46
|
18661 var el = before ?
|
rlm@46
|
18662 this.itemTpl.insertBefore(before, p) :
|
rlm@46
|
18663 this.itemTpl.append(this.strip, p);
|
rlm@46
|
18664
|
rlm@46
|
18665 Ext.fly(el).addClassOnOver('x-tab-strip-over');
|
rlm@46
|
18666
|
rlm@46
|
18667 if(item.tabTip){
|
rlm@46
|
18668 Ext.fly(el).child('span.x-tab-strip-text', true).qtip = item.tabTip;
|
rlm@46
|
18669 }
|
rlm@46
|
18670 item.on('disable', this.onItemDisabled, this);
|
rlm@46
|
18671 item.on('enable', this.onItemEnabled, this);
|
rlm@46
|
18672 item.on('titlechange', this.onItemTitleChanged, this);
|
rlm@46
|
18673 item.on('beforeshow', this.onBeforeShowItem, this);
|
rlm@46
|
18674 },
|
rlm@46
|
18675
|
rlm@46
|
18676 onAdd : function(tp, item, index){
|
rlm@46
|
18677 this.initTab(item, index);
|
rlm@46
|
18678 if(this.items.getCount() == 1){
|
rlm@46
|
18679 this.syncSize();
|
rlm@46
|
18680 }
|
rlm@46
|
18681 this.delegateUpdates();
|
rlm@46
|
18682 },
|
rlm@46
|
18683
|
rlm@46
|
18684 onBeforeAdd : function(item){
|
rlm@46
|
18685 var existing = item.events ? (this.items.containsKey(item.getItemId()) ? item : null) : this.items.get(item);
|
rlm@46
|
18686 if(existing){
|
rlm@46
|
18687 this.setActiveTab(item);
|
rlm@46
|
18688 return false;
|
rlm@46
|
18689 }
|
rlm@46
|
18690 Ext.TabPanel.superclass.onBeforeAdd.apply(this, arguments);
|
rlm@46
|
18691 var es = item.elements;
|
rlm@46
|
18692 item.elements = es ? es.replace(',header', '') : es;
|
rlm@46
|
18693 item.border = (item.border === true);
|
rlm@46
|
18694 },
|
rlm@46
|
18695
|
rlm@46
|
18696 onRemove : function(tp, item){
|
rlm@46
|
18697 Ext.removeNode(this.getTabEl(item));
|
rlm@46
|
18698 this.stack.remove(item);
|
rlm@46
|
18699 item.un('disable', this.onItemDisabled, this);
|
rlm@46
|
18700 item.un('enable', this.onItemEnabled, this);
|
rlm@46
|
18701 item.un('titlechange', this.onItemTitleChanged, this);
|
rlm@46
|
18702 item.un('beforeshow', this.onBeforeShowItem, this);
|
rlm@46
|
18703 if(item == this.activeTab){
|
rlm@46
|
18704 var next = this.stack.next();
|
rlm@46
|
18705 if(next){
|
rlm@46
|
18706 this.setActiveTab(next);
|
rlm@46
|
18707 }else{
|
rlm@46
|
18708 this.setActiveTab(0);
|
rlm@46
|
18709 }
|
rlm@46
|
18710 }
|
rlm@46
|
18711 this.delegateUpdates();
|
rlm@46
|
18712 },
|
rlm@46
|
18713
|
rlm@46
|
18714 onBeforeShowItem : function(item){
|
rlm@46
|
18715 if(item != this.activeTab){
|
rlm@46
|
18716 this.setActiveTab(item);
|
rlm@46
|
18717 return false;
|
rlm@46
|
18718 }
|
rlm@46
|
18719 },
|
rlm@46
|
18720
|
rlm@46
|
18721 onItemDisabled : function(item){
|
rlm@46
|
18722 var el = this.getTabEl(item);
|
rlm@46
|
18723 if(el){
|
rlm@46
|
18724 Ext.fly(el).addClass('x-item-disabled');
|
rlm@46
|
18725 }
|
rlm@46
|
18726 this.stack.remove(item);
|
rlm@46
|
18727 },
|
rlm@46
|
18728
|
rlm@46
|
18729 onItemEnabled : function(item){
|
rlm@46
|
18730 var el = this.getTabEl(item);
|
rlm@46
|
18731 if(el){
|
rlm@46
|
18732 Ext.fly(el).removeClass('x-item-disabled');
|
rlm@46
|
18733 }
|
rlm@46
|
18734 },
|
rlm@46
|
18735
|
rlm@46
|
18736 onItemTitleChanged : function(item){
|
rlm@46
|
18737 var el = this.getTabEl(item);
|
rlm@46
|
18738 if(el){
|
rlm@46
|
18739 Ext.fly(el).child('span.x-tab-strip-text', true).innerHTML = item.title;
|
rlm@46
|
18740 }
|
rlm@46
|
18741 },
|
rlm@46
|
18742
|
rlm@46
|
18743
|
rlm@46
|
18744 getTabEl : function(item){
|
rlm@46
|
18745 var itemId = (typeof item === 'number')?this.items.items[item].getItemId() : item.getItemId();
|
rlm@46
|
18746 return document.getElementById(this.id+this.idDelimiter+itemId);
|
rlm@46
|
18747 },
|
rlm@46
|
18748
|
rlm@46
|
18749 onResize : function(){
|
rlm@46
|
18750 Ext.TabPanel.superclass.onResize.apply(this, arguments);
|
rlm@46
|
18751 this.delegateUpdates();
|
rlm@46
|
18752 },
|
rlm@46
|
18753
|
rlm@46
|
18754
|
rlm@46
|
18755 beginUpdate : function(){
|
rlm@46
|
18756 this.suspendUpdates = true;
|
rlm@46
|
18757 },
|
rlm@46
|
18758
|
rlm@46
|
18759
|
rlm@46
|
18760 endUpdate : function(){
|
rlm@46
|
18761 this.suspendUpdates = false;
|
rlm@46
|
18762 this.delegateUpdates();
|
rlm@46
|
18763 },
|
rlm@46
|
18764
|
rlm@46
|
18765
|
rlm@46
|
18766 hideTabStripItem : function(item){
|
rlm@46
|
18767 item = this.getComponent(item);
|
rlm@46
|
18768 var el = this.getTabEl(item);
|
rlm@46
|
18769 if(el){
|
rlm@46
|
18770 el.style.display = 'none';
|
rlm@46
|
18771 this.delegateUpdates();
|
rlm@46
|
18772 }
|
rlm@46
|
18773 this.stack.remove(item);
|
rlm@46
|
18774 },
|
rlm@46
|
18775
|
rlm@46
|
18776
|
rlm@46
|
18777 unhideTabStripItem : function(item){
|
rlm@46
|
18778 item = this.getComponent(item);
|
rlm@46
|
18779 var el = this.getTabEl(item);
|
rlm@46
|
18780 if(el){
|
rlm@46
|
18781 el.style.display = '';
|
rlm@46
|
18782 this.delegateUpdates();
|
rlm@46
|
18783 }
|
rlm@46
|
18784 },
|
rlm@46
|
18785
|
rlm@46
|
18786 delegateUpdates : function(){
|
rlm@46
|
18787 if(this.suspendUpdates){
|
rlm@46
|
18788 return;
|
rlm@46
|
18789 }
|
rlm@46
|
18790 if(this.resizeTabs && this.rendered){
|
rlm@46
|
18791 this.autoSizeTabs();
|
rlm@46
|
18792 }
|
rlm@46
|
18793 if(this.enableTabScroll && this.rendered){
|
rlm@46
|
18794 this.autoScrollTabs();
|
rlm@46
|
18795 }
|
rlm@46
|
18796 },
|
rlm@46
|
18797
|
rlm@46
|
18798 autoSizeTabs : function(){
|
rlm@46
|
18799 var count = this.items.length;
|
rlm@46
|
18800 var ce = this.tabPosition != 'bottom' ? 'header' : 'footer';
|
rlm@46
|
18801 var ow = this[ce].dom.offsetWidth;
|
rlm@46
|
18802 var aw = this[ce].dom.clientWidth;
|
rlm@46
|
18803
|
rlm@46
|
18804 if(!this.resizeTabs || count < 1 || !aw){ return;
|
rlm@46
|
18805 }
|
rlm@46
|
18806
|
rlm@46
|
18807 var each = Math.max(Math.min(Math.floor((aw-4) / count) - this.tabMargin, this.tabWidth), this.minTabWidth); this.lastTabWidth = each;
|
rlm@46
|
18808 var lis = this.stripWrap.dom.getElementsByTagName('li');
|
rlm@46
|
18809 for(var i = 0, len = lis.length-1; i < len; i++) { var li = lis[i];
|
rlm@46
|
18810 var inner = li.childNodes[1].firstChild.firstChild;
|
rlm@46
|
18811 var tw = li.offsetWidth;
|
rlm@46
|
18812 var iw = inner.offsetWidth;
|
rlm@46
|
18813 inner.style.width = (each - (tw-iw)) + 'px';
|
rlm@46
|
18814 }
|
rlm@46
|
18815 },
|
rlm@46
|
18816
|
rlm@46
|
18817 adjustBodyWidth : function(w){
|
rlm@46
|
18818 if(this.header){
|
rlm@46
|
18819 this.header.setWidth(w);
|
rlm@46
|
18820 }
|
rlm@46
|
18821 if(this.footer){
|
rlm@46
|
18822 this.footer.setWidth(w);
|
rlm@46
|
18823 }
|
rlm@46
|
18824 return w;
|
rlm@46
|
18825 },
|
rlm@46
|
18826
|
rlm@46
|
18827
|
rlm@46
|
18828 setActiveTab : function(item){
|
rlm@46
|
18829 item = this.getComponent(item);
|
rlm@46
|
18830 if(!item || this.fireEvent('beforetabchange', this, item, this.activeTab) === false){
|
rlm@46
|
18831 return;
|
rlm@46
|
18832 }
|
rlm@46
|
18833 if(!this.rendered){
|
rlm@46
|
18834 this.activeTab = item;
|
rlm@46
|
18835 return;
|
rlm@46
|
18836 }
|
rlm@46
|
18837 if(this.activeTab != item){
|
rlm@46
|
18838 if(this.activeTab){
|
rlm@46
|
18839 var oldEl = this.getTabEl(this.activeTab);
|
rlm@46
|
18840 if(oldEl){
|
rlm@46
|
18841 Ext.fly(oldEl).removeClass('x-tab-strip-active');
|
rlm@46
|
18842 }
|
rlm@46
|
18843 this.activeTab.fireEvent('deactivate', this.activeTab);
|
rlm@46
|
18844 }
|
rlm@46
|
18845 var el = this.getTabEl(item);
|
rlm@46
|
18846 Ext.fly(el).addClass('x-tab-strip-active');
|
rlm@46
|
18847 this.activeTab = item;
|
rlm@46
|
18848 this.stack.add(item);
|
rlm@46
|
18849
|
rlm@46
|
18850 this.layout.setActiveItem(item);
|
rlm@46
|
18851 if(this.layoutOnTabChange && item.doLayout){
|
rlm@46
|
18852 item.doLayout();
|
rlm@46
|
18853 }
|
rlm@46
|
18854 if(this.scrolling){
|
rlm@46
|
18855 this.scrollToTab(item, this.animScroll);
|
rlm@46
|
18856 }
|
rlm@46
|
18857
|
rlm@46
|
18858 item.fireEvent('activate', item);
|
rlm@46
|
18859 this.fireEvent('tabchange', this, item);
|
rlm@46
|
18860 }
|
rlm@46
|
18861 },
|
rlm@46
|
18862
|
rlm@46
|
18863
|
rlm@46
|
18864 getActiveTab : function(){
|
rlm@46
|
18865 return this.activeTab || null;
|
rlm@46
|
18866 },
|
rlm@46
|
18867
|
rlm@46
|
18868
|
rlm@46
|
18869 getItem : function(item){
|
rlm@46
|
18870 return this.getComponent(item);
|
rlm@46
|
18871 },
|
rlm@46
|
18872
|
rlm@46
|
18873 autoScrollTabs : function(){
|
rlm@46
|
18874 var count = this.items.length;
|
rlm@46
|
18875 var ow = this.header.dom.offsetWidth;
|
rlm@46
|
18876 var tw = this.header.dom.clientWidth;
|
rlm@46
|
18877
|
rlm@46
|
18878 var wrap = this.stripWrap;
|
rlm@46
|
18879 var wd = wrap.dom;
|
rlm@46
|
18880 var cw = wd.offsetWidth;
|
rlm@46
|
18881 var pos = this.getScrollPos();
|
rlm@46
|
18882 var l = this.edge.getOffsetsTo(this.stripWrap)[0] + pos;
|
rlm@46
|
18883
|
rlm@46
|
18884 if(!this.enableTabScroll || count < 1 || cw < 20){ return;
|
rlm@46
|
18885 }
|
rlm@46
|
18886 if(l <= tw){
|
rlm@46
|
18887 wd.scrollLeft = 0;
|
rlm@46
|
18888 wrap.setWidth(tw);
|
rlm@46
|
18889 if(this.scrolling){
|
rlm@46
|
18890 this.scrolling = false;
|
rlm@46
|
18891 this.header.removeClass('x-tab-scrolling');
|
rlm@46
|
18892 this.scrollLeft.hide();
|
rlm@46
|
18893 this.scrollRight.hide();
|
rlm@46
|
18894 if(Ext.isAir){
|
rlm@46
|
18895 wd.style.marginLeft = '';
|
rlm@46
|
18896 wd.style.marginRight = '';
|
rlm@46
|
18897 }
|
rlm@46
|
18898 }
|
rlm@46
|
18899 }else{
|
rlm@46
|
18900 if(!this.scrolling){
|
rlm@46
|
18901 this.header.addClass('x-tab-scrolling');
|
rlm@46
|
18902 if(Ext.isAir){
|
rlm@46
|
18903 wd.style.marginLeft = '18px';
|
rlm@46
|
18904 wd.style.marginRight = '18px';
|
rlm@46
|
18905 }
|
rlm@46
|
18906 }
|
rlm@46
|
18907 tw -= wrap.getMargins('lr');
|
rlm@46
|
18908 wrap.setWidth(tw > 20 ? tw : 20);
|
rlm@46
|
18909 if(!this.scrolling){
|
rlm@46
|
18910 if(!this.scrollLeft){
|
rlm@46
|
18911 this.createScrollers();
|
rlm@46
|
18912 }else{
|
rlm@46
|
18913 this.scrollLeft.show();
|
rlm@46
|
18914 this.scrollRight.show();
|
rlm@46
|
18915 }
|
rlm@46
|
18916 }
|
rlm@46
|
18917 this.scrolling = true;
|
rlm@46
|
18918 if(pos > (l-tw)){ wd.scrollLeft = l-tw;
|
rlm@46
|
18919 }else{ this.scrollToTab(this.activeTab, false);
|
rlm@46
|
18920 }
|
rlm@46
|
18921 this.updateScrollButtons();
|
rlm@46
|
18922 }
|
rlm@46
|
18923 },
|
rlm@46
|
18924
|
rlm@46
|
18925 createScrollers : function(){
|
rlm@46
|
18926 var h = this.stripWrap.dom.offsetHeight;
|
rlm@46
|
18927
|
rlm@46
|
18928 var sl = this.header.insertFirst({
|
rlm@46
|
18929 cls:'x-tab-scroller-left'
|
rlm@46
|
18930 });
|
rlm@46
|
18931 sl.setHeight(h);
|
rlm@46
|
18932 sl.addClassOnOver('x-tab-scroller-left-over');
|
rlm@46
|
18933 this.leftRepeater = new Ext.util.ClickRepeater(sl, {
|
rlm@46
|
18934 interval : this.scrollRepeatInterval,
|
rlm@46
|
18935 handler: this.onScrollLeft,
|
rlm@46
|
18936 scope: this
|
rlm@46
|
18937 });
|
rlm@46
|
18938 this.scrollLeft = sl;
|
rlm@46
|
18939
|
rlm@46
|
18940 var sr = this.header.insertFirst({
|
rlm@46
|
18941 cls:'x-tab-scroller-right'
|
rlm@46
|
18942 });
|
rlm@46
|
18943 sr.setHeight(h);
|
rlm@46
|
18944 sr.addClassOnOver('x-tab-scroller-right-over');
|
rlm@46
|
18945 this.rightRepeater = new Ext.util.ClickRepeater(sr, {
|
rlm@46
|
18946 interval : this.scrollRepeatInterval,
|
rlm@46
|
18947 handler: this.onScrollRight,
|
rlm@46
|
18948 scope: this
|
rlm@46
|
18949 });
|
rlm@46
|
18950 this.scrollRight = sr;
|
rlm@46
|
18951 },
|
rlm@46
|
18952
|
rlm@46
|
18953 getScrollWidth : function(){
|
rlm@46
|
18954 return this.edge.getOffsetsTo(this.stripWrap)[0] + this.getScrollPos();
|
rlm@46
|
18955 },
|
rlm@46
|
18956
|
rlm@46
|
18957 getScrollPos : function(){
|
rlm@46
|
18958 return parseInt(this.stripWrap.dom.scrollLeft, 10) || 0;
|
rlm@46
|
18959 },
|
rlm@46
|
18960
|
rlm@46
|
18961 getScrollArea : function(){
|
rlm@46
|
18962 return parseInt(this.stripWrap.dom.clientWidth, 10) || 0;
|
rlm@46
|
18963 },
|
rlm@46
|
18964
|
rlm@46
|
18965 getScrollAnim : function(){
|
rlm@46
|
18966 return {duration:this.scrollDuration, callback: this.updateScrollButtons, scope: this};
|
rlm@46
|
18967 },
|
rlm@46
|
18968
|
rlm@46
|
18969 getScrollIncrement : function(){
|
rlm@46
|
18970 return this.scrollIncrement || (this.resizeTabs ? this.lastTabWidth+2 : 100);
|
rlm@46
|
18971 },
|
rlm@46
|
18972
|
rlm@46
|
18973
|
rlm@46
|
18974
|
rlm@46
|
18975 scrollToTab : function(item, animate){
|
rlm@46
|
18976 if(!item){ return; }
|
rlm@46
|
18977 var el = this.getTabEl(item);
|
rlm@46
|
18978 var pos = this.getScrollPos(), area = this.getScrollArea();
|
rlm@46
|
18979 var left = Ext.fly(el).getOffsetsTo(this.stripWrap)[0] + pos;
|
rlm@46
|
18980 var right = left + el.offsetWidth;
|
rlm@46
|
18981 if(left < pos){
|
rlm@46
|
18982 this.scrollTo(left, animate);
|
rlm@46
|
18983 }else if(right > (pos + area)){
|
rlm@46
|
18984 this.scrollTo(right - area, animate);
|
rlm@46
|
18985 }
|
rlm@46
|
18986 },
|
rlm@46
|
18987
|
rlm@46
|
18988 scrollTo : function(pos, animate){
|
rlm@46
|
18989 this.stripWrap.scrollTo('left', pos, animate ? this.getScrollAnim() : false);
|
rlm@46
|
18990 if(!animate){
|
rlm@46
|
18991 this.updateScrollButtons();
|
rlm@46
|
18992 }
|
rlm@46
|
18993 },
|
rlm@46
|
18994
|
rlm@46
|
18995 onWheel : function(e){
|
rlm@46
|
18996 var d = e.getWheelDelta()*this.wheelIncrement*-1;
|
rlm@46
|
18997 e.stopEvent();
|
rlm@46
|
18998
|
rlm@46
|
18999 var pos = this.getScrollPos();
|
rlm@46
|
19000 var newpos = pos + d;
|
rlm@46
|
19001 var sw = this.getScrollWidth()-this.getScrollArea();
|
rlm@46
|
19002
|
rlm@46
|
19003 var s = Math.max(0, Math.min(sw, newpos));
|
rlm@46
|
19004 if(s != pos){
|
rlm@46
|
19005 this.scrollTo(s, false);
|
rlm@46
|
19006 }
|
rlm@46
|
19007 },
|
rlm@46
|
19008
|
rlm@46
|
19009 onScrollRight : function(){
|
rlm@46
|
19010 var sw = this.getScrollWidth()-this.getScrollArea();
|
rlm@46
|
19011 var pos = this.getScrollPos();
|
rlm@46
|
19012 var s = Math.min(sw, pos + this.getScrollIncrement());
|
rlm@46
|
19013 if(s != pos){
|
rlm@46
|
19014 this.scrollTo(s, this.animScroll);
|
rlm@46
|
19015 }
|
rlm@46
|
19016 },
|
rlm@46
|
19017
|
rlm@46
|
19018 onScrollLeft : function(){
|
rlm@46
|
19019 var pos = this.getScrollPos();
|
rlm@46
|
19020 var s = Math.max(0, pos - this.getScrollIncrement());
|
rlm@46
|
19021 if(s != pos){
|
rlm@46
|
19022 this.scrollTo(s, this.animScroll);
|
rlm@46
|
19023 }
|
rlm@46
|
19024 },
|
rlm@46
|
19025
|
rlm@46
|
19026 updateScrollButtons : function(){
|
rlm@46
|
19027 var pos = this.getScrollPos();
|
rlm@46
|
19028 this.scrollLeft[pos == 0 ? 'addClass' : 'removeClass']('x-tab-scroller-left-disabled');
|
rlm@46
|
19029 this.scrollRight[pos >= (this.getScrollWidth()-this.getScrollArea()) ? 'addClass' : 'removeClass']('x-tab-scroller-right-disabled');
|
rlm@46
|
19030 }
|
rlm@46
|
19031
|
rlm@46
|
19032
|
rlm@46
|
19033
|
rlm@46
|
19034
|
rlm@46
|
19035
|
rlm@46
|
19036
|
rlm@46
|
19037
|
rlm@46
|
19038
|
rlm@46
|
19039
|
rlm@46
|
19040
|
rlm@46
|
19041
|
rlm@46
|
19042
|
rlm@46
|
19043
|
rlm@46
|
19044 });
|
rlm@46
|
19045 Ext.reg('tabpanel', Ext.TabPanel);
|
rlm@46
|
19046
|
rlm@46
|
19047
|
rlm@46
|
19048 Ext.TabPanel.prototype.activate = Ext.TabPanel.prototype.setActiveTab;
|
rlm@46
|
19049
|
rlm@46
|
19050 Ext.TabPanel.AccessStack = function(){
|
rlm@46
|
19051 var items = [];
|
rlm@46
|
19052 return {
|
rlm@46
|
19053 add : function(item){
|
rlm@46
|
19054 items.push(item);
|
rlm@46
|
19055 if(items.length > 10){
|
rlm@46
|
19056 items.shift();
|
rlm@46
|
19057 }
|
rlm@46
|
19058 },
|
rlm@46
|
19059
|
rlm@46
|
19060 remove : function(item){
|
rlm@46
|
19061 var s = [];
|
rlm@46
|
19062 for(var i = 0, len = items.length; i < len; i++) {
|
rlm@46
|
19063 if(items[i] != item){
|
rlm@46
|
19064 s.push(items[i]);
|
rlm@46
|
19065 }
|
rlm@46
|
19066 }
|
rlm@46
|
19067 items = s;
|
rlm@46
|
19068 },
|
rlm@46
|
19069
|
rlm@46
|
19070 next : function(){
|
rlm@46
|
19071 return items.pop();
|
rlm@46
|
19072 }
|
rlm@46
|
19073 };
|
rlm@46
|
19074 };
|
rlm@46
|
19075
|
rlm@46
|
19076
|
rlm@46
|
19077
|
rlm@46
|
19078
|
rlm@46
|
19079 Ext.Button = Ext.extend(Ext.Component, {
|
rlm@46
|
19080
|
rlm@46
|
19081 hidden : false,
|
rlm@46
|
19082
|
rlm@46
|
19083 disabled : false,
|
rlm@46
|
19084
|
rlm@46
|
19085 pressed : false,
|
rlm@46
|
19086
|
rlm@46
|
19087
|
rlm@46
|
19088
|
rlm@46
|
19089
|
rlm@46
|
19090
|
rlm@46
|
19091
|
rlm@46
|
19092
|
rlm@46
|
19093 enableToggle: false,
|
rlm@46
|
19094
|
rlm@46
|
19095
|
rlm@46
|
19096
|
rlm@46
|
19097 menuAlign : "tl-bl?",
|
rlm@46
|
19098
|
rlm@46
|
19099
|
rlm@46
|
19100
|
rlm@46
|
19101 type : 'button',
|
rlm@46
|
19102
|
rlm@46
|
19103 menuClassTarget: 'tr',
|
rlm@46
|
19104
|
rlm@46
|
19105
|
rlm@46
|
19106 clickEvent : 'click',
|
rlm@46
|
19107
|
rlm@46
|
19108
|
rlm@46
|
19109 handleMouseEvents : true,
|
rlm@46
|
19110
|
rlm@46
|
19111
|
rlm@46
|
19112 tooltipType : 'qtip',
|
rlm@46
|
19113
|
rlm@46
|
19114 buttonSelector : "button:first",
|
rlm@46
|
19115
|
rlm@46
|
19116
|
rlm@46
|
19117
|
rlm@46
|
19118
|
rlm@46
|
19119 initComponent : function(){
|
rlm@46
|
19120 Ext.Button.superclass.initComponent.call(this);
|
rlm@46
|
19121
|
rlm@46
|
19122 this.addEvents(
|
rlm@46
|
19123
|
rlm@46
|
19124 "click",
|
rlm@46
|
19125
|
rlm@46
|
19126 "toggle",
|
rlm@46
|
19127
|
rlm@46
|
19128 'mouseover',
|
rlm@46
|
19129
|
rlm@46
|
19130 'mouseout',
|
rlm@46
|
19131
|
rlm@46
|
19132 'menushow',
|
rlm@46
|
19133
|
rlm@46
|
19134 'menuhide',
|
rlm@46
|
19135
|
rlm@46
|
19136 'menutriggerover',
|
rlm@46
|
19137
|
rlm@46
|
19138 'menutriggerout'
|
rlm@46
|
19139 );
|
rlm@46
|
19140 if(this.menu){
|
rlm@46
|
19141 this.menu = Ext.menu.MenuMgr.get(this.menu);
|
rlm@46
|
19142 }
|
rlm@46
|
19143 if(typeof this.toggleGroup === 'string'){
|
rlm@46
|
19144 this.enableToggle = true;
|
rlm@46
|
19145 }
|
rlm@46
|
19146 },
|
rlm@46
|
19147
|
rlm@46
|
19148 onRender : function(ct, position){
|
rlm@46
|
19149 if(!this.template){
|
rlm@46
|
19150 if(!Ext.Button.buttonTemplate){
|
rlm@46
|
19151 Ext.Button.buttonTemplate = new Ext.Template(
|
rlm@46
|
19152 '<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>',
|
rlm@46
|
19153 '<td class="x-btn-left"><i> </i></td><td class="x-btn-center"><em unselectable="on"><button class="x-btn-text" type="{1}">{0}</button></em></td><td class="x-btn-right"><i> </i></td>',
|
rlm@46
|
19154 "</tr></tbody></table>");
|
rlm@46
|
19155 }
|
rlm@46
|
19156 this.template = Ext.Button.buttonTemplate;
|
rlm@46
|
19157 }
|
rlm@46
|
19158 var btn, targs = [this.text || ' ', this.type];
|
rlm@46
|
19159
|
rlm@46
|
19160 if(position){
|
rlm@46
|
19161 btn = this.template.insertBefore(position, targs, true);
|
rlm@46
|
19162 }else{
|
rlm@46
|
19163 btn = this.template.append(ct, targs, true);
|
rlm@46
|
19164 }
|
rlm@46
|
19165 var btnEl = btn.child(this.buttonSelector);
|
rlm@46
|
19166 btnEl.on('focus', this.onFocus, this);
|
rlm@46
|
19167 btnEl.on('blur', this.onBlur, this);
|
rlm@46
|
19168
|
rlm@46
|
19169 this.initButtonEl(btn, btnEl);
|
rlm@46
|
19170
|
rlm@46
|
19171 if(this.menu){
|
rlm@46
|
19172 this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");
|
rlm@46
|
19173 }
|
rlm@46
|
19174 Ext.ButtonToggleMgr.register(this);
|
rlm@46
|
19175 },
|
rlm@46
|
19176
|
rlm@46
|
19177 initButtonEl : function(btn, btnEl){
|
rlm@46
|
19178
|
rlm@46
|
19179 this.el = btn;
|
rlm@46
|
19180 btn.addClass("x-btn");
|
rlm@46
|
19181
|
rlm@46
|
19182 if(this.icon){
|
rlm@46
|
19183 btnEl.setStyle('background-image', 'url(' +this.icon +')');
|
rlm@46
|
19184 }
|
rlm@46
|
19185 if(this.iconCls){
|
rlm@46
|
19186 btnEl.addClass(this.iconCls);
|
rlm@46
|
19187 if(!this.cls){
|
rlm@46
|
19188 btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon');
|
rlm@46
|
19189 }
|
rlm@46
|
19190 }
|
rlm@46
|
19191 if(this.tabIndex !== undefined){
|
rlm@46
|
19192 btnEl.dom.tabIndex = this.tabIndex;
|
rlm@46
|
19193 }
|
rlm@46
|
19194 if(this.tooltip){
|
rlm@46
|
19195 if(typeof this.tooltip == 'object'){
|
rlm@46
|
19196 Ext.QuickTips.register(Ext.apply({
|
rlm@46
|
19197 target: btnEl.id
|
rlm@46
|
19198 }, this.tooltip));
|
rlm@46
|
19199 } else {
|
rlm@46
|
19200 btnEl.dom[this.tooltipType] = this.tooltip;
|
rlm@46
|
19201 }
|
rlm@46
|
19202 }
|
rlm@46
|
19203
|
rlm@46
|
19204 if(this.pressed){
|
rlm@46
|
19205 this.el.addClass("x-btn-pressed");
|
rlm@46
|
19206 }
|
rlm@46
|
19207
|
rlm@46
|
19208 if(this.handleMouseEvents){
|
rlm@46
|
19209 btn.on("mouseover", this.onMouseOver, this);
|
rlm@46
|
19210 btn.on("mousedown", this.onMouseDown, this);
|
rlm@46
|
19211 }
|
rlm@46
|
19212
|
rlm@46
|
19213 if(this.menu){
|
rlm@46
|
19214 this.menu.on("show", this.onMenuShow, this);
|
rlm@46
|
19215 this.menu.on("hide", this.onMenuHide, this);
|
rlm@46
|
19216 }
|
rlm@46
|
19217
|
rlm@46
|
19218 if(this.id){
|
rlm@46
|
19219 this.el.dom.id = this.el.id = this.id;
|
rlm@46
|
19220 }
|
rlm@46
|
19221
|
rlm@46
|
19222 if(this.repeat){
|
rlm@46
|
19223 var repeater = new Ext.util.ClickRepeater(btn,
|
rlm@46
|
19224 typeof this.repeat == "object" ? this.repeat : {}
|
rlm@46
|
19225 );
|
rlm@46
|
19226 repeater.on("click", this.onClick, this);
|
rlm@46
|
19227 }
|
rlm@46
|
19228
|
rlm@46
|
19229 btn.on(this.clickEvent, this.onClick, this);
|
rlm@46
|
19230 },
|
rlm@46
|
19231
|
rlm@46
|
19232 afterRender : function(){
|
rlm@46
|
19233 Ext.Button.superclass.afterRender.call(this);
|
rlm@46
|
19234 if(Ext.isIE6){
|
rlm@46
|
19235 this.autoWidth.defer(1, this);
|
rlm@46
|
19236 }else{
|
rlm@46
|
19237 this.autoWidth();
|
rlm@46
|
19238 }
|
rlm@46
|
19239 },
|
rlm@46
|
19240
|
rlm@46
|
19241
|
rlm@46
|
19242 setIconClass : function(cls){
|
rlm@46
|
19243 if(this.el){
|
rlm@46
|
19244 this.el.child(this.buttonSelector).replaceClass(this.iconCls, cls);
|
rlm@46
|
19245 }
|
rlm@46
|
19246 this.iconCls = cls;
|
rlm@46
|
19247 },
|
rlm@46
|
19248
|
rlm@46
|
19249 beforeDestroy: function(){
|
rlm@46
|
19250 if(this.rendered){
|
rlm@46
|
19251 var btn = this.el.child(this.buttonSelector);
|
rlm@46
|
19252 if(btn){
|
rlm@46
|
19253 btn.removeAllListeners();
|
rlm@46
|
19254 }
|
rlm@46
|
19255 }
|
rlm@46
|
19256 if(this.menu){
|
rlm@46
|
19257 Ext.destroy(this.menu);
|
rlm@46
|
19258 }
|
rlm@46
|
19259 },
|
rlm@46
|
19260
|
rlm@46
|
19261 onDestroy : function(){
|
rlm@46
|
19262 if(this.rendered){
|
rlm@46
|
19263 Ext.ButtonToggleMgr.unregister(this);
|
rlm@46
|
19264 }
|
rlm@46
|
19265 },
|
rlm@46
|
19266
|
rlm@46
|
19267 autoWidth : function(){
|
rlm@46
|
19268 if(this.el){
|
rlm@46
|
19269 this.el.setWidth("auto");
|
rlm@46
|
19270 if(Ext.isIE7 && Ext.isStrict){
|
rlm@46
|
19271 var ib = this.el.child(this.buttonSelector);
|
rlm@46
|
19272 if(ib && ib.getWidth() > 20){
|
rlm@46
|
19273 ib.clip();
|
rlm@46
|
19274 ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
|
rlm@46
|
19275 }
|
rlm@46
|
19276 }
|
rlm@46
|
19277 if(this.minWidth){
|
rlm@46
|
19278 if(this.el.getWidth() < this.minWidth){
|
rlm@46
|
19279 this.el.setWidth(this.minWidth);
|
rlm@46
|
19280 }
|
rlm@46
|
19281 }
|
rlm@46
|
19282 }
|
rlm@46
|
19283 },
|
rlm@46
|
19284
|
rlm@46
|
19285
|
rlm@46
|
19286 setHandler : function(handler, scope){
|
rlm@46
|
19287 this.handler = handler;
|
rlm@46
|
19288 this.scope = scope;
|
rlm@46
|
19289 },
|
rlm@46
|
19290
|
rlm@46
|
19291
|
rlm@46
|
19292 setText : function(text){
|
rlm@46
|
19293 this.text = text;
|
rlm@46
|
19294 if(this.el){
|
rlm@46
|
19295 this.el.child("td.x-btn-center " + this.buttonSelector).update(text);
|
rlm@46
|
19296 }
|
rlm@46
|
19297 this.autoWidth();
|
rlm@46
|
19298 },
|
rlm@46
|
19299
|
rlm@46
|
19300
|
rlm@46
|
19301 getText : function(){
|
rlm@46
|
19302 return this.text;
|
rlm@46
|
19303 },
|
rlm@46
|
19304
|
rlm@46
|
19305
|
rlm@46
|
19306 toggle : function(state){
|
rlm@46
|
19307 state = state === undefined ? !this.pressed : state;
|
rlm@46
|
19308 if(state != this.pressed){
|
rlm@46
|
19309 if(state){
|
rlm@46
|
19310 this.el.addClass("x-btn-pressed");
|
rlm@46
|
19311 this.pressed = true;
|
rlm@46
|
19312 this.fireEvent("toggle", this, true);
|
rlm@46
|
19313 }else{
|
rlm@46
|
19314 this.el.removeClass("x-btn-pressed");
|
rlm@46
|
19315 this.pressed = false;
|
rlm@46
|
19316 this.fireEvent("toggle", this, false);
|
rlm@46
|
19317 }
|
rlm@46
|
19318 if(this.toggleHandler){
|
rlm@46
|
19319 this.toggleHandler.call(this.scope || this, this, state);
|
rlm@46
|
19320 }
|
rlm@46
|
19321 }
|
rlm@46
|
19322 },
|
rlm@46
|
19323
|
rlm@46
|
19324
|
rlm@46
|
19325 focus : function(){
|
rlm@46
|
19326 this.el.child(this.buttonSelector).focus();
|
rlm@46
|
19327 },
|
rlm@46
|
19328
|
rlm@46
|
19329 onDisable : function(){
|
rlm@46
|
19330 if(this.el){
|
rlm@46
|
19331 if(!Ext.isIE6 || !this.text){
|
rlm@46
|
19332 this.el.addClass(this.disabledClass);
|
rlm@46
|
19333 }
|
rlm@46
|
19334 this.el.dom.disabled = true;
|
rlm@46
|
19335 }
|
rlm@46
|
19336 this.disabled = true;
|
rlm@46
|
19337 },
|
rlm@46
|
19338
|
rlm@46
|
19339 onEnable : function(){
|
rlm@46
|
19340 if(this.el){
|
rlm@46
|
19341 if(!Ext.isIE6 || !this.text){
|
rlm@46
|
19342 this.el.removeClass(this.disabledClass);
|
rlm@46
|
19343 }
|
rlm@46
|
19344 this.el.dom.disabled = false;
|
rlm@46
|
19345 }
|
rlm@46
|
19346 this.disabled = false;
|
rlm@46
|
19347 },
|
rlm@46
|
19348
|
rlm@46
|
19349
|
rlm@46
|
19350 showMenu : function(){
|
rlm@46
|
19351 if(this.menu){
|
rlm@46
|
19352 this.menu.show(this.el, this.menuAlign);
|
rlm@46
|
19353 }
|
rlm@46
|
19354 return this;
|
rlm@46
|
19355 },
|
rlm@46
|
19356
|
rlm@46
|
19357
|
rlm@46
|
19358 hideMenu : function(){
|
rlm@46
|
19359 if(this.menu){
|
rlm@46
|
19360 this.menu.hide();
|
rlm@46
|
19361 }
|
rlm@46
|
19362 return this;
|
rlm@46
|
19363 },
|
rlm@46
|
19364
|
rlm@46
|
19365
|
rlm@46
|
19366 hasVisibleMenu : function(){
|
rlm@46
|
19367 return this.menu && this.menu.isVisible();
|
rlm@46
|
19368 },
|
rlm@46
|
19369
|
rlm@46
|
19370 onClick : function(e){
|
rlm@46
|
19371 if(e){
|
rlm@46
|
19372 e.preventDefault();
|
rlm@46
|
19373 }
|
rlm@46
|
19374 if(e.button != 0){
|
rlm@46
|
19375 return;
|
rlm@46
|
19376 }
|
rlm@46
|
19377 if(!this.disabled){
|
rlm@46
|
19378 if(this.enableToggle && (this.allowDepress !== false || !this.pressed)){
|
rlm@46
|
19379 this.toggle();
|
rlm@46
|
19380 }
|
rlm@46
|
19381 if(this.menu && !this.menu.isVisible() && !this.ignoreNextClick){
|
rlm@46
|
19382 this.showMenu();
|
rlm@46
|
19383 }
|
rlm@46
|
19384 this.fireEvent("click", this, e);
|
rlm@46
|
19385 if(this.handler){
|
rlm@46
|
19386 this.handler.call(this.scope || this, this, e);
|
rlm@46
|
19387 }
|
rlm@46
|
19388 }
|
rlm@46
|
19389 },
|
rlm@46
|
19390
|
rlm@46
|
19391 isMenuTriggerOver : function(e, internal){
|
rlm@46
|
19392 return this.menu && !internal;
|
rlm@46
|
19393 },
|
rlm@46
|
19394
|
rlm@46
|
19395 isMenuTriggerOut : function(e, internal){
|
rlm@46
|
19396 return this.menu && !internal;
|
rlm@46
|
19397 },
|
rlm@46
|
19398
|
rlm@46
|
19399 onMouseOver : function(e){
|
rlm@46
|
19400 if(!this.disabled){
|
rlm@46
|
19401 var internal = e.within(this.el, true);
|
rlm@46
|
19402 if(!internal){
|
rlm@46
|
19403 this.el.addClass("x-btn-over");
|
rlm@46
|
19404 Ext.getDoc().on('mouseover', this.monitorMouseOver, this);
|
rlm@46
|
19405 this.fireEvent('mouseover', this, e);
|
rlm@46
|
19406 }
|
rlm@46
|
19407 if(this.isMenuTriggerOver(e, internal)){
|
rlm@46
|
19408 this.fireEvent('menutriggerover', this, this.menu, e);
|
rlm@46
|
19409 }
|
rlm@46
|
19410 }
|
rlm@46
|
19411 },
|
rlm@46
|
19412
|
rlm@46
|
19413 monitorMouseOver : function(e){
|
rlm@46
|
19414 if(e.target != this.el.dom && !e.within(this.el)){
|
rlm@46
|
19415 Ext.getDoc().un('mouseover', this.monitorMouseOver, this);
|
rlm@46
|
19416 this.onMouseOut(e);
|
rlm@46
|
19417 }
|
rlm@46
|
19418 },
|
rlm@46
|
19419
|
rlm@46
|
19420 onMouseOut : function(e){
|
rlm@46
|
19421 var internal = e.within(this.el) && e.target != this.el.dom;
|
rlm@46
|
19422 this.el.removeClass("x-btn-over");
|
rlm@46
|
19423 this.fireEvent('mouseout', this, e);
|
rlm@46
|
19424 if(this.isMenuTriggerOut(e, internal)){
|
rlm@46
|
19425 this.fireEvent('menutriggerout', this, this.menu, e);
|
rlm@46
|
19426 }
|
rlm@46
|
19427 },
|
rlm@46
|
19428 onFocus : function(e){
|
rlm@46
|
19429 if(!this.disabled){
|
rlm@46
|
19430 this.el.addClass("x-btn-focus");
|
rlm@46
|
19431 }
|
rlm@46
|
19432 },
|
rlm@46
|
19433 onBlur : function(e){
|
rlm@46
|
19434 this.el.removeClass("x-btn-focus");
|
rlm@46
|
19435 },
|
rlm@46
|
19436
|
rlm@46
|
19437 getClickEl : function(e, isUp){
|
rlm@46
|
19438 return this.el;
|
rlm@46
|
19439 },
|
rlm@46
|
19440
|
rlm@46
|
19441 onMouseDown : function(e){
|
rlm@46
|
19442 if(!this.disabled && e.button == 0){
|
rlm@46
|
19443 this.getClickEl(e).addClass("x-btn-click");
|
rlm@46
|
19444 Ext.getDoc().on('mouseup', this.onMouseUp, this);
|
rlm@46
|
19445 }
|
rlm@46
|
19446 },
|
rlm@46
|
19447 onMouseUp : function(e){
|
rlm@46
|
19448 if(e.button == 0){
|
rlm@46
|
19449 this.getClickEl(e, true).removeClass("x-btn-click");
|
rlm@46
|
19450 Ext.getDoc().un('mouseup', this.onMouseUp, this);
|
rlm@46
|
19451 }
|
rlm@46
|
19452 },
|
rlm@46
|
19453 onMenuShow : function(e){
|
rlm@46
|
19454 this.ignoreNextClick = 0;
|
rlm@46
|
19455 this.el.addClass("x-btn-menu-active");
|
rlm@46
|
19456 this.fireEvent('menushow', this, this.menu);
|
rlm@46
|
19457 },
|
rlm@46
|
19458 onMenuHide : function(e){
|
rlm@46
|
19459 this.el.removeClass("x-btn-menu-active");
|
rlm@46
|
19460 this.ignoreNextClick = this.restoreClick.defer(250, this);
|
rlm@46
|
19461 this.fireEvent('menuhide', this, this.menu);
|
rlm@46
|
19462 },
|
rlm@46
|
19463
|
rlm@46
|
19464 restoreClick : function(){
|
rlm@46
|
19465 this.ignoreNextClick = 0;
|
rlm@46
|
19466 }
|
rlm@46
|
19467
|
rlm@46
|
19468
|
rlm@46
|
19469
|
rlm@46
|
19470
|
rlm@46
|
19471 });
|
rlm@46
|
19472 Ext.reg('button', Ext.Button);
|
rlm@46
|
19473
|
rlm@46
|
19474 Ext.ButtonToggleMgr = function(){
|
rlm@46
|
19475 var groups = {};
|
rlm@46
|
19476
|
rlm@46
|
19477 function toggleGroup(btn, state){
|
rlm@46
|
19478 if(state){
|
rlm@46
|
19479 var g = groups[btn.toggleGroup];
|
rlm@46
|
19480 for(var i = 0, l = g.length; i < l; i++){
|
rlm@46
|
19481 if(g[i] != btn){
|
rlm@46
|
19482 g[i].toggle(false);
|
rlm@46
|
19483 }
|
rlm@46
|
19484 }
|
rlm@46
|
19485 }
|
rlm@46
|
19486 }
|
rlm@46
|
19487
|
rlm@46
|
19488 return {
|
rlm@46
|
19489 register : function(btn){
|
rlm@46
|
19490 if(!btn.toggleGroup){
|
rlm@46
|
19491 return;
|
rlm@46
|
19492 }
|
rlm@46
|
19493 var g = groups[btn.toggleGroup];
|
rlm@46
|
19494 if(!g){
|
rlm@46
|
19495 g = groups[btn.toggleGroup] = [];
|
rlm@46
|
19496 }
|
rlm@46
|
19497 g.push(btn);
|
rlm@46
|
19498 btn.on("toggle", toggleGroup);
|
rlm@46
|
19499 },
|
rlm@46
|
19500
|
rlm@46
|
19501 unregister : function(btn){
|
rlm@46
|
19502 if(!btn.toggleGroup){
|
rlm@46
|
19503 return;
|
rlm@46
|
19504 }
|
rlm@46
|
19505 var g = groups[btn.toggleGroup];
|
rlm@46
|
19506 if(g){
|
rlm@46
|
19507 g.remove(btn);
|
rlm@46
|
19508 btn.un("toggle", toggleGroup);
|
rlm@46
|
19509 }
|
rlm@46
|
19510 }
|
rlm@46
|
19511 };
|
rlm@46
|
19512 }();
|
rlm@46
|
19513
|
rlm@46
|
19514 Ext.SplitButton = Ext.extend(Ext.Button, {
|
rlm@46
|
19515
|
rlm@46
|
19516 arrowSelector : 'button:last',
|
rlm@46
|
19517
|
rlm@46
|
19518
|
rlm@46
|
19519 initComponent : function(){
|
rlm@46
|
19520 Ext.SplitButton.superclass.initComponent.call(this);
|
rlm@46
|
19521
|
rlm@46
|
19522 this.addEvents("arrowclick");
|
rlm@46
|
19523 },
|
rlm@46
|
19524
|
rlm@46
|
19525
|
rlm@46
|
19526 onRender : function(ct, position){
|
rlm@46
|
19527
|
rlm@46
|
19528 var tpl = new Ext.Template(
|
rlm@46
|
19529 '<table cellspacing="0" class="x-btn-menu-wrap x-btn"><tr><td>',
|
rlm@46
|
19530 '<table cellspacing="0" class="x-btn-wrap x-btn-menu-text-wrap"><tbody>',
|
rlm@46
|
19531 '<tr><td class="x-btn-left"><i> </i></td><td class="x-btn-center"><button class="x-btn-text" type="{1}">{0}</button></td></tr>',
|
rlm@46
|
19532 "</tbody></table></td><td>",
|
rlm@46
|
19533 '<table cellspacing="0" class="x-btn-wrap x-btn-menu-arrow-wrap"><tbody>',
|
rlm@46
|
19534 '<tr><td class="x-btn-center"><button class="x-btn-menu-arrow-el" type="button"> </button></td><td class="x-btn-right"><i> </i></td></tr>',
|
rlm@46
|
19535 "</tbody></table></td></tr></table>"
|
rlm@46
|
19536 );
|
rlm@46
|
19537 var btn, targs = [this.text || ' ', this.type];
|
rlm@46
|
19538 if(position){
|
rlm@46
|
19539 btn = tpl.insertBefore(position, targs, true);
|
rlm@46
|
19540 }else{
|
rlm@46
|
19541 btn = tpl.append(ct, targs, true);
|
rlm@46
|
19542 }
|
rlm@46
|
19543 var btnEl = btn.child(this.buttonSelector);
|
rlm@46
|
19544
|
rlm@46
|
19545 this.initButtonEl(btn, btnEl);
|
rlm@46
|
19546 this.arrowBtnTable = btn.child("table:last");
|
rlm@46
|
19547 if(this.arrowTooltip){
|
rlm@46
|
19548 btn.child(this.arrowSelector).dom[this.tooltipType] = this.arrowTooltip;
|
rlm@46
|
19549 }
|
rlm@46
|
19550 },
|
rlm@46
|
19551
|
rlm@46
|
19552
|
rlm@46
|
19553 autoWidth : function(){
|
rlm@46
|
19554 if(this.el){
|
rlm@46
|
19555 var tbl = this.el.child("table:first");
|
rlm@46
|
19556 var tbl2 = this.el.child("table:last");
|
rlm@46
|
19557 this.el.setWidth("auto");
|
rlm@46
|
19558 tbl.setWidth("auto");
|
rlm@46
|
19559 if(Ext.isIE7 && Ext.isStrict){
|
rlm@46
|
19560 var ib = this.el.child(this.buttonSelector);
|
rlm@46
|
19561 if(ib && ib.getWidth() > 20){
|
rlm@46
|
19562 ib.clip();
|
rlm@46
|
19563 ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
|
rlm@46
|
19564 }
|
rlm@46
|
19565 }
|
rlm@46
|
19566 if(this.minWidth){
|
rlm@46
|
19567 if((tbl.getWidth()+tbl2.getWidth()) < this.minWidth){
|
rlm@46
|
19568 tbl.setWidth(this.minWidth-tbl2.getWidth());
|
rlm@46
|
19569 }
|
rlm@46
|
19570 }
|
rlm@46
|
19571 this.el.setWidth(tbl.getWidth()+tbl2.getWidth());
|
rlm@46
|
19572 }
|
rlm@46
|
19573 },
|
rlm@46
|
19574
|
rlm@46
|
19575
|
rlm@46
|
19576 setArrowHandler : function(handler, scope){
|
rlm@46
|
19577 this.arrowHandler = handler;
|
rlm@46
|
19578 this.scope = scope;
|
rlm@46
|
19579 },
|
rlm@46
|
19580
|
rlm@46
|
19581
|
rlm@46
|
19582 onClick : function(e){
|
rlm@46
|
19583 e.preventDefault();
|
rlm@46
|
19584 if(!this.disabled){
|
rlm@46
|
19585 if(e.getTarget(".x-btn-menu-arrow-wrap")){
|
rlm@46
|
19586 if(this.menu && !this.menu.isVisible() && !this.ignoreNextClick){
|
rlm@46
|
19587 this.showMenu();
|
rlm@46
|
19588 }
|
rlm@46
|
19589 this.fireEvent("arrowclick", this, e);
|
rlm@46
|
19590 if(this.arrowHandler){
|
rlm@46
|
19591 this.arrowHandler.call(this.scope || this, this, e);
|
rlm@46
|
19592 }
|
rlm@46
|
19593 }else{
|
rlm@46
|
19594 if(this.enableToggle){
|
rlm@46
|
19595 this.toggle();
|
rlm@46
|
19596 }
|
rlm@46
|
19597 this.fireEvent("click", this, e);
|
rlm@46
|
19598 if(this.handler){
|
rlm@46
|
19599 this.handler.call(this.scope || this, this, e);
|
rlm@46
|
19600 }
|
rlm@46
|
19601 }
|
rlm@46
|
19602 }
|
rlm@46
|
19603 },
|
rlm@46
|
19604
|
rlm@46
|
19605
|
rlm@46
|
19606 getClickEl : function(e, isUp){
|
rlm@46
|
19607 if(!isUp){
|
rlm@46
|
19608 return (this.lastClickEl = e.getTarget("table", 10, true));
|
rlm@46
|
19609 }
|
rlm@46
|
19610 return this.lastClickEl;
|
rlm@46
|
19611 },
|
rlm@46
|
19612
|
rlm@46
|
19613
|
rlm@46
|
19614 onDisable : function(){
|
rlm@46
|
19615 if(this.el){
|
rlm@46
|
19616 if(!Ext.isIE6){
|
rlm@46
|
19617 this.el.addClass("x-item-disabled");
|
rlm@46
|
19618 }
|
rlm@46
|
19619 this.el.child(this.buttonSelector).dom.disabled = true;
|
rlm@46
|
19620 this.el.child(this.arrowSelector).dom.disabled = true;
|
rlm@46
|
19621 }
|
rlm@46
|
19622 this.disabled = true;
|
rlm@46
|
19623 },
|
rlm@46
|
19624
|
rlm@46
|
19625
|
rlm@46
|
19626 onEnable : function(){
|
rlm@46
|
19627 if(this.el){
|
rlm@46
|
19628 if(!Ext.isIE6){
|
rlm@46
|
19629 this.el.removeClass("x-item-disabled");
|
rlm@46
|
19630 }
|
rlm@46
|
19631 this.el.child(this.buttonSelector).dom.disabled = false;
|
rlm@46
|
19632 this.el.child(this.arrowSelector).dom.disabled = false;
|
rlm@46
|
19633 }
|
rlm@46
|
19634 this.disabled = false;
|
rlm@46
|
19635 },
|
rlm@46
|
19636
|
rlm@46
|
19637
|
rlm@46
|
19638 isMenuTriggerOver : function(e){
|
rlm@46
|
19639 return this.menu && e.within(this.arrowBtnTable) && !e.within(this.arrowBtnTable, true);
|
rlm@46
|
19640 },
|
rlm@46
|
19641
|
rlm@46
|
19642
|
rlm@46
|
19643 isMenuTriggerOut : function(e, internal){
|
rlm@46
|
19644 return this.menu && !e.within(this.arrowBtnTable);
|
rlm@46
|
19645 },
|
rlm@46
|
19646
|
rlm@46
|
19647
|
rlm@46
|
19648 onDestroy : function(){
|
rlm@46
|
19649 Ext.destroy(this.arrowBtnTable);
|
rlm@46
|
19650 Ext.SplitButton.superclass.onDestroy.call(this);
|
rlm@46
|
19651 }
|
rlm@46
|
19652 });
|
rlm@46
|
19653
|
rlm@46
|
19654
|
rlm@46
|
19655 Ext.MenuButton = Ext.SplitButton;
|
rlm@46
|
19656
|
rlm@46
|
19657
|
rlm@46
|
19658 Ext.reg('splitbutton', Ext.SplitButton);
|
rlm@46
|
19659
|
rlm@46
|
19660 Ext.CycleButton = Ext.extend(Ext.SplitButton, {
|
rlm@46
|
19661
|
rlm@46
|
19662
|
rlm@46
|
19663
|
rlm@46
|
19664
|
rlm@46
|
19665
|
rlm@46
|
19666
|
rlm@46
|
19667
|
rlm@46
|
19668 getItemText : function(item){
|
rlm@46
|
19669 if(item && this.showText === true){
|
rlm@46
|
19670 var text = '';
|
rlm@46
|
19671 if(this.prependText){
|
rlm@46
|
19672 text += this.prependText;
|
rlm@46
|
19673 }
|
rlm@46
|
19674 text += item.text;
|
rlm@46
|
19675 return text;
|
rlm@46
|
19676 }
|
rlm@46
|
19677 return undefined;
|
rlm@46
|
19678 },
|
rlm@46
|
19679
|
rlm@46
|
19680
|
rlm@46
|
19681 setActiveItem : function(item, suppressEvent){
|
rlm@46
|
19682 if(typeof item != 'object'){
|
rlm@46
|
19683 item = this.menu.items.get(item);
|
rlm@46
|
19684 }
|
rlm@46
|
19685 if(item){
|
rlm@46
|
19686 if(!this.rendered){
|
rlm@46
|
19687 this.text = this.getItemText(item);
|
rlm@46
|
19688 this.iconCls = item.iconCls;
|
rlm@46
|
19689 }else{
|
rlm@46
|
19690 var t = this.getItemText(item);
|
rlm@46
|
19691 if(t){
|
rlm@46
|
19692 this.setText(t);
|
rlm@46
|
19693 }
|
rlm@46
|
19694 this.setIconClass(item.iconCls);
|
rlm@46
|
19695 }
|
rlm@46
|
19696 this.activeItem = item;
|
rlm@46
|
19697 if(!item.checked){
|
rlm@46
|
19698 item.setChecked(true, true);
|
rlm@46
|
19699 }
|
rlm@46
|
19700 if(this.forceIcon){
|
rlm@46
|
19701 this.setIconClass(this.forceIcon);
|
rlm@46
|
19702 }
|
rlm@46
|
19703 if(!suppressEvent){
|
rlm@46
|
19704 this.fireEvent('change', this, item);
|
rlm@46
|
19705 }
|
rlm@46
|
19706 }
|
rlm@46
|
19707 },
|
rlm@46
|
19708
|
rlm@46
|
19709
|
rlm@46
|
19710 getActiveItem : function(){
|
rlm@46
|
19711 return this.activeItem;
|
rlm@46
|
19712 },
|
rlm@46
|
19713
|
rlm@46
|
19714
|
rlm@46
|
19715 initComponent : function(){
|
rlm@46
|
19716 this.addEvents(
|
rlm@46
|
19717
|
rlm@46
|
19718 "change"
|
rlm@46
|
19719 );
|
rlm@46
|
19720
|
rlm@46
|
19721 if(this.changeHandler){
|
rlm@46
|
19722 this.on('change', this.changeHandler, this.scope||this);
|
rlm@46
|
19723 delete this.changeHandler;
|
rlm@46
|
19724 }
|
rlm@46
|
19725
|
rlm@46
|
19726 this.itemCount = this.items.length;
|
rlm@46
|
19727
|
rlm@46
|
19728 this.menu = {cls:'x-cycle-menu', items:[]};
|
rlm@46
|
19729 var checked;
|
rlm@46
|
19730 for(var i = 0, len = this.itemCount; i < len; i++){
|
rlm@46
|
19731 var item = this.items[i];
|
rlm@46
|
19732 item.group = item.group || this.id;
|
rlm@46
|
19733 item.itemIndex = i;
|
rlm@46
|
19734 item.checkHandler = this.checkHandler;
|
rlm@46
|
19735 item.scope = this;
|
rlm@46
|
19736 item.checked = item.checked || false;
|
rlm@46
|
19737 this.menu.items.push(item);
|
rlm@46
|
19738 if(item.checked){
|
rlm@46
|
19739 checked = item;
|
rlm@46
|
19740 }
|
rlm@46
|
19741 }
|
rlm@46
|
19742 this.setActiveItem(checked, true);
|
rlm@46
|
19743 Ext.CycleButton.superclass.initComponent.call(this);
|
rlm@46
|
19744
|
rlm@46
|
19745 this.on('click', this.toggleSelected, this);
|
rlm@46
|
19746 },
|
rlm@46
|
19747
|
rlm@46
|
19748
|
rlm@46
|
19749 checkHandler : function(item, pressed){
|
rlm@46
|
19750 if(pressed){
|
rlm@46
|
19751 this.setActiveItem(item);
|
rlm@46
|
19752 }
|
rlm@46
|
19753 },
|
rlm@46
|
19754
|
rlm@46
|
19755
|
rlm@46
|
19756 toggleSelected : function(){
|
rlm@46
|
19757 this.menu.render();
|
rlm@46
|
19758
|
rlm@46
|
19759 var nextIdx, checkItem;
|
rlm@46
|
19760 for (var i = 1; i < this.itemCount; i++) {
|
rlm@46
|
19761 nextIdx = (this.activeItem.itemIndex + i) % this.itemCount;
|
rlm@46
|
19762
|
rlm@46
|
19763 checkItem = this.menu.items.itemAt(nextIdx);
|
rlm@46
|
19764
|
rlm@46
|
19765 if (!checkItem.disabled) {
|
rlm@46
|
19766 checkItem.setChecked(true);
|
rlm@46
|
19767 break;
|
rlm@46
|
19768 }
|
rlm@46
|
19769 }
|
rlm@46
|
19770 }
|
rlm@46
|
19771 });
|
rlm@46
|
19772 Ext.reg('cycle', Ext.CycleButton);
|
rlm@46
|
19773
|
rlm@46
|
19774 Ext.Toolbar = function(config){
|
rlm@46
|
19775 if(Ext.isArray(config)){
|
rlm@46
|
19776 config = {buttons:config};
|
rlm@46
|
19777 }
|
rlm@46
|
19778 Ext.Toolbar.superclass.constructor.call(this, config);
|
rlm@46
|
19779 };
|
rlm@46
|
19780
|
rlm@46
|
19781 (function(){
|
rlm@46
|
19782
|
rlm@46
|
19783 var T = Ext.Toolbar;
|
rlm@46
|
19784
|
rlm@46
|
19785 Ext.extend(T, Ext.BoxComponent, {
|
rlm@46
|
19786
|
rlm@46
|
19787 trackMenus : true,
|
rlm@46
|
19788
|
rlm@46
|
19789
|
rlm@46
|
19790 initComponent : function(){
|
rlm@46
|
19791 T.superclass.initComponent.call(this);
|
rlm@46
|
19792
|
rlm@46
|
19793 if(this.items){
|
rlm@46
|
19794 this.buttons = this.items;
|
rlm@46
|
19795 }
|
rlm@46
|
19796
|
rlm@46
|
19797 this.items = new Ext.util.MixedCollection(false, function(o){
|
rlm@46
|
19798 return o.itemId || o.id || Ext.id();
|
rlm@46
|
19799 });
|
rlm@46
|
19800 },
|
rlm@46
|
19801
|
rlm@46
|
19802
|
rlm@46
|
19803 autoCreate: {
|
rlm@46
|
19804 cls:'x-toolbar x-small-editor',
|
rlm@46
|
19805 html:'<table cellspacing="0"><tr></tr></table>'
|
rlm@46
|
19806 },
|
rlm@46
|
19807
|
rlm@46
|
19808
|
rlm@46
|
19809 onRender : function(ct, position){
|
rlm@46
|
19810 this.el = ct.createChild(Ext.apply({ id: this.id },this.autoCreate), position);
|
rlm@46
|
19811 this.tr = this.el.child("tr", true);
|
rlm@46
|
19812 },
|
rlm@46
|
19813
|
rlm@46
|
19814
|
rlm@46
|
19815 afterRender : function(){
|
rlm@46
|
19816 T.superclass.afterRender.call(this);
|
rlm@46
|
19817 if(this.buttons){
|
rlm@46
|
19818 this.add.apply(this, this.buttons);
|
rlm@46
|
19819 delete this.buttons;
|
rlm@46
|
19820 }
|
rlm@46
|
19821 },
|
rlm@46
|
19822
|
rlm@46
|
19823
|
rlm@46
|
19824 add : function(){
|
rlm@46
|
19825 var a = arguments, l = a.length;
|
rlm@46
|
19826 for(var i = 0; i < l; i++){
|
rlm@46
|
19827 var el = a[i];
|
rlm@46
|
19828 if(el.isFormField){
|
rlm@46
|
19829 this.addField(el);
|
rlm@46
|
19830 }else if(el.render){
|
rlm@46
|
19831 this.addItem(el);
|
rlm@46
|
19832 }else if(typeof el == "string"){
|
rlm@46
|
19833 if(el == "separator" || el == "-"){
|
rlm@46
|
19834 this.addSeparator();
|
rlm@46
|
19835 }else if(el == " "){
|
rlm@46
|
19836 this.addSpacer();
|
rlm@46
|
19837 }else if(el == "->"){
|
rlm@46
|
19838 this.addFill();
|
rlm@46
|
19839 }else{
|
rlm@46
|
19840 this.addText(el);
|
rlm@46
|
19841 }
|
rlm@46
|
19842 }else if(el.tagName){
|
rlm@46
|
19843 this.addElement(el);
|
rlm@46
|
19844 }else if(typeof el == "object"){
|
rlm@46
|
19845 if(el.xtype){
|
rlm@46
|
19846 this.addField(Ext.ComponentMgr.create(el, 'button'));
|
rlm@46
|
19847 }else{
|
rlm@46
|
19848 this.addButton(el);
|
rlm@46
|
19849 }
|
rlm@46
|
19850 }
|
rlm@46
|
19851 }
|
rlm@46
|
19852 },
|
rlm@46
|
19853
|
rlm@46
|
19854
|
rlm@46
|
19855 addSeparator : function(){
|
rlm@46
|
19856 return this.addItem(new T.Separator());
|
rlm@46
|
19857 },
|
rlm@46
|
19858
|
rlm@46
|
19859
|
rlm@46
|
19860 addSpacer : function(){
|
rlm@46
|
19861 return this.addItem(new T.Spacer());
|
rlm@46
|
19862 },
|
rlm@46
|
19863
|
rlm@46
|
19864
|
rlm@46
|
19865 addFill : function(){
|
rlm@46
|
19866 return this.addItem(new T.Fill());
|
rlm@46
|
19867 },
|
rlm@46
|
19868
|
rlm@46
|
19869
|
rlm@46
|
19870 addElement : function(el){
|
rlm@46
|
19871 return this.addItem(new T.Item(el));
|
rlm@46
|
19872 },
|
rlm@46
|
19873
|
rlm@46
|
19874
|
rlm@46
|
19875 addItem : function(item){
|
rlm@46
|
19876 var td = this.nextBlock();
|
rlm@46
|
19877 this.initMenuTracking(item);
|
rlm@46
|
19878 item.render(td);
|
rlm@46
|
19879 this.items.add(item);
|
rlm@46
|
19880 return item;
|
rlm@46
|
19881 },
|
rlm@46
|
19882
|
rlm@46
|
19883
|
rlm@46
|
19884 addButton : function(config){
|
rlm@46
|
19885 if(Ext.isArray(config)){
|
rlm@46
|
19886 var buttons = [];
|
rlm@46
|
19887 for(var i = 0, len = config.length; i < len; i++) {
|
rlm@46
|
19888 buttons.push(this.addButton(config[i]));
|
rlm@46
|
19889 }
|
rlm@46
|
19890 return buttons;
|
rlm@46
|
19891 }
|
rlm@46
|
19892 var b = config;
|
rlm@46
|
19893 if(!(config instanceof T.Button)){
|
rlm@46
|
19894 b = config.split ?
|
rlm@46
|
19895 new T.SplitButton(config) :
|
rlm@46
|
19896 new T.Button(config);
|
rlm@46
|
19897 }
|
rlm@46
|
19898 var td = this.nextBlock();
|
rlm@46
|
19899 this.initMenuTracking(b);
|
rlm@46
|
19900 b.render(td);
|
rlm@46
|
19901 this.items.add(b);
|
rlm@46
|
19902 return b;
|
rlm@46
|
19903 },
|
rlm@46
|
19904
|
rlm@46
|
19905
|
rlm@46
|
19906 initMenuTracking : function(item){
|
rlm@46
|
19907 if(this.trackMenus && item.menu){
|
rlm@46
|
19908 item.on({
|
rlm@46
|
19909 'menutriggerover' : this.onButtonTriggerOver,
|
rlm@46
|
19910 'menushow' : this.onButtonMenuShow,
|
rlm@46
|
19911 'menuhide' : this.onButtonMenuHide,
|
rlm@46
|
19912 scope: this
|
rlm@46
|
19913 })
|
rlm@46
|
19914 }
|
rlm@46
|
19915 },
|
rlm@46
|
19916
|
rlm@46
|
19917
|
rlm@46
|
19918 addText : function(text){
|
rlm@46
|
19919 return this.addItem(new T.TextItem(text));
|
rlm@46
|
19920 },
|
rlm@46
|
19921
|
rlm@46
|
19922
|
rlm@46
|
19923 insertButton : function(index, item){
|
rlm@46
|
19924 if(Ext.isArray(item)){
|
rlm@46
|
19925 var buttons = [];
|
rlm@46
|
19926 for(var i = 0, len = item.length; i < len; i++) {
|
rlm@46
|
19927 buttons.push(this.insertButton(index + i, item[i]));
|
rlm@46
|
19928 }
|
rlm@46
|
19929 return buttons;
|
rlm@46
|
19930 }
|
rlm@46
|
19931 if (!(item instanceof T.Button)){
|
rlm@46
|
19932 item = new T.Button(item);
|
rlm@46
|
19933 }
|
rlm@46
|
19934 var td = document.createElement("td");
|
rlm@46
|
19935 this.tr.insertBefore(td, this.tr.childNodes[index]);
|
rlm@46
|
19936 this.initMenuTracking(item);
|
rlm@46
|
19937 item.render(td);
|
rlm@46
|
19938 this.items.insert(index, item);
|
rlm@46
|
19939 return item;
|
rlm@46
|
19940 },
|
rlm@46
|
19941
|
rlm@46
|
19942
|
rlm@46
|
19943 addDom : function(config, returnEl){
|
rlm@46
|
19944 var td = this.nextBlock();
|
rlm@46
|
19945 Ext.DomHelper.overwrite(td, config);
|
rlm@46
|
19946 var ti = new T.Item(td.firstChild);
|
rlm@46
|
19947 ti.render(td);
|
rlm@46
|
19948 this.items.add(ti);
|
rlm@46
|
19949 return ti;
|
rlm@46
|
19950 },
|
rlm@46
|
19951
|
rlm@46
|
19952
|
rlm@46
|
19953 addField : function(field){
|
rlm@46
|
19954 var td = this.nextBlock();
|
rlm@46
|
19955 field.render(td);
|
rlm@46
|
19956 var ti = new T.Item(td.firstChild);
|
rlm@46
|
19957 ti.render(td);
|
rlm@46
|
19958 this.items.add(ti);
|
rlm@46
|
19959 return ti;
|
rlm@46
|
19960 },
|
rlm@46
|
19961
|
rlm@46
|
19962
|
rlm@46
|
19963 nextBlock : function(){
|
rlm@46
|
19964 var td = document.createElement("td");
|
rlm@46
|
19965 this.tr.appendChild(td);
|
rlm@46
|
19966 return td;
|
rlm@46
|
19967 },
|
rlm@46
|
19968
|
rlm@46
|
19969
|
rlm@46
|
19970 onDestroy : function(){
|
rlm@46
|
19971 Ext.Toolbar.superclass.onDestroy.call(this);
|
rlm@46
|
19972 if(this.rendered){
|
rlm@46
|
19973 if(this.items){
|
rlm@46
|
19974 Ext.destroy.apply(Ext, this.items.items);
|
rlm@46
|
19975 }
|
rlm@46
|
19976 Ext.Element.uncache(this.tr);
|
rlm@46
|
19977 }
|
rlm@46
|
19978 },
|
rlm@46
|
19979
|
rlm@46
|
19980
|
rlm@46
|
19981 onDisable : function(){
|
rlm@46
|
19982 this.items.each(function(item){
|
rlm@46
|
19983 if(item.disable){
|
rlm@46
|
19984 item.disable();
|
rlm@46
|
19985 }
|
rlm@46
|
19986 });
|
rlm@46
|
19987 },
|
rlm@46
|
19988
|
rlm@46
|
19989
|
rlm@46
|
19990 onEnable : function(){
|
rlm@46
|
19991 this.items.each(function(item){
|
rlm@46
|
19992 if(item.enable){
|
rlm@46
|
19993 item.enable();
|
rlm@46
|
19994 }
|
rlm@46
|
19995 });
|
rlm@46
|
19996 },
|
rlm@46
|
19997
|
rlm@46
|
19998
|
rlm@46
|
19999 onButtonTriggerOver : function(btn){
|
rlm@46
|
20000 if(this.activeMenuBtn && this.activeMenuBtn != btn){
|
rlm@46
|
20001 this.activeMenuBtn.hideMenu();
|
rlm@46
|
20002 btn.showMenu();
|
rlm@46
|
20003 this.activeMenuBtn = btn;
|
rlm@46
|
20004 }
|
rlm@46
|
20005 },
|
rlm@46
|
20006
|
rlm@46
|
20007
|
rlm@46
|
20008 onButtonMenuShow : function(btn){
|
rlm@46
|
20009 this.activeMenuBtn = btn;
|
rlm@46
|
20010 },
|
rlm@46
|
20011
|
rlm@46
|
20012
|
rlm@46
|
20013 onButtonMenuHide : function(btn){
|
rlm@46
|
20014 delete this.activeMenuBtn;
|
rlm@46
|
20015 }
|
rlm@46
|
20016
|
rlm@46
|
20017
|
rlm@46
|
20018 });
|
rlm@46
|
20019 Ext.reg('toolbar', Ext.Toolbar);
|
rlm@46
|
20020
|
rlm@46
|
20021
|
rlm@46
|
20022 T.Item = function(el){
|
rlm@46
|
20023 this.el = Ext.getDom(el);
|
rlm@46
|
20024 this.id = Ext.id(this.el);
|
rlm@46
|
20025 this.hidden = false;
|
rlm@46
|
20026 };
|
rlm@46
|
20027
|
rlm@46
|
20028 T.Item.prototype = {
|
rlm@46
|
20029
|
rlm@46
|
20030
|
rlm@46
|
20031 getEl : function(){
|
rlm@46
|
20032 return this.el;
|
rlm@46
|
20033 },
|
rlm@46
|
20034
|
rlm@46
|
20035
|
rlm@46
|
20036 render : function(td){
|
rlm@46
|
20037 this.td = td;
|
rlm@46
|
20038 td.appendChild(this.el);
|
rlm@46
|
20039 },
|
rlm@46
|
20040
|
rlm@46
|
20041
|
rlm@46
|
20042 destroy : function(){
|
rlm@46
|
20043 if(this.td && this.td.parentNode){
|
rlm@46
|
20044 this.td.parentNode.removeChild(this.td);
|
rlm@46
|
20045 }
|
rlm@46
|
20046 },
|
rlm@46
|
20047
|
rlm@46
|
20048
|
rlm@46
|
20049 show: function(){
|
rlm@46
|
20050 this.hidden = false;
|
rlm@46
|
20051 this.td.style.display = "";
|
rlm@46
|
20052 },
|
rlm@46
|
20053
|
rlm@46
|
20054
|
rlm@46
|
20055 hide: function(){
|
rlm@46
|
20056 this.hidden = true;
|
rlm@46
|
20057 this.td.style.display = "none";
|
rlm@46
|
20058 },
|
rlm@46
|
20059
|
rlm@46
|
20060
|
rlm@46
|
20061 setVisible: function(visible){
|
rlm@46
|
20062 if(visible) {
|
rlm@46
|
20063 this.show();
|
rlm@46
|
20064 }else{
|
rlm@46
|
20065 this.hide();
|
rlm@46
|
20066 }
|
rlm@46
|
20067 },
|
rlm@46
|
20068
|
rlm@46
|
20069
|
rlm@46
|
20070 focus : function(){
|
rlm@46
|
20071 Ext.fly(this.el).focus();
|
rlm@46
|
20072 },
|
rlm@46
|
20073
|
rlm@46
|
20074
|
rlm@46
|
20075 disable : function(){
|
rlm@46
|
20076 Ext.fly(this.td).addClass("x-item-disabled");
|
rlm@46
|
20077 this.disabled = true;
|
rlm@46
|
20078 this.el.disabled = true;
|
rlm@46
|
20079 },
|
rlm@46
|
20080
|
rlm@46
|
20081
|
rlm@46
|
20082 enable : function(){
|
rlm@46
|
20083 Ext.fly(this.td).removeClass("x-item-disabled");
|
rlm@46
|
20084 this.disabled = false;
|
rlm@46
|
20085 this.el.disabled = false;
|
rlm@46
|
20086 }
|
rlm@46
|
20087 };
|
rlm@46
|
20088 Ext.reg('tbitem', T.Item);
|
rlm@46
|
20089
|
rlm@46
|
20090
|
rlm@46
|
20091
|
rlm@46
|
20092 T.Separator = function(){
|
rlm@46
|
20093 var s = document.createElement("span");
|
rlm@46
|
20094 s.className = "ytb-sep";
|
rlm@46
|
20095 T.Separator.superclass.constructor.call(this, s);
|
rlm@46
|
20096 };
|
rlm@46
|
20097 Ext.extend(T.Separator, T.Item, {
|
rlm@46
|
20098 enable:Ext.emptyFn,
|
rlm@46
|
20099 disable:Ext.emptyFn,
|
rlm@46
|
20100 focus:Ext.emptyFn
|
rlm@46
|
20101 });
|
rlm@46
|
20102 Ext.reg('tbseparator', T.Separator);
|
rlm@46
|
20103
|
rlm@46
|
20104
|
rlm@46
|
20105 T.Spacer = function(){
|
rlm@46
|
20106 var s = document.createElement("div");
|
rlm@46
|
20107 s.className = "ytb-spacer";
|
rlm@46
|
20108 T.Spacer.superclass.constructor.call(this, s);
|
rlm@46
|
20109 };
|
rlm@46
|
20110 Ext.extend(T.Spacer, T.Item, {
|
rlm@46
|
20111 enable:Ext.emptyFn,
|
rlm@46
|
20112 disable:Ext.emptyFn,
|
rlm@46
|
20113 focus:Ext.emptyFn
|
rlm@46
|
20114 });
|
rlm@46
|
20115
|
rlm@46
|
20116 Ext.reg('tbspacer', T.Spacer);
|
rlm@46
|
20117
|
rlm@46
|
20118
|
rlm@46
|
20119 T.Fill = Ext.extend(T.Spacer, {
|
rlm@46
|
20120
|
rlm@46
|
20121 render : function(td){
|
rlm@46
|
20122 td.style.width = '100%';
|
rlm@46
|
20123 T.Fill.superclass.render.call(this, td);
|
rlm@46
|
20124 }
|
rlm@46
|
20125 });
|
rlm@46
|
20126 Ext.reg('tbfill', T.Fill);
|
rlm@46
|
20127
|
rlm@46
|
20128
|
rlm@46
|
20129 T.TextItem = function(t){
|
rlm@46
|
20130 var s = document.createElement("span");
|
rlm@46
|
20131 s.className = "ytb-text";
|
rlm@46
|
20132 s.innerHTML = t.text ? t.text : t;
|
rlm@46
|
20133 T.TextItem.superclass.constructor.call(this, s);
|
rlm@46
|
20134 };
|
rlm@46
|
20135 Ext.extend(T.TextItem, T.Item, {
|
rlm@46
|
20136 enable:Ext.emptyFn,
|
rlm@46
|
20137 disable:Ext.emptyFn,
|
rlm@46
|
20138 focus:Ext.emptyFn
|
rlm@46
|
20139 });
|
rlm@46
|
20140 Ext.reg('tbtext', T.TextItem);
|
rlm@46
|
20141
|
rlm@46
|
20142
|
rlm@46
|
20143
|
rlm@46
|
20144 T.Button = Ext.extend(Ext.Button, {
|
rlm@46
|
20145 hideParent : true,
|
rlm@46
|
20146
|
rlm@46
|
20147 onDestroy : function(){
|
rlm@46
|
20148 T.Button.superclass.onDestroy.call(this);
|
rlm@46
|
20149 if(this.container){
|
rlm@46
|
20150 this.container.remove();
|
rlm@46
|
20151 }
|
rlm@46
|
20152 }
|
rlm@46
|
20153 });
|
rlm@46
|
20154 Ext.reg('tbbutton', T.Button);
|
rlm@46
|
20155
|
rlm@46
|
20156
|
rlm@46
|
20157 T.SplitButton = Ext.extend(Ext.SplitButton, {
|
rlm@46
|
20158 hideParent : true,
|
rlm@46
|
20159
|
rlm@46
|
20160 onDestroy : function(){
|
rlm@46
|
20161 T.SplitButton.superclass.onDestroy.call(this);
|
rlm@46
|
20162 if(this.container){
|
rlm@46
|
20163 this.container.remove();
|
rlm@46
|
20164 }
|
rlm@46
|
20165 }
|
rlm@46
|
20166 });
|
rlm@46
|
20167
|
rlm@46
|
20168 Ext.reg('tbsplit', T.SplitButton);
|
rlm@46
|
20169
|
rlm@46
|
20170 T.MenuButton = T.SplitButton;
|
rlm@46
|
20171
|
rlm@46
|
20172 })();
|
rlm@46
|
20173
|
rlm@46
|
20174
|
rlm@46
|
20175 Ext.PagingToolbar = Ext.extend(Ext.Toolbar, {
|
rlm@46
|
20176
|
rlm@46
|
20177
|
rlm@46
|
20178
|
rlm@46
|
20179 pageSize: 20,
|
rlm@46
|
20180
|
rlm@46
|
20181 displayMsg : 'Displaying {0} - {1} of {2}',
|
rlm@46
|
20182
|
rlm@46
|
20183 emptyMsg : 'No data to display',
|
rlm@46
|
20184
|
rlm@46
|
20185 beforePageText : "Page",
|
rlm@46
|
20186
|
rlm@46
|
20187 afterPageText : "of {0}",
|
rlm@46
|
20188
|
rlm@46
|
20189 firstText : "First Page",
|
rlm@46
|
20190
|
rlm@46
|
20191 prevText : "Previous Page",
|
rlm@46
|
20192
|
rlm@46
|
20193 nextText : "Next Page",
|
rlm@46
|
20194
|
rlm@46
|
20195 lastText : "Last Page",
|
rlm@46
|
20196
|
rlm@46
|
20197 refreshText : "Refresh",
|
rlm@46
|
20198
|
rlm@46
|
20199
|
rlm@46
|
20200 paramNames : {start: 'start', limit: 'limit'},
|
rlm@46
|
20201
|
rlm@46
|
20202 initComponent : function(){
|
rlm@46
|
20203 Ext.PagingToolbar.superclass.initComponent.call(this);
|
rlm@46
|
20204 this.cursor = 0;
|
rlm@46
|
20205 this.bind(this.store);
|
rlm@46
|
20206 },
|
rlm@46
|
20207
|
rlm@46
|
20208 onRender : function(ct, position){
|
rlm@46
|
20209 Ext.PagingToolbar.superclass.onRender.call(this, ct, position);
|
rlm@46
|
20210 this.first = this.addButton({
|
rlm@46
|
20211 tooltip: this.firstText,
|
rlm@46
|
20212 iconCls: "x-tbar-page-first",
|
rlm@46
|
20213 disabled: true,
|
rlm@46
|
20214 handler: this.onClick.createDelegate(this, ["first"])
|
rlm@46
|
20215 });
|
rlm@46
|
20216 this.prev = this.addButton({
|
rlm@46
|
20217 tooltip: this.prevText,
|
rlm@46
|
20218 iconCls: "x-tbar-page-prev",
|
rlm@46
|
20219 disabled: true,
|
rlm@46
|
20220 handler: this.onClick.createDelegate(this, ["prev"])
|
rlm@46
|
20221 });
|
rlm@46
|
20222 this.addSeparator();
|
rlm@46
|
20223 this.add(this.beforePageText);
|
rlm@46
|
20224 this.field = Ext.get(this.addDom({
|
rlm@46
|
20225 tag: "input",
|
rlm@46
|
20226 type: "text",
|
rlm@46
|
20227 size: "3",
|
rlm@46
|
20228 value: "1",
|
rlm@46
|
20229 cls: "x-tbar-page-number"
|
rlm@46
|
20230 }).el);
|
rlm@46
|
20231 this.field.on("keydown", this.onPagingKeydown, this);
|
rlm@46
|
20232 this.field.on("focus", function(){this.dom.select();});
|
rlm@46
|
20233 this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
|
rlm@46
|
20234 this.field.setHeight(18);
|
rlm@46
|
20235 this.addSeparator();
|
rlm@46
|
20236 this.next = this.addButton({
|
rlm@46
|
20237 tooltip: this.nextText,
|
rlm@46
|
20238 iconCls: "x-tbar-page-next",
|
rlm@46
|
20239 disabled: true,
|
rlm@46
|
20240 handler: this.onClick.createDelegate(this, ["next"])
|
rlm@46
|
20241 });
|
rlm@46
|
20242 this.last = this.addButton({
|
rlm@46
|
20243 tooltip: this.lastText,
|
rlm@46
|
20244 iconCls: "x-tbar-page-last",
|
rlm@46
|
20245 disabled: true,
|
rlm@46
|
20246 handler: this.onClick.createDelegate(this, ["last"])
|
rlm@46
|
20247 });
|
rlm@46
|
20248 this.addSeparator();
|
rlm@46
|
20249 this.loading = this.addButton({
|
rlm@46
|
20250 tooltip: this.refreshText,
|
rlm@46
|
20251 iconCls: "x-tbar-loading",
|
rlm@46
|
20252 handler: this.onClick.createDelegate(this, ["refresh"])
|
rlm@46
|
20253 });
|
rlm@46
|
20254
|
rlm@46
|
20255 if(this.displayInfo){
|
rlm@46
|
20256 this.displayEl = Ext.fly(this.el.dom).createChild({cls:'x-paging-info'});
|
rlm@46
|
20257 }
|
rlm@46
|
20258 if(this.dsLoaded){
|
rlm@46
|
20259 this.onLoad.apply(this, this.dsLoaded);
|
rlm@46
|
20260 }
|
rlm@46
|
20261 },
|
rlm@46
|
20262
|
rlm@46
|
20263 updateInfo : function(){
|
rlm@46
|
20264 if(this.displayEl){
|
rlm@46
|
20265 var count = this.store.getCount();
|
rlm@46
|
20266 var msg = count == 0 ?
|
rlm@46
|
20267 this.emptyMsg :
|
rlm@46
|
20268 String.format(
|
rlm@46
|
20269 this.displayMsg,
|
rlm@46
|
20270 this.cursor+1, this.cursor+count, this.store.getTotalCount()
|
rlm@46
|
20271 );
|
rlm@46
|
20272 this.displayEl.update(msg);
|
rlm@46
|
20273 }
|
rlm@46
|
20274 },
|
rlm@46
|
20275
|
rlm@46
|
20276 onLoad : function(store, r, o){
|
rlm@46
|
20277 if(!this.rendered){
|
rlm@46
|
20278 this.dsLoaded = [store, r, o];
|
rlm@46
|
20279 return;
|
rlm@46
|
20280 }
|
rlm@46
|
20281 this.cursor = o.params ? o.params[this.paramNames.start] : 0;
|
rlm@46
|
20282 var d = this.getPageData(), ap = d.activePage, ps = d.pages;
|
rlm@46
|
20283
|
rlm@46
|
20284 this.afterTextEl.el.innerHTML = String.format(this.afterPageText, d.pages);
|
rlm@46
|
20285 this.field.dom.value = ap;
|
rlm@46
|
20286 this.first.setDisabled(ap == 1);
|
rlm@46
|
20287 this.prev.setDisabled(ap == 1);
|
rlm@46
|
20288 this.next.setDisabled(ap == ps);
|
rlm@46
|
20289 this.last.setDisabled(ap == ps);
|
rlm@46
|
20290 this.loading.enable();
|
rlm@46
|
20291 this.updateInfo();
|
rlm@46
|
20292 },
|
rlm@46
|
20293
|
rlm@46
|
20294 getPageData : function(){
|
rlm@46
|
20295 var total = this.store.getTotalCount();
|
rlm@46
|
20296 return {
|
rlm@46
|
20297 total : total,
|
rlm@46
|
20298 activePage : Math.ceil((this.cursor+this.pageSize)/this.pageSize),
|
rlm@46
|
20299 pages : total < this.pageSize ? 1 : Math.ceil(total/this.pageSize)
|
rlm@46
|
20300 };
|
rlm@46
|
20301 },
|
rlm@46
|
20302
|
rlm@46
|
20303 onLoadError : function(){
|
rlm@46
|
20304 if(!this.rendered){
|
rlm@46
|
20305 return;
|
rlm@46
|
20306 }
|
rlm@46
|
20307 this.loading.enable();
|
rlm@46
|
20308 },
|
rlm@46
|
20309
|
rlm@46
|
20310 readPage : function(d){
|
rlm@46
|
20311 var v = this.field.dom.value, pageNum;
|
rlm@46
|
20312 if (!v || isNaN(pageNum = parseInt(v, 10))) {
|
rlm@46
|
20313 this.field.dom.value = d.activePage;
|
rlm@46
|
20314 return false;
|
rlm@46
|
20315 }
|
rlm@46
|
20316 return pageNum;
|
rlm@46
|
20317 },
|
rlm@46
|
20318
|
rlm@46
|
20319 onPagingKeydown : function(e){
|
rlm@46
|
20320 var k = e.getKey(), d = this.getPageData(), pageNum;
|
rlm@46
|
20321 if (k == e.RETURN) {
|
rlm@46
|
20322 e.stopEvent();
|
rlm@46
|
20323 if(pageNum = this.readPage(d)){
|
rlm@46
|
20324 pageNum = Math.min(Math.max(1, pageNum), d.pages) - 1;
|
rlm@46
|
20325 this.doLoad(pageNum * this.pageSize);
|
rlm@46
|
20326 }
|
rlm@46
|
20327 }else if (k == e.HOME || k == e.END){
|
rlm@46
|
20328 e.stopEvent();
|
rlm@46
|
20329 pageNum = k == e.HOME ? 1 : d.pages;
|
rlm@46
|
20330 this.field.dom.value = pageNum;
|
rlm@46
|
20331 }else if (k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN){
|
rlm@46
|
20332 e.stopEvent();
|
rlm@46
|
20333 if(pageNum = this.readPage(d)){
|
rlm@46
|
20334 var increment = e.shiftKey ? 10 : 1;
|
rlm@46
|
20335 if(k == e.DOWN || k == e.PAGEDOWN){
|
rlm@46
|
20336 increment *= -1;
|
rlm@46
|
20337 }
|
rlm@46
|
20338 pageNum += increment;
|
rlm@46
|
20339 if(pageNum >= 1 & pageNum <= d.pages){
|
rlm@46
|
20340 this.field.dom.value = pageNum;
|
rlm@46
|
20341 }
|
rlm@46
|
20342 }
|
rlm@46
|
20343 }
|
rlm@46
|
20344 },
|
rlm@46
|
20345
|
rlm@46
|
20346 beforeLoad : function(){
|
rlm@46
|
20347 if(this.rendered && this.loading){
|
rlm@46
|
20348 this.loading.disable();
|
rlm@46
|
20349 }
|
rlm@46
|
20350 },
|
rlm@46
|
20351
|
rlm@46
|
20352 doLoad : function(start){
|
rlm@46
|
20353 var o = {}, pn = this.paramNames;
|
rlm@46
|
20354 o[pn.start] = start;
|
rlm@46
|
20355 o[pn.limit] = this.pageSize;
|
rlm@46
|
20356 this.store.load({params:o});
|
rlm@46
|
20357 },
|
rlm@46
|
20358
|
rlm@46
|
20359 onClick : function(which){
|
rlm@46
|
20360 var store = this.store;
|
rlm@46
|
20361 switch(which){
|
rlm@46
|
20362 case "first":
|
rlm@46
|
20363 this.doLoad(0);
|
rlm@46
|
20364 break;
|
rlm@46
|
20365 case "prev":
|
rlm@46
|
20366 this.doLoad(Math.max(0, this.cursor-this.pageSize));
|
rlm@46
|
20367 break;
|
rlm@46
|
20368 case "next":
|
rlm@46
|
20369 this.doLoad(this.cursor+this.pageSize);
|
rlm@46
|
20370 break;
|
rlm@46
|
20371 case "last":
|
rlm@46
|
20372 var total = store.getTotalCount();
|
rlm@46
|
20373 var extra = total % this.pageSize;
|
rlm@46
|
20374 var lastStart = extra ? (total - extra) : total-this.pageSize;
|
rlm@46
|
20375 this.doLoad(lastStart);
|
rlm@46
|
20376 break;
|
rlm@46
|
20377 case "refresh":
|
rlm@46
|
20378 this.doLoad(this.cursor);
|
rlm@46
|
20379 break;
|
rlm@46
|
20380 }
|
rlm@46
|
20381 },
|
rlm@46
|
20382
|
rlm@46
|
20383
|
rlm@46
|
20384 unbind : function(store){
|
rlm@46
|
20385 store = Ext.StoreMgr.lookup(store);
|
rlm@46
|
20386 store.un("beforeload", this.beforeLoad, this);
|
rlm@46
|
20387 store.un("load", this.onLoad, this);
|
rlm@46
|
20388 store.un("loadexception", this.onLoadError, this);
|
rlm@46
|
20389 this.store = undefined;
|
rlm@46
|
20390 },
|
rlm@46
|
20391
|
rlm@46
|
20392
|
rlm@46
|
20393 bind : function(store){
|
rlm@46
|
20394 store = Ext.StoreMgr.lookup(store);
|
rlm@46
|
20395 store.on("beforeload", this.beforeLoad, this);
|
rlm@46
|
20396 store.on("load", this.onLoad, this);
|
rlm@46
|
20397 store.on("loadexception", this.onLoadError, this);
|
rlm@46
|
20398 this.store = store;
|
rlm@46
|
20399 }
|
rlm@46
|
20400 });
|
rlm@46
|
20401 Ext.reg('paging', Ext.PagingToolbar);
|
rlm@46
|
20402
|
rlm@46
|
20403 Ext.Resizable = function(el, config){
|
rlm@46
|
20404 this.el = Ext.get(el);
|
rlm@46
|
20405
|
rlm@46
|
20406 if(config && config.wrap){
|
rlm@46
|
20407 config.resizeChild = this.el;
|
rlm@46
|
20408 this.el = this.el.wrap(typeof config.wrap == "object" ? config.wrap : {cls:"xresizable-wrap"});
|
rlm@46
|
20409 this.el.id = this.el.dom.id = config.resizeChild.id + "-rzwrap";
|
rlm@46
|
20410 this.el.setStyle("overflow", "hidden");
|
rlm@46
|
20411 this.el.setPositioning(config.resizeChild.getPositioning());
|
rlm@46
|
20412 config.resizeChild.clearPositioning();
|
rlm@46
|
20413 if(!config.width || !config.height){
|
rlm@46
|
20414 var csize = config.resizeChild.getSize();
|
rlm@46
|
20415 this.el.setSize(csize.width, csize.height);
|
rlm@46
|
20416 }
|
rlm@46
|
20417 if(config.pinned && !config.adjustments){
|
rlm@46
|
20418 config.adjustments = "auto";
|
rlm@46
|
20419 }
|
rlm@46
|
20420 }
|
rlm@46
|
20421
|
rlm@46
|
20422
|
rlm@46
|
20423 this.proxy = this.el.createProxy({tag: "div", cls: "x-resizable-proxy", id: this.el.id + "-rzproxy"});
|
rlm@46
|
20424 this.proxy.unselectable();
|
rlm@46
|
20425 this.proxy.enableDisplayMode('block');
|
rlm@46
|
20426
|
rlm@46
|
20427 Ext.apply(this, config);
|
rlm@46
|
20428
|
rlm@46
|
20429 if(this.pinned){
|
rlm@46
|
20430 this.disableTrackOver = true;
|
rlm@46
|
20431 this.el.addClass("x-resizable-pinned");
|
rlm@46
|
20432 }
|
rlm@46
|
20433
|
rlm@46
|
20434 var position = this.el.getStyle("position");
|
rlm@46
|
20435 if(position != "absolute" && position != "fixed"){
|
rlm@46
|
20436 this.el.setStyle("position", "relative");
|
rlm@46
|
20437 }
|
rlm@46
|
20438 if(!this.handles){
|
rlm@46
|
20439 this.handles = 's,e,se';
|
rlm@46
|
20440 if(this.multiDirectional){
|
rlm@46
|
20441 this.handles += ',n,w';
|
rlm@46
|
20442 }
|
rlm@46
|
20443 }
|
rlm@46
|
20444 if(this.handles == "all"){
|
rlm@46
|
20445 this.handles = "n s e w ne nw se sw";
|
rlm@46
|
20446 }
|
rlm@46
|
20447 var hs = this.handles.split(/\s*?[,;]\s*?| /);
|
rlm@46
|
20448 var ps = Ext.Resizable.positions;
|
rlm@46
|
20449 for(var i = 0, len = hs.length; i < len; i++){
|
rlm@46
|
20450 if(hs[i] && ps[hs[i]]){
|
rlm@46
|
20451 var pos = ps[hs[i]];
|
rlm@46
|
20452 this[pos] = new Ext.Resizable.Handle(this, pos, this.disableTrackOver, this.transparent);
|
rlm@46
|
20453 }
|
rlm@46
|
20454 }
|
rlm@46
|
20455
|
rlm@46
|
20456 this.corner = this.southeast;
|
rlm@46
|
20457
|
rlm@46
|
20458 if(this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1){
|
rlm@46
|
20459 this.updateBox = true;
|
rlm@46
|
20460 }
|
rlm@46
|
20461
|
rlm@46
|
20462 this.activeHandle = null;
|
rlm@46
|
20463
|
rlm@46
|
20464 if(this.resizeChild){
|
rlm@46
|
20465 if(typeof this.resizeChild == "boolean"){
|
rlm@46
|
20466 this.resizeChild = Ext.get(this.el.dom.firstChild, true);
|
rlm@46
|
20467 }else{
|
rlm@46
|
20468 this.resizeChild = Ext.get(this.resizeChild, true);
|
rlm@46
|
20469 }
|
rlm@46
|
20470 }
|
rlm@46
|
20471
|
rlm@46
|
20472 if(this.adjustments == "auto"){
|
rlm@46
|
20473 var rc = this.resizeChild;
|
rlm@46
|
20474 var hw = this.west, he = this.east, hn = this.north, hs = this.south;
|
rlm@46
|
20475 if(rc && (hw || hn)){
|
rlm@46
|
20476 rc.position("relative");
|
rlm@46
|
20477 rc.setLeft(hw ? hw.el.getWidth() : 0);
|
rlm@46
|
20478 rc.setTop(hn ? hn.el.getHeight() : 0);
|
rlm@46
|
20479 }
|
rlm@46
|
20480 this.adjustments = [
|
rlm@46
|
20481 (he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0),
|
rlm@46
|
20482 (hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1
|
rlm@46
|
20483 ];
|
rlm@46
|
20484 }
|
rlm@46
|
20485
|
rlm@46
|
20486 if(this.draggable){
|
rlm@46
|
20487 this.dd = this.dynamic ?
|
rlm@46
|
20488 this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});
|
rlm@46
|
20489 this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id);
|
rlm@46
|
20490 }
|
rlm@46
|
20491
|
rlm@46
|
20492
|
rlm@46
|
20493 this.addEvents(
|
rlm@46
|
20494 "beforeresize",
|
rlm@46
|
20495 "resize"
|
rlm@46
|
20496 );
|
rlm@46
|
20497
|
rlm@46
|
20498 if(this.width !== null && this.height !== null){
|
rlm@46
|
20499 this.resizeTo(this.width, this.height);
|
rlm@46
|
20500 }else{
|
rlm@46
|
20501 this.updateChildSize();
|
rlm@46
|
20502 }
|
rlm@46
|
20503 if(Ext.isIE){
|
rlm@46
|
20504 this.el.dom.style.zoom = 1;
|
rlm@46
|
20505 }
|
rlm@46
|
20506 Ext.Resizable.superclass.constructor.call(this);
|
rlm@46
|
20507 };
|
rlm@46
|
20508
|
rlm@46
|
20509 Ext.extend(Ext.Resizable, Ext.util.Observable, {
|
rlm@46
|
20510 resizeChild : false,
|
rlm@46
|
20511 adjustments : [0, 0],
|
rlm@46
|
20512 minWidth : 5,
|
rlm@46
|
20513 minHeight : 5,
|
rlm@46
|
20514 maxWidth : 10000,
|
rlm@46
|
20515 maxHeight : 10000,
|
rlm@46
|
20516 enabled : true,
|
rlm@46
|
20517 animate : false,
|
rlm@46
|
20518 duration : .35,
|
rlm@46
|
20519 dynamic : false,
|
rlm@46
|
20520 handles : false,
|
rlm@46
|
20521 multiDirectional : false,
|
rlm@46
|
20522 disableTrackOver : false,
|
rlm@46
|
20523 easing : 'easeOutStrong',
|
rlm@46
|
20524 widthIncrement : 0,
|
rlm@46
|
20525 heightIncrement : 0,
|
rlm@46
|
20526 pinned : false,
|
rlm@46
|
20527 width : null,
|
rlm@46
|
20528 height : null,
|
rlm@46
|
20529 preserveRatio : false,
|
rlm@46
|
20530 transparent: false,
|
rlm@46
|
20531 minX: 0,
|
rlm@46
|
20532 minY: 0,
|
rlm@46
|
20533 draggable: false,
|
rlm@46
|
20534
|
rlm@46
|
20535
|
rlm@46
|
20536
|
rlm@46
|
20537
|
rlm@46
|
20538
|
rlm@46
|
20539
|
rlm@46
|
20540
|
rlm@46
|
20541
|
rlm@46
|
20542 resizeTo : function(width, height){
|
rlm@46
|
20543 this.el.setSize(width, height);
|
rlm@46
|
20544 this.updateChildSize();
|
rlm@46
|
20545 this.fireEvent("resize", this, width, height, null);
|
rlm@46
|
20546 },
|
rlm@46
|
20547
|
rlm@46
|
20548
|
rlm@46
|
20549 startSizing : function(e, handle){
|
rlm@46
|
20550 this.fireEvent("beforeresize", this, e);
|
rlm@46
|
20551 if(this.enabled){
|
rlm@46
|
20552
|
rlm@46
|
20553 if(!this.overlay){
|
rlm@46
|
20554 this.overlay = this.el.createProxy({tag: "div", cls: "x-resizable-overlay", html: " "}, Ext.getBody());
|
rlm@46
|
20555 this.overlay.unselectable();
|
rlm@46
|
20556 this.overlay.enableDisplayMode("block");
|
rlm@46
|
20557 this.overlay.on("mousemove", this.onMouseMove, this);
|
rlm@46
|
20558 this.overlay.on("mouseup", this.onMouseUp, this);
|
rlm@46
|
20559 }
|
rlm@46
|
20560 this.overlay.setStyle("cursor", handle.el.getStyle("cursor"));
|
rlm@46
|
20561
|
rlm@46
|
20562 this.resizing = true;
|
rlm@46
|
20563 this.startBox = this.el.getBox();
|
rlm@46
|
20564 this.startPoint = e.getXY();
|
rlm@46
|
20565 this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],
|
rlm@46
|
20566 (this.startBox.y + this.startBox.height) - this.startPoint[1]];
|
rlm@46
|
20567
|
rlm@46
|
20568 this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
|
rlm@46
|
20569 this.overlay.show();
|
rlm@46
|
20570
|
rlm@46
|
20571 if(this.constrainTo) {
|
rlm@46
|
20572 var ct = Ext.get(this.constrainTo);
|
rlm@46
|
20573 this.resizeRegion = ct.getRegion().adjust(
|
rlm@46
|
20574 ct.getFrameWidth('t'),
|
rlm@46
|
20575 ct.getFrameWidth('l'),
|
rlm@46
|
20576 -ct.getFrameWidth('b'),
|
rlm@46
|
20577 -ct.getFrameWidth('r')
|
rlm@46
|
20578 );
|
rlm@46
|
20579 }
|
rlm@46
|
20580
|
rlm@46
|
20581 this.proxy.setStyle('visibility', 'hidden');
|
rlm@46
|
20582 this.proxy.show();
|
rlm@46
|
20583 this.proxy.setBox(this.startBox);
|
rlm@46
|
20584 if(!this.dynamic){
|
rlm@46
|
20585 this.proxy.setStyle('visibility', 'visible');
|
rlm@46
|
20586 }
|
rlm@46
|
20587 }
|
rlm@46
|
20588 },
|
rlm@46
|
20589
|
rlm@46
|
20590
|
rlm@46
|
20591 onMouseDown : function(handle, e){
|
rlm@46
|
20592 if(this.enabled){
|
rlm@46
|
20593 e.stopEvent();
|
rlm@46
|
20594 this.activeHandle = handle;
|
rlm@46
|
20595 this.startSizing(e, handle);
|
rlm@46
|
20596 }
|
rlm@46
|
20597 },
|
rlm@46
|
20598
|
rlm@46
|
20599
|
rlm@46
|
20600 onMouseUp : function(e){
|
rlm@46
|
20601 var size = this.resizeElement();
|
rlm@46
|
20602 this.resizing = false;
|
rlm@46
|
20603 this.handleOut();
|
rlm@46
|
20604 this.overlay.hide();
|
rlm@46
|
20605 this.proxy.hide();
|
rlm@46
|
20606 this.fireEvent("resize", this, size.width, size.height, e);
|
rlm@46
|
20607 },
|
rlm@46
|
20608
|
rlm@46
|
20609
|
rlm@46
|
20610 updateChildSize : function(){
|
rlm@46
|
20611 if(this.resizeChild){
|
rlm@46
|
20612 var el = this.el;
|
rlm@46
|
20613 var child = this.resizeChild;
|
rlm@46
|
20614 var adj = this.adjustments;
|
rlm@46
|
20615 if(el.dom.offsetWidth){
|
rlm@46
|
20616 var b = el.getSize(true);
|
rlm@46
|
20617 child.setSize(b.width+adj[0], b.height+adj[1]);
|
rlm@46
|
20618 }
|
rlm@46
|
20619
|
rlm@46
|
20620
|
rlm@46
|
20621
|
rlm@46
|
20622
|
rlm@46
|
20623 if(Ext.isIE){
|
rlm@46
|
20624 setTimeout(function(){
|
rlm@46
|
20625 if(el.dom.offsetWidth){
|
rlm@46
|
20626 var b = el.getSize(true);
|
rlm@46
|
20627 child.setSize(b.width+adj[0], b.height+adj[1]);
|
rlm@46
|
20628 }
|
rlm@46
|
20629 }, 10);
|
rlm@46
|
20630 }
|
rlm@46
|
20631 }
|
rlm@46
|
20632 },
|
rlm@46
|
20633
|
rlm@46
|
20634
|
rlm@46
|
20635 snap : function(value, inc, min){
|
rlm@46
|
20636 if(!inc || !value) return value;
|
rlm@46
|
20637 var newValue = value;
|
rlm@46
|
20638 var m = value % inc;
|
rlm@46
|
20639 if(m > 0){
|
rlm@46
|
20640 if(m > (inc/2)){
|
rlm@46
|
20641 newValue = value + (inc-m);
|
rlm@46
|
20642 }else{
|
rlm@46
|
20643 newValue = value - m;
|
rlm@46
|
20644 }
|
rlm@46
|
20645 }
|
rlm@46
|
20646 return Math.max(min, newValue);
|
rlm@46
|
20647 },
|
rlm@46
|
20648
|
rlm@46
|
20649
|
rlm@46
|
20650 resizeElement : function(){
|
rlm@46
|
20651 var box = this.proxy.getBox();
|
rlm@46
|
20652 if(this.updateBox){
|
rlm@46
|
20653 this.el.setBox(box, false, this.animate, this.duration, null, this.easing);
|
rlm@46
|
20654 }else{
|
rlm@46
|
20655 this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing);
|
rlm@46
|
20656 }
|
rlm@46
|
20657 this.updateChildSize();
|
rlm@46
|
20658 if(!this.dynamic){
|
rlm@46
|
20659 this.proxy.hide();
|
rlm@46
|
20660 }
|
rlm@46
|
20661 return box;
|
rlm@46
|
20662 },
|
rlm@46
|
20663
|
rlm@46
|
20664
|
rlm@46
|
20665 constrain : function(v, diff, m, mx){
|
rlm@46
|
20666 if(v - diff < m){
|
rlm@46
|
20667 diff = v - m;
|
rlm@46
|
20668 }else if(v - diff > mx){
|
rlm@46
|
20669 diff = mx - v;
|
rlm@46
|
20670 }
|
rlm@46
|
20671 return diff;
|
rlm@46
|
20672 },
|
rlm@46
|
20673
|
rlm@46
|
20674
|
rlm@46
|
20675 onMouseMove : function(e){
|
rlm@46
|
20676 if(this.enabled){
|
rlm@46
|
20677 try{
|
rlm@46
|
20678
|
rlm@46
|
20679 if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {
|
rlm@46
|
20680 return;
|
rlm@46
|
20681 }
|
rlm@46
|
20682
|
rlm@46
|
20683
|
rlm@46
|
20684 var curSize = this.curSize || this.startBox;
|
rlm@46
|
20685 var x = this.startBox.x, y = this.startBox.y;
|
rlm@46
|
20686 var ox = x, oy = y;
|
rlm@46
|
20687 var w = curSize.width, h = curSize.height;
|
rlm@46
|
20688 var ow = w, oh = h;
|
rlm@46
|
20689 var mw = this.minWidth, mh = this.minHeight;
|
rlm@46
|
20690 var mxw = this.maxWidth, mxh = this.maxHeight;
|
rlm@46
|
20691 var wi = this.widthIncrement;
|
rlm@46
|
20692 var hi = this.heightIncrement;
|
rlm@46
|
20693
|
rlm@46
|
20694 var eventXY = e.getXY();
|
rlm@46
|
20695 var diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0]));
|
rlm@46
|
20696 var diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1]));
|
rlm@46
|
20697
|
rlm@46
|
20698 var pos = this.activeHandle.position;
|
rlm@46
|
20699
|
rlm@46
|
20700 switch(pos){
|
rlm@46
|
20701 case "east":
|
rlm@46
|
20702 w += diffX;
|
rlm@46
|
20703 w = Math.min(Math.max(mw, w), mxw);
|
rlm@46
|
20704 break;
|
rlm@46
|
20705 case "south":
|
rlm@46
|
20706 h += diffY;
|
rlm@46
|
20707 h = Math.min(Math.max(mh, h), mxh);
|
rlm@46
|
20708 break;
|
rlm@46
|
20709 case "southeast":
|
rlm@46
|
20710 w += diffX;
|
rlm@46
|
20711 h += diffY;
|
rlm@46
|
20712 w = Math.min(Math.max(mw, w), mxw);
|
rlm@46
|
20713 h = Math.min(Math.max(mh, h), mxh);
|
rlm@46
|
20714 break;
|
rlm@46
|
20715 case "north":
|
rlm@46
|
20716 diffY = this.constrain(h, diffY, mh, mxh);
|
rlm@46
|
20717 y += diffY;
|
rlm@46
|
20718 h -= diffY;
|
rlm@46
|
20719 break;
|
rlm@46
|
20720 case "west":
|
rlm@46
|
20721 diffX = this.constrain(w, diffX, mw, mxw);
|
rlm@46
|
20722 x += diffX;
|
rlm@46
|
20723 w -= diffX;
|
rlm@46
|
20724 break;
|
rlm@46
|
20725 case "northeast":
|
rlm@46
|
20726 w += diffX;
|
rlm@46
|
20727 w = Math.min(Math.max(mw, w), mxw);
|
rlm@46
|
20728 diffY = this.constrain(h, diffY, mh, mxh);
|
rlm@46
|
20729 y += diffY;
|
rlm@46
|
20730 h -= diffY;
|
rlm@46
|
20731 break;
|
rlm@46
|
20732 case "northwest":
|
rlm@46
|
20733 diffX = this.constrain(w, diffX, mw, mxw);
|
rlm@46
|
20734 diffY = this.constrain(h, diffY, mh, mxh);
|
rlm@46
|
20735 y += diffY;
|
rlm@46
|
20736 h -= diffY;
|
rlm@46
|
20737 x += diffX;
|
rlm@46
|
20738 w -= diffX;
|
rlm@46
|
20739 break;
|
rlm@46
|
20740 case "southwest":
|
rlm@46
|
20741 diffX = this.constrain(w, diffX, mw, mxw);
|
rlm@46
|
20742 h += diffY;
|
rlm@46
|
20743 h = Math.min(Math.max(mh, h), mxh);
|
rlm@46
|
20744 x += diffX;
|
rlm@46
|
20745 w -= diffX;
|
rlm@46
|
20746 break;
|
rlm@46
|
20747 }
|
rlm@46
|
20748
|
rlm@46
|
20749 var sw = this.snap(w, wi, mw);
|
rlm@46
|
20750 var sh = this.snap(h, hi, mh);
|
rlm@46
|
20751 if(sw != w || sh != h){
|
rlm@46
|
20752 switch(pos){
|
rlm@46
|
20753 case "northeast":
|
rlm@46
|
20754 y -= sh - h;
|
rlm@46
|
20755 break;
|
rlm@46
|
20756 case "north":
|
rlm@46
|
20757 y -= sh - h;
|
rlm@46
|
20758 break;
|
rlm@46
|
20759 case "southwest":
|
rlm@46
|
20760 x -= sw - w;
|
rlm@46
|
20761 break;
|
rlm@46
|
20762 case "west":
|
rlm@46
|
20763 x -= sw - w;
|
rlm@46
|
20764 break;
|
rlm@46
|
20765 case "northwest":
|
rlm@46
|
20766 x -= sw - w;
|
rlm@46
|
20767 y -= sh - h;
|
rlm@46
|
20768 break;
|
rlm@46
|
20769 }
|
rlm@46
|
20770 w = sw;
|
rlm@46
|
20771 h = sh;
|
rlm@46
|
20772 }
|
rlm@46
|
20773
|
rlm@46
|
20774 if(this.preserveRatio){
|
rlm@46
|
20775 switch(pos){
|
rlm@46
|
20776 case "southeast":
|
rlm@46
|
20777 case "east":
|
rlm@46
|
20778 h = oh * (w/ow);
|
rlm@46
|
20779 h = Math.min(Math.max(mh, h), mxh);
|
rlm@46
|
20780 w = ow * (h/oh);
|
rlm@46
|
20781 break;
|
rlm@46
|
20782 case "south":
|
rlm@46
|
20783 w = ow * (h/oh);
|
rlm@46
|
20784 w = Math.min(Math.max(mw, w), mxw);
|
rlm@46
|
20785 h = oh * (w/ow);
|
rlm@46
|
20786 break;
|
rlm@46
|
20787 case "northeast":
|
rlm@46
|
20788 w = ow * (h/oh);
|
rlm@46
|
20789 w = Math.min(Math.max(mw, w), mxw);
|
rlm@46
|
20790 h = oh * (w/ow);
|
rlm@46
|
20791 break;
|
rlm@46
|
20792 case "north":
|
rlm@46
|
20793 var tw = w;
|
rlm@46
|
20794 w = ow * (h/oh);
|
rlm@46
|
20795 w = Math.min(Math.max(mw, w), mxw);
|
rlm@46
|
20796 h = oh * (w/ow);
|
rlm@46
|
20797 x += (tw - w) / 2;
|
rlm@46
|
20798 break;
|
rlm@46
|
20799 case "southwest":
|
rlm@46
|
20800 h = oh * (w/ow);
|
rlm@46
|
20801 h = Math.min(Math.max(mh, h), mxh);
|
rlm@46
|
20802 var tw = w;
|
rlm@46
|
20803 w = ow * (h/oh);
|
rlm@46
|
20804 x += tw - w;
|
rlm@46
|
20805 break;
|
rlm@46
|
20806 case "west":
|
rlm@46
|
20807 var th = h;
|
rlm@46
|
20808 h = oh * (w/ow);
|
rlm@46
|
20809 h = Math.min(Math.max(mh, h), mxh);
|
rlm@46
|
20810 y += (th - h) / 2;
|
rlm@46
|
20811 var tw = w;
|
rlm@46
|
20812 w = ow * (h/oh);
|
rlm@46
|
20813 x += tw - w;
|
rlm@46
|
20814 break;
|
rlm@46
|
20815 case "northwest":
|
rlm@46
|
20816 var tw = w;
|
rlm@46
|
20817 var th = h;
|
rlm@46
|
20818 h = oh * (w/ow);
|
rlm@46
|
20819 h = Math.min(Math.max(mh, h), mxh);
|
rlm@46
|
20820 w = ow * (h/oh);
|
rlm@46
|
20821 y += th - h;
|
rlm@46
|
20822 x += tw - w;
|
rlm@46
|
20823 break;
|
rlm@46
|
20824
|
rlm@46
|
20825 }
|
rlm@46
|
20826 }
|
rlm@46
|
20827 this.proxy.setBounds(x, y, w, h);
|
rlm@46
|
20828 if(this.dynamic){
|
rlm@46
|
20829 this.resizeElement();
|
rlm@46
|
20830 }
|
rlm@46
|
20831 }catch(e){}
|
rlm@46
|
20832 }
|
rlm@46
|
20833 },
|
rlm@46
|
20834
|
rlm@46
|
20835
|
rlm@46
|
20836 handleOver : function(){
|
rlm@46
|
20837 if(this.enabled){
|
rlm@46
|
20838 this.el.addClass("x-resizable-over");
|
rlm@46
|
20839 }
|
rlm@46
|
20840 },
|
rlm@46
|
20841
|
rlm@46
|
20842
|
rlm@46
|
20843 handleOut : function(){
|
rlm@46
|
20844 if(!this.resizing){
|
rlm@46
|
20845 this.el.removeClass("x-resizable-over");
|
rlm@46
|
20846 }
|
rlm@46
|
20847 },
|
rlm@46
|
20848
|
rlm@46
|
20849
|
rlm@46
|
20850 getEl : function(){
|
rlm@46
|
20851 return this.el;
|
rlm@46
|
20852 },
|
rlm@46
|
20853
|
rlm@46
|
20854
|
rlm@46
|
20855 getResizeChild : function(){
|
rlm@46
|
20856 return this.resizeChild;
|
rlm@46
|
20857 },
|
rlm@46
|
20858
|
rlm@46
|
20859
|
rlm@46
|
20860 destroy : function(removeEl){
|
rlm@46
|
20861 this.proxy.remove();
|
rlm@46
|
20862 if(this.overlay){
|
rlm@46
|
20863 this.overlay.removeAllListeners();
|
rlm@46
|
20864 this.overlay.remove();
|
rlm@46
|
20865 }
|
rlm@46
|
20866 var ps = Ext.Resizable.positions;
|
rlm@46
|
20867 for(var k in ps){
|
rlm@46
|
20868 if(typeof ps[k] != "function" && this[ps[k]]){
|
rlm@46
|
20869 var h = this[ps[k]];
|
rlm@46
|
20870 h.el.removeAllListeners();
|
rlm@46
|
20871 h.el.remove();
|
rlm@46
|
20872 }
|
rlm@46
|
20873 }
|
rlm@46
|
20874 if(removeEl){
|
rlm@46
|
20875 this.el.update("");
|
rlm@46
|
20876 this.el.remove();
|
rlm@46
|
20877 }
|
rlm@46
|
20878 },
|
rlm@46
|
20879
|
rlm@46
|
20880 syncHandleHeight : function(){
|
rlm@46
|
20881 var h = this.el.getHeight(true);
|
rlm@46
|
20882 if(this.west){
|
rlm@46
|
20883 this.west.el.setHeight(h);
|
rlm@46
|
20884 }
|
rlm@46
|
20885 if(this.east){
|
rlm@46
|
20886 this.east.el.setHeight(h);
|
rlm@46
|
20887 }
|
rlm@46
|
20888 }
|
rlm@46
|
20889 });
|
rlm@46
|
20890
|
rlm@46
|
20891
|
rlm@46
|
20892
|
rlm@46
|
20893 Ext.Resizable.positions = {
|
rlm@46
|
20894 n: "north", s: "south", e: "east", w: "west", se: "southeast", sw: "southwest", nw: "northwest", ne: "northeast"
|
rlm@46
|
20895 };
|
rlm@46
|
20896
|
rlm@46
|
20897
|
rlm@46
|
20898 Ext.Resizable.Handle = function(rz, pos, disableTrackOver, transparent){
|
rlm@46
|
20899 if(!this.tpl){
|
rlm@46
|
20900
|
rlm@46
|
20901 var tpl = Ext.DomHelper.createTemplate(
|
rlm@46
|
20902 {tag: "div", cls: "x-resizable-handle x-resizable-handle-{0}"}
|
rlm@46
|
20903 );
|
rlm@46
|
20904 tpl.compile();
|
rlm@46
|
20905 Ext.Resizable.Handle.prototype.tpl = tpl;
|
rlm@46
|
20906 }
|
rlm@46
|
20907 this.position = pos;
|
rlm@46
|
20908 this.rz = rz;
|
rlm@46
|
20909 this.el = this.tpl.append(rz.el.dom, [this.position], true);
|
rlm@46
|
20910 this.el.unselectable();
|
rlm@46
|
20911 if(transparent){
|
rlm@46
|
20912 this.el.setOpacity(0);
|
rlm@46
|
20913 }
|
rlm@46
|
20914 this.el.on("mousedown", this.onMouseDown, this);
|
rlm@46
|
20915 if(!disableTrackOver){
|
rlm@46
|
20916 this.el.on("mouseover", this.onMouseOver, this);
|
rlm@46
|
20917 this.el.on("mouseout", this.onMouseOut, this);
|
rlm@46
|
20918 }
|
rlm@46
|
20919 };
|
rlm@46
|
20920
|
rlm@46
|
20921
|
rlm@46
|
20922 Ext.Resizable.Handle.prototype = {
|
rlm@46
|
20923 afterResize : function(rz){
|
rlm@46
|
20924
|
rlm@46
|
20925 },
|
rlm@46
|
20926
|
rlm@46
|
20927 onMouseDown : function(e){
|
rlm@46
|
20928 this.rz.onMouseDown(this, e);
|
rlm@46
|
20929 },
|
rlm@46
|
20930
|
rlm@46
|
20931 onMouseOver : function(e){
|
rlm@46
|
20932 this.rz.handleOver(this, e);
|
rlm@46
|
20933 },
|
rlm@46
|
20934
|
rlm@46
|
20935 onMouseOut : function(e){
|
rlm@46
|
20936 this.rz.handleOut(this, e);
|
rlm@46
|
20937 }
|
rlm@46
|
20938 };
|
rlm@46
|
20939
|
rlm@46
|
20940
|
rlm@46
|
20941
|
rlm@46
|
20942
|
rlm@46
|
20943
|
rlm@46
|
20944 Ext.Editor = function(field, config){
|
rlm@46
|
20945 this.field = field;
|
rlm@46
|
20946 Ext.Editor.superclass.constructor.call(this, config);
|
rlm@46
|
20947 };
|
rlm@46
|
20948
|
rlm@46
|
20949 Ext.extend(Ext.Editor, Ext.Component, {
|
rlm@46
|
20950
|
rlm@46
|
20951
|
rlm@46
|
20952
|
rlm@46
|
20953
|
rlm@46
|
20954
|
rlm@46
|
20955 value : "",
|
rlm@46
|
20956
|
rlm@46
|
20957 alignment: "c-c?",
|
rlm@46
|
20958
|
rlm@46
|
20959 shadow : "frame",
|
rlm@46
|
20960
|
rlm@46
|
20961 constrain : false,
|
rlm@46
|
20962
|
rlm@46
|
20963 swallowKeys : true,
|
rlm@46
|
20964
|
rlm@46
|
20965 completeOnEnter : false,
|
rlm@46
|
20966
|
rlm@46
|
20967 cancelOnEsc : false,
|
rlm@46
|
20968
|
rlm@46
|
20969 updateEl : false,
|
rlm@46
|
20970
|
rlm@46
|
20971 initComponent : function(){
|
rlm@46
|
20972 Ext.Editor.superclass.initComponent.call(this);
|
rlm@46
|
20973 this.addEvents(
|
rlm@46
|
20974
|
rlm@46
|
20975 "beforestartedit",
|
rlm@46
|
20976
|
rlm@46
|
20977 "startedit",
|
rlm@46
|
20978
|
rlm@46
|
20979 "beforecomplete",
|
rlm@46
|
20980
|
rlm@46
|
20981 "complete",
|
rlm@46
|
20982
|
rlm@46
|
20983 "specialkey"
|
rlm@46
|
20984 );
|
rlm@46
|
20985 },
|
rlm@46
|
20986
|
rlm@46
|
20987 onRender : function(ct, position){
|
rlm@46
|
20988 this.el = new Ext.Layer({
|
rlm@46
|
20989 shadow: this.shadow,
|
rlm@46
|
20990 cls: "x-editor",
|
rlm@46
|
20991 parentEl : ct,
|
rlm@46
|
20992 shim : this.shim,
|
rlm@46
|
20993 shadowOffset:4,
|
rlm@46
|
20994 id: this.id,
|
rlm@46
|
20995 constrain: this.constrain
|
rlm@46
|
20996 });
|
rlm@46
|
20997 this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
|
rlm@46
|
20998 if(this.field.msgTarget != 'title'){
|
rlm@46
|
20999 this.field.msgTarget = 'qtip';
|
rlm@46
|
21000 }
|
rlm@46
|
21001 this.field.inEditor = true;
|
rlm@46
|
21002 this.field.render(this.el);
|
rlm@46
|
21003 if(Ext.isGecko){
|
rlm@46
|
21004 this.field.el.dom.setAttribute('autocomplete', 'off');
|
rlm@46
|
21005 }
|
rlm@46
|
21006 this.field.on("specialkey", this.onSpecialKey, this);
|
rlm@46
|
21007 if(this.swallowKeys){
|
rlm@46
|
21008 this.field.el.swallowEvent(['keydown','keypress']);
|
rlm@46
|
21009 }
|
rlm@46
|
21010 this.field.show();
|
rlm@46
|
21011 this.field.on("blur", this.onBlur, this);
|
rlm@46
|
21012 if(this.field.grow){
|
rlm@46
|
21013 this.field.on("autosize", this.el.sync, this.el, {delay:1});
|
rlm@46
|
21014 }
|
rlm@46
|
21015 },
|
rlm@46
|
21016
|
rlm@46
|
21017 onSpecialKey : function(field, e){
|
rlm@46
|
21018 if(this.completeOnEnter && e.getKey() == e.ENTER){
|
rlm@46
|
21019 e.stopEvent();
|
rlm@46
|
21020 this.completeEdit();
|
rlm@46
|
21021 }else if(this.cancelOnEsc && e.getKey() == e.ESC){
|
rlm@46
|
21022 this.cancelEdit();
|
rlm@46
|
21023 }else{
|
rlm@46
|
21024 this.fireEvent('specialkey', field, e);
|
rlm@46
|
21025 }
|
rlm@46
|
21026 },
|
rlm@46
|
21027
|
rlm@46
|
21028
|
rlm@46
|
21029 startEdit : function(el, value){
|
rlm@46
|
21030 if(this.editing){
|
rlm@46
|
21031 this.completeEdit();
|
rlm@46
|
21032 }
|
rlm@46
|
21033 this.boundEl = Ext.get(el);
|
rlm@46
|
21034 var v = value !== undefined ? value : this.boundEl.dom.innerHTML;
|
rlm@46
|
21035 if(!this.rendered){
|
rlm@46
|
21036 this.render(this.parentEl || document.body);
|
rlm@46
|
21037 }
|
rlm@46
|
21038 if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){
|
rlm@46
|
21039 return;
|
rlm@46
|
21040 }
|
rlm@46
|
21041 this.startValue = v;
|
rlm@46
|
21042 this.field.setValue(v);
|
rlm@46
|
21043 this.doAutoSize();
|
rlm@46
|
21044 this.el.alignTo(this.boundEl, this.alignment);
|
rlm@46
|
21045 this.editing = true;
|
rlm@46
|
21046 this.show();
|
rlm@46
|
21047 },
|
rlm@46
|
21048
|
rlm@46
|
21049 doAutoSize : function(){
|
rlm@46
|
21050 if(this.autoSize){
|
rlm@46
|
21051 var sz = this.boundEl.getSize();
|
rlm@46
|
21052 switch(this.autoSize){
|
rlm@46
|
21053 case "width":
|
rlm@46
|
21054 this.setSize(sz.width, "");
|
rlm@46
|
21055 break;
|
rlm@46
|
21056 case "height":
|
rlm@46
|
21057 this.setSize("", sz.height);
|
rlm@46
|
21058 break;
|
rlm@46
|
21059 default:
|
rlm@46
|
21060 this.setSize(sz.width, sz.height);
|
rlm@46
|
21061 }
|
rlm@46
|
21062 }
|
rlm@46
|
21063 },
|
rlm@46
|
21064
|
rlm@46
|
21065
|
rlm@46
|
21066 setSize : function(w, h){
|
rlm@46
|
21067 delete this.field.lastSize;
|
rlm@46
|
21068 this.field.setSize(w, h);
|
rlm@46
|
21069 if(this.el){
|
rlm@46
|
21070 this.el.sync();
|
rlm@46
|
21071 }
|
rlm@46
|
21072 },
|
rlm@46
|
21073
|
rlm@46
|
21074
|
rlm@46
|
21075 realign : function(){
|
rlm@46
|
21076 this.el.alignTo(this.boundEl, this.alignment);
|
rlm@46
|
21077 },
|
rlm@46
|
21078
|
rlm@46
|
21079
|
rlm@46
|
21080 completeEdit : function(remainVisible){
|
rlm@46
|
21081 if(!this.editing){
|
rlm@46
|
21082 return;
|
rlm@46
|
21083 }
|
rlm@46
|
21084 var v = this.getValue();
|
rlm@46
|
21085 if(this.revertInvalid !== false && !this.field.isValid()){
|
rlm@46
|
21086 v = this.startValue;
|
rlm@46
|
21087 this.cancelEdit(true);
|
rlm@46
|
21088 }
|
rlm@46
|
21089 if(String(v) === String(this.startValue) && this.ignoreNoChange){
|
rlm@46
|
21090 this.editing = false;
|
rlm@46
|
21091 this.hide();
|
rlm@46
|
21092 return;
|
rlm@46
|
21093 }
|
rlm@46
|
21094 if(this.fireEvent("beforecomplete", this, v, this.startValue) !== false){
|
rlm@46
|
21095 this.editing = false;
|
rlm@46
|
21096 if(this.updateEl && this.boundEl){
|
rlm@46
|
21097 this.boundEl.update(v);
|
rlm@46
|
21098 }
|
rlm@46
|
21099 if(remainVisible !== true){
|
rlm@46
|
21100 this.hide();
|
rlm@46
|
21101 }
|
rlm@46
|
21102 this.fireEvent("complete", this, v, this.startValue);
|
rlm@46
|
21103 }
|
rlm@46
|
21104 },
|
rlm@46
|
21105
|
rlm@46
|
21106 onShow : function(){
|
rlm@46
|
21107 this.el.show();
|
rlm@46
|
21108 if(this.hideEl !== false){
|
rlm@46
|
21109 this.boundEl.hide();
|
rlm@46
|
21110 }
|
rlm@46
|
21111 this.field.show();
|
rlm@46
|
21112 if(Ext.isIE && !this.fixIEFocus){ this.fixIEFocus = true;
|
rlm@46
|
21113 this.deferredFocus.defer(50, this);
|
rlm@46
|
21114 }else{
|
rlm@46
|
21115 this.field.focus();
|
rlm@46
|
21116 }
|
rlm@46
|
21117 this.fireEvent("startedit", this.boundEl, this.startValue);
|
rlm@46
|
21118 },
|
rlm@46
|
21119
|
rlm@46
|
21120 deferredFocus : function(){
|
rlm@46
|
21121 if(this.editing){
|
rlm@46
|
21122 this.field.focus();
|
rlm@46
|
21123 }
|
rlm@46
|
21124 },
|
rlm@46
|
21125
|
rlm@46
|
21126
|
rlm@46
|
21127 cancelEdit : function(remainVisible){
|
rlm@46
|
21128 if(this.editing){
|
rlm@46
|
21129 this.setValue(this.startValue);
|
rlm@46
|
21130 if(remainVisible !== true){
|
rlm@46
|
21131 this.hide();
|
rlm@46
|
21132 }
|
rlm@46
|
21133 }
|
rlm@46
|
21134 },
|
rlm@46
|
21135
|
rlm@46
|
21136 onBlur : function(){
|
rlm@46
|
21137 if(this.allowBlur !== true && this.editing){
|
rlm@46
|
21138 this.completeEdit();
|
rlm@46
|
21139 }
|
rlm@46
|
21140 },
|
rlm@46
|
21141
|
rlm@46
|
21142 onHide : function(){
|
rlm@46
|
21143 if(this.editing){
|
rlm@46
|
21144 this.completeEdit();
|
rlm@46
|
21145 return;
|
rlm@46
|
21146 }
|
rlm@46
|
21147 this.field.blur();
|
rlm@46
|
21148 if(this.field.collapse){
|
rlm@46
|
21149 this.field.collapse();
|
rlm@46
|
21150 }
|
rlm@46
|
21151 this.el.hide();
|
rlm@46
|
21152 if(this.hideEl !== false){
|
rlm@46
|
21153 this.boundEl.show();
|
rlm@46
|
21154 }
|
rlm@46
|
21155 },
|
rlm@46
|
21156
|
rlm@46
|
21157
|
rlm@46
|
21158 setValue : function(v){
|
rlm@46
|
21159 this.field.setValue(v);
|
rlm@46
|
21160 },
|
rlm@46
|
21161
|
rlm@46
|
21162
|
rlm@46
|
21163 getValue : function(){
|
rlm@46
|
21164 return this.field.getValue();
|
rlm@46
|
21165 },
|
rlm@46
|
21166
|
rlm@46
|
21167 beforeDestroy : function(){
|
rlm@46
|
21168 this.field.destroy();
|
rlm@46
|
21169 this.field = null;
|
rlm@46
|
21170 }
|
rlm@46
|
21171 });
|
rlm@46
|
21172 Ext.reg('editor', Ext.Editor);
|
rlm@46
|
21173
|
rlm@46
|
21174 Ext.MessageBox = function(){
|
rlm@46
|
21175 var dlg, opt, mask, waitTimer;
|
rlm@46
|
21176 var bodyEl, msgEl, textboxEl, textareaEl, progressBar, pp, iconEl, spacerEl;
|
rlm@46
|
21177 var buttons, activeTextEl, bwidth, iconCls = '';
|
rlm@46
|
21178
|
rlm@46
|
21179
|
rlm@46
|
21180 var handleButton = function(button){
|
rlm@46
|
21181 if(dlg.isVisible()){
|
rlm@46
|
21182 dlg.hide();
|
rlm@46
|
21183 Ext.callback(opt.fn, opt.scope||window, [button, activeTextEl.dom.value], 1);
|
rlm@46
|
21184 }
|
rlm@46
|
21185 };
|
rlm@46
|
21186
|
rlm@46
|
21187
|
rlm@46
|
21188 var handleHide = function(){
|
rlm@46
|
21189 if(opt && opt.cls){
|
rlm@46
|
21190 dlg.el.removeClass(opt.cls);
|
rlm@46
|
21191 }
|
rlm@46
|
21192 progressBar.reset();
|
rlm@46
|
21193 };
|
rlm@46
|
21194
|
rlm@46
|
21195
|
rlm@46
|
21196 var handleEsc = function(d, k, e){
|
rlm@46
|
21197 if(opt && opt.closable !== false){
|
rlm@46
|
21198 dlg.hide();
|
rlm@46
|
21199 }
|
rlm@46
|
21200 if(e){
|
rlm@46
|
21201 e.stopEvent();
|
rlm@46
|
21202 }
|
rlm@46
|
21203 };
|
rlm@46
|
21204
|
rlm@46
|
21205
|
rlm@46
|
21206 var updateButtons = function(b){
|
rlm@46
|
21207 var width = 0;
|
rlm@46
|
21208 if(!b){
|
rlm@46
|
21209 buttons["ok"].hide();
|
rlm@46
|
21210 buttons["cancel"].hide();
|
rlm@46
|
21211 buttons["yes"].hide();
|
rlm@46
|
21212 buttons["no"].hide();
|
rlm@46
|
21213 return width;
|
rlm@46
|
21214 }
|
rlm@46
|
21215 dlg.footer.dom.style.display = '';
|
rlm@46
|
21216 for(var k in buttons){
|
rlm@46
|
21217 if(typeof buttons[k] != "function"){
|
rlm@46
|
21218 if(b[k]){
|
rlm@46
|
21219 buttons[k].show();
|
rlm@46
|
21220 buttons[k].setText(typeof b[k] == "string" ? b[k] : Ext.MessageBox.buttonText[k]);
|
rlm@46
|
21221 width += buttons[k].el.getWidth()+15;
|
rlm@46
|
21222 }else{
|
rlm@46
|
21223 buttons[k].hide();
|
rlm@46
|
21224 }
|
rlm@46
|
21225 }
|
rlm@46
|
21226 }
|
rlm@46
|
21227 return width;
|
rlm@46
|
21228 };
|
rlm@46
|
21229
|
rlm@46
|
21230 return {
|
rlm@46
|
21231
|
rlm@46
|
21232 getDialog : function(titleText){
|
rlm@46
|
21233 if(!dlg){
|
rlm@46
|
21234 dlg = new Ext.Window({
|
rlm@46
|
21235 autoCreate : true,
|
rlm@46
|
21236 title:titleText,
|
rlm@46
|
21237 resizable:false,
|
rlm@46
|
21238 constrain:true,
|
rlm@46
|
21239 constrainHeader:true,
|
rlm@46
|
21240 minimizable : false,
|
rlm@46
|
21241 maximizable : false,
|
rlm@46
|
21242 stateful: false,
|
rlm@46
|
21243 modal: true,
|
rlm@46
|
21244 shim:true,
|
rlm@46
|
21245 buttonAlign:"center",
|
rlm@46
|
21246 width:400,
|
rlm@46
|
21247 height:100,
|
rlm@46
|
21248 minHeight: 80,
|
rlm@46
|
21249 plain:true,
|
rlm@46
|
21250 footer:true,
|
rlm@46
|
21251 closable:true,
|
rlm@46
|
21252 close : function(){
|
rlm@46
|
21253 if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){
|
rlm@46
|
21254 handleButton("no");
|
rlm@46
|
21255 }else{
|
rlm@46
|
21256 handleButton("cancel");
|
rlm@46
|
21257 }
|
rlm@46
|
21258 }
|
rlm@46
|
21259 });
|
rlm@46
|
21260 buttons = {};
|
rlm@46
|
21261 var bt = this.buttonText;
|
rlm@46
|
21262
|
rlm@46
|
21263 buttons["ok"] = dlg.addButton(bt["ok"], handleButton.createCallback("ok"));
|
rlm@46
|
21264 buttons["yes"] = dlg.addButton(bt["yes"], handleButton.createCallback("yes"));
|
rlm@46
|
21265 buttons["no"] = dlg.addButton(bt["no"], handleButton.createCallback("no"));
|
rlm@46
|
21266 buttons["cancel"] = dlg.addButton(bt["cancel"], handleButton.createCallback("cancel"));
|
rlm@46
|
21267 buttons["ok"].hideMode = buttons["yes"].hideMode = buttons["no"].hideMode = buttons["cancel"].hideMode = 'offsets';
|
rlm@46
|
21268 dlg.render(document.body);
|
rlm@46
|
21269 dlg.getEl().addClass('x-window-dlg');
|
rlm@46
|
21270 mask = dlg.mask;
|
rlm@46
|
21271 bodyEl = dlg.body.createChild({
|
rlm@46
|
21272 html:'<div class="ext-mb-icon"></div><div class="ext-mb-content"><span class="ext-mb-text"></span><br /><div class="ext-mb-fix-cursor"><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea></div></div>'
|
rlm@46
|
21273 });
|
rlm@46
|
21274 iconEl = Ext.get(bodyEl.dom.firstChild);
|
rlm@46
|
21275 var contentEl = bodyEl.dom.childNodes[1];
|
rlm@46
|
21276 msgEl = Ext.get(contentEl.firstChild);
|
rlm@46
|
21277 textboxEl = Ext.get(contentEl.childNodes[2].firstChild);
|
rlm@46
|
21278 textboxEl.enableDisplayMode();
|
rlm@46
|
21279 textboxEl.addKeyListener([10,13], function(){
|
rlm@46
|
21280 if(dlg.isVisible() && opt && opt.buttons){
|
rlm@46
|
21281 if(opt.buttons.ok){
|
rlm@46
|
21282 handleButton("ok");
|
rlm@46
|
21283 }else if(opt.buttons.yes){
|
rlm@46
|
21284 handleButton("yes");
|
rlm@46
|
21285 }
|
rlm@46
|
21286 }
|
rlm@46
|
21287 });
|
rlm@46
|
21288 textareaEl = Ext.get(contentEl.childNodes[2].childNodes[1]);
|
rlm@46
|
21289 textareaEl.enableDisplayMode();
|
rlm@46
|
21290 progressBar = new Ext.ProgressBar({
|
rlm@46
|
21291 renderTo:bodyEl
|
rlm@46
|
21292 });
|
rlm@46
|
21293 bodyEl.createChild({cls:'x-clear'});
|
rlm@46
|
21294 }
|
rlm@46
|
21295 return dlg;
|
rlm@46
|
21296 },
|
rlm@46
|
21297
|
rlm@46
|
21298
|
rlm@46
|
21299 updateText : function(text){
|
rlm@46
|
21300 if(!dlg.isVisible() && !opt.width){
|
rlm@46
|
21301 dlg.setSize(this.maxWidth, 100);
|
rlm@46
|
21302 }
|
rlm@46
|
21303 msgEl.update(text || ' ');
|
rlm@46
|
21304
|
rlm@46
|
21305 var iw = iconCls != '' ? (iconEl.getWidth() + iconEl.getMargins('lr')) : 0;
|
rlm@46
|
21306 var mw = msgEl.getWidth() + msgEl.getMargins('lr');
|
rlm@46
|
21307 var fw = dlg.getFrameWidth('lr');
|
rlm@46
|
21308 var bw = dlg.body.getFrameWidth('lr');
|
rlm@46
|
21309 if (Ext.isIE && iw > 0){
|
rlm@46
|
21310
|
rlm@46
|
21311
|
rlm@46
|
21312 iw += 3;
|
rlm@46
|
21313 }
|
rlm@46
|
21314 var w = Math.max(Math.min(opt.width || iw+mw+fw+bw, this.maxWidth),
|
rlm@46
|
21315 Math.max(opt.minWidth || this.minWidth, bwidth || 0));
|
rlm@46
|
21316
|
rlm@46
|
21317 if(opt.prompt === true){
|
rlm@46
|
21318 activeTextEl.setWidth(w-iw-fw-bw);
|
rlm@46
|
21319 }
|
rlm@46
|
21320 if(opt.progress === true || opt.wait === true){
|
rlm@46
|
21321 progressBar.setSize(w-iw-fw-bw);
|
rlm@46
|
21322 }
|
rlm@46
|
21323 dlg.setSize(w, 'auto').center();
|
rlm@46
|
21324 return this;
|
rlm@46
|
21325 },
|
rlm@46
|
21326
|
rlm@46
|
21327
|
rlm@46
|
21328 updateProgress : function(value, progressText, msg){
|
rlm@46
|
21329 progressBar.updateProgress(value, progressText);
|
rlm@46
|
21330 if(msg){
|
rlm@46
|
21331 this.updateText(msg);
|
rlm@46
|
21332 }
|
rlm@46
|
21333 return this;
|
rlm@46
|
21334 },
|
rlm@46
|
21335
|
rlm@46
|
21336
|
rlm@46
|
21337 isVisible : function(){
|
rlm@46
|
21338 return dlg && dlg.isVisible();
|
rlm@46
|
21339 },
|
rlm@46
|
21340
|
rlm@46
|
21341
|
rlm@46
|
21342 hide : function(){
|
rlm@46
|
21343 if(this.isVisible()){
|
rlm@46
|
21344 dlg.hide();
|
rlm@46
|
21345 handleHide();
|
rlm@46
|
21346 }
|
rlm@46
|
21347 return this;
|
rlm@46
|
21348 },
|
rlm@46
|
21349
|
rlm@46
|
21350
|
rlm@46
|
21351 show : function(options){
|
rlm@46
|
21352 if(this.isVisible()){
|
rlm@46
|
21353 this.hide();
|
rlm@46
|
21354 }
|
rlm@46
|
21355 opt = options;
|
rlm@46
|
21356 var d = this.getDialog(opt.title || " ");
|
rlm@46
|
21357
|
rlm@46
|
21358 d.setTitle(opt.title || " ");
|
rlm@46
|
21359 var allowClose = (opt.closable !== false && opt.progress !== true && opt.wait !== true);
|
rlm@46
|
21360 d.tools.close.setDisplayed(allowClose);
|
rlm@46
|
21361 activeTextEl = textboxEl;
|
rlm@46
|
21362 opt.prompt = opt.prompt || (opt.multiline ? true : false);
|
rlm@46
|
21363 if(opt.prompt){
|
rlm@46
|
21364 if(opt.multiline){
|
rlm@46
|
21365 textboxEl.hide();
|
rlm@46
|
21366 textareaEl.show();
|
rlm@46
|
21367 textareaEl.setHeight(typeof opt.multiline == "number" ?
|
rlm@46
|
21368 opt.multiline : this.defaultTextHeight);
|
rlm@46
|
21369 activeTextEl = textareaEl;
|
rlm@46
|
21370 }else{
|
rlm@46
|
21371 textboxEl.show();
|
rlm@46
|
21372 textareaEl.hide();
|
rlm@46
|
21373 }
|
rlm@46
|
21374 }else{
|
rlm@46
|
21375 textboxEl.hide();
|
rlm@46
|
21376 textareaEl.hide();
|
rlm@46
|
21377 }
|
rlm@46
|
21378 activeTextEl.dom.value = opt.value || "";
|
rlm@46
|
21379 if(opt.prompt){
|
rlm@46
|
21380 d.focusEl = activeTextEl;
|
rlm@46
|
21381 }else{
|
rlm@46
|
21382 var bs = opt.buttons;
|
rlm@46
|
21383 var db = null;
|
rlm@46
|
21384 if(bs && bs.ok){
|
rlm@46
|
21385 db = buttons["ok"];
|
rlm@46
|
21386 }else if(bs && bs.yes){
|
rlm@46
|
21387 db = buttons["yes"];
|
rlm@46
|
21388 }
|
rlm@46
|
21389 if (db){
|
rlm@46
|
21390 d.focusEl = db;
|
rlm@46
|
21391 }
|
rlm@46
|
21392 }
|
rlm@46
|
21393 if(opt.iconCls){
|
rlm@46
|
21394 d.setIconClass(opt.iconCls);
|
rlm@46
|
21395 }
|
rlm@46
|
21396 this.setIcon(opt.icon);
|
rlm@46
|
21397 bwidth = updateButtons(opt.buttons);
|
rlm@46
|
21398 progressBar.setVisible(opt.progress === true || opt.wait === true);
|
rlm@46
|
21399 this.updateProgress(0, opt.progressText);
|
rlm@46
|
21400 this.updateText(opt.msg);
|
rlm@46
|
21401 if(opt.cls){
|
rlm@46
|
21402 d.el.addClass(opt.cls);
|
rlm@46
|
21403 }
|
rlm@46
|
21404 d.proxyDrag = opt.proxyDrag === true;
|
rlm@46
|
21405 d.modal = opt.modal !== false;
|
rlm@46
|
21406 d.mask = opt.modal !== false ? mask : false;
|
rlm@46
|
21407 if(!d.isVisible()){
|
rlm@46
|
21408
|
rlm@46
|
21409 document.body.appendChild(dlg.el.dom);
|
rlm@46
|
21410 d.setAnimateTarget(opt.animEl);
|
rlm@46
|
21411 d.show(opt.animEl);
|
rlm@46
|
21412 }
|
rlm@46
|
21413
|
rlm@46
|
21414
|
rlm@46
|
21415 d.on('show', function(){
|
rlm@46
|
21416 if(allowClose === true){
|
rlm@46
|
21417 d.keyMap.enable();
|
rlm@46
|
21418 }else{
|
rlm@46
|
21419 d.keyMap.disable();
|
rlm@46
|
21420 }
|
rlm@46
|
21421 }, this, {single:true});
|
rlm@46
|
21422
|
rlm@46
|
21423 if(opt.wait === true){
|
rlm@46
|
21424 progressBar.wait(opt.waitConfig);
|
rlm@46
|
21425 }
|
rlm@46
|
21426 return this;
|
rlm@46
|
21427 },
|
rlm@46
|
21428
|
rlm@46
|
21429
|
rlm@46
|
21430 setIcon : function(icon){
|
rlm@46
|
21431 if(icon && icon != ''){
|
rlm@46
|
21432 iconEl.removeClass('x-hidden');
|
rlm@46
|
21433 iconEl.replaceClass(iconCls, icon);
|
rlm@46
|
21434 iconCls = icon;
|
rlm@46
|
21435 }else{
|
rlm@46
|
21436 iconEl.replaceClass(iconCls, 'x-hidden');
|
rlm@46
|
21437 iconCls = '';
|
rlm@46
|
21438 }
|
rlm@46
|
21439 return this;
|
rlm@46
|
21440 },
|
rlm@46
|
21441
|
rlm@46
|
21442
|
rlm@46
|
21443 progress : function(title, msg, progressText){
|
rlm@46
|
21444 this.show({
|
rlm@46
|
21445 title : title,
|
rlm@46
|
21446 msg : msg,
|
rlm@46
|
21447 buttons: false,
|
rlm@46
|
21448 progress:true,
|
rlm@46
|
21449 closable:false,
|
rlm@46
|
21450 minWidth: this.minProgressWidth,
|
rlm@46
|
21451 progressText: progressText
|
rlm@46
|
21452 });
|
rlm@46
|
21453 return this;
|
rlm@46
|
21454 },
|
rlm@46
|
21455
|
rlm@46
|
21456
|
rlm@46
|
21457 wait : function(msg, title, config){
|
rlm@46
|
21458 this.show({
|
rlm@46
|
21459 title : title,
|
rlm@46
|
21460 msg : msg,
|
rlm@46
|
21461 buttons: false,
|
rlm@46
|
21462 closable:false,
|
rlm@46
|
21463 wait:true,
|
rlm@46
|
21464 modal:true,
|
rlm@46
|
21465 minWidth: this.minProgressWidth,
|
rlm@46
|
21466 waitConfig: config
|
rlm@46
|
21467 });
|
rlm@46
|
21468 return this;
|
rlm@46
|
21469 },
|
rlm@46
|
21470
|
rlm@46
|
21471
|
rlm@46
|
21472 alert : function(title, msg, fn, scope){
|
rlm@46
|
21473 this.show({
|
rlm@46
|
21474 title : title,
|
rlm@46
|
21475 msg : msg,
|
rlm@46
|
21476 buttons: this.OK,
|
rlm@46
|
21477 fn: fn,
|
rlm@46
|
21478 scope : scope
|
rlm@46
|
21479 });
|
rlm@46
|
21480 return this;
|
rlm@46
|
21481 },
|
rlm@46
|
21482
|
rlm@46
|
21483
|
rlm@46
|
21484 confirm : function(title, msg, fn, scope){
|
rlm@46
|
21485 this.show({
|
rlm@46
|
21486 title : title,
|
rlm@46
|
21487 msg : msg,
|
rlm@46
|
21488 buttons: this.YESNO,
|
rlm@46
|
21489 fn: fn,
|
rlm@46
|
21490 scope : scope,
|
rlm@46
|
21491 icon: this.QUESTION
|
rlm@46
|
21492 });
|
rlm@46
|
21493 return this;
|
rlm@46
|
21494 },
|
rlm@46
|
21495
|
rlm@46
|
21496
|
rlm@46
|
21497 prompt : function(title, msg, fn, scope, multiline, value){
|
rlm@46
|
21498 this.show({
|
rlm@46
|
21499 title : title,
|
rlm@46
|
21500 msg : msg,
|
rlm@46
|
21501 buttons: this.OKCANCEL,
|
rlm@46
|
21502 fn: fn,
|
rlm@46
|
21503 minWidth:250,
|
rlm@46
|
21504 scope : scope,
|
rlm@46
|
21505 prompt:true,
|
rlm@46
|
21506 multiline: multiline,
|
rlm@46
|
21507 value: value
|
rlm@46
|
21508 });
|
rlm@46
|
21509 return this;
|
rlm@46
|
21510 },
|
rlm@46
|
21511
|
rlm@46
|
21512
|
rlm@46
|
21513 OK : {ok:true},
|
rlm@46
|
21514
|
rlm@46
|
21515 CANCEL : {cancel:true},
|
rlm@46
|
21516
|
rlm@46
|
21517 OKCANCEL : {ok:true, cancel:true},
|
rlm@46
|
21518
|
rlm@46
|
21519 YESNO : {yes:true, no:true},
|
rlm@46
|
21520
|
rlm@46
|
21521 YESNOCANCEL : {yes:true, no:true, cancel:true},
|
rlm@46
|
21522
|
rlm@46
|
21523 INFO : 'ext-mb-info',
|
rlm@46
|
21524
|
rlm@46
|
21525 WARNING : 'ext-mb-warning',
|
rlm@46
|
21526
|
rlm@46
|
21527 QUESTION : 'ext-mb-question',
|
rlm@46
|
21528
|
rlm@46
|
21529 ERROR : 'ext-mb-error',
|
rlm@46
|
21530
|
rlm@46
|
21531
|
rlm@46
|
21532 defaultTextHeight : 75,
|
rlm@46
|
21533
|
rlm@46
|
21534 maxWidth : 600,
|
rlm@46
|
21535
|
rlm@46
|
21536 minWidth : 100,
|
rlm@46
|
21537
|
rlm@46
|
21538 minProgressWidth : 250,
|
rlm@46
|
21539
|
rlm@46
|
21540 buttonText : {
|
rlm@46
|
21541 ok : "OK",
|
rlm@46
|
21542 cancel : "Cancel",
|
rlm@46
|
21543 yes : "Yes",
|
rlm@46
|
21544 no : "No"
|
rlm@46
|
21545 }
|
rlm@46
|
21546 };
|
rlm@46
|
21547 }();
|
rlm@46
|
21548
|
rlm@46
|
21549
|
rlm@46
|
21550 Ext.Msg = Ext.MessageBox;
|
rlm@46
|
21551
|
rlm@46
|
21552 Ext.Tip = Ext.extend(Ext.Panel, {
|
rlm@46
|
21553
|
rlm@46
|
21554
|
rlm@46
|
21555
|
rlm@46
|
21556 minWidth : 40,
|
rlm@46
|
21557
|
rlm@46
|
21558 maxWidth : 300,
|
rlm@46
|
21559
|
rlm@46
|
21560 shadow : "sides",
|
rlm@46
|
21561
|
rlm@46
|
21562 defaultAlign : "tl-bl?",
|
rlm@46
|
21563 autoRender: true,
|
rlm@46
|
21564 quickShowInterval : 250,
|
rlm@46
|
21565
|
rlm@46
|
21566
|
rlm@46
|
21567 frame:true,
|
rlm@46
|
21568 hidden:true,
|
rlm@46
|
21569 baseCls: 'x-tip',
|
rlm@46
|
21570 floating:{shadow:true,shim:true,useDisplay:true,constrain:false},
|
rlm@46
|
21571 autoHeight:true,
|
rlm@46
|
21572
|
rlm@46
|
21573
|
rlm@46
|
21574 initComponent : function(){
|
rlm@46
|
21575 Ext.Tip.superclass.initComponent.call(this);
|
rlm@46
|
21576 if(this.closable && !this.title){
|
rlm@46
|
21577 this.elements += ',header';
|
rlm@46
|
21578 }
|
rlm@46
|
21579 },
|
rlm@46
|
21580
|
rlm@46
|
21581
|
rlm@46
|
21582 afterRender : function(){
|
rlm@46
|
21583 Ext.Tip.superclass.afterRender.call(this);
|
rlm@46
|
21584 if(this.closable){
|
rlm@46
|
21585 this.addTool({
|
rlm@46
|
21586 id: 'close',
|
rlm@46
|
21587 handler: this.hide,
|
rlm@46
|
21588 scope: this
|
rlm@46
|
21589 });
|
rlm@46
|
21590 }
|
rlm@46
|
21591 },
|
rlm@46
|
21592
|
rlm@46
|
21593
|
rlm@46
|
21594 showAt : function(xy){
|
rlm@46
|
21595 Ext.Tip.superclass.show.call(this);
|
rlm@46
|
21596 if(this.measureWidth !== false && (!this.initialConfig || typeof this.initialConfig.width != 'number')){
|
rlm@46
|
21597 this.doAutoWidth();
|
rlm@46
|
21598 }
|
rlm@46
|
21599 if(this.constrainPosition){
|
rlm@46
|
21600 xy = this.el.adjustForConstraints(xy);
|
rlm@46
|
21601 }
|
rlm@46
|
21602 this.setPagePosition(xy[0], xy[1]);
|
rlm@46
|
21603 },
|
rlm@46
|
21604
|
rlm@46
|
21605
|
rlm@46
|
21606 doAutoWidth : function(){
|
rlm@46
|
21607 var bw = this.body.getTextWidth();
|
rlm@46
|
21608 if(this.title){
|
rlm@46
|
21609 bw = Math.max(bw, this.header.child('span').getTextWidth(this.title));
|
rlm@46
|
21610 }
|
rlm@46
|
21611 bw += this.getFrameWidth() + (this.closable ? 20 : 0) + this.body.getPadding("lr");
|
rlm@46
|
21612 this.setWidth(bw.constrain(this.minWidth, this.maxWidth));
|
rlm@46
|
21613 },
|
rlm@46
|
21614
|
rlm@46
|
21615
|
rlm@46
|
21616 showBy : function(el, pos){
|
rlm@46
|
21617 if(!this.rendered){
|
rlm@46
|
21618 this.render(Ext.getBody());
|
rlm@46
|
21619 }
|
rlm@46
|
21620 this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign));
|
rlm@46
|
21621 },
|
rlm@46
|
21622
|
rlm@46
|
21623 initDraggable : function(){
|
rlm@46
|
21624 this.dd = new Ext.Tip.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable);
|
rlm@46
|
21625 this.header.addClass('x-tip-draggable');
|
rlm@46
|
21626 }
|
rlm@46
|
21627 });
|
rlm@46
|
21628
|
rlm@46
|
21629
|
rlm@46
|
21630 Ext.Tip.DD = function(tip, config){
|
rlm@46
|
21631 Ext.apply(this, config);
|
rlm@46
|
21632 this.tip = tip;
|
rlm@46
|
21633 Ext.Tip.DD.superclass.constructor.call(this, tip.el.id, 'WindowDD-'+tip.id);
|
rlm@46
|
21634 this.setHandleElId(tip.header.id);
|
rlm@46
|
21635 this.scroll = false;
|
rlm@46
|
21636 };
|
rlm@46
|
21637
|
rlm@46
|
21638 Ext.extend(Ext.Tip.DD, Ext.dd.DD, {
|
rlm@46
|
21639 moveOnly:true,
|
rlm@46
|
21640 scroll:false,
|
rlm@46
|
21641 headerOffsets:[100, 25],
|
rlm@46
|
21642 startDrag : function(){
|
rlm@46
|
21643 this.tip.el.disableShadow();
|
rlm@46
|
21644 },
|
rlm@46
|
21645 endDrag : function(e){
|
rlm@46
|
21646 this.tip.el.enableShadow(true);
|
rlm@46
|
21647 }
|
rlm@46
|
21648 });
|
rlm@46
|
21649
|
rlm@46
|
21650 Ext.ToolTip = Ext.extend(Ext.Tip, {
|
rlm@46
|
21651
|
rlm@46
|
21652
|
rlm@46
|
21653
|
rlm@46
|
21654 showDelay: 500,
|
rlm@46
|
21655
|
rlm@46
|
21656 hideDelay: 200,
|
rlm@46
|
21657
|
rlm@46
|
21658 dismissDelay: 5000,
|
rlm@46
|
21659
|
rlm@46
|
21660 mouseOffset: [15,18],
|
rlm@46
|
21661
|
rlm@46
|
21662 trackMouse : false,
|
rlm@46
|
21663 constrainPosition: true,
|
rlm@46
|
21664
|
rlm@46
|
21665
|
rlm@46
|
21666 initComponent: function(){
|
rlm@46
|
21667 Ext.ToolTip.superclass.initComponent.call(this);
|
rlm@46
|
21668 this.lastActive = new Date();
|
rlm@46
|
21669 this.initTarget();
|
rlm@46
|
21670 },
|
rlm@46
|
21671
|
rlm@46
|
21672
|
rlm@46
|
21673 initTarget : function(){
|
rlm@46
|
21674 if(this.target){
|
rlm@46
|
21675 this.target = Ext.get(this.target);
|
rlm@46
|
21676 this.target.on('mouseover', this.onTargetOver, this);
|
rlm@46
|
21677 this.target.on('mouseout', this.onTargetOut, this);
|
rlm@46
|
21678 this.target.on('mousemove', this.onMouseMove, this);
|
rlm@46
|
21679 }
|
rlm@46
|
21680 },
|
rlm@46
|
21681
|
rlm@46
|
21682
|
rlm@46
|
21683 onMouseMove : function(e){
|
rlm@46
|
21684 this.targetXY = e.getXY();
|
rlm@46
|
21685 if(!this.hidden && this.trackMouse){
|
rlm@46
|
21686 this.setPagePosition(this.getTargetXY());
|
rlm@46
|
21687 }
|
rlm@46
|
21688 },
|
rlm@46
|
21689
|
rlm@46
|
21690
|
rlm@46
|
21691 getTargetXY : function(){
|
rlm@46
|
21692 return [this.targetXY[0]+this.mouseOffset[0], this.targetXY[1]+this.mouseOffset[1]];
|
rlm@46
|
21693 },
|
rlm@46
|
21694
|
rlm@46
|
21695
|
rlm@46
|
21696 onTargetOver : function(e){
|
rlm@46
|
21697 if(this.disabled || e.within(this.target.dom, true)){
|
rlm@46
|
21698 return;
|
rlm@46
|
21699 }
|
rlm@46
|
21700 this.clearTimer('hide');
|
rlm@46
|
21701 this.targetXY = e.getXY();
|
rlm@46
|
21702 this.delayShow();
|
rlm@46
|
21703 },
|
rlm@46
|
21704
|
rlm@46
|
21705
|
rlm@46
|
21706 delayShow : function(){
|
rlm@46
|
21707 if(this.hidden && !this.showTimer){
|
rlm@46
|
21708 if(this.lastActive.getElapsed() < this.quickShowInterval){
|
rlm@46
|
21709 this.show();
|
rlm@46
|
21710 }else{
|
rlm@46
|
21711 this.showTimer = this.show.defer(this.showDelay, this);
|
rlm@46
|
21712 }
|
rlm@46
|
21713 }else if(!this.hidden && this.autoHide !== false){
|
rlm@46
|
21714 this.show();
|
rlm@46
|
21715 }
|
rlm@46
|
21716 },
|
rlm@46
|
21717
|
rlm@46
|
21718
|
rlm@46
|
21719 onTargetOut : function(e){
|
rlm@46
|
21720 if(this.disabled || e.within(this.target.dom, true)){
|
rlm@46
|
21721 return;
|
rlm@46
|
21722 }
|
rlm@46
|
21723 this.clearTimer('show');
|
rlm@46
|
21724 if(this.autoHide !== false){
|
rlm@46
|
21725 this.delayHide();
|
rlm@46
|
21726 }
|
rlm@46
|
21727 },
|
rlm@46
|
21728
|
rlm@46
|
21729
|
rlm@46
|
21730 delayHide : function(){
|
rlm@46
|
21731 if(!this.hidden && !this.hideTimer){
|
rlm@46
|
21732 this.hideTimer = this.hide.defer(this.hideDelay, this);
|
rlm@46
|
21733 }
|
rlm@46
|
21734 },
|
rlm@46
|
21735
|
rlm@46
|
21736
|
rlm@46
|
21737 hide: function(){
|
rlm@46
|
21738 this.clearTimer('dismiss');
|
rlm@46
|
21739 this.lastActive = new Date();
|
rlm@46
|
21740 Ext.ToolTip.superclass.hide.call(this);
|
rlm@46
|
21741 },
|
rlm@46
|
21742
|
rlm@46
|
21743
|
rlm@46
|
21744 show : function(){
|
rlm@46
|
21745 this.showAt(this.getTargetXY());
|
rlm@46
|
21746 },
|
rlm@46
|
21747
|
rlm@46
|
21748
|
rlm@46
|
21749 showAt : function(xy){
|
rlm@46
|
21750 this.lastActive = new Date();
|
rlm@46
|
21751 this.clearTimers();
|
rlm@46
|
21752 Ext.ToolTip.superclass.showAt.call(this, xy);
|
rlm@46
|
21753 if(this.dismissDelay && this.autoHide !== false){
|
rlm@46
|
21754 this.dismissTimer = this.hide.defer(this.dismissDelay, this);
|
rlm@46
|
21755 }
|
rlm@46
|
21756 },
|
rlm@46
|
21757
|
rlm@46
|
21758
|
rlm@46
|
21759 clearTimer : function(name){
|
rlm@46
|
21760 name = name + 'Timer';
|
rlm@46
|
21761 clearTimeout(this[name]);
|
rlm@46
|
21762 delete this[name];
|
rlm@46
|
21763 },
|
rlm@46
|
21764
|
rlm@46
|
21765
|
rlm@46
|
21766 clearTimers : function(){
|
rlm@46
|
21767 this.clearTimer('show');
|
rlm@46
|
21768 this.clearTimer('dismiss');
|
rlm@46
|
21769 this.clearTimer('hide');
|
rlm@46
|
21770 },
|
rlm@46
|
21771
|
rlm@46
|
21772
|
rlm@46
|
21773 onShow : function(){
|
rlm@46
|
21774 Ext.ToolTip.superclass.onShow.call(this);
|
rlm@46
|
21775 Ext.getDoc().on('mousedown', this.onDocMouseDown, this);
|
rlm@46
|
21776 },
|
rlm@46
|
21777
|
rlm@46
|
21778
|
rlm@46
|
21779 onHide : function(){
|
rlm@46
|
21780 Ext.ToolTip.superclass.onHide.call(this);
|
rlm@46
|
21781 Ext.getDoc().un('mousedown', this.onDocMouseDown, this);
|
rlm@46
|
21782 },
|
rlm@46
|
21783
|
rlm@46
|
21784
|
rlm@46
|
21785 onDocMouseDown : function(e){
|
rlm@46
|
21786 if(this.autoHide !== false && !e.within(this.el.dom)){
|
rlm@46
|
21787 this.disable();
|
rlm@46
|
21788 this.enable.defer(100, this);
|
rlm@46
|
21789 }
|
rlm@46
|
21790 },
|
rlm@46
|
21791
|
rlm@46
|
21792
|
rlm@46
|
21793 onDisable : function(){
|
rlm@46
|
21794 this.clearTimers();
|
rlm@46
|
21795 this.hide();
|
rlm@46
|
21796 },
|
rlm@46
|
21797
|
rlm@46
|
21798
|
rlm@46
|
21799 adjustPosition : function(x, y){
|
rlm@46
|
21800
|
rlm@46
|
21801 var ay = this.targetXY[1], h = this.getSize().height;
|
rlm@46
|
21802 if(this.constrainPosition && y <= ay && (y+h) >= ay){
|
rlm@46
|
21803 y = ay-h-5;
|
rlm@46
|
21804 }
|
rlm@46
|
21805 return {x : x, y: y};
|
rlm@46
|
21806 },
|
rlm@46
|
21807
|
rlm@46
|
21808
|
rlm@46
|
21809 onDestroy : function(){
|
rlm@46
|
21810 Ext.ToolTip.superclass.onDestroy.call(this);
|
rlm@46
|
21811 if(this.target){
|
rlm@46
|
21812 this.target.un('mouseover', this.onTargetOver, this);
|
rlm@46
|
21813 this.target.un('mouseout', this.onTargetOut, this);
|
rlm@46
|
21814 this.target.un('mousemove', this.onMouseMove, this);
|
rlm@46
|
21815 }
|
rlm@46
|
21816 }
|
rlm@46
|
21817 });
|
rlm@46
|
21818
|
rlm@46
|
21819 Ext.QuickTip = Ext.extend(Ext.ToolTip, {
|
rlm@46
|
21820
|
rlm@46
|
21821
|
rlm@46
|
21822 interceptTitles : false,
|
rlm@46
|
21823
|
rlm@46
|
21824
|
rlm@46
|
21825 tagConfig : {
|
rlm@46
|
21826 namespace : "ext",
|
rlm@46
|
21827 attribute : "qtip",
|
rlm@46
|
21828 width : "qwidth",
|
rlm@46
|
21829 target : "target",
|
rlm@46
|
21830 title : "qtitle",
|
rlm@46
|
21831 hide : "hide",
|
rlm@46
|
21832 cls : "qclass",
|
rlm@46
|
21833 align : "qalign"
|
rlm@46
|
21834 },
|
rlm@46
|
21835
|
rlm@46
|
21836
|
rlm@46
|
21837 initComponent : function(){
|
rlm@46
|
21838 this.target = this.target || Ext.getDoc();
|
rlm@46
|
21839 this.targets = this.targets || {};
|
rlm@46
|
21840 Ext.QuickTip.superclass.initComponent.call(this);
|
rlm@46
|
21841 },
|
rlm@46
|
21842
|
rlm@46
|
21843
|
rlm@46
|
21844 register : function(config){
|
rlm@46
|
21845 var cs = Ext.isArray(config) ? config : arguments;
|
rlm@46
|
21846 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
21847 var c = cs[i];
|
rlm@46
|
21848 var target = c.target;
|
rlm@46
|
21849 if(target){
|
rlm@46
|
21850 if(Ext.isArray(target)){
|
rlm@46
|
21851 for(var j = 0, jlen = target.length; j < jlen; j++){
|
rlm@46
|
21852 this.targets[Ext.id(target[j])] = c;
|
rlm@46
|
21853 }
|
rlm@46
|
21854 } else{
|
rlm@46
|
21855 this.targets[Ext.id(target)] = c;
|
rlm@46
|
21856 }
|
rlm@46
|
21857 }
|
rlm@46
|
21858 }
|
rlm@46
|
21859 },
|
rlm@46
|
21860
|
rlm@46
|
21861
|
rlm@46
|
21862 unregister : function(el){
|
rlm@46
|
21863 delete this.targets[Ext.id(el)];
|
rlm@46
|
21864 },
|
rlm@46
|
21865
|
rlm@46
|
21866
|
rlm@46
|
21867 onTargetOver : function(e){
|
rlm@46
|
21868 if(this.disabled){
|
rlm@46
|
21869 return;
|
rlm@46
|
21870 }
|
rlm@46
|
21871 this.targetXY = e.getXY();
|
rlm@46
|
21872 var t = e.getTarget();
|
rlm@46
|
21873 if(!t || t.nodeType !== 1 || t == document || t == document.body){
|
rlm@46
|
21874 return;
|
rlm@46
|
21875 }
|
rlm@46
|
21876 if(this.activeTarget && t == this.activeTarget.el){
|
rlm@46
|
21877 this.clearTimer('hide');
|
rlm@46
|
21878 this.show();
|
rlm@46
|
21879 return;
|
rlm@46
|
21880 }
|
rlm@46
|
21881 if(t && this.targets[t.id]){
|
rlm@46
|
21882 this.activeTarget = this.targets[t.id];
|
rlm@46
|
21883 this.activeTarget.el = t;
|
rlm@46
|
21884 this.delayShow();
|
rlm@46
|
21885 return;
|
rlm@46
|
21886 }
|
rlm@46
|
21887 var ttp, et = Ext.fly(t), cfg = this.tagConfig;
|
rlm@46
|
21888 var ns = cfg.namespace;
|
rlm@46
|
21889 if(this.interceptTitles && t.title){
|
rlm@46
|
21890 ttp = t.title;
|
rlm@46
|
21891 t.qtip = ttp;
|
rlm@46
|
21892 t.removeAttribute("title");
|
rlm@46
|
21893 e.preventDefault();
|
rlm@46
|
21894 } else{
|
rlm@46
|
21895 ttp = t.qtip || et.getAttributeNS(ns, cfg.attribute);
|
rlm@46
|
21896 }
|
rlm@46
|
21897 if(ttp){
|
rlm@46
|
21898 var autoHide = et.getAttributeNS(ns, cfg.hide);
|
rlm@46
|
21899 this.activeTarget = {
|
rlm@46
|
21900 el: t,
|
rlm@46
|
21901 text: ttp,
|
rlm@46
|
21902 width: et.getAttributeNS(ns, cfg.width),
|
rlm@46
|
21903 autoHide: autoHide != "user" && autoHide !== 'false',
|
rlm@46
|
21904 title: et.getAttributeNS(ns, cfg.title),
|
rlm@46
|
21905 cls: et.getAttributeNS(ns, cfg.cls),
|
rlm@46
|
21906 align: et.getAttributeNS(ns, cfg.align)
|
rlm@46
|
21907 };
|
rlm@46
|
21908 this.delayShow();
|
rlm@46
|
21909 }
|
rlm@46
|
21910 },
|
rlm@46
|
21911
|
rlm@46
|
21912
|
rlm@46
|
21913 onTargetOut : function(e){
|
rlm@46
|
21914 this.clearTimer('show');
|
rlm@46
|
21915 if(this.autoHide !== false){
|
rlm@46
|
21916 this.delayHide();
|
rlm@46
|
21917 }
|
rlm@46
|
21918 },
|
rlm@46
|
21919
|
rlm@46
|
21920
|
rlm@46
|
21921 showAt : function(xy){
|
rlm@46
|
21922 var t = this.activeTarget;
|
rlm@46
|
21923 if(t){
|
rlm@46
|
21924 if(!this.rendered){
|
rlm@46
|
21925 this.render(Ext.getBody());
|
rlm@46
|
21926 this.activeTarget = t;
|
rlm@46
|
21927 }
|
rlm@46
|
21928 if(t.width){
|
rlm@46
|
21929 this.setWidth(t.width);
|
rlm@46
|
21930 this.body.setWidth(this.adjustBodyWidth(t.width - this.getFrameWidth()));
|
rlm@46
|
21931 this.measureWidth = false;
|
rlm@46
|
21932 } else{
|
rlm@46
|
21933 this.measureWidth = true;
|
rlm@46
|
21934 }
|
rlm@46
|
21935 this.setTitle(t.title || '');
|
rlm@46
|
21936 this.body.update(t.text);
|
rlm@46
|
21937 this.autoHide = t.autoHide;
|
rlm@46
|
21938 this.dismissDelay = t.dismissDelay || this.dismissDelay;
|
rlm@46
|
21939 if(this.lastCls){
|
rlm@46
|
21940 this.el.removeClass(this.lastCls);
|
rlm@46
|
21941 delete this.lastCls;
|
rlm@46
|
21942 }
|
rlm@46
|
21943 if(t.cls){
|
rlm@46
|
21944 this.el.addClass(t.cls);
|
rlm@46
|
21945 this.lastCls = t.cls;
|
rlm@46
|
21946 }
|
rlm@46
|
21947 if(t.align){
|
rlm@46
|
21948 xy = this.el.getAlignToXY(t.el, t.align);
|
rlm@46
|
21949 this.constrainPosition = false;
|
rlm@46
|
21950 } else{
|
rlm@46
|
21951 this.constrainPosition = true;
|
rlm@46
|
21952 }
|
rlm@46
|
21953 }
|
rlm@46
|
21954 Ext.QuickTip.superclass.showAt.call(this, xy);
|
rlm@46
|
21955 },
|
rlm@46
|
21956
|
rlm@46
|
21957
|
rlm@46
|
21958 hide: function(){
|
rlm@46
|
21959 delete this.activeTarget;
|
rlm@46
|
21960 Ext.QuickTip.superclass.hide.call(this);
|
rlm@46
|
21961 }
|
rlm@46
|
21962 });
|
rlm@46
|
21963
|
rlm@46
|
21964 Ext.QuickTips = function(){
|
rlm@46
|
21965 var tip, locks = [];
|
rlm@46
|
21966 return {
|
rlm@46
|
21967
|
rlm@46
|
21968 init : function(){
|
rlm@46
|
21969 if(!tip){
|
rlm@46
|
21970 tip = new Ext.QuickTip({elements:'header,body'});
|
rlm@46
|
21971 }
|
rlm@46
|
21972 },
|
rlm@46
|
21973
|
rlm@46
|
21974
|
rlm@46
|
21975 enable : function(){
|
rlm@46
|
21976 if(tip){
|
rlm@46
|
21977 locks.pop();
|
rlm@46
|
21978 if(locks.length < 1){
|
rlm@46
|
21979 tip.enable();
|
rlm@46
|
21980 }
|
rlm@46
|
21981 }
|
rlm@46
|
21982 },
|
rlm@46
|
21983
|
rlm@46
|
21984
|
rlm@46
|
21985 disable : function(){
|
rlm@46
|
21986 if(tip){
|
rlm@46
|
21987 tip.disable();
|
rlm@46
|
21988 }
|
rlm@46
|
21989 locks.push(1);
|
rlm@46
|
21990 },
|
rlm@46
|
21991
|
rlm@46
|
21992
|
rlm@46
|
21993 isEnabled : function(){
|
rlm@46
|
21994 return tip !== undefined && !tip.disabled;
|
rlm@46
|
21995 },
|
rlm@46
|
21996
|
rlm@46
|
21997
|
rlm@46
|
21998 getQuickTip : function(){
|
rlm@46
|
21999 return tip;
|
rlm@46
|
22000 },
|
rlm@46
|
22001
|
rlm@46
|
22002
|
rlm@46
|
22003 register : function(){
|
rlm@46
|
22004 tip.register.apply(tip, arguments);
|
rlm@46
|
22005 },
|
rlm@46
|
22006
|
rlm@46
|
22007
|
rlm@46
|
22008 unregister : function(){
|
rlm@46
|
22009 tip.unregister.apply(tip, arguments);
|
rlm@46
|
22010 },
|
rlm@46
|
22011
|
rlm@46
|
22012
|
rlm@46
|
22013 tips :function(){
|
rlm@46
|
22014 tip.register.apply(tip, arguments);
|
rlm@46
|
22015 }
|
rlm@46
|
22016 }
|
rlm@46
|
22017 }();
|
rlm@46
|
22018
|
rlm@46
|
22019 Ext.tree.TreePanel = Ext.extend(Ext.Panel, {
|
rlm@46
|
22020 rootVisible : true,
|
rlm@46
|
22021 animate: Ext.enableFx,
|
rlm@46
|
22022 lines : true,
|
rlm@46
|
22023 enableDD : false,
|
rlm@46
|
22024 hlDrop : Ext.enableFx,
|
rlm@46
|
22025 pathSeparator: "/",
|
rlm@46
|
22026
|
rlm@46
|
22027 initComponent : function(){
|
rlm@46
|
22028 Ext.tree.TreePanel.superclass.initComponent.call(this);
|
rlm@46
|
22029
|
rlm@46
|
22030 if(!this.eventModel){
|
rlm@46
|
22031 this.eventModel = new Ext.tree.TreeEventModel(this);
|
rlm@46
|
22032 }
|
rlm@46
|
22033
|
rlm@46
|
22034 this.nodeHash = {};
|
rlm@46
|
22035
|
rlm@46
|
22036
|
rlm@46
|
22037 if(this.root){
|
rlm@46
|
22038 this.setRootNode(this.root);
|
rlm@46
|
22039 }
|
rlm@46
|
22040
|
rlm@46
|
22041 this.addEvents(
|
rlm@46
|
22042
|
rlm@46
|
22043
|
rlm@46
|
22044 "append",
|
rlm@46
|
22045
|
rlm@46
|
22046 "remove",
|
rlm@46
|
22047
|
rlm@46
|
22048 "movenode",
|
rlm@46
|
22049
|
rlm@46
|
22050 "insert",
|
rlm@46
|
22051
|
rlm@46
|
22052 "beforeappend",
|
rlm@46
|
22053
|
rlm@46
|
22054 "beforeremove",
|
rlm@46
|
22055
|
rlm@46
|
22056 "beforemovenode",
|
rlm@46
|
22057
|
rlm@46
|
22058 "beforeinsert",
|
rlm@46
|
22059
|
rlm@46
|
22060
|
rlm@46
|
22061 "beforeload",
|
rlm@46
|
22062
|
rlm@46
|
22063 "load",
|
rlm@46
|
22064
|
rlm@46
|
22065 "textchange",
|
rlm@46
|
22066
|
rlm@46
|
22067 "beforeexpandnode",
|
rlm@46
|
22068
|
rlm@46
|
22069 "beforecollapsenode",
|
rlm@46
|
22070
|
rlm@46
|
22071 "expandnode",
|
rlm@46
|
22072
|
rlm@46
|
22073 "disabledchange",
|
rlm@46
|
22074
|
rlm@46
|
22075 "collapsenode",
|
rlm@46
|
22076
|
rlm@46
|
22077 "beforeclick",
|
rlm@46
|
22078
|
rlm@46
|
22079 "click",
|
rlm@46
|
22080
|
rlm@46
|
22081 "checkchange",
|
rlm@46
|
22082
|
rlm@46
|
22083 "dblclick",
|
rlm@46
|
22084
|
rlm@46
|
22085 "contextmenu",
|
rlm@46
|
22086
|
rlm@46
|
22087 "beforechildrenrendered",
|
rlm@46
|
22088
|
rlm@46
|
22089 "startdrag",
|
rlm@46
|
22090
|
rlm@46
|
22091 "enddrag",
|
rlm@46
|
22092
|
rlm@46
|
22093 "dragdrop",
|
rlm@46
|
22094
|
rlm@46
|
22095 "beforenodedrop",
|
rlm@46
|
22096
|
rlm@46
|
22097 "nodedrop",
|
rlm@46
|
22098
|
rlm@46
|
22099 "nodedragover"
|
rlm@46
|
22100 );
|
rlm@46
|
22101 if(this.singleExpand){
|
rlm@46
|
22102 this.on("beforeexpandnode", this.restrictExpand, this);
|
rlm@46
|
22103 }
|
rlm@46
|
22104 },
|
rlm@46
|
22105
|
rlm@46
|
22106
|
rlm@46
|
22107 proxyNodeEvent : function(ename, a1, a2, a3, a4, a5, a6){
|
rlm@46
|
22108 if(ename == 'collapse' || ename == 'expand' || ename == 'beforecollapse' || ename == 'beforeexpand' || ename == 'move' || ename == 'beforemove'){
|
rlm@46
|
22109 ename = ename+'node';
|
rlm@46
|
22110 }
|
rlm@46
|
22111
|
rlm@46
|
22112 return this.fireEvent(ename, a1, a2, a3, a4, a5, a6);
|
rlm@46
|
22113 },
|
rlm@46
|
22114
|
rlm@46
|
22115
|
rlm@46
|
22116
|
rlm@46
|
22117 getRootNode : function(){
|
rlm@46
|
22118 return this.root;
|
rlm@46
|
22119 },
|
rlm@46
|
22120
|
rlm@46
|
22121
|
rlm@46
|
22122 setRootNode : function(node){
|
rlm@46
|
22123 this.root = node;
|
rlm@46
|
22124 node.ownerTree = this;
|
rlm@46
|
22125 node.isRoot = true;
|
rlm@46
|
22126 this.registerNode(node);
|
rlm@46
|
22127 if(!this.rootVisible){
|
rlm@46
|
22128 var uiP = node.attributes.uiProvider;
|
rlm@46
|
22129 node.ui = uiP ? new uiP(node) : new Ext.tree.RootTreeNodeUI(node);
|
rlm@46
|
22130 }
|
rlm@46
|
22131 return node;
|
rlm@46
|
22132 },
|
rlm@46
|
22133
|
rlm@46
|
22134
|
rlm@46
|
22135 getNodeById : function(id){
|
rlm@46
|
22136 return this.nodeHash[id];
|
rlm@46
|
22137 },
|
rlm@46
|
22138
|
rlm@46
|
22139
|
rlm@46
|
22140 registerNode : function(node){
|
rlm@46
|
22141 this.nodeHash[node.id] = node;
|
rlm@46
|
22142 },
|
rlm@46
|
22143
|
rlm@46
|
22144
|
rlm@46
|
22145 unregisterNode : function(node){
|
rlm@46
|
22146 delete this.nodeHash[node.id];
|
rlm@46
|
22147 },
|
rlm@46
|
22148
|
rlm@46
|
22149
|
rlm@46
|
22150 toString : function(){
|
rlm@46
|
22151 return "[Tree"+(this.id?" "+this.id:"")+"]";
|
rlm@46
|
22152 },
|
rlm@46
|
22153
|
rlm@46
|
22154
|
rlm@46
|
22155 restrictExpand : function(node){
|
rlm@46
|
22156 var p = node.parentNode;
|
rlm@46
|
22157 if(p){
|
rlm@46
|
22158 if(p.expandedChild && p.expandedChild.parentNode == p){
|
rlm@46
|
22159 p.expandedChild.collapse();
|
rlm@46
|
22160 }
|
rlm@46
|
22161 p.expandedChild = node;
|
rlm@46
|
22162 }
|
rlm@46
|
22163 },
|
rlm@46
|
22164
|
rlm@46
|
22165
|
rlm@46
|
22166 getChecked : function(a, startNode){
|
rlm@46
|
22167 startNode = startNode || this.root;
|
rlm@46
|
22168 var r = [];
|
rlm@46
|
22169 var f = function(){
|
rlm@46
|
22170 if(this.attributes.checked){
|
rlm@46
|
22171 r.push(!a ? this : (a == 'id' ? this.id : this.attributes[a]));
|
rlm@46
|
22172 }
|
rlm@46
|
22173 }
|
rlm@46
|
22174 startNode.cascade(f);
|
rlm@46
|
22175 return r;
|
rlm@46
|
22176 },
|
rlm@46
|
22177
|
rlm@46
|
22178
|
rlm@46
|
22179 getEl : function(){
|
rlm@46
|
22180 return this.el;
|
rlm@46
|
22181 },
|
rlm@46
|
22182
|
rlm@46
|
22183
|
rlm@46
|
22184 getLoader : function(){
|
rlm@46
|
22185 return this.loader;
|
rlm@46
|
22186 },
|
rlm@46
|
22187
|
rlm@46
|
22188
|
rlm@46
|
22189 expandAll : function(){
|
rlm@46
|
22190 this.root.expand(true);
|
rlm@46
|
22191 },
|
rlm@46
|
22192
|
rlm@46
|
22193
|
rlm@46
|
22194 collapseAll : function(){
|
rlm@46
|
22195 this.root.collapse(true);
|
rlm@46
|
22196 },
|
rlm@46
|
22197
|
rlm@46
|
22198
|
rlm@46
|
22199 getSelectionModel : function(){
|
rlm@46
|
22200 if(!this.selModel){
|
rlm@46
|
22201 this.selModel = new Ext.tree.DefaultSelectionModel();
|
rlm@46
|
22202 }
|
rlm@46
|
22203 return this.selModel;
|
rlm@46
|
22204 },
|
rlm@46
|
22205
|
rlm@46
|
22206
|
rlm@46
|
22207 expandPath : function(path, attr, callback){
|
rlm@46
|
22208 attr = attr || "id";
|
rlm@46
|
22209 var keys = path.split(this.pathSeparator);
|
rlm@46
|
22210 var curNode = this.root;
|
rlm@46
|
22211 if(curNode.attributes[attr] != keys[1]){
|
rlm@46
|
22212 if(callback){
|
rlm@46
|
22213 callback(false, null);
|
rlm@46
|
22214 }
|
rlm@46
|
22215 return;
|
rlm@46
|
22216 }
|
rlm@46
|
22217 var index = 1;
|
rlm@46
|
22218 var f = function(){
|
rlm@46
|
22219 if(++index == keys.length){
|
rlm@46
|
22220 if(callback){
|
rlm@46
|
22221 callback(true, curNode);
|
rlm@46
|
22222 }
|
rlm@46
|
22223 return;
|
rlm@46
|
22224 }
|
rlm@46
|
22225 var c = curNode.findChild(attr, keys[index]);
|
rlm@46
|
22226 if(!c){
|
rlm@46
|
22227 if(callback){
|
rlm@46
|
22228 callback(false, curNode);
|
rlm@46
|
22229 }
|
rlm@46
|
22230 return;
|
rlm@46
|
22231 }
|
rlm@46
|
22232 curNode = c;
|
rlm@46
|
22233 c.expand(false, false, f);
|
rlm@46
|
22234 };
|
rlm@46
|
22235 curNode.expand(false, false, f);
|
rlm@46
|
22236 },
|
rlm@46
|
22237
|
rlm@46
|
22238
|
rlm@46
|
22239 selectPath : function(path, attr, callback){
|
rlm@46
|
22240 attr = attr || "id";
|
rlm@46
|
22241 var keys = path.split(this.pathSeparator);
|
rlm@46
|
22242 var v = keys.pop();
|
rlm@46
|
22243 if(keys.length > 0){
|
rlm@46
|
22244 var f = function(success, node){
|
rlm@46
|
22245 if(success && node){
|
rlm@46
|
22246 var n = node.findChild(attr, v);
|
rlm@46
|
22247 if(n){
|
rlm@46
|
22248 n.select();
|
rlm@46
|
22249 if(callback){
|
rlm@46
|
22250 callback(true, n);
|
rlm@46
|
22251 }
|
rlm@46
|
22252 }else if(callback){
|
rlm@46
|
22253 callback(false, n);
|
rlm@46
|
22254 }
|
rlm@46
|
22255 }else{
|
rlm@46
|
22256 if(callback){
|
rlm@46
|
22257 callback(false, n);
|
rlm@46
|
22258 }
|
rlm@46
|
22259 }
|
rlm@46
|
22260 };
|
rlm@46
|
22261 this.expandPath(keys.join(this.pathSeparator), attr, f);
|
rlm@46
|
22262 }else{
|
rlm@46
|
22263 this.root.select();
|
rlm@46
|
22264 if(callback){
|
rlm@46
|
22265 callback(true, this.root);
|
rlm@46
|
22266 }
|
rlm@46
|
22267 }
|
rlm@46
|
22268 },
|
rlm@46
|
22269
|
rlm@46
|
22270
|
rlm@46
|
22271 getTreeEl : function(){
|
rlm@46
|
22272 return this.body;
|
rlm@46
|
22273 },
|
rlm@46
|
22274
|
rlm@46
|
22275
|
rlm@46
|
22276 onRender : function(ct, position){
|
rlm@46
|
22277 Ext.tree.TreePanel.superclass.onRender.call(this, ct, position);
|
rlm@46
|
22278 this.el.addClass('x-tree');
|
rlm@46
|
22279 this.innerCt = this.body.createChild({tag:"ul",
|
rlm@46
|
22280 cls:"x-tree-root-ct " +
|
rlm@46
|
22281 (this.useArrows ? 'x-tree-arrows' : this.lines ? "x-tree-lines" : "x-tree-no-lines")});
|
rlm@46
|
22282 },
|
rlm@46
|
22283
|
rlm@46
|
22284
|
rlm@46
|
22285 initEvents : function(){
|
rlm@46
|
22286 Ext.tree.TreePanel.superclass.initEvents.call(this);
|
rlm@46
|
22287
|
rlm@46
|
22288 if(this.containerScroll){
|
rlm@46
|
22289 Ext.dd.ScrollManager.register(this.body);
|
rlm@46
|
22290 }
|
rlm@46
|
22291 if((this.enableDD || this.enableDrop) && !this.dropZone){
|
rlm@46
|
22292
|
rlm@46
|
22293 this.dropZone = new Ext.tree.TreeDropZone(this, this.dropConfig || {
|
rlm@46
|
22294 ddGroup: this.ddGroup || "TreeDD", appendOnly: this.ddAppendOnly === true
|
rlm@46
|
22295 });
|
rlm@46
|
22296 }
|
rlm@46
|
22297 if((this.enableDD || this.enableDrag) && !this.dragZone){
|
rlm@46
|
22298
|
rlm@46
|
22299 this.dragZone = new Ext.tree.TreeDragZone(this, this.dragConfig || {
|
rlm@46
|
22300 ddGroup: this.ddGroup || "TreeDD",
|
rlm@46
|
22301 scroll: this.ddScroll
|
rlm@46
|
22302 });
|
rlm@46
|
22303 }
|
rlm@46
|
22304 this.getSelectionModel().init(this);
|
rlm@46
|
22305 },
|
rlm@46
|
22306
|
rlm@46
|
22307
|
rlm@46
|
22308 afterRender : function(){
|
rlm@46
|
22309 Ext.tree.TreePanel.superclass.afterRender.call(this);
|
rlm@46
|
22310 this.root.render();
|
rlm@46
|
22311 if(!this.rootVisible){
|
rlm@46
|
22312 this.root.renderChildren();
|
rlm@46
|
22313 }
|
rlm@46
|
22314 },
|
rlm@46
|
22315
|
rlm@46
|
22316 onDestroy : function(){
|
rlm@46
|
22317 if(this.rendered){
|
rlm@46
|
22318 this.body.removeAllListeners();
|
rlm@46
|
22319 Ext.dd.ScrollManager.unregister(this.body);
|
rlm@46
|
22320 if(this.dropZone){
|
rlm@46
|
22321 this.dropZone.unreg();
|
rlm@46
|
22322 }
|
rlm@46
|
22323 if(this.dragZone){
|
rlm@46
|
22324 this.dragZone.unreg();
|
rlm@46
|
22325 }
|
rlm@46
|
22326 }
|
rlm@46
|
22327 this.root.destroy();
|
rlm@46
|
22328 this.nodeHash = null;
|
rlm@46
|
22329 Ext.tree.TreePanel.superclass.onDestroy.call(this);
|
rlm@46
|
22330 }
|
rlm@46
|
22331
|
rlm@46
|
22332
|
rlm@46
|
22333
|
rlm@46
|
22334
|
rlm@46
|
22335
|
rlm@46
|
22336
|
rlm@46
|
22337
|
rlm@46
|
22338
|
rlm@46
|
22339
|
rlm@46
|
22340
|
rlm@46
|
22341
|
rlm@46
|
22342
|
rlm@46
|
22343
|
rlm@46
|
22344
|
rlm@46
|
22345
|
rlm@46
|
22346
|
rlm@46
|
22347
|
rlm@46
|
22348
|
rlm@46
|
22349
|
rlm@46
|
22350
|
rlm@46
|
22351
|
rlm@46
|
22352
|
rlm@46
|
22353
|
rlm@46
|
22354
|
rlm@46
|
22355
|
rlm@46
|
22356
|
rlm@46
|
22357
|
rlm@46
|
22358
|
rlm@46
|
22359
|
rlm@46
|
22360
|
rlm@46
|
22361
|
rlm@46
|
22362
|
rlm@46
|
22363
|
rlm@46
|
22364
|
rlm@46
|
22365
|
rlm@46
|
22366
|
rlm@46
|
22367
|
rlm@46
|
22368
|
rlm@46
|
22369
|
rlm@46
|
22370
|
rlm@46
|
22371
|
rlm@46
|
22372
|
rlm@46
|
22373
|
rlm@46
|
22374
|
rlm@46
|
22375
|
rlm@46
|
22376
|
rlm@46
|
22377
|
rlm@46
|
22378 });
|
rlm@46
|
22379 Ext.reg('treepanel', Ext.tree.TreePanel);
|
rlm@46
|
22380 Ext.tree.TreeEventModel = function(tree){
|
rlm@46
|
22381 this.tree = tree;
|
rlm@46
|
22382 this.tree.on('render', this.initEvents, this);
|
rlm@46
|
22383 }
|
rlm@46
|
22384
|
rlm@46
|
22385 Ext.tree.TreeEventModel.prototype = {
|
rlm@46
|
22386 initEvents : function(){
|
rlm@46
|
22387 var el = this.tree.getTreeEl();
|
rlm@46
|
22388 el.on('click', this.delegateClick, this);
|
rlm@46
|
22389 if(this.tree.trackMouseOver !== false){
|
rlm@46
|
22390 el.on('mouseover', this.delegateOver, this);
|
rlm@46
|
22391 el.on('mouseout', this.delegateOut, this);
|
rlm@46
|
22392 }
|
rlm@46
|
22393 el.on('dblclick', this.delegateDblClick, this);
|
rlm@46
|
22394 el.on('contextmenu', this.delegateContextMenu, this);
|
rlm@46
|
22395 },
|
rlm@46
|
22396
|
rlm@46
|
22397 getNode : function(e){
|
rlm@46
|
22398 var t;
|
rlm@46
|
22399 if(t = e.getTarget('.x-tree-node-el', 10)){
|
rlm@46
|
22400 var id = Ext.fly(t, '_treeEvents').getAttributeNS('ext', 'tree-node-id');
|
rlm@46
|
22401 if(id){
|
rlm@46
|
22402 return this.tree.getNodeById(id);
|
rlm@46
|
22403 }
|
rlm@46
|
22404 }
|
rlm@46
|
22405 return null;
|
rlm@46
|
22406 },
|
rlm@46
|
22407
|
rlm@46
|
22408 getNodeTarget : function(e){
|
rlm@46
|
22409 var t = e.getTarget('.x-tree-node-icon', 1);
|
rlm@46
|
22410 if(!t){
|
rlm@46
|
22411 t = e.getTarget('.x-tree-node-el', 6);
|
rlm@46
|
22412 }
|
rlm@46
|
22413 return t;
|
rlm@46
|
22414 },
|
rlm@46
|
22415
|
rlm@46
|
22416 delegateOut : function(e, t){
|
rlm@46
|
22417 if(!this.beforeEvent(e)){
|
rlm@46
|
22418 return;
|
rlm@46
|
22419 }
|
rlm@46
|
22420 if(e.getTarget('.x-tree-ec-icon', 1)){
|
rlm@46
|
22421 var n = this.getNode(e);
|
rlm@46
|
22422 this.onIconOut(e, n);
|
rlm@46
|
22423 if(n == this.lastEcOver){
|
rlm@46
|
22424 delete this.lastEcOver;
|
rlm@46
|
22425 }
|
rlm@46
|
22426 }
|
rlm@46
|
22427 if((t = this.getNodeTarget(e)) && !e.within(t, true)){
|
rlm@46
|
22428 this.onNodeOut(e, this.getNode(e));
|
rlm@46
|
22429 }
|
rlm@46
|
22430 },
|
rlm@46
|
22431
|
rlm@46
|
22432 delegateOver : function(e, t){
|
rlm@46
|
22433 if(!this.beforeEvent(e)){
|
rlm@46
|
22434 return;
|
rlm@46
|
22435 }
|
rlm@46
|
22436 if(this.lastEcOver){
|
rlm@46
|
22437 this.onIconOut(e, this.lastEcOver);
|
rlm@46
|
22438 delete this.lastEcOver;
|
rlm@46
|
22439 }
|
rlm@46
|
22440 if(e.getTarget('.x-tree-ec-icon', 1)){
|
rlm@46
|
22441 this.lastEcOver = this.getNode(e);
|
rlm@46
|
22442 this.onIconOver(e, this.lastEcOver);
|
rlm@46
|
22443 }
|
rlm@46
|
22444 if(t = this.getNodeTarget(e)){
|
rlm@46
|
22445 this.onNodeOver(e, this.getNode(e));
|
rlm@46
|
22446 }
|
rlm@46
|
22447 },
|
rlm@46
|
22448
|
rlm@46
|
22449 delegateClick : function(e, t){
|
rlm@46
|
22450 if(!this.beforeEvent(e)){
|
rlm@46
|
22451 return;
|
rlm@46
|
22452 }
|
rlm@46
|
22453
|
rlm@46
|
22454 if(e.getTarget('input[type=checkbox]', 1)){
|
rlm@46
|
22455 this.onCheckboxClick(e, this.getNode(e));
|
rlm@46
|
22456 }
|
rlm@46
|
22457 else if(e.getTarget('.x-tree-ec-icon', 1)){
|
rlm@46
|
22458 this.onIconClick(e, this.getNode(e));
|
rlm@46
|
22459 }
|
rlm@46
|
22460 else if(this.getNodeTarget(e)){
|
rlm@46
|
22461 this.onNodeClick(e, this.getNode(e));
|
rlm@46
|
22462 }
|
rlm@46
|
22463 },
|
rlm@46
|
22464
|
rlm@46
|
22465 delegateDblClick : function(e, t){
|
rlm@46
|
22466 if(this.beforeEvent(e) && this.getNodeTarget(e)){
|
rlm@46
|
22467 this.onNodeDblClick(e, this.getNode(e));
|
rlm@46
|
22468 }
|
rlm@46
|
22469 },
|
rlm@46
|
22470
|
rlm@46
|
22471 delegateContextMenu : function(e, t){
|
rlm@46
|
22472 if(this.beforeEvent(e) && this.getNodeTarget(e)){
|
rlm@46
|
22473 this.onNodeContextMenu(e, this.getNode(e));
|
rlm@46
|
22474 }
|
rlm@46
|
22475 },
|
rlm@46
|
22476
|
rlm@46
|
22477 onNodeClick : function(e, node){
|
rlm@46
|
22478 node.ui.onClick(e);
|
rlm@46
|
22479 },
|
rlm@46
|
22480
|
rlm@46
|
22481 onNodeOver : function(e, node){
|
rlm@46
|
22482 node.ui.onOver(e);
|
rlm@46
|
22483 },
|
rlm@46
|
22484
|
rlm@46
|
22485 onNodeOut : function(e, node){
|
rlm@46
|
22486 node.ui.onOut(e);
|
rlm@46
|
22487 },
|
rlm@46
|
22488
|
rlm@46
|
22489 onIconOver : function(e, node){
|
rlm@46
|
22490 node.ui.addClass('x-tree-ec-over');
|
rlm@46
|
22491 },
|
rlm@46
|
22492
|
rlm@46
|
22493 onIconOut : function(e, node){
|
rlm@46
|
22494 node.ui.removeClass('x-tree-ec-over');
|
rlm@46
|
22495 },
|
rlm@46
|
22496
|
rlm@46
|
22497 onIconClick : function(e, node){
|
rlm@46
|
22498 node.ui.ecClick(e);
|
rlm@46
|
22499 },
|
rlm@46
|
22500
|
rlm@46
|
22501 onCheckboxClick : function(e, node){
|
rlm@46
|
22502 node.ui.onCheckChange(e);
|
rlm@46
|
22503 },
|
rlm@46
|
22504
|
rlm@46
|
22505 onNodeDblClick : function(e, node){
|
rlm@46
|
22506 node.ui.onDblClick(e);
|
rlm@46
|
22507 },
|
rlm@46
|
22508
|
rlm@46
|
22509 onNodeContextMenu : function(e, node){
|
rlm@46
|
22510 node.ui.onContextMenu(e);
|
rlm@46
|
22511 },
|
rlm@46
|
22512
|
rlm@46
|
22513 beforeEvent : function(e){
|
rlm@46
|
22514 if(this.disabled){
|
rlm@46
|
22515 e.stopEvent();
|
rlm@46
|
22516 return false;
|
rlm@46
|
22517 }
|
rlm@46
|
22518 return true;
|
rlm@46
|
22519 },
|
rlm@46
|
22520
|
rlm@46
|
22521 disable: function(){
|
rlm@46
|
22522 this.disabled = true;
|
rlm@46
|
22523 },
|
rlm@46
|
22524
|
rlm@46
|
22525 enable: function(){
|
rlm@46
|
22526 this.disabled = false;
|
rlm@46
|
22527 }
|
rlm@46
|
22528 };
|
rlm@46
|
22529
|
rlm@46
|
22530 Ext.tree.DefaultSelectionModel = function(config){
|
rlm@46
|
22531 this.selNode = null;
|
rlm@46
|
22532
|
rlm@46
|
22533 this.addEvents(
|
rlm@46
|
22534
|
rlm@46
|
22535 "selectionchange",
|
rlm@46
|
22536
|
rlm@46
|
22537
|
rlm@46
|
22538 "beforeselect"
|
rlm@46
|
22539 );
|
rlm@46
|
22540
|
rlm@46
|
22541 Ext.apply(this, config);
|
rlm@46
|
22542 Ext.tree.DefaultSelectionModel.superclass.constructor.call(this);
|
rlm@46
|
22543 };
|
rlm@46
|
22544
|
rlm@46
|
22545 Ext.extend(Ext.tree.DefaultSelectionModel, Ext.util.Observable, {
|
rlm@46
|
22546 init : function(tree){
|
rlm@46
|
22547 this.tree = tree;
|
rlm@46
|
22548 tree.getTreeEl().on("keydown", this.onKeyDown, this);
|
rlm@46
|
22549 tree.on("click", this.onNodeClick, this);
|
rlm@46
|
22550 },
|
rlm@46
|
22551
|
rlm@46
|
22552 onNodeClick : function(node, e){
|
rlm@46
|
22553 this.select(node);
|
rlm@46
|
22554 },
|
rlm@46
|
22555
|
rlm@46
|
22556
|
rlm@46
|
22557 select : function(node){
|
rlm@46
|
22558 var last = this.selNode;
|
rlm@46
|
22559 if(last != node && this.fireEvent('beforeselect', this, node, last) !== false){
|
rlm@46
|
22560 if(last){
|
rlm@46
|
22561 last.ui.onSelectedChange(false);
|
rlm@46
|
22562 }
|
rlm@46
|
22563 this.selNode = node;
|
rlm@46
|
22564 node.ui.onSelectedChange(true);
|
rlm@46
|
22565 this.fireEvent("selectionchange", this, node, last);
|
rlm@46
|
22566 }
|
rlm@46
|
22567 return node;
|
rlm@46
|
22568 },
|
rlm@46
|
22569
|
rlm@46
|
22570
|
rlm@46
|
22571 unselect : function(node){
|
rlm@46
|
22572 if(this.selNode == node){
|
rlm@46
|
22573 this.clearSelections();
|
rlm@46
|
22574 }
|
rlm@46
|
22575 },
|
rlm@46
|
22576
|
rlm@46
|
22577
|
rlm@46
|
22578 clearSelections : function(){
|
rlm@46
|
22579 var n = this.selNode;
|
rlm@46
|
22580 if(n){
|
rlm@46
|
22581 n.ui.onSelectedChange(false);
|
rlm@46
|
22582 this.selNode = null;
|
rlm@46
|
22583 this.fireEvent("selectionchange", this, null);
|
rlm@46
|
22584 }
|
rlm@46
|
22585 return n;
|
rlm@46
|
22586 },
|
rlm@46
|
22587
|
rlm@46
|
22588
|
rlm@46
|
22589 getSelectedNode : function(){
|
rlm@46
|
22590 return this.selNode;
|
rlm@46
|
22591 },
|
rlm@46
|
22592
|
rlm@46
|
22593
|
rlm@46
|
22594 isSelected : function(node){
|
rlm@46
|
22595 return this.selNode == node;
|
rlm@46
|
22596 },
|
rlm@46
|
22597
|
rlm@46
|
22598
|
rlm@46
|
22599 selectPrevious : function(){
|
rlm@46
|
22600 var s = this.selNode || this.lastSelNode;
|
rlm@46
|
22601 if(!s){
|
rlm@46
|
22602 return null;
|
rlm@46
|
22603 }
|
rlm@46
|
22604 var ps = s.previousSibling;
|
rlm@46
|
22605 if(ps){
|
rlm@46
|
22606 if(!ps.isExpanded() || ps.childNodes.length < 1){
|
rlm@46
|
22607 return this.select(ps);
|
rlm@46
|
22608 } else{
|
rlm@46
|
22609 var lc = ps.lastChild;
|
rlm@46
|
22610 while(lc && lc.isExpanded() && lc.childNodes.length > 0){
|
rlm@46
|
22611 lc = lc.lastChild;
|
rlm@46
|
22612 }
|
rlm@46
|
22613 return this.select(lc);
|
rlm@46
|
22614 }
|
rlm@46
|
22615 } else if(s.parentNode && (this.tree.rootVisible || !s.parentNode.isRoot)){
|
rlm@46
|
22616 return this.select(s.parentNode);
|
rlm@46
|
22617 }
|
rlm@46
|
22618 return null;
|
rlm@46
|
22619 },
|
rlm@46
|
22620
|
rlm@46
|
22621
|
rlm@46
|
22622 selectNext : function(){
|
rlm@46
|
22623 var s = this.selNode || this.lastSelNode;
|
rlm@46
|
22624 if(!s){
|
rlm@46
|
22625 return null;
|
rlm@46
|
22626 }
|
rlm@46
|
22627 if(s.firstChild && s.isExpanded()){
|
rlm@46
|
22628 return this.select(s.firstChild);
|
rlm@46
|
22629 }else if(s.nextSibling){
|
rlm@46
|
22630 return this.select(s.nextSibling);
|
rlm@46
|
22631 }else if(s.parentNode){
|
rlm@46
|
22632 var newS = null;
|
rlm@46
|
22633 s.parentNode.bubble(function(){
|
rlm@46
|
22634 if(this.nextSibling){
|
rlm@46
|
22635 newS = this.getOwnerTree().selModel.select(this.nextSibling);
|
rlm@46
|
22636 return false;
|
rlm@46
|
22637 }
|
rlm@46
|
22638 });
|
rlm@46
|
22639 return newS;
|
rlm@46
|
22640 }
|
rlm@46
|
22641 return null;
|
rlm@46
|
22642 },
|
rlm@46
|
22643
|
rlm@46
|
22644 onKeyDown : function(e){
|
rlm@46
|
22645 var s = this.selNode || this.lastSelNode;
|
rlm@46
|
22646
|
rlm@46
|
22647 var sm = this;
|
rlm@46
|
22648 if(!s){
|
rlm@46
|
22649 return;
|
rlm@46
|
22650 }
|
rlm@46
|
22651 var k = e.getKey();
|
rlm@46
|
22652 switch(k){
|
rlm@46
|
22653 case e.DOWN:
|
rlm@46
|
22654 e.stopEvent();
|
rlm@46
|
22655 this.selectNext();
|
rlm@46
|
22656 break;
|
rlm@46
|
22657 case e.UP:
|
rlm@46
|
22658 e.stopEvent();
|
rlm@46
|
22659 this.selectPrevious();
|
rlm@46
|
22660 break;
|
rlm@46
|
22661 case e.RIGHT:
|
rlm@46
|
22662 e.preventDefault();
|
rlm@46
|
22663 if(s.hasChildNodes()){
|
rlm@46
|
22664 if(!s.isExpanded()){
|
rlm@46
|
22665 s.expand();
|
rlm@46
|
22666 }else if(s.firstChild){
|
rlm@46
|
22667 this.select(s.firstChild, e);
|
rlm@46
|
22668 }
|
rlm@46
|
22669 }
|
rlm@46
|
22670 break;
|
rlm@46
|
22671 case e.LEFT:
|
rlm@46
|
22672 e.preventDefault();
|
rlm@46
|
22673 if(s.hasChildNodes() && s.isExpanded()){
|
rlm@46
|
22674 s.collapse();
|
rlm@46
|
22675 }else if(s.parentNode && (this.tree.rootVisible || s.parentNode != this.tree.getRootNode())){
|
rlm@46
|
22676 this.select(s.parentNode, e);
|
rlm@46
|
22677 }
|
rlm@46
|
22678 break;
|
rlm@46
|
22679 };
|
rlm@46
|
22680 }
|
rlm@46
|
22681 });
|
rlm@46
|
22682
|
rlm@46
|
22683
|
rlm@46
|
22684 Ext.tree.MultiSelectionModel = function(config){
|
rlm@46
|
22685 this.selNodes = [];
|
rlm@46
|
22686 this.selMap = {};
|
rlm@46
|
22687 this.addEvents(
|
rlm@46
|
22688
|
rlm@46
|
22689 "selectionchange"
|
rlm@46
|
22690 );
|
rlm@46
|
22691 Ext.apply(this, config);
|
rlm@46
|
22692 Ext.tree.MultiSelectionModel.superclass.constructor.call(this);
|
rlm@46
|
22693 };
|
rlm@46
|
22694
|
rlm@46
|
22695 Ext.extend(Ext.tree.MultiSelectionModel, Ext.util.Observable, {
|
rlm@46
|
22696 init : function(tree){
|
rlm@46
|
22697 this.tree = tree;
|
rlm@46
|
22698 tree.getTreeEl().on("keydown", this.onKeyDown, this);
|
rlm@46
|
22699 tree.on("click", this.onNodeClick, this);
|
rlm@46
|
22700 },
|
rlm@46
|
22701
|
rlm@46
|
22702 onNodeClick : function(node, e){
|
rlm@46
|
22703 this.select(node, e, e.ctrlKey);
|
rlm@46
|
22704 },
|
rlm@46
|
22705
|
rlm@46
|
22706
|
rlm@46
|
22707 select : function(node, e, keepExisting){
|
rlm@46
|
22708 if(keepExisting !== true){
|
rlm@46
|
22709 this.clearSelections(true);
|
rlm@46
|
22710 }
|
rlm@46
|
22711 if(this.isSelected(node)){
|
rlm@46
|
22712 this.lastSelNode = node;
|
rlm@46
|
22713 return node;
|
rlm@46
|
22714 }
|
rlm@46
|
22715 this.selNodes.push(node);
|
rlm@46
|
22716 this.selMap[node.id] = node;
|
rlm@46
|
22717 this.lastSelNode = node;
|
rlm@46
|
22718 node.ui.onSelectedChange(true);
|
rlm@46
|
22719 this.fireEvent("selectionchange", this, this.selNodes);
|
rlm@46
|
22720 return node;
|
rlm@46
|
22721 },
|
rlm@46
|
22722
|
rlm@46
|
22723
|
rlm@46
|
22724 unselect : function(node){
|
rlm@46
|
22725 if(this.selMap[node.id]){
|
rlm@46
|
22726 node.ui.onSelectedChange(false);
|
rlm@46
|
22727 var sn = this.selNodes;
|
rlm@46
|
22728 var index = sn.indexOf(node);
|
rlm@46
|
22729 if(index != -1){
|
rlm@46
|
22730 this.selNodes.splice(index, 1);
|
rlm@46
|
22731 }
|
rlm@46
|
22732 delete this.selMap[node.id];
|
rlm@46
|
22733 this.fireEvent("selectionchange", this, this.selNodes);
|
rlm@46
|
22734 }
|
rlm@46
|
22735 },
|
rlm@46
|
22736
|
rlm@46
|
22737
|
rlm@46
|
22738 clearSelections : function(suppressEvent){
|
rlm@46
|
22739 var sn = this.selNodes;
|
rlm@46
|
22740 if(sn.length > 0){
|
rlm@46
|
22741 for(var i = 0, len = sn.length; i < len; i++){
|
rlm@46
|
22742 sn[i].ui.onSelectedChange(false);
|
rlm@46
|
22743 }
|
rlm@46
|
22744 this.selNodes = [];
|
rlm@46
|
22745 this.selMap = {};
|
rlm@46
|
22746 if(suppressEvent !== true){
|
rlm@46
|
22747 this.fireEvent("selectionchange", this, this.selNodes);
|
rlm@46
|
22748 }
|
rlm@46
|
22749 }
|
rlm@46
|
22750 },
|
rlm@46
|
22751
|
rlm@46
|
22752
|
rlm@46
|
22753 isSelected : function(node){
|
rlm@46
|
22754 return this.selMap[node.id] ? true : false;
|
rlm@46
|
22755 },
|
rlm@46
|
22756
|
rlm@46
|
22757
|
rlm@46
|
22758 getSelectedNodes : function(){
|
rlm@46
|
22759 return this.selNodes;
|
rlm@46
|
22760 },
|
rlm@46
|
22761
|
rlm@46
|
22762 onKeyDown : Ext.tree.DefaultSelectionModel.prototype.onKeyDown,
|
rlm@46
|
22763
|
rlm@46
|
22764 selectNext : Ext.tree.DefaultSelectionModel.prototype.selectNext,
|
rlm@46
|
22765
|
rlm@46
|
22766 selectPrevious : Ext.tree.DefaultSelectionModel.prototype.selectPrevious
|
rlm@46
|
22767 });
|
rlm@46
|
22768
|
rlm@46
|
22769 Ext.tree.TreeNode = function(attributes){
|
rlm@46
|
22770 attributes = attributes || {};
|
rlm@46
|
22771 if(typeof attributes == "string"){
|
rlm@46
|
22772 attributes = {text: attributes};
|
rlm@46
|
22773 }
|
rlm@46
|
22774 this.childrenRendered = false;
|
rlm@46
|
22775 this.rendered = false;
|
rlm@46
|
22776 Ext.tree.TreeNode.superclass.constructor.call(this, attributes);
|
rlm@46
|
22777 this.expanded = attributes.expanded === true;
|
rlm@46
|
22778 this.isTarget = attributes.isTarget !== false;
|
rlm@46
|
22779 this.draggable = attributes.draggable !== false && attributes.allowDrag !== false;
|
rlm@46
|
22780 this.allowChildren = attributes.allowChildren !== false && attributes.allowDrop !== false;
|
rlm@46
|
22781
|
rlm@46
|
22782
|
rlm@46
|
22783 this.text = attributes.text;
|
rlm@46
|
22784
|
rlm@46
|
22785 this.disabled = attributes.disabled === true;
|
rlm@46
|
22786
|
rlm@46
|
22787 this.addEvents(
|
rlm@46
|
22788
|
rlm@46
|
22789 "textchange",
|
rlm@46
|
22790
|
rlm@46
|
22791 "beforeexpand",
|
rlm@46
|
22792
|
rlm@46
|
22793 "beforecollapse",
|
rlm@46
|
22794
|
rlm@46
|
22795 "expand",
|
rlm@46
|
22796
|
rlm@46
|
22797 "disabledchange",
|
rlm@46
|
22798
|
rlm@46
|
22799 "collapse",
|
rlm@46
|
22800
|
rlm@46
|
22801 "beforeclick",
|
rlm@46
|
22802
|
rlm@46
|
22803 "click",
|
rlm@46
|
22804
|
rlm@46
|
22805 "checkchange",
|
rlm@46
|
22806
|
rlm@46
|
22807 "dblclick",
|
rlm@46
|
22808
|
rlm@46
|
22809 "contextmenu",
|
rlm@46
|
22810
|
rlm@46
|
22811 "beforechildrenrendered"
|
rlm@46
|
22812 );
|
rlm@46
|
22813
|
rlm@46
|
22814 var uiClass = this.attributes.uiProvider || this.defaultUI || Ext.tree.TreeNodeUI;
|
rlm@46
|
22815
|
rlm@46
|
22816
|
rlm@46
|
22817 this.ui = new uiClass(this);
|
rlm@46
|
22818 };
|
rlm@46
|
22819 Ext.extend(Ext.tree.TreeNode, Ext.data.Node, {
|
rlm@46
|
22820 preventHScroll: true,
|
rlm@46
|
22821
|
rlm@46
|
22822 isExpanded : function(){
|
rlm@46
|
22823 return this.expanded;
|
rlm@46
|
22824 },
|
rlm@46
|
22825
|
rlm@46
|
22826
|
rlm@46
|
22827 getUI : function(){
|
rlm@46
|
22828 return this.ui;
|
rlm@46
|
22829 },
|
rlm@46
|
22830
|
rlm@46
|
22831
|
rlm@46
|
22832 setFirstChild : function(node){
|
rlm@46
|
22833 var of = this.firstChild;
|
rlm@46
|
22834 Ext.tree.TreeNode.superclass.setFirstChild.call(this, node);
|
rlm@46
|
22835 if(this.childrenRendered && of && node != of){
|
rlm@46
|
22836 of.renderIndent(true, true);
|
rlm@46
|
22837 }
|
rlm@46
|
22838 if(this.rendered){
|
rlm@46
|
22839 this.renderIndent(true, true);
|
rlm@46
|
22840 }
|
rlm@46
|
22841 },
|
rlm@46
|
22842
|
rlm@46
|
22843
|
rlm@46
|
22844 setLastChild : function(node){
|
rlm@46
|
22845 var ol = this.lastChild;
|
rlm@46
|
22846 Ext.tree.TreeNode.superclass.setLastChild.call(this, node);
|
rlm@46
|
22847 if(this.childrenRendered && ol && node != ol){
|
rlm@46
|
22848 ol.renderIndent(true, true);
|
rlm@46
|
22849 }
|
rlm@46
|
22850 if(this.rendered){
|
rlm@46
|
22851 this.renderIndent(true, true);
|
rlm@46
|
22852 }
|
rlm@46
|
22853 },
|
rlm@46
|
22854
|
rlm@46
|
22855
|
rlm@46
|
22856
|
rlm@46
|
22857 appendChild : function(){
|
rlm@46
|
22858 var node = Ext.tree.TreeNode.superclass.appendChild.apply(this, arguments);
|
rlm@46
|
22859 if(node && this.childrenRendered){
|
rlm@46
|
22860 node.render();
|
rlm@46
|
22861 }
|
rlm@46
|
22862 this.ui.updateExpandIcon();
|
rlm@46
|
22863 return node;
|
rlm@46
|
22864 },
|
rlm@46
|
22865
|
rlm@46
|
22866
|
rlm@46
|
22867 removeChild : function(node){
|
rlm@46
|
22868 this.ownerTree.getSelectionModel().unselect(node);
|
rlm@46
|
22869 Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments);
|
rlm@46
|
22870
|
rlm@46
|
22871 if(this.childrenRendered){
|
rlm@46
|
22872 node.ui.remove();
|
rlm@46
|
22873 }
|
rlm@46
|
22874 if(this.childNodes.length < 1){
|
rlm@46
|
22875 this.collapse(false, false);
|
rlm@46
|
22876 }else{
|
rlm@46
|
22877 this.ui.updateExpandIcon();
|
rlm@46
|
22878 }
|
rlm@46
|
22879 if(!this.firstChild && !this.isHiddenRoot()) {
|
rlm@46
|
22880 this.childrenRendered = false;
|
rlm@46
|
22881 }
|
rlm@46
|
22882 return node;
|
rlm@46
|
22883 },
|
rlm@46
|
22884
|
rlm@46
|
22885
|
rlm@46
|
22886 insertBefore : function(node, refNode){
|
rlm@46
|
22887 var newNode = Ext.tree.TreeNode.superclass.insertBefore.apply(this, arguments);
|
rlm@46
|
22888 if(newNode && refNode && this.childrenRendered){
|
rlm@46
|
22889 node.render();
|
rlm@46
|
22890 }
|
rlm@46
|
22891 this.ui.updateExpandIcon();
|
rlm@46
|
22892 return newNode;
|
rlm@46
|
22893 },
|
rlm@46
|
22894
|
rlm@46
|
22895
|
rlm@46
|
22896 setText : function(text){
|
rlm@46
|
22897 var oldText = this.text;
|
rlm@46
|
22898 this.text = text;
|
rlm@46
|
22899 this.attributes.text = text;
|
rlm@46
|
22900 if(this.rendered){
|
rlm@46
|
22901 this.ui.onTextChange(this, text, oldText);
|
rlm@46
|
22902 }
|
rlm@46
|
22903 this.fireEvent("textchange", this, text, oldText);
|
rlm@46
|
22904 },
|
rlm@46
|
22905
|
rlm@46
|
22906
|
rlm@46
|
22907 select : function(){
|
rlm@46
|
22908 this.getOwnerTree().getSelectionModel().select(this);
|
rlm@46
|
22909 },
|
rlm@46
|
22910
|
rlm@46
|
22911
|
rlm@46
|
22912 unselect : function(){
|
rlm@46
|
22913 this.getOwnerTree().getSelectionModel().unselect(this);
|
rlm@46
|
22914 },
|
rlm@46
|
22915
|
rlm@46
|
22916
|
rlm@46
|
22917 isSelected : function(){
|
rlm@46
|
22918 return this.getOwnerTree().getSelectionModel().isSelected(this);
|
rlm@46
|
22919 },
|
rlm@46
|
22920
|
rlm@46
|
22921
|
rlm@46
|
22922 expand : function(deep, anim, callback){
|
rlm@46
|
22923 if(!this.expanded){
|
rlm@46
|
22924 if(this.fireEvent("beforeexpand", this, deep, anim) === false){
|
rlm@46
|
22925 return;
|
rlm@46
|
22926 }
|
rlm@46
|
22927 if(!this.childrenRendered){
|
rlm@46
|
22928 this.renderChildren();
|
rlm@46
|
22929 }
|
rlm@46
|
22930 this.expanded = true;
|
rlm@46
|
22931 if(!this.isHiddenRoot() && (this.getOwnerTree().animate && anim !== false) || anim){
|
rlm@46
|
22932 this.ui.animExpand(function(){
|
rlm@46
|
22933 this.fireEvent("expand", this);
|
rlm@46
|
22934 if(typeof callback == "function"){
|
rlm@46
|
22935 callback(this);
|
rlm@46
|
22936 }
|
rlm@46
|
22937 if(deep === true){
|
rlm@46
|
22938 this.expandChildNodes(true);
|
rlm@46
|
22939 }
|
rlm@46
|
22940 }.createDelegate(this));
|
rlm@46
|
22941 return;
|
rlm@46
|
22942 }else{
|
rlm@46
|
22943 this.ui.expand();
|
rlm@46
|
22944 this.fireEvent("expand", this);
|
rlm@46
|
22945 if(typeof callback == "function"){
|
rlm@46
|
22946 callback(this);
|
rlm@46
|
22947 }
|
rlm@46
|
22948 }
|
rlm@46
|
22949 }else{
|
rlm@46
|
22950 if(typeof callback == "function"){
|
rlm@46
|
22951 callback(this);
|
rlm@46
|
22952 }
|
rlm@46
|
22953 }
|
rlm@46
|
22954 if(deep === true){
|
rlm@46
|
22955 this.expandChildNodes(true);
|
rlm@46
|
22956 }
|
rlm@46
|
22957 },
|
rlm@46
|
22958
|
rlm@46
|
22959 isHiddenRoot : function(){
|
rlm@46
|
22960 return this.isRoot && !this.getOwnerTree().rootVisible;
|
rlm@46
|
22961 },
|
rlm@46
|
22962
|
rlm@46
|
22963
|
rlm@46
|
22964 collapse : function(deep, anim){
|
rlm@46
|
22965 if(this.expanded && !this.isHiddenRoot()){
|
rlm@46
|
22966 if(this.fireEvent("beforecollapse", this, deep, anim) === false){
|
rlm@46
|
22967 return;
|
rlm@46
|
22968 }
|
rlm@46
|
22969 this.expanded = false;
|
rlm@46
|
22970 if((this.getOwnerTree().animate && anim !== false) || anim){
|
rlm@46
|
22971 this.ui.animCollapse(function(){
|
rlm@46
|
22972 this.fireEvent("collapse", this);
|
rlm@46
|
22973 if(deep === true){
|
rlm@46
|
22974 this.collapseChildNodes(true);
|
rlm@46
|
22975 }
|
rlm@46
|
22976 }.createDelegate(this));
|
rlm@46
|
22977 return;
|
rlm@46
|
22978 }else{
|
rlm@46
|
22979 this.ui.collapse();
|
rlm@46
|
22980 this.fireEvent("collapse", this);
|
rlm@46
|
22981 }
|
rlm@46
|
22982 }
|
rlm@46
|
22983 if(deep === true){
|
rlm@46
|
22984 var cs = this.childNodes;
|
rlm@46
|
22985 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
22986 cs[i].collapse(true, false);
|
rlm@46
|
22987 }
|
rlm@46
|
22988 }
|
rlm@46
|
22989 },
|
rlm@46
|
22990
|
rlm@46
|
22991
|
rlm@46
|
22992 delayedExpand : function(delay){
|
rlm@46
|
22993 if(!this.expandProcId){
|
rlm@46
|
22994 this.expandProcId = this.expand.defer(delay, this);
|
rlm@46
|
22995 }
|
rlm@46
|
22996 },
|
rlm@46
|
22997
|
rlm@46
|
22998
|
rlm@46
|
22999 cancelExpand : function(){
|
rlm@46
|
23000 if(this.expandProcId){
|
rlm@46
|
23001 clearTimeout(this.expandProcId);
|
rlm@46
|
23002 }
|
rlm@46
|
23003 this.expandProcId = false;
|
rlm@46
|
23004 },
|
rlm@46
|
23005
|
rlm@46
|
23006
|
rlm@46
|
23007 toggle : function(){
|
rlm@46
|
23008 if(this.expanded){
|
rlm@46
|
23009 this.collapse();
|
rlm@46
|
23010 }else{
|
rlm@46
|
23011 this.expand();
|
rlm@46
|
23012 }
|
rlm@46
|
23013 },
|
rlm@46
|
23014
|
rlm@46
|
23015
|
rlm@46
|
23016 ensureVisible : function(callback){
|
rlm@46
|
23017 var tree = this.getOwnerTree();
|
rlm@46
|
23018 tree.expandPath(this.parentNode.getPath(), false, function(){
|
rlm@46
|
23019 var node = tree.getNodeById(this.id);
|
rlm@46
|
23020 tree.getTreeEl().scrollChildIntoView(node.ui.anchor);
|
rlm@46
|
23021 Ext.callback(callback);
|
rlm@46
|
23022 }.createDelegate(this));
|
rlm@46
|
23023 },
|
rlm@46
|
23024
|
rlm@46
|
23025
|
rlm@46
|
23026 expandChildNodes : function(deep){
|
rlm@46
|
23027 var cs = this.childNodes;
|
rlm@46
|
23028 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
23029 cs[i].expand(deep);
|
rlm@46
|
23030 }
|
rlm@46
|
23031 },
|
rlm@46
|
23032
|
rlm@46
|
23033
|
rlm@46
|
23034 collapseChildNodes : function(deep){
|
rlm@46
|
23035 var cs = this.childNodes;
|
rlm@46
|
23036 for(var i = 0, len = cs.length; i < len; i++) {
|
rlm@46
|
23037 cs[i].collapse(deep);
|
rlm@46
|
23038 }
|
rlm@46
|
23039 },
|
rlm@46
|
23040
|
rlm@46
|
23041
|
rlm@46
|
23042 disable : function(){
|
rlm@46
|
23043 this.disabled = true;
|
rlm@46
|
23044 this.unselect();
|
rlm@46
|
23045 if(this.rendered && this.ui.onDisableChange){
|
rlm@46
|
23046 this.ui.onDisableChange(this, true);
|
rlm@46
|
23047 }
|
rlm@46
|
23048 this.fireEvent("disabledchange", this, true);
|
rlm@46
|
23049 },
|
rlm@46
|
23050
|
rlm@46
|
23051
|
rlm@46
|
23052 enable : function(){
|
rlm@46
|
23053 this.disabled = false;
|
rlm@46
|
23054 if(this.rendered && this.ui.onDisableChange){
|
rlm@46
|
23055 this.ui.onDisableChange(this, false);
|
rlm@46
|
23056 }
|
rlm@46
|
23057 this.fireEvent("disabledchange", this, false);
|
rlm@46
|
23058 },
|
rlm@46
|
23059
|
rlm@46
|
23060
|
rlm@46
|
23061 renderChildren : function(suppressEvent){
|
rlm@46
|
23062 if(suppressEvent !== false){
|
rlm@46
|
23063 this.fireEvent("beforechildrenrendered", this);
|
rlm@46
|
23064 }
|
rlm@46
|
23065 var cs = this.childNodes;
|
rlm@46
|
23066 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
23067 cs[i].render(true);
|
rlm@46
|
23068 }
|
rlm@46
|
23069 this.childrenRendered = true;
|
rlm@46
|
23070 },
|
rlm@46
|
23071
|
rlm@46
|
23072
|
rlm@46
|
23073 sort : function(fn, scope){
|
rlm@46
|
23074 Ext.tree.TreeNode.superclass.sort.apply(this, arguments);
|
rlm@46
|
23075 if(this.childrenRendered){
|
rlm@46
|
23076 var cs = this.childNodes;
|
rlm@46
|
23077 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
23078 cs[i].render(true);
|
rlm@46
|
23079 }
|
rlm@46
|
23080 }
|
rlm@46
|
23081 },
|
rlm@46
|
23082
|
rlm@46
|
23083
|
rlm@46
|
23084 render : function(bulkRender){
|
rlm@46
|
23085 this.ui.render(bulkRender);
|
rlm@46
|
23086 if(!this.rendered){
|
rlm@46
|
23087
|
rlm@46
|
23088 this.getOwnerTree().registerNode(this);
|
rlm@46
|
23089 this.rendered = true;
|
rlm@46
|
23090 if(this.expanded){
|
rlm@46
|
23091 this.expanded = false;
|
rlm@46
|
23092 this.expand(false, false);
|
rlm@46
|
23093 }
|
rlm@46
|
23094 }
|
rlm@46
|
23095 },
|
rlm@46
|
23096
|
rlm@46
|
23097
|
rlm@46
|
23098 renderIndent : function(deep, refresh){
|
rlm@46
|
23099 if(refresh){
|
rlm@46
|
23100 this.ui.childIndent = null;
|
rlm@46
|
23101 }
|
rlm@46
|
23102 this.ui.renderIndent();
|
rlm@46
|
23103 if(deep === true && this.childrenRendered){
|
rlm@46
|
23104 var cs = this.childNodes;
|
rlm@46
|
23105 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
23106 cs[i].renderIndent(true, refresh);
|
rlm@46
|
23107 }
|
rlm@46
|
23108 }
|
rlm@46
|
23109 },
|
rlm@46
|
23110
|
rlm@46
|
23111 beginUpdate : function(){
|
rlm@46
|
23112 this.childrenRendered = false;
|
rlm@46
|
23113 },
|
rlm@46
|
23114
|
rlm@46
|
23115 endUpdate : function(){
|
rlm@46
|
23116 if(this.expanded && this.rendered){
|
rlm@46
|
23117 this.renderChildren();
|
rlm@46
|
23118 }
|
rlm@46
|
23119 },
|
rlm@46
|
23120
|
rlm@46
|
23121 destroy : function(){
|
rlm@46
|
23122 for(var i = 0,l = this.childNodes.length; i < l; i++){
|
rlm@46
|
23123 this.childNodes[i].destroy();
|
rlm@46
|
23124 }
|
rlm@46
|
23125 this.childNodes = null;
|
rlm@46
|
23126 if(this.ui.destroy){
|
rlm@46
|
23127 this.ui.destroy();
|
rlm@46
|
23128 }
|
rlm@46
|
23129 }
|
rlm@46
|
23130 });
|
rlm@46
|
23131
|
rlm@46
|
23132 Ext.tree.AsyncTreeNode = function(config){
|
rlm@46
|
23133 this.loaded = false;
|
rlm@46
|
23134 this.loading = false;
|
rlm@46
|
23135 Ext.tree.AsyncTreeNode.superclass.constructor.apply(this, arguments);
|
rlm@46
|
23136
|
rlm@46
|
23137 this.addEvents('beforeload', 'load');
|
rlm@46
|
23138
|
rlm@46
|
23139
|
rlm@46
|
23140 };
|
rlm@46
|
23141 Ext.extend(Ext.tree.AsyncTreeNode, Ext.tree.TreeNode, {
|
rlm@46
|
23142 expand : function(deep, anim, callback){
|
rlm@46
|
23143 if(this.loading){
|
rlm@46
|
23144 var timer;
|
rlm@46
|
23145 var f = function(){
|
rlm@46
|
23146 if(!this.loading){
|
rlm@46
|
23147 clearInterval(timer);
|
rlm@46
|
23148 this.expand(deep, anim, callback);
|
rlm@46
|
23149 }
|
rlm@46
|
23150 }.createDelegate(this);
|
rlm@46
|
23151 timer = setInterval(f, 200);
|
rlm@46
|
23152 return;
|
rlm@46
|
23153 }
|
rlm@46
|
23154 if(!this.loaded){
|
rlm@46
|
23155 if(this.fireEvent("beforeload", this) === false){
|
rlm@46
|
23156 return;
|
rlm@46
|
23157 }
|
rlm@46
|
23158 this.loading = true;
|
rlm@46
|
23159 this.ui.beforeLoad(this);
|
rlm@46
|
23160 var loader = this.loader || this.attributes.loader || this.getOwnerTree().getLoader();
|
rlm@46
|
23161 if(loader){
|
rlm@46
|
23162 loader.load(this, this.loadComplete.createDelegate(this, [deep, anim, callback]));
|
rlm@46
|
23163 return;
|
rlm@46
|
23164 }
|
rlm@46
|
23165 }
|
rlm@46
|
23166 Ext.tree.AsyncTreeNode.superclass.expand.call(this, deep, anim, callback);
|
rlm@46
|
23167 },
|
rlm@46
|
23168
|
rlm@46
|
23169
|
rlm@46
|
23170 isLoading : function(){
|
rlm@46
|
23171 return this.loading;
|
rlm@46
|
23172 },
|
rlm@46
|
23173
|
rlm@46
|
23174 loadComplete : function(deep, anim, callback){
|
rlm@46
|
23175 this.loading = false;
|
rlm@46
|
23176 this.loaded = true;
|
rlm@46
|
23177 this.ui.afterLoad(this);
|
rlm@46
|
23178 this.fireEvent("load", this);
|
rlm@46
|
23179 this.expand(deep, anim, callback);
|
rlm@46
|
23180 },
|
rlm@46
|
23181
|
rlm@46
|
23182
|
rlm@46
|
23183 isLoaded : function(){
|
rlm@46
|
23184 return this.loaded;
|
rlm@46
|
23185 },
|
rlm@46
|
23186
|
rlm@46
|
23187 hasChildNodes : function(){
|
rlm@46
|
23188 if(!this.isLeaf() && !this.loaded){
|
rlm@46
|
23189 return true;
|
rlm@46
|
23190 }else{
|
rlm@46
|
23191 return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this);
|
rlm@46
|
23192 }
|
rlm@46
|
23193 },
|
rlm@46
|
23194
|
rlm@46
|
23195
|
rlm@46
|
23196 reload : function(callback){
|
rlm@46
|
23197 this.collapse(false, false);
|
rlm@46
|
23198 while(this.firstChild){
|
rlm@46
|
23199 this.removeChild(this.firstChild);
|
rlm@46
|
23200 }
|
rlm@46
|
23201 this.childrenRendered = false;
|
rlm@46
|
23202 this.loaded = false;
|
rlm@46
|
23203 if(this.isHiddenRoot()){
|
rlm@46
|
23204 this.expanded = false;
|
rlm@46
|
23205 }
|
rlm@46
|
23206 this.expand(false, false, callback);
|
rlm@46
|
23207 }
|
rlm@46
|
23208 });
|
rlm@46
|
23209
|
rlm@46
|
23210 Ext.tree.TreeNodeUI = function(node){
|
rlm@46
|
23211 this.node = node;
|
rlm@46
|
23212 this.rendered = false;
|
rlm@46
|
23213 this.animating = false;
|
rlm@46
|
23214 this.wasLeaf = true;
|
rlm@46
|
23215 this.ecc = 'x-tree-ec-icon x-tree-elbow';
|
rlm@46
|
23216 this.emptyIcon = Ext.BLANK_IMAGE_URL;
|
rlm@46
|
23217 };
|
rlm@46
|
23218
|
rlm@46
|
23219 Ext.tree.TreeNodeUI.prototype = {
|
rlm@46
|
23220
|
rlm@46
|
23221 removeChild : function(node){
|
rlm@46
|
23222 if(this.rendered){
|
rlm@46
|
23223 this.ctNode.removeChild(node.ui.getEl());
|
rlm@46
|
23224 }
|
rlm@46
|
23225 },
|
rlm@46
|
23226
|
rlm@46
|
23227
|
rlm@46
|
23228 beforeLoad : function(){
|
rlm@46
|
23229 this.addClass("x-tree-node-loading");
|
rlm@46
|
23230 },
|
rlm@46
|
23231
|
rlm@46
|
23232
|
rlm@46
|
23233 afterLoad : function(){
|
rlm@46
|
23234 this.removeClass("x-tree-node-loading");
|
rlm@46
|
23235 },
|
rlm@46
|
23236
|
rlm@46
|
23237
|
rlm@46
|
23238 onTextChange : function(node, text, oldText){
|
rlm@46
|
23239 if(this.rendered){
|
rlm@46
|
23240 this.textNode.innerHTML = text;
|
rlm@46
|
23241 }
|
rlm@46
|
23242 },
|
rlm@46
|
23243
|
rlm@46
|
23244
|
rlm@46
|
23245 onDisableChange : function(node, state){
|
rlm@46
|
23246 this.disabled = state;
|
rlm@46
|
23247 if (this.checkbox) {
|
rlm@46
|
23248 this.checkbox.disabled = state;
|
rlm@46
|
23249 }
|
rlm@46
|
23250 if(state){
|
rlm@46
|
23251 this.addClass("x-tree-node-disabled");
|
rlm@46
|
23252 }else{
|
rlm@46
|
23253 this.removeClass("x-tree-node-disabled");
|
rlm@46
|
23254 }
|
rlm@46
|
23255 },
|
rlm@46
|
23256
|
rlm@46
|
23257
|
rlm@46
|
23258 onSelectedChange : function(state){
|
rlm@46
|
23259 if(state){
|
rlm@46
|
23260 this.focus();
|
rlm@46
|
23261 this.addClass("x-tree-selected");
|
rlm@46
|
23262 }else{
|
rlm@46
|
23263
|
rlm@46
|
23264 this.removeClass("x-tree-selected");
|
rlm@46
|
23265 }
|
rlm@46
|
23266 },
|
rlm@46
|
23267
|
rlm@46
|
23268
|
rlm@46
|
23269 onMove : function(tree, node, oldParent, newParent, index, refNode){
|
rlm@46
|
23270 this.childIndent = null;
|
rlm@46
|
23271 if(this.rendered){
|
rlm@46
|
23272 var targetNode = newParent.ui.getContainer();
|
rlm@46
|
23273 if(!targetNode){
|
rlm@46
|
23274 this.holder = document.createElement("div");
|
rlm@46
|
23275 this.holder.appendChild(this.wrap);
|
rlm@46
|
23276 return;
|
rlm@46
|
23277 }
|
rlm@46
|
23278 var insertBefore = refNode ? refNode.ui.getEl() : null;
|
rlm@46
|
23279 if(insertBefore){
|
rlm@46
|
23280 targetNode.insertBefore(this.wrap, insertBefore);
|
rlm@46
|
23281 }else{
|
rlm@46
|
23282 targetNode.appendChild(this.wrap);
|
rlm@46
|
23283 }
|
rlm@46
|
23284 this.node.renderIndent(true);
|
rlm@46
|
23285 }
|
rlm@46
|
23286 },
|
rlm@46
|
23287
|
rlm@46
|
23288
|
rlm@46
|
23289 addClass : function(cls){
|
rlm@46
|
23290 if(this.elNode){
|
rlm@46
|
23291 Ext.fly(this.elNode).addClass(cls);
|
rlm@46
|
23292 }
|
rlm@46
|
23293 },
|
rlm@46
|
23294
|
rlm@46
|
23295
|
rlm@46
|
23296 removeClass : function(cls){
|
rlm@46
|
23297 if(this.elNode){
|
rlm@46
|
23298 Ext.fly(this.elNode).removeClass(cls);
|
rlm@46
|
23299 }
|
rlm@46
|
23300 },
|
rlm@46
|
23301
|
rlm@46
|
23302
|
rlm@46
|
23303 remove : function(){
|
rlm@46
|
23304 if(this.rendered){
|
rlm@46
|
23305 this.holder = document.createElement("div");
|
rlm@46
|
23306 this.holder.appendChild(this.wrap);
|
rlm@46
|
23307 }
|
rlm@46
|
23308 },
|
rlm@46
|
23309
|
rlm@46
|
23310
|
rlm@46
|
23311 fireEvent : function(){
|
rlm@46
|
23312 return this.node.fireEvent.apply(this.node, arguments);
|
rlm@46
|
23313 },
|
rlm@46
|
23314
|
rlm@46
|
23315
|
rlm@46
|
23316 initEvents : function(){
|
rlm@46
|
23317 this.node.on("move", this.onMove, this);
|
rlm@46
|
23318
|
rlm@46
|
23319 if(this.node.disabled){
|
rlm@46
|
23320 this.addClass("x-tree-node-disabled");
|
rlm@46
|
23321 if (this.checkbox) {
|
rlm@46
|
23322 this.checkbox.disabled = true;
|
rlm@46
|
23323 }
|
rlm@46
|
23324 }
|
rlm@46
|
23325 if(this.node.hidden){
|
rlm@46
|
23326 this.hide();
|
rlm@46
|
23327 }
|
rlm@46
|
23328 var ot = this.node.getOwnerTree();
|
rlm@46
|
23329 var dd = ot.enableDD || ot.enableDrag || ot.enableDrop;
|
rlm@46
|
23330 if(dd && (!this.node.isRoot || ot.rootVisible)){
|
rlm@46
|
23331 Ext.dd.Registry.register(this.elNode, {
|
rlm@46
|
23332 node: this.node,
|
rlm@46
|
23333 handles: this.getDDHandles(),
|
rlm@46
|
23334 isHandle: false
|
rlm@46
|
23335 });
|
rlm@46
|
23336 }
|
rlm@46
|
23337 },
|
rlm@46
|
23338
|
rlm@46
|
23339
|
rlm@46
|
23340 getDDHandles : function(){
|
rlm@46
|
23341 return [this.iconNode, this.textNode, this.elNode];
|
rlm@46
|
23342 },
|
rlm@46
|
23343
|
rlm@46
|
23344
|
rlm@46
|
23345 hide : function(){
|
rlm@46
|
23346 this.node.hidden = true;
|
rlm@46
|
23347 if(this.wrap){
|
rlm@46
|
23348 this.wrap.style.display = "none";
|
rlm@46
|
23349 }
|
rlm@46
|
23350 },
|
rlm@46
|
23351
|
rlm@46
|
23352
|
rlm@46
|
23353 show : function(){
|
rlm@46
|
23354 this.node.hidden = false;
|
rlm@46
|
23355 if(this.wrap){
|
rlm@46
|
23356 this.wrap.style.display = "";
|
rlm@46
|
23357 }
|
rlm@46
|
23358 },
|
rlm@46
|
23359
|
rlm@46
|
23360
|
rlm@46
|
23361 onContextMenu : function(e){
|
rlm@46
|
23362 if (this.node.hasListener("contextmenu") || this.node.getOwnerTree().hasListener("contextmenu")) {
|
rlm@46
|
23363 e.preventDefault();
|
rlm@46
|
23364 this.focus();
|
rlm@46
|
23365 this.fireEvent("contextmenu", this.node, e);
|
rlm@46
|
23366 }
|
rlm@46
|
23367 },
|
rlm@46
|
23368
|
rlm@46
|
23369
|
rlm@46
|
23370 onClick : function(e){
|
rlm@46
|
23371 if(this.dropping){
|
rlm@46
|
23372 e.stopEvent();
|
rlm@46
|
23373 return;
|
rlm@46
|
23374 }
|
rlm@46
|
23375 if(this.fireEvent("beforeclick", this.node, e) !== false){
|
rlm@46
|
23376 var a = e.getTarget('a');
|
rlm@46
|
23377 if(!this.disabled && this.node.attributes.href && a){
|
rlm@46
|
23378 this.fireEvent("click", this.node, e);
|
rlm@46
|
23379 return;
|
rlm@46
|
23380 }else if(a && e.ctrlKey){
|
rlm@46
|
23381 e.stopEvent();
|
rlm@46
|
23382 }
|
rlm@46
|
23383 e.preventDefault();
|
rlm@46
|
23384 if(this.disabled){
|
rlm@46
|
23385 return;
|
rlm@46
|
23386 }
|
rlm@46
|
23387
|
rlm@46
|
23388 if(this.node.attributes.singleClickExpand && !this.animating && this.node.hasChildNodes()){
|
rlm@46
|
23389 this.node.toggle();
|
rlm@46
|
23390 }
|
rlm@46
|
23391
|
rlm@46
|
23392 this.fireEvent("click", this.node, e);
|
rlm@46
|
23393 }else{
|
rlm@46
|
23394 e.stopEvent();
|
rlm@46
|
23395 }
|
rlm@46
|
23396 },
|
rlm@46
|
23397
|
rlm@46
|
23398
|
rlm@46
|
23399 onDblClick : function(e){
|
rlm@46
|
23400 e.preventDefault();
|
rlm@46
|
23401 if(this.disabled){
|
rlm@46
|
23402 return;
|
rlm@46
|
23403 }
|
rlm@46
|
23404 if(this.checkbox){
|
rlm@46
|
23405 this.toggleCheck();
|
rlm@46
|
23406 }
|
rlm@46
|
23407 if(!this.animating && this.node.hasChildNodes()){
|
rlm@46
|
23408 this.node.toggle();
|
rlm@46
|
23409 }
|
rlm@46
|
23410 this.fireEvent("dblclick", this.node, e);
|
rlm@46
|
23411 },
|
rlm@46
|
23412
|
rlm@46
|
23413 onOver : function(e){
|
rlm@46
|
23414 this.addClass('x-tree-node-over');
|
rlm@46
|
23415 },
|
rlm@46
|
23416
|
rlm@46
|
23417 onOut : function(e){
|
rlm@46
|
23418 this.removeClass('x-tree-node-over');
|
rlm@46
|
23419 },
|
rlm@46
|
23420
|
rlm@46
|
23421
|
rlm@46
|
23422 onCheckChange : function(){
|
rlm@46
|
23423 var checked = this.checkbox.checked;
|
rlm@46
|
23424
|
rlm@46
|
23425 this.checkbox.defaultChecked = checked;
|
rlm@46
|
23426 this.node.attributes.checked = checked;
|
rlm@46
|
23427 this.fireEvent('checkchange', this.node, checked);
|
rlm@46
|
23428 },
|
rlm@46
|
23429
|
rlm@46
|
23430
|
rlm@46
|
23431 ecClick : function(e){
|
rlm@46
|
23432 if(!this.animating && (this.node.hasChildNodes() || this.node.attributes.expandable)){
|
rlm@46
|
23433 this.node.toggle();
|
rlm@46
|
23434 }
|
rlm@46
|
23435 },
|
rlm@46
|
23436
|
rlm@46
|
23437
|
rlm@46
|
23438 startDrop : function(){
|
rlm@46
|
23439 this.dropping = true;
|
rlm@46
|
23440 },
|
rlm@46
|
23441
|
rlm@46
|
23442
|
rlm@46
|
23443 endDrop : function(){
|
rlm@46
|
23444 setTimeout(function(){
|
rlm@46
|
23445 this.dropping = false;
|
rlm@46
|
23446 }.createDelegate(this), 50);
|
rlm@46
|
23447 },
|
rlm@46
|
23448
|
rlm@46
|
23449
|
rlm@46
|
23450 expand : function(){
|
rlm@46
|
23451 this.updateExpandIcon();
|
rlm@46
|
23452 this.ctNode.style.display = "";
|
rlm@46
|
23453 },
|
rlm@46
|
23454
|
rlm@46
|
23455
|
rlm@46
|
23456 focus : function(){
|
rlm@46
|
23457 if(!this.node.preventHScroll){
|
rlm@46
|
23458 try{this.anchor.focus();
|
rlm@46
|
23459 }catch(e){}
|
rlm@46
|
23460 }else if(!Ext.isIE){
|
rlm@46
|
23461 try{
|
rlm@46
|
23462 var noscroll = this.node.getOwnerTree().getTreeEl().dom;
|
rlm@46
|
23463 var l = noscroll.scrollLeft;
|
rlm@46
|
23464 this.anchor.focus();
|
rlm@46
|
23465 noscroll.scrollLeft = l;
|
rlm@46
|
23466 }catch(e){}
|
rlm@46
|
23467 }
|
rlm@46
|
23468 },
|
rlm@46
|
23469
|
rlm@46
|
23470
|
rlm@46
|
23471 toggleCheck : function(value){
|
rlm@46
|
23472 var cb = this.checkbox;
|
rlm@46
|
23473 if(cb){
|
rlm@46
|
23474 cb.checked = (value === undefined ? !cb.checked : value);
|
rlm@46
|
23475 this.onCheckChange();
|
rlm@46
|
23476 }
|
rlm@46
|
23477 },
|
rlm@46
|
23478
|
rlm@46
|
23479
|
rlm@46
|
23480 blur : function(){
|
rlm@46
|
23481 try{
|
rlm@46
|
23482 this.anchor.blur();
|
rlm@46
|
23483 }catch(e){}
|
rlm@46
|
23484 },
|
rlm@46
|
23485
|
rlm@46
|
23486
|
rlm@46
|
23487 animExpand : function(callback){
|
rlm@46
|
23488 var ct = Ext.get(this.ctNode);
|
rlm@46
|
23489 ct.stopFx();
|
rlm@46
|
23490 if(!this.node.hasChildNodes()){
|
rlm@46
|
23491 this.updateExpandIcon();
|
rlm@46
|
23492 this.ctNode.style.display = "";
|
rlm@46
|
23493 Ext.callback(callback);
|
rlm@46
|
23494 return;
|
rlm@46
|
23495 }
|
rlm@46
|
23496 this.animating = true;
|
rlm@46
|
23497 this.updateExpandIcon();
|
rlm@46
|
23498
|
rlm@46
|
23499 ct.slideIn('t', {
|
rlm@46
|
23500 callback : function(){
|
rlm@46
|
23501 this.animating = false;
|
rlm@46
|
23502 Ext.callback(callback);
|
rlm@46
|
23503 },
|
rlm@46
|
23504 scope: this,
|
rlm@46
|
23505 duration: this.node.ownerTree.duration || .25
|
rlm@46
|
23506 });
|
rlm@46
|
23507 },
|
rlm@46
|
23508
|
rlm@46
|
23509
|
rlm@46
|
23510 highlight : function(){
|
rlm@46
|
23511 var tree = this.node.getOwnerTree();
|
rlm@46
|
23512 Ext.fly(this.wrap).highlight(
|
rlm@46
|
23513 tree.hlColor || "C3DAF9",
|
rlm@46
|
23514 {endColor: tree.hlBaseColor}
|
rlm@46
|
23515 );
|
rlm@46
|
23516 },
|
rlm@46
|
23517
|
rlm@46
|
23518
|
rlm@46
|
23519 collapse : function(){
|
rlm@46
|
23520 this.updateExpandIcon();
|
rlm@46
|
23521 this.ctNode.style.display = "none";
|
rlm@46
|
23522 },
|
rlm@46
|
23523
|
rlm@46
|
23524
|
rlm@46
|
23525 animCollapse : function(callback){
|
rlm@46
|
23526 var ct = Ext.get(this.ctNode);
|
rlm@46
|
23527 ct.enableDisplayMode('block');
|
rlm@46
|
23528 ct.stopFx();
|
rlm@46
|
23529
|
rlm@46
|
23530 this.animating = true;
|
rlm@46
|
23531 this.updateExpandIcon();
|
rlm@46
|
23532
|
rlm@46
|
23533 ct.slideOut('t', {
|
rlm@46
|
23534 callback : function(){
|
rlm@46
|
23535 this.animating = false;
|
rlm@46
|
23536 Ext.callback(callback);
|
rlm@46
|
23537 },
|
rlm@46
|
23538 scope: this,
|
rlm@46
|
23539 duration: this.node.ownerTree.duration || .25
|
rlm@46
|
23540 });
|
rlm@46
|
23541 },
|
rlm@46
|
23542
|
rlm@46
|
23543
|
rlm@46
|
23544 getContainer : function(){
|
rlm@46
|
23545 return this.ctNode;
|
rlm@46
|
23546 },
|
rlm@46
|
23547
|
rlm@46
|
23548
|
rlm@46
|
23549 getEl : function(){
|
rlm@46
|
23550 return this.wrap;
|
rlm@46
|
23551 },
|
rlm@46
|
23552
|
rlm@46
|
23553
|
rlm@46
|
23554 appendDDGhost : function(ghostNode){
|
rlm@46
|
23555 ghostNode.appendChild(this.elNode.cloneNode(true));
|
rlm@46
|
23556 },
|
rlm@46
|
23557
|
rlm@46
|
23558
|
rlm@46
|
23559 getDDRepairXY : function(){
|
rlm@46
|
23560 return Ext.lib.Dom.getXY(this.iconNode);
|
rlm@46
|
23561 },
|
rlm@46
|
23562
|
rlm@46
|
23563
|
rlm@46
|
23564 onRender : function(){
|
rlm@46
|
23565 this.render();
|
rlm@46
|
23566 },
|
rlm@46
|
23567
|
rlm@46
|
23568
|
rlm@46
|
23569 render : function(bulkRender){
|
rlm@46
|
23570 var n = this.node, a = n.attributes;
|
rlm@46
|
23571 var targetNode = n.parentNode ?
|
rlm@46
|
23572 n.parentNode.ui.getContainer() : n.ownerTree.innerCt.dom;
|
rlm@46
|
23573
|
rlm@46
|
23574 if(!this.rendered){
|
rlm@46
|
23575 this.rendered = true;
|
rlm@46
|
23576
|
rlm@46
|
23577 this.renderElements(n, a, targetNode, bulkRender);
|
rlm@46
|
23578
|
rlm@46
|
23579 if(a.qtip){
|
rlm@46
|
23580 if(this.textNode.setAttributeNS){
|
rlm@46
|
23581 this.textNode.setAttributeNS("ext", "qtip", a.qtip);
|
rlm@46
|
23582 if(a.qtipTitle){
|
rlm@46
|
23583 this.textNode.setAttributeNS("ext", "qtitle", a.qtipTitle);
|
rlm@46
|
23584 }
|
rlm@46
|
23585 }else{
|
rlm@46
|
23586 this.textNode.setAttribute("ext:qtip", a.qtip);
|
rlm@46
|
23587 if(a.qtipTitle){
|
rlm@46
|
23588 this.textNode.setAttribute("ext:qtitle", a.qtipTitle);
|
rlm@46
|
23589 }
|
rlm@46
|
23590 }
|
rlm@46
|
23591 }else if(a.qtipCfg){
|
rlm@46
|
23592 a.qtipCfg.target = Ext.id(this.textNode);
|
rlm@46
|
23593 Ext.QuickTips.register(a.qtipCfg);
|
rlm@46
|
23594 }
|
rlm@46
|
23595 this.initEvents();
|
rlm@46
|
23596 if(!this.node.expanded){
|
rlm@46
|
23597 this.updateExpandIcon(true);
|
rlm@46
|
23598 }
|
rlm@46
|
23599 }else{
|
rlm@46
|
23600 if(bulkRender === true) {
|
rlm@46
|
23601 targetNode.appendChild(this.wrap);
|
rlm@46
|
23602 }
|
rlm@46
|
23603 }
|
rlm@46
|
23604 },
|
rlm@46
|
23605
|
rlm@46
|
23606
|
rlm@46
|
23607 renderElements : function(n, a, targetNode, bulkRender){
|
rlm@46
|
23608
|
rlm@46
|
23609 this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';
|
rlm@46
|
23610
|
rlm@46
|
23611 var cb = typeof a.checked == 'boolean';
|
rlm@46
|
23612
|
rlm@46
|
23613 var href = a.href ? a.href : Ext.isGecko ? "" : "#";
|
rlm@46
|
23614 var buf = ['<li class="x-tree-node"><div ext:tree-node-id="',n.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ', a.cls,'" unselectable="on">',
|
rlm@46
|
23615 '<span class="x-tree-node-indent">',this.indentMarkup,"</span>",
|
rlm@46
|
23616 '<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" />',
|
rlm@46
|
23617 '<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),(a.iconCls ? " "+a.iconCls : ""),'" unselectable="on" />',
|
rlm@46
|
23618 cb ? ('<input class="x-tree-node-cb" type="checkbox" ' + (a.checked ? 'checked="checked" />' : '/>')) : '',
|
rlm@46
|
23619 '<a hidefocus="on" class="x-tree-node-anchor" href="',href,'" tabIndex="1" ',
|
rlm@46
|
23620 a.hrefTarget ? ' target="'+a.hrefTarget+'"' : "", '><span unselectable="on">',n.text,"</span></a></div>",
|
rlm@46
|
23621 '<ul class="x-tree-node-ct" style="display:none;"></ul>',
|
rlm@46
|
23622 "</li>"].join('');
|
rlm@46
|
23623
|
rlm@46
|
23624 var nel;
|
rlm@46
|
23625 if(bulkRender !== true && n.nextSibling && (nel = n.nextSibling.ui.getEl())){
|
rlm@46
|
23626 this.wrap = Ext.DomHelper.insertHtml("beforeBegin", nel, buf);
|
rlm@46
|
23627 }else{
|
rlm@46
|
23628 this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf);
|
rlm@46
|
23629 }
|
rlm@46
|
23630
|
rlm@46
|
23631 this.elNode = this.wrap.childNodes[0];
|
rlm@46
|
23632 this.ctNode = this.wrap.childNodes[1];
|
rlm@46
|
23633 var cs = this.elNode.childNodes;
|
rlm@46
|
23634 this.indentNode = cs[0];
|
rlm@46
|
23635 this.ecNode = cs[1];
|
rlm@46
|
23636 this.iconNode = cs[2];
|
rlm@46
|
23637 var index = 3;
|
rlm@46
|
23638 if(cb){
|
rlm@46
|
23639 this.checkbox = cs[3];
|
rlm@46
|
23640
|
rlm@46
|
23641 this.checkbox.defaultChecked = this.checkbox.checked;
|
rlm@46
|
23642 index++;
|
rlm@46
|
23643 }
|
rlm@46
|
23644 this.anchor = cs[index];
|
rlm@46
|
23645 this.textNode = cs[index].firstChild;
|
rlm@46
|
23646 },
|
rlm@46
|
23647
|
rlm@46
|
23648
|
rlm@46
|
23649 getAnchor : function(){
|
rlm@46
|
23650 return this.anchor;
|
rlm@46
|
23651 },
|
rlm@46
|
23652
|
rlm@46
|
23653
|
rlm@46
|
23654 getTextEl : function(){
|
rlm@46
|
23655 return this.textNode;
|
rlm@46
|
23656 },
|
rlm@46
|
23657
|
rlm@46
|
23658
|
rlm@46
|
23659 getIconEl : function(){
|
rlm@46
|
23660 return this.iconNode;
|
rlm@46
|
23661 },
|
rlm@46
|
23662
|
rlm@46
|
23663
|
rlm@46
|
23664 isChecked : function(){
|
rlm@46
|
23665 return this.checkbox ? this.checkbox.checked : false;
|
rlm@46
|
23666 },
|
rlm@46
|
23667
|
rlm@46
|
23668
|
rlm@46
|
23669 updateExpandIcon : function(){
|
rlm@46
|
23670 if(this.rendered){
|
rlm@46
|
23671 var n = this.node, c1, c2;
|
rlm@46
|
23672 var cls = n.isLast() ? "x-tree-elbow-end" : "x-tree-elbow";
|
rlm@46
|
23673 var hasChild = n.hasChildNodes();
|
rlm@46
|
23674 if(hasChild || n.attributes.expandable){
|
rlm@46
|
23675 if(n.expanded){
|
rlm@46
|
23676 cls += "-minus";
|
rlm@46
|
23677 c1 = "x-tree-node-collapsed";
|
rlm@46
|
23678 c2 = "x-tree-node-expanded";
|
rlm@46
|
23679 }else{
|
rlm@46
|
23680 cls += "-plus";
|
rlm@46
|
23681 c1 = "x-tree-node-expanded";
|
rlm@46
|
23682 c2 = "x-tree-node-collapsed";
|
rlm@46
|
23683 }
|
rlm@46
|
23684 if(this.wasLeaf){
|
rlm@46
|
23685 this.removeClass("x-tree-node-leaf");
|
rlm@46
|
23686 this.wasLeaf = false;
|
rlm@46
|
23687 }
|
rlm@46
|
23688 if(this.c1 != c1 || this.c2 != c2){
|
rlm@46
|
23689 Ext.fly(this.elNode).replaceClass(c1, c2);
|
rlm@46
|
23690 this.c1 = c1; this.c2 = c2;
|
rlm@46
|
23691 }
|
rlm@46
|
23692 }else{
|
rlm@46
|
23693 if(!this.wasLeaf){
|
rlm@46
|
23694 Ext.fly(this.elNode).replaceClass("x-tree-node-expanded", "x-tree-node-leaf");
|
rlm@46
|
23695 delete this.c1;
|
rlm@46
|
23696 delete this.c2;
|
rlm@46
|
23697 this.wasLeaf = true;
|
rlm@46
|
23698 }
|
rlm@46
|
23699 }
|
rlm@46
|
23700 var ecc = "x-tree-ec-icon "+cls;
|
rlm@46
|
23701 if(this.ecc != ecc){
|
rlm@46
|
23702 this.ecNode.className = ecc;
|
rlm@46
|
23703 this.ecc = ecc;
|
rlm@46
|
23704 }
|
rlm@46
|
23705 }
|
rlm@46
|
23706 },
|
rlm@46
|
23707
|
rlm@46
|
23708
|
rlm@46
|
23709 getChildIndent : function(){
|
rlm@46
|
23710 if(!this.childIndent){
|
rlm@46
|
23711 var buf = [];
|
rlm@46
|
23712 var p = this.node;
|
rlm@46
|
23713 while(p){
|
rlm@46
|
23714 if(!p.isRoot || (p.isRoot && p.ownerTree.rootVisible)){
|
rlm@46
|
23715 if(!p.isLast()) {
|
rlm@46
|
23716 buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-elbow-line" />');
|
rlm@46
|
23717 } else {
|
rlm@46
|
23718 buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-icon" />');
|
rlm@46
|
23719 }
|
rlm@46
|
23720 }
|
rlm@46
|
23721 p = p.parentNode;
|
rlm@46
|
23722 }
|
rlm@46
|
23723 this.childIndent = buf.join("");
|
rlm@46
|
23724 }
|
rlm@46
|
23725 return this.childIndent;
|
rlm@46
|
23726 },
|
rlm@46
|
23727
|
rlm@46
|
23728
|
rlm@46
|
23729 renderIndent : function(){
|
rlm@46
|
23730 if(this.rendered){
|
rlm@46
|
23731 var indent = "";
|
rlm@46
|
23732 var p = this.node.parentNode;
|
rlm@46
|
23733 if(p){
|
rlm@46
|
23734 indent = p.ui.getChildIndent();
|
rlm@46
|
23735 }
|
rlm@46
|
23736 if(this.indentMarkup != indent){
|
rlm@46
|
23737 this.indentNode.innerHTML = indent;
|
rlm@46
|
23738 this.indentMarkup = indent;
|
rlm@46
|
23739 }
|
rlm@46
|
23740 this.updateExpandIcon();
|
rlm@46
|
23741 }
|
rlm@46
|
23742 },
|
rlm@46
|
23743
|
rlm@46
|
23744 destroy : function(){
|
rlm@46
|
23745 if(this.elNode){
|
rlm@46
|
23746 Ext.dd.Registry.unregister(this.elNode.id);
|
rlm@46
|
23747 }
|
rlm@46
|
23748 delete this.elNode;
|
rlm@46
|
23749 delete this.ctNode;
|
rlm@46
|
23750 delete this.indentNode;
|
rlm@46
|
23751 delete this.ecNode;
|
rlm@46
|
23752 delete this.iconNode;
|
rlm@46
|
23753 delete this.checkbox;
|
rlm@46
|
23754 delete this.anchor;
|
rlm@46
|
23755 delete this.textNode;
|
rlm@46
|
23756 Ext.removeNode(this.ctNode);
|
rlm@46
|
23757 }
|
rlm@46
|
23758 };
|
rlm@46
|
23759
|
rlm@46
|
23760
|
rlm@46
|
23761 Ext.tree.RootTreeNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
|
rlm@46
|
23762
|
rlm@46
|
23763 render : function(){
|
rlm@46
|
23764 if(!this.rendered){
|
rlm@46
|
23765 var targetNode = this.node.ownerTree.innerCt.dom;
|
rlm@46
|
23766 this.node.expanded = true;
|
rlm@46
|
23767 targetNode.innerHTML = '<div class="x-tree-root-node"></div>';
|
rlm@46
|
23768 this.wrap = this.ctNode = targetNode.firstChild;
|
rlm@46
|
23769 }
|
rlm@46
|
23770 },
|
rlm@46
|
23771 collapse : Ext.emptyFn,
|
rlm@46
|
23772 expand : Ext.emptyFn
|
rlm@46
|
23773 });
|
rlm@46
|
23774
|
rlm@46
|
23775 Ext.tree.TreeLoader = function(config){
|
rlm@46
|
23776 this.baseParams = {};
|
rlm@46
|
23777 Ext.apply(this, config);
|
rlm@46
|
23778
|
rlm@46
|
23779 this.addEvents(
|
rlm@46
|
23780
|
rlm@46
|
23781 "beforeload",
|
rlm@46
|
23782
|
rlm@46
|
23783 "load",
|
rlm@46
|
23784
|
rlm@46
|
23785 "loadexception"
|
rlm@46
|
23786 );
|
rlm@46
|
23787
|
rlm@46
|
23788 Ext.tree.TreeLoader.superclass.constructor.call(this);
|
rlm@46
|
23789 };
|
rlm@46
|
23790
|
rlm@46
|
23791 Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, {
|
rlm@46
|
23792
|
rlm@46
|
23793
|
rlm@46
|
23794
|
rlm@46
|
23795
|
rlm@46
|
23796
|
rlm@46
|
23797
|
rlm@46
|
23798
|
rlm@46
|
23799 uiProviders : {},
|
rlm@46
|
23800
|
rlm@46
|
23801
|
rlm@46
|
23802 clearOnLoad : true,
|
rlm@46
|
23803
|
rlm@46
|
23804
|
rlm@46
|
23805 load : function(node, callback){
|
rlm@46
|
23806 if(this.clearOnLoad){
|
rlm@46
|
23807 while(node.firstChild){
|
rlm@46
|
23808 node.removeChild(node.firstChild);
|
rlm@46
|
23809 }
|
rlm@46
|
23810 }
|
rlm@46
|
23811 if(this.doPreload(node)){
|
rlm@46
|
23812 if(typeof callback == "function"){
|
rlm@46
|
23813 callback();
|
rlm@46
|
23814 }
|
rlm@46
|
23815 }else if(this.dataUrl||this.url){
|
rlm@46
|
23816 this.requestData(node, callback);
|
rlm@46
|
23817 }
|
rlm@46
|
23818 },
|
rlm@46
|
23819
|
rlm@46
|
23820 doPreload : function(node){
|
rlm@46
|
23821 if(node.attributes.children){
|
rlm@46
|
23822 if(node.childNodes.length < 1){
|
rlm@46
|
23823 var cs = node.attributes.children;
|
rlm@46
|
23824 node.beginUpdate();
|
rlm@46
|
23825 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
23826 var cn = node.appendChild(this.createNode(cs[i]));
|
rlm@46
|
23827 if(this.preloadChildren){
|
rlm@46
|
23828 this.doPreload(cn);
|
rlm@46
|
23829 }
|
rlm@46
|
23830 }
|
rlm@46
|
23831 node.endUpdate();
|
rlm@46
|
23832 }
|
rlm@46
|
23833 return true;
|
rlm@46
|
23834 }else {
|
rlm@46
|
23835 return false;
|
rlm@46
|
23836 }
|
rlm@46
|
23837 },
|
rlm@46
|
23838
|
rlm@46
|
23839 getParams: function(node){
|
rlm@46
|
23840 var buf = [], bp = this.baseParams;
|
rlm@46
|
23841 for(var key in bp){
|
rlm@46
|
23842 if(typeof bp[key] != "function"){
|
rlm@46
|
23843 buf.push(encodeURIComponent(key), "=", encodeURIComponent(bp[key]), "&");
|
rlm@46
|
23844 }
|
rlm@46
|
23845 }
|
rlm@46
|
23846 buf.push("node=", encodeURIComponent(node.id));
|
rlm@46
|
23847 return buf.join("");
|
rlm@46
|
23848 },
|
rlm@46
|
23849
|
rlm@46
|
23850 requestData : function(node, callback){
|
rlm@46
|
23851 if(this.fireEvent("beforeload", this, node, callback) !== false){
|
rlm@46
|
23852 this.transId = Ext.Ajax.request({
|
rlm@46
|
23853 method:this.requestMethod,
|
rlm@46
|
23854 url: this.dataUrl||this.url,
|
rlm@46
|
23855 success: this.handleResponse,
|
rlm@46
|
23856 failure: this.handleFailure,
|
rlm@46
|
23857 scope: this,
|
rlm@46
|
23858 argument: {callback: callback, node: node},
|
rlm@46
|
23859 params: this.getParams(node)
|
rlm@46
|
23860 });
|
rlm@46
|
23861 }else{
|
rlm@46
|
23862
|
rlm@46
|
23863
|
rlm@46
|
23864 if(typeof callback == "function"){
|
rlm@46
|
23865 callback();
|
rlm@46
|
23866 }
|
rlm@46
|
23867 }
|
rlm@46
|
23868 },
|
rlm@46
|
23869
|
rlm@46
|
23870 isLoading : function(){
|
rlm@46
|
23871 return this.transId ? true : false;
|
rlm@46
|
23872 },
|
rlm@46
|
23873
|
rlm@46
|
23874 abort : function(){
|
rlm@46
|
23875 if(this.isLoading()){
|
rlm@46
|
23876 Ext.Ajax.abort(this.transId);
|
rlm@46
|
23877 }
|
rlm@46
|
23878 },
|
rlm@46
|
23879
|
rlm@46
|
23880
|
rlm@46
|
23881 createNode : function(attr){
|
rlm@46
|
23882
|
rlm@46
|
23883 if(this.baseAttrs){
|
rlm@46
|
23884 Ext.applyIf(attr, this.baseAttrs);
|
rlm@46
|
23885 }
|
rlm@46
|
23886 if(this.applyLoader !== false){
|
rlm@46
|
23887 attr.loader = this;
|
rlm@46
|
23888 }
|
rlm@46
|
23889 if(typeof attr.uiProvider == 'string'){
|
rlm@46
|
23890 attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
|
rlm@46
|
23891 }
|
rlm@46
|
23892 return(attr.leaf ?
|
rlm@46
|
23893 new Ext.tree.TreeNode(attr) :
|
rlm@46
|
23894 new Ext.tree.AsyncTreeNode(attr));
|
rlm@46
|
23895 },
|
rlm@46
|
23896
|
rlm@46
|
23897 processResponse : function(response, node, callback){
|
rlm@46
|
23898 var json = response.responseText;
|
rlm@46
|
23899 try {
|
rlm@46
|
23900 var o = eval("("+json+")");
|
rlm@46
|
23901 node.beginUpdate();
|
rlm@46
|
23902 for(var i = 0, len = o.length; i < len; i++){
|
rlm@46
|
23903 var n = this.createNode(o[i]);
|
rlm@46
|
23904 if(n){
|
rlm@46
|
23905 node.appendChild(n);
|
rlm@46
|
23906 }
|
rlm@46
|
23907 }
|
rlm@46
|
23908 node.endUpdate();
|
rlm@46
|
23909 if(typeof callback == "function"){
|
rlm@46
|
23910 callback(this, node);
|
rlm@46
|
23911 }
|
rlm@46
|
23912 }catch(e){
|
rlm@46
|
23913 this.handleFailure(response);
|
rlm@46
|
23914 }
|
rlm@46
|
23915 },
|
rlm@46
|
23916
|
rlm@46
|
23917 handleResponse : function(response){
|
rlm@46
|
23918 this.transId = false;
|
rlm@46
|
23919 var a = response.argument;
|
rlm@46
|
23920 this.processResponse(response, a.node, a.callback);
|
rlm@46
|
23921 this.fireEvent("load", this, a.node, response);
|
rlm@46
|
23922 },
|
rlm@46
|
23923
|
rlm@46
|
23924 handleFailure : function(response){
|
rlm@46
|
23925 this.transId = false;
|
rlm@46
|
23926 var a = response.argument;
|
rlm@46
|
23927 this.fireEvent("loadexception", this, a.node, response);
|
rlm@46
|
23928 if(typeof a.callback == "function"){
|
rlm@46
|
23929 a.callback(this, a.node);
|
rlm@46
|
23930 }
|
rlm@46
|
23931 }
|
rlm@46
|
23932 });
|
rlm@46
|
23933
|
rlm@46
|
23934 Ext.tree.TreeFilter = function(tree, config){
|
rlm@46
|
23935 this.tree = tree;
|
rlm@46
|
23936 this.filtered = {};
|
rlm@46
|
23937 Ext.apply(this, config);
|
rlm@46
|
23938 };
|
rlm@46
|
23939
|
rlm@46
|
23940 Ext.tree.TreeFilter.prototype = {
|
rlm@46
|
23941 clearBlank:false,
|
rlm@46
|
23942 reverse:false,
|
rlm@46
|
23943 autoClear:false,
|
rlm@46
|
23944 remove:false,
|
rlm@46
|
23945
|
rlm@46
|
23946
|
rlm@46
|
23947 filter : function(value, attr, startNode){
|
rlm@46
|
23948 attr = attr || "text";
|
rlm@46
|
23949 var f;
|
rlm@46
|
23950 if(typeof value == "string"){
|
rlm@46
|
23951 var vlen = value.length;
|
rlm@46
|
23952
|
rlm@46
|
23953 if(vlen == 0 && this.clearBlank){
|
rlm@46
|
23954 this.clear();
|
rlm@46
|
23955 return;
|
rlm@46
|
23956 }
|
rlm@46
|
23957 value = value.toLowerCase();
|
rlm@46
|
23958 f = function(n){
|
rlm@46
|
23959 return n.attributes[attr].substr(0, vlen).toLowerCase() == value;
|
rlm@46
|
23960 };
|
rlm@46
|
23961 }else if(value.exec){
|
rlm@46
|
23962 f = function(n){
|
rlm@46
|
23963 return value.test(n.attributes[attr]);
|
rlm@46
|
23964 };
|
rlm@46
|
23965 }else{
|
rlm@46
|
23966 throw 'Illegal filter type, must be string or regex';
|
rlm@46
|
23967 }
|
rlm@46
|
23968 this.filterBy(f, null, startNode);
|
rlm@46
|
23969 },
|
rlm@46
|
23970
|
rlm@46
|
23971
|
rlm@46
|
23972 filterBy : function(fn, scope, startNode){
|
rlm@46
|
23973 startNode = startNode || this.tree.root;
|
rlm@46
|
23974 if(this.autoClear){
|
rlm@46
|
23975 this.clear();
|
rlm@46
|
23976 }
|
rlm@46
|
23977 var af = this.filtered, rv = this.reverse;
|
rlm@46
|
23978 var f = function(n){
|
rlm@46
|
23979 if(n == startNode){
|
rlm@46
|
23980 return true;
|
rlm@46
|
23981 }
|
rlm@46
|
23982 if(af[n.id]){
|
rlm@46
|
23983 return false;
|
rlm@46
|
23984 }
|
rlm@46
|
23985 var m = fn.call(scope || n, n);
|
rlm@46
|
23986 if(!m || rv){
|
rlm@46
|
23987 af[n.id] = n;
|
rlm@46
|
23988 n.ui.hide();
|
rlm@46
|
23989 return false;
|
rlm@46
|
23990 }
|
rlm@46
|
23991 return true;
|
rlm@46
|
23992 };
|
rlm@46
|
23993 startNode.cascade(f);
|
rlm@46
|
23994 if(this.remove){
|
rlm@46
|
23995 for(var id in af){
|
rlm@46
|
23996 if(typeof id != "function"){
|
rlm@46
|
23997 var n = af[id];
|
rlm@46
|
23998 if(n && n.parentNode){
|
rlm@46
|
23999 n.parentNode.removeChild(n);
|
rlm@46
|
24000 }
|
rlm@46
|
24001 }
|
rlm@46
|
24002 }
|
rlm@46
|
24003 }
|
rlm@46
|
24004 },
|
rlm@46
|
24005
|
rlm@46
|
24006
|
rlm@46
|
24007 clear : function(){
|
rlm@46
|
24008 var t = this.tree;
|
rlm@46
|
24009 var af = this.filtered;
|
rlm@46
|
24010 for(var id in af){
|
rlm@46
|
24011 if(typeof id != "function"){
|
rlm@46
|
24012 var n = af[id];
|
rlm@46
|
24013 if(n){
|
rlm@46
|
24014 n.ui.show();
|
rlm@46
|
24015 }
|
rlm@46
|
24016 }
|
rlm@46
|
24017 }
|
rlm@46
|
24018 this.filtered = {};
|
rlm@46
|
24019 }
|
rlm@46
|
24020 };
|
rlm@46
|
24021
|
rlm@46
|
24022
|
rlm@46
|
24023 Ext.tree.TreeSorter = function(tree, config){
|
rlm@46
|
24024
|
rlm@46
|
24025
|
rlm@46
|
24026
|
rlm@46
|
24027
|
rlm@46
|
24028
|
rlm@46
|
24029
|
rlm@46
|
24030
|
rlm@46
|
24031 Ext.apply(this, config);
|
rlm@46
|
24032 tree.on("beforechildrenrendered", this.doSort, this);
|
rlm@46
|
24033 tree.on("append", this.updateSort, this);
|
rlm@46
|
24034 tree.on("insert", this.updateSort, this);
|
rlm@46
|
24035 tree.on("textchange", this.updateSortParent, this);
|
rlm@46
|
24036
|
rlm@46
|
24037 var dsc = this.dir && this.dir.toLowerCase() == "desc";
|
rlm@46
|
24038 var p = this.property || "text";
|
rlm@46
|
24039 var sortType = this.sortType;
|
rlm@46
|
24040 var fs = this.folderSort;
|
rlm@46
|
24041 var cs = this.caseSensitive === true;
|
rlm@46
|
24042 var leafAttr = this.leafAttr || 'leaf';
|
rlm@46
|
24043
|
rlm@46
|
24044 this.sortFn = function(n1, n2){
|
rlm@46
|
24045 if(fs){
|
rlm@46
|
24046 if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
|
rlm@46
|
24047 return 1;
|
rlm@46
|
24048 }
|
rlm@46
|
24049 if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
|
rlm@46
|
24050 return -1;
|
rlm@46
|
24051 }
|
rlm@46
|
24052 }
|
rlm@46
|
24053 var v1 = sortType ? sortType(n1) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());
|
rlm@46
|
24054 var v2 = sortType ? sortType(n2) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());
|
rlm@46
|
24055 if(v1 < v2){
|
rlm@46
|
24056 return dsc ? +1 : -1;
|
rlm@46
|
24057 }else if(v1 > v2){
|
rlm@46
|
24058 return dsc ? -1 : +1;
|
rlm@46
|
24059 }else{
|
rlm@46
|
24060 return 0;
|
rlm@46
|
24061 }
|
rlm@46
|
24062 };
|
rlm@46
|
24063 };
|
rlm@46
|
24064
|
rlm@46
|
24065 Ext.tree.TreeSorter.prototype = {
|
rlm@46
|
24066 doSort : function(node){
|
rlm@46
|
24067 node.sort(this.sortFn);
|
rlm@46
|
24068 },
|
rlm@46
|
24069
|
rlm@46
|
24070 compareNodes : function(n1, n2){
|
rlm@46
|
24071 return (n1.text.toUpperCase() > n2.text.toUpperCase() ? 1 : -1);
|
rlm@46
|
24072 },
|
rlm@46
|
24073
|
rlm@46
|
24074 updateSort : function(tree, node){
|
rlm@46
|
24075 if(node.childrenRendered){
|
rlm@46
|
24076 this.doSort.defer(1, this, [node]);
|
rlm@46
|
24077 }
|
rlm@46
|
24078 },
|
rlm@46
|
24079
|
rlm@46
|
24080 updateSortParent : function(node){
|
rlm@46
|
24081 var p = node.parentNode;
|
rlm@46
|
24082 if(p && p.childrenRendered){
|
rlm@46
|
24083 this.doSort.defer(1, this, [p]);
|
rlm@46
|
24084 }
|
rlm@46
|
24085 }
|
rlm@46
|
24086 };
|
rlm@46
|
24087
|
rlm@46
|
24088 if(Ext.dd.DropZone){
|
rlm@46
|
24089
|
rlm@46
|
24090 Ext.tree.TreeDropZone = function(tree, config){
|
rlm@46
|
24091
|
rlm@46
|
24092 this.allowParentInsert = false;
|
rlm@46
|
24093
|
rlm@46
|
24094 this.allowContainerDrop = false;
|
rlm@46
|
24095
|
rlm@46
|
24096 this.appendOnly = false;
|
rlm@46
|
24097 Ext.tree.TreeDropZone.superclass.constructor.call(this, tree.innerCt, config);
|
rlm@46
|
24098
|
rlm@46
|
24099 this.tree = tree;
|
rlm@46
|
24100
|
rlm@46
|
24101 this.dragOverData = {};
|
rlm@46
|
24102
|
rlm@46
|
24103 this.lastInsertClass = "x-tree-no-status";
|
rlm@46
|
24104 };
|
rlm@46
|
24105
|
rlm@46
|
24106 Ext.extend(Ext.tree.TreeDropZone, Ext.dd.DropZone, {
|
rlm@46
|
24107
|
rlm@46
|
24108 ddGroup : "TreeDD",
|
rlm@46
|
24109
|
rlm@46
|
24110
|
rlm@46
|
24111 expandDelay : 1000,
|
rlm@46
|
24112
|
rlm@46
|
24113
|
rlm@46
|
24114 expandNode : function(node){
|
rlm@46
|
24115 if(node.hasChildNodes() && !node.isExpanded()){
|
rlm@46
|
24116 node.expand(false, null, this.triggerCacheRefresh.createDelegate(this));
|
rlm@46
|
24117 }
|
rlm@46
|
24118 },
|
rlm@46
|
24119
|
rlm@46
|
24120
|
rlm@46
|
24121 queueExpand : function(node){
|
rlm@46
|
24122 this.expandProcId = this.expandNode.defer(this.expandDelay, this, [node]);
|
rlm@46
|
24123 },
|
rlm@46
|
24124
|
rlm@46
|
24125
|
rlm@46
|
24126 cancelExpand : function(){
|
rlm@46
|
24127 if(this.expandProcId){
|
rlm@46
|
24128 clearTimeout(this.expandProcId);
|
rlm@46
|
24129 this.expandProcId = false;
|
rlm@46
|
24130 }
|
rlm@46
|
24131 },
|
rlm@46
|
24132
|
rlm@46
|
24133
|
rlm@46
|
24134 isValidDropPoint : function(n, pt, dd, e, data){
|
rlm@46
|
24135 if(!n || !data){ return false; }
|
rlm@46
|
24136 var targetNode = n.node;
|
rlm@46
|
24137 var dropNode = data.node;
|
rlm@46
|
24138
|
rlm@46
|
24139 if(!(targetNode && targetNode.isTarget && pt)){
|
rlm@46
|
24140 return false;
|
rlm@46
|
24141 }
|
rlm@46
|
24142 if(pt == "append" && targetNode.allowChildren === false){
|
rlm@46
|
24143 return false;
|
rlm@46
|
24144 }
|
rlm@46
|
24145 if((pt == "above" || pt == "below") && (targetNode.parentNode && targetNode.parentNode.allowChildren === false)){
|
rlm@46
|
24146 return false;
|
rlm@46
|
24147 }
|
rlm@46
|
24148 if(dropNode && (targetNode == dropNode || dropNode.contains(targetNode))){
|
rlm@46
|
24149 return false;
|
rlm@46
|
24150 }
|
rlm@46
|
24151
|
rlm@46
|
24152 var overEvent = this.dragOverData;
|
rlm@46
|
24153 overEvent.tree = this.tree;
|
rlm@46
|
24154 overEvent.target = targetNode;
|
rlm@46
|
24155 overEvent.data = data;
|
rlm@46
|
24156 overEvent.point = pt;
|
rlm@46
|
24157 overEvent.source = dd;
|
rlm@46
|
24158 overEvent.rawEvent = e;
|
rlm@46
|
24159 overEvent.dropNode = dropNode;
|
rlm@46
|
24160 overEvent.cancel = false;
|
rlm@46
|
24161 var result = this.tree.fireEvent("nodedragover", overEvent);
|
rlm@46
|
24162 return overEvent.cancel === false && result !== false;
|
rlm@46
|
24163 },
|
rlm@46
|
24164
|
rlm@46
|
24165
|
rlm@46
|
24166 getDropPoint : function(e, n, dd){
|
rlm@46
|
24167 var tn = n.node;
|
rlm@46
|
24168 if(tn.isRoot){
|
rlm@46
|
24169 return tn.allowChildren !== false ? "append" : false;
|
rlm@46
|
24170 }
|
rlm@46
|
24171 var dragEl = n.ddel;
|
rlm@46
|
24172 var t = Ext.lib.Dom.getY(dragEl), b = t + dragEl.offsetHeight;
|
rlm@46
|
24173 var y = Ext.lib.Event.getPageY(e);
|
rlm@46
|
24174 var noAppend = tn.allowChildren === false || tn.isLeaf();
|
rlm@46
|
24175 if(this.appendOnly || tn.parentNode.allowChildren === false){
|
rlm@46
|
24176 return noAppend ? false : "append";
|
rlm@46
|
24177 }
|
rlm@46
|
24178 var noBelow = false;
|
rlm@46
|
24179 if(!this.allowParentInsert){
|
rlm@46
|
24180 noBelow = tn.hasChildNodes() && tn.isExpanded();
|
rlm@46
|
24181 }
|
rlm@46
|
24182 var q = (b - t) / (noAppend ? 2 : 3);
|
rlm@46
|
24183 if(y >= t && y < (t + q)){
|
rlm@46
|
24184 return "above";
|
rlm@46
|
24185 }else if(!noBelow && (noAppend || y >= b-q && y <= b)){
|
rlm@46
|
24186 return "below";
|
rlm@46
|
24187 }else{
|
rlm@46
|
24188 return "append";
|
rlm@46
|
24189 }
|
rlm@46
|
24190 },
|
rlm@46
|
24191
|
rlm@46
|
24192
|
rlm@46
|
24193 onNodeEnter : function(n, dd, e, data){
|
rlm@46
|
24194 this.cancelExpand();
|
rlm@46
|
24195 },
|
rlm@46
|
24196
|
rlm@46
|
24197
|
rlm@46
|
24198 onNodeOver : function(n, dd, e, data){
|
rlm@46
|
24199 var pt = this.getDropPoint(e, n, dd);
|
rlm@46
|
24200 var node = n.node;
|
rlm@46
|
24201
|
rlm@46
|
24202
|
rlm@46
|
24203 if(!this.expandProcId && pt == "append" && node.hasChildNodes() && !n.node.isExpanded()){
|
rlm@46
|
24204 this.queueExpand(node);
|
rlm@46
|
24205 }else if(pt != "append"){
|
rlm@46
|
24206 this.cancelExpand();
|
rlm@46
|
24207 }
|
rlm@46
|
24208
|
rlm@46
|
24209
|
rlm@46
|
24210 var returnCls = this.dropNotAllowed;
|
rlm@46
|
24211 if(this.isValidDropPoint(n, pt, dd, e, data)){
|
rlm@46
|
24212 if(pt){
|
rlm@46
|
24213 var el = n.ddel;
|
rlm@46
|
24214 var cls;
|
rlm@46
|
24215 if(pt == "above"){
|
rlm@46
|
24216 returnCls = n.node.isFirst() ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between";
|
rlm@46
|
24217 cls = "x-tree-drag-insert-above";
|
rlm@46
|
24218 }else if(pt == "below"){
|
rlm@46
|
24219 returnCls = n.node.isLast() ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between";
|
rlm@46
|
24220 cls = "x-tree-drag-insert-below";
|
rlm@46
|
24221 }else{
|
rlm@46
|
24222 returnCls = "x-tree-drop-ok-append";
|
rlm@46
|
24223 cls = "x-tree-drag-append";
|
rlm@46
|
24224 }
|
rlm@46
|
24225 if(this.lastInsertClass != cls){
|
rlm@46
|
24226 Ext.fly(el).replaceClass(this.lastInsertClass, cls);
|
rlm@46
|
24227 this.lastInsertClass = cls;
|
rlm@46
|
24228 }
|
rlm@46
|
24229 }
|
rlm@46
|
24230 }
|
rlm@46
|
24231 return returnCls;
|
rlm@46
|
24232 },
|
rlm@46
|
24233
|
rlm@46
|
24234
|
rlm@46
|
24235 onNodeOut : function(n, dd, e, data){
|
rlm@46
|
24236 this.cancelExpand();
|
rlm@46
|
24237 this.removeDropIndicators(n);
|
rlm@46
|
24238 },
|
rlm@46
|
24239
|
rlm@46
|
24240
|
rlm@46
|
24241 onNodeDrop : function(n, dd, e, data){
|
rlm@46
|
24242 var point = this.getDropPoint(e, n, dd);
|
rlm@46
|
24243 var targetNode = n.node;
|
rlm@46
|
24244 targetNode.ui.startDrop();
|
rlm@46
|
24245 if(!this.isValidDropPoint(n, point, dd, e, data)){
|
rlm@46
|
24246 targetNode.ui.endDrop();
|
rlm@46
|
24247 return false;
|
rlm@46
|
24248 }
|
rlm@46
|
24249
|
rlm@46
|
24250 var dropNode = data.node || (dd.getTreeNode ? dd.getTreeNode(data, targetNode, point, e) : null);
|
rlm@46
|
24251 var dropEvent = {
|
rlm@46
|
24252 tree : this.tree,
|
rlm@46
|
24253 target: targetNode,
|
rlm@46
|
24254 data: data,
|
rlm@46
|
24255 point: point,
|
rlm@46
|
24256 source: dd,
|
rlm@46
|
24257 rawEvent: e,
|
rlm@46
|
24258 dropNode: dropNode,
|
rlm@46
|
24259 cancel: !dropNode,
|
rlm@46
|
24260 dropStatus: false
|
rlm@46
|
24261 };
|
rlm@46
|
24262 var retval = this.tree.fireEvent("beforenodedrop", dropEvent);
|
rlm@46
|
24263 if(retval === false || dropEvent.cancel === true || !dropEvent.dropNode){
|
rlm@46
|
24264 targetNode.ui.endDrop();
|
rlm@46
|
24265 return dropEvent.dropStatus;
|
rlm@46
|
24266 }
|
rlm@46
|
24267
|
rlm@46
|
24268 targetNode = dropEvent.target;
|
rlm@46
|
24269 if(point == "append" && !targetNode.isExpanded()){
|
rlm@46
|
24270 targetNode.expand(false, null, function(){
|
rlm@46
|
24271 this.completeDrop(dropEvent);
|
rlm@46
|
24272 }.createDelegate(this));
|
rlm@46
|
24273 }else{
|
rlm@46
|
24274 this.completeDrop(dropEvent);
|
rlm@46
|
24275 }
|
rlm@46
|
24276 return true;
|
rlm@46
|
24277 },
|
rlm@46
|
24278
|
rlm@46
|
24279
|
rlm@46
|
24280 completeDrop : function(de){
|
rlm@46
|
24281 var ns = de.dropNode, p = de.point, t = de.target;
|
rlm@46
|
24282 if(!Ext.isArray(ns)){
|
rlm@46
|
24283 ns = [ns];
|
rlm@46
|
24284 }
|
rlm@46
|
24285 var n;
|
rlm@46
|
24286 for(var i = 0, len = ns.length; i < len; i++){
|
rlm@46
|
24287 n = ns[i];
|
rlm@46
|
24288 if(p == "above"){
|
rlm@46
|
24289 t.parentNode.insertBefore(n, t);
|
rlm@46
|
24290 }else if(p == "below"){
|
rlm@46
|
24291 t.parentNode.insertBefore(n, t.nextSibling);
|
rlm@46
|
24292 }else{
|
rlm@46
|
24293 t.appendChild(n);
|
rlm@46
|
24294 }
|
rlm@46
|
24295 }
|
rlm@46
|
24296 n.ui.focus();
|
rlm@46
|
24297 if(this.tree.hlDrop){
|
rlm@46
|
24298 n.ui.highlight();
|
rlm@46
|
24299 }
|
rlm@46
|
24300 t.ui.endDrop();
|
rlm@46
|
24301 this.tree.fireEvent("nodedrop", de);
|
rlm@46
|
24302 },
|
rlm@46
|
24303
|
rlm@46
|
24304
|
rlm@46
|
24305 afterNodeMoved : function(dd, data, e, targetNode, dropNode){
|
rlm@46
|
24306 if(this.tree.hlDrop){
|
rlm@46
|
24307 dropNode.ui.focus();
|
rlm@46
|
24308 dropNode.ui.highlight();
|
rlm@46
|
24309 }
|
rlm@46
|
24310 this.tree.fireEvent("nodedrop", this.tree, targetNode, data, dd, e);
|
rlm@46
|
24311 },
|
rlm@46
|
24312
|
rlm@46
|
24313
|
rlm@46
|
24314 getTree : function(){
|
rlm@46
|
24315 return this.tree;
|
rlm@46
|
24316 },
|
rlm@46
|
24317
|
rlm@46
|
24318
|
rlm@46
|
24319 removeDropIndicators : function(n){
|
rlm@46
|
24320 if(n && n.ddel){
|
rlm@46
|
24321 var el = n.ddel;
|
rlm@46
|
24322 Ext.fly(el).removeClass([
|
rlm@46
|
24323 "x-tree-drag-insert-above",
|
rlm@46
|
24324 "x-tree-drag-insert-below",
|
rlm@46
|
24325 "x-tree-drag-append"]);
|
rlm@46
|
24326 this.lastInsertClass = "_noclass";
|
rlm@46
|
24327 }
|
rlm@46
|
24328 },
|
rlm@46
|
24329
|
rlm@46
|
24330
|
rlm@46
|
24331 beforeDragDrop : function(target, e, id){
|
rlm@46
|
24332 this.cancelExpand();
|
rlm@46
|
24333 return true;
|
rlm@46
|
24334 },
|
rlm@46
|
24335
|
rlm@46
|
24336
|
rlm@46
|
24337 afterRepair : function(data){
|
rlm@46
|
24338 if(data && Ext.enableFx){
|
rlm@46
|
24339 data.node.ui.highlight();
|
rlm@46
|
24340 }
|
rlm@46
|
24341 this.hideProxy();
|
rlm@46
|
24342 }
|
rlm@46
|
24343 });
|
rlm@46
|
24344
|
rlm@46
|
24345 }
|
rlm@46
|
24346
|
rlm@46
|
24347 if(Ext.dd.DragZone){
|
rlm@46
|
24348 Ext.tree.TreeDragZone = function(tree, config){
|
rlm@46
|
24349 Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.getTreeEl(), config);
|
rlm@46
|
24350
|
rlm@46
|
24351 this.tree = tree;
|
rlm@46
|
24352 };
|
rlm@46
|
24353
|
rlm@46
|
24354 Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {
|
rlm@46
|
24355
|
rlm@46
|
24356 ddGroup : "TreeDD",
|
rlm@46
|
24357
|
rlm@46
|
24358
|
rlm@46
|
24359 onBeforeDrag : function(data, e){
|
rlm@46
|
24360 var n = data.node;
|
rlm@46
|
24361 return n && n.draggable && !n.disabled;
|
rlm@46
|
24362 },
|
rlm@46
|
24363
|
rlm@46
|
24364
|
rlm@46
|
24365 onInitDrag : function(e){
|
rlm@46
|
24366 var data = this.dragData;
|
rlm@46
|
24367 this.tree.getSelectionModel().select(data.node);
|
rlm@46
|
24368 this.tree.eventModel.disable();
|
rlm@46
|
24369 this.proxy.update("");
|
rlm@46
|
24370 data.node.ui.appendDDGhost(this.proxy.ghost.dom);
|
rlm@46
|
24371 this.tree.fireEvent("startdrag", this.tree, data.node, e);
|
rlm@46
|
24372 },
|
rlm@46
|
24373
|
rlm@46
|
24374
|
rlm@46
|
24375 getRepairXY : function(e, data){
|
rlm@46
|
24376 return data.node.ui.getDDRepairXY();
|
rlm@46
|
24377 },
|
rlm@46
|
24378
|
rlm@46
|
24379
|
rlm@46
|
24380 onEndDrag : function(data, e){
|
rlm@46
|
24381 this.tree.eventModel.enable.defer(100, this.tree.eventModel);
|
rlm@46
|
24382 this.tree.fireEvent("enddrag", this.tree, data.node, e);
|
rlm@46
|
24383 },
|
rlm@46
|
24384
|
rlm@46
|
24385
|
rlm@46
|
24386 onValidDrop : function(dd, e, id){
|
rlm@46
|
24387 this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, dd, e);
|
rlm@46
|
24388 this.hideProxy();
|
rlm@46
|
24389 },
|
rlm@46
|
24390
|
rlm@46
|
24391
|
rlm@46
|
24392 beforeInvalidDrop : function(e, id){
|
rlm@46
|
24393
|
rlm@46
|
24394 var sm = this.tree.getSelectionModel();
|
rlm@46
|
24395 sm.clearSelections();
|
rlm@46
|
24396 sm.select(this.dragData.node);
|
rlm@46
|
24397 }
|
rlm@46
|
24398 });
|
rlm@46
|
24399 }
|
rlm@46
|
24400
|
rlm@46
|
24401 Ext.tree.TreeEditor = function(tree, fc, config){
|
rlm@46
|
24402 fc = fc || {};
|
rlm@46
|
24403 var field = fc.events ? fc : new Ext.form.TextField(fc);
|
rlm@46
|
24404 Ext.tree.TreeEditor.superclass.constructor.call(this, field, config);
|
rlm@46
|
24405
|
rlm@46
|
24406 this.tree = tree;
|
rlm@46
|
24407
|
rlm@46
|
24408 if(!tree.rendered){
|
rlm@46
|
24409 tree.on('render', this.initEditor, this);
|
rlm@46
|
24410 }else{
|
rlm@46
|
24411 this.initEditor(tree);
|
rlm@46
|
24412 }
|
rlm@46
|
24413 };
|
rlm@46
|
24414
|
rlm@46
|
24415 Ext.extend(Ext.tree.TreeEditor, Ext.Editor, {
|
rlm@46
|
24416
|
rlm@46
|
24417 alignment: "l-l",
|
rlm@46
|
24418 autoSize: false,
|
rlm@46
|
24419
|
rlm@46
|
24420 hideEl : false,
|
rlm@46
|
24421
|
rlm@46
|
24422 cls: "x-small-editor x-tree-editor",
|
rlm@46
|
24423
|
rlm@46
|
24424 shim:false,
|
rlm@46
|
24425 shadow:"frame",
|
rlm@46
|
24426
|
rlm@46
|
24427 maxWidth: 250,
|
rlm@46
|
24428
|
rlm@46
|
24429 editDelay : 350,
|
rlm@46
|
24430
|
rlm@46
|
24431 initEditor : function(tree){
|
rlm@46
|
24432 tree.on('beforeclick', this.beforeNodeClick, this);
|
rlm@46
|
24433 tree.on('dblclick', this.onNodeDblClick, this);
|
rlm@46
|
24434 this.on('complete', this.updateNode, this);
|
rlm@46
|
24435 this.on('beforestartedit', this.fitToTree, this);
|
rlm@46
|
24436 this.on('startedit', this.bindScroll, this, {delay:10});
|
rlm@46
|
24437 this.on('specialkey', this.onSpecialKey, this);
|
rlm@46
|
24438 },
|
rlm@46
|
24439
|
rlm@46
|
24440 fitToTree : function(ed, el){
|
rlm@46
|
24441 var td = this.tree.getTreeEl().dom, nd = el.dom;
|
rlm@46
|
24442 if(td.scrollLeft > nd.offsetLeft){ td.scrollLeft = nd.offsetLeft;
|
rlm@46
|
24443 }
|
rlm@46
|
24444 var w = Math.min(
|
rlm@46
|
24445 this.maxWidth,
|
rlm@46
|
24446 (td.clientWidth > 20 ? td.clientWidth : td.offsetWidth) - Math.max(0, nd.offsetLeft-td.scrollLeft) - 5);
|
rlm@46
|
24447 this.setSize(w, '');
|
rlm@46
|
24448 },
|
rlm@46
|
24449
|
rlm@46
|
24450 triggerEdit : function(node, defer){
|
rlm@46
|
24451 this.completeEdit();
|
rlm@46
|
24452 if(node.attributes.editable !== false){
|
rlm@46
|
24453 this.editNode = node;
|
rlm@46
|
24454 this.autoEditTimer = this.startEdit.defer(this.editDelay, this, [node.ui.textNode, node.text]);
|
rlm@46
|
24455 return false;
|
rlm@46
|
24456 }
|
rlm@46
|
24457 },
|
rlm@46
|
24458
|
rlm@46
|
24459 bindScroll : function(){
|
rlm@46
|
24460 this.tree.getTreeEl().on('scroll', this.cancelEdit, this);
|
rlm@46
|
24461 },
|
rlm@46
|
24462
|
rlm@46
|
24463 beforeNodeClick : function(node, e){
|
rlm@46
|
24464 clearTimeout(this.autoEditTimer);
|
rlm@46
|
24465 if(this.tree.getSelectionModel().isSelected(node)){
|
rlm@46
|
24466 e.stopEvent();
|
rlm@46
|
24467 return this.triggerEdit(node);
|
rlm@46
|
24468 }
|
rlm@46
|
24469 },
|
rlm@46
|
24470
|
rlm@46
|
24471 onNodeDblClick : function(node, e){
|
rlm@46
|
24472 clearTimeout(this.autoEditTimer);
|
rlm@46
|
24473 },
|
rlm@46
|
24474
|
rlm@46
|
24475 updateNode : function(ed, value){
|
rlm@46
|
24476 this.tree.getTreeEl().un('scroll', this.cancelEdit, this);
|
rlm@46
|
24477 this.editNode.setText(value);
|
rlm@46
|
24478 },
|
rlm@46
|
24479
|
rlm@46
|
24480 onHide : function(){
|
rlm@46
|
24481 Ext.tree.TreeEditor.superclass.onHide.call(this);
|
rlm@46
|
24482 if(this.editNode){
|
rlm@46
|
24483 this.editNode.ui.focus.defer(50, this.editNode.ui);
|
rlm@46
|
24484 }
|
rlm@46
|
24485 },
|
rlm@46
|
24486
|
rlm@46
|
24487 onSpecialKey : function(field, e){
|
rlm@46
|
24488 var k = e.getKey();
|
rlm@46
|
24489 if(k == e.ESC){
|
rlm@46
|
24490 e.stopEvent();
|
rlm@46
|
24491 this.cancelEdit();
|
rlm@46
|
24492 }else if(k == e.ENTER && !e.hasModifier()){
|
rlm@46
|
24493 e.stopEvent();
|
rlm@46
|
24494 this.completeEdit();
|
rlm@46
|
24495 }
|
rlm@46
|
24496 }
|
rlm@46
|
24497 });
|
rlm@46
|
24498
|
rlm@46
|
24499 Ext.menu.Menu = function(config){
|
rlm@46
|
24500 if(Ext.isArray(config)){
|
rlm@46
|
24501 config = {items:config};
|
rlm@46
|
24502 }
|
rlm@46
|
24503 Ext.apply(this, config);
|
rlm@46
|
24504 this.id = this.id || Ext.id();
|
rlm@46
|
24505 this.addEvents(
|
rlm@46
|
24506
|
rlm@46
|
24507 'beforeshow',
|
rlm@46
|
24508
|
rlm@46
|
24509 'beforehide',
|
rlm@46
|
24510
|
rlm@46
|
24511 'show',
|
rlm@46
|
24512
|
rlm@46
|
24513 'hide',
|
rlm@46
|
24514
|
rlm@46
|
24515 'click',
|
rlm@46
|
24516
|
rlm@46
|
24517 'mouseover',
|
rlm@46
|
24518
|
rlm@46
|
24519 'mouseout',
|
rlm@46
|
24520
|
rlm@46
|
24521 'itemclick'
|
rlm@46
|
24522 );
|
rlm@46
|
24523 Ext.menu.MenuMgr.register(this);
|
rlm@46
|
24524 Ext.menu.Menu.superclass.constructor.call(this);
|
rlm@46
|
24525 var mis = this.items;
|
rlm@46
|
24526
|
rlm@46
|
24527
|
rlm@46
|
24528 this.items = new Ext.util.MixedCollection();
|
rlm@46
|
24529 if(mis){
|
rlm@46
|
24530 this.add.apply(this, mis);
|
rlm@46
|
24531 }
|
rlm@46
|
24532 };
|
rlm@46
|
24533
|
rlm@46
|
24534 Ext.extend(Ext.menu.Menu, Ext.util.Observable, {
|
rlm@46
|
24535
|
rlm@46
|
24536
|
rlm@46
|
24537
|
rlm@46
|
24538 minWidth : 120,
|
rlm@46
|
24539
|
rlm@46
|
24540 shadow : "sides",
|
rlm@46
|
24541
|
rlm@46
|
24542 subMenuAlign : "tl-tr?",
|
rlm@46
|
24543
|
rlm@46
|
24544 defaultAlign : "tl-bl?",
|
rlm@46
|
24545
|
rlm@46
|
24546 allowOtherMenus : false,
|
rlm@46
|
24547
|
rlm@46
|
24548 hidden:true,
|
rlm@46
|
24549
|
rlm@46
|
24550 createEl : function(){
|
rlm@46
|
24551 return new Ext.Layer({
|
rlm@46
|
24552 cls: "x-menu",
|
rlm@46
|
24553 shadow:this.shadow,
|
rlm@46
|
24554 constrain: false,
|
rlm@46
|
24555 parentEl: this.parentEl || document.body,
|
rlm@46
|
24556 zindex:15000
|
rlm@46
|
24557 });
|
rlm@46
|
24558 },
|
rlm@46
|
24559
|
rlm@46
|
24560 render : function(){
|
rlm@46
|
24561 if(this.el){
|
rlm@46
|
24562 return;
|
rlm@46
|
24563 }
|
rlm@46
|
24564 var el = this.el = this.createEl();
|
rlm@46
|
24565
|
rlm@46
|
24566 if(!this.keyNav){
|
rlm@46
|
24567 this.keyNav = new Ext.menu.MenuNav(this);
|
rlm@46
|
24568 }
|
rlm@46
|
24569 if(this.plain){
|
rlm@46
|
24570 el.addClass("x-menu-plain");
|
rlm@46
|
24571 }
|
rlm@46
|
24572 if(this.cls){
|
rlm@46
|
24573 el.addClass(this.cls);
|
rlm@46
|
24574 }
|
rlm@46
|
24575 this.focusEl = el.createChild({
|
rlm@46
|
24576 tag: "a", cls: "x-menu-focus", href: "#", onclick: "return false;", tabIndex:"-1"
|
rlm@46
|
24577 });
|
rlm@46
|
24578 var ul = el.createChild({tag: "ul", cls: "x-menu-list"});
|
rlm@46
|
24579 ul.on("click", this.onClick, this);
|
rlm@46
|
24580 ul.on("mouseover", this.onMouseOver, this);
|
rlm@46
|
24581 ul.on("mouseout", this.onMouseOut, this);
|
rlm@46
|
24582 this.items.each(function(item){
|
rlm@46
|
24583 var li = document.createElement("li");
|
rlm@46
|
24584 li.className = "x-menu-list-item";
|
rlm@46
|
24585 ul.dom.appendChild(li);
|
rlm@46
|
24586 item.render(li, this);
|
rlm@46
|
24587 }, this);
|
rlm@46
|
24588 this.ul = ul;
|
rlm@46
|
24589 this.autoWidth();
|
rlm@46
|
24590 },
|
rlm@46
|
24591
|
rlm@46
|
24592 autoWidth : function(){
|
rlm@46
|
24593 var el = this.el, ul = this.ul;
|
rlm@46
|
24594 if(!el){
|
rlm@46
|
24595 return;
|
rlm@46
|
24596 }
|
rlm@46
|
24597 var w = this.width;
|
rlm@46
|
24598 if(w){
|
rlm@46
|
24599 el.setWidth(w);
|
rlm@46
|
24600 }else if(Ext.isIE){
|
rlm@46
|
24601 el.setWidth(this.minWidth);
|
rlm@46
|
24602 var t = el.dom.offsetWidth; el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));
|
rlm@46
|
24603 }
|
rlm@46
|
24604 },
|
rlm@46
|
24605
|
rlm@46
|
24606 delayAutoWidth : function(){
|
rlm@46
|
24607 if(this.el){
|
rlm@46
|
24608 if(!this.awTask){
|
rlm@46
|
24609 this.awTask = new Ext.util.DelayedTask(this.autoWidth, this);
|
rlm@46
|
24610 }
|
rlm@46
|
24611 this.awTask.delay(20);
|
rlm@46
|
24612 }
|
rlm@46
|
24613 },
|
rlm@46
|
24614
|
rlm@46
|
24615 findTargetItem : function(e){
|
rlm@46
|
24616 var t = e.getTarget(".x-menu-list-item", this.ul, true);
|
rlm@46
|
24617 if(t && t.menuItemId){
|
rlm@46
|
24618 return this.items.get(t.menuItemId);
|
rlm@46
|
24619 }
|
rlm@46
|
24620 },
|
rlm@46
|
24621
|
rlm@46
|
24622 onClick : function(e){
|
rlm@46
|
24623 var t;
|
rlm@46
|
24624 if(t = this.findTargetItem(e)){
|
rlm@46
|
24625 t.onClick(e);
|
rlm@46
|
24626 this.fireEvent("click", this, t, e);
|
rlm@46
|
24627 }
|
rlm@46
|
24628 },
|
rlm@46
|
24629
|
rlm@46
|
24630 setActiveItem : function(item, autoExpand){
|
rlm@46
|
24631 if(item != this.activeItem){
|
rlm@46
|
24632 if(this.activeItem){
|
rlm@46
|
24633 this.activeItem.deactivate();
|
rlm@46
|
24634 }
|
rlm@46
|
24635 this.activeItem = item;
|
rlm@46
|
24636 item.activate(autoExpand);
|
rlm@46
|
24637 }else if(autoExpand){
|
rlm@46
|
24638 item.expandMenu();
|
rlm@46
|
24639 }
|
rlm@46
|
24640 },
|
rlm@46
|
24641
|
rlm@46
|
24642 tryActivate : function(start, step){
|
rlm@46
|
24643 var items = this.items;
|
rlm@46
|
24644 for(var i = start, len = items.length; i >= 0 && i < len; i+= step){
|
rlm@46
|
24645 var item = items.get(i);
|
rlm@46
|
24646 if(!item.disabled && item.canActivate){
|
rlm@46
|
24647 this.setActiveItem(item, false);
|
rlm@46
|
24648 return item;
|
rlm@46
|
24649 }
|
rlm@46
|
24650 }
|
rlm@46
|
24651 return false;
|
rlm@46
|
24652 },
|
rlm@46
|
24653
|
rlm@46
|
24654 onMouseOver : function(e){
|
rlm@46
|
24655 var t;
|
rlm@46
|
24656 if(t = this.findTargetItem(e)){
|
rlm@46
|
24657 if(t.canActivate && !t.disabled){
|
rlm@46
|
24658 this.setActiveItem(t, true);
|
rlm@46
|
24659 }
|
rlm@46
|
24660 }
|
rlm@46
|
24661 this.fireEvent("mouseover", this, e, t);
|
rlm@46
|
24662 },
|
rlm@46
|
24663
|
rlm@46
|
24664 onMouseOut : function(e){
|
rlm@46
|
24665 var t;
|
rlm@46
|
24666 if(t = this.findTargetItem(e)){
|
rlm@46
|
24667 if(t == this.activeItem && t.shouldDeactivate(e)){
|
rlm@46
|
24668 this.activeItem.deactivate();
|
rlm@46
|
24669 delete this.activeItem;
|
rlm@46
|
24670 }
|
rlm@46
|
24671 }
|
rlm@46
|
24672 this.fireEvent("mouseout", this, e, t);
|
rlm@46
|
24673 },
|
rlm@46
|
24674
|
rlm@46
|
24675
|
rlm@46
|
24676 isVisible : function(){
|
rlm@46
|
24677 return this.el && !this.hidden;
|
rlm@46
|
24678 },
|
rlm@46
|
24679
|
rlm@46
|
24680
|
rlm@46
|
24681 show : function(el, pos, parentMenu){
|
rlm@46
|
24682 this.parentMenu = parentMenu;
|
rlm@46
|
24683 if(!this.el){
|
rlm@46
|
24684 this.render();
|
rlm@46
|
24685 }
|
rlm@46
|
24686 this.fireEvent("beforeshow", this);
|
rlm@46
|
24687 this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);
|
rlm@46
|
24688 },
|
rlm@46
|
24689
|
rlm@46
|
24690
|
rlm@46
|
24691 showAt : function(xy, parentMenu, _e){
|
rlm@46
|
24692 this.parentMenu = parentMenu;
|
rlm@46
|
24693 if(!this.el){
|
rlm@46
|
24694 this.render();
|
rlm@46
|
24695 }
|
rlm@46
|
24696 if(_e !== false){
|
rlm@46
|
24697 this.fireEvent("beforeshow", this);
|
rlm@46
|
24698 xy = this.el.adjustForConstraints(xy);
|
rlm@46
|
24699 }
|
rlm@46
|
24700 this.el.setXY(xy);
|
rlm@46
|
24701 this.el.show();
|
rlm@46
|
24702 this.hidden = false;
|
rlm@46
|
24703 this.focus();
|
rlm@46
|
24704 this.fireEvent("show", this);
|
rlm@46
|
24705 },
|
rlm@46
|
24706
|
rlm@46
|
24707
|
rlm@46
|
24708
|
rlm@46
|
24709 focus : function(){
|
rlm@46
|
24710 if(!this.hidden){
|
rlm@46
|
24711 this.doFocus.defer(50, this);
|
rlm@46
|
24712 }
|
rlm@46
|
24713 },
|
rlm@46
|
24714
|
rlm@46
|
24715 doFocus : function(){
|
rlm@46
|
24716 if(!this.hidden){
|
rlm@46
|
24717 this.focusEl.focus();
|
rlm@46
|
24718 }
|
rlm@46
|
24719 },
|
rlm@46
|
24720
|
rlm@46
|
24721
|
rlm@46
|
24722 hide : function(deep){
|
rlm@46
|
24723 if(this.el && this.isVisible()){
|
rlm@46
|
24724 this.fireEvent("beforehide", this);
|
rlm@46
|
24725 if(this.activeItem){
|
rlm@46
|
24726 this.activeItem.deactivate();
|
rlm@46
|
24727 this.activeItem = null;
|
rlm@46
|
24728 }
|
rlm@46
|
24729 this.el.hide();
|
rlm@46
|
24730 this.hidden = true;
|
rlm@46
|
24731 this.fireEvent("hide", this);
|
rlm@46
|
24732 }
|
rlm@46
|
24733 if(deep === true && this.parentMenu){
|
rlm@46
|
24734 this.parentMenu.hide(true);
|
rlm@46
|
24735 }
|
rlm@46
|
24736 },
|
rlm@46
|
24737
|
rlm@46
|
24738
|
rlm@46
|
24739 add : function(){
|
rlm@46
|
24740 var a = arguments, l = a.length, item;
|
rlm@46
|
24741 for(var i = 0; i < l; i++){
|
rlm@46
|
24742 var el = a[i];
|
rlm@46
|
24743 if(el.render){ item = this.addItem(el);
|
rlm@46
|
24744 }else if(typeof el == "string"){ if(el == "separator" || el == "-"){
|
rlm@46
|
24745 item = this.addSeparator();
|
rlm@46
|
24746 }else{
|
rlm@46
|
24747 item = this.addText(el);
|
rlm@46
|
24748 }
|
rlm@46
|
24749 }else if(el.tagName || el.el){ item = this.addElement(el);
|
rlm@46
|
24750 }else if(typeof el == "object"){ Ext.applyIf(el, this.defaults);
|
rlm@46
|
24751 item = this.addMenuItem(el);
|
rlm@46
|
24752 }
|
rlm@46
|
24753 }
|
rlm@46
|
24754 return item;
|
rlm@46
|
24755 },
|
rlm@46
|
24756
|
rlm@46
|
24757
|
rlm@46
|
24758 getEl : function(){
|
rlm@46
|
24759 if(!this.el){
|
rlm@46
|
24760 this.render();
|
rlm@46
|
24761 }
|
rlm@46
|
24762 return this.el;
|
rlm@46
|
24763 },
|
rlm@46
|
24764
|
rlm@46
|
24765
|
rlm@46
|
24766 addSeparator : function(){
|
rlm@46
|
24767 return this.addItem(new Ext.menu.Separator());
|
rlm@46
|
24768 },
|
rlm@46
|
24769
|
rlm@46
|
24770
|
rlm@46
|
24771 addElement : function(el){
|
rlm@46
|
24772 return this.addItem(new Ext.menu.BaseItem(el));
|
rlm@46
|
24773 },
|
rlm@46
|
24774
|
rlm@46
|
24775
|
rlm@46
|
24776 addItem : function(item){
|
rlm@46
|
24777 this.items.add(item);
|
rlm@46
|
24778 if(this.ul){
|
rlm@46
|
24779 var li = document.createElement("li");
|
rlm@46
|
24780 li.className = "x-menu-list-item";
|
rlm@46
|
24781 this.ul.dom.appendChild(li);
|
rlm@46
|
24782 item.render(li, this);
|
rlm@46
|
24783 this.delayAutoWidth();
|
rlm@46
|
24784 }
|
rlm@46
|
24785 return item;
|
rlm@46
|
24786 },
|
rlm@46
|
24787
|
rlm@46
|
24788
|
rlm@46
|
24789 addMenuItem : function(config){
|
rlm@46
|
24790 if(!(config instanceof Ext.menu.Item)){
|
rlm@46
|
24791 if(typeof config.checked == "boolean"){ config = new Ext.menu.CheckItem(config);
|
rlm@46
|
24792 }else{
|
rlm@46
|
24793 config = new Ext.menu.Item(config);
|
rlm@46
|
24794 }
|
rlm@46
|
24795 }
|
rlm@46
|
24796 return this.addItem(config);
|
rlm@46
|
24797 },
|
rlm@46
|
24798
|
rlm@46
|
24799
|
rlm@46
|
24800 addText : function(text){
|
rlm@46
|
24801 return this.addItem(new Ext.menu.TextItem(text));
|
rlm@46
|
24802 },
|
rlm@46
|
24803
|
rlm@46
|
24804
|
rlm@46
|
24805 insert : function(index, item){
|
rlm@46
|
24806 this.items.insert(index, item);
|
rlm@46
|
24807 if(this.ul){
|
rlm@46
|
24808 var li = document.createElement("li");
|
rlm@46
|
24809 li.className = "x-menu-list-item";
|
rlm@46
|
24810 this.ul.dom.insertBefore(li, this.ul.dom.childNodes[index]);
|
rlm@46
|
24811 item.render(li, this);
|
rlm@46
|
24812 this.delayAutoWidth();
|
rlm@46
|
24813 }
|
rlm@46
|
24814 return item;
|
rlm@46
|
24815 },
|
rlm@46
|
24816
|
rlm@46
|
24817
|
rlm@46
|
24818 remove : function(item){
|
rlm@46
|
24819 this.items.removeKey(item.id);
|
rlm@46
|
24820 item.destroy();
|
rlm@46
|
24821 },
|
rlm@46
|
24822
|
rlm@46
|
24823
|
rlm@46
|
24824 removeAll : function(){
|
rlm@46
|
24825 if(this.items){
|
rlm@46
|
24826 var f;
|
rlm@46
|
24827 while(f = this.items.first()){
|
rlm@46
|
24828 this.remove(f);
|
rlm@46
|
24829 }
|
rlm@46
|
24830 }
|
rlm@46
|
24831 },
|
rlm@46
|
24832
|
rlm@46
|
24833
|
rlm@46
|
24834 destroy : function(){
|
rlm@46
|
24835 this.beforeDestroy();
|
rlm@46
|
24836 Ext.menu.MenuMgr.unregister(this);
|
rlm@46
|
24837 if (this.keyNav) {
|
rlm@46
|
24838 this.keyNav.disable();
|
rlm@46
|
24839 }
|
rlm@46
|
24840 this.removeAll();
|
rlm@46
|
24841 if (this.ul) {
|
rlm@46
|
24842 this.ul.removeAllListeners();
|
rlm@46
|
24843 }
|
rlm@46
|
24844 if (this.el) {
|
rlm@46
|
24845 this.el.destroy();
|
rlm@46
|
24846 }
|
rlm@46
|
24847 },
|
rlm@46
|
24848
|
rlm@46
|
24849 beforeDestroy : Ext.emptyFn
|
rlm@46
|
24850
|
rlm@46
|
24851 });
|
rlm@46
|
24852
|
rlm@46
|
24853 Ext.menu.MenuNav = function(menu){
|
rlm@46
|
24854 Ext.menu.MenuNav.superclass.constructor.call(this, menu.el);
|
rlm@46
|
24855 this.scope = this.menu = menu;
|
rlm@46
|
24856 };
|
rlm@46
|
24857
|
rlm@46
|
24858 Ext.extend(Ext.menu.MenuNav, Ext.KeyNav, {
|
rlm@46
|
24859 doRelay : function(e, h){
|
rlm@46
|
24860 var k = e.getKey();
|
rlm@46
|
24861 if(!this.menu.activeItem && e.isNavKeyPress() && k != e.SPACE && k != e.RETURN){
|
rlm@46
|
24862 this.menu.tryActivate(0, 1);
|
rlm@46
|
24863 return false;
|
rlm@46
|
24864 }
|
rlm@46
|
24865 return h.call(this.scope || this, e, this.menu);
|
rlm@46
|
24866 },
|
rlm@46
|
24867
|
rlm@46
|
24868 up : function(e, m){
|
rlm@46
|
24869 if(!m.tryActivate(m.items.indexOf(m.activeItem)-1, -1)){
|
rlm@46
|
24870 m.tryActivate(m.items.length-1, -1);
|
rlm@46
|
24871 }
|
rlm@46
|
24872 },
|
rlm@46
|
24873
|
rlm@46
|
24874 down : function(e, m){
|
rlm@46
|
24875 if(!m.tryActivate(m.items.indexOf(m.activeItem)+1, 1)){
|
rlm@46
|
24876 m.tryActivate(0, 1);
|
rlm@46
|
24877 }
|
rlm@46
|
24878 },
|
rlm@46
|
24879
|
rlm@46
|
24880 right : function(e, m){
|
rlm@46
|
24881 if(m.activeItem){
|
rlm@46
|
24882 m.activeItem.expandMenu(true);
|
rlm@46
|
24883 }
|
rlm@46
|
24884 },
|
rlm@46
|
24885
|
rlm@46
|
24886 left : function(e, m){
|
rlm@46
|
24887 m.hide();
|
rlm@46
|
24888 if(m.parentMenu && m.parentMenu.activeItem){
|
rlm@46
|
24889 m.parentMenu.activeItem.activate();
|
rlm@46
|
24890 }
|
rlm@46
|
24891 },
|
rlm@46
|
24892
|
rlm@46
|
24893 enter : function(e, m){
|
rlm@46
|
24894 if(m.activeItem){
|
rlm@46
|
24895 e.stopPropagation();
|
rlm@46
|
24896 m.activeItem.onClick(e);
|
rlm@46
|
24897 m.fireEvent("click", this, m.activeItem);
|
rlm@46
|
24898 return true;
|
rlm@46
|
24899 }
|
rlm@46
|
24900 }
|
rlm@46
|
24901 });
|
rlm@46
|
24902
|
rlm@46
|
24903 Ext.menu.MenuMgr = function(){
|
rlm@46
|
24904 var menus, active, groups = {}, attached = false, lastShow = new Date();
|
rlm@46
|
24905
|
rlm@46
|
24906 function init(){
|
rlm@46
|
24907 menus = {};
|
rlm@46
|
24908 active = new Ext.util.MixedCollection();
|
rlm@46
|
24909 Ext.getDoc().addKeyListener(27, function(){
|
rlm@46
|
24910 if(active.length > 0){
|
rlm@46
|
24911 hideAll();
|
rlm@46
|
24912 }
|
rlm@46
|
24913 });
|
rlm@46
|
24914 }
|
rlm@46
|
24915
|
rlm@46
|
24916 function hideAll(){
|
rlm@46
|
24917 if(active && active.length > 0){
|
rlm@46
|
24918 var c = active.clone();
|
rlm@46
|
24919 c.each(function(m){
|
rlm@46
|
24920 m.hide();
|
rlm@46
|
24921 });
|
rlm@46
|
24922 }
|
rlm@46
|
24923 }
|
rlm@46
|
24924
|
rlm@46
|
24925 function onHide(m){
|
rlm@46
|
24926 active.remove(m);
|
rlm@46
|
24927 if(active.length < 1){
|
rlm@46
|
24928 Ext.getDoc().un("mousedown", onMouseDown);
|
rlm@46
|
24929 attached = false;
|
rlm@46
|
24930 }
|
rlm@46
|
24931 }
|
rlm@46
|
24932
|
rlm@46
|
24933 function onShow(m){
|
rlm@46
|
24934 var last = active.last();
|
rlm@46
|
24935 lastShow = new Date();
|
rlm@46
|
24936 active.add(m);
|
rlm@46
|
24937 if(!attached){
|
rlm@46
|
24938 Ext.getDoc().on("mousedown", onMouseDown);
|
rlm@46
|
24939 attached = true;
|
rlm@46
|
24940 }
|
rlm@46
|
24941 if(m.parentMenu){
|
rlm@46
|
24942 m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
|
rlm@46
|
24943 m.parentMenu.activeChild = m;
|
rlm@46
|
24944 }else if(last && last.isVisible()){
|
rlm@46
|
24945 m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
|
rlm@46
|
24946 }
|
rlm@46
|
24947 }
|
rlm@46
|
24948
|
rlm@46
|
24949 function onBeforeHide(m){
|
rlm@46
|
24950 if(m.activeChild){
|
rlm@46
|
24951 m.activeChild.hide();
|
rlm@46
|
24952 }
|
rlm@46
|
24953 if(m.autoHideTimer){
|
rlm@46
|
24954 clearTimeout(m.autoHideTimer);
|
rlm@46
|
24955 delete m.autoHideTimer;
|
rlm@46
|
24956 }
|
rlm@46
|
24957 }
|
rlm@46
|
24958
|
rlm@46
|
24959 function onBeforeShow(m){
|
rlm@46
|
24960 var pm = m.parentMenu;
|
rlm@46
|
24961 if(!pm && !m.allowOtherMenus){
|
rlm@46
|
24962 hideAll();
|
rlm@46
|
24963 }else if(pm && pm.activeChild){
|
rlm@46
|
24964 pm.activeChild.hide();
|
rlm@46
|
24965 }
|
rlm@46
|
24966 }
|
rlm@46
|
24967
|
rlm@46
|
24968 function onMouseDown(e){
|
rlm@46
|
24969 if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){
|
rlm@46
|
24970 hideAll();
|
rlm@46
|
24971 }
|
rlm@46
|
24972 }
|
rlm@46
|
24973
|
rlm@46
|
24974 function onBeforeCheck(mi, state){
|
rlm@46
|
24975 if(state){
|
rlm@46
|
24976 var g = groups[mi.group];
|
rlm@46
|
24977 for(var i = 0, l = g.length; i < l; i++){
|
rlm@46
|
24978 if(g[i] != mi){
|
rlm@46
|
24979 g[i].setChecked(false);
|
rlm@46
|
24980 }
|
rlm@46
|
24981 }
|
rlm@46
|
24982 }
|
rlm@46
|
24983 }
|
rlm@46
|
24984
|
rlm@46
|
24985 return {
|
rlm@46
|
24986
|
rlm@46
|
24987
|
rlm@46
|
24988 hideAll : function(){
|
rlm@46
|
24989 hideAll();
|
rlm@46
|
24990 },
|
rlm@46
|
24991
|
rlm@46
|
24992 register : function(menu){
|
rlm@46
|
24993 if(!menus){
|
rlm@46
|
24994 init();
|
rlm@46
|
24995 }
|
rlm@46
|
24996 menus[menu.id] = menu;
|
rlm@46
|
24997 menu.on("beforehide", onBeforeHide);
|
rlm@46
|
24998 menu.on("hide", onHide);
|
rlm@46
|
24999 menu.on("beforeshow", onBeforeShow);
|
rlm@46
|
25000 menu.on("show", onShow);
|
rlm@46
|
25001 var g = menu.group;
|
rlm@46
|
25002 if(g && menu.events["checkchange"]){
|
rlm@46
|
25003 if(!groups[g]){
|
rlm@46
|
25004 groups[g] = [];
|
rlm@46
|
25005 }
|
rlm@46
|
25006 groups[g].push(menu);
|
rlm@46
|
25007 menu.on("checkchange", onCheck);
|
rlm@46
|
25008 }
|
rlm@46
|
25009 },
|
rlm@46
|
25010
|
rlm@46
|
25011
|
rlm@46
|
25012 get : function(menu){
|
rlm@46
|
25013 if(typeof menu == "string"){ if(!menus){ return null;
|
rlm@46
|
25014 }
|
rlm@46
|
25015 return menus[menu];
|
rlm@46
|
25016 }else if(menu.events){ return menu;
|
rlm@46
|
25017 }else if(typeof menu.length == 'number'){ return new Ext.menu.Menu({items:menu});
|
rlm@46
|
25018 }else{ return new Ext.menu.Menu(menu);
|
rlm@46
|
25019 }
|
rlm@46
|
25020 },
|
rlm@46
|
25021
|
rlm@46
|
25022 unregister : function(menu){
|
rlm@46
|
25023 delete menus[menu.id];
|
rlm@46
|
25024 menu.un("beforehide", onBeforeHide);
|
rlm@46
|
25025 menu.un("hide", onHide);
|
rlm@46
|
25026 menu.un("beforeshow", onBeforeShow);
|
rlm@46
|
25027 menu.un("show", onShow);
|
rlm@46
|
25028 var g = menu.group;
|
rlm@46
|
25029 if(g && menu.events["checkchange"]){
|
rlm@46
|
25030 groups[g].remove(menu);
|
rlm@46
|
25031 menu.un("checkchange", onCheck);
|
rlm@46
|
25032 }
|
rlm@46
|
25033 },
|
rlm@46
|
25034
|
rlm@46
|
25035 registerCheckable : function(menuItem){
|
rlm@46
|
25036 var g = menuItem.group;
|
rlm@46
|
25037 if(g){
|
rlm@46
|
25038 if(!groups[g]){
|
rlm@46
|
25039 groups[g] = [];
|
rlm@46
|
25040 }
|
rlm@46
|
25041 groups[g].push(menuItem);
|
rlm@46
|
25042 menuItem.on("beforecheckchange", onBeforeCheck);
|
rlm@46
|
25043 }
|
rlm@46
|
25044 },
|
rlm@46
|
25045
|
rlm@46
|
25046 unregisterCheckable : function(menuItem){
|
rlm@46
|
25047 var g = menuItem.group;
|
rlm@46
|
25048 if(g){
|
rlm@46
|
25049 groups[g].remove(menuItem);
|
rlm@46
|
25050 menuItem.un("beforecheckchange", onBeforeCheck);
|
rlm@46
|
25051 }
|
rlm@46
|
25052 },
|
rlm@46
|
25053
|
rlm@46
|
25054 getCheckedItem : function(groupId){
|
rlm@46
|
25055 var g = groups[groupId];
|
rlm@46
|
25056 if(g){
|
rlm@46
|
25057 for(var i = 0, l = g.length; i < l; i++){
|
rlm@46
|
25058 if(g[i].checked){
|
rlm@46
|
25059 return g[i];
|
rlm@46
|
25060 }
|
rlm@46
|
25061 }
|
rlm@46
|
25062 }
|
rlm@46
|
25063 return null;
|
rlm@46
|
25064 },
|
rlm@46
|
25065
|
rlm@46
|
25066 setCheckedItem : function(groupId, itemId){
|
rlm@46
|
25067 var g = groups[groupId];
|
rlm@46
|
25068 if(g){
|
rlm@46
|
25069 for(var i = 0, l = g.length; i < l; i++){
|
rlm@46
|
25070 if(g[i].id == itemId){
|
rlm@46
|
25071 g[i].setChecked(true);
|
rlm@46
|
25072 }
|
rlm@46
|
25073 }
|
rlm@46
|
25074 }
|
rlm@46
|
25075 return null;
|
rlm@46
|
25076 }
|
rlm@46
|
25077 };
|
rlm@46
|
25078 }();
|
rlm@46
|
25079
|
rlm@46
|
25080
|
rlm@46
|
25081 Ext.menu.BaseItem = function(config){
|
rlm@46
|
25082 Ext.menu.BaseItem.superclass.constructor.call(this, config);
|
rlm@46
|
25083
|
rlm@46
|
25084 this.addEvents(
|
rlm@46
|
25085
|
rlm@46
|
25086 'click',
|
rlm@46
|
25087
|
rlm@46
|
25088 'activate',
|
rlm@46
|
25089
|
rlm@46
|
25090 'deactivate'
|
rlm@46
|
25091 );
|
rlm@46
|
25092
|
rlm@46
|
25093 if(this.handler){
|
rlm@46
|
25094 this.on("click", this.handler, this.scope);
|
rlm@46
|
25095 }
|
rlm@46
|
25096 };
|
rlm@46
|
25097
|
rlm@46
|
25098 Ext.extend(Ext.menu.BaseItem, Ext.Component, {
|
rlm@46
|
25099
|
rlm@46
|
25100
|
rlm@46
|
25101
|
rlm@46
|
25102 canActivate : false,
|
rlm@46
|
25103
|
rlm@46
|
25104 activeClass : "x-menu-item-active",
|
rlm@46
|
25105
|
rlm@46
|
25106 hideOnClick : true,
|
rlm@46
|
25107
|
rlm@46
|
25108 hideDelay : 100,
|
rlm@46
|
25109
|
rlm@46
|
25110 ctype: "Ext.menu.BaseItem",
|
rlm@46
|
25111
|
rlm@46
|
25112 actionMode : "container",
|
rlm@46
|
25113
|
rlm@46
|
25114 render : function(container, parentMenu){
|
rlm@46
|
25115 this.parentMenu = parentMenu;
|
rlm@46
|
25116 Ext.menu.BaseItem.superclass.render.call(this, container);
|
rlm@46
|
25117 this.container.menuItemId = this.id;
|
rlm@46
|
25118 },
|
rlm@46
|
25119
|
rlm@46
|
25120 onRender : function(container, position){
|
rlm@46
|
25121 this.el = Ext.get(this.el);
|
rlm@46
|
25122 container.dom.appendChild(this.el.dom);
|
rlm@46
|
25123 },
|
rlm@46
|
25124
|
rlm@46
|
25125
|
rlm@46
|
25126 setHandler : function(handler, scope){
|
rlm@46
|
25127 if(this.handler){
|
rlm@46
|
25128 this.un("click", this.handler, this.scope);
|
rlm@46
|
25129 }
|
rlm@46
|
25130 this.on("click", this.handler = handler, this.scope = scope);
|
rlm@46
|
25131 },
|
rlm@46
|
25132
|
rlm@46
|
25133 onClick : function(e){
|
rlm@46
|
25134 if(!this.disabled && this.fireEvent("click", this, e) !== false
|
rlm@46
|
25135 && this.parentMenu.fireEvent("itemclick", this, e) !== false){
|
rlm@46
|
25136 this.handleClick(e);
|
rlm@46
|
25137 }else{
|
rlm@46
|
25138 e.stopEvent();
|
rlm@46
|
25139 }
|
rlm@46
|
25140 },
|
rlm@46
|
25141
|
rlm@46
|
25142 activate : function(){
|
rlm@46
|
25143 if(this.disabled){
|
rlm@46
|
25144 return false;
|
rlm@46
|
25145 }
|
rlm@46
|
25146 var li = this.container;
|
rlm@46
|
25147 li.addClass(this.activeClass);
|
rlm@46
|
25148 this.region = li.getRegion().adjust(2, 2, -2, -2);
|
rlm@46
|
25149 this.fireEvent("activate", this);
|
rlm@46
|
25150 return true;
|
rlm@46
|
25151 },
|
rlm@46
|
25152
|
rlm@46
|
25153 deactivate : function(){
|
rlm@46
|
25154 this.container.removeClass(this.activeClass);
|
rlm@46
|
25155 this.fireEvent("deactivate", this);
|
rlm@46
|
25156 },
|
rlm@46
|
25157
|
rlm@46
|
25158 shouldDeactivate : function(e){
|
rlm@46
|
25159 return !this.region || !this.region.contains(e.getPoint());
|
rlm@46
|
25160 },
|
rlm@46
|
25161
|
rlm@46
|
25162 handleClick : function(e){
|
rlm@46
|
25163 if(this.hideOnClick){
|
rlm@46
|
25164 this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true]);
|
rlm@46
|
25165 }
|
rlm@46
|
25166 },
|
rlm@46
|
25167
|
rlm@46
|
25168 expandMenu : function(autoActivate){
|
rlm@46
|
25169 },
|
rlm@46
|
25170
|
rlm@46
|
25171 hideMenu : function(){
|
rlm@46
|
25172 }
|
rlm@46
|
25173 });
|
rlm@46
|
25174
|
rlm@46
|
25175 Ext.menu.TextItem = function(text){
|
rlm@46
|
25176 this.text = text;
|
rlm@46
|
25177 Ext.menu.TextItem.superclass.constructor.call(this);
|
rlm@46
|
25178 };
|
rlm@46
|
25179
|
rlm@46
|
25180 Ext.extend(Ext.menu.TextItem, Ext.menu.BaseItem, {
|
rlm@46
|
25181
|
rlm@46
|
25182
|
rlm@46
|
25183 hideOnClick : false,
|
rlm@46
|
25184
|
rlm@46
|
25185 itemCls : "x-menu-text",
|
rlm@46
|
25186
|
rlm@46
|
25187 onRender : function(){
|
rlm@46
|
25188 var s = document.createElement("span");
|
rlm@46
|
25189 s.className = this.itemCls;
|
rlm@46
|
25190 s.innerHTML = this.text;
|
rlm@46
|
25191 this.el = s;
|
rlm@46
|
25192 Ext.menu.TextItem.superclass.onRender.apply(this, arguments);
|
rlm@46
|
25193 }
|
rlm@46
|
25194 });
|
rlm@46
|
25195
|
rlm@46
|
25196 Ext.menu.Separator = function(config){
|
rlm@46
|
25197 Ext.menu.Separator.superclass.constructor.call(this, config);
|
rlm@46
|
25198 };
|
rlm@46
|
25199
|
rlm@46
|
25200 Ext.extend(Ext.menu.Separator, Ext.menu.BaseItem, {
|
rlm@46
|
25201
|
rlm@46
|
25202 itemCls : "x-menu-sep",
|
rlm@46
|
25203
|
rlm@46
|
25204 hideOnClick : false,
|
rlm@46
|
25205
|
rlm@46
|
25206 onRender : function(li){
|
rlm@46
|
25207 var s = document.createElement("span");
|
rlm@46
|
25208 s.className = this.itemCls;
|
rlm@46
|
25209 s.innerHTML = " ";
|
rlm@46
|
25210 this.el = s;
|
rlm@46
|
25211 li.addClass("x-menu-sep-li");
|
rlm@46
|
25212 Ext.menu.Separator.superclass.onRender.apply(this, arguments);
|
rlm@46
|
25213 }
|
rlm@46
|
25214 });
|
rlm@46
|
25215
|
rlm@46
|
25216 Ext.menu.Item = function(config){
|
rlm@46
|
25217 Ext.menu.Item.superclass.constructor.call(this, config);
|
rlm@46
|
25218 if(this.menu){
|
rlm@46
|
25219 this.menu = Ext.menu.MenuMgr.get(this.menu);
|
rlm@46
|
25220 }
|
rlm@46
|
25221 };
|
rlm@46
|
25222 Ext.extend(Ext.menu.Item, Ext.menu.BaseItem, {
|
rlm@46
|
25223
|
rlm@46
|
25224
|
rlm@46
|
25225
|
rlm@46
|
25226
|
rlm@46
|
25227
|
rlm@46
|
25228
|
rlm@46
|
25229
|
rlm@46
|
25230 itemCls : "x-menu-item",
|
rlm@46
|
25231
|
rlm@46
|
25232 canActivate : true,
|
rlm@46
|
25233
|
rlm@46
|
25234 showDelay: 200,
|
rlm@46
|
25235 hideDelay: 200,
|
rlm@46
|
25236
|
rlm@46
|
25237 ctype: "Ext.menu.Item",
|
rlm@46
|
25238
|
rlm@46
|
25239 onRender : function(container, position){
|
rlm@46
|
25240 var el = document.createElement("a");
|
rlm@46
|
25241 el.hideFocus = true;
|
rlm@46
|
25242 el.unselectable = "on";
|
rlm@46
|
25243 el.href = this.href || "#";
|
rlm@46
|
25244 if(this.hrefTarget){
|
rlm@46
|
25245 el.target = this.hrefTarget;
|
rlm@46
|
25246 }
|
rlm@46
|
25247 el.className = this.itemCls + (this.menu ? " x-menu-item-arrow" : "") + (this.cls ? " " + this.cls : "");
|
rlm@46
|
25248 el.innerHTML = String.format(
|
rlm@46
|
25249 '<img src="{0}" class="x-menu-item-icon {2}" />{1}',
|
rlm@46
|
25250 this.icon || Ext.BLANK_IMAGE_URL, this.itemText||this.text, this.iconCls || '');
|
rlm@46
|
25251 this.el = el;
|
rlm@46
|
25252 Ext.menu.Item.superclass.onRender.call(this, container, position);
|
rlm@46
|
25253 },
|
rlm@46
|
25254
|
rlm@46
|
25255
|
rlm@46
|
25256 setText : function(text){
|
rlm@46
|
25257 this.text = text;
|
rlm@46
|
25258 if(this.rendered){
|
rlm@46
|
25259 this.el.update(String.format(
|
rlm@46
|
25260 '<img src="{0}" class="x-menu-item-icon {2}">{1}',
|
rlm@46
|
25261 this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || ''));
|
rlm@46
|
25262 this.parentMenu.autoWidth();
|
rlm@46
|
25263 }
|
rlm@46
|
25264 },
|
rlm@46
|
25265
|
rlm@46
|
25266
|
rlm@46
|
25267 setIconClass : function(cls){
|
rlm@46
|
25268 var oldCls = this.iconCls;
|
rlm@46
|
25269 this.iconCls = cls;
|
rlm@46
|
25270 if(this.rendered){
|
rlm@46
|
25271 this.el.child('img.x-menu-item-icon').replaceClass(oldCls, this.iconCls);
|
rlm@46
|
25272 }
|
rlm@46
|
25273 },
|
rlm@46
|
25274
|
rlm@46
|
25275 handleClick : function(e){
|
rlm@46
|
25276 if(!this.href){ e.stopEvent();
|
rlm@46
|
25277 }
|
rlm@46
|
25278 Ext.menu.Item.superclass.handleClick.apply(this, arguments);
|
rlm@46
|
25279 },
|
rlm@46
|
25280
|
rlm@46
|
25281 activate : function(autoExpand){
|
rlm@46
|
25282 if(Ext.menu.Item.superclass.activate.apply(this, arguments)){
|
rlm@46
|
25283 this.focus();
|
rlm@46
|
25284 if(autoExpand){
|
rlm@46
|
25285 this.expandMenu();
|
rlm@46
|
25286 }
|
rlm@46
|
25287 }
|
rlm@46
|
25288 return true;
|
rlm@46
|
25289 },
|
rlm@46
|
25290
|
rlm@46
|
25291 shouldDeactivate : function(e){
|
rlm@46
|
25292 if(Ext.menu.Item.superclass.shouldDeactivate.call(this, e)){
|
rlm@46
|
25293 if(this.menu && this.menu.isVisible()){
|
rlm@46
|
25294 return !this.menu.getEl().getRegion().contains(e.getPoint());
|
rlm@46
|
25295 }
|
rlm@46
|
25296 return true;
|
rlm@46
|
25297 }
|
rlm@46
|
25298 return false;
|
rlm@46
|
25299 },
|
rlm@46
|
25300
|
rlm@46
|
25301 deactivate : function(){
|
rlm@46
|
25302 Ext.menu.Item.superclass.deactivate.apply(this, arguments);
|
rlm@46
|
25303 this.hideMenu();
|
rlm@46
|
25304 },
|
rlm@46
|
25305
|
rlm@46
|
25306 expandMenu : function(autoActivate){
|
rlm@46
|
25307 if(!this.disabled && this.menu){
|
rlm@46
|
25308 clearTimeout(this.hideTimer);
|
rlm@46
|
25309 delete this.hideTimer;
|
rlm@46
|
25310 if(!this.menu.isVisible() && !this.showTimer){
|
rlm@46
|
25311 this.showTimer = this.deferExpand.defer(this.showDelay, this, [autoActivate]);
|
rlm@46
|
25312 }else if (this.menu.isVisible() && autoActivate){
|
rlm@46
|
25313 this.menu.tryActivate(0, 1);
|
rlm@46
|
25314 }
|
rlm@46
|
25315 }
|
rlm@46
|
25316 },
|
rlm@46
|
25317
|
rlm@46
|
25318 deferExpand : function(autoActivate){
|
rlm@46
|
25319 delete this.showTimer;
|
rlm@46
|
25320 this.menu.show(this.container, this.parentMenu.subMenuAlign || "tl-tr?", this.parentMenu);
|
rlm@46
|
25321 if(autoActivate){
|
rlm@46
|
25322 this.menu.tryActivate(0, 1);
|
rlm@46
|
25323 }
|
rlm@46
|
25324 },
|
rlm@46
|
25325
|
rlm@46
|
25326 hideMenu : function(){
|
rlm@46
|
25327 clearTimeout(this.showTimer);
|
rlm@46
|
25328 delete this.showTimer;
|
rlm@46
|
25329 if(!this.hideTimer && this.menu && this.menu.isVisible()){
|
rlm@46
|
25330 this.hideTimer = this.deferHide.defer(this.hideDelay, this);
|
rlm@46
|
25331 }
|
rlm@46
|
25332 },
|
rlm@46
|
25333
|
rlm@46
|
25334 deferHide : function(){
|
rlm@46
|
25335 delete this.hideTimer;
|
rlm@46
|
25336 this.menu.hide();
|
rlm@46
|
25337 }
|
rlm@46
|
25338 });
|
rlm@46
|
25339
|
rlm@46
|
25340 Ext.menu.CheckItem = function(config){
|
rlm@46
|
25341 Ext.menu.CheckItem.superclass.constructor.call(this, config);
|
rlm@46
|
25342 this.addEvents(
|
rlm@46
|
25343
|
rlm@46
|
25344 "beforecheckchange" ,
|
rlm@46
|
25345
|
rlm@46
|
25346 "checkchange"
|
rlm@46
|
25347 );
|
rlm@46
|
25348
|
rlm@46
|
25349 if(this.checkHandler){
|
rlm@46
|
25350 this.on('checkchange', this.checkHandler, this.scope);
|
rlm@46
|
25351 }
|
rlm@46
|
25352 Ext.menu.MenuMgr.registerCheckable(this);
|
rlm@46
|
25353 };
|
rlm@46
|
25354 Ext.extend(Ext.menu.CheckItem, Ext.menu.Item, {
|
rlm@46
|
25355
|
rlm@46
|
25356
|
rlm@46
|
25357 itemCls : "x-menu-item x-menu-check-item",
|
rlm@46
|
25358
|
rlm@46
|
25359 groupClass : "x-menu-group-item",
|
rlm@46
|
25360
|
rlm@46
|
25361
|
rlm@46
|
25362 checked: false,
|
rlm@46
|
25363
|
rlm@46
|
25364 ctype: "Ext.menu.CheckItem",
|
rlm@46
|
25365
|
rlm@46
|
25366 onRender : function(c){
|
rlm@46
|
25367 Ext.menu.CheckItem.superclass.onRender.apply(this, arguments);
|
rlm@46
|
25368 if(this.group){
|
rlm@46
|
25369 this.el.addClass(this.groupClass);
|
rlm@46
|
25370 }
|
rlm@46
|
25371 if(this.checked){
|
rlm@46
|
25372 this.checked = false;
|
rlm@46
|
25373 this.setChecked(true, true);
|
rlm@46
|
25374 }
|
rlm@46
|
25375 },
|
rlm@46
|
25376
|
rlm@46
|
25377 destroy : function(){
|
rlm@46
|
25378 Ext.menu.MenuMgr.unregisterCheckable(this);
|
rlm@46
|
25379 Ext.menu.CheckItem.superclass.destroy.apply(this, arguments);
|
rlm@46
|
25380 },
|
rlm@46
|
25381
|
rlm@46
|
25382
|
rlm@46
|
25383 setChecked : function(state, suppressEvent){
|
rlm@46
|
25384 if(this.checked != state && this.fireEvent("beforecheckchange", this, state) !== false){
|
rlm@46
|
25385 if(this.container){
|
rlm@46
|
25386 this.container[state ? "addClass" : "removeClass"]("x-menu-item-checked");
|
rlm@46
|
25387 }
|
rlm@46
|
25388 this.checked = state;
|
rlm@46
|
25389 if(suppressEvent !== true){
|
rlm@46
|
25390 this.fireEvent("checkchange", this, state);
|
rlm@46
|
25391 }
|
rlm@46
|
25392 }
|
rlm@46
|
25393 },
|
rlm@46
|
25394
|
rlm@46
|
25395 handleClick : function(e){
|
rlm@46
|
25396 if(!this.disabled && !(this.checked && this.group)){ this.setChecked(!this.checked);
|
rlm@46
|
25397 }
|
rlm@46
|
25398 Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments);
|
rlm@46
|
25399 }
|
rlm@46
|
25400 });
|
rlm@46
|
25401
|
rlm@46
|
25402 Ext.menu.Adapter = function(component, config){
|
rlm@46
|
25403 Ext.menu.Adapter.superclass.constructor.call(this, config);
|
rlm@46
|
25404 this.component = component;
|
rlm@46
|
25405 };
|
rlm@46
|
25406 Ext.extend(Ext.menu.Adapter, Ext.menu.BaseItem, {
|
rlm@46
|
25407 canActivate : true,
|
rlm@46
|
25408
|
rlm@46
|
25409 onRender : function(container, position){
|
rlm@46
|
25410 this.component.render(container);
|
rlm@46
|
25411 this.el = this.component.getEl();
|
rlm@46
|
25412 },
|
rlm@46
|
25413
|
rlm@46
|
25414 activate : function(){
|
rlm@46
|
25415 if(this.disabled){
|
rlm@46
|
25416 return false;
|
rlm@46
|
25417 }
|
rlm@46
|
25418 this.component.focus();
|
rlm@46
|
25419 this.fireEvent("activate", this);
|
rlm@46
|
25420 return true;
|
rlm@46
|
25421 },
|
rlm@46
|
25422
|
rlm@46
|
25423 deactivate : function(){
|
rlm@46
|
25424 this.fireEvent("deactivate", this);
|
rlm@46
|
25425 },
|
rlm@46
|
25426
|
rlm@46
|
25427 disable : function(){
|
rlm@46
|
25428 this.component.disable();
|
rlm@46
|
25429 Ext.menu.Adapter.superclass.disable.call(this);
|
rlm@46
|
25430 },
|
rlm@46
|
25431
|
rlm@46
|
25432 enable : function(){
|
rlm@46
|
25433 this.component.enable();
|
rlm@46
|
25434 Ext.menu.Adapter.superclass.enable.call(this);
|
rlm@46
|
25435 }
|
rlm@46
|
25436 });
|
rlm@46
|
25437
|
rlm@46
|
25438 Ext.menu.DateItem = function(config){
|
rlm@46
|
25439 Ext.menu.DateItem.superclass.constructor.call(this, new Ext.DatePicker(config), config);
|
rlm@46
|
25440
|
rlm@46
|
25441 this.picker = this.component;
|
rlm@46
|
25442 this.addEvents('select');
|
rlm@46
|
25443
|
rlm@46
|
25444 this.picker.on("render", function(picker){
|
rlm@46
|
25445 picker.getEl().swallowEvent("click");
|
rlm@46
|
25446 picker.container.addClass("x-menu-date-item");
|
rlm@46
|
25447 });
|
rlm@46
|
25448
|
rlm@46
|
25449 this.picker.on("select", this.onSelect, this);
|
rlm@46
|
25450 };
|
rlm@46
|
25451
|
rlm@46
|
25452 Ext.extend(Ext.menu.DateItem, Ext.menu.Adapter, {
|
rlm@46
|
25453 onSelect : function(picker, date){
|
rlm@46
|
25454 this.fireEvent("select", this, date, picker);
|
rlm@46
|
25455 Ext.menu.DateItem.superclass.handleClick.call(this);
|
rlm@46
|
25456 }
|
rlm@46
|
25457 });
|
rlm@46
|
25458
|
rlm@46
|
25459 Ext.menu.ColorItem = function(config){
|
rlm@46
|
25460 Ext.menu.ColorItem.superclass.constructor.call(this, new Ext.ColorPalette(config), config);
|
rlm@46
|
25461
|
rlm@46
|
25462 this.palette = this.component;
|
rlm@46
|
25463 this.relayEvents(this.palette, ["select"]);
|
rlm@46
|
25464 if(this.selectHandler){
|
rlm@46
|
25465 this.on('select', this.selectHandler, this.scope);
|
rlm@46
|
25466 }
|
rlm@46
|
25467 };
|
rlm@46
|
25468 Ext.extend(Ext.menu.ColorItem, Ext.menu.Adapter);
|
rlm@46
|
25469
|
rlm@46
|
25470 Ext.menu.DateMenu = function(config){
|
rlm@46
|
25471 Ext.menu.DateMenu.superclass.constructor.call(this, config);
|
rlm@46
|
25472 this.plain = true;
|
rlm@46
|
25473 var di = new Ext.menu.DateItem(config);
|
rlm@46
|
25474 this.add(di);
|
rlm@46
|
25475
|
rlm@46
|
25476 this.picker = di.picker;
|
rlm@46
|
25477
|
rlm@46
|
25478 this.relayEvents(di, ["select"]);
|
rlm@46
|
25479
|
rlm@46
|
25480 this.on('beforeshow', function(){
|
rlm@46
|
25481 if(this.picker){
|
rlm@46
|
25482 this.picker.hideMonthPicker(true);
|
rlm@46
|
25483 }
|
rlm@46
|
25484 }, this);
|
rlm@46
|
25485 };
|
rlm@46
|
25486 Ext.extend(Ext.menu.DateMenu, Ext.menu.Menu, {
|
rlm@46
|
25487 cls:'x-date-menu',
|
rlm@46
|
25488
|
rlm@46
|
25489 beforeDestroy : function() {
|
rlm@46
|
25490 this.picker.destroy();
|
rlm@46
|
25491 }
|
rlm@46
|
25492 });
|
rlm@46
|
25493
|
rlm@46
|
25494 Ext.menu.ColorMenu = function(config){
|
rlm@46
|
25495 Ext.menu.ColorMenu.superclass.constructor.call(this, config);
|
rlm@46
|
25496 this.plain = true;
|
rlm@46
|
25497 var ci = new Ext.menu.ColorItem(config);
|
rlm@46
|
25498 this.add(ci);
|
rlm@46
|
25499
|
rlm@46
|
25500 this.palette = ci.palette;
|
rlm@46
|
25501
|
rlm@46
|
25502 this.relayEvents(ci, ["select"]);
|
rlm@46
|
25503 };
|
rlm@46
|
25504 Ext.extend(Ext.menu.ColorMenu, Ext.menu.Menu);
|
rlm@46
|
25505
|
rlm@46
|
25506 Ext.form.Field = Ext.extend(Ext.BoxComponent, {
|
rlm@46
|
25507
|
rlm@46
|
25508
|
rlm@46
|
25509
|
rlm@46
|
25510
|
rlm@46
|
25511
|
rlm@46
|
25512
|
rlm@46
|
25513
|
rlm@46
|
25514
|
rlm@46
|
25515
|
rlm@46
|
25516
|
rlm@46
|
25517
|
rlm@46
|
25518
|
rlm@46
|
25519
|
rlm@46
|
25520 invalidClass : "x-form-invalid",
|
rlm@46
|
25521
|
rlm@46
|
25522 invalidText : "The value in this field is invalid",
|
rlm@46
|
25523
|
rlm@46
|
25524 focusClass : "x-form-focus",
|
rlm@46
|
25525
|
rlm@46
|
25526 validationEvent : "keyup",
|
rlm@46
|
25527
|
rlm@46
|
25528 validateOnBlur : true,
|
rlm@46
|
25529
|
rlm@46
|
25530 validationDelay : 250,
|
rlm@46
|
25531
|
rlm@46
|
25532 defaultAutoCreate : {tag: "input", type: "text", size: "20", autocomplete: "off"},
|
rlm@46
|
25533
|
rlm@46
|
25534 fieldClass : "x-form-field",
|
rlm@46
|
25535
|
rlm@46
|
25536 msgTarget : 'qtip',
|
rlm@46
|
25537
|
rlm@46
|
25538 msgFx : 'normal',
|
rlm@46
|
25539
|
rlm@46
|
25540 readOnly : false,
|
rlm@46
|
25541
|
rlm@46
|
25542 disabled : false,
|
rlm@46
|
25543
|
rlm@46
|
25544 isFormField : true,
|
rlm@46
|
25545
|
rlm@46
|
25546 hasFocus : false,
|
rlm@46
|
25547
|
rlm@46
|
25548 initComponent : function(){
|
rlm@46
|
25549 Ext.form.Field.superclass.initComponent.call(this);
|
rlm@46
|
25550 this.addEvents(
|
rlm@46
|
25551
|
rlm@46
|
25552 'focus',
|
rlm@46
|
25553
|
rlm@46
|
25554 'blur',
|
rlm@46
|
25555
|
rlm@46
|
25556 'specialkey',
|
rlm@46
|
25557
|
rlm@46
|
25558 'change',
|
rlm@46
|
25559
|
rlm@46
|
25560 'invalid',
|
rlm@46
|
25561
|
rlm@46
|
25562 'valid'
|
rlm@46
|
25563 );
|
rlm@46
|
25564 },
|
rlm@46
|
25565
|
rlm@46
|
25566
|
rlm@46
|
25567 getName: function(){
|
rlm@46
|
25568 return this.rendered && this.el.dom.name ? this.el.dom.name : (this.hiddenName || '');
|
rlm@46
|
25569 },
|
rlm@46
|
25570
|
rlm@46
|
25571 onRender : function(ct, position){
|
rlm@46
|
25572 Ext.form.Field.superclass.onRender.call(this, ct, position);
|
rlm@46
|
25573 if(!this.el){
|
rlm@46
|
25574 var cfg = this.getAutoCreate();
|
rlm@46
|
25575 if(!cfg.name){
|
rlm@46
|
25576 cfg.name = this.name || this.id;
|
rlm@46
|
25577 }
|
rlm@46
|
25578 if(this.inputType){
|
rlm@46
|
25579 cfg.type = this.inputType;
|
rlm@46
|
25580 }
|
rlm@46
|
25581 this.el = ct.createChild(cfg, position);
|
rlm@46
|
25582 }
|
rlm@46
|
25583 var type = this.el.dom.type;
|
rlm@46
|
25584 if(type){
|
rlm@46
|
25585 if(type == 'password'){
|
rlm@46
|
25586 type = 'text';
|
rlm@46
|
25587 }
|
rlm@46
|
25588 this.el.addClass('x-form-'+type);
|
rlm@46
|
25589 }
|
rlm@46
|
25590 if(this.readOnly){
|
rlm@46
|
25591 this.el.dom.readOnly = true;
|
rlm@46
|
25592 }
|
rlm@46
|
25593 if(this.tabIndex !== undefined){
|
rlm@46
|
25594 this.el.dom.setAttribute('tabIndex', this.tabIndex);
|
rlm@46
|
25595 }
|
rlm@46
|
25596
|
rlm@46
|
25597 this.el.addClass([this.fieldClass, this.cls]);
|
rlm@46
|
25598 this.initValue();
|
rlm@46
|
25599 },
|
rlm@46
|
25600
|
rlm@46
|
25601 initValue : function(){
|
rlm@46
|
25602 if(this.value !== undefined){
|
rlm@46
|
25603 this.setValue(this.value);
|
rlm@46
|
25604 }else if(this.el.dom.value.length > 0){
|
rlm@46
|
25605 this.setValue(this.el.dom.value);
|
rlm@46
|
25606 }
|
rlm@46
|
25607 },
|
rlm@46
|
25608
|
rlm@46
|
25609
|
rlm@46
|
25610 isDirty : function() {
|
rlm@46
|
25611 if(this.disabled) {
|
rlm@46
|
25612 return false;
|
rlm@46
|
25613 }
|
rlm@46
|
25614 return String(this.getValue()) !== String(this.originalValue);
|
rlm@46
|
25615 },
|
rlm@46
|
25616
|
rlm@46
|
25617 afterRender : function(){
|
rlm@46
|
25618 Ext.form.Field.superclass.afterRender.call(this);
|
rlm@46
|
25619 this.initEvents();
|
rlm@46
|
25620 },
|
rlm@46
|
25621
|
rlm@46
|
25622 fireKey : function(e){
|
rlm@46
|
25623 if(e.isSpecialKey()){
|
rlm@46
|
25624 this.fireEvent("specialkey", this, e);
|
rlm@46
|
25625 }
|
rlm@46
|
25626 },
|
rlm@46
|
25627
|
rlm@46
|
25628
|
rlm@46
|
25629 reset : function(){
|
rlm@46
|
25630 this.setValue(this.originalValue);
|
rlm@46
|
25631 this.clearInvalid();
|
rlm@46
|
25632 },
|
rlm@46
|
25633
|
rlm@46
|
25634 initEvents : function(){
|
rlm@46
|
25635 this.el.on(Ext.isIE || Ext.isSafari3 ? "keydown" : "keypress", this.fireKey, this);
|
rlm@46
|
25636 this.el.on("focus", this.onFocus, this);
|
rlm@46
|
25637 this.el.on("blur", this.onBlur, this);
|
rlm@46
|
25638
|
rlm@46
|
25639 this.originalValue = this.getValue();
|
rlm@46
|
25640 },
|
rlm@46
|
25641
|
rlm@46
|
25642 onFocus : function(){
|
rlm@46
|
25643 if(!Ext.isOpera && this.focusClass){ this.el.addClass(this.focusClass);
|
rlm@46
|
25644 }
|
rlm@46
|
25645 if(!this.hasFocus){
|
rlm@46
|
25646 this.hasFocus = true;
|
rlm@46
|
25647 this.startValue = this.getValue();
|
rlm@46
|
25648 this.fireEvent("focus", this);
|
rlm@46
|
25649 }
|
rlm@46
|
25650 },
|
rlm@46
|
25651
|
rlm@46
|
25652 beforeBlur : Ext.emptyFn,
|
rlm@46
|
25653
|
rlm@46
|
25654 onBlur : function(){
|
rlm@46
|
25655 this.beforeBlur();
|
rlm@46
|
25656 if(!Ext.isOpera && this.focusClass){ this.el.removeClass(this.focusClass);
|
rlm@46
|
25657 }
|
rlm@46
|
25658 this.hasFocus = false;
|
rlm@46
|
25659 if(this.validationEvent !== false && this.validateOnBlur && this.validationEvent != "blur"){
|
rlm@46
|
25660 this.validate();
|
rlm@46
|
25661 }
|
rlm@46
|
25662 var v = this.getValue();
|
rlm@46
|
25663 if(String(v) !== String(this.startValue)){
|
rlm@46
|
25664 this.fireEvent('change', this, v, this.startValue);
|
rlm@46
|
25665 }
|
rlm@46
|
25666 this.fireEvent("blur", this);
|
rlm@46
|
25667 },
|
rlm@46
|
25668
|
rlm@46
|
25669
|
rlm@46
|
25670 isValid : function(preventMark){
|
rlm@46
|
25671 if(this.disabled){
|
rlm@46
|
25672 return true;
|
rlm@46
|
25673 }
|
rlm@46
|
25674 var restore = this.preventMark;
|
rlm@46
|
25675 this.preventMark = preventMark === true;
|
rlm@46
|
25676 var v = this.validateValue(this.processValue(this.getRawValue()));
|
rlm@46
|
25677 this.preventMark = restore;
|
rlm@46
|
25678 return v;
|
rlm@46
|
25679 },
|
rlm@46
|
25680
|
rlm@46
|
25681
|
rlm@46
|
25682 validate : function(){
|
rlm@46
|
25683 if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){
|
rlm@46
|
25684 this.clearInvalid();
|
rlm@46
|
25685 return true;
|
rlm@46
|
25686 }
|
rlm@46
|
25687 return false;
|
rlm@46
|
25688 },
|
rlm@46
|
25689
|
rlm@46
|
25690 processValue : function(value){
|
rlm@46
|
25691 return value;
|
rlm@46
|
25692 },
|
rlm@46
|
25693
|
rlm@46
|
25694 validateValue : function(value){
|
rlm@46
|
25695 return true;
|
rlm@46
|
25696 },
|
rlm@46
|
25697
|
rlm@46
|
25698
|
rlm@46
|
25699 markInvalid : function(msg){
|
rlm@46
|
25700 if(!this.rendered || this.preventMark){ return;
|
rlm@46
|
25701 }
|
rlm@46
|
25702 this.el.addClass(this.invalidClass);
|
rlm@46
|
25703 msg = msg || this.invalidText;
|
rlm@46
|
25704 switch(this.msgTarget){
|
rlm@46
|
25705 case 'qtip':
|
rlm@46
|
25706 this.el.dom.qtip = msg;
|
rlm@46
|
25707 this.el.dom.qclass = 'x-form-invalid-tip';
|
rlm@46
|
25708 if(Ext.QuickTips){ Ext.QuickTips.enable();
|
rlm@46
|
25709 }
|
rlm@46
|
25710 break;
|
rlm@46
|
25711 case 'title':
|
rlm@46
|
25712 this.el.dom.title = msg;
|
rlm@46
|
25713 break;
|
rlm@46
|
25714 case 'under':
|
rlm@46
|
25715 if(!this.errorEl){
|
rlm@46
|
25716 var elp = this.getErrorCt();
|
rlm@46
|
25717 this.errorEl = elp.createChild({cls:'x-form-invalid-msg'});
|
rlm@46
|
25718 this.errorEl.setWidth(elp.getWidth(true)-20);
|
rlm@46
|
25719 }
|
rlm@46
|
25720 this.errorEl.update(msg);
|
rlm@46
|
25721 Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);
|
rlm@46
|
25722 break;
|
rlm@46
|
25723 case 'side':
|
rlm@46
|
25724 if(!this.errorIcon){
|
rlm@46
|
25725 var elp = this.getErrorCt();
|
rlm@46
|
25726 this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'});
|
rlm@46
|
25727 }
|
rlm@46
|
25728 this.alignErrorIcon();
|
rlm@46
|
25729 this.errorIcon.dom.qtip = msg;
|
rlm@46
|
25730 this.errorIcon.dom.qclass = 'x-form-invalid-tip';
|
rlm@46
|
25731 this.errorIcon.show();
|
rlm@46
|
25732 this.on('resize', this.alignErrorIcon, this);
|
rlm@46
|
25733 break;
|
rlm@46
|
25734 default:
|
rlm@46
|
25735 var t = Ext.getDom(this.msgTarget);
|
rlm@46
|
25736 t.innerHTML = msg;
|
rlm@46
|
25737 t.style.display = this.msgDisplay;
|
rlm@46
|
25738 break;
|
rlm@46
|
25739 }
|
rlm@46
|
25740 this.fireEvent('invalid', this, msg);
|
rlm@46
|
25741 },
|
rlm@46
|
25742
|
rlm@46
|
25743 getErrorCt : function(){
|
rlm@46
|
25744 return this.el.findParent('.x-form-element', 5, true) || this.el.findParent('.x-form-field-wrap', 5, true); },
|
rlm@46
|
25745
|
rlm@46
|
25746 alignErrorIcon : function(){
|
rlm@46
|
25747 this.errorIcon.alignTo(this.el, 'tl-tr', [2, 0]);
|
rlm@46
|
25748 },
|
rlm@46
|
25749
|
rlm@46
|
25750
|
rlm@46
|
25751 clearInvalid : function(){
|
rlm@46
|
25752 if(!this.rendered || this.preventMark){ return;
|
rlm@46
|
25753 }
|
rlm@46
|
25754 this.el.removeClass(this.invalidClass);
|
rlm@46
|
25755 switch(this.msgTarget){
|
rlm@46
|
25756 case 'qtip':
|
rlm@46
|
25757 this.el.dom.qtip = '';
|
rlm@46
|
25758 break;
|
rlm@46
|
25759 case 'title':
|
rlm@46
|
25760 this.el.dom.title = '';
|
rlm@46
|
25761 break;
|
rlm@46
|
25762 case 'under':
|
rlm@46
|
25763 if(this.errorEl){
|
rlm@46
|
25764 Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this);
|
rlm@46
|
25765 }
|
rlm@46
|
25766 break;
|
rlm@46
|
25767 case 'side':
|
rlm@46
|
25768 if(this.errorIcon){
|
rlm@46
|
25769 this.errorIcon.dom.qtip = '';
|
rlm@46
|
25770 this.errorIcon.hide();
|
rlm@46
|
25771 this.un('resize', this.alignErrorIcon, this);
|
rlm@46
|
25772 }
|
rlm@46
|
25773 break;
|
rlm@46
|
25774 default:
|
rlm@46
|
25775 var t = Ext.getDom(this.msgTarget);
|
rlm@46
|
25776 t.innerHTML = '';
|
rlm@46
|
25777 t.style.display = 'none';
|
rlm@46
|
25778 break;
|
rlm@46
|
25779 }
|
rlm@46
|
25780 this.fireEvent('valid', this);
|
rlm@46
|
25781 },
|
rlm@46
|
25782
|
rlm@46
|
25783
|
rlm@46
|
25784 getRawValue : function(){
|
rlm@46
|
25785 var v = this.rendered ? this.el.getValue() : Ext.value(this.value, '');
|
rlm@46
|
25786 if(v === this.emptyText){
|
rlm@46
|
25787 v = '';
|
rlm@46
|
25788 }
|
rlm@46
|
25789 return v;
|
rlm@46
|
25790 },
|
rlm@46
|
25791
|
rlm@46
|
25792
|
rlm@46
|
25793 getValue : function(){
|
rlm@46
|
25794 if(!this.rendered) {
|
rlm@46
|
25795 return this.value;
|
rlm@46
|
25796 }
|
rlm@46
|
25797 var v = this.el.getValue();
|
rlm@46
|
25798 if(v === this.emptyText || v === undefined){
|
rlm@46
|
25799 v = '';
|
rlm@46
|
25800 }
|
rlm@46
|
25801 return v;
|
rlm@46
|
25802 },
|
rlm@46
|
25803
|
rlm@46
|
25804
|
rlm@46
|
25805 setRawValue : function(v){
|
rlm@46
|
25806 return this.el.dom.value = (v === null || v === undefined ? '' : v);
|
rlm@46
|
25807 },
|
rlm@46
|
25808
|
rlm@46
|
25809
|
rlm@46
|
25810 setValue : function(v){
|
rlm@46
|
25811 this.value = v;
|
rlm@46
|
25812 if(this.rendered){
|
rlm@46
|
25813 this.el.dom.value = (v === null || v === undefined ? '' : v);
|
rlm@46
|
25814 this.validate();
|
rlm@46
|
25815 }
|
rlm@46
|
25816 },
|
rlm@46
|
25817
|
rlm@46
|
25818 adjustSize : function(w, h){
|
rlm@46
|
25819 var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);
|
rlm@46
|
25820 s.width = this.adjustWidth(this.el.dom.tagName, s.width);
|
rlm@46
|
25821 return s;
|
rlm@46
|
25822 },
|
rlm@46
|
25823
|
rlm@46
|
25824 adjustWidth : function(tag, w){
|
rlm@46
|
25825 tag = tag.toLowerCase();
|
rlm@46
|
25826 if(typeof w == 'number' && !Ext.isSafari){
|
rlm@46
|
25827 if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
|
rlm@46
|
25828 if(tag == 'input' && !Ext.isStrict){
|
rlm@46
|
25829 return this.inEditor ? w : w - 3;
|
rlm@46
|
25830 }
|
rlm@46
|
25831 if(tag == 'input' && Ext.isStrict){
|
rlm@46
|
25832 return w - (Ext.isIE6 ? 4 : 1);
|
rlm@46
|
25833 }
|
rlm@46
|
25834 if(tag == 'textarea' && Ext.isStrict){
|
rlm@46
|
25835 return w-2;
|
rlm@46
|
25836 }
|
rlm@46
|
25837 }else if(Ext.isOpera && Ext.isStrict){
|
rlm@46
|
25838 if(tag == 'input'){
|
rlm@46
|
25839 return w + 2;
|
rlm@46
|
25840 }
|
rlm@46
|
25841 if(tag == 'textarea'){
|
rlm@46
|
25842 return w-2;
|
rlm@46
|
25843 }
|
rlm@46
|
25844 }
|
rlm@46
|
25845 }
|
rlm@46
|
25846 return w;
|
rlm@46
|
25847 }
|
rlm@46
|
25848
|
rlm@46
|
25849
|
rlm@46
|
25850
|
rlm@46
|
25851
|
rlm@46
|
25852
|
rlm@46
|
25853 });
|
rlm@46
|
25854
|
rlm@46
|
25855
|
rlm@46
|
25856 Ext.form.Field.msgFx = {
|
rlm@46
|
25857 normal : {
|
rlm@46
|
25858 show: function(msgEl, f){
|
rlm@46
|
25859 msgEl.setDisplayed('block');
|
rlm@46
|
25860 },
|
rlm@46
|
25861
|
rlm@46
|
25862 hide : function(msgEl, f){
|
rlm@46
|
25863 msgEl.setDisplayed(false).update('');
|
rlm@46
|
25864 }
|
rlm@46
|
25865 },
|
rlm@46
|
25866
|
rlm@46
|
25867 slide : {
|
rlm@46
|
25868 show: function(msgEl, f){
|
rlm@46
|
25869 msgEl.slideIn('t', {stopFx:true});
|
rlm@46
|
25870 },
|
rlm@46
|
25871
|
rlm@46
|
25872 hide : function(msgEl, f){
|
rlm@46
|
25873 msgEl.slideOut('t', {stopFx:true,useDisplay:true});
|
rlm@46
|
25874 }
|
rlm@46
|
25875 },
|
rlm@46
|
25876
|
rlm@46
|
25877 slideRight : {
|
rlm@46
|
25878 show: function(msgEl, f){
|
rlm@46
|
25879 msgEl.fixDisplay();
|
rlm@46
|
25880 msgEl.alignTo(f.el, 'tl-tr');
|
rlm@46
|
25881 msgEl.slideIn('l', {stopFx:true});
|
rlm@46
|
25882 },
|
rlm@46
|
25883
|
rlm@46
|
25884 hide : function(msgEl, f){
|
rlm@46
|
25885 msgEl.slideOut('l', {stopFx:true,useDisplay:true});
|
rlm@46
|
25886 }
|
rlm@46
|
25887 }
|
rlm@46
|
25888 };
|
rlm@46
|
25889 Ext.reg('field', Ext.form.Field);
|
rlm@46
|
25890
|
rlm@46
|
25891
|
rlm@46
|
25892 Ext.form.TextField = Ext.extend(Ext.form.Field, {
|
rlm@46
|
25893
|
rlm@46
|
25894
|
rlm@46
|
25895 grow : false,
|
rlm@46
|
25896
|
rlm@46
|
25897 growMin : 30,
|
rlm@46
|
25898
|
rlm@46
|
25899 growMax : 800,
|
rlm@46
|
25900
|
rlm@46
|
25901 vtype : null,
|
rlm@46
|
25902
|
rlm@46
|
25903 maskRe : null,
|
rlm@46
|
25904
|
rlm@46
|
25905 disableKeyFilter : false,
|
rlm@46
|
25906
|
rlm@46
|
25907 allowBlank : true,
|
rlm@46
|
25908
|
rlm@46
|
25909 minLength : 0,
|
rlm@46
|
25910
|
rlm@46
|
25911 maxLength : Number.MAX_VALUE,
|
rlm@46
|
25912
|
rlm@46
|
25913 minLengthText : "The minimum length for this field is {0}",
|
rlm@46
|
25914
|
rlm@46
|
25915 maxLengthText : "The maximum length for this field is {0}",
|
rlm@46
|
25916
|
rlm@46
|
25917 selectOnFocus : false,
|
rlm@46
|
25918
|
rlm@46
|
25919 blankText : "This field is required",
|
rlm@46
|
25920
|
rlm@46
|
25921 validator : null,
|
rlm@46
|
25922
|
rlm@46
|
25923 regex : null,
|
rlm@46
|
25924
|
rlm@46
|
25925 regexText : "",
|
rlm@46
|
25926
|
rlm@46
|
25927 emptyText : null,
|
rlm@46
|
25928
|
rlm@46
|
25929 emptyClass : 'x-form-empty-field',
|
rlm@46
|
25930
|
rlm@46
|
25931
|
rlm@46
|
25932
|
rlm@46
|
25933 initComponent : function(){
|
rlm@46
|
25934 Ext.form.TextField.superclass.initComponent.call(this);
|
rlm@46
|
25935 this.addEvents(
|
rlm@46
|
25936
|
rlm@46
|
25937 'autosize',
|
rlm@46
|
25938
|
rlm@46
|
25939
|
rlm@46
|
25940 'keydown',
|
rlm@46
|
25941
|
rlm@46
|
25942 'keyup',
|
rlm@46
|
25943
|
rlm@46
|
25944 'keypress'
|
rlm@46
|
25945 );
|
rlm@46
|
25946 },
|
rlm@46
|
25947
|
rlm@46
|
25948 initEvents : function(){
|
rlm@46
|
25949 Ext.form.TextField.superclass.initEvents.call(this);
|
rlm@46
|
25950 if(this.validationEvent == 'keyup'){
|
rlm@46
|
25951 this.validationTask = new Ext.util.DelayedTask(this.validate, this);
|
rlm@46
|
25952 this.el.on('keyup', this.filterValidation, this);
|
rlm@46
|
25953 }
|
rlm@46
|
25954 else if(this.validationEvent !== false){
|
rlm@46
|
25955 this.el.on(this.validationEvent, this.validate, this, {buffer: this.validationDelay});
|
rlm@46
|
25956 }
|
rlm@46
|
25957 if(this.selectOnFocus || this.emptyText){
|
rlm@46
|
25958 this.on("focus", this.preFocus, this);
|
rlm@46
|
25959 if(this.emptyText){
|
rlm@46
|
25960 this.on('blur', this.postBlur, this);
|
rlm@46
|
25961 this.applyEmptyText();
|
rlm@46
|
25962 }
|
rlm@46
|
25963 }
|
rlm@46
|
25964 if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype+'Mask']))){
|
rlm@46
|
25965 this.el.on("keypress", this.filterKeys, this);
|
rlm@46
|
25966 }
|
rlm@46
|
25967 if(this.grow){
|
rlm@46
|
25968 this.el.on("keyup", this.onKeyUpBuffered, this, {buffer:50});
|
rlm@46
|
25969 this.el.on("click", this.autoSize, this);
|
rlm@46
|
25970 }
|
rlm@46
|
25971
|
rlm@46
|
25972 if(this.enableKeyEvents){
|
rlm@46
|
25973 this.el.on("keyup", this.onKeyUp, this);
|
rlm@46
|
25974 this.el.on("keydown", this.onKeyDown, this);
|
rlm@46
|
25975 this.el.on("keypress", this.onKeyPress, this);
|
rlm@46
|
25976 }
|
rlm@46
|
25977 },
|
rlm@46
|
25978
|
rlm@46
|
25979 processValue : function(value){
|
rlm@46
|
25980 if(this.stripCharsRe){
|
rlm@46
|
25981 var newValue = value.replace(this.stripCharsRe, '');
|
rlm@46
|
25982 if(newValue !== value){
|
rlm@46
|
25983 this.setRawValue(newValue);
|
rlm@46
|
25984 return newValue;
|
rlm@46
|
25985 }
|
rlm@46
|
25986 }
|
rlm@46
|
25987 return value;
|
rlm@46
|
25988 },
|
rlm@46
|
25989
|
rlm@46
|
25990 filterValidation : function(e){
|
rlm@46
|
25991 if(!e.isNavKeyPress()){
|
rlm@46
|
25992 this.validationTask.delay(this.validationDelay);
|
rlm@46
|
25993 }
|
rlm@46
|
25994 },
|
rlm@46
|
25995
|
rlm@46
|
25996 onKeyUpBuffered : function(e){
|
rlm@46
|
25997 if(!e.isNavKeyPress()){
|
rlm@46
|
25998 this.autoSize();
|
rlm@46
|
25999 }
|
rlm@46
|
26000 },
|
rlm@46
|
26001
|
rlm@46
|
26002 onKeyUp : function(e){
|
rlm@46
|
26003 this.fireEvent('keyup', this, e);
|
rlm@46
|
26004 },
|
rlm@46
|
26005
|
rlm@46
|
26006 onKeyDown : function(e){
|
rlm@46
|
26007 this.fireEvent('keydown', this, e);
|
rlm@46
|
26008 },
|
rlm@46
|
26009
|
rlm@46
|
26010 onKeyPress : function(e){
|
rlm@46
|
26011 this.fireEvent('keypress', this, e);
|
rlm@46
|
26012 },
|
rlm@46
|
26013
|
rlm@46
|
26014
|
rlm@46
|
26015 reset : function(){
|
rlm@46
|
26016 Ext.form.TextField.superclass.reset.call(this);
|
rlm@46
|
26017 this.applyEmptyText();
|
rlm@46
|
26018 },
|
rlm@46
|
26019
|
rlm@46
|
26020 applyEmptyText : function(){
|
rlm@46
|
26021 if(this.rendered && this.emptyText && this.getRawValue().length < 1){
|
rlm@46
|
26022 this.setRawValue(this.emptyText);
|
rlm@46
|
26023 this.el.addClass(this.emptyClass);
|
rlm@46
|
26024 }
|
rlm@46
|
26025 },
|
rlm@46
|
26026
|
rlm@46
|
26027 preFocus : function(){
|
rlm@46
|
26028 if(this.emptyText){
|
rlm@46
|
26029 if(this.el.dom.value == this.emptyText){
|
rlm@46
|
26030 this.setRawValue('');
|
rlm@46
|
26031 }
|
rlm@46
|
26032 this.el.removeClass(this.emptyClass);
|
rlm@46
|
26033 }
|
rlm@46
|
26034 if(this.selectOnFocus){
|
rlm@46
|
26035 this.el.dom.select();
|
rlm@46
|
26036 }
|
rlm@46
|
26037 },
|
rlm@46
|
26038
|
rlm@46
|
26039 postBlur : function(){
|
rlm@46
|
26040 this.applyEmptyText();
|
rlm@46
|
26041 },
|
rlm@46
|
26042
|
rlm@46
|
26043 filterKeys : function(e){
|
rlm@46
|
26044 var k = e.getKey();
|
rlm@46
|
26045 if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){
|
rlm@46
|
26046 return;
|
rlm@46
|
26047 }
|
rlm@46
|
26048 var c = e.getCharCode(), cc = String.fromCharCode(c);
|
rlm@46
|
26049 if(Ext.isIE && (e.isSpecialKey() || !cc)){
|
rlm@46
|
26050 return;
|
rlm@46
|
26051 }
|
rlm@46
|
26052 if(!this.maskRe.test(cc)){
|
rlm@46
|
26053 e.stopEvent();
|
rlm@46
|
26054 }
|
rlm@46
|
26055 },
|
rlm@46
|
26056
|
rlm@46
|
26057 setValue : function(v){
|
rlm@46
|
26058 if(this.emptyText && this.el && v !== undefined && v !== null && v !== ''){
|
rlm@46
|
26059 this.el.removeClass(this.emptyClass);
|
rlm@46
|
26060 }
|
rlm@46
|
26061 Ext.form.TextField.superclass.setValue.apply(this, arguments);
|
rlm@46
|
26062 this.applyEmptyText();
|
rlm@46
|
26063 this.autoSize();
|
rlm@46
|
26064 },
|
rlm@46
|
26065
|
rlm@46
|
26066
|
rlm@46
|
26067 validateValue : function(value){
|
rlm@46
|
26068 if(value.length < 1 || value === this.emptyText){ if(this.allowBlank){
|
rlm@46
|
26069 this.clearInvalid();
|
rlm@46
|
26070 return true;
|
rlm@46
|
26071 }else{
|
rlm@46
|
26072 this.markInvalid(this.blankText);
|
rlm@46
|
26073 return false;
|
rlm@46
|
26074 }
|
rlm@46
|
26075 }
|
rlm@46
|
26076 if(value.length < this.minLength){
|
rlm@46
|
26077 this.markInvalid(String.format(this.minLengthText, this.minLength));
|
rlm@46
|
26078 return false;
|
rlm@46
|
26079 }
|
rlm@46
|
26080 if(value.length > this.maxLength){
|
rlm@46
|
26081 this.markInvalid(String.format(this.maxLengthText, this.maxLength));
|
rlm@46
|
26082 return false;
|
rlm@46
|
26083 }
|
rlm@46
|
26084 if(this.vtype){
|
rlm@46
|
26085 var vt = Ext.form.VTypes;
|
rlm@46
|
26086 if(!vt[this.vtype](value, this)){
|
rlm@46
|
26087 this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
|
rlm@46
|
26088 return false;
|
rlm@46
|
26089 }
|
rlm@46
|
26090 }
|
rlm@46
|
26091 if(typeof this.validator == "function"){
|
rlm@46
|
26092 var msg = this.validator(value);
|
rlm@46
|
26093 if(msg !== true){
|
rlm@46
|
26094 this.markInvalid(msg);
|
rlm@46
|
26095 return false;
|
rlm@46
|
26096 }
|
rlm@46
|
26097 }
|
rlm@46
|
26098 if(this.regex && !this.regex.test(value)){
|
rlm@46
|
26099 this.markInvalid(this.regexText);
|
rlm@46
|
26100 return false;
|
rlm@46
|
26101 }
|
rlm@46
|
26102 return true;
|
rlm@46
|
26103 },
|
rlm@46
|
26104
|
rlm@46
|
26105
|
rlm@46
|
26106 selectText : function(start, end){
|
rlm@46
|
26107 var v = this.getRawValue();
|
rlm@46
|
26108 if(v.length > 0){
|
rlm@46
|
26109 start = start === undefined ? 0 : start;
|
rlm@46
|
26110 end = end === undefined ? v.length : end;
|
rlm@46
|
26111 var d = this.el.dom;
|
rlm@46
|
26112 if(d.setSelectionRange){
|
rlm@46
|
26113 d.setSelectionRange(start, end);
|
rlm@46
|
26114 }else if(d.createTextRange){
|
rlm@46
|
26115 var range = d.createTextRange();
|
rlm@46
|
26116 range.moveStart("character", start);
|
rlm@46
|
26117 range.moveEnd("character", end-v.length);
|
rlm@46
|
26118 range.select();
|
rlm@46
|
26119 }
|
rlm@46
|
26120 }
|
rlm@46
|
26121 },
|
rlm@46
|
26122
|
rlm@46
|
26123
|
rlm@46
|
26124 autoSize : function(){
|
rlm@46
|
26125 if(!this.grow || !this.rendered){
|
rlm@46
|
26126 return;
|
rlm@46
|
26127 }
|
rlm@46
|
26128 if(!this.metrics){
|
rlm@46
|
26129 this.metrics = Ext.util.TextMetrics.createInstance(this.el);
|
rlm@46
|
26130 }
|
rlm@46
|
26131 var el = this.el;
|
rlm@46
|
26132 var v = el.dom.value;
|
rlm@46
|
26133 var d = document.createElement('div');
|
rlm@46
|
26134 d.appendChild(document.createTextNode(v));
|
rlm@46
|
26135 v = d.innerHTML;
|
rlm@46
|
26136 d = null;
|
rlm@46
|
26137 v += " ";
|
rlm@46
|
26138 var w = Math.min(this.growMax, Math.max(this.metrics.getWidth(v) + 10, this.growMin));
|
rlm@46
|
26139 this.el.setWidth(w);
|
rlm@46
|
26140 this.fireEvent("autosize", this, w);
|
rlm@46
|
26141 }
|
rlm@46
|
26142 });
|
rlm@46
|
26143 Ext.reg('textfield', Ext.form.TextField);
|
rlm@46
|
26144
|
rlm@46
|
26145
|
rlm@46
|
26146 Ext.form.TriggerField = Ext.extend(Ext.form.TextField, {
|
rlm@46
|
26147
|
rlm@46
|
26148
|
rlm@46
|
26149 defaultAutoCreate : {tag: "input", type: "text", size: "16", autocomplete: "off"},
|
rlm@46
|
26150
|
rlm@46
|
26151 hideTrigger:false,
|
rlm@46
|
26152
|
rlm@46
|
26153
|
rlm@46
|
26154 autoSize: Ext.emptyFn,
|
rlm@46
|
26155 monitorTab : true,
|
rlm@46
|
26156 deferHeight : true,
|
rlm@46
|
26157 mimicing : false,
|
rlm@46
|
26158
|
rlm@46
|
26159 onResize : function(w, h){
|
rlm@46
|
26160 Ext.form.TriggerField.superclass.onResize.call(this, w, h);
|
rlm@46
|
26161 if(typeof w == 'number'){
|
rlm@46
|
26162 this.el.setWidth(this.adjustWidth('input', w - this.trigger.getWidth()));
|
rlm@46
|
26163 }
|
rlm@46
|
26164 this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
|
rlm@46
|
26165 },
|
rlm@46
|
26166
|
rlm@46
|
26167 adjustSize : Ext.BoxComponent.prototype.adjustSize,
|
rlm@46
|
26168
|
rlm@46
|
26169 getResizeEl : function(){
|
rlm@46
|
26170 return this.wrap;
|
rlm@46
|
26171 },
|
rlm@46
|
26172
|
rlm@46
|
26173 getPositionEl : function(){
|
rlm@46
|
26174 return this.wrap;
|
rlm@46
|
26175 },
|
rlm@46
|
26176
|
rlm@46
|
26177 alignErrorIcon : function(){
|
rlm@46
|
26178 this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
|
rlm@46
|
26179 },
|
rlm@46
|
26180
|
rlm@46
|
26181 onRender : function(ct, position){
|
rlm@46
|
26182 Ext.form.TriggerField.superclass.onRender.call(this, ct, position);
|
rlm@46
|
26183 this.wrap = this.el.wrap({cls: "x-form-field-wrap"});
|
rlm@46
|
26184 this.trigger = this.wrap.createChild(this.triggerConfig ||
|
rlm@46
|
26185 {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass});
|
rlm@46
|
26186 if(this.hideTrigger){
|
rlm@46
|
26187 this.trigger.setDisplayed(false);
|
rlm@46
|
26188 }
|
rlm@46
|
26189 this.initTrigger();
|
rlm@46
|
26190 if(!this.width){
|
rlm@46
|
26191 this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
|
rlm@46
|
26192 }
|
rlm@46
|
26193 },
|
rlm@46
|
26194
|
rlm@46
|
26195 initTrigger : function(){
|
rlm@46
|
26196 this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true});
|
rlm@46
|
26197 this.trigger.addClassOnOver('x-form-trigger-over');
|
rlm@46
|
26198 this.trigger.addClassOnClick('x-form-trigger-click');
|
rlm@46
|
26199 },
|
rlm@46
|
26200
|
rlm@46
|
26201 onDestroy : function(){
|
rlm@46
|
26202 if(this.trigger){
|
rlm@46
|
26203 this.trigger.removeAllListeners();
|
rlm@46
|
26204 this.trigger.remove();
|
rlm@46
|
26205 }
|
rlm@46
|
26206 if(this.wrap){
|
rlm@46
|
26207 this.wrap.remove();
|
rlm@46
|
26208 }
|
rlm@46
|
26209 Ext.form.TriggerField.superclass.onDestroy.call(this);
|
rlm@46
|
26210 },
|
rlm@46
|
26211
|
rlm@46
|
26212 onFocus : function(){
|
rlm@46
|
26213 Ext.form.TriggerField.superclass.onFocus.call(this);
|
rlm@46
|
26214 if(!this.mimicing){
|
rlm@46
|
26215 this.wrap.addClass('x-trigger-wrap-focus');
|
rlm@46
|
26216 this.mimicing = true;
|
rlm@46
|
26217 Ext.get(Ext.isIE ? document.body : document).on("mousedown", this.mimicBlur, this, {delay: 10});
|
rlm@46
|
26218 if(this.monitorTab){
|
rlm@46
|
26219 this.el.on("keydown", this.checkTab, this);
|
rlm@46
|
26220 }
|
rlm@46
|
26221 }
|
rlm@46
|
26222 },
|
rlm@46
|
26223
|
rlm@46
|
26224 checkTab : function(e){
|
rlm@46
|
26225 if(e.getKey() == e.TAB){
|
rlm@46
|
26226 this.triggerBlur();
|
rlm@46
|
26227 }
|
rlm@46
|
26228 },
|
rlm@46
|
26229
|
rlm@46
|
26230 onBlur : function(){
|
rlm@46
|
26231 },
|
rlm@46
|
26232
|
rlm@46
|
26233 mimicBlur : function(e){
|
rlm@46
|
26234 if(!this.wrap.contains(e.target) && this.validateBlur(e)){
|
rlm@46
|
26235 this.triggerBlur();
|
rlm@46
|
26236 }
|
rlm@46
|
26237 },
|
rlm@46
|
26238
|
rlm@46
|
26239 triggerBlur : function(){
|
rlm@46
|
26240 this.mimicing = false;
|
rlm@46
|
26241 Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur);
|
rlm@46
|
26242 if(this.monitorTab){
|
rlm@46
|
26243 this.el.un("keydown", this.checkTab, this);
|
rlm@46
|
26244 }
|
rlm@46
|
26245 this.beforeBlur();
|
rlm@46
|
26246 this.wrap.removeClass('x-trigger-wrap-focus');
|
rlm@46
|
26247 Ext.form.TriggerField.superclass.onBlur.call(this);
|
rlm@46
|
26248 },
|
rlm@46
|
26249
|
rlm@46
|
26250 beforeBlur : Ext.emptyFn,
|
rlm@46
|
26251
|
rlm@46
|
26252 validateBlur : function(e){
|
rlm@46
|
26253 return true;
|
rlm@46
|
26254 },
|
rlm@46
|
26255
|
rlm@46
|
26256 onDisable : function(){
|
rlm@46
|
26257 Ext.form.TriggerField.superclass.onDisable.call(this);
|
rlm@46
|
26258 if(this.wrap){
|
rlm@46
|
26259 this.wrap.addClass('x-item-disabled');
|
rlm@46
|
26260 }
|
rlm@46
|
26261 },
|
rlm@46
|
26262
|
rlm@46
|
26263 onEnable : function(){
|
rlm@46
|
26264 Ext.form.TriggerField.superclass.onEnable.call(this);
|
rlm@46
|
26265 if(this.wrap){
|
rlm@46
|
26266 this.wrap.removeClass('x-item-disabled');
|
rlm@46
|
26267 }
|
rlm@46
|
26268 },
|
rlm@46
|
26269
|
rlm@46
|
26270
|
rlm@46
|
26271 onShow : function(){
|
rlm@46
|
26272 if(this.wrap){
|
rlm@46
|
26273 this.wrap.dom.style.display = '';
|
rlm@46
|
26274 this.wrap.dom.style.visibility = 'visible';
|
rlm@46
|
26275 }
|
rlm@46
|
26276 },
|
rlm@46
|
26277
|
rlm@46
|
26278 onHide : function(){
|
rlm@46
|
26279 this.wrap.dom.style.display = 'none';
|
rlm@46
|
26280 },
|
rlm@46
|
26281
|
rlm@46
|
26282
|
rlm@46
|
26283 onTriggerClick : Ext.emptyFn
|
rlm@46
|
26284
|
rlm@46
|
26285
|
rlm@46
|
26286
|
rlm@46
|
26287
|
rlm@46
|
26288 });
|
rlm@46
|
26289
|
rlm@46
|
26290 Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, {
|
rlm@46
|
26291 initComponent : function(){
|
rlm@46
|
26292 Ext.form.TwinTriggerField.superclass.initComponent.call(this);
|
rlm@46
|
26293
|
rlm@46
|
26294 this.triggerConfig = {
|
rlm@46
|
26295 tag:'span', cls:'x-form-twin-triggers', cn:[
|
rlm@46
|
26296 {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger1Class},
|
rlm@46
|
26297 {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger2Class}
|
rlm@46
|
26298 ]};
|
rlm@46
|
26299 },
|
rlm@46
|
26300
|
rlm@46
|
26301 getTrigger : function(index){
|
rlm@46
|
26302 return this.triggers[index];
|
rlm@46
|
26303 },
|
rlm@46
|
26304
|
rlm@46
|
26305 initTrigger : function(){
|
rlm@46
|
26306 var ts = this.trigger.select('.x-form-trigger', true);
|
rlm@46
|
26307 this.wrap.setStyle('overflow', 'hidden');
|
rlm@46
|
26308 var triggerField = this;
|
rlm@46
|
26309 ts.each(function(t, all, index){
|
rlm@46
|
26310 t.hide = function(){
|
rlm@46
|
26311 var w = triggerField.wrap.getWidth();
|
rlm@46
|
26312 this.dom.style.display = 'none';
|
rlm@46
|
26313 triggerField.el.setWidth(w-triggerField.trigger.getWidth());
|
rlm@46
|
26314 };
|
rlm@46
|
26315 t.show = function(){
|
rlm@46
|
26316 var w = triggerField.wrap.getWidth();
|
rlm@46
|
26317 this.dom.style.display = '';
|
rlm@46
|
26318 triggerField.el.setWidth(w-triggerField.trigger.getWidth());
|
rlm@46
|
26319 };
|
rlm@46
|
26320 var triggerIndex = 'Trigger'+(index+1);
|
rlm@46
|
26321
|
rlm@46
|
26322 if(this['hide'+triggerIndex]){
|
rlm@46
|
26323 t.dom.style.display = 'none';
|
rlm@46
|
26324 }
|
rlm@46
|
26325 t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true});
|
rlm@46
|
26326 t.addClassOnOver('x-form-trigger-over');
|
rlm@46
|
26327 t.addClassOnClick('x-form-trigger-click');
|
rlm@46
|
26328 }, this);
|
rlm@46
|
26329 this.triggers = ts.elements;
|
rlm@46
|
26330 },
|
rlm@46
|
26331
|
rlm@46
|
26332 onTrigger1Click : Ext.emptyFn,
|
rlm@46
|
26333 onTrigger2Click : Ext.emptyFn
|
rlm@46
|
26334 });
|
rlm@46
|
26335 Ext.reg('trigger', Ext.form.TriggerField);
|
rlm@46
|
26336
|
rlm@46
|
26337 Ext.form.TextArea = Ext.extend(Ext.form.TextField, {
|
rlm@46
|
26338
|
rlm@46
|
26339 growMin : 60,
|
rlm@46
|
26340
|
rlm@46
|
26341 growMax: 1000,
|
rlm@46
|
26342 growAppend : ' \n ',
|
rlm@46
|
26343 growPad : 0,
|
rlm@46
|
26344
|
rlm@46
|
26345 enterIsSpecial : false,
|
rlm@46
|
26346
|
rlm@46
|
26347
|
rlm@46
|
26348 preventScrollbars: false,
|
rlm@46
|
26349
|
rlm@46
|
26350
|
rlm@46
|
26351 onRender : function(ct, position){
|
rlm@46
|
26352 if(!this.el){
|
rlm@46
|
26353 this.defaultAutoCreate = {
|
rlm@46
|
26354 tag: "textarea",
|
rlm@46
|
26355 style:"width:100px;height:60px;",
|
rlm@46
|
26356 autocomplete: "off"
|
rlm@46
|
26357 };
|
rlm@46
|
26358 }
|
rlm@46
|
26359 Ext.form.TextArea.superclass.onRender.call(this, ct, position);
|
rlm@46
|
26360 if(this.grow){
|
rlm@46
|
26361 this.textSizeEl = Ext.DomHelper.append(document.body, {
|
rlm@46
|
26362 tag: "pre", cls: "x-form-grow-sizer"
|
rlm@46
|
26363 });
|
rlm@46
|
26364 if(this.preventScrollbars){
|
rlm@46
|
26365 this.el.setStyle("overflow", "hidden");
|
rlm@46
|
26366 }
|
rlm@46
|
26367 this.el.setHeight(this.growMin);
|
rlm@46
|
26368 }
|
rlm@46
|
26369 },
|
rlm@46
|
26370
|
rlm@46
|
26371 onDestroy : function(){
|
rlm@46
|
26372 if(this.textSizeEl){
|
rlm@46
|
26373 Ext.removeNode(this.textSizeEl);
|
rlm@46
|
26374 }
|
rlm@46
|
26375 Ext.form.TextArea.superclass.onDestroy.call(this);
|
rlm@46
|
26376 },
|
rlm@46
|
26377
|
rlm@46
|
26378 fireKey : function(e){
|
rlm@46
|
26379 if(e.isSpecialKey() && (this.enterIsSpecial || (e.getKey() != e.ENTER || e.hasModifier()))){
|
rlm@46
|
26380 this.fireEvent("specialkey", this, e);
|
rlm@46
|
26381 }
|
rlm@46
|
26382 },
|
rlm@46
|
26383
|
rlm@46
|
26384 onKeyUp : function(e){
|
rlm@46
|
26385 if(!e.isNavKeyPress() || e.getKey() == e.ENTER){
|
rlm@46
|
26386 this.autoSize();
|
rlm@46
|
26387 }
|
rlm@46
|
26388 },
|
rlm@46
|
26389
|
rlm@46
|
26390
|
rlm@46
|
26391 autoSize : function(){
|
rlm@46
|
26392 if(!this.grow || !this.textSizeEl){
|
rlm@46
|
26393 return;
|
rlm@46
|
26394 }
|
rlm@46
|
26395 var el = this.el;
|
rlm@46
|
26396 var v = el.dom.value;
|
rlm@46
|
26397 var ts = this.textSizeEl;
|
rlm@46
|
26398 ts.innerHTML = '';
|
rlm@46
|
26399 ts.appendChild(document.createTextNode(v));
|
rlm@46
|
26400 v = ts.innerHTML;
|
rlm@46
|
26401
|
rlm@46
|
26402 Ext.fly(ts).setWidth(this.el.getWidth());
|
rlm@46
|
26403 if(v.length < 1){
|
rlm@46
|
26404 v = "  ";
|
rlm@46
|
26405 }else{
|
rlm@46
|
26406 if(Ext.isIE){
|
rlm@46
|
26407 v = v.replace(/\n/g, '<p> </p>');
|
rlm@46
|
26408 }
|
rlm@46
|
26409 v += this.growAppend;
|
rlm@46
|
26410 }
|
rlm@46
|
26411 ts.innerHTML = v;
|
rlm@46
|
26412 var h = Math.min(this.growMax, Math.max(ts.offsetHeight, this.growMin)+this.growPad);
|
rlm@46
|
26413 if(h != this.lastHeight){
|
rlm@46
|
26414 this.lastHeight = h;
|
rlm@46
|
26415 this.el.setHeight(h);
|
rlm@46
|
26416 this.fireEvent("autosize", this, h);
|
rlm@46
|
26417 }
|
rlm@46
|
26418 }
|
rlm@46
|
26419 });
|
rlm@46
|
26420 Ext.reg('textarea', Ext.form.TextArea);
|
rlm@46
|
26421
|
rlm@46
|
26422 Ext.form.NumberField = Ext.extend(Ext.form.TextField, {
|
rlm@46
|
26423
|
rlm@46
|
26424 fieldClass: "x-form-field x-form-num-field",
|
rlm@46
|
26425
|
rlm@46
|
26426 allowDecimals : true,
|
rlm@46
|
26427
|
rlm@46
|
26428 decimalSeparator : ".",
|
rlm@46
|
26429
|
rlm@46
|
26430 decimalPrecision : 2,
|
rlm@46
|
26431
|
rlm@46
|
26432 allowNegative : true,
|
rlm@46
|
26433
|
rlm@46
|
26434 minValue : Number.NEGATIVE_INFINITY,
|
rlm@46
|
26435
|
rlm@46
|
26436 maxValue : Number.MAX_VALUE,
|
rlm@46
|
26437
|
rlm@46
|
26438 minText : "The minimum value for this field is {0}",
|
rlm@46
|
26439
|
rlm@46
|
26440 maxText : "The maximum value for this field is {0}",
|
rlm@46
|
26441
|
rlm@46
|
26442 nanText : "{0} is not a valid number",
|
rlm@46
|
26443
|
rlm@46
|
26444 baseChars : "0123456789",
|
rlm@46
|
26445
|
rlm@46
|
26446 initEvents : function(){
|
rlm@46
|
26447 Ext.form.NumberField.superclass.initEvents.call(this);
|
rlm@46
|
26448 var allowed = this.baseChars+'';
|
rlm@46
|
26449 if(this.allowDecimals){
|
rlm@46
|
26450 allowed += this.decimalSeparator;
|
rlm@46
|
26451 }
|
rlm@46
|
26452 if(this.allowNegative){
|
rlm@46
|
26453 allowed += "-";
|
rlm@46
|
26454 }
|
rlm@46
|
26455 this.stripCharsRe = new RegExp('[^'+allowed+']', 'gi');
|
rlm@46
|
26456 var keyPress = function(e){
|
rlm@46
|
26457 var k = e.getKey();
|
rlm@46
|
26458 if(!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)){
|
rlm@46
|
26459 return;
|
rlm@46
|
26460 }
|
rlm@46
|
26461 var c = e.getCharCode();
|
rlm@46
|
26462 if(allowed.indexOf(String.fromCharCode(c)) === -1){
|
rlm@46
|
26463 e.stopEvent();
|
rlm@46
|
26464 }
|
rlm@46
|
26465 };
|
rlm@46
|
26466 this.el.on("keypress", keyPress, this);
|
rlm@46
|
26467 },
|
rlm@46
|
26468
|
rlm@46
|
26469 validateValue : function(value){
|
rlm@46
|
26470 if(!Ext.form.NumberField.superclass.validateValue.call(this, value)){
|
rlm@46
|
26471 return false;
|
rlm@46
|
26472 }
|
rlm@46
|
26473 if(value.length < 1){ return true;
|
rlm@46
|
26474 }
|
rlm@46
|
26475 value = String(value).replace(this.decimalSeparator, ".");
|
rlm@46
|
26476 if(isNaN(value)){
|
rlm@46
|
26477 this.markInvalid(String.format(this.nanText, value));
|
rlm@46
|
26478 return false;
|
rlm@46
|
26479 }
|
rlm@46
|
26480 var num = this.parseValue(value);
|
rlm@46
|
26481 if(num < this.minValue){
|
rlm@46
|
26482 this.markInvalid(String.format(this.minText, this.minValue));
|
rlm@46
|
26483 return false;
|
rlm@46
|
26484 }
|
rlm@46
|
26485 if(num > this.maxValue){
|
rlm@46
|
26486 this.markInvalid(String.format(this.maxText, this.maxValue));
|
rlm@46
|
26487 return false;
|
rlm@46
|
26488 }
|
rlm@46
|
26489 return true;
|
rlm@46
|
26490 },
|
rlm@46
|
26491
|
rlm@46
|
26492 getValue : function(){
|
rlm@46
|
26493 return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)));
|
rlm@46
|
26494 },
|
rlm@46
|
26495
|
rlm@46
|
26496 setValue : function(v){
|
rlm@46
|
26497 v = typeof v == 'number' ? v : parseFloat(String(v).replace(this.decimalSeparator, "."));
|
rlm@46
|
26498 v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
|
rlm@46
|
26499 Ext.form.NumberField.superclass.setValue.call(this, v);
|
rlm@46
|
26500 },
|
rlm@46
|
26501
|
rlm@46
|
26502 parseValue : function(value){
|
rlm@46
|
26503 value = parseFloat(String(value).replace(this.decimalSeparator, "."));
|
rlm@46
|
26504 return isNaN(value) ? '' : value;
|
rlm@46
|
26505 },
|
rlm@46
|
26506
|
rlm@46
|
26507 fixPrecision : function(value){
|
rlm@46
|
26508 var nan = isNaN(value);
|
rlm@46
|
26509 if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
|
rlm@46
|
26510 return nan ? '' : value;
|
rlm@46
|
26511 }
|
rlm@46
|
26512 return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));
|
rlm@46
|
26513 },
|
rlm@46
|
26514
|
rlm@46
|
26515 beforeBlur : function(){
|
rlm@46
|
26516 var v = this.parseValue(this.getRawValue());
|
rlm@46
|
26517 if(v){
|
rlm@46
|
26518 this.setValue(this.fixPrecision(v));
|
rlm@46
|
26519 }
|
rlm@46
|
26520 }
|
rlm@46
|
26521 });
|
rlm@46
|
26522 Ext.reg('numberfield', Ext.form.NumberField);
|
rlm@46
|
26523
|
rlm@46
|
26524 Ext.form.DateField = Ext.extend(Ext.form.TriggerField, {
|
rlm@46
|
26525
|
rlm@46
|
26526 format : "m/d/Y",
|
rlm@46
|
26527
|
rlm@46
|
26528 altFormats : "m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d",
|
rlm@46
|
26529
|
rlm@46
|
26530 disabledDays : null,
|
rlm@46
|
26531
|
rlm@46
|
26532 disabledDaysText : "Disabled",
|
rlm@46
|
26533
|
rlm@46
|
26534 disabledDates : null,
|
rlm@46
|
26535
|
rlm@46
|
26536 disabledDatesText : "Disabled",
|
rlm@46
|
26537
|
rlm@46
|
26538 minValue : null,
|
rlm@46
|
26539
|
rlm@46
|
26540 maxValue : null,
|
rlm@46
|
26541
|
rlm@46
|
26542 minText : "The date in this field must be equal to or after {0}",
|
rlm@46
|
26543
|
rlm@46
|
26544 maxText : "The date in this field must be equal to or before {0}",
|
rlm@46
|
26545
|
rlm@46
|
26546 invalidText : "{0} is not a valid date - it must be in the format {1}",
|
rlm@46
|
26547
|
rlm@46
|
26548 triggerClass : 'x-form-date-trigger',
|
rlm@46
|
26549
|
rlm@46
|
26550
|
rlm@46
|
26551 defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"},
|
rlm@46
|
26552
|
rlm@46
|
26553 initComponent : function(){
|
rlm@46
|
26554 Ext.form.DateField.superclass.initComponent.call(this);
|
rlm@46
|
26555 if(typeof this.minValue == "string"){
|
rlm@46
|
26556 this.minValue = this.parseDate(this.minValue);
|
rlm@46
|
26557 }
|
rlm@46
|
26558 if(typeof this.maxValue == "string"){
|
rlm@46
|
26559 this.maxValue = this.parseDate(this.maxValue);
|
rlm@46
|
26560 }
|
rlm@46
|
26561 this.ddMatch = null;
|
rlm@46
|
26562 if(this.disabledDates){
|
rlm@46
|
26563 var dd = this.disabledDates;
|
rlm@46
|
26564 var re = "(?:";
|
rlm@46
|
26565 for(var i = 0; i < dd.length; i++){
|
rlm@46
|
26566 re += dd[i];
|
rlm@46
|
26567 if(i != dd.length-1) re += "|";
|
rlm@46
|
26568 }
|
rlm@46
|
26569 this.ddMatch = new RegExp(re + ")");
|
rlm@46
|
26570 }
|
rlm@46
|
26571 },
|
rlm@46
|
26572
|
rlm@46
|
26573 validateValue : function(value){
|
rlm@46
|
26574 value = this.formatDate(value);
|
rlm@46
|
26575 if(!Ext.form.DateField.superclass.validateValue.call(this, value)){
|
rlm@46
|
26576 return false;
|
rlm@46
|
26577 }
|
rlm@46
|
26578 if(value.length < 1){ return true;
|
rlm@46
|
26579 }
|
rlm@46
|
26580 var svalue = value;
|
rlm@46
|
26581 value = this.parseDate(value);
|
rlm@46
|
26582 if(!value){
|
rlm@46
|
26583 this.markInvalid(String.format(this.invalidText, svalue, this.format));
|
rlm@46
|
26584 return false;
|
rlm@46
|
26585 }
|
rlm@46
|
26586 var time = value.getTime();
|
rlm@46
|
26587 if(this.minValue && time < this.minValue.getTime()){
|
rlm@46
|
26588 this.markInvalid(String.format(this.minText, this.formatDate(this.minValue)));
|
rlm@46
|
26589 return false;
|
rlm@46
|
26590 }
|
rlm@46
|
26591 if(this.maxValue && time > this.maxValue.getTime()){
|
rlm@46
|
26592 this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue)));
|
rlm@46
|
26593 return false;
|
rlm@46
|
26594 }
|
rlm@46
|
26595 if(this.disabledDays){
|
rlm@46
|
26596 var day = value.getDay();
|
rlm@46
|
26597 for(var i = 0; i < this.disabledDays.length; i++) {
|
rlm@46
|
26598 if(day === this.disabledDays[i]){
|
rlm@46
|
26599 this.markInvalid(this.disabledDaysText);
|
rlm@46
|
26600 return false;
|
rlm@46
|
26601 }
|
rlm@46
|
26602 }
|
rlm@46
|
26603 }
|
rlm@46
|
26604 var fvalue = this.formatDate(value);
|
rlm@46
|
26605 if(this.ddMatch && this.ddMatch.test(fvalue)){
|
rlm@46
|
26606 this.markInvalid(String.format(this.disabledDatesText, fvalue));
|
rlm@46
|
26607 return false;
|
rlm@46
|
26608 }
|
rlm@46
|
26609 return true;
|
rlm@46
|
26610 },
|
rlm@46
|
26611
|
rlm@46
|
26612 validateBlur : function(){
|
rlm@46
|
26613 return !this.menu || !this.menu.isVisible();
|
rlm@46
|
26614 },
|
rlm@46
|
26615
|
rlm@46
|
26616
|
rlm@46
|
26617 getValue : function(){
|
rlm@46
|
26618 return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || "";
|
rlm@46
|
26619 },
|
rlm@46
|
26620
|
rlm@46
|
26621
|
rlm@46
|
26622 setValue : function(date){
|
rlm@46
|
26623 Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
|
rlm@46
|
26624 },
|
rlm@46
|
26625
|
rlm@46
|
26626 parseDate : function(value){
|
rlm@46
|
26627 if(!value || Ext.isDate(value)){
|
rlm@46
|
26628 return value;
|
rlm@46
|
26629 }
|
rlm@46
|
26630 var v = Date.parseDate(value, this.format);
|
rlm@46
|
26631 if(!v && this.altFormats){
|
rlm@46
|
26632 if(!this.altFormatsArray){
|
rlm@46
|
26633 this.altFormatsArray = this.altFormats.split("|");
|
rlm@46
|
26634 }
|
rlm@46
|
26635 for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){
|
rlm@46
|
26636 v = Date.parseDate(value, this.altFormatsArray[i]);
|
rlm@46
|
26637 }
|
rlm@46
|
26638 }
|
rlm@46
|
26639 return v;
|
rlm@46
|
26640 },
|
rlm@46
|
26641
|
rlm@46
|
26642 onDestroy : function(){
|
rlm@46
|
26643 if(this.menu) {
|
rlm@46
|
26644 this.menu.destroy();
|
rlm@46
|
26645 }
|
rlm@46
|
26646 if(this.wrap){
|
rlm@46
|
26647 this.wrap.remove();
|
rlm@46
|
26648 }
|
rlm@46
|
26649 Ext.form.DateField.superclass.onDestroy.call(this);
|
rlm@46
|
26650 },
|
rlm@46
|
26651
|
rlm@46
|
26652 formatDate : function(date){
|
rlm@46
|
26653 return Ext.isDate(date) ? date.dateFormat(this.format) : date;
|
rlm@46
|
26654 },
|
rlm@46
|
26655
|
rlm@46
|
26656 menuListeners : {
|
rlm@46
|
26657 select: function(m, d){
|
rlm@46
|
26658 this.setValue(d);
|
rlm@46
|
26659 },
|
rlm@46
|
26660 show : function(){ this.onFocus();
|
rlm@46
|
26661 },
|
rlm@46
|
26662 hide : function(){
|
rlm@46
|
26663 this.focus.defer(10, this);
|
rlm@46
|
26664 var ml = this.menuListeners;
|
rlm@46
|
26665 this.menu.un("select", ml.select, this);
|
rlm@46
|
26666 this.menu.un("show", ml.show, this);
|
rlm@46
|
26667 this.menu.un("hide", ml.hide, this);
|
rlm@46
|
26668 }
|
rlm@46
|
26669 },
|
rlm@46
|
26670
|
rlm@46
|
26671 onTriggerClick : function(){
|
rlm@46
|
26672 if(this.disabled){
|
rlm@46
|
26673 return;
|
rlm@46
|
26674 }
|
rlm@46
|
26675 if(this.menu == null){
|
rlm@46
|
26676 this.menu = new Ext.menu.DateMenu();
|
rlm@46
|
26677 }
|
rlm@46
|
26678 Ext.apply(this.menu.picker, {
|
rlm@46
|
26679 minDate : this.minValue,
|
rlm@46
|
26680 maxDate : this.maxValue,
|
rlm@46
|
26681 disabledDatesRE : this.ddMatch,
|
rlm@46
|
26682 disabledDatesText : this.disabledDatesText,
|
rlm@46
|
26683 disabledDays : this.disabledDays,
|
rlm@46
|
26684 disabledDaysText : this.disabledDaysText,
|
rlm@46
|
26685 format : this.format,
|
rlm@46
|
26686 minText : String.format(this.minText, this.formatDate(this.minValue)),
|
rlm@46
|
26687 maxText : String.format(this.maxText, this.formatDate(this.maxValue))
|
rlm@46
|
26688 });
|
rlm@46
|
26689 this.menu.on(Ext.apply({}, this.menuListeners, {
|
rlm@46
|
26690 scope:this
|
rlm@46
|
26691 }));
|
rlm@46
|
26692 this.menu.picker.setValue(this.getValue() || new Date());
|
rlm@46
|
26693 this.menu.show(this.el, "tl-bl?");
|
rlm@46
|
26694 },
|
rlm@46
|
26695
|
rlm@46
|
26696 beforeBlur : function(){
|
rlm@46
|
26697 var v = this.parseDate(this.getRawValue());
|
rlm@46
|
26698 if(v){
|
rlm@46
|
26699 this.setValue(v);
|
rlm@46
|
26700 }
|
rlm@46
|
26701 }
|
rlm@46
|
26702
|
rlm@46
|
26703
|
rlm@46
|
26704
|
rlm@46
|
26705
|
rlm@46
|
26706
|
rlm@46
|
26707 });
|
rlm@46
|
26708 Ext.reg('datefield', Ext.form.DateField);
|
rlm@46
|
26709
|
rlm@46
|
26710 Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, {
|
rlm@46
|
26711
|
rlm@46
|
26712
|
rlm@46
|
26713
|
rlm@46
|
26714
|
rlm@46
|
26715
|
rlm@46
|
26716
|
rlm@46
|
26717 defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"},
|
rlm@46
|
26718
|
rlm@46
|
26719
|
rlm@46
|
26720
|
rlm@46
|
26721
|
rlm@46
|
26722
|
rlm@46
|
26723
|
rlm@46
|
26724 listClass: '',
|
rlm@46
|
26725
|
rlm@46
|
26726 selectedClass: 'x-combo-selected',
|
rlm@46
|
26727
|
rlm@46
|
26728 triggerClass : 'x-form-arrow-trigger',
|
rlm@46
|
26729
|
rlm@46
|
26730 shadow:'sides',
|
rlm@46
|
26731
|
rlm@46
|
26732 listAlign: 'tl-bl?',
|
rlm@46
|
26733
|
rlm@46
|
26734 maxHeight: 300,
|
rlm@46
|
26735
|
rlm@46
|
26736 minHeight: 90,
|
rlm@46
|
26737
|
rlm@46
|
26738 triggerAction: 'query',
|
rlm@46
|
26739
|
rlm@46
|
26740 minChars : 4,
|
rlm@46
|
26741
|
rlm@46
|
26742 typeAhead: false,
|
rlm@46
|
26743
|
rlm@46
|
26744 queryDelay: 500,
|
rlm@46
|
26745
|
rlm@46
|
26746 pageSize: 0,
|
rlm@46
|
26747
|
rlm@46
|
26748 selectOnFocus:false,
|
rlm@46
|
26749
|
rlm@46
|
26750 queryParam: 'query',
|
rlm@46
|
26751
|
rlm@46
|
26752 loadingText: 'Loading...',
|
rlm@46
|
26753
|
rlm@46
|
26754 resizable: false,
|
rlm@46
|
26755
|
rlm@46
|
26756 handleHeight : 8,
|
rlm@46
|
26757
|
rlm@46
|
26758 editable: true,
|
rlm@46
|
26759
|
rlm@46
|
26760 allQuery: '',
|
rlm@46
|
26761
|
rlm@46
|
26762 mode: 'remote',
|
rlm@46
|
26763
|
rlm@46
|
26764 minListWidth : 70,
|
rlm@46
|
26765
|
rlm@46
|
26766 forceSelection:false,
|
rlm@46
|
26767
|
rlm@46
|
26768 typeAheadDelay : 250,
|
rlm@46
|
26769
|
rlm@46
|
26770
|
rlm@46
|
26771
|
rlm@46
|
26772 lazyInit : true,
|
rlm@46
|
26773
|
rlm@46
|
26774 initComponent : function(){
|
rlm@46
|
26775 Ext.form.ComboBox.superclass.initComponent.call(this);
|
rlm@46
|
26776 this.addEvents(
|
rlm@46
|
26777
|
rlm@46
|
26778 'expand',
|
rlm@46
|
26779
|
rlm@46
|
26780 'collapse',
|
rlm@46
|
26781
|
rlm@46
|
26782 'beforeselect',
|
rlm@46
|
26783
|
rlm@46
|
26784 'select',
|
rlm@46
|
26785
|
rlm@46
|
26786 'beforequery'
|
rlm@46
|
26787 );
|
rlm@46
|
26788 if(this.transform){
|
rlm@46
|
26789 this.allowDomMove = false;
|
rlm@46
|
26790 var s = Ext.getDom(this.transform);
|
rlm@46
|
26791 if(!this.hiddenName){
|
rlm@46
|
26792 this.hiddenName = s.name;
|
rlm@46
|
26793 }
|
rlm@46
|
26794 if(!this.store){
|
rlm@46
|
26795 this.mode = 'local';
|
rlm@46
|
26796 var d = [], opts = s.options;
|
rlm@46
|
26797 for(var i = 0, len = opts.length;i < len; i++){
|
rlm@46
|
26798 var o = opts[i];
|
rlm@46
|
26799 var value = (Ext.isIE ? o.getAttributeNode('value').specified : o.hasAttribute('value')) ? o.value : o.text;
|
rlm@46
|
26800 if(o.selected) {
|
rlm@46
|
26801 this.value = value;
|
rlm@46
|
26802 }
|
rlm@46
|
26803 d.push([value, o.text]);
|
rlm@46
|
26804 }
|
rlm@46
|
26805 this.store = new Ext.data.SimpleStore({
|
rlm@46
|
26806 'id': 0,
|
rlm@46
|
26807 fields: ['value', 'text'],
|
rlm@46
|
26808 data : d
|
rlm@46
|
26809 });
|
rlm@46
|
26810 this.valueField = 'value';
|
rlm@46
|
26811 this.displayField = 'text';
|
rlm@46
|
26812 }
|
rlm@46
|
26813 s.name = Ext.id(); if(!this.lazyRender){
|
rlm@46
|
26814 this.target = true;
|
rlm@46
|
26815 this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate);
|
rlm@46
|
26816 Ext.removeNode(s); this.render(this.el.parentNode);
|
rlm@46
|
26817 }else{
|
rlm@46
|
26818 Ext.removeNode(s); }
|
rlm@46
|
26819 }
|
rlm@46
|
26820 else if(Ext.isArray(this.store)){
|
rlm@46
|
26821 if (Ext.isArray(this.store[0])){
|
rlm@46
|
26822 this.store = new Ext.data.SimpleStore({
|
rlm@46
|
26823 fields: ['value','text'],
|
rlm@46
|
26824 data: this.store
|
rlm@46
|
26825 });
|
rlm@46
|
26826 this.valueField = 'value';
|
rlm@46
|
26827 }else{
|
rlm@46
|
26828 this.store = new Ext.data.SimpleStore({
|
rlm@46
|
26829 fields: ['text'],
|
rlm@46
|
26830 data: this.store,
|
rlm@46
|
26831 expandData: true
|
rlm@46
|
26832 });
|
rlm@46
|
26833 this.valueField = 'text';
|
rlm@46
|
26834 }
|
rlm@46
|
26835 this.displayField = 'text';
|
rlm@46
|
26836 this.mode = 'local';
|
rlm@46
|
26837 }
|
rlm@46
|
26838
|
rlm@46
|
26839 this.selectedIndex = -1;
|
rlm@46
|
26840 if(this.mode == 'local'){
|
rlm@46
|
26841 if(this.initialConfig.queryDelay === undefined){
|
rlm@46
|
26842 this.queryDelay = 10;
|
rlm@46
|
26843 }
|
rlm@46
|
26844 if(this.initialConfig.minChars === undefined){
|
rlm@46
|
26845 this.minChars = 0;
|
rlm@46
|
26846 }
|
rlm@46
|
26847 }
|
rlm@46
|
26848 },
|
rlm@46
|
26849
|
rlm@46
|
26850 onRender : function(ct, position){
|
rlm@46
|
26851 Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
|
rlm@46
|
26852 if(this.hiddenName){
|
rlm@46
|
26853 this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: (this.hiddenId||this.hiddenName)},
|
rlm@46
|
26854 'before', true);
|
rlm@46
|
26855 this.hiddenField.value =
|
rlm@46
|
26856 this.hiddenValue !== undefined ? this.hiddenValue :
|
rlm@46
|
26857 this.value !== undefined ? this.value : '';
|
rlm@46
|
26858
|
rlm@46
|
26859 this.el.dom.removeAttribute('name');
|
rlm@46
|
26860 }
|
rlm@46
|
26861 if(Ext.isGecko){
|
rlm@46
|
26862 this.el.dom.setAttribute('autocomplete', 'off');
|
rlm@46
|
26863 }
|
rlm@46
|
26864
|
rlm@46
|
26865 if(!this.lazyInit){
|
rlm@46
|
26866 this.initList();
|
rlm@46
|
26867 }else{
|
rlm@46
|
26868 this.on('focus', this.initList, this, {single: true});
|
rlm@46
|
26869 }
|
rlm@46
|
26870
|
rlm@46
|
26871 if(!this.editable){
|
rlm@46
|
26872 this.editable = true;
|
rlm@46
|
26873 this.setEditable(false);
|
rlm@46
|
26874 }
|
rlm@46
|
26875 },
|
rlm@46
|
26876
|
rlm@46
|
26877 initList : function(){
|
rlm@46
|
26878 if(!this.list){
|
rlm@46
|
26879 var cls = 'x-combo-list';
|
rlm@46
|
26880
|
rlm@46
|
26881 this.list = new Ext.Layer({
|
rlm@46
|
26882 shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false
|
rlm@46
|
26883 });
|
rlm@46
|
26884
|
rlm@46
|
26885 var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
|
rlm@46
|
26886 this.list.setWidth(lw);
|
rlm@46
|
26887 this.list.swallowEvent('mousewheel');
|
rlm@46
|
26888 this.assetHeight = 0;
|
rlm@46
|
26889
|
rlm@46
|
26890 if(this.title){
|
rlm@46
|
26891 this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
|
rlm@46
|
26892 this.assetHeight += this.header.getHeight();
|
rlm@46
|
26893 }
|
rlm@46
|
26894
|
rlm@46
|
26895 this.innerList = this.list.createChild({cls:cls+'-inner'});
|
rlm@46
|
26896 this.innerList.on('mouseover', this.onViewOver, this);
|
rlm@46
|
26897 this.innerList.on('mousemove', this.onViewMove, this);
|
rlm@46
|
26898 this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
|
rlm@46
|
26899
|
rlm@46
|
26900 if(this.pageSize){
|
rlm@46
|
26901 this.footer = this.list.createChild({cls:cls+'-ft'});
|
rlm@46
|
26902 this.pageTb = new Ext.PagingToolbar({
|
rlm@46
|
26903 store:this.store,
|
rlm@46
|
26904 pageSize: this.pageSize,
|
rlm@46
|
26905 renderTo:this.footer
|
rlm@46
|
26906 });
|
rlm@46
|
26907 this.assetHeight += this.footer.getHeight();
|
rlm@46
|
26908 }
|
rlm@46
|
26909
|
rlm@46
|
26910 if(!this.tpl){
|
rlm@46
|
26911
|
rlm@46
|
26912 this.tpl = '<tpl for="."><div class="'+cls+'-item">{' + this.displayField + '}</div></tpl>';
|
rlm@46
|
26913
|
rlm@46
|
26914 }
|
rlm@46
|
26915
|
rlm@46
|
26916
|
rlm@46
|
26917 this.view = new Ext.DataView({
|
rlm@46
|
26918 applyTo: this.innerList,
|
rlm@46
|
26919 tpl: this.tpl,
|
rlm@46
|
26920 singleSelect: true,
|
rlm@46
|
26921 selectedClass: this.selectedClass,
|
rlm@46
|
26922 itemSelector: this.itemSelector || '.' + cls + '-item'
|
rlm@46
|
26923 });
|
rlm@46
|
26924
|
rlm@46
|
26925 this.view.on('click', this.onViewClick, this);
|
rlm@46
|
26926
|
rlm@46
|
26927 this.bindStore(this.store, true);
|
rlm@46
|
26928
|
rlm@46
|
26929 if(this.resizable){
|
rlm@46
|
26930 this.resizer = new Ext.Resizable(this.list, {
|
rlm@46
|
26931 pinned:true, handles:'se'
|
rlm@46
|
26932 });
|
rlm@46
|
26933 this.resizer.on('resize', function(r, w, h){
|
rlm@46
|
26934 this.maxHeight = h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;
|
rlm@46
|
26935 this.listWidth = w;
|
rlm@46
|
26936 this.innerList.setWidth(w - this.list.getFrameWidth('lr'));
|
rlm@46
|
26937 this.restrictHeight();
|
rlm@46
|
26938 }, this);
|
rlm@46
|
26939 this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom', this.handleHeight+'px');
|
rlm@46
|
26940 }
|
rlm@46
|
26941 }
|
rlm@46
|
26942 },
|
rlm@46
|
26943
|
rlm@46
|
26944
|
rlm@46
|
26945 bindStore : function(store, initial){
|
rlm@46
|
26946 if(this.store && !initial){
|
rlm@46
|
26947 this.store.un('beforeload', this.onBeforeLoad, this);
|
rlm@46
|
26948 this.store.un('load', this.onLoad, this);
|
rlm@46
|
26949 this.store.un('loadexception', this.collapse, this);
|
rlm@46
|
26950 if(!store){
|
rlm@46
|
26951 this.store = null;
|
rlm@46
|
26952 if(this.view){
|
rlm@46
|
26953 this.view.setStore(null);
|
rlm@46
|
26954 }
|
rlm@46
|
26955 }
|
rlm@46
|
26956 }
|
rlm@46
|
26957 if(store){
|
rlm@46
|
26958 this.store = Ext.StoreMgr.lookup(store);
|
rlm@46
|
26959
|
rlm@46
|
26960 this.store.on('beforeload', this.onBeforeLoad, this);
|
rlm@46
|
26961 this.store.on('load', this.onLoad, this);
|
rlm@46
|
26962 this.store.on('loadexception', this.collapse, this);
|
rlm@46
|
26963
|
rlm@46
|
26964 if(this.view){
|
rlm@46
|
26965 this.view.setStore(store);
|
rlm@46
|
26966 }
|
rlm@46
|
26967 }
|
rlm@46
|
26968 },
|
rlm@46
|
26969
|
rlm@46
|
26970 initEvents : function(){
|
rlm@46
|
26971 Ext.form.ComboBox.superclass.initEvents.call(this);
|
rlm@46
|
26972
|
rlm@46
|
26973 this.keyNav = new Ext.KeyNav(this.el, {
|
rlm@46
|
26974 "up" : function(e){
|
rlm@46
|
26975 this.inKeyMode = true;
|
rlm@46
|
26976 this.selectPrev();
|
rlm@46
|
26977 },
|
rlm@46
|
26978
|
rlm@46
|
26979 "down" : function(e){
|
rlm@46
|
26980 if(!this.isExpanded()){
|
rlm@46
|
26981 this.onTriggerClick();
|
rlm@46
|
26982 }else{
|
rlm@46
|
26983 this.inKeyMode = true;
|
rlm@46
|
26984 this.selectNext();
|
rlm@46
|
26985 }
|
rlm@46
|
26986 },
|
rlm@46
|
26987
|
rlm@46
|
26988 "enter" : function(e){
|
rlm@46
|
26989 this.onViewClick();
|
rlm@46
|
26990 this.delayedCheck = true;
|
rlm@46
|
26991 this.unsetDelayCheck.defer(10, this);
|
rlm@46
|
26992 },
|
rlm@46
|
26993
|
rlm@46
|
26994 "esc" : function(e){
|
rlm@46
|
26995 this.collapse();
|
rlm@46
|
26996 },
|
rlm@46
|
26997
|
rlm@46
|
26998 "tab" : function(e){
|
rlm@46
|
26999 this.onViewClick(false);
|
rlm@46
|
27000 return true;
|
rlm@46
|
27001 },
|
rlm@46
|
27002
|
rlm@46
|
27003 scope : this,
|
rlm@46
|
27004
|
rlm@46
|
27005 doRelay : function(foo, bar, hname){
|
rlm@46
|
27006 if(hname == 'down' || this.scope.isExpanded()){
|
rlm@46
|
27007 return Ext.KeyNav.prototype.doRelay.apply(this, arguments);
|
rlm@46
|
27008 }
|
rlm@46
|
27009 return true;
|
rlm@46
|
27010 },
|
rlm@46
|
27011
|
rlm@46
|
27012 forceKeyDown : true
|
rlm@46
|
27013 });
|
rlm@46
|
27014 this.queryDelay = Math.max(this.queryDelay || 10,
|
rlm@46
|
27015 this.mode == 'local' ? 10 : 250);
|
rlm@46
|
27016 this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
|
rlm@46
|
27017 if(this.typeAhead){
|
rlm@46
|
27018 this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this);
|
rlm@46
|
27019 }
|
rlm@46
|
27020 if(this.editable !== false){
|
rlm@46
|
27021 this.el.on("keyup", this.onKeyUp, this);
|
rlm@46
|
27022 }
|
rlm@46
|
27023 if(this.forceSelection){
|
rlm@46
|
27024 this.on('blur', this.doForce, this);
|
rlm@46
|
27025 }
|
rlm@46
|
27026 },
|
rlm@46
|
27027
|
rlm@46
|
27028 onDestroy : function(){
|
rlm@46
|
27029 if(this.view){
|
rlm@46
|
27030 this.view.el.removeAllListeners();
|
rlm@46
|
27031 this.view.el.remove();
|
rlm@46
|
27032 this.view.purgeListeners();
|
rlm@46
|
27033 }
|
rlm@46
|
27034 if(this.list){
|
rlm@46
|
27035 this.list.destroy();
|
rlm@46
|
27036 }
|
rlm@46
|
27037 this.bindStore(null);
|
rlm@46
|
27038 Ext.form.ComboBox.superclass.onDestroy.call(this);
|
rlm@46
|
27039 },
|
rlm@46
|
27040
|
rlm@46
|
27041 unsetDelayCheck : function(){
|
rlm@46
|
27042 delete this.delayedCheck;
|
rlm@46
|
27043 },
|
rlm@46
|
27044 fireKey : function(e){
|
rlm@46
|
27045 if(e.isNavKeyPress() && !this.isExpanded() && !this.delayedCheck){
|
rlm@46
|
27046 this.fireEvent("specialkey", this, e);
|
rlm@46
|
27047 }
|
rlm@46
|
27048 },
|
rlm@46
|
27049
|
rlm@46
|
27050 onResize: function(w, h){
|
rlm@46
|
27051 Ext.form.ComboBox.superclass.onResize.apply(this, arguments);
|
rlm@46
|
27052 if(this.list && this.listWidth === undefined){
|
rlm@46
|
27053 var lw = Math.max(w, this.minListWidth);
|
rlm@46
|
27054 this.list.setWidth(lw);
|
rlm@46
|
27055 this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
|
rlm@46
|
27056 }
|
rlm@46
|
27057 },
|
rlm@46
|
27058
|
rlm@46
|
27059 onEnable: function(){
|
rlm@46
|
27060 Ext.form.ComboBox.superclass.onEnable.apply(this, arguments);
|
rlm@46
|
27061 if(this.hiddenField){
|
rlm@46
|
27062 this.hiddenField.disabled = false;
|
rlm@46
|
27063 }
|
rlm@46
|
27064 },
|
rlm@46
|
27065
|
rlm@46
|
27066 onDisable: function(){
|
rlm@46
|
27067 Ext.form.ComboBox.superclass.onDisable.apply(this, arguments);
|
rlm@46
|
27068 if(this.hiddenField){
|
rlm@46
|
27069 this.hiddenField.disabled = true;
|
rlm@46
|
27070 }
|
rlm@46
|
27071 },
|
rlm@46
|
27072
|
rlm@46
|
27073
|
rlm@46
|
27074 setEditable : function(value){
|
rlm@46
|
27075 if(value == this.editable){
|
rlm@46
|
27076 return;
|
rlm@46
|
27077 }
|
rlm@46
|
27078 this.editable = value;
|
rlm@46
|
27079 if(!value){
|
rlm@46
|
27080 this.el.dom.setAttribute('readOnly', true);
|
rlm@46
|
27081 this.el.on('mousedown', this.onTriggerClick, this);
|
rlm@46
|
27082 this.el.addClass('x-combo-noedit');
|
rlm@46
|
27083 }else{
|
rlm@46
|
27084 this.el.dom.setAttribute('readOnly', false);
|
rlm@46
|
27085 this.el.un('mousedown', this.onTriggerClick, this);
|
rlm@46
|
27086 this.el.removeClass('x-combo-noedit');
|
rlm@46
|
27087 }
|
rlm@46
|
27088 },
|
rlm@46
|
27089
|
rlm@46
|
27090 onBeforeLoad : function(){
|
rlm@46
|
27091 if(!this.hasFocus){
|
rlm@46
|
27092 return;
|
rlm@46
|
27093 }
|
rlm@46
|
27094 this.innerList.update(this.loadingText ?
|
rlm@46
|
27095 '<div class="loading-indicator">'+this.loadingText+'</div>' : '');
|
rlm@46
|
27096 this.restrictHeight();
|
rlm@46
|
27097 this.selectedIndex = -1;
|
rlm@46
|
27098 },
|
rlm@46
|
27099
|
rlm@46
|
27100 onLoad : function(){
|
rlm@46
|
27101 if(!this.hasFocus){
|
rlm@46
|
27102 return;
|
rlm@46
|
27103 }
|
rlm@46
|
27104 if(this.store.getCount() > 0){
|
rlm@46
|
27105 this.expand();
|
rlm@46
|
27106 this.restrictHeight();
|
rlm@46
|
27107 if(this.lastQuery == this.allQuery){
|
rlm@46
|
27108 if(this.editable){
|
rlm@46
|
27109 this.el.dom.select();
|
rlm@46
|
27110 }
|
rlm@46
|
27111 if(!this.selectByValue(this.value, true)){
|
rlm@46
|
27112 this.select(0, true);
|
rlm@46
|
27113 }
|
rlm@46
|
27114 }else{
|
rlm@46
|
27115 this.selectNext();
|
rlm@46
|
27116 if(this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE){
|
rlm@46
|
27117 this.taTask.delay(this.typeAheadDelay);
|
rlm@46
|
27118 }
|
rlm@46
|
27119 }
|
rlm@46
|
27120 }else{
|
rlm@46
|
27121 this.onEmptyResults();
|
rlm@46
|
27122 }
|
rlm@46
|
27123 },
|
rlm@46
|
27124
|
rlm@46
|
27125 onTypeAhead : function(){
|
rlm@46
|
27126 if(this.store.getCount() > 0){
|
rlm@46
|
27127 var r = this.store.getAt(0);
|
rlm@46
|
27128 var newValue = r.data[this.displayField];
|
rlm@46
|
27129 var len = newValue.length;
|
rlm@46
|
27130 var selStart = this.getRawValue().length;
|
rlm@46
|
27131 if(selStart != len){
|
rlm@46
|
27132 this.setRawValue(newValue);
|
rlm@46
|
27133 this.selectText(selStart, newValue.length);
|
rlm@46
|
27134 }
|
rlm@46
|
27135 }
|
rlm@46
|
27136 },
|
rlm@46
|
27137
|
rlm@46
|
27138 onSelect : function(record, index){
|
rlm@46
|
27139 if(this.fireEvent('beforeselect', this, record, index) !== false){
|
rlm@46
|
27140 this.setValue(record.data[this.valueField || this.displayField]);
|
rlm@46
|
27141 this.collapse();
|
rlm@46
|
27142 this.fireEvent('select', this, record, index);
|
rlm@46
|
27143 }
|
rlm@46
|
27144 },
|
rlm@46
|
27145
|
rlm@46
|
27146
|
rlm@46
|
27147 getValue : function(){
|
rlm@46
|
27148 if(this.valueField){
|
rlm@46
|
27149 return typeof this.value != 'undefined' ? this.value : '';
|
rlm@46
|
27150 }else{
|
rlm@46
|
27151 return Ext.form.ComboBox.superclass.getValue.call(this);
|
rlm@46
|
27152 }
|
rlm@46
|
27153 },
|
rlm@46
|
27154
|
rlm@46
|
27155
|
rlm@46
|
27156 clearValue : function(){
|
rlm@46
|
27157 if(this.hiddenField){
|
rlm@46
|
27158 this.hiddenField.value = '';
|
rlm@46
|
27159 }
|
rlm@46
|
27160 this.setRawValue('');
|
rlm@46
|
27161 this.lastSelectionText = '';
|
rlm@46
|
27162 this.applyEmptyText();
|
rlm@46
|
27163 this.value = '';
|
rlm@46
|
27164 },
|
rlm@46
|
27165
|
rlm@46
|
27166
|
rlm@46
|
27167 setValue : function(v){
|
rlm@46
|
27168 var text = v;
|
rlm@46
|
27169 if(this.valueField){
|
rlm@46
|
27170 var r = this.findRecord(this.valueField, v);
|
rlm@46
|
27171 if(r){
|
rlm@46
|
27172 text = r.data[this.displayField];
|
rlm@46
|
27173 }else if(this.valueNotFoundText !== undefined){
|
rlm@46
|
27174 text = this.valueNotFoundText;
|
rlm@46
|
27175 }
|
rlm@46
|
27176 }
|
rlm@46
|
27177 this.lastSelectionText = text;
|
rlm@46
|
27178 if(this.hiddenField){
|
rlm@46
|
27179 this.hiddenField.value = v;
|
rlm@46
|
27180 }
|
rlm@46
|
27181 Ext.form.ComboBox.superclass.setValue.call(this, text);
|
rlm@46
|
27182 this.value = v;
|
rlm@46
|
27183 },
|
rlm@46
|
27184
|
rlm@46
|
27185 findRecord : function(prop, value){
|
rlm@46
|
27186 var record;
|
rlm@46
|
27187 if(this.store.getCount() > 0){
|
rlm@46
|
27188 this.store.each(function(r){
|
rlm@46
|
27189 if(r.data[prop] == value){
|
rlm@46
|
27190 record = r;
|
rlm@46
|
27191 return false;
|
rlm@46
|
27192 }
|
rlm@46
|
27193 });
|
rlm@46
|
27194 }
|
rlm@46
|
27195 return record;
|
rlm@46
|
27196 },
|
rlm@46
|
27197
|
rlm@46
|
27198 onViewMove : function(e, t){
|
rlm@46
|
27199 this.inKeyMode = false;
|
rlm@46
|
27200 },
|
rlm@46
|
27201
|
rlm@46
|
27202 onViewOver : function(e, t){
|
rlm@46
|
27203 if(this.inKeyMode){ return;
|
rlm@46
|
27204 }
|
rlm@46
|
27205 var item = this.view.findItemFromChild(t);
|
rlm@46
|
27206 if(item){
|
rlm@46
|
27207 var index = this.view.indexOf(item);
|
rlm@46
|
27208 this.select(index, false);
|
rlm@46
|
27209 }
|
rlm@46
|
27210 },
|
rlm@46
|
27211
|
rlm@46
|
27212 onViewClick : function(doFocus){
|
rlm@46
|
27213 var index = this.view.getSelectedIndexes()[0];
|
rlm@46
|
27214 var r = this.store.getAt(index);
|
rlm@46
|
27215 if(r){
|
rlm@46
|
27216 this.onSelect(r, index);
|
rlm@46
|
27217 }
|
rlm@46
|
27218 if(doFocus !== false){
|
rlm@46
|
27219 this.el.focus();
|
rlm@46
|
27220 }
|
rlm@46
|
27221 },
|
rlm@46
|
27222
|
rlm@46
|
27223 restrictHeight : function(){
|
rlm@46
|
27224 this.innerList.dom.style.height = '';
|
rlm@46
|
27225 var inner = this.innerList.dom;
|
rlm@46
|
27226 var pad = this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight;
|
rlm@46
|
27227 var h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight);
|
rlm@46
|
27228 var ha = this.getPosition()[1]-Ext.getBody().getScroll().top;
|
rlm@46
|
27229 var hb = Ext.lib.Dom.getViewHeight()-ha-this.getSize().height;
|
rlm@46
|
27230 var space = Math.max(ha, hb, this.minHeight || 0)-this.list.shadowOffset-pad-5;
|
rlm@46
|
27231 h = Math.min(h, space, this.maxHeight);
|
rlm@46
|
27232
|
rlm@46
|
27233 this.innerList.setHeight(h);
|
rlm@46
|
27234 this.list.beginUpdate();
|
rlm@46
|
27235 this.list.setHeight(h+pad);
|
rlm@46
|
27236 this.list.alignTo(this.wrap, this.listAlign);
|
rlm@46
|
27237 this.list.endUpdate();
|
rlm@46
|
27238 },
|
rlm@46
|
27239
|
rlm@46
|
27240 onEmptyResults : function(){
|
rlm@46
|
27241 this.collapse();
|
rlm@46
|
27242 },
|
rlm@46
|
27243
|
rlm@46
|
27244
|
rlm@46
|
27245 isExpanded : function(){
|
rlm@46
|
27246 return this.list && this.list.isVisible();
|
rlm@46
|
27247 },
|
rlm@46
|
27248
|
rlm@46
|
27249
|
rlm@46
|
27250 selectByValue : function(v, scrollIntoView){
|
rlm@46
|
27251 if(v !== undefined && v !== null){
|
rlm@46
|
27252 var r = this.findRecord(this.valueField || this.displayField, v);
|
rlm@46
|
27253 if(r){
|
rlm@46
|
27254 this.select(this.store.indexOf(r), scrollIntoView);
|
rlm@46
|
27255 return true;
|
rlm@46
|
27256 }
|
rlm@46
|
27257 }
|
rlm@46
|
27258 return false;
|
rlm@46
|
27259 },
|
rlm@46
|
27260
|
rlm@46
|
27261
|
rlm@46
|
27262 select : function(index, scrollIntoView){
|
rlm@46
|
27263 this.selectedIndex = index;
|
rlm@46
|
27264 this.view.select(index);
|
rlm@46
|
27265 if(scrollIntoView !== false){
|
rlm@46
|
27266 var el = this.view.getNode(index);
|
rlm@46
|
27267 if(el){
|
rlm@46
|
27268 this.innerList.scrollChildIntoView(el, false);
|
rlm@46
|
27269 }
|
rlm@46
|
27270 }
|
rlm@46
|
27271 },
|
rlm@46
|
27272
|
rlm@46
|
27273 selectNext : function(){
|
rlm@46
|
27274 var ct = this.store.getCount();
|
rlm@46
|
27275 if(ct > 0){
|
rlm@46
|
27276 if(this.selectedIndex == -1){
|
rlm@46
|
27277 this.select(0);
|
rlm@46
|
27278 }else if(this.selectedIndex < ct-1){
|
rlm@46
|
27279 this.select(this.selectedIndex+1);
|
rlm@46
|
27280 }
|
rlm@46
|
27281 }
|
rlm@46
|
27282 },
|
rlm@46
|
27283
|
rlm@46
|
27284 selectPrev : function(){
|
rlm@46
|
27285 var ct = this.store.getCount();
|
rlm@46
|
27286 if(ct > 0){
|
rlm@46
|
27287 if(this.selectedIndex == -1){
|
rlm@46
|
27288 this.select(0);
|
rlm@46
|
27289 }else if(this.selectedIndex != 0){
|
rlm@46
|
27290 this.select(this.selectedIndex-1);
|
rlm@46
|
27291 }
|
rlm@46
|
27292 }
|
rlm@46
|
27293 },
|
rlm@46
|
27294
|
rlm@46
|
27295 onKeyUp : function(e){
|
rlm@46
|
27296 if(this.editable !== false && !e.isSpecialKey()){
|
rlm@46
|
27297 this.lastKey = e.getKey();
|
rlm@46
|
27298 this.dqTask.delay(this.queryDelay);
|
rlm@46
|
27299 }
|
rlm@46
|
27300 },
|
rlm@46
|
27301
|
rlm@46
|
27302 validateBlur : function(){
|
rlm@46
|
27303 return !this.list || !this.list.isVisible();
|
rlm@46
|
27304 },
|
rlm@46
|
27305
|
rlm@46
|
27306 initQuery : function(){
|
rlm@46
|
27307 this.doQuery(this.getRawValue());
|
rlm@46
|
27308 },
|
rlm@46
|
27309
|
rlm@46
|
27310 doForce : function(){
|
rlm@46
|
27311 if(this.el.dom.value.length > 0){
|
rlm@46
|
27312 this.el.dom.value =
|
rlm@46
|
27313 this.lastSelectionText === undefined ? '' : this.lastSelectionText;
|
rlm@46
|
27314 this.applyEmptyText();
|
rlm@46
|
27315 }
|
rlm@46
|
27316 },
|
rlm@46
|
27317
|
rlm@46
|
27318
|
rlm@46
|
27319 doQuery : function(q, forceAll){
|
rlm@46
|
27320 if(q === undefined || q === null){
|
rlm@46
|
27321 q = '';
|
rlm@46
|
27322 }
|
rlm@46
|
27323 var qe = {
|
rlm@46
|
27324 query: q,
|
rlm@46
|
27325 forceAll: forceAll,
|
rlm@46
|
27326 combo: this,
|
rlm@46
|
27327 cancel:false
|
rlm@46
|
27328 };
|
rlm@46
|
27329 if(this.fireEvent('beforequery', qe)===false || qe.cancel){
|
rlm@46
|
27330 return false;
|
rlm@46
|
27331 }
|
rlm@46
|
27332 q = qe.query;
|
rlm@46
|
27333 forceAll = qe.forceAll;
|
rlm@46
|
27334 if(forceAll === true || (q.length >= this.minChars)){
|
rlm@46
|
27335 if(this.lastQuery !== q){
|
rlm@46
|
27336 this.lastQuery = q;
|
rlm@46
|
27337 if(this.mode == 'local'){
|
rlm@46
|
27338 this.selectedIndex = -1;
|
rlm@46
|
27339 if(forceAll){
|
rlm@46
|
27340 this.store.clearFilter();
|
rlm@46
|
27341 }else{
|
rlm@46
|
27342 this.store.filter(this.displayField, q);
|
rlm@46
|
27343 }
|
rlm@46
|
27344 this.onLoad();
|
rlm@46
|
27345 }else{
|
rlm@46
|
27346 this.store.baseParams[this.queryParam] = q;
|
rlm@46
|
27347 this.store.load({
|
rlm@46
|
27348 params: this.getParams(q)
|
rlm@46
|
27349 });
|
rlm@46
|
27350 this.expand();
|
rlm@46
|
27351 }
|
rlm@46
|
27352 }else{
|
rlm@46
|
27353 this.selectedIndex = -1;
|
rlm@46
|
27354 this.onLoad();
|
rlm@46
|
27355 }
|
rlm@46
|
27356 }
|
rlm@46
|
27357 },
|
rlm@46
|
27358
|
rlm@46
|
27359 getParams : function(q){
|
rlm@46
|
27360 var p = {};
|
rlm@46
|
27361 if(this.pageSize){
|
rlm@46
|
27362 p.start = 0;
|
rlm@46
|
27363 p.limit = this.pageSize;
|
rlm@46
|
27364 }
|
rlm@46
|
27365 return p;
|
rlm@46
|
27366 },
|
rlm@46
|
27367
|
rlm@46
|
27368
|
rlm@46
|
27369 collapse : function(){
|
rlm@46
|
27370 if(!this.isExpanded()){
|
rlm@46
|
27371 return;
|
rlm@46
|
27372 }
|
rlm@46
|
27373 this.list.hide();
|
rlm@46
|
27374 Ext.getDoc().un('mousewheel', this.collapseIf, this);
|
rlm@46
|
27375 Ext.getDoc().un('mousedown', this.collapseIf, this);
|
rlm@46
|
27376 this.fireEvent('collapse', this);
|
rlm@46
|
27377 },
|
rlm@46
|
27378
|
rlm@46
|
27379 collapseIf : function(e){
|
rlm@46
|
27380 if(!e.within(this.wrap) && !e.within(this.list)){
|
rlm@46
|
27381 this.collapse();
|
rlm@46
|
27382 }
|
rlm@46
|
27383 },
|
rlm@46
|
27384
|
rlm@46
|
27385
|
rlm@46
|
27386 expand : function(){
|
rlm@46
|
27387 if(this.isExpanded() || !this.hasFocus){
|
rlm@46
|
27388 return;
|
rlm@46
|
27389 }
|
rlm@46
|
27390 this.list.alignTo(this.wrap, this.listAlign);
|
rlm@46
|
27391 this.list.show();
|
rlm@46
|
27392 this.innerList.setOverflow('auto'); Ext.getDoc().on('mousewheel', this.collapseIf, this);
|
rlm@46
|
27393 Ext.getDoc().on('mousedown', this.collapseIf, this);
|
rlm@46
|
27394 this.fireEvent('expand', this);
|
rlm@46
|
27395 },
|
rlm@46
|
27396
|
rlm@46
|
27397 onTriggerClick : function(){
|
rlm@46
|
27398 if(this.disabled){
|
rlm@46
|
27399 return;
|
rlm@46
|
27400 }
|
rlm@46
|
27401 if(this.isExpanded()){
|
rlm@46
|
27402 this.collapse();
|
rlm@46
|
27403 this.el.focus();
|
rlm@46
|
27404 }else {
|
rlm@46
|
27405 this.onFocus({});
|
rlm@46
|
27406 if(this.triggerAction == 'all') {
|
rlm@46
|
27407 this.doQuery(this.allQuery, true);
|
rlm@46
|
27408 } else {
|
rlm@46
|
27409 this.doQuery(this.getRawValue());
|
rlm@46
|
27410 }
|
rlm@46
|
27411 this.el.focus();
|
rlm@46
|
27412 }
|
rlm@46
|
27413 }
|
rlm@46
|
27414
|
rlm@46
|
27415
|
rlm@46
|
27416
|
rlm@46
|
27417
|
rlm@46
|
27418
|
rlm@46
|
27419
|
rlm@46
|
27420 });
|
rlm@46
|
27421 Ext.reg('combo', Ext.form.ComboBox);
|
rlm@46
|
27422
|
rlm@46
|
27423 Ext.form.Checkbox = Ext.extend(Ext.form.Field, {
|
rlm@46
|
27424
|
rlm@46
|
27425 focusClass : undefined,
|
rlm@46
|
27426
|
rlm@46
|
27427 fieldClass: "x-form-field",
|
rlm@46
|
27428
|
rlm@46
|
27429 checked: false,
|
rlm@46
|
27430
|
rlm@46
|
27431 defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
|
rlm@46
|
27432
|
rlm@46
|
27433
|
rlm@46
|
27434
|
rlm@46
|
27435 initComponent : function(){
|
rlm@46
|
27436 Ext.form.Checkbox.superclass.initComponent.call(this);
|
rlm@46
|
27437 this.addEvents(
|
rlm@46
|
27438
|
rlm@46
|
27439 'check'
|
rlm@46
|
27440 );
|
rlm@46
|
27441 },
|
rlm@46
|
27442
|
rlm@46
|
27443 onResize : function(){
|
rlm@46
|
27444 Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
|
rlm@46
|
27445 if(!this.boxLabel){
|
rlm@46
|
27446 this.el.alignTo(this.wrap, 'c-c');
|
rlm@46
|
27447 }
|
rlm@46
|
27448 },
|
rlm@46
|
27449
|
rlm@46
|
27450 initEvents : function(){
|
rlm@46
|
27451 Ext.form.Checkbox.superclass.initEvents.call(this);
|
rlm@46
|
27452 this.el.on("click", this.onClick, this);
|
rlm@46
|
27453 this.el.on("change", this.onClick, this);
|
rlm@46
|
27454 },
|
rlm@46
|
27455
|
rlm@46
|
27456 getResizeEl : function(){
|
rlm@46
|
27457 return this.wrap;
|
rlm@46
|
27458 },
|
rlm@46
|
27459
|
rlm@46
|
27460 getPositionEl : function(){
|
rlm@46
|
27461 return this.wrap;
|
rlm@46
|
27462 },
|
rlm@46
|
27463
|
rlm@46
|
27464
|
rlm@46
|
27465 markInvalid : Ext.emptyFn,
|
rlm@46
|
27466
|
rlm@46
|
27467 clearInvalid : Ext.emptyFn,
|
rlm@46
|
27468
|
rlm@46
|
27469 onRender : function(ct, position){
|
rlm@46
|
27470 Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
|
rlm@46
|
27471 if(this.inputValue !== undefined){
|
rlm@46
|
27472 this.el.dom.value = this.inputValue;
|
rlm@46
|
27473 }
|
rlm@46
|
27474 this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
|
rlm@46
|
27475 if(this.boxLabel){
|
rlm@46
|
27476 this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
|
rlm@46
|
27477 }
|
rlm@46
|
27478 if(this.checked){
|
rlm@46
|
27479 this.setValue(true);
|
rlm@46
|
27480 }else{
|
rlm@46
|
27481 this.checked = this.el.dom.checked;
|
rlm@46
|
27482 }
|
rlm@46
|
27483 },
|
rlm@46
|
27484
|
rlm@46
|
27485 onDestroy : function(){
|
rlm@46
|
27486 if(this.wrap){
|
rlm@46
|
27487 this.wrap.remove();
|
rlm@46
|
27488 }
|
rlm@46
|
27489 Ext.form.Checkbox.superclass.onDestroy.call(this);
|
rlm@46
|
27490 },
|
rlm@46
|
27491
|
rlm@46
|
27492 initValue : Ext.emptyFn,
|
rlm@46
|
27493
|
rlm@46
|
27494
|
rlm@46
|
27495 getValue : function(){
|
rlm@46
|
27496 if(this.rendered){
|
rlm@46
|
27497 return this.el.dom.checked;
|
rlm@46
|
27498 }
|
rlm@46
|
27499 return false;
|
rlm@46
|
27500 },
|
rlm@46
|
27501
|
rlm@46
|
27502 onClick : function(){
|
rlm@46
|
27503 if(this.el.dom.checked != this.checked){
|
rlm@46
|
27504 this.setValue(this.el.dom.checked);
|
rlm@46
|
27505 }
|
rlm@46
|
27506 },
|
rlm@46
|
27507
|
rlm@46
|
27508
|
rlm@46
|
27509 setValue : function(v){
|
rlm@46
|
27510 this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on');
|
rlm@46
|
27511 if(this.el && this.el.dom){
|
rlm@46
|
27512 this.el.dom.checked = this.checked;
|
rlm@46
|
27513 this.el.dom.defaultChecked = this.checked;
|
rlm@46
|
27514 }
|
rlm@46
|
27515 this.fireEvent("check", this, this.checked);
|
rlm@46
|
27516 }
|
rlm@46
|
27517 });
|
rlm@46
|
27518 Ext.reg('checkbox', Ext.form.Checkbox);
|
rlm@46
|
27519
|
rlm@46
|
27520 Ext.form.Radio = Ext.extend(Ext.form.Checkbox, {
|
rlm@46
|
27521 inputType: 'radio',
|
rlm@46
|
27522
|
rlm@46
|
27523
|
rlm@46
|
27524 markInvalid : Ext.emptyFn,
|
rlm@46
|
27525
|
rlm@46
|
27526 clearInvalid : Ext.emptyFn,
|
rlm@46
|
27527
|
rlm@46
|
27528
|
rlm@46
|
27529 getGroupValue : function(){
|
rlm@46
|
27530 var p = this.el.up('form') || Ext.getBody();
|
rlm@46
|
27531 var c = p.child('input[name='+this.el.dom.name+']:checked', true);
|
rlm@46
|
27532 return c ? c.value : null;
|
rlm@46
|
27533 },
|
rlm@46
|
27534
|
rlm@46
|
27535 onClick : function(){
|
rlm@46
|
27536 if(this.el.dom.checked != this.checked){
|
rlm@46
|
27537 var p = this.el.up('form') || Ext.getBody();
|
rlm@46
|
27538 var els = p.select('input[name='+this.el.dom.name+']');
|
rlm@46
|
27539 els.each(function(el){
|
rlm@46
|
27540 if(el.dom.id == this.id){
|
rlm@46
|
27541 this.setValue(true);
|
rlm@46
|
27542 }else{
|
rlm@46
|
27543 Ext.getCmp(el.dom.id).setValue(false);
|
rlm@46
|
27544 }
|
rlm@46
|
27545 }, this);
|
rlm@46
|
27546 }
|
rlm@46
|
27547 },
|
rlm@46
|
27548
|
rlm@46
|
27549
|
rlm@46
|
27550 setValue : function(v){
|
rlm@46
|
27551 if (typeof v == 'boolean') {
|
rlm@46
|
27552 Ext.form.Radio.superclass.setValue.call(this, v);
|
rlm@46
|
27553 } else {
|
rlm@46
|
27554 var r = this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']', true);
|
rlm@46
|
27555 if (r){
|
rlm@46
|
27556 r.checked = true;
|
rlm@46
|
27557 };
|
rlm@46
|
27558 }
|
rlm@46
|
27559 }
|
rlm@46
|
27560 });
|
rlm@46
|
27561 Ext.reg('radio', Ext.form.Radio);
|
rlm@46
|
27562
|
rlm@46
|
27563 Ext.form.Hidden = Ext.extend(Ext.form.Field, {
|
rlm@46
|
27564
|
rlm@46
|
27565 inputType : 'hidden',
|
rlm@46
|
27566
|
rlm@46
|
27567
|
rlm@46
|
27568 onRender : function(){
|
rlm@46
|
27569 Ext.form.Hidden.superclass.onRender.apply(this, arguments);
|
rlm@46
|
27570 },
|
rlm@46
|
27571
|
rlm@46
|
27572
|
rlm@46
|
27573 initEvents : function(){
|
rlm@46
|
27574 this.originalValue = this.getValue();
|
rlm@46
|
27575 },
|
rlm@46
|
27576
|
rlm@46
|
27577
|
rlm@46
|
27578 setSize : Ext.emptyFn,
|
rlm@46
|
27579 setWidth : Ext.emptyFn,
|
rlm@46
|
27580 setHeight : Ext.emptyFn,
|
rlm@46
|
27581 setPosition : Ext.emptyFn,
|
rlm@46
|
27582 setPagePosition : Ext.emptyFn,
|
rlm@46
|
27583 markInvalid : Ext.emptyFn,
|
rlm@46
|
27584 clearInvalid : Ext.emptyFn
|
rlm@46
|
27585 });
|
rlm@46
|
27586 Ext.reg('hidden', Ext.form.Hidden);
|
rlm@46
|
27587
|
rlm@46
|
27588 Ext.form.BasicForm = function(el, config){
|
rlm@46
|
27589 Ext.apply(this, config);
|
rlm@46
|
27590
|
rlm@46
|
27591 this.items = new Ext.util.MixedCollection(false, function(o){
|
rlm@46
|
27592 return o.id || (o.id = Ext.id());
|
rlm@46
|
27593 });
|
rlm@46
|
27594 this.addEvents(
|
rlm@46
|
27595
|
rlm@46
|
27596 'beforeaction',
|
rlm@46
|
27597
|
rlm@46
|
27598 'actionfailed',
|
rlm@46
|
27599
|
rlm@46
|
27600 'actioncomplete'
|
rlm@46
|
27601 );
|
rlm@46
|
27602
|
rlm@46
|
27603 if(el){
|
rlm@46
|
27604 this.initEl(el);
|
rlm@46
|
27605 }
|
rlm@46
|
27606 Ext.form.BasicForm.superclass.constructor.call(this);
|
rlm@46
|
27607 };
|
rlm@46
|
27608
|
rlm@46
|
27609 Ext.extend(Ext.form.BasicForm, Ext.util.Observable, {
|
rlm@46
|
27610
|
rlm@46
|
27611
|
rlm@46
|
27612
|
rlm@46
|
27613
|
rlm@46
|
27614
|
rlm@46
|
27615
|
rlm@46
|
27616
|
rlm@46
|
27617 timeout: 30,
|
rlm@46
|
27618
|
rlm@46
|
27619 activeAction : null,
|
rlm@46
|
27620
|
rlm@46
|
27621
|
rlm@46
|
27622 trackResetOnLoad : false,
|
rlm@46
|
27623
|
rlm@46
|
27624
|
rlm@46
|
27625
|
rlm@46
|
27626
|
rlm@46
|
27627 initEl : function(el){
|
rlm@46
|
27628 this.el = Ext.get(el);
|
rlm@46
|
27629 this.id = this.el.id || Ext.id();
|
rlm@46
|
27630 if(!this.standardSubmit){
|
rlm@46
|
27631 this.el.on('submit', this.onSubmit, this);
|
rlm@46
|
27632 }
|
rlm@46
|
27633 this.el.addClass('x-form');
|
rlm@46
|
27634 },
|
rlm@46
|
27635
|
rlm@46
|
27636
|
rlm@46
|
27637 getEl: function(){
|
rlm@46
|
27638 return this.el;
|
rlm@46
|
27639 },
|
rlm@46
|
27640
|
rlm@46
|
27641 onSubmit : function(e){
|
rlm@46
|
27642 e.stopEvent();
|
rlm@46
|
27643 },
|
rlm@46
|
27644
|
rlm@46
|
27645 destroy: function() {
|
rlm@46
|
27646 this.items.each(function(f){
|
rlm@46
|
27647 Ext.destroy(f);
|
rlm@46
|
27648 });
|
rlm@46
|
27649 if(this.el){
|
rlm@46
|
27650 this.el.removeAllListeners();
|
rlm@46
|
27651 this.el.remove();
|
rlm@46
|
27652 }
|
rlm@46
|
27653 this.purgeListeners();
|
rlm@46
|
27654 },
|
rlm@46
|
27655
|
rlm@46
|
27656
|
rlm@46
|
27657 isValid : function(){
|
rlm@46
|
27658 var valid = true;
|
rlm@46
|
27659 this.items.each(function(f){
|
rlm@46
|
27660 if(!f.validate()){
|
rlm@46
|
27661 valid = false;
|
rlm@46
|
27662 }
|
rlm@46
|
27663 });
|
rlm@46
|
27664 return valid;
|
rlm@46
|
27665 },
|
rlm@46
|
27666
|
rlm@46
|
27667
|
rlm@46
|
27668 isDirty : function(){
|
rlm@46
|
27669 var dirty = false;
|
rlm@46
|
27670 this.items.each(function(f){
|
rlm@46
|
27671 if(f.isDirty()){
|
rlm@46
|
27672 dirty = true;
|
rlm@46
|
27673 return false;
|
rlm@46
|
27674 }
|
rlm@46
|
27675 });
|
rlm@46
|
27676 return dirty;
|
rlm@46
|
27677 },
|
rlm@46
|
27678
|
rlm@46
|
27679
|
rlm@46
|
27680 doAction : function(action, options){
|
rlm@46
|
27681 if(typeof action == 'string'){
|
rlm@46
|
27682 action = new Ext.form.Action.ACTION_TYPES[action](this, options);
|
rlm@46
|
27683 }
|
rlm@46
|
27684 if(this.fireEvent('beforeaction', this, action) !== false){
|
rlm@46
|
27685 this.beforeAction(action);
|
rlm@46
|
27686 action.run.defer(100, action);
|
rlm@46
|
27687 }
|
rlm@46
|
27688 return this;
|
rlm@46
|
27689 },
|
rlm@46
|
27690
|
rlm@46
|
27691
|
rlm@46
|
27692 submit : function(options){
|
rlm@46
|
27693 if(this.standardSubmit){
|
rlm@46
|
27694 var v = this.isValid();
|
rlm@46
|
27695 if(v){
|
rlm@46
|
27696 this.el.dom.submit();
|
rlm@46
|
27697 }
|
rlm@46
|
27698 return v;
|
rlm@46
|
27699 }
|
rlm@46
|
27700 this.doAction('submit', options);
|
rlm@46
|
27701 return this;
|
rlm@46
|
27702 },
|
rlm@46
|
27703
|
rlm@46
|
27704
|
rlm@46
|
27705 load : function(options){
|
rlm@46
|
27706 this.doAction('load', options);
|
rlm@46
|
27707 return this;
|
rlm@46
|
27708 },
|
rlm@46
|
27709
|
rlm@46
|
27710
|
rlm@46
|
27711 updateRecord : function(record){
|
rlm@46
|
27712 record.beginEdit();
|
rlm@46
|
27713 var fs = record.fields;
|
rlm@46
|
27714 fs.each(function(f){
|
rlm@46
|
27715 var field = this.findField(f.name);
|
rlm@46
|
27716 if(field){
|
rlm@46
|
27717 record.set(f.name, field.getValue());
|
rlm@46
|
27718 }
|
rlm@46
|
27719 }, this);
|
rlm@46
|
27720 record.endEdit();
|
rlm@46
|
27721 return this;
|
rlm@46
|
27722 },
|
rlm@46
|
27723
|
rlm@46
|
27724
|
rlm@46
|
27725 loadRecord : function(record){
|
rlm@46
|
27726 this.setValues(record.data);
|
rlm@46
|
27727 return this;
|
rlm@46
|
27728 },
|
rlm@46
|
27729
|
rlm@46
|
27730 beforeAction : function(action){
|
rlm@46
|
27731 var o = action.options;
|
rlm@46
|
27732 if(o.waitMsg){
|
rlm@46
|
27733 if(this.waitMsgTarget === true){
|
rlm@46
|
27734 this.el.mask(o.waitMsg, 'x-mask-loading');
|
rlm@46
|
27735 }else if(this.waitMsgTarget){
|
rlm@46
|
27736 this.waitMsgTarget = Ext.get(this.waitMsgTarget);
|
rlm@46
|
27737 this.waitMsgTarget.mask(o.waitMsg, 'x-mask-loading');
|
rlm@46
|
27738 }else{
|
rlm@46
|
27739 Ext.MessageBox.wait(o.waitMsg, o.waitTitle || this.waitTitle || 'Please Wait...');
|
rlm@46
|
27740 }
|
rlm@46
|
27741 }
|
rlm@46
|
27742 },
|
rlm@46
|
27743
|
rlm@46
|
27744 afterAction : function(action, success){
|
rlm@46
|
27745 this.activeAction = null;
|
rlm@46
|
27746 var o = action.options;
|
rlm@46
|
27747 if(o.waitMsg){
|
rlm@46
|
27748 if(this.waitMsgTarget === true){
|
rlm@46
|
27749 this.el.unmask();
|
rlm@46
|
27750 }else if(this.waitMsgTarget){
|
rlm@46
|
27751 this.waitMsgTarget.unmask();
|
rlm@46
|
27752 }else{
|
rlm@46
|
27753 Ext.MessageBox.updateProgress(1);
|
rlm@46
|
27754 Ext.MessageBox.hide();
|
rlm@46
|
27755 }
|
rlm@46
|
27756 }
|
rlm@46
|
27757 if(success){
|
rlm@46
|
27758 if(o.reset){
|
rlm@46
|
27759 this.reset();
|
rlm@46
|
27760 }
|
rlm@46
|
27761 Ext.callback(o.success, o.scope, [this, action]);
|
rlm@46
|
27762 this.fireEvent('actioncomplete', this, action);
|
rlm@46
|
27763 }else{
|
rlm@46
|
27764 Ext.callback(o.failure, o.scope, [this, action]);
|
rlm@46
|
27765 this.fireEvent('actionfailed', this, action);
|
rlm@46
|
27766 }
|
rlm@46
|
27767 },
|
rlm@46
|
27768
|
rlm@46
|
27769
|
rlm@46
|
27770 findField : function(id){
|
rlm@46
|
27771 var field = this.items.get(id);
|
rlm@46
|
27772 if(!field){
|
rlm@46
|
27773 this.items.each(function(f){
|
rlm@46
|
27774 if(f.isFormField && (f.dataIndex == id || f.id == id || f.getName() == id)){
|
rlm@46
|
27775 field = f;
|
rlm@46
|
27776 return false;
|
rlm@46
|
27777 }
|
rlm@46
|
27778 });
|
rlm@46
|
27779 }
|
rlm@46
|
27780 return field || null;
|
rlm@46
|
27781 },
|
rlm@46
|
27782
|
rlm@46
|
27783
|
rlm@46
|
27784
|
rlm@46
|
27785 markInvalid : function(errors){
|
rlm@46
|
27786 if(Ext.isArray(errors)){
|
rlm@46
|
27787 for(var i = 0, len = errors.length; i < len; i++){
|
rlm@46
|
27788 var fieldError = errors[i];
|
rlm@46
|
27789 var f = this.findField(fieldError.id);
|
rlm@46
|
27790 if(f){
|
rlm@46
|
27791 f.markInvalid(fieldError.msg);
|
rlm@46
|
27792 }
|
rlm@46
|
27793 }
|
rlm@46
|
27794 }else{
|
rlm@46
|
27795 var field, id;
|
rlm@46
|
27796 for(id in errors){
|
rlm@46
|
27797 if(typeof errors[id] != 'function' && (field = this.findField(id))){
|
rlm@46
|
27798 field.markInvalid(errors[id]);
|
rlm@46
|
27799 }
|
rlm@46
|
27800 }
|
rlm@46
|
27801 }
|
rlm@46
|
27802 return this;
|
rlm@46
|
27803 },
|
rlm@46
|
27804
|
rlm@46
|
27805
|
rlm@46
|
27806 setValues : function(values){
|
rlm@46
|
27807 if(Ext.isArray(values)){ for(var i = 0, len = values.length; i < len; i++){
|
rlm@46
|
27808 var v = values[i];
|
rlm@46
|
27809 var f = this.findField(v.id);
|
rlm@46
|
27810 if(f){
|
rlm@46
|
27811 f.setValue(v.value);
|
rlm@46
|
27812 if(this.trackResetOnLoad){
|
rlm@46
|
27813 f.originalValue = f.getValue();
|
rlm@46
|
27814 }
|
rlm@46
|
27815 }
|
rlm@46
|
27816 }
|
rlm@46
|
27817 }else{ var field, id;
|
rlm@46
|
27818 for(id in values){
|
rlm@46
|
27819 if(typeof values[id] != 'function' && (field = this.findField(id))){
|
rlm@46
|
27820 field.setValue(values[id]);
|
rlm@46
|
27821 if(this.trackResetOnLoad){
|
rlm@46
|
27822 field.originalValue = field.getValue();
|
rlm@46
|
27823 }
|
rlm@46
|
27824 }
|
rlm@46
|
27825 }
|
rlm@46
|
27826 }
|
rlm@46
|
27827 return this;
|
rlm@46
|
27828 },
|
rlm@46
|
27829
|
rlm@46
|
27830
|
rlm@46
|
27831 getValues : function(asString){
|
rlm@46
|
27832 var fs = Ext.lib.Ajax.serializeForm(this.el.dom);
|
rlm@46
|
27833 if(asString === true){
|
rlm@46
|
27834 return fs;
|
rlm@46
|
27835 }
|
rlm@46
|
27836 return Ext.urlDecode(fs);
|
rlm@46
|
27837 },
|
rlm@46
|
27838
|
rlm@46
|
27839
|
rlm@46
|
27840 clearInvalid : function(){
|
rlm@46
|
27841 this.items.each(function(f){
|
rlm@46
|
27842 f.clearInvalid();
|
rlm@46
|
27843 });
|
rlm@46
|
27844 return this;
|
rlm@46
|
27845 },
|
rlm@46
|
27846
|
rlm@46
|
27847
|
rlm@46
|
27848 reset : function(){
|
rlm@46
|
27849 this.items.each(function(f){
|
rlm@46
|
27850 f.reset();
|
rlm@46
|
27851 });
|
rlm@46
|
27852 return this;
|
rlm@46
|
27853 },
|
rlm@46
|
27854
|
rlm@46
|
27855
|
rlm@46
|
27856 add : function(){
|
rlm@46
|
27857 this.items.addAll(Array.prototype.slice.call(arguments, 0));
|
rlm@46
|
27858 return this;
|
rlm@46
|
27859 },
|
rlm@46
|
27860
|
rlm@46
|
27861
|
rlm@46
|
27862
|
rlm@46
|
27863 remove : function(field){
|
rlm@46
|
27864 this.items.remove(field);
|
rlm@46
|
27865 return this;
|
rlm@46
|
27866 },
|
rlm@46
|
27867
|
rlm@46
|
27868
|
rlm@46
|
27869 render : function(){
|
rlm@46
|
27870 this.items.each(function(f){
|
rlm@46
|
27871 if(f.isFormField && !f.rendered && document.getElementById(f.id)){ f.applyToMarkup(f.id);
|
rlm@46
|
27872 }
|
rlm@46
|
27873 });
|
rlm@46
|
27874 return this;
|
rlm@46
|
27875 },
|
rlm@46
|
27876
|
rlm@46
|
27877
|
rlm@46
|
27878 applyToFields : function(o){
|
rlm@46
|
27879 this.items.each(function(f){
|
rlm@46
|
27880 Ext.apply(f, o);
|
rlm@46
|
27881 });
|
rlm@46
|
27882 return this;
|
rlm@46
|
27883 },
|
rlm@46
|
27884
|
rlm@46
|
27885
|
rlm@46
|
27886 applyIfToFields : function(o){
|
rlm@46
|
27887 this.items.each(function(f){
|
rlm@46
|
27888 Ext.applyIf(f, o);
|
rlm@46
|
27889 });
|
rlm@46
|
27890 return this;
|
rlm@46
|
27891 }
|
rlm@46
|
27892 });
|
rlm@46
|
27893
|
rlm@46
|
27894 Ext.BasicForm = Ext.form.BasicForm;
|
rlm@46
|
27895
|
rlm@46
|
27896 Ext.FormPanel = Ext.extend(Ext.Panel, {
|
rlm@46
|
27897
|
rlm@46
|
27898
|
rlm@46
|
27899
|
rlm@46
|
27900
|
rlm@46
|
27901 buttonAlign:'center',
|
rlm@46
|
27902
|
rlm@46
|
27903
|
rlm@46
|
27904 minButtonWidth:75,
|
rlm@46
|
27905
|
rlm@46
|
27906
|
rlm@46
|
27907 labelAlign:'left',
|
rlm@46
|
27908
|
rlm@46
|
27909
|
rlm@46
|
27910 monitorValid : false,
|
rlm@46
|
27911
|
rlm@46
|
27912
|
rlm@46
|
27913 monitorPoll : 200,
|
rlm@46
|
27914
|
rlm@46
|
27915
|
rlm@46
|
27916 layout: 'form',
|
rlm@46
|
27917
|
rlm@46
|
27918 initComponent :function(){
|
rlm@46
|
27919 this.form = this.createForm();
|
rlm@46
|
27920
|
rlm@46
|
27921 Ext.FormPanel.superclass.initComponent.call(this);
|
rlm@46
|
27922
|
rlm@46
|
27923 this.addEvents(
|
rlm@46
|
27924
|
rlm@46
|
27925 'clientvalidation'
|
rlm@46
|
27926 );
|
rlm@46
|
27927
|
rlm@46
|
27928 this.relayEvents(this.form, ['beforeaction', 'actionfailed', 'actioncomplete']);
|
rlm@46
|
27929 },
|
rlm@46
|
27930
|
rlm@46
|
27931 createForm: function(){
|
rlm@46
|
27932 delete this.initialConfig.listeners;
|
rlm@46
|
27933 return new Ext.form.BasicForm(null, this.initialConfig);
|
rlm@46
|
27934 },
|
rlm@46
|
27935
|
rlm@46
|
27936 initFields : function(){
|
rlm@46
|
27937 var f = this.form;
|
rlm@46
|
27938 var formPanel = this;
|
rlm@46
|
27939 var fn = function(c){
|
rlm@46
|
27940 if(c.doLayout && c != formPanel){
|
rlm@46
|
27941 Ext.applyIf(c, {
|
rlm@46
|
27942 labelAlign: c.ownerCt.labelAlign,
|
rlm@46
|
27943 labelWidth: c.ownerCt.labelWidth,
|
rlm@46
|
27944 itemCls: c.ownerCt.itemCls
|
rlm@46
|
27945 });
|
rlm@46
|
27946 if(c.items){
|
rlm@46
|
27947 c.items.each(fn);
|
rlm@46
|
27948 }
|
rlm@46
|
27949 }else if(c.isFormField){
|
rlm@46
|
27950 f.add(c);
|
rlm@46
|
27951 }
|
rlm@46
|
27952 }
|
rlm@46
|
27953 this.items.each(fn);
|
rlm@46
|
27954 },
|
rlm@46
|
27955
|
rlm@46
|
27956 getLayoutTarget : function(){
|
rlm@46
|
27957 return this.form.el;
|
rlm@46
|
27958 },
|
rlm@46
|
27959
|
rlm@46
|
27960
|
rlm@46
|
27961 getForm : function(){
|
rlm@46
|
27962 return this.form;
|
rlm@46
|
27963 },
|
rlm@46
|
27964
|
rlm@46
|
27965 onRender : function(ct, position){
|
rlm@46
|
27966 this.initFields();
|
rlm@46
|
27967
|
rlm@46
|
27968 Ext.FormPanel.superclass.onRender.call(this, ct, position);
|
rlm@46
|
27969 var o = {
|
rlm@46
|
27970 tag: 'form',
|
rlm@46
|
27971 method : this.method || 'POST',
|
rlm@46
|
27972 id : this.formId || Ext.id()
|
rlm@46
|
27973 };
|
rlm@46
|
27974 if(this.fileUpload) {
|
rlm@46
|
27975 o.enctype = 'multipart/form-data';
|
rlm@46
|
27976 }
|
rlm@46
|
27977 this.form.initEl(this.body.createChild(o));
|
rlm@46
|
27978 },
|
rlm@46
|
27979
|
rlm@46
|
27980 beforeDestroy: function(){
|
rlm@46
|
27981 Ext.FormPanel.superclass.beforeDestroy.call(this);
|
rlm@46
|
27982 Ext.destroy(this.form);
|
rlm@46
|
27983 },
|
rlm@46
|
27984
|
rlm@46
|
27985 initEvents : function(){
|
rlm@46
|
27986 Ext.FormPanel.superclass.initEvents.call(this);
|
rlm@46
|
27987 this.items.on('remove', this.onRemove, this);
|
rlm@46
|
27988 this.items.on('add', this.onAdd, this);
|
rlm@46
|
27989 if(this.monitorValid){ this.startMonitoring();
|
rlm@46
|
27990 }
|
rlm@46
|
27991 },
|
rlm@46
|
27992
|
rlm@46
|
27993 onAdd : function(ct, c) {
|
rlm@46
|
27994 if (c.isFormField) {
|
rlm@46
|
27995 this.form.add(c);
|
rlm@46
|
27996 }
|
rlm@46
|
27997 },
|
rlm@46
|
27998
|
rlm@46
|
27999 onRemove : function(c) {
|
rlm@46
|
28000 if (c.isFormField) {
|
rlm@46
|
28001 Ext.destroy(c.container.up('.x-form-item'));
|
rlm@46
|
28002 this.form.remove(c);
|
rlm@46
|
28003 }
|
rlm@46
|
28004 },
|
rlm@46
|
28005
|
rlm@46
|
28006
|
rlm@46
|
28007 startMonitoring : function(){
|
rlm@46
|
28008 if(!this.bound){
|
rlm@46
|
28009 this.bound = true;
|
rlm@46
|
28010 Ext.TaskMgr.start({
|
rlm@46
|
28011 run : this.bindHandler,
|
rlm@46
|
28012 interval : this.monitorPoll || 200,
|
rlm@46
|
28013 scope: this
|
rlm@46
|
28014 });
|
rlm@46
|
28015 }
|
rlm@46
|
28016 },
|
rlm@46
|
28017
|
rlm@46
|
28018
|
rlm@46
|
28019 stopMonitoring : function(){
|
rlm@46
|
28020 this.bound = false;
|
rlm@46
|
28021 },
|
rlm@46
|
28022
|
rlm@46
|
28023
|
rlm@46
|
28024 load : function(){
|
rlm@46
|
28025 this.form.load.apply(this.form, arguments);
|
rlm@46
|
28026 },
|
rlm@46
|
28027
|
rlm@46
|
28028 onDisable : function(){
|
rlm@46
|
28029 Ext.FormPanel.superclass.onDisable.call(this);
|
rlm@46
|
28030 if(this.form){
|
rlm@46
|
28031 this.form.items.each(function(){
|
rlm@46
|
28032 this.disable();
|
rlm@46
|
28033 });
|
rlm@46
|
28034 }
|
rlm@46
|
28035 },
|
rlm@46
|
28036
|
rlm@46
|
28037 onEnable : function(){
|
rlm@46
|
28038 Ext.FormPanel.superclass.onEnable.call(this);
|
rlm@46
|
28039 if(this.form){
|
rlm@46
|
28040 this.form.items.each(function(){
|
rlm@46
|
28041 this.enable();
|
rlm@46
|
28042 });
|
rlm@46
|
28043 }
|
rlm@46
|
28044 },
|
rlm@46
|
28045
|
rlm@46
|
28046 bindHandler : function(){
|
rlm@46
|
28047 if(!this.bound){
|
rlm@46
|
28048 return false; }
|
rlm@46
|
28049 var valid = true;
|
rlm@46
|
28050 this.form.items.each(function(f){
|
rlm@46
|
28051 if(!f.isValid(true)){
|
rlm@46
|
28052 valid = false;
|
rlm@46
|
28053 return false;
|
rlm@46
|
28054 }
|
rlm@46
|
28055 });
|
rlm@46
|
28056 if(this.buttons){
|
rlm@46
|
28057 for(var i = 0, len = this.buttons.length; i < len; i++){
|
rlm@46
|
28058 var btn = this.buttons[i];
|
rlm@46
|
28059 if(btn.formBind === true && btn.disabled === valid){
|
rlm@46
|
28060 btn.setDisabled(!valid);
|
rlm@46
|
28061 }
|
rlm@46
|
28062 }
|
rlm@46
|
28063 }
|
rlm@46
|
28064 this.fireEvent('clientvalidation', this, valid);
|
rlm@46
|
28065 }
|
rlm@46
|
28066 });
|
rlm@46
|
28067 Ext.reg('form', Ext.FormPanel);
|
rlm@46
|
28068
|
rlm@46
|
28069 Ext.form.FormPanel = Ext.FormPanel;
|
rlm@46
|
28070
|
rlm@46
|
28071
|
rlm@46
|
28072
|
rlm@46
|
28073 Ext.form.FieldSet = Ext.extend(Ext.Panel, {
|
rlm@46
|
28074
|
rlm@46
|
28075
|
rlm@46
|
28076
|
rlm@46
|
28077
|
rlm@46
|
28078
|
rlm@46
|
28079 baseCls:'x-fieldset',
|
rlm@46
|
28080
|
rlm@46
|
28081 layout: 'form',
|
rlm@46
|
28082
|
rlm@46
|
28083
|
rlm@46
|
28084 onRender : function(ct, position){
|
rlm@46
|
28085 if(!this.el){
|
rlm@46
|
28086 this.el = document.createElement('fieldset');
|
rlm@46
|
28087 this.el.id = this.id;
|
rlm@46
|
28088 if (this.title || this.header || this.checkboxToggle) {
|
rlm@46
|
28089 this.el.appendChild(document.createElement('legend')).className = 'x-fieldset-header';
|
rlm@46
|
28090 }
|
rlm@46
|
28091 }
|
rlm@46
|
28092
|
rlm@46
|
28093 Ext.form.FieldSet.superclass.onRender.call(this, ct, position);
|
rlm@46
|
28094
|
rlm@46
|
28095 if(this.checkboxToggle){
|
rlm@46
|
28096 var o = typeof this.checkboxToggle == 'object' ?
|
rlm@46
|
28097 this.checkboxToggle :
|
rlm@46
|
28098 {tag: 'input', type: 'checkbox', name: this.checkboxName || this.id+'-checkbox'};
|
rlm@46
|
28099 this.checkbox = this.header.insertFirst(o);
|
rlm@46
|
28100 this.checkbox.dom.checked = !this.collapsed;
|
rlm@46
|
28101 this.checkbox.on('click', this.onCheckClick, this);
|
rlm@46
|
28102 }
|
rlm@46
|
28103 },
|
rlm@46
|
28104
|
rlm@46
|
28105
|
rlm@46
|
28106 onCollapse : function(doAnim, animArg){
|
rlm@46
|
28107 if(this.checkbox){
|
rlm@46
|
28108 this.checkbox.dom.checked = false;
|
rlm@46
|
28109 }
|
rlm@46
|
28110 this.afterCollapse();
|
rlm@46
|
28111
|
rlm@46
|
28112 },
|
rlm@46
|
28113
|
rlm@46
|
28114
|
rlm@46
|
28115 onExpand : function(doAnim, animArg){
|
rlm@46
|
28116 if(this.checkbox){
|
rlm@46
|
28117 this.checkbox.dom.checked = true;
|
rlm@46
|
28118 }
|
rlm@46
|
28119 this.afterExpand();
|
rlm@46
|
28120 },
|
rlm@46
|
28121
|
rlm@46
|
28122
|
rlm@46
|
28123 onCheckClick : function(){
|
rlm@46
|
28124 this[this.checkbox.dom.checked ? 'expand' : 'collapse']();
|
rlm@46
|
28125 }
|
rlm@46
|
28126
|
rlm@46
|
28127
|
rlm@46
|
28128
|
rlm@46
|
28129
|
rlm@46
|
28130
|
rlm@46
|
28131
|
rlm@46
|
28132
|
rlm@46
|
28133
|
rlm@46
|
28134
|
rlm@46
|
28135
|
rlm@46
|
28136
|
rlm@46
|
28137
|
rlm@46
|
28138
|
rlm@46
|
28139
|
rlm@46
|
28140
|
rlm@46
|
28141
|
rlm@46
|
28142
|
rlm@46
|
28143
|
rlm@46
|
28144
|
rlm@46
|
28145
|
rlm@46
|
28146
|
rlm@46
|
28147
|
rlm@46
|
28148
|
rlm@46
|
28149
|
rlm@46
|
28150
|
rlm@46
|
28151
|
rlm@46
|
28152
|
rlm@46
|
28153
|
rlm@46
|
28154
|
rlm@46
|
28155
|
rlm@46
|
28156
|
rlm@46
|
28157
|
rlm@46
|
28158
|
rlm@46
|
28159
|
rlm@46
|
28160
|
rlm@46
|
28161
|
rlm@46
|
28162
|
rlm@46
|
28163
|
rlm@46
|
28164 });
|
rlm@46
|
28165 Ext.reg('fieldset', Ext.form.FieldSet);
|
rlm@46
|
28166
|
rlm@46
|
28167
|
rlm@46
|
28168
|
rlm@46
|
28169
|
rlm@46
|
28170 Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, {
|
rlm@46
|
28171
|
rlm@46
|
28172 enableFormat : true,
|
rlm@46
|
28173
|
rlm@46
|
28174 enableFontSize : true,
|
rlm@46
|
28175
|
rlm@46
|
28176 enableColors : true,
|
rlm@46
|
28177
|
rlm@46
|
28178 enableAlignments : true,
|
rlm@46
|
28179
|
rlm@46
|
28180 enableLists : true,
|
rlm@46
|
28181
|
rlm@46
|
28182 enableSourceEdit : true,
|
rlm@46
|
28183
|
rlm@46
|
28184 enableLinks : true,
|
rlm@46
|
28185
|
rlm@46
|
28186 enableFont : true,
|
rlm@46
|
28187
|
rlm@46
|
28188 createLinkText : 'Please enter the URL for the link:',
|
rlm@46
|
28189
|
rlm@46
|
28190 defaultLinkValue : 'http:/'+'/',
|
rlm@46
|
28191
|
rlm@46
|
28192 fontFamilies : [
|
rlm@46
|
28193 'Arial',
|
rlm@46
|
28194 'Courier New',
|
rlm@46
|
28195 'Tahoma',
|
rlm@46
|
28196 'Times New Roman',
|
rlm@46
|
28197 'Verdana'
|
rlm@46
|
28198 ],
|
rlm@46
|
28199 defaultFont: 'tahoma',
|
rlm@46
|
28200
|
rlm@46
|
28201
|
rlm@46
|
28202 validationEvent : false,
|
rlm@46
|
28203 deferHeight: true,
|
rlm@46
|
28204 initialized : false,
|
rlm@46
|
28205 activated : false,
|
rlm@46
|
28206 sourceEditMode : false,
|
rlm@46
|
28207 onFocus : Ext.emptyFn,
|
rlm@46
|
28208 iframePad:3,
|
rlm@46
|
28209 hideMode:'offsets',
|
rlm@46
|
28210 defaultAutoCreate : {
|
rlm@46
|
28211 tag: "textarea",
|
rlm@46
|
28212 style:"width:500px;height:300px;",
|
rlm@46
|
28213 autocomplete: "off"
|
rlm@46
|
28214 },
|
rlm@46
|
28215
|
rlm@46
|
28216
|
rlm@46
|
28217 initComponent : function(){
|
rlm@46
|
28218 this.addEvents(
|
rlm@46
|
28219
|
rlm@46
|
28220 'initialize',
|
rlm@46
|
28221
|
rlm@46
|
28222 'activate',
|
rlm@46
|
28223
|
rlm@46
|
28224 'beforesync',
|
rlm@46
|
28225
|
rlm@46
|
28226 'beforepush',
|
rlm@46
|
28227
|
rlm@46
|
28228 'sync',
|
rlm@46
|
28229
|
rlm@46
|
28230 'push',
|
rlm@46
|
28231
|
rlm@46
|
28232 'editmodechange'
|
rlm@46
|
28233 )
|
rlm@46
|
28234 },
|
rlm@46
|
28235
|
rlm@46
|
28236
|
rlm@46
|
28237 createFontOptions : function(){
|
rlm@46
|
28238 var buf = [], fs = this.fontFamilies, ff, lc;
|
rlm@46
|
28239 for(var i = 0, len = fs.length; i< len; i++){
|
rlm@46
|
28240 ff = fs[i];
|
rlm@46
|
28241 lc = ff.toLowerCase();
|
rlm@46
|
28242 buf.push(
|
rlm@46
|
28243 '<option value="',lc,'" style="font-family:',ff,';"',
|
rlm@46
|
28244 (this.defaultFont == lc ? ' selected="true">' : '>'),
|
rlm@46
|
28245 ff,
|
rlm@46
|
28246 '</option>'
|
rlm@46
|
28247 );
|
rlm@46
|
28248 }
|
rlm@46
|
28249 return buf.join('');
|
rlm@46
|
28250 },
|
rlm@46
|
28251
|
rlm@46
|
28252
|
rlm@46
|
28253 createToolbar : function(editor){
|
rlm@46
|
28254
|
rlm@46
|
28255 var tipsEnabled = Ext.QuickTips && Ext.QuickTips.isEnabled();
|
rlm@46
|
28256
|
rlm@46
|
28257 function btn(id, toggle, handler){
|
rlm@46
|
28258 return {
|
rlm@46
|
28259 itemId : id,
|
rlm@46
|
28260 cls : 'x-btn-icon x-edit-'+id,
|
rlm@46
|
28261 enableToggle:toggle !== false,
|
rlm@46
|
28262 scope: editor,
|
rlm@46
|
28263 handler:handler||editor.relayBtnCmd,
|
rlm@46
|
28264 clickEvent:'mousedown',
|
rlm@46
|
28265 tooltip: tipsEnabled ? editor.buttonTips[id] || undefined : undefined,
|
rlm@46
|
28266 tabIndex:-1
|
rlm@46
|
28267 };
|
rlm@46
|
28268 }
|
rlm@46
|
28269
|
rlm@46
|
28270
|
rlm@46
|
28271 var tb = new Ext.Toolbar({
|
rlm@46
|
28272 renderTo:this.wrap.dom.firstChild
|
rlm@46
|
28273 });
|
rlm@46
|
28274
|
rlm@46
|
28275
|
rlm@46
|
28276 tb.el.on('click', function(e){
|
rlm@46
|
28277 e.preventDefault();
|
rlm@46
|
28278 });
|
rlm@46
|
28279
|
rlm@46
|
28280 if(this.enableFont && !Ext.isSafari){
|
rlm@46
|
28281 this.fontSelect = tb.el.createChild({
|
rlm@46
|
28282 tag:'select',
|
rlm@46
|
28283 cls:'x-font-select',
|
rlm@46
|
28284 html: this.createFontOptions()
|
rlm@46
|
28285 });
|
rlm@46
|
28286 this.fontSelect.on('change', function(){
|
rlm@46
|
28287 var font = this.fontSelect.dom.value;
|
rlm@46
|
28288 this.relayCmd('fontname', font);
|
rlm@46
|
28289 this.deferFocus();
|
rlm@46
|
28290 }, this);
|
rlm@46
|
28291 tb.add(
|
rlm@46
|
28292 this.fontSelect.dom,
|
rlm@46
|
28293 '-'
|
rlm@46
|
28294 );
|
rlm@46
|
28295 };
|
rlm@46
|
28296
|
rlm@46
|
28297 if(this.enableFormat){
|
rlm@46
|
28298 tb.add(
|
rlm@46
|
28299 btn('bold'),
|
rlm@46
|
28300 btn('italic'),
|
rlm@46
|
28301 btn('underline')
|
rlm@46
|
28302 );
|
rlm@46
|
28303 };
|
rlm@46
|
28304
|
rlm@46
|
28305 if(this.enableFontSize){
|
rlm@46
|
28306 tb.add(
|
rlm@46
|
28307 '-',
|
rlm@46
|
28308 btn('increasefontsize', false, this.adjustFont),
|
rlm@46
|
28309 btn('decreasefontsize', false, this.adjustFont)
|
rlm@46
|
28310 );
|
rlm@46
|
28311 };
|
rlm@46
|
28312
|
rlm@46
|
28313 if(this.enableColors){
|
rlm@46
|
28314 tb.add(
|
rlm@46
|
28315 '-', {
|
rlm@46
|
28316 itemId:'forecolor',
|
rlm@46
|
28317 cls:'x-btn-icon x-edit-forecolor',
|
rlm@46
|
28318 clickEvent:'mousedown',
|
rlm@46
|
28319 tooltip: tipsEnabled ? editor.buttonTips['forecolor'] || undefined : undefined,
|
rlm@46
|
28320 tabIndex:-1,
|
rlm@46
|
28321 menu : new Ext.menu.ColorMenu({
|
rlm@46
|
28322 allowReselect: true,
|
rlm@46
|
28323 focus: Ext.emptyFn,
|
rlm@46
|
28324 value:'000000',
|
rlm@46
|
28325 plain:true,
|
rlm@46
|
28326 selectHandler: function(cp, color){
|
rlm@46
|
28327 this.execCmd('forecolor', Ext.isSafari || Ext.isIE ? '#'+color : color);
|
rlm@46
|
28328 this.deferFocus();
|
rlm@46
|
28329 },
|
rlm@46
|
28330 scope: this,
|
rlm@46
|
28331 clickEvent:'mousedown'
|
rlm@46
|
28332 })
|
rlm@46
|
28333 }, {
|
rlm@46
|
28334 itemId:'backcolor',
|
rlm@46
|
28335 cls:'x-btn-icon x-edit-backcolor',
|
rlm@46
|
28336 clickEvent:'mousedown',
|
rlm@46
|
28337 tooltip: tipsEnabled ? editor.buttonTips['backcolor'] || undefined : undefined,
|
rlm@46
|
28338 tabIndex:-1,
|
rlm@46
|
28339 menu : new Ext.menu.ColorMenu({
|
rlm@46
|
28340 focus: Ext.emptyFn,
|
rlm@46
|
28341 value:'FFFFFF',
|
rlm@46
|
28342 plain:true,
|
rlm@46
|
28343 allowReselect: true,
|
rlm@46
|
28344 selectHandler: function(cp, color){
|
rlm@46
|
28345 if(Ext.isGecko){
|
rlm@46
|
28346 this.execCmd('useCSS', false);
|
rlm@46
|
28347 this.execCmd('hilitecolor', color);
|
rlm@46
|
28348 this.execCmd('useCSS', true);
|
rlm@46
|
28349 this.deferFocus();
|
rlm@46
|
28350 }else{
|
rlm@46
|
28351 this.execCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isSafari || Ext.isIE ? '#'+color : color);
|
rlm@46
|
28352 this.deferFocus();
|
rlm@46
|
28353 }
|
rlm@46
|
28354 },
|
rlm@46
|
28355 scope:this,
|
rlm@46
|
28356 clickEvent:'mousedown'
|
rlm@46
|
28357 })
|
rlm@46
|
28358 }
|
rlm@46
|
28359 );
|
rlm@46
|
28360 };
|
rlm@46
|
28361
|
rlm@46
|
28362 if(this.enableAlignments){
|
rlm@46
|
28363 tb.add(
|
rlm@46
|
28364 '-',
|
rlm@46
|
28365 btn('justifyleft'),
|
rlm@46
|
28366 btn('justifycenter'),
|
rlm@46
|
28367 btn('justifyright')
|
rlm@46
|
28368 );
|
rlm@46
|
28369 };
|
rlm@46
|
28370
|
rlm@46
|
28371 if(!Ext.isSafari){
|
rlm@46
|
28372 if(this.enableLinks){
|
rlm@46
|
28373 tb.add(
|
rlm@46
|
28374 '-',
|
rlm@46
|
28375 btn('createlink', false, this.createLink)
|
rlm@46
|
28376 );
|
rlm@46
|
28377 };
|
rlm@46
|
28378
|
rlm@46
|
28379 if(this.enableLists){
|
rlm@46
|
28380 tb.add(
|
rlm@46
|
28381 '-',
|
rlm@46
|
28382 btn('insertorderedlist'),
|
rlm@46
|
28383 btn('insertunorderedlist')
|
rlm@46
|
28384 );
|
rlm@46
|
28385 }
|
rlm@46
|
28386 if(this.enableSourceEdit){
|
rlm@46
|
28387 tb.add(
|
rlm@46
|
28388 '-',
|
rlm@46
|
28389 btn('sourceedit', true, function(btn){
|
rlm@46
|
28390 this.toggleSourceEdit(btn.pressed);
|
rlm@46
|
28391 })
|
rlm@46
|
28392 );
|
rlm@46
|
28393 }
|
rlm@46
|
28394 }
|
rlm@46
|
28395
|
rlm@46
|
28396 this.tb = tb;
|
rlm@46
|
28397 },
|
rlm@46
|
28398
|
rlm@46
|
28399
|
rlm@46
|
28400 getDocMarkup : function(){
|
rlm@46
|
28401 return '<html><head><style type="text/css">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>';
|
rlm@46
|
28402 },
|
rlm@46
|
28403
|
rlm@46
|
28404
|
rlm@46
|
28405 getEditorBody : function(){
|
rlm@46
|
28406 return this.doc.body || this.doc.documentElement;
|
rlm@46
|
28407 },
|
rlm@46
|
28408
|
rlm@46
|
28409
|
rlm@46
|
28410 onRender : function(ct, position){
|
rlm@46
|
28411 Ext.form.HtmlEditor.superclass.onRender.call(this, ct, position);
|
rlm@46
|
28412 this.el.dom.style.border = '0 none';
|
rlm@46
|
28413 this.el.dom.setAttribute('tabIndex', -1);
|
rlm@46
|
28414 this.el.addClass('x-hidden');
|
rlm@46
|
28415 if(Ext.isIE){
|
rlm@46
|
28416 this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
|
rlm@46
|
28417 }
|
rlm@46
|
28418 this.wrap = this.el.wrap({
|
rlm@46
|
28419 cls:'x-html-editor-wrap', cn:{cls:'x-html-editor-tb'}
|
rlm@46
|
28420 });
|
rlm@46
|
28421
|
rlm@46
|
28422 this.createToolbar(this);
|
rlm@46
|
28423
|
rlm@46
|
28424 this.tb.items.each(function(item){
|
rlm@46
|
28425 if(item.itemId != 'sourceedit'){
|
rlm@46
|
28426 item.disable();
|
rlm@46
|
28427 }
|
rlm@46
|
28428 });
|
rlm@46
|
28429
|
rlm@46
|
28430 var iframe = document.createElement('iframe');
|
rlm@46
|
28431 iframe.name = Ext.id();
|
rlm@46
|
28432 iframe.frameBorder = 'no';
|
rlm@46
|
28433
|
rlm@46
|
28434 iframe.src=(Ext.SSL_SECURE_URL || "javascript:false");
|
rlm@46
|
28435
|
rlm@46
|
28436 this.wrap.dom.appendChild(iframe);
|
rlm@46
|
28437
|
rlm@46
|
28438 this.iframe = iframe;
|
rlm@46
|
28439
|
rlm@46
|
28440 if(Ext.isIE){
|
rlm@46
|
28441 iframe.contentWindow.document.designMode = 'on';
|
rlm@46
|
28442 this.doc = iframe.contentWindow.document;
|
rlm@46
|
28443 this.win = iframe.contentWindow;
|
rlm@46
|
28444 } else {
|
rlm@46
|
28445 this.doc = (iframe.contentDocument || window.frames[iframe.name].document);
|
rlm@46
|
28446 this.win = window.frames[iframe.name];
|
rlm@46
|
28447 this.doc.designMode = 'on';
|
rlm@46
|
28448 }
|
rlm@46
|
28449 this.doc.open();
|
rlm@46
|
28450 this.doc.write(this.getDocMarkup())
|
rlm@46
|
28451 this.doc.close();
|
rlm@46
|
28452
|
rlm@46
|
28453 var task = {
|
rlm@46
|
28454 run : function(){
|
rlm@46
|
28455 if(this.doc.body || this.doc.readyState == 'complete'){
|
rlm@46
|
28456 Ext.TaskMgr.stop(task);
|
rlm@46
|
28457 this.doc.designMode="on";
|
rlm@46
|
28458 this.initEditor.defer(10, this);
|
rlm@46
|
28459 }
|
rlm@46
|
28460 },
|
rlm@46
|
28461 interval : 10,
|
rlm@46
|
28462 duration:10000,
|
rlm@46
|
28463 scope: this
|
rlm@46
|
28464 };
|
rlm@46
|
28465 Ext.TaskMgr.start(task);
|
rlm@46
|
28466
|
rlm@46
|
28467 if(!this.width){
|
rlm@46
|
28468 this.setSize(this.el.getSize());
|
rlm@46
|
28469 }
|
rlm@46
|
28470 },
|
rlm@46
|
28471
|
rlm@46
|
28472
|
rlm@46
|
28473 onResize : function(w, h){
|
rlm@46
|
28474 Ext.form.HtmlEditor.superclass.onResize.apply(this, arguments);
|
rlm@46
|
28475 if(this.el && this.iframe){
|
rlm@46
|
28476 if(typeof w == 'number'){
|
rlm@46
|
28477 var aw = w - this.wrap.getFrameWidth('lr');
|
rlm@46
|
28478 this.el.setWidth(this.adjustWidth('textarea', aw));
|
rlm@46
|
28479 this.iframe.style.width = aw + 'px';
|
rlm@46
|
28480 }
|
rlm@46
|
28481 if(typeof h == 'number'){
|
rlm@46
|
28482 var ah = h - this.wrap.getFrameWidth('tb') - this.tb.el.getHeight();
|
rlm@46
|
28483 this.el.setHeight(this.adjustWidth('textarea', ah));
|
rlm@46
|
28484 this.iframe.style.height = ah + 'px';
|
rlm@46
|
28485 if(this.doc){
|
rlm@46
|
28486 this.getEditorBody().style.height = (ah - (this.iframePad*2)) + 'px';
|
rlm@46
|
28487 }
|
rlm@46
|
28488 }
|
rlm@46
|
28489 }
|
rlm@46
|
28490 },
|
rlm@46
|
28491
|
rlm@46
|
28492
|
rlm@46
|
28493 toggleSourceEdit : function(sourceEditMode){
|
rlm@46
|
28494 if(sourceEditMode === undefined){
|
rlm@46
|
28495 sourceEditMode = !this.sourceEditMode;
|
rlm@46
|
28496 }
|
rlm@46
|
28497 this.sourceEditMode = sourceEditMode === true;
|
rlm@46
|
28498 var btn = this.tb.items.get('sourceedit');
|
rlm@46
|
28499 if(btn.pressed !== this.sourceEditMode){
|
rlm@46
|
28500 btn.toggle(this.sourceEditMode);
|
rlm@46
|
28501 return;
|
rlm@46
|
28502 }
|
rlm@46
|
28503 if(this.sourceEditMode){
|
rlm@46
|
28504 this.tb.items.each(function(item){
|
rlm@46
|
28505 if(item.itemId != 'sourceedit'){
|
rlm@46
|
28506 item.disable();
|
rlm@46
|
28507 }
|
rlm@46
|
28508 });
|
rlm@46
|
28509 this.syncValue();
|
rlm@46
|
28510 this.iframe.className = 'x-hidden';
|
rlm@46
|
28511 this.el.removeClass('x-hidden');
|
rlm@46
|
28512 this.el.dom.removeAttribute('tabIndex');
|
rlm@46
|
28513 this.el.focus();
|
rlm@46
|
28514 }else{
|
rlm@46
|
28515 if(this.initialized){
|
rlm@46
|
28516 this.tb.items.each(function(item){
|
rlm@46
|
28517 item.enable();
|
rlm@46
|
28518 });
|
rlm@46
|
28519 }
|
rlm@46
|
28520 this.pushValue();
|
rlm@46
|
28521 this.iframe.className = '';
|
rlm@46
|
28522 this.el.addClass('x-hidden');
|
rlm@46
|
28523 this.el.dom.setAttribute('tabIndex', -1);
|
rlm@46
|
28524 this.deferFocus();
|
rlm@46
|
28525 }
|
rlm@46
|
28526 var lastSize = this.lastSize;
|
rlm@46
|
28527 if(lastSize){
|
rlm@46
|
28528 delete this.lastSize;
|
rlm@46
|
28529 this.setSize(lastSize);
|
rlm@46
|
28530 }
|
rlm@46
|
28531 this.fireEvent('editmodechange', this, this.sourceEditMode);
|
rlm@46
|
28532 },
|
rlm@46
|
28533
|
rlm@46
|
28534
|
rlm@46
|
28535 createLink : function(){
|
rlm@46
|
28536 var url = prompt(this.createLinkText, this.defaultLinkValue);
|
rlm@46
|
28537 if(url && url != 'http:/'+'/'){
|
rlm@46
|
28538 this.relayCmd('createlink', url);
|
rlm@46
|
28539 }
|
rlm@46
|
28540 },
|
rlm@46
|
28541
|
rlm@46
|
28542
|
rlm@46
|
28543 adjustSize : Ext.BoxComponent.prototype.adjustSize,
|
rlm@46
|
28544
|
rlm@46
|
28545
|
rlm@46
|
28546 getResizeEl : function(){
|
rlm@46
|
28547 return this.wrap;
|
rlm@46
|
28548 },
|
rlm@46
|
28549
|
rlm@46
|
28550
|
rlm@46
|
28551 getPositionEl : function(){
|
rlm@46
|
28552 return this.wrap;
|
rlm@46
|
28553 },
|
rlm@46
|
28554
|
rlm@46
|
28555
|
rlm@46
|
28556 initEvents : function(){
|
rlm@46
|
28557 this.originalValue = this.getValue();
|
rlm@46
|
28558 },
|
rlm@46
|
28559
|
rlm@46
|
28560
|
rlm@46
|
28561 markInvalid : Ext.emptyFn,
|
rlm@46
|
28562
|
rlm@46
|
28563
|
rlm@46
|
28564 clearInvalid : Ext.emptyFn,
|
rlm@46
|
28565
|
rlm@46
|
28566
|
rlm@46
|
28567 setValue : function(v){
|
rlm@46
|
28568 Ext.form.HtmlEditor.superclass.setValue.call(this, v);
|
rlm@46
|
28569 this.pushValue();
|
rlm@46
|
28570 },
|
rlm@46
|
28571
|
rlm@46
|
28572
|
rlm@46
|
28573 cleanHtml : function(html){
|
rlm@46
|
28574 html = String(html);
|
rlm@46
|
28575 if(html.length > 5){
|
rlm@46
|
28576 if(Ext.isSafari){
|
rlm@46
|
28577 html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');
|
rlm@46
|
28578 }
|
rlm@46
|
28579 }
|
rlm@46
|
28580 if(html == ' '){
|
rlm@46
|
28581 html = '';
|
rlm@46
|
28582 }
|
rlm@46
|
28583 return html;
|
rlm@46
|
28584 },
|
rlm@46
|
28585
|
rlm@46
|
28586
|
rlm@46
|
28587 syncValue : function(){
|
rlm@46
|
28588 if(this.initialized){
|
rlm@46
|
28589 var bd = this.getEditorBody();
|
rlm@46
|
28590 var html = bd.innerHTML;
|
rlm@46
|
28591 if(Ext.isSafari){
|
rlm@46
|
28592 var bs = bd.getAttribute('style');
|
rlm@46
|
28593 var m = bs.match(/text-align:(.*?);/i);
|
rlm@46
|
28594 if(m && m[1]){
|
rlm@46
|
28595 html = '<div style="'+m[0]+'">' + html + '</div>';
|
rlm@46
|
28596 }
|
rlm@46
|
28597 }
|
rlm@46
|
28598 html = this.cleanHtml(html);
|
rlm@46
|
28599 if(this.fireEvent('beforesync', this, html) !== false){
|
rlm@46
|
28600 this.el.dom.value = html;
|
rlm@46
|
28601 this.fireEvent('sync', this, html);
|
rlm@46
|
28602 }
|
rlm@46
|
28603 }
|
rlm@46
|
28604 },
|
rlm@46
|
28605
|
rlm@46
|
28606
|
rlm@46
|
28607 pushValue : function(){
|
rlm@46
|
28608 if(this.initialized){
|
rlm@46
|
28609 var v = this.el.dom.value;
|
rlm@46
|
28610 if(!this.activated && v.length < 1){
|
rlm@46
|
28611 v = ' ';
|
rlm@46
|
28612 }
|
rlm@46
|
28613 if(this.fireEvent('beforepush', this, v) !== false){
|
rlm@46
|
28614 this.getEditorBody().innerHTML = v;
|
rlm@46
|
28615 this.fireEvent('push', this, v);
|
rlm@46
|
28616 }
|
rlm@46
|
28617 }
|
rlm@46
|
28618 },
|
rlm@46
|
28619
|
rlm@46
|
28620
|
rlm@46
|
28621 deferFocus : function(){
|
rlm@46
|
28622 this.focus.defer(10, this);
|
rlm@46
|
28623 },
|
rlm@46
|
28624
|
rlm@46
|
28625
|
rlm@46
|
28626 focus : function(){
|
rlm@46
|
28627 if(this.win && !this.sourceEditMode){
|
rlm@46
|
28628 this.win.focus();
|
rlm@46
|
28629 }else{
|
rlm@46
|
28630 this.el.focus();
|
rlm@46
|
28631 }
|
rlm@46
|
28632 },
|
rlm@46
|
28633
|
rlm@46
|
28634
|
rlm@46
|
28635 initEditor : function(){
|
rlm@46
|
28636 var dbody = this.getEditorBody();
|
rlm@46
|
28637 var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');
|
rlm@46
|
28638 ss['background-attachment'] = 'fixed';
|
rlm@46
|
28639 dbody.bgProperties = 'fixed';
|
rlm@46
|
28640 Ext.DomHelper.applyStyles(dbody, ss);
|
rlm@46
|
28641 Ext.EventManager.on(this.doc, {
|
rlm@46
|
28642 'mousedown': this.onEditorEvent,
|
rlm@46
|
28643 'dblclick': this.onEditorEvent,
|
rlm@46
|
28644 'click': this.onEditorEvent,
|
rlm@46
|
28645 'keyup': this.onEditorEvent,
|
rlm@46
|
28646 buffer:100,
|
rlm@46
|
28647 scope: this
|
rlm@46
|
28648 });
|
rlm@46
|
28649 if(Ext.isGecko){
|
rlm@46
|
28650 Ext.EventManager.on(this.doc, 'keypress', this.applyCommand, this);
|
rlm@46
|
28651 }
|
rlm@46
|
28652 if(Ext.isIE || Ext.isSafari || Ext.isOpera){
|
rlm@46
|
28653 Ext.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
|
rlm@46
|
28654 }
|
rlm@46
|
28655 this.initialized = true;
|
rlm@46
|
28656
|
rlm@46
|
28657 this.fireEvent('initialize', this);
|
rlm@46
|
28658 this.pushValue();
|
rlm@46
|
28659 },
|
rlm@46
|
28660
|
rlm@46
|
28661
|
rlm@46
|
28662 onDestroy : function(){
|
rlm@46
|
28663 if(this.rendered){
|
rlm@46
|
28664 this.tb.items.each(function(item){
|
rlm@46
|
28665 if(item.menu){
|
rlm@46
|
28666 item.menu.removeAll();
|
rlm@46
|
28667 if(item.menu.el){
|
rlm@46
|
28668 item.menu.el.destroy();
|
rlm@46
|
28669 }
|
rlm@46
|
28670 }
|
rlm@46
|
28671 item.destroy();
|
rlm@46
|
28672 });
|
rlm@46
|
28673 this.wrap.dom.innerHTML = '';
|
rlm@46
|
28674 this.wrap.remove();
|
rlm@46
|
28675 }
|
rlm@46
|
28676 },
|
rlm@46
|
28677
|
rlm@46
|
28678
|
rlm@46
|
28679 onFirstFocus : function(){
|
rlm@46
|
28680 this.activated = true;
|
rlm@46
|
28681 this.tb.items.each(function(item){
|
rlm@46
|
28682 item.enable();
|
rlm@46
|
28683 });
|
rlm@46
|
28684 if(Ext.isGecko){
|
rlm@46
|
28685 this.win.focus();
|
rlm@46
|
28686 var s = this.win.getSelection();
|
rlm@46
|
28687 if(!s.focusNode || s.focusNode.nodeType != 3){
|
rlm@46
|
28688 var r = s.getRangeAt(0);
|
rlm@46
|
28689 r.selectNodeContents(this.getEditorBody());
|
rlm@46
|
28690 r.collapse(true);
|
rlm@46
|
28691 this.deferFocus();
|
rlm@46
|
28692 }
|
rlm@46
|
28693 try{
|
rlm@46
|
28694 this.execCmd('useCSS', true);
|
rlm@46
|
28695 this.execCmd('styleWithCSS', false);
|
rlm@46
|
28696 }catch(e){}
|
rlm@46
|
28697 }
|
rlm@46
|
28698 this.fireEvent('activate', this);
|
rlm@46
|
28699 },
|
rlm@46
|
28700
|
rlm@46
|
28701
|
rlm@46
|
28702 adjustFont: function(btn){
|
rlm@46
|
28703 var adjust = btn.itemId == 'increasefontsize' ? 1 : -1;
|
rlm@46
|
28704
|
rlm@46
|
28705 var v = parseInt(this.doc.queryCommandValue('FontSize') || 2, 10);
|
rlm@46
|
28706 if(Ext.isSafari3 || Ext.isAir){
|
rlm@46
|
28707
|
rlm@46
|
28708
|
rlm@46
|
28709 if(v <= 10){
|
rlm@46
|
28710 v = 1 + adjust;
|
rlm@46
|
28711 }else if(v <= 13){
|
rlm@46
|
28712 v = 2 + adjust;
|
rlm@46
|
28713 }else if(v <= 16){
|
rlm@46
|
28714 v = 3 + adjust;
|
rlm@46
|
28715 }else if(v <= 18){
|
rlm@46
|
28716 v = 4 + adjust;
|
rlm@46
|
28717 }else if(v <= 24){
|
rlm@46
|
28718 v = 5 + adjust;
|
rlm@46
|
28719 }else {
|
rlm@46
|
28720 v = 6 + adjust;
|
rlm@46
|
28721 }
|
rlm@46
|
28722 v = v.constrain(1, 6);
|
rlm@46
|
28723 }else{
|
rlm@46
|
28724 if(Ext.isSafari){
|
rlm@46
|
28725 adjust *= 2;
|
rlm@46
|
28726 }
|
rlm@46
|
28727 v = Math.max(1, v+adjust) + (Ext.isSafari ? 'px' : 0);
|
rlm@46
|
28728 }
|
rlm@46
|
28729 this.execCmd('FontSize', v);
|
rlm@46
|
28730 },
|
rlm@46
|
28731
|
rlm@46
|
28732
|
rlm@46
|
28733 onEditorEvent : function(e){
|
rlm@46
|
28734 this.updateToolbar();
|
rlm@46
|
28735 },
|
rlm@46
|
28736
|
rlm@46
|
28737
|
rlm@46
|
28738
|
rlm@46
|
28739 updateToolbar: function(){
|
rlm@46
|
28740
|
rlm@46
|
28741 if(!this.activated){
|
rlm@46
|
28742 this.onFirstFocus();
|
rlm@46
|
28743 return;
|
rlm@46
|
28744 }
|
rlm@46
|
28745
|
rlm@46
|
28746 var btns = this.tb.items.map, doc = this.doc;
|
rlm@46
|
28747
|
rlm@46
|
28748 if(this.enableFont && !Ext.isSafari){
|
rlm@46
|
28749 var name = (this.doc.queryCommandValue('FontName')||this.defaultFont).toLowerCase();
|
rlm@46
|
28750 if(name != this.fontSelect.dom.value){
|
rlm@46
|
28751 this.fontSelect.dom.value = name;
|
rlm@46
|
28752 }
|
rlm@46
|
28753 }
|
rlm@46
|
28754 if(this.enableFormat){
|
rlm@46
|
28755 btns.bold.toggle(doc.queryCommandState('bold'));
|
rlm@46
|
28756 btns.italic.toggle(doc.queryCommandState('italic'));
|
rlm@46
|
28757 btns.underline.toggle(doc.queryCommandState('underline'));
|
rlm@46
|
28758 }
|
rlm@46
|
28759 if(this.enableAlignments){
|
rlm@46
|
28760 btns.justifyleft.toggle(doc.queryCommandState('justifyleft'));
|
rlm@46
|
28761 btns.justifycenter.toggle(doc.queryCommandState('justifycenter'));
|
rlm@46
|
28762 btns.justifyright.toggle(doc.queryCommandState('justifyright'));
|
rlm@46
|
28763 }
|
rlm@46
|
28764 if(!Ext.isSafari && this.enableLists){
|
rlm@46
|
28765 btns.insertorderedlist.toggle(doc.queryCommandState('insertorderedlist'));
|
rlm@46
|
28766 btns.insertunorderedlist.toggle(doc.queryCommandState('insertunorderedlist'));
|
rlm@46
|
28767 }
|
rlm@46
|
28768
|
rlm@46
|
28769 Ext.menu.MenuMgr.hideAll();
|
rlm@46
|
28770
|
rlm@46
|
28771 this.syncValue();
|
rlm@46
|
28772 },
|
rlm@46
|
28773
|
rlm@46
|
28774
|
rlm@46
|
28775 relayBtnCmd : function(btn){
|
rlm@46
|
28776 this.relayCmd(btn.itemId);
|
rlm@46
|
28777 },
|
rlm@46
|
28778
|
rlm@46
|
28779
|
rlm@46
|
28780 relayCmd : function(cmd, value){
|
rlm@46
|
28781 this.win.focus();
|
rlm@46
|
28782 this.execCmd(cmd, value);
|
rlm@46
|
28783 this.updateToolbar();
|
rlm@46
|
28784 this.deferFocus();
|
rlm@46
|
28785 },
|
rlm@46
|
28786
|
rlm@46
|
28787
|
rlm@46
|
28788 execCmd : function(cmd, value){
|
rlm@46
|
28789 this.doc.execCommand(cmd, false, value === undefined ? null : value);
|
rlm@46
|
28790 this.syncValue();
|
rlm@46
|
28791 },
|
rlm@46
|
28792
|
rlm@46
|
28793
|
rlm@46
|
28794 applyCommand : function(e){
|
rlm@46
|
28795 if(e.ctrlKey){
|
rlm@46
|
28796 var c = e.getCharCode(), cmd;
|
rlm@46
|
28797 if(c > 0){
|
rlm@46
|
28798 c = String.fromCharCode(c);
|
rlm@46
|
28799 switch(c){
|
rlm@46
|
28800 case 'b':
|
rlm@46
|
28801 cmd = 'bold';
|
rlm@46
|
28802 break;
|
rlm@46
|
28803 case 'i':
|
rlm@46
|
28804 cmd = 'italic';
|
rlm@46
|
28805 break;
|
rlm@46
|
28806 case 'u':
|
rlm@46
|
28807 cmd = 'underline';
|
rlm@46
|
28808 break;
|
rlm@46
|
28809 }
|
rlm@46
|
28810 if(cmd){
|
rlm@46
|
28811 this.win.focus();
|
rlm@46
|
28812 this.execCmd(cmd);
|
rlm@46
|
28813 this.deferFocus();
|
rlm@46
|
28814 e.preventDefault();
|
rlm@46
|
28815 }
|
rlm@46
|
28816 }
|
rlm@46
|
28817 }
|
rlm@46
|
28818 },
|
rlm@46
|
28819
|
rlm@46
|
28820
|
rlm@46
|
28821 insertAtCursor : function(text){
|
rlm@46
|
28822 if(!this.activated){
|
rlm@46
|
28823 return;
|
rlm@46
|
28824 }
|
rlm@46
|
28825 if(Ext.isIE){
|
rlm@46
|
28826 this.win.focus();
|
rlm@46
|
28827 var r = this.doc.selection.createRange();
|
rlm@46
|
28828 if(r){
|
rlm@46
|
28829 r.collapse(true);
|
rlm@46
|
28830 r.pasteHTML(text);
|
rlm@46
|
28831 this.syncValue();
|
rlm@46
|
28832 this.deferFocus();
|
rlm@46
|
28833 }
|
rlm@46
|
28834 }else if(Ext.isGecko || Ext.isOpera){
|
rlm@46
|
28835 this.win.focus();
|
rlm@46
|
28836 this.execCmd('InsertHTML', text);
|
rlm@46
|
28837 this.deferFocus();
|
rlm@46
|
28838 }else if(Ext.isSafari){
|
rlm@46
|
28839 this.execCmd('InsertText', text);
|
rlm@46
|
28840 this.deferFocus();
|
rlm@46
|
28841 }
|
rlm@46
|
28842 },
|
rlm@46
|
28843
|
rlm@46
|
28844
|
rlm@46
|
28845 fixKeys : function(){
|
rlm@46
|
28846 if(Ext.isIE){
|
rlm@46
|
28847 return function(e){
|
rlm@46
|
28848 var k = e.getKey(), r;
|
rlm@46
|
28849 if(k == e.TAB){
|
rlm@46
|
28850 e.stopEvent();
|
rlm@46
|
28851 r = this.doc.selection.createRange();
|
rlm@46
|
28852 if(r){
|
rlm@46
|
28853 r.collapse(true);
|
rlm@46
|
28854 r.pasteHTML(' ');
|
rlm@46
|
28855 this.deferFocus();
|
rlm@46
|
28856 }
|
rlm@46
|
28857 }else if(k == e.ENTER){
|
rlm@46
|
28858 r = this.doc.selection.createRange();
|
rlm@46
|
28859 if(r){
|
rlm@46
|
28860 var target = r.parentElement();
|
rlm@46
|
28861 if(!target || target.tagName.toLowerCase() != 'li'){
|
rlm@46
|
28862 e.stopEvent();
|
rlm@46
|
28863 r.pasteHTML('<br />');
|
rlm@46
|
28864 r.collapse(false);
|
rlm@46
|
28865 r.select();
|
rlm@46
|
28866 }
|
rlm@46
|
28867 }
|
rlm@46
|
28868 }
|
rlm@46
|
28869 };
|
rlm@46
|
28870 }else if(Ext.isOpera){
|
rlm@46
|
28871 return function(e){
|
rlm@46
|
28872 var k = e.getKey();
|
rlm@46
|
28873 if(k == e.TAB){
|
rlm@46
|
28874 e.stopEvent();
|
rlm@46
|
28875 this.win.focus();
|
rlm@46
|
28876 this.execCmd('InsertHTML',' ');
|
rlm@46
|
28877 this.deferFocus();
|
rlm@46
|
28878 }
|
rlm@46
|
28879 };
|
rlm@46
|
28880 }else if(Ext.isSafari){
|
rlm@46
|
28881 return function(e){
|
rlm@46
|
28882 var k = e.getKey();
|
rlm@46
|
28883 if(k == e.TAB){
|
rlm@46
|
28884 e.stopEvent();
|
rlm@46
|
28885 this.execCmd('InsertText','\t');
|
rlm@46
|
28886 this.deferFocus();
|
rlm@46
|
28887 }
|
rlm@46
|
28888 };
|
rlm@46
|
28889 }
|
rlm@46
|
28890 }(),
|
rlm@46
|
28891
|
rlm@46
|
28892
|
rlm@46
|
28893 getToolbar : function(){
|
rlm@46
|
28894 return this.tb;
|
rlm@46
|
28895 },
|
rlm@46
|
28896
|
rlm@46
|
28897
|
rlm@46
|
28898 buttonTips : {
|
rlm@46
|
28899 bold : {
|
rlm@46
|
28900 title: 'Bold (Ctrl+B)',
|
rlm@46
|
28901 text: 'Make the selected text bold.',
|
rlm@46
|
28902 cls: 'x-html-editor-tip'
|
rlm@46
|
28903 },
|
rlm@46
|
28904 italic : {
|
rlm@46
|
28905 title: 'Italic (Ctrl+I)',
|
rlm@46
|
28906 text: 'Make the selected text italic.',
|
rlm@46
|
28907 cls: 'x-html-editor-tip'
|
rlm@46
|
28908 },
|
rlm@46
|
28909 underline : {
|
rlm@46
|
28910 title: 'Underline (Ctrl+U)',
|
rlm@46
|
28911 text: 'Underline the selected text.',
|
rlm@46
|
28912 cls: 'x-html-editor-tip'
|
rlm@46
|
28913 },
|
rlm@46
|
28914 increasefontsize : {
|
rlm@46
|
28915 title: 'Grow Text',
|
rlm@46
|
28916 text: 'Increase the font size.',
|
rlm@46
|
28917 cls: 'x-html-editor-tip'
|
rlm@46
|
28918 },
|
rlm@46
|
28919 decreasefontsize : {
|
rlm@46
|
28920 title: 'Shrink Text',
|
rlm@46
|
28921 text: 'Decrease the font size.',
|
rlm@46
|
28922 cls: 'x-html-editor-tip'
|
rlm@46
|
28923 },
|
rlm@46
|
28924 backcolor : {
|
rlm@46
|
28925 title: 'Text Highlight Color',
|
rlm@46
|
28926 text: 'Change the background color of the selected text.',
|
rlm@46
|
28927 cls: 'x-html-editor-tip'
|
rlm@46
|
28928 },
|
rlm@46
|
28929 forecolor : {
|
rlm@46
|
28930 title: 'Font Color',
|
rlm@46
|
28931 text: 'Change the color of the selected text.',
|
rlm@46
|
28932 cls: 'x-html-editor-tip'
|
rlm@46
|
28933 },
|
rlm@46
|
28934 justifyleft : {
|
rlm@46
|
28935 title: 'Align Text Left',
|
rlm@46
|
28936 text: 'Align text to the left.',
|
rlm@46
|
28937 cls: 'x-html-editor-tip'
|
rlm@46
|
28938 },
|
rlm@46
|
28939 justifycenter : {
|
rlm@46
|
28940 title: 'Center Text',
|
rlm@46
|
28941 text: 'Center text in the editor.',
|
rlm@46
|
28942 cls: 'x-html-editor-tip'
|
rlm@46
|
28943 },
|
rlm@46
|
28944 justifyright : {
|
rlm@46
|
28945 title: 'Align Text Right',
|
rlm@46
|
28946 text: 'Align text to the right.',
|
rlm@46
|
28947 cls: 'x-html-editor-tip'
|
rlm@46
|
28948 },
|
rlm@46
|
28949 insertunorderedlist : {
|
rlm@46
|
28950 title: 'Bullet List',
|
rlm@46
|
28951 text: 'Start a bulleted list.',
|
rlm@46
|
28952 cls: 'x-html-editor-tip'
|
rlm@46
|
28953 },
|
rlm@46
|
28954 insertorderedlist : {
|
rlm@46
|
28955 title: 'Numbered List',
|
rlm@46
|
28956 text: 'Start a numbered list.',
|
rlm@46
|
28957 cls: 'x-html-editor-tip'
|
rlm@46
|
28958 },
|
rlm@46
|
28959 createlink : {
|
rlm@46
|
28960 title: 'Hyperlink',
|
rlm@46
|
28961 text: 'Make the selected text a hyperlink.',
|
rlm@46
|
28962 cls: 'x-html-editor-tip'
|
rlm@46
|
28963 },
|
rlm@46
|
28964 sourceedit : {
|
rlm@46
|
28965 title: 'Source Edit',
|
rlm@46
|
28966 text: 'Switch to source editing mode.',
|
rlm@46
|
28967 cls: 'x-html-editor-tip'
|
rlm@46
|
28968 }
|
rlm@46
|
28969 }
|
rlm@46
|
28970
|
rlm@46
|
28971
|
rlm@46
|
28972
|
rlm@46
|
28973
|
rlm@46
|
28974
|
rlm@46
|
28975
|
rlm@46
|
28976
|
rlm@46
|
28977
|
rlm@46
|
28978
|
rlm@46
|
28979
|
rlm@46
|
28980
|
rlm@46
|
28981
|
rlm@46
|
28982
|
rlm@46
|
28983
|
rlm@46
|
28984
|
rlm@46
|
28985
|
rlm@46
|
28986
|
rlm@46
|
28987
|
rlm@46
|
28988
|
rlm@46
|
28989
|
rlm@46
|
28990
|
rlm@46
|
28991
|
rlm@46
|
28992
|
rlm@46
|
28993
|
rlm@46
|
28994
|
rlm@46
|
28995
|
rlm@46
|
28996
|
rlm@46
|
28997
|
rlm@46
|
28998
|
rlm@46
|
28999
|
rlm@46
|
29000
|
rlm@46
|
29001
|
rlm@46
|
29002
|
rlm@46
|
29003
|
rlm@46
|
29004
|
rlm@46
|
29005 });
|
rlm@46
|
29006 Ext.reg('htmleditor', Ext.form.HtmlEditor);
|
rlm@46
|
29007
|
rlm@46
|
29008 Ext.form.TimeField = Ext.extend(Ext.form.ComboBox, {
|
rlm@46
|
29009
|
rlm@46
|
29010 minValue : null,
|
rlm@46
|
29011
|
rlm@46
|
29012 maxValue : null,
|
rlm@46
|
29013
|
rlm@46
|
29014 minText : "The time in this field must be equal to or after {0}",
|
rlm@46
|
29015
|
rlm@46
|
29016 maxText : "The time in this field must be equal to or before {0}",
|
rlm@46
|
29017
|
rlm@46
|
29018 invalidText : "{0} is not a valid time",
|
rlm@46
|
29019
|
rlm@46
|
29020 format : "g:i A",
|
rlm@46
|
29021
|
rlm@46
|
29022 altFormats : "g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H",
|
rlm@46
|
29023
|
rlm@46
|
29024 increment: 15,
|
rlm@46
|
29025
|
rlm@46
|
29026
|
rlm@46
|
29027 mode: 'local',
|
rlm@46
|
29028
|
rlm@46
|
29029 triggerAction: 'all',
|
rlm@46
|
29030
|
rlm@46
|
29031 typeAhead: false,
|
rlm@46
|
29032
|
rlm@46
|
29033
|
rlm@46
|
29034 initComponent : function(){
|
rlm@46
|
29035 Ext.form.TimeField.superclass.initComponent.call(this);
|
rlm@46
|
29036
|
rlm@46
|
29037 if(typeof this.minValue == "string"){
|
rlm@46
|
29038 this.minValue = this.parseDate(this.minValue);
|
rlm@46
|
29039 }
|
rlm@46
|
29040 if(typeof this.maxValue == "string"){
|
rlm@46
|
29041 this.maxValue = this.parseDate(this.maxValue);
|
rlm@46
|
29042 }
|
rlm@46
|
29043
|
rlm@46
|
29044 if(!this.store){
|
rlm@46
|
29045 var min = this.parseDate(this.minValue);
|
rlm@46
|
29046 if(!min){
|
rlm@46
|
29047 min = new Date().clearTime();
|
rlm@46
|
29048 }
|
rlm@46
|
29049 var max = this.parseDate(this.maxValue);
|
rlm@46
|
29050 if(!max){
|
rlm@46
|
29051 max = new Date().clearTime().add('mi', (24 * 60) - 1);
|
rlm@46
|
29052 }
|
rlm@46
|
29053 var times = [];
|
rlm@46
|
29054 while(min <= max){
|
rlm@46
|
29055 times.push([min.dateFormat(this.format)]);
|
rlm@46
|
29056 min = min.add('mi', this.increment);
|
rlm@46
|
29057 }
|
rlm@46
|
29058 this.store = new Ext.data.SimpleStore({
|
rlm@46
|
29059 fields: ['text'],
|
rlm@46
|
29060 data : times
|
rlm@46
|
29061 });
|
rlm@46
|
29062 this.displayField = 'text';
|
rlm@46
|
29063 }
|
rlm@46
|
29064 },
|
rlm@46
|
29065
|
rlm@46
|
29066
|
rlm@46
|
29067 getValue : function(){
|
rlm@46
|
29068 var v = Ext.form.TimeField.superclass.getValue.call(this);
|
rlm@46
|
29069 return this.formatDate(this.parseDate(v)) || '';
|
rlm@46
|
29070 },
|
rlm@46
|
29071
|
rlm@46
|
29072
|
rlm@46
|
29073 setValue : function(value){
|
rlm@46
|
29074 Ext.form.TimeField.superclass.setValue.call(this, this.formatDate(this.parseDate(value)));
|
rlm@46
|
29075 },
|
rlm@46
|
29076
|
rlm@46
|
29077
|
rlm@46
|
29078 validateValue : Ext.form.DateField.prototype.validateValue,
|
rlm@46
|
29079 parseDate : Ext.form.DateField.prototype.parseDate,
|
rlm@46
|
29080 formatDate : Ext.form.DateField.prototype.formatDate,
|
rlm@46
|
29081
|
rlm@46
|
29082
|
rlm@46
|
29083 beforeBlur : function(){
|
rlm@46
|
29084 var v = this.parseDate(this.getRawValue());
|
rlm@46
|
29085 if(v){
|
rlm@46
|
29086 this.setValue(v.dateFormat(this.format));
|
rlm@46
|
29087 }
|
rlm@46
|
29088 }
|
rlm@46
|
29089
|
rlm@46
|
29090
|
rlm@46
|
29091
|
rlm@46
|
29092
|
rlm@46
|
29093
|
rlm@46
|
29094 });
|
rlm@46
|
29095 Ext.reg('timefield', Ext.form.TimeField);
|
rlm@46
|
29096
|
rlm@46
|
29097 Ext.form.Label = Ext.extend(Ext.BoxComponent, {
|
rlm@46
|
29098
|
rlm@46
|
29099
|
rlm@46
|
29100
|
rlm@46
|
29101 onRender : function(ct, position){
|
rlm@46
|
29102 if(!this.el){
|
rlm@46
|
29103 this.el = document.createElement('label');
|
rlm@46
|
29104 this.el.id = this.getId();
|
rlm@46
|
29105 this.el.innerHTML = this.text ? Ext.util.Format.htmlEncode(this.text) : (this.html || '');
|
rlm@46
|
29106 if(this.forId){
|
rlm@46
|
29107 this.el.setAttribute('htmlFor', this.forId);
|
rlm@46
|
29108 }
|
rlm@46
|
29109 }
|
rlm@46
|
29110 Ext.form.Label.superclass.onRender.call(this, ct, position);
|
rlm@46
|
29111 }
|
rlm@46
|
29112 });
|
rlm@46
|
29113
|
rlm@46
|
29114 Ext.reg('label', Ext.form.Label);
|
rlm@46
|
29115
|
rlm@46
|
29116 Ext.form.Action = function(form, options){
|
rlm@46
|
29117 this.form = form;
|
rlm@46
|
29118 this.options = options || {};
|
rlm@46
|
29119 };
|
rlm@46
|
29120
|
rlm@46
|
29121
|
rlm@46
|
29122 Ext.form.Action.CLIENT_INVALID = 'client';
|
rlm@46
|
29123
|
rlm@46
|
29124 Ext.form.Action.SERVER_INVALID = 'server';
|
rlm@46
|
29125
|
rlm@46
|
29126 Ext.form.Action.CONNECT_FAILURE = 'connect';
|
rlm@46
|
29127
|
rlm@46
|
29128 Ext.form.Action.LOAD_FAILURE = 'load';
|
rlm@46
|
29129
|
rlm@46
|
29130 Ext.form.Action.prototype = {
|
rlm@46
|
29131
|
rlm@46
|
29132
|
rlm@46
|
29133
|
rlm@46
|
29134
|
rlm@46
|
29135
|
rlm@46
|
29136
|
rlm@46
|
29137
|
rlm@46
|
29138
|
rlm@46
|
29139
|
rlm@46
|
29140
|
rlm@46
|
29141
|
rlm@46
|
29142 type : 'default',
|
rlm@46
|
29143
|
rlm@46
|
29144
|
rlm@46
|
29145 run : function(options){
|
rlm@46
|
29146
|
rlm@46
|
29147 },
|
rlm@46
|
29148
|
rlm@46
|
29149 success : function(response){
|
rlm@46
|
29150
|
rlm@46
|
29151 },
|
rlm@46
|
29152
|
rlm@46
|
29153 handleResponse : function(response){
|
rlm@46
|
29154
|
rlm@46
|
29155 },
|
rlm@46
|
29156
|
rlm@46
|
29157 failure : function(response){
|
rlm@46
|
29158 this.response = response;
|
rlm@46
|
29159 this.failureType = Ext.form.Action.CONNECT_FAILURE;
|
rlm@46
|
29160 this.form.afterAction(this, false);
|
rlm@46
|
29161 },
|
rlm@46
|
29162
|
rlm@46
|
29163 processResponse : function(response){
|
rlm@46
|
29164 this.response = response;
|
rlm@46
|
29165 if(!response.responseText){
|
rlm@46
|
29166 return true;
|
rlm@46
|
29167 }
|
rlm@46
|
29168 this.result = this.handleResponse(response);
|
rlm@46
|
29169 return this.result;
|
rlm@46
|
29170 },
|
rlm@46
|
29171
|
rlm@46
|
29172 getUrl : function(appendParams){
|
rlm@46
|
29173 var url = this.options.url || this.form.url || this.form.el.dom.action;
|
rlm@46
|
29174 if(appendParams){
|
rlm@46
|
29175 var p = this.getParams();
|
rlm@46
|
29176 if(p){
|
rlm@46
|
29177 url += (url.indexOf('?') != -1 ? '&' : '?') + p;
|
rlm@46
|
29178 }
|
rlm@46
|
29179 }
|
rlm@46
|
29180 return url;
|
rlm@46
|
29181 },
|
rlm@46
|
29182
|
rlm@46
|
29183 getMethod : function(){
|
rlm@46
|
29184 return (this.options.method || this.form.method || this.form.el.dom.method || 'POST').toUpperCase();
|
rlm@46
|
29185 },
|
rlm@46
|
29186
|
rlm@46
|
29187 getParams : function(){
|
rlm@46
|
29188 var bp = this.form.baseParams;
|
rlm@46
|
29189 var p = this.options.params;
|
rlm@46
|
29190 if(p){
|
rlm@46
|
29191 if(typeof p == "object"){
|
rlm@46
|
29192 p = Ext.urlEncode(Ext.applyIf(p, bp));
|
rlm@46
|
29193 }else if(typeof p == 'string' && bp){
|
rlm@46
|
29194 p += '&' + Ext.urlEncode(bp);
|
rlm@46
|
29195 }
|
rlm@46
|
29196 }else if(bp){
|
rlm@46
|
29197 p = Ext.urlEncode(bp);
|
rlm@46
|
29198 }
|
rlm@46
|
29199 return p;
|
rlm@46
|
29200 },
|
rlm@46
|
29201
|
rlm@46
|
29202 createCallback : function(opts){
|
rlm@46
|
29203 var opts = opts || {};
|
rlm@46
|
29204 return {
|
rlm@46
|
29205 success: this.success,
|
rlm@46
|
29206 failure: this.failure,
|
rlm@46
|
29207 scope: this,
|
rlm@46
|
29208 timeout: (opts.timeout*1000) || (this.form.timeout*1000),
|
rlm@46
|
29209 upload: this.form.fileUpload ? this.success : undefined
|
rlm@46
|
29210 };
|
rlm@46
|
29211 }
|
rlm@46
|
29212 };
|
rlm@46
|
29213
|
rlm@46
|
29214
|
rlm@46
|
29215 Ext.form.Action.Submit = function(form, options){
|
rlm@46
|
29216 Ext.form.Action.Submit.superclass.constructor.call(this, form, options);
|
rlm@46
|
29217 };
|
rlm@46
|
29218
|
rlm@46
|
29219 Ext.extend(Ext.form.Action.Submit, Ext.form.Action, {
|
rlm@46
|
29220
|
rlm@46
|
29221 type : 'submit',
|
rlm@46
|
29222
|
rlm@46
|
29223 run : function(){
|
rlm@46
|
29224 var o = this.options;
|
rlm@46
|
29225 var method = this.getMethod();
|
rlm@46
|
29226 var isGet = method == 'GET';
|
rlm@46
|
29227 if(o.clientValidation === false || this.form.isValid()){
|
rlm@46
|
29228 Ext.Ajax.request(Ext.apply(this.createCallback(o), {
|
rlm@46
|
29229 form:this.form.el.dom,
|
rlm@46
|
29230 url:this.getUrl(isGet),
|
rlm@46
|
29231 method: method,
|
rlm@46
|
29232 headers: o.headers,
|
rlm@46
|
29233 params:!isGet ? this.getParams() : null,
|
rlm@46
|
29234 isUpload: this.form.fileUpload
|
rlm@46
|
29235 }));
|
rlm@46
|
29236 }else if (o.clientValidation !== false){ this.failureType = Ext.form.Action.CLIENT_INVALID;
|
rlm@46
|
29237 this.form.afterAction(this, false);
|
rlm@46
|
29238 }
|
rlm@46
|
29239 },
|
rlm@46
|
29240
|
rlm@46
|
29241 success : function(response){
|
rlm@46
|
29242 var result = this.processResponse(response);
|
rlm@46
|
29243 if(result === true || result.success){
|
rlm@46
|
29244 this.form.afterAction(this, true);
|
rlm@46
|
29245 return;
|
rlm@46
|
29246 }
|
rlm@46
|
29247 if(result.errors){
|
rlm@46
|
29248 this.form.markInvalid(result.errors);
|
rlm@46
|
29249 this.failureType = Ext.form.Action.SERVER_INVALID;
|
rlm@46
|
29250 }
|
rlm@46
|
29251 this.form.afterAction(this, false);
|
rlm@46
|
29252 },
|
rlm@46
|
29253
|
rlm@46
|
29254 handleResponse : function(response){
|
rlm@46
|
29255 if(this.form.errorReader){
|
rlm@46
|
29256 var rs = this.form.errorReader.read(response);
|
rlm@46
|
29257 var errors = [];
|
rlm@46
|
29258 if(rs.records){
|
rlm@46
|
29259 for(var i = 0, len = rs.records.length; i < len; i++) {
|
rlm@46
|
29260 var r = rs.records[i];
|
rlm@46
|
29261 errors[i] = r.data;
|
rlm@46
|
29262 }
|
rlm@46
|
29263 }
|
rlm@46
|
29264 if(errors.length < 1){
|
rlm@46
|
29265 errors = null;
|
rlm@46
|
29266 }
|
rlm@46
|
29267 return {
|
rlm@46
|
29268 success : rs.success,
|
rlm@46
|
29269 errors : errors
|
rlm@46
|
29270 };
|
rlm@46
|
29271 }
|
rlm@46
|
29272 return Ext.decode(response.responseText);
|
rlm@46
|
29273 }
|
rlm@46
|
29274 });
|
rlm@46
|
29275
|
rlm@46
|
29276
|
rlm@46
|
29277
|
rlm@46
|
29278 Ext.form.Action.Load = function(form, options){
|
rlm@46
|
29279 Ext.form.Action.Load.superclass.constructor.call(this, form, options);
|
rlm@46
|
29280 this.reader = this.form.reader;
|
rlm@46
|
29281 };
|
rlm@46
|
29282
|
rlm@46
|
29283 Ext.extend(Ext.form.Action.Load, Ext.form.Action, {
|
rlm@46
|
29284 type : 'load',
|
rlm@46
|
29285
|
rlm@46
|
29286 run : function(){
|
rlm@46
|
29287 Ext.Ajax.request(Ext.apply(
|
rlm@46
|
29288 this.createCallback(this.options), {
|
rlm@46
|
29289 method:this.getMethod(),
|
rlm@46
|
29290 url:this.getUrl(false),
|
rlm@46
|
29291 headers: this.options.headers,
|
rlm@46
|
29292 params:this.getParams()
|
rlm@46
|
29293 }));
|
rlm@46
|
29294 },
|
rlm@46
|
29295
|
rlm@46
|
29296 success : function(response){
|
rlm@46
|
29297 var result = this.processResponse(response);
|
rlm@46
|
29298 if(result === true || !result.success || !result.data){
|
rlm@46
|
29299 this.failureType = Ext.form.Action.LOAD_FAILURE;
|
rlm@46
|
29300 this.form.afterAction(this, false);
|
rlm@46
|
29301 return;
|
rlm@46
|
29302 }
|
rlm@46
|
29303 this.form.clearInvalid();
|
rlm@46
|
29304 this.form.setValues(result.data);
|
rlm@46
|
29305 this.form.afterAction(this, true);
|
rlm@46
|
29306 },
|
rlm@46
|
29307
|
rlm@46
|
29308 handleResponse : function(response){
|
rlm@46
|
29309 if(this.form.reader){
|
rlm@46
|
29310 var rs = this.form.reader.read(response);
|
rlm@46
|
29311 var data = rs.records && rs.records[0] ? rs.records[0].data : null;
|
rlm@46
|
29312 return {
|
rlm@46
|
29313 success : rs.success,
|
rlm@46
|
29314 data : data
|
rlm@46
|
29315 };
|
rlm@46
|
29316 }
|
rlm@46
|
29317 return Ext.decode(response.responseText);
|
rlm@46
|
29318 }
|
rlm@46
|
29319 });
|
rlm@46
|
29320
|
rlm@46
|
29321 Ext.form.Action.ACTION_TYPES = {
|
rlm@46
|
29322 'load' : Ext.form.Action.Load,
|
rlm@46
|
29323 'submit' : Ext.form.Action.Submit
|
rlm@46
|
29324 };
|
rlm@46
|
29325
|
rlm@46
|
29326
|
rlm@46
|
29327 Ext.form.VTypes = function(){
|
rlm@46
|
29328 var alpha = /^[a-zA-Z_]+$/;
|
rlm@46
|
29329 var alphanum = /^[a-zA-Z0-9_]+$/;
|
rlm@46
|
29330 var email = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
|
rlm@46
|
29331 var url = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
|
rlm@46
|
29332
|
rlm@46
|
29333 return {
|
rlm@46
|
29334
|
rlm@46
|
29335 'email' : function(v){
|
rlm@46
|
29336 return email.test(v);
|
rlm@46
|
29337 },
|
rlm@46
|
29338
|
rlm@46
|
29339 'emailText' : 'This field should be an e-mail address in the format "user@domain.com"',
|
rlm@46
|
29340
|
rlm@46
|
29341 'emailMask' : /[a-z0-9_\.\-@]/i,
|
rlm@46
|
29342
|
rlm@46
|
29343
|
rlm@46
|
29344 'url' : function(v){
|
rlm@46
|
29345 return url.test(v);
|
rlm@46
|
29346 },
|
rlm@46
|
29347
|
rlm@46
|
29348 'urlText' : 'This field should be a URL in the format "http:/'+'/www.domain.com"',
|
rlm@46
|
29349
|
rlm@46
|
29350
|
rlm@46
|
29351 'alpha' : function(v){
|
rlm@46
|
29352 return alpha.test(v);
|
rlm@46
|
29353 },
|
rlm@46
|
29354
|
rlm@46
|
29355 'alphaText' : 'This field should only contain letters and _',
|
rlm@46
|
29356
|
rlm@46
|
29357 'alphaMask' : /[a-z_]/i,
|
rlm@46
|
29358
|
rlm@46
|
29359
|
rlm@46
|
29360 'alphanum' : function(v){
|
rlm@46
|
29361 return alphanum.test(v);
|
rlm@46
|
29362 },
|
rlm@46
|
29363
|
rlm@46
|
29364 'alphanumText' : 'This field should only contain letters, numbers and _',
|
rlm@46
|
29365
|
rlm@46
|
29366 'alphanumMask' : /[a-z0-9_]/i
|
rlm@46
|
29367 };
|
rlm@46
|
29368 }();
|
rlm@46
|
29369
|
rlm@46
|
29370 Ext.grid.GridPanel = Ext.extend(Ext.Panel, {
|
rlm@46
|
29371
|
rlm@46
|
29372
|
rlm@46
|
29373
|
rlm@46
|
29374
|
rlm@46
|
29375
|
rlm@46
|
29376
|
rlm@46
|
29377
|
rlm@46
|
29378
|
rlm@46
|
29379
|
rlm@46
|
29380
|
rlm@46
|
29381
|
rlm@46
|
29382
|
rlm@46
|
29383
|
rlm@46
|
29384
|
rlm@46
|
29385 ddText : "{0} selected row{1}",
|
rlm@46
|
29386
|
rlm@46
|
29387 minColumnWidth : 25,
|
rlm@46
|
29388
|
rlm@46
|
29389 trackMouseOver : true,
|
rlm@46
|
29390
|
rlm@46
|
29391 enableDragDrop : false,
|
rlm@46
|
29392
|
rlm@46
|
29393 enableColumnMove : true,
|
rlm@46
|
29394
|
rlm@46
|
29395 enableColumnHide : true,
|
rlm@46
|
29396
|
rlm@46
|
29397 enableHdMenu : true,
|
rlm@46
|
29398
|
rlm@46
|
29399 stripeRows : false,
|
rlm@46
|
29400
|
rlm@46
|
29401 autoExpandColumn : false,
|
rlm@46
|
29402
|
rlm@46
|
29403 autoExpandMin : 50,
|
rlm@46
|
29404
|
rlm@46
|
29405 autoExpandMax : 1000,
|
rlm@46
|
29406
|
rlm@46
|
29407 view : null,
|
rlm@46
|
29408
|
rlm@46
|
29409 loadMask : false,
|
rlm@46
|
29410
|
rlm@46
|
29411
|
rlm@46
|
29412 rendered : false,
|
rlm@46
|
29413
|
rlm@46
|
29414 viewReady: false,
|
rlm@46
|
29415
|
rlm@46
|
29416 stateEvents: ["columnmove", "columnresize", "sortchange"],
|
rlm@46
|
29417
|
rlm@46
|
29418
|
rlm@46
|
29419 initComponent : function(){
|
rlm@46
|
29420 Ext.grid.GridPanel.superclass.initComponent.call(this);
|
rlm@46
|
29421
|
rlm@46
|
29422
|
rlm@46
|
29423
|
rlm@46
|
29424 this.autoScroll = false;
|
rlm@46
|
29425 this.autoWidth = false;
|
rlm@46
|
29426
|
rlm@46
|
29427 if(Ext.isArray(this.columns)){
|
rlm@46
|
29428 this.colModel = new Ext.grid.ColumnModel(this.columns);
|
rlm@46
|
29429 delete this.columns;
|
rlm@46
|
29430 }
|
rlm@46
|
29431
|
rlm@46
|
29432
|
rlm@46
|
29433 if(this.ds){
|
rlm@46
|
29434 this.store = this.ds;
|
rlm@46
|
29435 delete this.ds;
|
rlm@46
|
29436 }
|
rlm@46
|
29437 if(this.cm){
|
rlm@46
|
29438 this.colModel = this.cm;
|
rlm@46
|
29439 delete this.cm;
|
rlm@46
|
29440 }
|
rlm@46
|
29441 if(this.sm){
|
rlm@46
|
29442 this.selModel = this.sm;
|
rlm@46
|
29443 delete this.sm;
|
rlm@46
|
29444 }
|
rlm@46
|
29445 this.store = Ext.StoreMgr.lookup(this.store);
|
rlm@46
|
29446
|
rlm@46
|
29447 this.addEvents(
|
rlm@46
|
29448
|
rlm@46
|
29449
|
rlm@46
|
29450 "click",
|
rlm@46
|
29451
|
rlm@46
|
29452 "dblclick",
|
rlm@46
|
29453
|
rlm@46
|
29454 "contextmenu",
|
rlm@46
|
29455
|
rlm@46
|
29456 "mousedown",
|
rlm@46
|
29457
|
rlm@46
|
29458 "mouseup",
|
rlm@46
|
29459
|
rlm@46
|
29460 "mouseover",
|
rlm@46
|
29461
|
rlm@46
|
29462 "mouseout",
|
rlm@46
|
29463
|
rlm@46
|
29464 "keypress",
|
rlm@46
|
29465
|
rlm@46
|
29466 "keydown",
|
rlm@46
|
29467
|
rlm@46
|
29468
|
rlm@46
|
29469
|
rlm@46
|
29470 "cellmousedown",
|
rlm@46
|
29471
|
rlm@46
|
29472 "rowmousedown",
|
rlm@46
|
29473
|
rlm@46
|
29474 "headermousedown",
|
rlm@46
|
29475
|
rlm@46
|
29476
|
rlm@46
|
29477 "cellclick",
|
rlm@46
|
29478
|
rlm@46
|
29479 "celldblclick",
|
rlm@46
|
29480
|
rlm@46
|
29481 "rowclick",
|
rlm@46
|
29482
|
rlm@46
|
29483 "rowdblclick",
|
rlm@46
|
29484
|
rlm@46
|
29485 "headerclick",
|
rlm@46
|
29486
|
rlm@46
|
29487 "headerdblclick",
|
rlm@46
|
29488
|
rlm@46
|
29489 "rowcontextmenu",
|
rlm@46
|
29490
|
rlm@46
|
29491 "cellcontextmenu",
|
rlm@46
|
29492
|
rlm@46
|
29493 "headercontextmenu",
|
rlm@46
|
29494
|
rlm@46
|
29495 "bodyscroll",
|
rlm@46
|
29496
|
rlm@46
|
29497 "columnresize",
|
rlm@46
|
29498
|
rlm@46
|
29499 "columnmove",
|
rlm@46
|
29500
|
rlm@46
|
29501 "sortchange"
|
rlm@46
|
29502 );
|
rlm@46
|
29503 },
|
rlm@46
|
29504
|
rlm@46
|
29505
|
rlm@46
|
29506 onRender : function(ct, position){
|
rlm@46
|
29507 Ext.grid.GridPanel.superclass.onRender.apply(this, arguments);
|
rlm@46
|
29508
|
rlm@46
|
29509 var c = this.body;
|
rlm@46
|
29510
|
rlm@46
|
29511 this.el.addClass('x-grid-panel');
|
rlm@46
|
29512
|
rlm@46
|
29513 var view = this.getView();
|
rlm@46
|
29514 view.init(this);
|
rlm@46
|
29515
|
rlm@46
|
29516 c.on("mousedown", this.onMouseDown, this);
|
rlm@46
|
29517 c.on("click", this.onClick, this);
|
rlm@46
|
29518 c.on("dblclick", this.onDblClick, this);
|
rlm@46
|
29519 c.on("contextmenu", this.onContextMenu, this);
|
rlm@46
|
29520 c.on("keydown", this.onKeyDown, this);
|
rlm@46
|
29521
|
rlm@46
|
29522 this.relayEvents(c, ["mousedown","mouseup","mouseover","mouseout","keypress"]);
|
rlm@46
|
29523
|
rlm@46
|
29524 this.getSelectionModel().init(this);
|
rlm@46
|
29525 this.view.render();
|
rlm@46
|
29526 },
|
rlm@46
|
29527
|
rlm@46
|
29528
|
rlm@46
|
29529 initEvents : function(){
|
rlm@46
|
29530 Ext.grid.GridPanel.superclass.initEvents.call(this);
|
rlm@46
|
29531
|
rlm@46
|
29532 if(this.loadMask){
|
rlm@46
|
29533 this.loadMask = new Ext.LoadMask(this.bwrap,
|
rlm@46
|
29534 Ext.apply({store:this.store}, this.loadMask));
|
rlm@46
|
29535 }
|
rlm@46
|
29536 },
|
rlm@46
|
29537
|
rlm@46
|
29538 initStateEvents : function(){
|
rlm@46
|
29539 Ext.grid.GridPanel.superclass.initStateEvents.call(this);
|
rlm@46
|
29540 this.colModel.on('hiddenchange', this.saveState, this, {delay: 100});
|
rlm@46
|
29541 },
|
rlm@46
|
29542
|
rlm@46
|
29543 applyState : function(state){
|
rlm@46
|
29544 var cm = this.colModel;
|
rlm@46
|
29545 var cs = state.columns;
|
rlm@46
|
29546 if(cs){
|
rlm@46
|
29547 for(var i = 0, len = cs.length; i < len; i++){
|
rlm@46
|
29548 var s = cs[i];
|
rlm@46
|
29549 var c = cm.getColumnById(s.id);
|
rlm@46
|
29550 if(c){
|
rlm@46
|
29551 c.hidden = s.hidden;
|
rlm@46
|
29552 c.width = s.width;
|
rlm@46
|
29553 var oldIndex = cm.getIndexById(s.id);
|
rlm@46
|
29554 if(oldIndex != i){
|
rlm@46
|
29555 cm.moveColumn(oldIndex, i);
|
rlm@46
|
29556 }
|
rlm@46
|
29557 }
|
rlm@46
|
29558 }
|
rlm@46
|
29559 }
|
rlm@46
|
29560 if(state.sort){
|
rlm@46
|
29561 this.store[this.store.remoteSort ? 'setDefaultSort' : 'sort'](state.sort.field, state.sort.direction);
|
rlm@46
|
29562 }
|
rlm@46
|
29563 },
|
rlm@46
|
29564
|
rlm@46
|
29565 getState : function(){
|
rlm@46
|
29566 var o = {columns: []};
|
rlm@46
|
29567 for(var i = 0, c; c = this.colModel.config[i]; i++){
|
rlm@46
|
29568 o.columns[i] = {
|
rlm@46
|
29569 id: c.id,
|
rlm@46
|
29570 width: c.width
|
rlm@46
|
29571 };
|
rlm@46
|
29572 if(c.hidden){
|
rlm@46
|
29573 o.columns[i].hidden = true;
|
rlm@46
|
29574 }
|
rlm@46
|
29575 }
|
rlm@46
|
29576 var ss = this.store.getSortState();
|
rlm@46
|
29577 if(ss){
|
rlm@46
|
29578 o.sort = ss;
|
rlm@46
|
29579 }
|
rlm@46
|
29580 return o;
|
rlm@46
|
29581 },
|
rlm@46
|
29582
|
rlm@46
|
29583
|
rlm@46
|
29584 afterRender : function(){
|
rlm@46
|
29585 Ext.grid.GridPanel.superclass.afterRender.call(this);
|
rlm@46
|
29586 this.view.layout();
|
rlm@46
|
29587 this.viewReady = true;
|
rlm@46
|
29588 },
|
rlm@46
|
29589
|
rlm@46
|
29590
|
rlm@46
|
29591 reconfigure : function(store, colModel){
|
rlm@46
|
29592 if(this.loadMask){
|
rlm@46
|
29593 this.loadMask.destroy();
|
rlm@46
|
29594 this.loadMask = new Ext.LoadMask(this.bwrap,
|
rlm@46
|
29595 Ext.apply({store:store}, this.initialConfig.loadMask));
|
rlm@46
|
29596 }
|
rlm@46
|
29597 this.view.bind(store, colModel);
|
rlm@46
|
29598 this.store = store;
|
rlm@46
|
29599 this.colModel = colModel;
|
rlm@46
|
29600 if(this.rendered){
|
rlm@46
|
29601 this.view.refresh(true);
|
rlm@46
|
29602 }
|
rlm@46
|
29603 },
|
rlm@46
|
29604
|
rlm@46
|
29605
|
rlm@46
|
29606 onKeyDown : function(e){
|
rlm@46
|
29607 this.fireEvent("keydown", e);
|
rlm@46
|
29608 },
|
rlm@46
|
29609
|
rlm@46
|
29610
|
rlm@46
|
29611 onDestroy : function(){
|
rlm@46
|
29612 if(this.rendered){
|
rlm@46
|
29613 if(this.loadMask){
|
rlm@46
|
29614 this.loadMask.destroy();
|
rlm@46
|
29615 }
|
rlm@46
|
29616 var c = this.body;
|
rlm@46
|
29617 c.removeAllListeners();
|
rlm@46
|
29618 this.view.destroy();
|
rlm@46
|
29619 c.update("");
|
rlm@46
|
29620 }
|
rlm@46
|
29621 this.colModel.purgeListeners();
|
rlm@46
|
29622 Ext.grid.GridPanel.superclass.onDestroy.call(this);
|
rlm@46
|
29623 },
|
rlm@46
|
29624
|
rlm@46
|
29625
|
rlm@46
|
29626 processEvent : function(name, e){
|
rlm@46
|
29627 this.fireEvent(name, e);
|
rlm@46
|
29628 var t = e.getTarget();
|
rlm@46
|
29629 var v = this.view;
|
rlm@46
|
29630 var header = v.findHeaderIndex(t);
|
rlm@46
|
29631 if(header !== false){
|
rlm@46
|
29632 this.fireEvent("header" + name, this, header, e);
|
rlm@46
|
29633 }else{
|
rlm@46
|
29634 var row = v.findRowIndex(t);
|
rlm@46
|
29635 var cell = v.findCellIndex(t);
|
rlm@46
|
29636 if(row !== false){
|
rlm@46
|
29637 this.fireEvent("row" + name, this, row, e);
|
rlm@46
|
29638 if(cell !== false){
|
rlm@46
|
29639 this.fireEvent("cell" + name, this, row, cell, e);
|
rlm@46
|
29640 }
|
rlm@46
|
29641 }
|
rlm@46
|
29642 }
|
rlm@46
|
29643 },
|
rlm@46
|
29644
|
rlm@46
|
29645
|
rlm@46
|
29646 onClick : function(e){
|
rlm@46
|
29647 this.processEvent("click", e);
|
rlm@46
|
29648 },
|
rlm@46
|
29649
|
rlm@46
|
29650
|
rlm@46
|
29651 onMouseDown : function(e){
|
rlm@46
|
29652 this.processEvent("mousedown", e);
|
rlm@46
|
29653 },
|
rlm@46
|
29654
|
rlm@46
|
29655
|
rlm@46
|
29656 onContextMenu : function(e, t){
|
rlm@46
|
29657 this.processEvent("contextmenu", e);
|
rlm@46
|
29658 },
|
rlm@46
|
29659
|
rlm@46
|
29660
|
rlm@46
|
29661 onDblClick : function(e){
|
rlm@46
|
29662 this.processEvent("dblclick", e);
|
rlm@46
|
29663 },
|
rlm@46
|
29664
|
rlm@46
|
29665
|
rlm@46
|
29666 walkCells : function(row, col, step, fn, scope){
|
rlm@46
|
29667 var cm = this.colModel, clen = cm.getColumnCount();
|
rlm@46
|
29668 var ds = this.store, rlen = ds.getCount(), first = true;
|
rlm@46
|
29669 if(step < 0){
|
rlm@46
|
29670 if(col < 0){
|
rlm@46
|
29671 row--;
|
rlm@46
|
29672 first = false;
|
rlm@46
|
29673 }
|
rlm@46
|
29674 while(row >= 0){
|
rlm@46
|
29675 if(!first){
|
rlm@46
|
29676 col = clen-1;
|
rlm@46
|
29677 }
|
rlm@46
|
29678 first = false;
|
rlm@46
|
29679 while(col >= 0){
|
rlm@46
|
29680 if(fn.call(scope || this, row, col, cm) === true){
|
rlm@46
|
29681 return [row, col];
|
rlm@46
|
29682 }
|
rlm@46
|
29683 col--;
|
rlm@46
|
29684 }
|
rlm@46
|
29685 row--;
|
rlm@46
|
29686 }
|
rlm@46
|
29687 } else {
|
rlm@46
|
29688 if(col >= clen){
|
rlm@46
|
29689 row++;
|
rlm@46
|
29690 first = false;
|
rlm@46
|
29691 }
|
rlm@46
|
29692 while(row < rlen){
|
rlm@46
|
29693 if(!first){
|
rlm@46
|
29694 col = 0;
|
rlm@46
|
29695 }
|
rlm@46
|
29696 first = false;
|
rlm@46
|
29697 while(col < clen){
|
rlm@46
|
29698 if(fn.call(scope || this, row, col, cm) === true){
|
rlm@46
|
29699 return [row, col];
|
rlm@46
|
29700 }
|
rlm@46
|
29701 col++;
|
rlm@46
|
29702 }
|
rlm@46
|
29703 row++;
|
rlm@46
|
29704 }
|
rlm@46
|
29705 }
|
rlm@46
|
29706 return null;
|
rlm@46
|
29707 },
|
rlm@46
|
29708
|
rlm@46
|
29709
|
rlm@46
|
29710 getSelections : function(){
|
rlm@46
|
29711 return this.selModel.getSelections();
|
rlm@46
|
29712 },
|
rlm@46
|
29713
|
rlm@46
|
29714
|
rlm@46
|
29715 onResize : function(){
|
rlm@46
|
29716 Ext.grid.GridPanel.superclass.onResize.apply(this, arguments);
|
rlm@46
|
29717 if(this.viewReady){
|
rlm@46
|
29718 this.view.layout();
|
rlm@46
|
29719 }
|
rlm@46
|
29720 },
|
rlm@46
|
29721
|
rlm@46
|
29722
|
rlm@46
|
29723 getGridEl : function(){
|
rlm@46
|
29724 return this.body;
|
rlm@46
|
29725 },
|
rlm@46
|
29726
|
rlm@46
|
29727
|
rlm@46
|
29728 stopEditing : function(){},
|
rlm@46
|
29729
|
rlm@46
|
29730
|
rlm@46
|
29731 getSelectionModel : function(){
|
rlm@46
|
29732 if(!this.selModel){
|
rlm@46
|
29733 this.selModel = new Ext.grid.RowSelectionModel(
|
rlm@46
|
29734 this.disableSelection ? {selectRow: Ext.emptyFn} : null);
|
rlm@46
|
29735 }
|
rlm@46
|
29736 return this.selModel;
|
rlm@46
|
29737 },
|
rlm@46
|
29738
|
rlm@46
|
29739
|
rlm@46
|
29740 getStore : function(){
|
rlm@46
|
29741 return this.store;
|
rlm@46
|
29742 },
|
rlm@46
|
29743
|
rlm@46
|
29744
|
rlm@46
|
29745 getColumnModel : function(){
|
rlm@46
|
29746 return this.colModel;
|
rlm@46
|
29747 },
|
rlm@46
|
29748
|
rlm@46
|
29749
|
rlm@46
|
29750 getView : function(){
|
rlm@46
|
29751 if(!this.view){
|
rlm@46
|
29752 this.view = new Ext.grid.GridView(this.viewConfig);
|
rlm@46
|
29753 }
|
rlm@46
|
29754 return this.view;
|
rlm@46
|
29755 },
|
rlm@46
|
29756
|
rlm@46
|
29757 getDragDropText : function(){
|
rlm@46
|
29758 var count = this.selModel.getCount();
|
rlm@46
|
29759 return String.format(this.ddText, count, count == 1 ? '' : 's');
|
rlm@46
|
29760 }
|
rlm@46
|
29761
|
rlm@46
|
29762
|
rlm@46
|
29763
|
rlm@46
|
29764
|
rlm@46
|
29765
|
rlm@46
|
29766
|
rlm@46
|
29767
|
rlm@46
|
29768
|
rlm@46
|
29769
|
rlm@46
|
29770
|
rlm@46
|
29771
|
rlm@46
|
29772
|
rlm@46
|
29773
|
rlm@46
|
29774
|
rlm@46
|
29775
|
rlm@46
|
29776
|
rlm@46
|
29777
|
rlm@46
|
29778
|
rlm@46
|
29779
|
rlm@46
|
29780
|
rlm@46
|
29781
|
rlm@46
|
29782
|
rlm@46
|
29783
|
rlm@46
|
29784
|
rlm@46
|
29785
|
rlm@46
|
29786
|
rlm@46
|
29787
|
rlm@46
|
29788
|
rlm@46
|
29789
|
rlm@46
|
29790
|
rlm@46
|
29791
|
rlm@46
|
29792
|
rlm@46
|
29793
|
rlm@46
|
29794
|
rlm@46
|
29795
|
rlm@46
|
29796
|
rlm@46
|
29797
|
rlm@46
|
29798
|
rlm@46
|
29799
|
rlm@46
|
29800
|
rlm@46
|
29801
|
rlm@46
|
29802
|
rlm@46
|
29803
|
rlm@46
|
29804
|
rlm@46
|
29805
|
rlm@46
|
29806
|
rlm@46
|
29807
|
rlm@46
|
29808
|
rlm@46
|
29809
|
rlm@46
|
29810
|
rlm@46
|
29811 });
|
rlm@46
|
29812 Ext.reg('grid', Ext.grid.GridPanel);
|
rlm@46
|
29813
|
rlm@46
|
29814 Ext.grid.GridView = function(config){
|
rlm@46
|
29815 Ext.apply(this, config);
|
rlm@46
|
29816 this.addEvents(
|
rlm@46
|
29817
|
rlm@46
|
29818 "beforerowremoved",
|
rlm@46
|
29819
|
rlm@46
|
29820 "beforerowsinserted",
|
rlm@46
|
29821
|
rlm@46
|
29822 "beforerefresh",
|
rlm@46
|
29823
|
rlm@46
|
29824 "rowremoved",
|
rlm@46
|
29825
|
rlm@46
|
29826 "rowsinserted",
|
rlm@46
|
29827
|
rlm@46
|
29828 "rowupdated",
|
rlm@46
|
29829
|
rlm@46
|
29830 "refresh"
|
rlm@46
|
29831 );
|
rlm@46
|
29832 Ext.grid.GridView.superclass.constructor.call(this);
|
rlm@46
|
29833 };
|
rlm@46
|
29834
|
rlm@46
|
29835 Ext.extend(Ext.grid.GridView, Ext.util.Observable, {
|
rlm@46
|
29836
|
rlm@46
|
29837
|
rlm@46
|
29838
|
rlm@46
|
29839
|
rlm@46
|
29840 deferEmptyText: true,
|
rlm@46
|
29841
|
rlm@46
|
29842 scrollOffset: 19,
|
rlm@46
|
29843
|
rlm@46
|
29844 autoFill: false,
|
rlm@46
|
29845
|
rlm@46
|
29846 forceFit: false,
|
rlm@46
|
29847
|
rlm@46
|
29848 sortClasses : ["sort-asc", "sort-desc"],
|
rlm@46
|
29849
|
rlm@46
|
29850 sortAscText : "Sort Ascending",
|
rlm@46
|
29851
|
rlm@46
|
29852 sortDescText : "Sort Descending",
|
rlm@46
|
29853
|
rlm@46
|
29854 columnsText : "Columns",
|
rlm@46
|
29855
|
rlm@46
|
29856 borderWidth: 2,
|
rlm@46
|
29857
|
rlm@46
|
29858
|
rlm@46
|
29859
|
rlm@46
|
29860 initTemplates : function(){
|
rlm@46
|
29861 var ts = this.templates || {};
|
rlm@46
|
29862 if(!ts.master){
|
rlm@46
|
29863 ts.master = new Ext.Template(
|
rlm@46
|
29864 '<div class="x-grid3" hidefocus="true">',
|
rlm@46
|
29865 '<div class="x-grid3-viewport">',
|
rlm@46
|
29866 '<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>',
|
rlm@46
|
29867 '<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',
|
rlm@46
|
29868 "</div>",
|
rlm@46
|
29869 '<div class="x-grid3-resize-marker"> </div>',
|
rlm@46
|
29870 '<div class="x-grid3-resize-proxy"> </div>',
|
rlm@46
|
29871 "</div>"
|
rlm@46
|
29872 );
|
rlm@46
|
29873 }
|
rlm@46
|
29874
|
rlm@46
|
29875 if(!ts.header){
|
rlm@46
|
29876 ts.header = new Ext.Template(
|
rlm@46
|
29877 '<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
|
rlm@46
|
29878 '<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',
|
rlm@46
|
29879 "</table>"
|
rlm@46
|
29880 );
|
rlm@46
|
29881 }
|
rlm@46
|
29882
|
rlm@46
|
29883 if(!ts.hcell){
|
rlm@46
|
29884 ts.hcell = new Ext.Template(
|
rlm@46
|
29885 '<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id}" style="{style}"><div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">', this.grid.enableHdMenu ? '<a class="x-grid3-hd-btn" href="#"></a>' : '',
|
rlm@46
|
29886 '{value}<img class="x-grid3-sort-icon" src="', Ext.BLANK_IMAGE_URL, '" />',
|
rlm@46
|
29887 "</div></td>"
|
rlm@46
|
29888 );
|
rlm@46
|
29889 }
|
rlm@46
|
29890
|
rlm@46
|
29891 if(!ts.body){
|
rlm@46
|
29892 ts.body = new Ext.Template('{rows}');
|
rlm@46
|
29893 }
|
rlm@46
|
29894
|
rlm@46
|
29895 if(!ts.row){
|
rlm@46
|
29896 ts.row = new Ext.Template(
|
rlm@46
|
29897 '<div class="x-grid3-row {alt}" style="{tstyle}"><table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
|
rlm@46
|
29898 '<tbody><tr>{cells}</tr>',
|
rlm@46
|
29899 (this.enableRowBody ? '<tr class="x-grid3-row-body-tr" style="{bodyStyle}"><td colspan="{cols}" class="x-grid3-body-cell" tabIndex="0" hidefocus="on"><div class="x-grid3-row-body">{body}</div></td></tr>' : ''),
|
rlm@46
|
29900 '</tbody></table></div>'
|
rlm@46
|
29901 );
|
rlm@46
|
29902 }
|
rlm@46
|
29903
|
rlm@46
|
29904 if(!ts.cell){
|
rlm@46
|
29905 ts.cell = new Ext.Template(
|
rlm@46
|
29906 '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} {css}" style="{style}" tabIndex="0" {cellAttr}>',
|
rlm@46
|
29907 '<div class="x-grid3-cell-inner x-grid3-col-{id}" unselectable="on" {attr}>{value}</div>',
|
rlm@46
|
29908 "</td>"
|
rlm@46
|
29909 );
|
rlm@46
|
29910 }
|
rlm@46
|
29911
|
rlm@46
|
29912 for(var k in ts){
|
rlm@46
|
29913 var t = ts[k];
|
rlm@46
|
29914 if(t && typeof t.compile == 'function' && !t.compiled){
|
rlm@46
|
29915 t.disableFormats = true;
|
rlm@46
|
29916 t.compile();
|
rlm@46
|
29917 }
|
rlm@46
|
29918 }
|
rlm@46
|
29919
|
rlm@46
|
29920 this.templates = ts;
|
rlm@46
|
29921
|
rlm@46
|
29922 this.tdClass = 'x-grid3-cell';
|
rlm@46
|
29923 this.cellSelector = 'td.x-grid3-cell';
|
rlm@46
|
29924 this.hdCls = 'x-grid3-hd';
|
rlm@46
|
29925 this.rowSelector = 'div.x-grid3-row';
|
rlm@46
|
29926 this.colRe = new RegExp("x-grid3-td-([^\\s]+)", "");
|
rlm@46
|
29927 },
|
rlm@46
|
29928
|
rlm@46
|
29929 fly : function(el){
|
rlm@46
|
29930 if(!this._flyweight){
|
rlm@46
|
29931 this._flyweight = new Ext.Element.Flyweight(document.body);
|
rlm@46
|
29932 }
|
rlm@46
|
29933 this._flyweight.dom = el;
|
rlm@46
|
29934 return this._flyweight;
|
rlm@46
|
29935 },
|
rlm@46
|
29936
|
rlm@46
|
29937 getEditorParent : function(ed){
|
rlm@46
|
29938 return this.scroller.dom;
|
rlm@46
|
29939 },
|
rlm@46
|
29940
|
rlm@46
|
29941 initElements : function(){
|
rlm@46
|
29942 var E = Ext.Element;
|
rlm@46
|
29943
|
rlm@46
|
29944 var el = this.grid.getGridEl().dom.firstChild;
|
rlm@46
|
29945 var cs = el.childNodes;
|
rlm@46
|
29946
|
rlm@46
|
29947 this.el = new E(el);
|
rlm@46
|
29948
|
rlm@46
|
29949 this.mainWrap = new E(cs[0]);
|
rlm@46
|
29950 this.mainHd = new E(this.mainWrap.dom.firstChild);
|
rlm@46
|
29951
|
rlm@46
|
29952 if(this.grid.hideHeaders){
|
rlm@46
|
29953 this.mainHd.setDisplayed(false);
|
rlm@46
|
29954 }
|
rlm@46
|
29955
|
rlm@46
|
29956 this.innerHd = this.mainHd.dom.firstChild;
|
rlm@46
|
29957 this.scroller = new E(this.mainWrap.dom.childNodes[1]);
|
rlm@46
|
29958 if(this.forceFit){
|
rlm@46
|
29959 this.scroller.setStyle('overflow-x', 'hidden');
|
rlm@46
|
29960 }
|
rlm@46
|
29961 this.mainBody = new E(this.scroller.dom.firstChild);
|
rlm@46
|
29962
|
rlm@46
|
29963 this.focusEl = new E(this.scroller.dom.childNodes[1]);
|
rlm@46
|
29964 this.focusEl.swallowEvent("click", true);
|
rlm@46
|
29965
|
rlm@46
|
29966 this.resizeMarker = new E(cs[1]);
|
rlm@46
|
29967 this.resizeProxy = new E(cs[2]);
|
rlm@46
|
29968 },
|
rlm@46
|
29969
|
rlm@46
|
29970 getRows : function(){
|
rlm@46
|
29971 return this.hasRows() ? this.mainBody.dom.childNodes : [];
|
rlm@46
|
29972 },
|
rlm@46
|
29973
|
rlm@46
|
29974
|
rlm@46
|
29975 findCell : function(el){
|
rlm@46
|
29976 if(!el){
|
rlm@46
|
29977 return false;
|
rlm@46
|
29978 }
|
rlm@46
|
29979 return this.fly(el).findParent(this.cellSelector, 3);
|
rlm@46
|
29980 },
|
rlm@46
|
29981
|
rlm@46
|
29982 findCellIndex : function(el, requiredCls){
|
rlm@46
|
29983 var cell = this.findCell(el);
|
rlm@46
|
29984 if(cell && (!requiredCls || this.fly(cell).hasClass(requiredCls))){
|
rlm@46
|
29985 return this.getCellIndex(cell);
|
rlm@46
|
29986 }
|
rlm@46
|
29987 return false;
|
rlm@46
|
29988 },
|
rlm@46
|
29989
|
rlm@46
|
29990 getCellIndex : function(el){
|
rlm@46
|
29991 if(el){
|
rlm@46
|
29992 var m = el.className.match(this.colRe);
|
rlm@46
|
29993 if(m && m[1]){
|
rlm@46
|
29994 return this.cm.getIndexById(m[1]);
|
rlm@46
|
29995 }
|
rlm@46
|
29996 }
|
rlm@46
|
29997 return false;
|
rlm@46
|
29998 },
|
rlm@46
|
29999
|
rlm@46
|
30000 findHeaderCell : function(el){
|
rlm@46
|
30001 var cell = this.findCell(el);
|
rlm@46
|
30002 return cell && this.fly(cell).hasClass(this.hdCls) ? cell : null;
|
rlm@46
|
30003 },
|
rlm@46
|
30004
|
rlm@46
|
30005 findHeaderIndex : function(el){
|
rlm@46
|
30006 return this.findCellIndex(el, this.hdCls);
|
rlm@46
|
30007 },
|
rlm@46
|
30008
|
rlm@46
|
30009 findRow : function(el){
|
rlm@46
|
30010 if(!el){
|
rlm@46
|
30011 return false;
|
rlm@46
|
30012 }
|
rlm@46
|
30013 return this.fly(el).findParent(this.rowSelector, 10);
|
rlm@46
|
30014 },
|
rlm@46
|
30015
|
rlm@46
|
30016 findRowIndex : function(el){
|
rlm@46
|
30017 var r = this.findRow(el);
|
rlm@46
|
30018 return r ? r.rowIndex : false;
|
rlm@46
|
30019 },
|
rlm@46
|
30020
|
rlm@46
|
30021
|
rlm@46
|
30022
|
rlm@46
|
30023 getRow : function(row){
|
rlm@46
|
30024 return this.getRows()[row];
|
rlm@46
|
30025 },
|
rlm@46
|
30026
|
rlm@46
|
30027
|
rlm@46
|
30028 getCell : function(row, col){
|
rlm@46
|
30029 return this.getRow(row).getElementsByTagName('td')[col];
|
rlm@46
|
30030 },
|
rlm@46
|
30031
|
rlm@46
|
30032
|
rlm@46
|
30033 getHeaderCell : function(index){
|
rlm@46
|
30034 return this.mainHd.dom.getElementsByTagName('td')[index];
|
rlm@46
|
30035 },
|
rlm@46
|
30036
|
rlm@46
|
30037
|
rlm@46
|
30038 addRowClass : function(row, cls){
|
rlm@46
|
30039 var r = this.getRow(row);
|
rlm@46
|
30040 if(r){
|
rlm@46
|
30041 this.fly(r).addClass(cls);
|
rlm@46
|
30042 }
|
rlm@46
|
30043 },
|
rlm@46
|
30044
|
rlm@46
|
30045 removeRowClass : function(row, cls){
|
rlm@46
|
30046 var r = this.getRow(row);
|
rlm@46
|
30047 if(r){
|
rlm@46
|
30048 this.fly(r).removeClass(cls);
|
rlm@46
|
30049 }
|
rlm@46
|
30050 },
|
rlm@46
|
30051
|
rlm@46
|
30052 removeRow : function(row){
|
rlm@46
|
30053 Ext.removeNode(this.getRow(row));
|
rlm@46
|
30054 },
|
rlm@46
|
30055
|
rlm@46
|
30056 removeRows : function(firstRow, lastRow){
|
rlm@46
|
30057 var bd = this.mainBody.dom;
|
rlm@46
|
30058 for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){
|
rlm@46
|
30059 Ext.removeNode(bd.childNodes[firstRow]);
|
rlm@46
|
30060 }
|
rlm@46
|
30061 },
|
rlm@46
|
30062
|
rlm@46
|
30063
|
rlm@46
|
30064 getScrollState : function(){
|
rlm@46
|
30065 var sb = this.scroller.dom;
|
rlm@46
|
30066 return {left: sb.scrollLeft, top: sb.scrollTop};
|
rlm@46
|
30067 },
|
rlm@46
|
30068
|
rlm@46
|
30069 restoreScroll : function(state){
|
rlm@46
|
30070 var sb = this.scroller.dom;
|
rlm@46
|
30071 sb.scrollLeft = state.left;
|
rlm@46
|
30072 sb.scrollTop = state.top;
|
rlm@46
|
30073 },
|
rlm@46
|
30074
|
rlm@46
|
30075
|
rlm@46
|
30076 scrollToTop : function(){
|
rlm@46
|
30077 this.scroller.dom.scrollTop = 0;
|
rlm@46
|
30078 this.scroller.dom.scrollLeft = 0;
|
rlm@46
|
30079 },
|
rlm@46
|
30080
|
rlm@46
|
30081 syncScroll : function(){
|
rlm@46
|
30082 this.syncHeaderScroll();
|
rlm@46
|
30083 var mb = this.scroller.dom;
|
rlm@46
|
30084 this.grid.fireEvent("bodyscroll", mb.scrollLeft, mb.scrollTop);
|
rlm@46
|
30085 },
|
rlm@46
|
30086
|
rlm@46
|
30087 syncHeaderScroll : function(){
|
rlm@46
|
30088 var mb = this.scroller.dom;
|
rlm@46
|
30089 this.innerHd.scrollLeft = mb.scrollLeft;
|
rlm@46
|
30090 this.innerHd.scrollLeft = mb.scrollLeft; },
|
rlm@46
|
30091
|
rlm@46
|
30092 updateSortIcon : function(col, dir){
|
rlm@46
|
30093 var sc = this.sortClasses;
|
rlm@46
|
30094 var hds = this.mainHd.select('td').removeClass(sc);
|
rlm@46
|
30095 hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]);
|
rlm@46
|
30096 },
|
rlm@46
|
30097
|
rlm@46
|
30098 updateAllColumnWidths : function(){
|
rlm@46
|
30099 var tw = this.getTotalWidth();
|
rlm@46
|
30100 var clen = this.cm.getColumnCount();
|
rlm@46
|
30101 var ws = [];
|
rlm@46
|
30102 for(var i = 0; i < clen; i++){
|
rlm@46
|
30103 ws[i] = this.getColumnWidth(i);
|
rlm@46
|
30104 }
|
rlm@46
|
30105
|
rlm@46
|
30106 this.innerHd.firstChild.firstChild.style.width = tw;
|
rlm@46
|
30107
|
rlm@46
|
30108 for(var i = 0; i < clen; i++){
|
rlm@46
|
30109 var hd = this.getHeaderCell(i);
|
rlm@46
|
30110 hd.style.width = ws[i];
|
rlm@46
|
30111 }
|
rlm@46
|
30112
|
rlm@46
|
30113 var ns = this.getRows();
|
rlm@46
|
30114 for(var i = 0, len = ns.length; i < len; i++){
|
rlm@46
|
30115 ns[i].style.width = tw;
|
rlm@46
|
30116 ns[i].firstChild.style.width = tw;
|
rlm@46
|
30117 var row = ns[i].firstChild.rows[0];
|
rlm@46
|
30118 for(var j = 0; j < clen; j++){
|
rlm@46
|
30119 row.childNodes[j].style.width = ws[j];
|
rlm@46
|
30120 }
|
rlm@46
|
30121 }
|
rlm@46
|
30122
|
rlm@46
|
30123 this.onAllColumnWidthsUpdated(ws, tw);
|
rlm@46
|
30124 },
|
rlm@46
|
30125
|
rlm@46
|
30126 updateColumnWidth : function(col, width){
|
rlm@46
|
30127 var w = this.getColumnWidth(col);
|
rlm@46
|
30128 var tw = this.getTotalWidth();
|
rlm@46
|
30129
|
rlm@46
|
30130 this.innerHd.firstChild.firstChild.style.width = tw;
|
rlm@46
|
30131 var hd = this.getHeaderCell(col);
|
rlm@46
|
30132 hd.style.width = w;
|
rlm@46
|
30133
|
rlm@46
|
30134 var ns = this.getRows();
|
rlm@46
|
30135 for(var i = 0, len = ns.length; i < len; i++){
|
rlm@46
|
30136 ns[i].style.width = tw;
|
rlm@46
|
30137 ns[i].firstChild.style.width = tw;
|
rlm@46
|
30138 ns[i].firstChild.rows[0].childNodes[col].style.width = w;
|
rlm@46
|
30139 }
|
rlm@46
|
30140
|
rlm@46
|
30141 this.onColumnWidthUpdated(col, w, tw);
|
rlm@46
|
30142 },
|
rlm@46
|
30143
|
rlm@46
|
30144 updateColumnHidden : function(col, hidden){
|
rlm@46
|
30145 var tw = this.getTotalWidth();
|
rlm@46
|
30146
|
rlm@46
|
30147 this.innerHd.firstChild.firstChild.style.width = tw;
|
rlm@46
|
30148
|
rlm@46
|
30149 var display = hidden ? 'none' : '';
|
rlm@46
|
30150
|
rlm@46
|
30151 var hd = this.getHeaderCell(col);
|
rlm@46
|
30152 hd.style.display = display;
|
rlm@46
|
30153
|
rlm@46
|
30154 var ns = this.getRows();
|
rlm@46
|
30155 for(var i = 0, len = ns.length; i < len; i++){
|
rlm@46
|
30156 ns[i].style.width = tw;
|
rlm@46
|
30157 ns[i].firstChild.style.width = tw;
|
rlm@46
|
30158 ns[i].firstChild.rows[0].childNodes[col].style.display = display;
|
rlm@46
|
30159 }
|
rlm@46
|
30160
|
rlm@46
|
30161 this.onColumnHiddenUpdated(col, hidden, tw);
|
rlm@46
|
30162
|
rlm@46
|
30163 delete this.lastViewWidth; this.layout();
|
rlm@46
|
30164 },
|
rlm@46
|
30165
|
rlm@46
|
30166 doRender : function(cs, rs, ds, startRow, colCount, stripe){
|
rlm@46
|
30167 var ts = this.templates, ct = ts.cell, rt = ts.row, last = colCount-1;
|
rlm@46
|
30168 var tstyle = 'width:'+this.getTotalWidth()+';';
|
rlm@46
|
30169 var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
|
rlm@46
|
30170 for(var j = 0, len = rs.length; j < len; j++){
|
rlm@46
|
30171 r = rs[j]; cb = [];
|
rlm@46
|
30172 var rowIndex = (j+startRow);
|
rlm@46
|
30173 for(var i = 0; i < colCount; i++){
|
rlm@46
|
30174 c = cs[i];
|
rlm@46
|
30175 p.id = c.id;
|
rlm@46
|
30176 p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
|
rlm@46
|
30177 p.attr = p.cellAttr = "";
|
rlm@46
|
30178 p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
|
rlm@46
|
30179 p.style = c.style;
|
rlm@46
|
30180 if(p.value == undefined || p.value === "") p.value = " ";
|
rlm@46
|
30181 if(r.dirty && typeof r.modified[c.name] !== 'undefined'){
|
rlm@46
|
30182 p.css += ' x-grid3-dirty-cell';
|
rlm@46
|
30183 }
|
rlm@46
|
30184 cb[cb.length] = ct.apply(p);
|
rlm@46
|
30185 }
|
rlm@46
|
30186 var alt = [];
|
rlm@46
|
30187 if(stripe && ((rowIndex+1) % 2 == 0)){
|
rlm@46
|
30188 alt[0] = "x-grid3-row-alt";
|
rlm@46
|
30189 }
|
rlm@46
|
30190 if(r.dirty){
|
rlm@46
|
30191 alt[1] = " x-grid3-dirty-row";
|
rlm@46
|
30192 }
|
rlm@46
|
30193 rp.cols = colCount;
|
rlm@46
|
30194 if(this.getRowClass){
|
rlm@46
|
30195 alt[2] = this.getRowClass(r, rowIndex, rp, ds);
|
rlm@46
|
30196 }
|
rlm@46
|
30197 rp.alt = alt.join(" ");
|
rlm@46
|
30198 rp.cells = cb.join("");
|
rlm@46
|
30199 buf[buf.length] = rt.apply(rp);
|
rlm@46
|
30200 }
|
rlm@46
|
30201 return buf.join("");
|
rlm@46
|
30202 },
|
rlm@46
|
30203
|
rlm@46
|
30204 processRows : function(startRow, skipStripe){
|
rlm@46
|
30205 if(this.ds.getCount() < 1){
|
rlm@46
|
30206 return;
|
rlm@46
|
30207 }
|
rlm@46
|
30208 skipStripe = skipStripe || !this.grid.stripeRows;
|
rlm@46
|
30209 startRow = startRow || 0;
|
rlm@46
|
30210 var rows = this.getRows();
|
rlm@46
|
30211 var cls = ' x-grid3-row-alt ';
|
rlm@46
|
30212 for(var i = startRow, len = rows.length; i < len; i++){
|
rlm@46
|
30213 var row = rows[i];
|
rlm@46
|
30214 row.rowIndex = i;
|
rlm@46
|
30215 if(!skipStripe){
|
rlm@46
|
30216 var isAlt = ((i+1) % 2 == 0);
|
rlm@46
|
30217 var hasAlt = (' '+row.className + ' ').indexOf(cls) != -1;
|
rlm@46
|
30218 if(isAlt == hasAlt){
|
rlm@46
|
30219 continue;
|
rlm@46
|
30220 }
|
rlm@46
|
30221 if(isAlt){
|
rlm@46
|
30222 row.className += " x-grid3-row-alt";
|
rlm@46
|
30223 }else{
|
rlm@46
|
30224 row.className = row.className.replace("x-grid3-row-alt", "");
|
rlm@46
|
30225 }
|
rlm@46
|
30226 }
|
rlm@46
|
30227 }
|
rlm@46
|
30228 },
|
rlm@46
|
30229
|
rlm@46
|
30230 renderUI : function(){
|
rlm@46
|
30231
|
rlm@46
|
30232 var header = this.renderHeaders();
|
rlm@46
|
30233 var body = this.templates.body.apply({rows:''});
|
rlm@46
|
30234
|
rlm@46
|
30235
|
rlm@46
|
30236 var html = this.templates.master.apply({
|
rlm@46
|
30237 body: body,
|
rlm@46
|
30238 header: header
|
rlm@46
|
30239 });
|
rlm@46
|
30240
|
rlm@46
|
30241 var g = this.grid;
|
rlm@46
|
30242
|
rlm@46
|
30243 g.getGridEl().dom.innerHTML = html;
|
rlm@46
|
30244
|
rlm@46
|
30245 this.initElements();
|
rlm@46
|
30246
|
rlm@46
|
30247
|
rlm@46
|
30248 this.mainBody.dom.innerHTML = this.renderRows();
|
rlm@46
|
30249 this.processRows(0, true);
|
rlm@46
|
30250
|
rlm@46
|
30251 if(this.deferEmptyText !== true){
|
rlm@46
|
30252 this.applyEmptyText();
|
rlm@46
|
30253 }
|
rlm@46
|
30254
|
rlm@46
|
30255 Ext.fly(this.innerHd).on("click", this.handleHdDown, this);
|
rlm@46
|
30256 this.mainHd.on("mouseover", this.handleHdOver, this);
|
rlm@46
|
30257 this.mainHd.on("mouseout", this.handleHdOut, this);
|
rlm@46
|
30258 this.mainHd.on("mousemove", this.handleHdMove, this);
|
rlm@46
|
30259
|
rlm@46
|
30260 this.scroller.on('scroll', this.syncScroll, this);
|
rlm@46
|
30261 if(g.enableColumnResize !== false){
|
rlm@46
|
30262 this.splitone = new Ext.grid.GridView.SplitDragZone(g, this.mainHd.dom);
|
rlm@46
|
30263 }
|
rlm@46
|
30264
|
rlm@46
|
30265 if(g.enableColumnMove){
|
rlm@46
|
30266 this.columnDrag = new Ext.grid.GridView.ColumnDragZone(g, this.innerHd);
|
rlm@46
|
30267 this.columnDrop = new Ext.grid.HeaderDropZone(g, this.mainHd.dom);
|
rlm@46
|
30268 }
|
rlm@46
|
30269
|
rlm@46
|
30270 if(g.enableHdMenu !== false){
|
rlm@46
|
30271 if(g.enableColumnHide !== false){
|
rlm@46
|
30272 this.colMenu = new Ext.menu.Menu({id:g.id + "-hcols-menu"});
|
rlm@46
|
30273 this.colMenu.on("beforeshow", this.beforeColMenuShow, this);
|
rlm@46
|
30274 this.colMenu.on("itemclick", this.handleHdMenuClick, this);
|
rlm@46
|
30275 }
|
rlm@46
|
30276 this.hmenu = new Ext.menu.Menu({id: g.id + "-hctx"});
|
rlm@46
|
30277 this.hmenu.add(
|
rlm@46
|
30278 {id:"asc", text: this.sortAscText, cls: "xg-hmenu-sort-asc"},
|
rlm@46
|
30279 {id:"desc", text: this.sortDescText, cls: "xg-hmenu-sort-desc"}
|
rlm@46
|
30280 );
|
rlm@46
|
30281 if(g.enableColumnHide !== false){
|
rlm@46
|
30282 this.hmenu.add('-',
|
rlm@46
|
30283 {id:"columns", text: this.columnsText, menu: this.colMenu, iconCls: 'x-cols-icon'}
|
rlm@46
|
30284 );
|
rlm@46
|
30285 }
|
rlm@46
|
30286 this.hmenu.on("itemclick", this.handleHdMenuClick, this);
|
rlm@46
|
30287
|
rlm@46
|
30288 }
|
rlm@46
|
30289
|
rlm@46
|
30290 if(g.enableDragDrop || g.enableDrag){
|
rlm@46
|
30291 this.dragZone = new Ext.grid.GridDragZone(g, {
|
rlm@46
|
30292 ddGroup : g.ddGroup || 'GridDD'
|
rlm@46
|
30293 });
|
rlm@46
|
30294 }
|
rlm@46
|
30295
|
rlm@46
|
30296 this.updateHeaderSortState();
|
rlm@46
|
30297
|
rlm@46
|
30298 },
|
rlm@46
|
30299
|
rlm@46
|
30300 layout : function(){
|
rlm@46
|
30301 if(!this.mainBody){
|
rlm@46
|
30302 return; }
|
rlm@46
|
30303 var g = this.grid;
|
rlm@46
|
30304 var c = g.getGridEl();
|
rlm@46
|
30305 var csize = c.getSize(true);
|
rlm@46
|
30306 var vw = csize.width;
|
rlm@46
|
30307
|
rlm@46
|
30308 if(vw < 20 || csize.height < 20){ return;
|
rlm@46
|
30309 }
|
rlm@46
|
30310
|
rlm@46
|
30311 if(g.autoHeight){
|
rlm@46
|
30312 this.scroller.dom.style.overflow = 'visible';
|
rlm@46
|
30313 }else{
|
rlm@46
|
30314 this.el.setSize(csize.width, csize.height);
|
rlm@46
|
30315
|
rlm@46
|
30316 var hdHeight = this.mainHd.getHeight();
|
rlm@46
|
30317 var vh = csize.height - (hdHeight);
|
rlm@46
|
30318
|
rlm@46
|
30319 this.scroller.setSize(vw, vh);
|
rlm@46
|
30320 if(this.innerHd){
|
rlm@46
|
30321 this.innerHd.style.width = (vw)+'px';
|
rlm@46
|
30322 }
|
rlm@46
|
30323 }
|
rlm@46
|
30324 if(this.forceFit){
|
rlm@46
|
30325 if(this.lastViewWidth != vw){
|
rlm@46
|
30326 this.fitColumns(false, false);
|
rlm@46
|
30327 this.lastViewWidth = vw;
|
rlm@46
|
30328 }
|
rlm@46
|
30329 }else {
|
rlm@46
|
30330 this.autoExpand();
|
rlm@46
|
30331 this.syncHeaderScroll();
|
rlm@46
|
30332 }
|
rlm@46
|
30333 this.onLayout(vw, vh);
|
rlm@46
|
30334 },
|
rlm@46
|
30335
|
rlm@46
|
30336 onLayout : function(vw, vh){
|
rlm@46
|
30337 },
|
rlm@46
|
30338
|
rlm@46
|
30339 onColumnWidthUpdated : function(col, w, tw){
|
rlm@46
|
30340 },
|
rlm@46
|
30341
|
rlm@46
|
30342 onAllColumnWidthsUpdated : function(ws, tw){
|
rlm@46
|
30343 },
|
rlm@46
|
30344
|
rlm@46
|
30345 onColumnHiddenUpdated : function(col, hidden, tw){
|
rlm@46
|
30346 },
|
rlm@46
|
30347
|
rlm@46
|
30348 updateColumnText : function(col, text){
|
rlm@46
|
30349 },
|
rlm@46
|
30350
|
rlm@46
|
30351 afterMove : function(colIndex){
|
rlm@46
|
30352 },
|
rlm@46
|
30353
|
rlm@46
|
30354
|
rlm@46
|
30355 init: function(grid){
|
rlm@46
|
30356 this.grid = grid;
|
rlm@46
|
30357
|
rlm@46
|
30358 this.initTemplates();
|
rlm@46
|
30359 this.initData(grid.store, grid.colModel);
|
rlm@46
|
30360 this.initUI(grid);
|
rlm@46
|
30361 },
|
rlm@46
|
30362
|
rlm@46
|
30363 getColumnId : function(index){
|
rlm@46
|
30364 return this.cm.getColumnId(index);
|
rlm@46
|
30365 },
|
rlm@46
|
30366
|
rlm@46
|
30367 renderHeaders : function(){
|
rlm@46
|
30368 var cm = this.cm, ts = this.templates;
|
rlm@46
|
30369 var ct = ts.hcell;
|
rlm@46
|
30370
|
rlm@46
|
30371 var cb = [], sb = [], p = {};
|
rlm@46
|
30372
|
rlm@46
|
30373 for(var i = 0, len = cm.getColumnCount(); i < len; i++){
|
rlm@46
|
30374 p.id = cm.getColumnId(i);
|
rlm@46
|
30375 p.value = cm.getColumnHeader(i) || "";
|
rlm@46
|
30376 p.style = this.getColumnStyle(i, true);
|
rlm@46
|
30377 p.tooltip = this.getColumnTooltip(i);
|
rlm@46
|
30378 if(cm.config[i].align == 'right'){
|
rlm@46
|
30379 p.istyle = 'padding-right:16px';
|
rlm@46
|
30380 } else {
|
rlm@46
|
30381 delete p.istyle;
|
rlm@46
|
30382 }
|
rlm@46
|
30383 cb[cb.length] = ct.apply(p);
|
rlm@46
|
30384 }
|
rlm@46
|
30385 return ts.header.apply({cells: cb.join(""), tstyle:'width:'+this.getTotalWidth()+';'});
|
rlm@46
|
30386 },
|
rlm@46
|
30387
|
rlm@46
|
30388 getColumnTooltip : function(i){
|
rlm@46
|
30389 var tt = this.cm.getColumnTooltip(i);
|
rlm@46
|
30390 if(tt){
|
rlm@46
|
30391 if(Ext.QuickTips.isEnabled()){
|
rlm@46
|
30392 return 'ext:qtip="'+tt+'"';
|
rlm@46
|
30393 }else{
|
rlm@46
|
30394 return 'title="'+tt+'"';
|
rlm@46
|
30395 }
|
rlm@46
|
30396 }
|
rlm@46
|
30397 return "";
|
rlm@46
|
30398 },
|
rlm@46
|
30399
|
rlm@46
|
30400 beforeUpdate : function(){
|
rlm@46
|
30401 this.grid.stopEditing(true);
|
rlm@46
|
30402 },
|
rlm@46
|
30403
|
rlm@46
|
30404 updateHeaders : function(){
|
rlm@46
|
30405 this.innerHd.firstChild.innerHTML = this.renderHeaders();
|
rlm@46
|
30406 },
|
rlm@46
|
30407
|
rlm@46
|
30408
|
rlm@46
|
30409 focusRow : function(row){
|
rlm@46
|
30410 this.focusCell(row, 0, false);
|
rlm@46
|
30411 },
|
rlm@46
|
30412
|
rlm@46
|
30413
|
rlm@46
|
30414 focusCell : function(row, col, hscroll){
|
rlm@46
|
30415 var xy = this.ensureVisible(row, col, hscroll);
|
rlm@46
|
30416 this.focusEl.setXY(xy);
|
rlm@46
|
30417 if(Ext.isGecko){
|
rlm@46
|
30418 this.focusEl.focus();
|
rlm@46
|
30419 }else{
|
rlm@46
|
30420 this.focusEl.focus.defer(1, this.focusEl);
|
rlm@46
|
30421 }
|
rlm@46
|
30422 },
|
rlm@46
|
30423
|
rlm@46
|
30424 ensureVisible : function(row, col, hscroll){
|
rlm@46
|
30425 if(typeof row != "number"){
|
rlm@46
|
30426 row = row.rowIndex;
|
rlm@46
|
30427 }
|
rlm@46
|
30428 if(!this.ds){
|
rlm@46
|
30429 return;
|
rlm@46
|
30430 }
|
rlm@46
|
30431 if(row < 0 || row >= this.ds.getCount()){
|
rlm@46
|
30432 return;
|
rlm@46
|
30433 }
|
rlm@46
|
30434 col = (col !== undefined ? col : 0);
|
rlm@46
|
30435
|
rlm@46
|
30436 var rowEl = this.getRow(row), cellEl;
|
rlm@46
|
30437 if(!(hscroll === false && col === 0)){
|
rlm@46
|
30438 while(this.cm.isHidden(col)){
|
rlm@46
|
30439 col++;
|
rlm@46
|
30440 }
|
rlm@46
|
30441 cellEl = this.getCell(row, col);
|
rlm@46
|
30442 }
|
rlm@46
|
30443 if(!rowEl){
|
rlm@46
|
30444 return;
|
rlm@46
|
30445 }
|
rlm@46
|
30446
|
rlm@46
|
30447 var c = this.scroller.dom;
|
rlm@46
|
30448
|
rlm@46
|
30449 var ctop = 0;
|
rlm@46
|
30450 var p = rowEl, stop = this.el.dom;
|
rlm@46
|
30451 while(p && p != stop){
|
rlm@46
|
30452 ctop += p.offsetTop;
|
rlm@46
|
30453 p = p.offsetParent;
|
rlm@46
|
30454 }
|
rlm@46
|
30455 ctop -= this.mainHd.dom.offsetHeight;
|
rlm@46
|
30456
|
rlm@46
|
30457 var cbot = ctop + rowEl.offsetHeight;
|
rlm@46
|
30458
|
rlm@46
|
30459 var ch = c.clientHeight;
|
rlm@46
|
30460 var stop = parseInt(c.scrollTop, 10);
|
rlm@46
|
30461 var sbot = stop + ch;
|
rlm@46
|
30462
|
rlm@46
|
30463 if(ctop < stop){
|
rlm@46
|
30464 c.scrollTop = ctop;
|
rlm@46
|
30465 }else if(cbot > sbot){
|
rlm@46
|
30466 c.scrollTop = cbot-ch;
|
rlm@46
|
30467 }
|
rlm@46
|
30468
|
rlm@46
|
30469 if(hscroll !== false){
|
rlm@46
|
30470 var cleft = parseInt(cellEl.offsetLeft, 10);
|
rlm@46
|
30471 var cright = cleft + cellEl.offsetWidth;
|
rlm@46
|
30472
|
rlm@46
|
30473 var sleft = parseInt(c.scrollLeft, 10);
|
rlm@46
|
30474 var sright = sleft + c.clientWidth;
|
rlm@46
|
30475 if(cleft < sleft){
|
rlm@46
|
30476 c.scrollLeft = cleft;
|
rlm@46
|
30477 }else if(cright > sright){
|
rlm@46
|
30478 c.scrollLeft = cright-c.clientWidth;
|
rlm@46
|
30479 }
|
rlm@46
|
30480 }
|
rlm@46
|
30481 return cellEl ? Ext.fly(cellEl).getXY() : [c.scrollLeft, Ext.fly(rowEl).getY()];
|
rlm@46
|
30482 },
|
rlm@46
|
30483
|
rlm@46
|
30484 insertRows : function(dm, firstRow, lastRow, isUpdate){
|
rlm@46
|
30485 if(!isUpdate && firstRow === 0 && lastRow == dm.getCount()-1){
|
rlm@46
|
30486 this.refresh();
|
rlm@46
|
30487 }else{
|
rlm@46
|
30488 if(!isUpdate){
|
rlm@46
|
30489 this.fireEvent("beforerowsinserted", this, firstRow, lastRow);
|
rlm@46
|
30490 }
|
rlm@46
|
30491 var html = this.renderRows(firstRow, lastRow);
|
rlm@46
|
30492 var before = this.getRow(firstRow);
|
rlm@46
|
30493 if(before){
|
rlm@46
|
30494 Ext.DomHelper.insertHtml('beforeBegin', before, html);
|
rlm@46
|
30495 }else{
|
rlm@46
|
30496 Ext.DomHelper.insertHtml('beforeEnd', this.mainBody.dom, html);
|
rlm@46
|
30497 }
|
rlm@46
|
30498 if(!isUpdate){
|
rlm@46
|
30499 this.fireEvent("rowsinserted", this, firstRow, lastRow);
|
rlm@46
|
30500 this.processRows(firstRow);
|
rlm@46
|
30501 }
|
rlm@46
|
30502 }
|
rlm@46
|
30503 },
|
rlm@46
|
30504
|
rlm@46
|
30505 deleteRows : function(dm, firstRow, lastRow){
|
rlm@46
|
30506 if(dm.getRowCount()<1){
|
rlm@46
|
30507 this.refresh();
|
rlm@46
|
30508 }else{
|
rlm@46
|
30509 this.fireEvent("beforerowsdeleted", this, firstRow, lastRow);
|
rlm@46
|
30510
|
rlm@46
|
30511 this.removeRows(firstRow, lastRow);
|
rlm@46
|
30512
|
rlm@46
|
30513 this.processRows(firstRow);
|
rlm@46
|
30514 this.fireEvent("rowsdeleted", this, firstRow, lastRow);
|
rlm@46
|
30515 }
|
rlm@46
|
30516 },
|
rlm@46
|
30517
|
rlm@46
|
30518 getColumnStyle : function(col, isHeader){
|
rlm@46
|
30519 var style = !isHeader ? (this.cm.config[col].css || '') : '';
|
rlm@46
|
30520 style += 'width:'+this.getColumnWidth(col)+';';
|
rlm@46
|
30521 if(this.cm.isHidden(col)){
|
rlm@46
|
30522 style += 'display:none;';
|
rlm@46
|
30523 }
|
rlm@46
|
30524 var align = this.cm.config[col].align;
|
rlm@46
|
30525 if(align){
|
rlm@46
|
30526 style += 'text-align:'+align+';';
|
rlm@46
|
30527 }
|
rlm@46
|
30528 return style;
|
rlm@46
|
30529 },
|
rlm@46
|
30530
|
rlm@46
|
30531 getColumnWidth : function(col){
|
rlm@46
|
30532 var w = this.cm.getColumnWidth(col);
|
rlm@46
|
30533 if(typeof w == 'number'){
|
rlm@46
|
30534 return (Ext.isBorderBox ? w : (w-this.borderWidth > 0 ? w-this.borderWidth:0)) + 'px';
|
rlm@46
|
30535 }
|
rlm@46
|
30536 return w;
|
rlm@46
|
30537 },
|
rlm@46
|
30538
|
rlm@46
|
30539 getTotalWidth : function(){
|
rlm@46
|
30540 return this.cm.getTotalWidth()+'px';
|
rlm@46
|
30541 },
|
rlm@46
|
30542
|
rlm@46
|
30543 fitColumns : function(preventRefresh, onlyExpand, omitColumn){
|
rlm@46
|
30544 var cm = this.cm, leftOver, dist, i;
|
rlm@46
|
30545 var tw = cm.getTotalWidth(false);
|
rlm@46
|
30546 var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
|
rlm@46
|
30547
|
rlm@46
|
30548 if(aw < 20){ return;
|
rlm@46
|
30549 }
|
rlm@46
|
30550 var extra = aw - tw;
|
rlm@46
|
30551
|
rlm@46
|
30552 if(extra === 0){
|
rlm@46
|
30553 return false;
|
rlm@46
|
30554 }
|
rlm@46
|
30555
|
rlm@46
|
30556 var vc = cm.getColumnCount(true);
|
rlm@46
|
30557 var ac = vc-(typeof omitColumn == 'number' ? 1 : 0);
|
rlm@46
|
30558 if(ac === 0){
|
rlm@46
|
30559 ac = 1;
|
rlm@46
|
30560 omitColumn = undefined;
|
rlm@46
|
30561 }
|
rlm@46
|
30562 var colCount = cm.getColumnCount();
|
rlm@46
|
30563 var cols = [];
|
rlm@46
|
30564 var extraCol = 0;
|
rlm@46
|
30565 var width = 0;
|
rlm@46
|
30566 var w;
|
rlm@46
|
30567 for (i = 0; i < colCount; i++){
|
rlm@46
|
30568 if(!cm.isHidden(i) && !cm.isFixed(i) && i !== omitColumn){
|
rlm@46
|
30569 w = cm.getColumnWidth(i);
|
rlm@46
|
30570 cols.push(i);
|
rlm@46
|
30571 extraCol = i;
|
rlm@46
|
30572 cols.push(w);
|
rlm@46
|
30573 width += w;
|
rlm@46
|
30574 }
|
rlm@46
|
30575 }
|
rlm@46
|
30576 var frac = (aw - cm.getTotalWidth())/width;
|
rlm@46
|
30577 while (cols.length){
|
rlm@46
|
30578 w = cols.pop();
|
rlm@46
|
30579 i = cols.pop();
|
rlm@46
|
30580 cm.setColumnWidth(i, Math.max(this.grid.minColumnWidth, Math.floor(w + w*frac)), true);
|
rlm@46
|
30581 }
|
rlm@46
|
30582
|
rlm@46
|
30583 if((tw = cm.getTotalWidth(false)) > aw){
|
rlm@46
|
30584 var adjustCol = ac != vc ? omitColumn : extraCol;
|
rlm@46
|
30585 cm.setColumnWidth(adjustCol, Math.max(1,
|
rlm@46
|
30586 cm.getColumnWidth(adjustCol)- (tw-aw)), true);
|
rlm@46
|
30587 }
|
rlm@46
|
30588
|
rlm@46
|
30589 if(preventRefresh !== true){
|
rlm@46
|
30590 this.updateAllColumnWidths();
|
rlm@46
|
30591 }
|
rlm@46
|
30592
|
rlm@46
|
30593
|
rlm@46
|
30594 return true;
|
rlm@46
|
30595 },
|
rlm@46
|
30596
|
rlm@46
|
30597 autoExpand : function(preventUpdate){
|
rlm@46
|
30598 var g = this.grid, cm = this.cm;
|
rlm@46
|
30599 if(!this.userResized && g.autoExpandColumn){
|
rlm@46
|
30600 var tw = cm.getTotalWidth(false);
|
rlm@46
|
30601 var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
|
rlm@46
|
30602 if(tw != aw){
|
rlm@46
|
30603 var ci = cm.getIndexById(g.autoExpandColumn);
|
rlm@46
|
30604 var currentWidth = cm.getColumnWidth(ci);
|
rlm@46
|
30605 var cw = Math.min(Math.max(((aw-tw)+currentWidth), g.autoExpandMin), g.autoExpandMax);
|
rlm@46
|
30606 if(cw != currentWidth){
|
rlm@46
|
30607 cm.setColumnWidth(ci, cw, true);
|
rlm@46
|
30608 if(preventUpdate !== true){
|
rlm@46
|
30609 this.updateColumnWidth(ci, cw);
|
rlm@46
|
30610 }
|
rlm@46
|
30611 }
|
rlm@46
|
30612 }
|
rlm@46
|
30613 }
|
rlm@46
|
30614 },
|
rlm@46
|
30615
|
rlm@46
|
30616 getColumnData : function(){
|
rlm@46
|
30617 var cs = [], cm = this.cm, colCount = cm.getColumnCount();
|
rlm@46
|
30618 for(var i = 0; i < colCount; i++){
|
rlm@46
|
30619 var name = cm.getDataIndex(i);
|
rlm@46
|
30620 cs[i] = {
|
rlm@46
|
30621 name : (typeof name == 'undefined' ? this.ds.fields.get(i).name : name),
|
rlm@46
|
30622 renderer : cm.getRenderer(i),
|
rlm@46
|
30623 id : cm.getColumnId(i),
|
rlm@46
|
30624 style : this.getColumnStyle(i)
|
rlm@46
|
30625 };
|
rlm@46
|
30626 }
|
rlm@46
|
30627 return cs;
|
rlm@46
|
30628 },
|
rlm@46
|
30629
|
rlm@46
|
30630 renderRows : function(startRow, endRow){
|
rlm@46
|
30631 var g = this.grid, cm = g.colModel, ds = g.store, stripe = g.stripeRows;
|
rlm@46
|
30632 var colCount = cm.getColumnCount();
|
rlm@46
|
30633
|
rlm@46
|
30634 if(ds.getCount() < 1){
|
rlm@46
|
30635 return "";
|
rlm@46
|
30636 }
|
rlm@46
|
30637
|
rlm@46
|
30638 var cs = this.getColumnData();
|
rlm@46
|
30639
|
rlm@46
|
30640 startRow = startRow || 0;
|
rlm@46
|
30641 endRow = typeof endRow == "undefined"? ds.getCount()-1 : endRow;
|
rlm@46
|
30642
|
rlm@46
|
30643 var rs = ds.getRange(startRow, endRow);
|
rlm@46
|
30644
|
rlm@46
|
30645 return this.doRender(cs, rs, ds, startRow, colCount, stripe);
|
rlm@46
|
30646 },
|
rlm@46
|
30647
|
rlm@46
|
30648 renderBody : function(){
|
rlm@46
|
30649 var markup = this.renderRows();
|
rlm@46
|
30650 return this.templates.body.apply({rows: markup});
|
rlm@46
|
30651 },
|
rlm@46
|
30652
|
rlm@46
|
30653 refreshRow : function(record){
|
rlm@46
|
30654 var ds = this.ds, index;
|
rlm@46
|
30655 if(typeof record == 'number'){
|
rlm@46
|
30656 index = record;
|
rlm@46
|
30657 record = ds.getAt(index);
|
rlm@46
|
30658 }else{
|
rlm@46
|
30659 index = ds.indexOf(record);
|
rlm@46
|
30660 }
|
rlm@46
|
30661 var cls = [];
|
rlm@46
|
30662 this.insertRows(ds, index, index, true);
|
rlm@46
|
30663 this.getRow(index).rowIndex = index;
|
rlm@46
|
30664 this.onRemove(ds, record, index+1, true);
|
rlm@46
|
30665 this.fireEvent("rowupdated", this, index, record);
|
rlm@46
|
30666 },
|
rlm@46
|
30667
|
rlm@46
|
30668
|
rlm@46
|
30669 refresh : function(headersToo){
|
rlm@46
|
30670 this.fireEvent("beforerefresh", this);
|
rlm@46
|
30671 this.grid.stopEditing(true);
|
rlm@46
|
30672
|
rlm@46
|
30673 var result = this.renderBody();
|
rlm@46
|
30674 this.mainBody.update(result);
|
rlm@46
|
30675
|
rlm@46
|
30676 if(headersToo === true){
|
rlm@46
|
30677 this.updateHeaders();
|
rlm@46
|
30678 this.updateHeaderSortState();
|
rlm@46
|
30679 }
|
rlm@46
|
30680 this.processRows(0, true);
|
rlm@46
|
30681 this.layout();
|
rlm@46
|
30682 this.applyEmptyText();
|
rlm@46
|
30683 this.fireEvent("refresh", this);
|
rlm@46
|
30684 },
|
rlm@46
|
30685
|
rlm@46
|
30686 applyEmptyText : function(){
|
rlm@46
|
30687 if(this.emptyText && !this.hasRows()){
|
rlm@46
|
30688 this.mainBody.update('<div class="x-grid-empty">' + this.emptyText + '</div>');
|
rlm@46
|
30689 }
|
rlm@46
|
30690 },
|
rlm@46
|
30691
|
rlm@46
|
30692 updateHeaderSortState : function(){
|
rlm@46
|
30693 var state = this.ds.getSortState();
|
rlm@46
|
30694 if(!state){
|
rlm@46
|
30695 return;
|
rlm@46
|
30696 }
|
rlm@46
|
30697 if(!this.sortState || (this.sortState.field != state.field || this.sortState.direction != state.direction)){
|
rlm@46
|
30698 this.grid.fireEvent('sortchange', this.grid, state);
|
rlm@46
|
30699 }
|
rlm@46
|
30700 this.sortState = state;
|
rlm@46
|
30701 var sortColumn = this.cm.findColumnIndex(state.field);
|
rlm@46
|
30702 if(sortColumn != -1){
|
rlm@46
|
30703 var sortDir = state.direction;
|
rlm@46
|
30704 this.updateSortIcon(sortColumn, sortDir);
|
rlm@46
|
30705 }
|
rlm@46
|
30706 },
|
rlm@46
|
30707
|
rlm@46
|
30708 destroy : function(){
|
rlm@46
|
30709 if(this.colMenu){
|
rlm@46
|
30710 this.colMenu.removeAll();
|
rlm@46
|
30711 Ext.menu.MenuMgr.unregister(this.colMenu);
|
rlm@46
|
30712 this.colMenu.getEl().remove();
|
rlm@46
|
30713 delete this.colMenu;
|
rlm@46
|
30714 }
|
rlm@46
|
30715 if(this.hmenu){
|
rlm@46
|
30716 this.hmenu.removeAll();
|
rlm@46
|
30717 Ext.menu.MenuMgr.unregister(this.hmenu);
|
rlm@46
|
30718 this.hmenu.getEl().remove();
|
rlm@46
|
30719 delete this.hmenu;
|
rlm@46
|
30720 }
|
rlm@46
|
30721 if(this.grid.enableColumnMove){
|
rlm@46
|
30722 var dds = Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
|
rlm@46
|
30723 if(dds){
|
rlm@46
|
30724 for(var dd in dds){
|
rlm@46
|
30725 if(!dds[dd].config.isTarget && dds[dd].dragElId){
|
rlm@46
|
30726 var elid = dds[dd].dragElId;
|
rlm@46
|
30727 dds[dd].unreg();
|
rlm@46
|
30728 Ext.get(elid).remove();
|
rlm@46
|
30729 } else if(dds[dd].config.isTarget){
|
rlm@46
|
30730 dds[dd].proxyTop.remove();
|
rlm@46
|
30731 dds[dd].proxyBottom.remove();
|
rlm@46
|
30732 dds[dd].unreg();
|
rlm@46
|
30733 }
|
rlm@46
|
30734 if(Ext.dd.DDM.locationCache[dd]){
|
rlm@46
|
30735 delete Ext.dd.DDM.locationCache[dd];
|
rlm@46
|
30736 }
|
rlm@46
|
30737 }
|
rlm@46
|
30738 delete Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
|
rlm@46
|
30739 }
|
rlm@46
|
30740 }
|
rlm@46
|
30741
|
rlm@46
|
30742 Ext.destroy(this.resizeMarker, this.resizeProxy);
|
rlm@46
|
30743
|
rlm@46
|
30744 if(this.dragZone){
|
rlm@46
|
30745 this.dragZone.unreg();
|
rlm@46
|
30746 }
|
rlm@46
|
30747
|
rlm@46
|
30748 this.initData(null, null);
|
rlm@46
|
30749 Ext.EventManager.removeResizeListener(this.onWindowResize, this);
|
rlm@46
|
30750 },
|
rlm@46
|
30751
|
rlm@46
|
30752 onDenyColumnHide : function(){
|
rlm@46
|
30753
|
rlm@46
|
30754 },
|
rlm@46
|
30755
|
rlm@46
|
30756 render : function(){
|
rlm@46
|
30757
|
rlm@46
|
30758 var cm = this.cm;
|
rlm@46
|
30759 var colCount = cm.getColumnCount();
|
rlm@46
|
30760
|
rlm@46
|
30761 if(this.autoFill){
|
rlm@46
|
30762 this.fitColumns(true, true);
|
rlm@46
|
30763 }else if(this.forceFit){
|
rlm@46
|
30764 this.fitColumns(true, false);
|
rlm@46
|
30765 }else if(this.grid.autoExpandColumn){
|
rlm@46
|
30766 this.autoExpand(true);
|
rlm@46
|
30767 }
|
rlm@46
|
30768
|
rlm@46
|
30769 this.renderUI();
|
rlm@46
|
30770 },
|
rlm@46
|
30771
|
rlm@46
|
30772
|
rlm@46
|
30773 initData : function(ds, cm){
|
rlm@46
|
30774 if(this.ds){
|
rlm@46
|
30775 this.ds.un("load", this.onLoad, this);
|
rlm@46
|
30776 this.ds.un("datachanged", this.onDataChange, this);
|
rlm@46
|
30777 this.ds.un("add", this.onAdd, this);
|
rlm@46
|
30778 this.ds.un("remove", this.onRemove, this);
|
rlm@46
|
30779 this.ds.un("update", this.onUpdate, this);
|
rlm@46
|
30780 this.ds.un("clear", this.onClear, this);
|
rlm@46
|
30781 }
|
rlm@46
|
30782 if(ds){
|
rlm@46
|
30783 ds.on("load", this.onLoad, this);
|
rlm@46
|
30784 ds.on("datachanged", this.onDataChange, this);
|
rlm@46
|
30785 ds.on("add", this.onAdd, this);
|
rlm@46
|
30786 ds.on("remove", this.onRemove, this);
|
rlm@46
|
30787 ds.on("update", this.onUpdate, this);
|
rlm@46
|
30788 ds.on("clear", this.onClear, this);
|
rlm@46
|
30789 }
|
rlm@46
|
30790 this.ds = ds;
|
rlm@46
|
30791
|
rlm@46
|
30792 if(this.cm){
|
rlm@46
|
30793 this.cm.un("configchange", this.onColConfigChange, this);
|
rlm@46
|
30794 this.cm.un("widthchange", this.onColWidthChange, this);
|
rlm@46
|
30795 this.cm.un("headerchange", this.onHeaderChange, this);
|
rlm@46
|
30796 this.cm.un("hiddenchange", this.onHiddenChange, this);
|
rlm@46
|
30797 this.cm.un("columnmoved", this.onColumnMove, this);
|
rlm@46
|
30798 this.cm.un("columnlockchange", this.onColumnLock, this);
|
rlm@46
|
30799 }
|
rlm@46
|
30800 if(cm){
|
rlm@46
|
30801 cm.on("configchange", this.onColConfigChange, this);
|
rlm@46
|
30802 cm.on("widthchange", this.onColWidthChange, this);
|
rlm@46
|
30803 cm.on("headerchange", this.onHeaderChange, this);
|
rlm@46
|
30804 cm.on("hiddenchange", this.onHiddenChange, this);
|
rlm@46
|
30805 cm.on("columnmoved", this.onColumnMove, this);
|
rlm@46
|
30806 cm.on("columnlockchange", this.onColumnLock, this);
|
rlm@46
|
30807 }
|
rlm@46
|
30808 this.cm = cm;
|
rlm@46
|
30809 },
|
rlm@46
|
30810
|
rlm@46
|
30811 onDataChange : function(){
|
rlm@46
|
30812 this.refresh();
|
rlm@46
|
30813 this.updateHeaderSortState();
|
rlm@46
|
30814 },
|
rlm@46
|
30815
|
rlm@46
|
30816 onClear : function(){
|
rlm@46
|
30817 this.refresh();
|
rlm@46
|
30818 },
|
rlm@46
|
30819
|
rlm@46
|
30820 onUpdate : function(ds, record){
|
rlm@46
|
30821 this.refreshRow(record);
|
rlm@46
|
30822 },
|
rlm@46
|
30823
|
rlm@46
|
30824 onAdd : function(ds, records, index){
|
rlm@46
|
30825 this.insertRows(ds, index, index + (records.length-1));
|
rlm@46
|
30826 },
|
rlm@46
|
30827
|
rlm@46
|
30828 onRemove : function(ds, record, index, isUpdate){
|
rlm@46
|
30829 if(isUpdate !== true){
|
rlm@46
|
30830 this.fireEvent("beforerowremoved", this, index, record);
|
rlm@46
|
30831 }
|
rlm@46
|
30832 this.removeRow(index);
|
rlm@46
|
30833 if(isUpdate !== true){
|
rlm@46
|
30834 this.processRows(index);
|
rlm@46
|
30835 this.applyEmptyText();
|
rlm@46
|
30836 this.fireEvent("rowremoved", this, index, record);
|
rlm@46
|
30837 }
|
rlm@46
|
30838 },
|
rlm@46
|
30839
|
rlm@46
|
30840 onLoad : function(){
|
rlm@46
|
30841 this.scrollToTop();
|
rlm@46
|
30842 },
|
rlm@46
|
30843
|
rlm@46
|
30844 onColWidthChange : function(cm, col, width){
|
rlm@46
|
30845 this.updateColumnWidth(col, width);
|
rlm@46
|
30846 },
|
rlm@46
|
30847
|
rlm@46
|
30848 onHeaderChange : function(cm, col, text){
|
rlm@46
|
30849 this.updateHeaders();
|
rlm@46
|
30850 },
|
rlm@46
|
30851
|
rlm@46
|
30852 onHiddenChange : function(cm, col, hidden){
|
rlm@46
|
30853 this.updateColumnHidden(col, hidden);
|
rlm@46
|
30854 },
|
rlm@46
|
30855
|
rlm@46
|
30856 onColumnMove : function(cm, oldIndex, newIndex){
|
rlm@46
|
30857 this.indexMap = null;
|
rlm@46
|
30858 var s = this.getScrollState();
|
rlm@46
|
30859 this.refresh(true);
|
rlm@46
|
30860 this.restoreScroll(s);
|
rlm@46
|
30861 this.afterMove(newIndex);
|
rlm@46
|
30862 },
|
rlm@46
|
30863
|
rlm@46
|
30864 onColConfigChange : function(){
|
rlm@46
|
30865 delete this.lastViewWidth;
|
rlm@46
|
30866 this.indexMap = null;
|
rlm@46
|
30867 this.refresh(true);
|
rlm@46
|
30868 },
|
rlm@46
|
30869
|
rlm@46
|
30870
|
rlm@46
|
30871 initUI : function(grid){
|
rlm@46
|
30872 grid.on("headerclick", this.onHeaderClick, this);
|
rlm@46
|
30873
|
rlm@46
|
30874 if(grid.trackMouseOver){
|
rlm@46
|
30875 grid.on("mouseover", this.onRowOver, this);
|
rlm@46
|
30876 grid.on("mouseout", this.onRowOut, this);
|
rlm@46
|
30877 }
|
rlm@46
|
30878 },
|
rlm@46
|
30879
|
rlm@46
|
30880 initEvents : function(){
|
rlm@46
|
30881
|
rlm@46
|
30882 },
|
rlm@46
|
30883
|
rlm@46
|
30884 onHeaderClick : function(g, index){
|
rlm@46
|
30885 if(this.headersDisabled || !this.cm.isSortable(index)){
|
rlm@46
|
30886 return;
|
rlm@46
|
30887 }
|
rlm@46
|
30888 g.stopEditing(true);
|
rlm@46
|
30889 g.store.sort(this.cm.getDataIndex(index));
|
rlm@46
|
30890 },
|
rlm@46
|
30891
|
rlm@46
|
30892 onRowOver : function(e, t){
|
rlm@46
|
30893 var row;
|
rlm@46
|
30894 if((row = this.findRowIndex(t)) !== false){
|
rlm@46
|
30895 this.addRowClass(row, "x-grid3-row-over");
|
rlm@46
|
30896 }
|
rlm@46
|
30897 },
|
rlm@46
|
30898
|
rlm@46
|
30899 onRowOut : function(e, t){
|
rlm@46
|
30900 var row;
|
rlm@46
|
30901 if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){
|
rlm@46
|
30902 this.removeRowClass(row, "x-grid3-row-over");
|
rlm@46
|
30903 }
|
rlm@46
|
30904 },
|
rlm@46
|
30905
|
rlm@46
|
30906 handleWheel : function(e){
|
rlm@46
|
30907 e.stopPropagation();
|
rlm@46
|
30908 },
|
rlm@46
|
30909
|
rlm@46
|
30910 onRowSelect : function(row){
|
rlm@46
|
30911 this.addRowClass(row, "x-grid3-row-selected");
|
rlm@46
|
30912 },
|
rlm@46
|
30913
|
rlm@46
|
30914 onRowDeselect : function(row){
|
rlm@46
|
30915 this.removeRowClass(row, "x-grid3-row-selected");
|
rlm@46
|
30916 },
|
rlm@46
|
30917
|
rlm@46
|
30918 onCellSelect : function(row, col){
|
rlm@46
|
30919 var cell = this.getCell(row, col);
|
rlm@46
|
30920 if(cell){
|
rlm@46
|
30921 this.fly(cell).addClass("x-grid3-cell-selected");
|
rlm@46
|
30922 }
|
rlm@46
|
30923 },
|
rlm@46
|
30924
|
rlm@46
|
30925 onCellDeselect : function(row, col){
|
rlm@46
|
30926 var cell = this.getCell(row, col);
|
rlm@46
|
30927 if(cell){
|
rlm@46
|
30928 this.fly(cell).removeClass("x-grid3-cell-selected");
|
rlm@46
|
30929 }
|
rlm@46
|
30930 },
|
rlm@46
|
30931
|
rlm@46
|
30932 onColumnSplitterMoved : function(i, w){
|
rlm@46
|
30933 this.userResized = true;
|
rlm@46
|
30934 var cm = this.grid.colModel;
|
rlm@46
|
30935 cm.setColumnWidth(i, w, true);
|
rlm@46
|
30936
|
rlm@46
|
30937 if(this.forceFit){
|
rlm@46
|
30938 this.fitColumns(true, false, i);
|
rlm@46
|
30939 this.updateAllColumnWidths();
|
rlm@46
|
30940 }else{
|
rlm@46
|
30941 this.updateColumnWidth(i, w);
|
rlm@46
|
30942 }
|
rlm@46
|
30943
|
rlm@46
|
30944 this.grid.fireEvent("columnresize", i, w);
|
rlm@46
|
30945 },
|
rlm@46
|
30946
|
rlm@46
|
30947 handleHdMenuClick : function(item){
|
rlm@46
|
30948 var index = this.hdCtxIndex;
|
rlm@46
|
30949 var cm = this.cm, ds = this.ds;
|
rlm@46
|
30950 switch(item.id){
|
rlm@46
|
30951 case "asc":
|
rlm@46
|
30952 ds.sort(cm.getDataIndex(index), "ASC");
|
rlm@46
|
30953 break;
|
rlm@46
|
30954 case "desc":
|
rlm@46
|
30955 ds.sort(cm.getDataIndex(index), "DESC");
|
rlm@46
|
30956 break;
|
rlm@46
|
30957 default:
|
rlm@46
|
30958 index = cm.getIndexById(item.id.substr(4));
|
rlm@46
|
30959 if(index != -1){
|
rlm@46
|
30960 if(item.checked && cm.getColumnsBy(this.isHideableColumn, this).length <= 1){
|
rlm@46
|
30961 this.onDenyColumnHide();
|
rlm@46
|
30962 return false;
|
rlm@46
|
30963 }
|
rlm@46
|
30964 cm.setHidden(index, item.checked);
|
rlm@46
|
30965 }
|
rlm@46
|
30966 }
|
rlm@46
|
30967 return true;
|
rlm@46
|
30968 },
|
rlm@46
|
30969
|
rlm@46
|
30970 isHideableColumn : function(c){
|
rlm@46
|
30971 return !c.hidden && !c.fixed;
|
rlm@46
|
30972 },
|
rlm@46
|
30973
|
rlm@46
|
30974 beforeColMenuShow : function(){
|
rlm@46
|
30975 var cm = this.cm, colCount = cm.getColumnCount();
|
rlm@46
|
30976 this.colMenu.removeAll();
|
rlm@46
|
30977 for(var i = 0; i < colCount; i++){
|
rlm@46
|
30978 if(cm.config[i].fixed !== true && cm.config[i].hideable !== false){
|
rlm@46
|
30979 this.colMenu.add(new Ext.menu.CheckItem({
|
rlm@46
|
30980 id: "col-"+cm.getColumnId(i),
|
rlm@46
|
30981 text: cm.getColumnHeader(i),
|
rlm@46
|
30982 checked: !cm.isHidden(i),
|
rlm@46
|
30983 hideOnClick:false,
|
rlm@46
|
30984 disabled: cm.config[i].hideable === false
|
rlm@46
|
30985 }));
|
rlm@46
|
30986 }
|
rlm@46
|
30987 }
|
rlm@46
|
30988 },
|
rlm@46
|
30989
|
rlm@46
|
30990 handleHdDown : function(e, t){
|
rlm@46
|
30991 if(Ext.fly(t).hasClass('x-grid3-hd-btn')){
|
rlm@46
|
30992 e.stopEvent();
|
rlm@46
|
30993 var hd = this.findHeaderCell(t);
|
rlm@46
|
30994 Ext.fly(hd).addClass('x-grid3-hd-menu-open');
|
rlm@46
|
30995 var index = this.getCellIndex(hd);
|
rlm@46
|
30996 this.hdCtxIndex = index;
|
rlm@46
|
30997 var ms = this.hmenu.items, cm = this.cm;
|
rlm@46
|
30998 ms.get("asc").setDisabled(!cm.isSortable(index));
|
rlm@46
|
30999 ms.get("desc").setDisabled(!cm.isSortable(index));
|
rlm@46
|
31000 this.hmenu.on("hide", function(){
|
rlm@46
|
31001 Ext.fly(hd).removeClass('x-grid3-hd-menu-open');
|
rlm@46
|
31002 }, this, {single:true});
|
rlm@46
|
31003 this.hmenu.show(t, "tl-bl?");
|
rlm@46
|
31004 }
|
rlm@46
|
31005 },
|
rlm@46
|
31006
|
rlm@46
|
31007 handleHdOver : function(e, t){
|
rlm@46
|
31008 var hd = this.findHeaderCell(t);
|
rlm@46
|
31009 if(hd && !this.headersDisabled){
|
rlm@46
|
31010 this.activeHd = hd;
|
rlm@46
|
31011 this.activeHdIndex = this.getCellIndex(hd);
|
rlm@46
|
31012 var fly = this.fly(hd);
|
rlm@46
|
31013 this.activeHdRegion = fly.getRegion();
|
rlm@46
|
31014 if(!this.cm.isMenuDisabled(this.activeHdIndex)){
|
rlm@46
|
31015 fly.addClass("x-grid3-hd-over");
|
rlm@46
|
31016 this.activeHdBtn = fly.child('.x-grid3-hd-btn');
|
rlm@46
|
31017 if(this.activeHdBtn){
|
rlm@46
|
31018 this.activeHdBtn.dom.style.height = (hd.firstChild.offsetHeight-1)+'px';
|
rlm@46
|
31019 }
|
rlm@46
|
31020 }
|
rlm@46
|
31021 }
|
rlm@46
|
31022 },
|
rlm@46
|
31023
|
rlm@46
|
31024 handleHdMove : function(e, t){
|
rlm@46
|
31025 if(this.activeHd && !this.headersDisabled){
|
rlm@46
|
31026 var hw = this.splitHandleWidth || 5;
|
rlm@46
|
31027 var r = this.activeHdRegion;
|
rlm@46
|
31028 var x = e.getPageX();
|
rlm@46
|
31029 var ss = this.activeHd.style;
|
rlm@46
|
31030 if(x - r.left <= hw && this.cm.isResizable(this.activeHdIndex-1)){
|
rlm@46
|
31031 ss.cursor = Ext.isAir ? 'move' : Ext.isSafari ? 'e-resize' : 'col-resize'; }else if(r.right - x <= (!this.activeHdBtn ? hw : 2) && this.cm.isResizable(this.activeHdIndex)){
|
rlm@46
|
31032 ss.cursor = Ext.isAir ? 'move' : Ext.isSafari ? 'w-resize' : 'col-resize';
|
rlm@46
|
31033 }else{
|
rlm@46
|
31034 ss.cursor = '';
|
rlm@46
|
31035 }
|
rlm@46
|
31036 }
|
rlm@46
|
31037 },
|
rlm@46
|
31038
|
rlm@46
|
31039 handleHdOut : function(e, t){
|
rlm@46
|
31040 var hd = this.findHeaderCell(t);
|
rlm@46
|
31041 if(hd && (!Ext.isIE || !e.within(hd, true))){
|
rlm@46
|
31042 this.activeHd = null;
|
rlm@46
|
31043 this.fly(hd).removeClass("x-grid3-hd-over");
|
rlm@46
|
31044 hd.style.cursor = '';
|
rlm@46
|
31045 }
|
rlm@46
|
31046 },
|
rlm@46
|
31047
|
rlm@46
|
31048 hasRows : function(){
|
rlm@46
|
31049 var fc = this.mainBody.dom.firstChild;
|
rlm@46
|
31050 return fc && fc.className != 'x-grid-empty';
|
rlm@46
|
31051 },
|
rlm@46
|
31052
|
rlm@46
|
31053 bind : function(d, c){
|
rlm@46
|
31054 this.initData(d, c);
|
rlm@46
|
31055 }
|
rlm@46
|
31056 });
|
rlm@46
|
31057
|
rlm@46
|
31058
|
rlm@46
|
31059 Ext.grid.GridView.SplitDragZone = function(grid, hd){
|
rlm@46
|
31060 this.grid = grid;
|
rlm@46
|
31061 this.view = grid.getView();
|
rlm@46
|
31062 this.marker = this.view.resizeMarker;
|
rlm@46
|
31063 this.proxy = this.view.resizeProxy;
|
rlm@46
|
31064 Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this, hd,
|
rlm@46
|
31065 "gridSplitters" + this.grid.getGridEl().id, {
|
rlm@46
|
31066 dragElId : Ext.id(this.proxy.dom), resizeFrame:false
|
rlm@46
|
31067 });
|
rlm@46
|
31068 this.scroll = false;
|
rlm@46
|
31069 this.hw = this.view.splitHandleWidth || 5;
|
rlm@46
|
31070 };
|
rlm@46
|
31071 Ext.extend(Ext.grid.GridView.SplitDragZone, Ext.dd.DDProxy, {
|
rlm@46
|
31072
|
rlm@46
|
31073 b4StartDrag : function(x, y){
|
rlm@46
|
31074 this.view.headersDisabled = true;
|
rlm@46
|
31075 var h = this.view.mainWrap.getHeight();
|
rlm@46
|
31076 this.marker.setHeight(h);
|
rlm@46
|
31077 this.marker.show();
|
rlm@46
|
31078 this.marker.alignTo(this.view.getHeaderCell(this.cellIndex), 'tl-tl', [-2, 0]);
|
rlm@46
|
31079 this.proxy.setHeight(h);
|
rlm@46
|
31080 var w = this.cm.getColumnWidth(this.cellIndex);
|
rlm@46
|
31081 var minw = Math.max(w-this.grid.minColumnWidth, 0);
|
rlm@46
|
31082 this.resetConstraints();
|
rlm@46
|
31083 this.setXConstraint(minw, 1000);
|
rlm@46
|
31084 this.setYConstraint(0, 0);
|
rlm@46
|
31085 this.minX = x - minw;
|
rlm@46
|
31086 this.maxX = x + 1000;
|
rlm@46
|
31087 this.startPos = x;
|
rlm@46
|
31088 Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y);
|
rlm@46
|
31089 },
|
rlm@46
|
31090
|
rlm@46
|
31091
|
rlm@46
|
31092 handleMouseDown : function(e){
|
rlm@46
|
31093 var t = this.view.findHeaderCell(e.getTarget());
|
rlm@46
|
31094 if(t){
|
rlm@46
|
31095 var xy = this.view.fly(t).getXY(), x = xy[0], y = xy[1];
|
rlm@46
|
31096 var exy = e.getXY(), ex = exy[0], ey = exy[1];
|
rlm@46
|
31097 var w = t.offsetWidth, adjust = false;
|
rlm@46
|
31098 if((ex - x) <= this.hw){
|
rlm@46
|
31099 adjust = -1;
|
rlm@46
|
31100 }else if((x+w) - ex <= this.hw){
|
rlm@46
|
31101 adjust = 0;
|
rlm@46
|
31102 }
|
rlm@46
|
31103 if(adjust !== false){
|
rlm@46
|
31104 this.cm = this.grid.colModel;
|
rlm@46
|
31105 var ci = this.view.getCellIndex(t);
|
rlm@46
|
31106 if(adjust == -1){
|
rlm@46
|
31107 if (ci + adjust < 0) {
|
rlm@46
|
31108 return;
|
rlm@46
|
31109 }
|
rlm@46
|
31110 while(this.cm.isHidden(ci+adjust)){
|
rlm@46
|
31111 --adjust;
|
rlm@46
|
31112 if(ci+adjust < 0){
|
rlm@46
|
31113 return;
|
rlm@46
|
31114 }
|
rlm@46
|
31115 }
|
rlm@46
|
31116 }
|
rlm@46
|
31117 this.cellIndex = ci+adjust;
|
rlm@46
|
31118 this.split = t.dom;
|
rlm@46
|
31119 if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){
|
rlm@46
|
31120 Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this, arguments);
|
rlm@46
|
31121 }
|
rlm@46
|
31122 }else if(this.view.columnDrag){
|
rlm@46
|
31123 this.view.columnDrag.callHandleMouseDown(e);
|
rlm@46
|
31124 }
|
rlm@46
|
31125 }
|
rlm@46
|
31126 },
|
rlm@46
|
31127
|
rlm@46
|
31128 endDrag : function(e){
|
rlm@46
|
31129 this.marker.hide();
|
rlm@46
|
31130 var v = this.view;
|
rlm@46
|
31131 var endX = Math.max(this.minX, e.getPageX());
|
rlm@46
|
31132 var diff = endX - this.startPos;
|
rlm@46
|
31133 v.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff);
|
rlm@46
|
31134 setTimeout(function(){
|
rlm@46
|
31135 v.headersDisabled = false;
|
rlm@46
|
31136 }, 50);
|
rlm@46
|
31137 },
|
rlm@46
|
31138
|
rlm@46
|
31139 autoOffset : function(){
|
rlm@46
|
31140 this.setDelta(0,0);
|
rlm@46
|
31141 }
|
rlm@46
|
31142 });
|
rlm@46
|
31143
|
rlm@46
|
31144
|
rlm@46
|
31145 Ext.grid.GroupingView = Ext.extend(Ext.grid.GridView, {
|
rlm@46
|
31146
|
rlm@46
|
31147 hideGroupedColumn:false,
|
rlm@46
|
31148
|
rlm@46
|
31149 showGroupName:true,
|
rlm@46
|
31150
|
rlm@46
|
31151 startCollapsed:false,
|
rlm@46
|
31152
|
rlm@46
|
31153 enableGrouping:true,
|
rlm@46
|
31154
|
rlm@46
|
31155 enableGroupingMenu:true,
|
rlm@46
|
31156
|
rlm@46
|
31157 enableNoGroups:true,
|
rlm@46
|
31158
|
rlm@46
|
31159 emptyGroupText : '(None)',
|
rlm@46
|
31160
|
rlm@46
|
31161 ignoreAdd: false,
|
rlm@46
|
31162
|
rlm@46
|
31163 groupTextTpl : '{text}',
|
rlm@46
|
31164
|
rlm@46
|
31165
|
rlm@46
|
31166
|
rlm@46
|
31167
|
rlm@46
|
31168 gidSeed : 1000,
|
rlm@46
|
31169
|
rlm@46
|
31170
|
rlm@46
|
31171 initTemplates : function(){
|
rlm@46
|
31172 Ext.grid.GroupingView.superclass.initTemplates.call(this);
|
rlm@46
|
31173 this.state = {};
|
rlm@46
|
31174
|
rlm@46
|
31175 var sm = this.grid.getSelectionModel();
|
rlm@46
|
31176 sm.on(sm.selectRow ? 'beforerowselect' : 'beforecellselect',
|
rlm@46
|
31177 this.onBeforeRowSelect, this);
|
rlm@46
|
31178
|
rlm@46
|
31179 if(!this.startGroup){
|
rlm@46
|
31180 this.startGroup = new Ext.XTemplate(
|
rlm@46
|
31181 '<div id="{groupId}" class="x-grid-group {cls}">',
|
rlm@46
|
31182 '<div id="{groupId}-hd" class="x-grid-group-hd" style="{style}"><div>', this.groupTextTpl ,'</div></div>',
|
rlm@46
|
31183 '<div id="{groupId}-bd" class="x-grid-group-body">'
|
rlm@46
|
31184 );
|
rlm@46
|
31185 }
|
rlm@46
|
31186 this.startGroup.compile();
|
rlm@46
|
31187 this.endGroup = '</div></div>';
|
rlm@46
|
31188 },
|
rlm@46
|
31189
|
rlm@46
|
31190
|
rlm@46
|
31191 findGroup : function(el){
|
rlm@46
|
31192 return Ext.fly(el).up('.x-grid-group', this.mainBody.dom);
|
rlm@46
|
31193 },
|
rlm@46
|
31194
|
rlm@46
|
31195
|
rlm@46
|
31196 getGroups : function(){
|
rlm@46
|
31197 return this.hasRows() ? this.mainBody.dom.childNodes : [];
|
rlm@46
|
31198 },
|
rlm@46
|
31199
|
rlm@46
|
31200
|
rlm@46
|
31201 onAdd : function(){
|
rlm@46
|
31202 if(this.enableGrouping && !this.ignoreAdd){
|
rlm@46
|
31203 var ss = this.getScrollState();
|
rlm@46
|
31204 this.refresh();
|
rlm@46
|
31205 this.restoreScroll(ss);
|
rlm@46
|
31206 }else if(!this.enableGrouping){
|
rlm@46
|
31207 Ext.grid.GroupingView.superclass.onAdd.apply(this, arguments);
|
rlm@46
|
31208 }
|
rlm@46
|
31209 },
|
rlm@46
|
31210
|
rlm@46
|
31211
|
rlm@46
|
31212 onRemove : function(ds, record, index, isUpdate){
|
rlm@46
|
31213 Ext.grid.GroupingView.superclass.onRemove.apply(this, arguments);
|
rlm@46
|
31214 var g = document.getElementById(record._groupId);
|
rlm@46
|
31215 if(g && g.childNodes[1].childNodes.length < 1){
|
rlm@46
|
31216 Ext.removeNode(g);
|
rlm@46
|
31217 }
|
rlm@46
|
31218 this.applyEmptyText();
|
rlm@46
|
31219 },
|
rlm@46
|
31220
|
rlm@46
|
31221
|
rlm@46
|
31222 refreshRow : function(record){
|
rlm@46
|
31223 if(this.ds.getCount()==1){
|
rlm@46
|
31224 this.refresh();
|
rlm@46
|
31225 }else{
|
rlm@46
|
31226 this.isUpdating = true;
|
rlm@46
|
31227 Ext.grid.GroupingView.superclass.refreshRow.apply(this, arguments);
|
rlm@46
|
31228 this.isUpdating = false;
|
rlm@46
|
31229 }
|
rlm@46
|
31230 },
|
rlm@46
|
31231
|
rlm@46
|
31232
|
rlm@46
|
31233 beforeMenuShow : function(){
|
rlm@46
|
31234 var field = this.getGroupField();
|
rlm@46
|
31235 var g = this.hmenu.items.get('groupBy');
|
rlm@46
|
31236 if(g){
|
rlm@46
|
31237 g.setDisabled(this.cm.config[this.hdCtxIndex].groupable === false);
|
rlm@46
|
31238 }
|
rlm@46
|
31239 var s = this.hmenu.items.get('showGroups');
|
rlm@46
|
31240 if(s){
|
rlm@46
|
31241 s.setDisabled(!field && this.cm.config[this.hdCtxIndex].groupable === false);
|
rlm@46
|
31242 s.setChecked(!!field, true);
|
rlm@46
|
31243 }
|
rlm@46
|
31244 },
|
rlm@46
|
31245
|
rlm@46
|
31246
|
rlm@46
|
31247 renderUI : function(){
|
rlm@46
|
31248 Ext.grid.GroupingView.superclass.renderUI.call(this);
|
rlm@46
|
31249 this.mainBody.on('mousedown', this.interceptMouse, this);
|
rlm@46
|
31250
|
rlm@46
|
31251 if(this.enableGroupingMenu && this.hmenu){
|
rlm@46
|
31252 this.hmenu.add('-',{
|
rlm@46
|
31253 id:'groupBy',
|
rlm@46
|
31254 text: this.groupByText,
|
rlm@46
|
31255 handler: this.onGroupByClick,
|
rlm@46
|
31256 scope: this,
|
rlm@46
|
31257 iconCls:'x-group-by-icon'
|
rlm@46
|
31258 });
|
rlm@46
|
31259 if(this.enableNoGroups){
|
rlm@46
|
31260 this.hmenu.add({
|
rlm@46
|
31261 id:'showGroups',
|
rlm@46
|
31262 text: this.showGroupsText,
|
rlm@46
|
31263 checked: true,
|
rlm@46
|
31264 checkHandler: this.onShowGroupsClick,
|
rlm@46
|
31265 scope: this
|
rlm@46
|
31266 });
|
rlm@46
|
31267 }
|
rlm@46
|
31268 this.hmenu.on('beforeshow', this.beforeMenuShow, this);
|
rlm@46
|
31269 }
|
rlm@46
|
31270 },
|
rlm@46
|
31271
|
rlm@46
|
31272
|
rlm@46
|
31273 onGroupByClick : function(){
|
rlm@46
|
31274 this.grid.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));
|
rlm@46
|
31275 this.beforeMenuShow();
|
rlm@46
|
31276 },
|
rlm@46
|
31277
|
rlm@46
|
31278
|
rlm@46
|
31279 onShowGroupsClick : function(mi, checked){
|
rlm@46
|
31280 if(checked){
|
rlm@46
|
31281 this.onGroupByClick();
|
rlm@46
|
31282 }else{
|
rlm@46
|
31283 this.grid.store.clearGrouping();
|
rlm@46
|
31284 }
|
rlm@46
|
31285 },
|
rlm@46
|
31286
|
rlm@46
|
31287
|
rlm@46
|
31288 toggleGroup : function(group, expanded){
|
rlm@46
|
31289 this.grid.stopEditing(true);
|
rlm@46
|
31290 group = Ext.getDom(group);
|
rlm@46
|
31291 var gel = Ext.fly(group);
|
rlm@46
|
31292 expanded = expanded !== undefined ?
|
rlm@46
|
31293 expanded : gel.hasClass('x-grid-group-collapsed');
|
rlm@46
|
31294
|
rlm@46
|
31295 this.state[gel.dom.id] = expanded;
|
rlm@46
|
31296 gel[expanded ? 'removeClass' : 'addClass']('x-grid-group-collapsed');
|
rlm@46
|
31297 },
|
rlm@46
|
31298
|
rlm@46
|
31299
|
rlm@46
|
31300 toggleAllGroups : function(expanded){
|
rlm@46
|
31301 var groups = this.getGroups();
|
rlm@46
|
31302 for(var i = 0, len = groups.length; i < len; i++){
|
rlm@46
|
31303 this.toggleGroup(groups[i], expanded);
|
rlm@46
|
31304 }
|
rlm@46
|
31305 },
|
rlm@46
|
31306
|
rlm@46
|
31307
|
rlm@46
|
31308 expandAllGroups : function(){
|
rlm@46
|
31309 this.toggleAllGroups(true);
|
rlm@46
|
31310 },
|
rlm@46
|
31311
|
rlm@46
|
31312
|
rlm@46
|
31313 collapseAllGroups : function(){
|
rlm@46
|
31314 this.toggleAllGroups(false);
|
rlm@46
|
31315 },
|
rlm@46
|
31316
|
rlm@46
|
31317
|
rlm@46
|
31318 interceptMouse : function(e){
|
rlm@46
|
31319 var hd = e.getTarget('.x-grid-group-hd', this.mainBody);
|
rlm@46
|
31320 if(hd){
|
rlm@46
|
31321 e.stopEvent();
|
rlm@46
|
31322 this.toggleGroup(hd.parentNode);
|
rlm@46
|
31323 }
|
rlm@46
|
31324 },
|
rlm@46
|
31325
|
rlm@46
|
31326
|
rlm@46
|
31327 getGroup : function(v, r, groupRenderer, rowIndex, colIndex, ds){
|
rlm@46
|
31328 var g = groupRenderer ? groupRenderer(v, {}, r, rowIndex, colIndex, ds) : String(v);
|
rlm@46
|
31329 if(g === ''){
|
rlm@46
|
31330 g = this.cm.config[colIndex].emptyGroupText || this.emptyGroupText;
|
rlm@46
|
31331 }
|
rlm@46
|
31332 return g;
|
rlm@46
|
31333 },
|
rlm@46
|
31334
|
rlm@46
|
31335
|
rlm@46
|
31336 getGroupField : function(){
|
rlm@46
|
31337 return this.grid.store.getGroupState();
|
rlm@46
|
31338 },
|
rlm@46
|
31339
|
rlm@46
|
31340
|
rlm@46
|
31341 renderRows : function(){
|
rlm@46
|
31342 var groupField = this.getGroupField();
|
rlm@46
|
31343 var eg = !!groupField;
|
rlm@46
|
31344
|
rlm@46
|
31345 if(this.hideGroupedColumn) {
|
rlm@46
|
31346 var colIndex = this.cm.findColumnIndex(groupField);
|
rlm@46
|
31347 if(!eg && this.lastGroupField !== undefined) {
|
rlm@46
|
31348 this.mainBody.update('');
|
rlm@46
|
31349 this.cm.setHidden(this.cm.findColumnIndex(this.lastGroupField), false);
|
rlm@46
|
31350 delete this.lastGroupField;
|
rlm@46
|
31351 }else if (eg && this.lastGroupField === undefined) {
|
rlm@46
|
31352 this.lastGroupField = groupField;
|
rlm@46
|
31353 this.cm.setHidden(colIndex, true);
|
rlm@46
|
31354 }else if (eg && this.lastGroupField !== undefined && groupField !== this.lastGroupField) {
|
rlm@46
|
31355 this.mainBody.update('');
|
rlm@46
|
31356 var oldIndex = this.cm.findColumnIndex(this.lastGroupField);
|
rlm@46
|
31357 this.cm.setHidden(oldIndex, false);
|
rlm@46
|
31358 this.lastGroupField = groupField;
|
rlm@46
|
31359 this.cm.setHidden(colIndex, true);
|
rlm@46
|
31360 }
|
rlm@46
|
31361 }
|
rlm@46
|
31362 return Ext.grid.GroupingView.superclass.renderRows.apply(
|
rlm@46
|
31363 this, arguments);
|
rlm@46
|
31364 },
|
rlm@46
|
31365
|
rlm@46
|
31366
|
rlm@46
|
31367 doRender : function(cs, rs, ds, startRow, colCount, stripe){
|
rlm@46
|
31368 if(rs.length < 1){
|
rlm@46
|
31369 return '';
|
rlm@46
|
31370 }
|
rlm@46
|
31371 var groupField = this.getGroupField();
|
rlm@46
|
31372 var colIndex = this.cm.findColumnIndex(groupField);
|
rlm@46
|
31373
|
rlm@46
|
31374 this.enableGrouping = !!groupField;
|
rlm@46
|
31375
|
rlm@46
|
31376 if(!this.enableGrouping || this.isUpdating){
|
rlm@46
|
31377 return Ext.grid.GroupingView.superclass.doRender.apply(
|
rlm@46
|
31378 this, arguments);
|
rlm@46
|
31379 }
|
rlm@46
|
31380 var gstyle = 'width:'+this.getTotalWidth()+';';
|
rlm@46
|
31381
|
rlm@46
|
31382 var gidPrefix = this.grid.getGridEl().id;
|
rlm@46
|
31383 var cfg = this.cm.config[colIndex];
|
rlm@46
|
31384 var groupRenderer = cfg.groupRenderer || cfg.renderer;
|
rlm@46
|
31385 var prefix = this.showGroupName ?
|
rlm@46
|
31386 (cfg.groupName || cfg.header)+': ' : '';
|
rlm@46
|
31387
|
rlm@46
|
31388 var groups = [], curGroup, i, len, gid;
|
rlm@46
|
31389 for(i = 0, len = rs.length; i < len; i++){
|
rlm@46
|
31390 var rowIndex = startRow + i;
|
rlm@46
|
31391 var r = rs[i],
|
rlm@46
|
31392 gvalue = r.data[groupField],
|
rlm@46
|
31393 g = this.getGroup(gvalue, r, groupRenderer, rowIndex, colIndex, ds);
|
rlm@46
|
31394 if(!curGroup || curGroup.group != g){
|
rlm@46
|
31395 gid = gidPrefix + '-gp-' + groupField + '-' + Ext.util.Format.htmlEncode(g);
|
rlm@46
|
31396
|
rlm@46
|
31397
|
rlm@46
|
31398 var isCollapsed = typeof this.state[gid] !== 'undefined' ? !this.state[gid] : this.startCollapsed;
|
rlm@46
|
31399 var gcls = isCollapsed ? 'x-grid-group-collapsed' : '';
|
rlm@46
|
31400 curGroup = {
|
rlm@46
|
31401 group: g,
|
rlm@46
|
31402 gvalue: gvalue,
|
rlm@46
|
31403 text: prefix + g,
|
rlm@46
|
31404 groupId: gid,
|
rlm@46
|
31405 startRow: rowIndex,
|
rlm@46
|
31406 rs: [r],
|
rlm@46
|
31407 cls: gcls,
|
rlm@46
|
31408 style: gstyle
|
rlm@46
|
31409 };
|
rlm@46
|
31410 groups.push(curGroup);
|
rlm@46
|
31411 }else{
|
rlm@46
|
31412 curGroup.rs.push(r);
|
rlm@46
|
31413 }
|
rlm@46
|
31414 r._groupId = gid;
|
rlm@46
|
31415 }
|
rlm@46
|
31416
|
rlm@46
|
31417 var buf = [];
|
rlm@46
|
31418 for(i = 0, len = groups.length; i < len; i++){
|
rlm@46
|
31419 var g = groups[i];
|
rlm@46
|
31420 this.doGroupStart(buf, g, cs, ds, colCount);
|
rlm@46
|
31421 buf[buf.length] = Ext.grid.GroupingView.superclass.doRender.call(
|
rlm@46
|
31422 this, cs, g.rs, ds, g.startRow, colCount, stripe);
|
rlm@46
|
31423
|
rlm@46
|
31424 this.doGroupEnd(buf, g, cs, ds, colCount);
|
rlm@46
|
31425 }
|
rlm@46
|
31426 return buf.join('');
|
rlm@46
|
31427 },
|
rlm@46
|
31428
|
rlm@46
|
31429
|
rlm@46
|
31430 getGroupId : function(value){
|
rlm@46
|
31431 var gidPrefix = this.grid.getGridEl().id;
|
rlm@46
|
31432 var groupField = this.getGroupField();
|
rlm@46
|
31433 var colIndex = this.cm.findColumnIndex(groupField);
|
rlm@46
|
31434 var cfg = this.cm.config[colIndex];
|
rlm@46
|
31435 var groupRenderer = cfg.groupRenderer || cfg.renderer;
|
rlm@46
|
31436 var gtext = this.getGroup(value, {data:{}}, groupRenderer, 0, colIndex, this.ds);
|
rlm@46
|
31437 return gidPrefix + '-gp-' + groupField + '-' + Ext.util.Format.htmlEncode(value);
|
rlm@46
|
31438 },
|
rlm@46
|
31439
|
rlm@46
|
31440
|
rlm@46
|
31441 doGroupStart : function(buf, g, cs, ds, colCount){
|
rlm@46
|
31442 buf[buf.length] = this.startGroup.apply(g);
|
rlm@46
|
31443 },
|
rlm@46
|
31444
|
rlm@46
|
31445
|
rlm@46
|
31446 doGroupEnd : function(buf, g, cs, ds, colCount){
|
rlm@46
|
31447 buf[buf.length] = this.endGroup;
|
rlm@46
|
31448 },
|
rlm@46
|
31449
|
rlm@46
|
31450
|
rlm@46
|
31451 getRows : function(){
|
rlm@46
|
31452 if(!this.enableGrouping){
|
rlm@46
|
31453 return Ext.grid.GroupingView.superclass.getRows.call(this);
|
rlm@46
|
31454 }
|
rlm@46
|
31455 var r = [];
|
rlm@46
|
31456 var g, gs = this.getGroups();
|
rlm@46
|
31457 for(var i = 0, len = gs.length; i < len; i++){
|
rlm@46
|
31458 g = gs[i].childNodes[1].childNodes;
|
rlm@46
|
31459 for(var j = 0, jlen = g.length; j < jlen; j++){
|
rlm@46
|
31460 r[r.length] = g[j];
|
rlm@46
|
31461 }
|
rlm@46
|
31462 }
|
rlm@46
|
31463 return r;
|
rlm@46
|
31464 },
|
rlm@46
|
31465
|
rlm@46
|
31466
|
rlm@46
|
31467 updateGroupWidths : function(){
|
rlm@46
|
31468 if(!this.enableGrouping || !this.hasRows()){
|
rlm@46
|
31469 return;
|
rlm@46
|
31470 }
|
rlm@46
|
31471 var tw = Math.max(this.cm.getTotalWidth(), this.el.dom.offsetWidth-this.scrollOffset) +'px';
|
rlm@46
|
31472 var gs = this.getGroups();
|
rlm@46
|
31473 for(var i = 0, len = gs.length; i < len; i++){
|
rlm@46
|
31474 gs[i].firstChild.style.width = tw;
|
rlm@46
|
31475 }
|
rlm@46
|
31476 },
|
rlm@46
|
31477
|
rlm@46
|
31478
|
rlm@46
|
31479 onColumnWidthUpdated : function(col, w, tw){
|
rlm@46
|
31480 this.updateGroupWidths();
|
rlm@46
|
31481 },
|
rlm@46
|
31482
|
rlm@46
|
31483
|
rlm@46
|
31484 onAllColumnWidthsUpdated : function(ws, tw){
|
rlm@46
|
31485 this.updateGroupWidths();
|
rlm@46
|
31486 },
|
rlm@46
|
31487
|
rlm@46
|
31488
|
rlm@46
|
31489 onColumnHiddenUpdated : function(col, hidden, tw){
|
rlm@46
|
31490 this.updateGroupWidths();
|
rlm@46
|
31491 },
|
rlm@46
|
31492
|
rlm@46
|
31493
|
rlm@46
|
31494 onLayout : function(){
|
rlm@46
|
31495 this.updateGroupWidths();
|
rlm@46
|
31496 },
|
rlm@46
|
31497
|
rlm@46
|
31498
|
rlm@46
|
31499 onBeforeRowSelect : function(sm, rowIndex){
|
rlm@46
|
31500 if(!this.enableGrouping){
|
rlm@46
|
31501 return;
|
rlm@46
|
31502 }
|
rlm@46
|
31503 var row = this.getRow(rowIndex);
|
rlm@46
|
31504 if(row && !row.offsetParent){
|
rlm@46
|
31505 var g = this.findGroup(row);
|
rlm@46
|
31506 this.toggleGroup(g, true);
|
rlm@46
|
31507 }
|
rlm@46
|
31508 },
|
rlm@46
|
31509
|
rlm@46
|
31510
|
rlm@46
|
31511 groupByText: 'Group By This Field',
|
rlm@46
|
31512
|
rlm@46
|
31513 showGroupsText: 'Show in Groups'
|
rlm@46
|
31514 });
|
rlm@46
|
31515
|
rlm@46
|
31516 Ext.grid.GroupingView.GROUP_ID = 1000;
|
rlm@46
|
31517
|
rlm@46
|
31518
|
rlm@46
|
31519 Ext.grid.HeaderDragZone = function(grid, hd, hd2){
|
rlm@46
|
31520 this.grid = grid;
|
rlm@46
|
31521 this.view = grid.getView();
|
rlm@46
|
31522 this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
|
rlm@46
|
31523 Ext.grid.HeaderDragZone.superclass.constructor.call(this, hd);
|
rlm@46
|
31524 if(hd2){
|
rlm@46
|
31525 this.setHandleElId(Ext.id(hd));
|
rlm@46
|
31526 this.setOuterHandleElId(Ext.id(hd2));
|
rlm@46
|
31527 }
|
rlm@46
|
31528 this.scroll = false;
|
rlm@46
|
31529 };
|
rlm@46
|
31530 Ext.extend(Ext.grid.HeaderDragZone, Ext.dd.DragZone, {
|
rlm@46
|
31531 maxDragWidth: 120,
|
rlm@46
|
31532 getDragData : function(e){
|
rlm@46
|
31533 var t = Ext.lib.Event.getTarget(e);
|
rlm@46
|
31534 var h = this.view.findHeaderCell(t);
|
rlm@46
|
31535 if(h){
|
rlm@46
|
31536 return {ddel: h.firstChild, header:h};
|
rlm@46
|
31537 }
|
rlm@46
|
31538 return false;
|
rlm@46
|
31539 },
|
rlm@46
|
31540
|
rlm@46
|
31541 onInitDrag : function(e){
|
rlm@46
|
31542 this.view.headersDisabled = true;
|
rlm@46
|
31543 var clone = this.dragData.ddel.cloneNode(true);
|
rlm@46
|
31544 clone.id = Ext.id();
|
rlm@46
|
31545 clone.style.width = Math.min(this.dragData.header.offsetWidth,this.maxDragWidth) + "px";
|
rlm@46
|
31546 this.proxy.update(clone);
|
rlm@46
|
31547 return true;
|
rlm@46
|
31548 },
|
rlm@46
|
31549
|
rlm@46
|
31550 afterValidDrop : function(){
|
rlm@46
|
31551 var v = this.view;
|
rlm@46
|
31552 setTimeout(function(){
|
rlm@46
|
31553 v.headersDisabled = false;
|
rlm@46
|
31554 }, 50);
|
rlm@46
|
31555 },
|
rlm@46
|
31556
|
rlm@46
|
31557 afterInvalidDrop : function(){
|
rlm@46
|
31558 var v = this.view;
|
rlm@46
|
31559 setTimeout(function(){
|
rlm@46
|
31560 v.headersDisabled = false;
|
rlm@46
|
31561 }, 50);
|
rlm@46
|
31562 }
|
rlm@46
|
31563 });
|
rlm@46
|
31564
|
rlm@46
|
31565
|
rlm@46
|
31566
|
rlm@46
|
31567 Ext.grid.HeaderDropZone = function(grid, hd, hd2){
|
rlm@46
|
31568 this.grid = grid;
|
rlm@46
|
31569 this.view = grid.getView();
|
rlm@46
|
31570
|
rlm@46
|
31571 this.proxyTop = Ext.DomHelper.append(document.body, {
|
rlm@46
|
31572 cls:"col-move-top", html:" "
|
rlm@46
|
31573 }, true);
|
rlm@46
|
31574 this.proxyBottom = Ext.DomHelper.append(document.body, {
|
rlm@46
|
31575 cls:"col-move-bottom", html:" "
|
rlm@46
|
31576 }, true);
|
rlm@46
|
31577 this.proxyTop.hide = this.proxyBottom.hide = function(){
|
rlm@46
|
31578 this.setLeftTop(-100,-100);
|
rlm@46
|
31579 this.setStyle("visibility", "hidden");
|
rlm@46
|
31580 };
|
rlm@46
|
31581 this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
|
rlm@46
|
31582
|
rlm@46
|
31583
|
rlm@46
|
31584 Ext.grid.HeaderDropZone.superclass.constructor.call(this, grid.getGridEl().dom);
|
rlm@46
|
31585 };
|
rlm@46
|
31586 Ext.extend(Ext.grid.HeaderDropZone, Ext.dd.DropZone, {
|
rlm@46
|
31587 proxyOffsets : [-4, -9],
|
rlm@46
|
31588 fly: Ext.Element.fly,
|
rlm@46
|
31589
|
rlm@46
|
31590 getTargetFromEvent : function(e){
|
rlm@46
|
31591 var t = Ext.lib.Event.getTarget(e);
|
rlm@46
|
31592 var cindex = this.view.findCellIndex(t);
|
rlm@46
|
31593 if(cindex !== false){
|
rlm@46
|
31594 return this.view.getHeaderCell(cindex);
|
rlm@46
|
31595 }
|
rlm@46
|
31596 },
|
rlm@46
|
31597
|
rlm@46
|
31598 nextVisible : function(h){
|
rlm@46
|
31599 var v = this.view, cm = this.grid.colModel;
|
rlm@46
|
31600 h = h.nextSibling;
|
rlm@46
|
31601 while(h){
|
rlm@46
|
31602 if(!cm.isHidden(v.getCellIndex(h))){
|
rlm@46
|
31603 return h;
|
rlm@46
|
31604 }
|
rlm@46
|
31605 h = h.nextSibling;
|
rlm@46
|
31606 }
|
rlm@46
|
31607 return null;
|
rlm@46
|
31608 },
|
rlm@46
|
31609
|
rlm@46
|
31610 prevVisible : function(h){
|
rlm@46
|
31611 var v = this.view, cm = this.grid.colModel;
|
rlm@46
|
31612 h = h.prevSibling;
|
rlm@46
|
31613 while(h){
|
rlm@46
|
31614 if(!cm.isHidden(v.getCellIndex(h))){
|
rlm@46
|
31615 return h;
|
rlm@46
|
31616 }
|
rlm@46
|
31617 h = h.prevSibling;
|
rlm@46
|
31618 }
|
rlm@46
|
31619 return null;
|
rlm@46
|
31620 },
|
rlm@46
|
31621
|
rlm@46
|
31622 positionIndicator : function(h, n, e){
|
rlm@46
|
31623 var x = Ext.lib.Event.getPageX(e);
|
rlm@46
|
31624 var r = Ext.lib.Dom.getRegion(n.firstChild);
|
rlm@46
|
31625 var px, pt, py = r.top + this.proxyOffsets[1];
|
rlm@46
|
31626 if((r.right - x) <= (r.right-r.left)/2){
|
rlm@46
|
31627 px = r.right+this.view.borderWidth;
|
rlm@46
|
31628 pt = "after";
|
rlm@46
|
31629 }else{
|
rlm@46
|
31630 px = r.left;
|
rlm@46
|
31631 pt = "before";
|
rlm@46
|
31632 }
|
rlm@46
|
31633 var oldIndex = this.view.getCellIndex(h);
|
rlm@46
|
31634 var newIndex = this.view.getCellIndex(n);
|
rlm@46
|
31635
|
rlm@46
|
31636 if(this.grid.colModel.isFixed(newIndex)){
|
rlm@46
|
31637 return false;
|
rlm@46
|
31638 }
|
rlm@46
|
31639
|
rlm@46
|
31640 var locked = this.grid.colModel.isLocked(newIndex);
|
rlm@46
|
31641
|
rlm@46
|
31642 if(pt == "after"){
|
rlm@46
|
31643 newIndex++;
|
rlm@46
|
31644 }
|
rlm@46
|
31645 if(oldIndex < newIndex){
|
rlm@46
|
31646 newIndex--;
|
rlm@46
|
31647 }
|
rlm@46
|
31648 if(oldIndex == newIndex && (locked == this.grid.colModel.isLocked(oldIndex))){
|
rlm@46
|
31649 return false;
|
rlm@46
|
31650 }
|
rlm@46
|
31651 px += this.proxyOffsets[0];
|
rlm@46
|
31652 this.proxyTop.setLeftTop(px, py);
|
rlm@46
|
31653 this.proxyTop.show();
|
rlm@46
|
31654 if(!this.bottomOffset){
|
rlm@46
|
31655 this.bottomOffset = this.view.mainHd.getHeight();
|
rlm@46
|
31656 }
|
rlm@46
|
31657 this.proxyBottom.setLeftTop(px, py+this.proxyTop.dom.offsetHeight+this.bottomOffset);
|
rlm@46
|
31658 this.proxyBottom.show();
|
rlm@46
|
31659 return pt;
|
rlm@46
|
31660 },
|
rlm@46
|
31661
|
rlm@46
|
31662 onNodeEnter : function(n, dd, e, data){
|
rlm@46
|
31663 if(data.header != n){
|
rlm@46
|
31664 this.positionIndicator(data.header, n, e);
|
rlm@46
|
31665 }
|
rlm@46
|
31666 },
|
rlm@46
|
31667
|
rlm@46
|
31668 onNodeOver : function(n, dd, e, data){
|
rlm@46
|
31669 var result = false;
|
rlm@46
|
31670 if(data.header != n){
|
rlm@46
|
31671 result = this.positionIndicator(data.header, n, e);
|
rlm@46
|
31672 }
|
rlm@46
|
31673 if(!result){
|
rlm@46
|
31674 this.proxyTop.hide();
|
rlm@46
|
31675 this.proxyBottom.hide();
|
rlm@46
|
31676 }
|
rlm@46
|
31677 return result ? this.dropAllowed : this.dropNotAllowed;
|
rlm@46
|
31678 },
|
rlm@46
|
31679
|
rlm@46
|
31680 onNodeOut : function(n, dd, e, data){
|
rlm@46
|
31681 this.proxyTop.hide();
|
rlm@46
|
31682 this.proxyBottom.hide();
|
rlm@46
|
31683 },
|
rlm@46
|
31684
|
rlm@46
|
31685 onNodeDrop : function(n, dd, e, data){
|
rlm@46
|
31686 var h = data.header;
|
rlm@46
|
31687 if(h != n){
|
rlm@46
|
31688 var cm = this.grid.colModel;
|
rlm@46
|
31689 var x = Ext.lib.Event.getPageX(e);
|
rlm@46
|
31690 var r = Ext.lib.Dom.getRegion(n.firstChild);
|
rlm@46
|
31691 var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";
|
rlm@46
|
31692 var oldIndex = this.view.getCellIndex(h);
|
rlm@46
|
31693 var newIndex = this.view.getCellIndex(n);
|
rlm@46
|
31694 var locked = cm.isLocked(newIndex);
|
rlm@46
|
31695 if(pt == "after"){
|
rlm@46
|
31696 newIndex++;
|
rlm@46
|
31697 }
|
rlm@46
|
31698 if(oldIndex < newIndex){
|
rlm@46
|
31699 newIndex--;
|
rlm@46
|
31700 }
|
rlm@46
|
31701 if(oldIndex == newIndex && (locked == cm.isLocked(oldIndex))){
|
rlm@46
|
31702 return false;
|
rlm@46
|
31703 }
|
rlm@46
|
31704 cm.setLocked(oldIndex, locked, true);
|
rlm@46
|
31705 cm.moveColumn(oldIndex, newIndex);
|
rlm@46
|
31706 this.grid.fireEvent("columnmove", oldIndex, newIndex);
|
rlm@46
|
31707 return true;
|
rlm@46
|
31708 }
|
rlm@46
|
31709 return false;
|
rlm@46
|
31710 }
|
rlm@46
|
31711 });
|
rlm@46
|
31712
|
rlm@46
|
31713
|
rlm@46
|
31714 Ext.grid.GridView.ColumnDragZone = function(grid, hd){
|
rlm@46
|
31715 Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, grid, hd, null);
|
rlm@46
|
31716 this.proxy.el.addClass('x-grid3-col-dd');
|
rlm@46
|
31717 };
|
rlm@46
|
31718
|
rlm@46
|
31719 Ext.extend(Ext.grid.GridView.ColumnDragZone, Ext.grid.HeaderDragZone, {
|
rlm@46
|
31720 handleMouseDown : function(e){
|
rlm@46
|
31721
|
rlm@46
|
31722 },
|
rlm@46
|
31723
|
rlm@46
|
31724 callHandleMouseDown : function(e){
|
rlm@46
|
31725 Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e);
|
rlm@46
|
31726 }
|
rlm@46
|
31727 });
|
rlm@46
|
31728 Ext.grid.SplitDragZone = function(grid, hd, hd2){
|
rlm@46
|
31729 this.grid = grid;
|
rlm@46
|
31730 this.view = grid.getView();
|
rlm@46
|
31731 this.proxy = this.view.resizeProxy;
|
rlm@46
|
31732 Ext.grid.SplitDragZone.superclass.constructor.call(this, hd,
|
rlm@46
|
31733 "gridSplitters" + this.grid.getGridEl().id, {
|
rlm@46
|
31734 dragElId : Ext.id(this.proxy.dom), resizeFrame:false
|
rlm@46
|
31735 });
|
rlm@46
|
31736 this.setHandleElId(Ext.id(hd));
|
rlm@46
|
31737 this.setOuterHandleElId(Ext.id(hd2));
|
rlm@46
|
31738 this.scroll = false;
|
rlm@46
|
31739 };
|
rlm@46
|
31740 Ext.extend(Ext.grid.SplitDragZone, Ext.dd.DDProxy, {
|
rlm@46
|
31741 fly: Ext.Element.fly,
|
rlm@46
|
31742
|
rlm@46
|
31743 b4StartDrag : function(x, y){
|
rlm@46
|
31744 this.view.headersDisabled = true;
|
rlm@46
|
31745 this.proxy.setHeight(this.view.mainWrap.getHeight());
|
rlm@46
|
31746 var w = this.cm.getColumnWidth(this.cellIndex);
|
rlm@46
|
31747 var minw = Math.max(w-this.grid.minColumnWidth, 0);
|
rlm@46
|
31748 this.resetConstraints();
|
rlm@46
|
31749 this.setXConstraint(minw, 1000);
|
rlm@46
|
31750 this.setYConstraint(0, 0);
|
rlm@46
|
31751 this.minX = x - minw;
|
rlm@46
|
31752 this.maxX = x + 1000;
|
rlm@46
|
31753 this.startPos = x;
|
rlm@46
|
31754 Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y);
|
rlm@46
|
31755 },
|
rlm@46
|
31756
|
rlm@46
|
31757
|
rlm@46
|
31758 handleMouseDown : function(e){
|
rlm@46
|
31759 ev = Ext.EventObject.setEvent(e);
|
rlm@46
|
31760 var t = this.fly(ev.getTarget());
|
rlm@46
|
31761 if(t.hasClass("x-grid-split")){
|
rlm@46
|
31762 this.cellIndex = this.view.getCellIndex(t.dom);
|
rlm@46
|
31763 this.split = t.dom;
|
rlm@46
|
31764 this.cm = this.grid.colModel;
|
rlm@46
|
31765 if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){
|
rlm@46
|
31766 Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this, arguments);
|
rlm@46
|
31767 }
|
rlm@46
|
31768 }
|
rlm@46
|
31769 },
|
rlm@46
|
31770
|
rlm@46
|
31771 endDrag : function(e){
|
rlm@46
|
31772 this.view.headersDisabled = false;
|
rlm@46
|
31773 var endX = Math.max(this.minX, Ext.lib.Event.getPageX(e));
|
rlm@46
|
31774 var diff = endX - this.startPos;
|
rlm@46
|
31775 this.view.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff);
|
rlm@46
|
31776 },
|
rlm@46
|
31777
|
rlm@46
|
31778 autoOffset : function(){
|
rlm@46
|
31779 this.setDelta(0,0);
|
rlm@46
|
31780 }
|
rlm@46
|
31781 });
|
rlm@46
|
31782 Ext.grid.GridDragZone = function(grid, config){
|
rlm@46
|
31783 this.view = grid.getView();
|
rlm@46
|
31784 Ext.grid.GridDragZone.superclass.constructor.call(this, this.view.mainBody.dom, config);
|
rlm@46
|
31785 if(this.view.lockedBody){
|
rlm@46
|
31786 this.setHandleElId(Ext.id(this.view.mainBody.dom));
|
rlm@46
|
31787 this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom));
|
rlm@46
|
31788 }
|
rlm@46
|
31789 this.scroll = false;
|
rlm@46
|
31790 this.grid = grid;
|
rlm@46
|
31791 this.ddel = document.createElement('div');
|
rlm@46
|
31792 this.ddel.className = 'x-grid-dd-wrap';
|
rlm@46
|
31793 };
|
rlm@46
|
31794
|
rlm@46
|
31795 Ext.extend(Ext.grid.GridDragZone, Ext.dd.DragZone, {
|
rlm@46
|
31796 ddGroup : "GridDD",
|
rlm@46
|
31797
|
rlm@46
|
31798 getDragData : function(e){
|
rlm@46
|
31799 var t = Ext.lib.Event.getTarget(e);
|
rlm@46
|
31800 var rowIndex = this.view.findRowIndex(t);
|
rlm@46
|
31801 if(rowIndex !== false){
|
rlm@46
|
31802 var sm = this.grid.selModel;
|
rlm@46
|
31803 if(!sm.isSelected(rowIndex) || e.hasModifier()){
|
rlm@46
|
31804 sm.handleMouseDown(this.grid, rowIndex, e);
|
rlm@46
|
31805 }
|
rlm@46
|
31806 return {grid: this.grid, ddel: this.ddel, rowIndex: rowIndex, selections:sm.getSelections()};
|
rlm@46
|
31807 }
|
rlm@46
|
31808 return false;
|
rlm@46
|
31809 },
|
rlm@46
|
31810
|
rlm@46
|
31811 onInitDrag : function(e){
|
rlm@46
|
31812 var data = this.dragData;
|
rlm@46
|
31813 this.ddel.innerHTML = this.grid.getDragDropText();
|
rlm@46
|
31814 this.proxy.update(this.ddel);
|
rlm@46
|
31815 },
|
rlm@46
|
31816
|
rlm@46
|
31817 afterRepair : function(){
|
rlm@46
|
31818 this.dragging = false;
|
rlm@46
|
31819 },
|
rlm@46
|
31820
|
rlm@46
|
31821 getRepairXY : function(e, data){
|
rlm@46
|
31822 return false;
|
rlm@46
|
31823 },
|
rlm@46
|
31824
|
rlm@46
|
31825 onEndDrag : function(data, e){
|
rlm@46
|
31826 },
|
rlm@46
|
31827
|
rlm@46
|
31828 onValidDrop : function(dd, e, id){
|
rlm@46
|
31829 this.hideProxy();
|
rlm@46
|
31830 },
|
rlm@46
|
31831
|
rlm@46
|
31832 beforeInvalidDrop : function(e, id){
|
rlm@46
|
31833
|
rlm@46
|
31834 }
|
rlm@46
|
31835 });
|
rlm@46
|
31836
|
rlm@46
|
31837
|
rlm@46
|
31838 Ext.grid.ColumnModel = function(config){
|
rlm@46
|
31839
|
rlm@46
|
31840 this.defaultWidth = 100;
|
rlm@46
|
31841
|
rlm@46
|
31842
|
rlm@46
|
31843 this.defaultSortable = false;
|
rlm@46
|
31844
|
rlm@46
|
31845
|
rlm@46
|
31846 if(config.columns){
|
rlm@46
|
31847 Ext.apply(this, config);
|
rlm@46
|
31848 this.setConfig(config.columns, true);
|
rlm@46
|
31849 }else{
|
rlm@46
|
31850 this.setConfig(config, true);
|
rlm@46
|
31851 }
|
rlm@46
|
31852 this.addEvents(
|
rlm@46
|
31853
|
rlm@46
|
31854 "widthchange",
|
rlm@46
|
31855
|
rlm@46
|
31856 "headerchange",
|
rlm@46
|
31857
|
rlm@46
|
31858 "hiddenchange",
|
rlm@46
|
31859
|
rlm@46
|
31860 "columnmoved",
|
rlm@46
|
31861 "columnlockchange",
|
rlm@46
|
31862
|
rlm@46
|
31863 "configchange"
|
rlm@46
|
31864 );
|
rlm@46
|
31865 Ext.grid.ColumnModel.superclass.constructor.call(this);
|
rlm@46
|
31866 };
|
rlm@46
|
31867 Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, {
|
rlm@46
|
31868
|
rlm@46
|
31869
|
rlm@46
|
31870
|
rlm@46
|
31871
|
rlm@46
|
31872
|
rlm@46
|
31873
|
rlm@46
|
31874
|
rlm@46
|
31875
|
rlm@46
|
31876
|
rlm@46
|
31877
|
rlm@46
|
31878
|
rlm@46
|
31879
|
rlm@46
|
31880
|
rlm@46
|
31881
|
rlm@46
|
31882
|
rlm@46
|
31883
|
rlm@46
|
31884
|
rlm@46
|
31885 getColumnId : function(index){
|
rlm@46
|
31886 return this.config[index].id;
|
rlm@46
|
31887 },
|
rlm@46
|
31888
|
rlm@46
|
31889
|
rlm@46
|
31890 setConfig : function(config, initial){
|
rlm@46
|
31891 if(!initial){ delete this.totalWidth;
|
rlm@46
|
31892 for(var i = 0, len = this.config.length; i < len; i++){
|
rlm@46
|
31893 var c = this.config[i];
|
rlm@46
|
31894 if(c.editor){
|
rlm@46
|
31895 c.editor.destroy();
|
rlm@46
|
31896 }
|
rlm@46
|
31897 }
|
rlm@46
|
31898 }
|
rlm@46
|
31899 this.config = config;
|
rlm@46
|
31900 this.lookup = {};
|
rlm@46
|
31901 for(var i = 0, len = config.length; i < len; i++){
|
rlm@46
|
31902 var c = config[i];
|
rlm@46
|
31903 if(typeof c.renderer == "string"){
|
rlm@46
|
31904 c.renderer = Ext.util.Format[c.renderer];
|
rlm@46
|
31905 }
|
rlm@46
|
31906 if(typeof c.id == "undefined"){
|
rlm@46
|
31907 c.id = i;
|
rlm@46
|
31908 }
|
rlm@46
|
31909 if(c.editor && c.editor.isFormField){
|
rlm@46
|
31910 c.editor = new Ext.grid.GridEditor(c.editor);
|
rlm@46
|
31911 }
|
rlm@46
|
31912 this.lookup[c.id] = c;
|
rlm@46
|
31913 }
|
rlm@46
|
31914 if(!initial){
|
rlm@46
|
31915 this.fireEvent('configchange', this);
|
rlm@46
|
31916 }
|
rlm@46
|
31917 },
|
rlm@46
|
31918
|
rlm@46
|
31919
|
rlm@46
|
31920 getColumnById : function(id){
|
rlm@46
|
31921 return this.lookup[id];
|
rlm@46
|
31922 },
|
rlm@46
|
31923
|
rlm@46
|
31924
|
rlm@46
|
31925 getIndexById : function(id){
|
rlm@46
|
31926 for(var i = 0, len = this.config.length; i < len; i++){
|
rlm@46
|
31927 if(this.config[i].id == id){
|
rlm@46
|
31928 return i;
|
rlm@46
|
31929 }
|
rlm@46
|
31930 }
|
rlm@46
|
31931 return -1;
|
rlm@46
|
31932 },
|
rlm@46
|
31933
|
rlm@46
|
31934 moveColumn : function(oldIndex, newIndex){
|
rlm@46
|
31935 var c = this.config[oldIndex];
|
rlm@46
|
31936 this.config.splice(oldIndex, 1);
|
rlm@46
|
31937 this.config.splice(newIndex, 0, c);
|
rlm@46
|
31938 this.dataMap = null;
|
rlm@46
|
31939 this.fireEvent("columnmoved", this, oldIndex, newIndex);
|
rlm@46
|
31940 },
|
rlm@46
|
31941
|
rlm@46
|
31942 isLocked : function(colIndex){
|
rlm@46
|
31943 return this.config[colIndex].locked === true;
|
rlm@46
|
31944 },
|
rlm@46
|
31945
|
rlm@46
|
31946 setLocked : function(colIndex, value, suppressEvent){
|
rlm@46
|
31947 if(this.isLocked(colIndex) == value){
|
rlm@46
|
31948 return;
|
rlm@46
|
31949 }
|
rlm@46
|
31950 this.config[colIndex].locked = value;
|
rlm@46
|
31951 if(!suppressEvent){
|
rlm@46
|
31952 this.fireEvent("columnlockchange", this, colIndex, value);
|
rlm@46
|
31953 }
|
rlm@46
|
31954 },
|
rlm@46
|
31955
|
rlm@46
|
31956 getTotalLockedWidth : function(){
|
rlm@46
|
31957 var totalWidth = 0;
|
rlm@46
|
31958 for(var i = 0; i < this.config.length; i++){
|
rlm@46
|
31959 if(this.isLocked(i) && !this.isHidden(i)){
|
rlm@46
|
31960 this.totalWidth += this.getColumnWidth(i);
|
rlm@46
|
31961 }
|
rlm@46
|
31962 }
|
rlm@46
|
31963 return totalWidth;
|
rlm@46
|
31964 },
|
rlm@46
|
31965
|
rlm@46
|
31966 getLockedCount : function(){
|
rlm@46
|
31967 for(var i = 0, len = this.config.length; i < len; i++){
|
rlm@46
|
31968 if(!this.isLocked(i)){
|
rlm@46
|
31969 return i;
|
rlm@46
|
31970 }
|
rlm@46
|
31971 }
|
rlm@46
|
31972 },
|
rlm@46
|
31973
|
rlm@46
|
31974
|
rlm@46
|
31975 getColumnCount : function(visibleOnly){
|
rlm@46
|
31976 if(visibleOnly === true){
|
rlm@46
|
31977 var c = 0;
|
rlm@46
|
31978 for(var i = 0, len = this.config.length; i < len; i++){
|
rlm@46
|
31979 if(!this.isHidden(i)){
|
rlm@46
|
31980 c++;
|
rlm@46
|
31981 }
|
rlm@46
|
31982 }
|
rlm@46
|
31983 return c;
|
rlm@46
|
31984 }
|
rlm@46
|
31985 return this.config.length;
|
rlm@46
|
31986 },
|
rlm@46
|
31987
|
rlm@46
|
31988
|
rlm@46
|
31989 getColumnsBy : function(fn, scope){
|
rlm@46
|
31990 var r = [];
|
rlm@46
|
31991 for(var i = 0, len = this.config.length; i < len; i++){
|
rlm@46
|
31992 var c = this.config[i];
|
rlm@46
|
31993 if(fn.call(scope||this, c, i) === true){
|
rlm@46
|
31994 r[r.length] = c;
|
rlm@46
|
31995 }
|
rlm@46
|
31996 }
|
rlm@46
|
31997 return r;
|
rlm@46
|
31998 },
|
rlm@46
|
31999
|
rlm@46
|
32000
|
rlm@46
|
32001 isSortable : function(col){
|
rlm@46
|
32002 if(typeof this.config[col].sortable == "undefined"){
|
rlm@46
|
32003 return this.defaultSortable;
|
rlm@46
|
32004 }
|
rlm@46
|
32005 return this.config[col].sortable;
|
rlm@46
|
32006 },
|
rlm@46
|
32007
|
rlm@46
|
32008
|
rlm@46
|
32009 isMenuDisabled : function(col){
|
rlm@46
|
32010 return !!this.config[col].menuDisabled;
|
rlm@46
|
32011 },
|
rlm@46
|
32012
|
rlm@46
|
32013
|
rlm@46
|
32014 getRenderer : function(col){
|
rlm@46
|
32015 if(!this.config[col].renderer){
|
rlm@46
|
32016 return Ext.grid.ColumnModel.defaultRenderer;
|
rlm@46
|
32017 }
|
rlm@46
|
32018 return this.config[col].renderer;
|
rlm@46
|
32019 },
|
rlm@46
|
32020
|
rlm@46
|
32021
|
rlm@46
|
32022 setRenderer : function(col, fn){
|
rlm@46
|
32023 this.config[col].renderer = fn;
|
rlm@46
|
32024 },
|
rlm@46
|
32025
|
rlm@46
|
32026
|
rlm@46
|
32027 getColumnWidth : function(col){
|
rlm@46
|
32028 return this.config[col].width || this.defaultWidth;
|
rlm@46
|
32029 },
|
rlm@46
|
32030
|
rlm@46
|
32031
|
rlm@46
|
32032 setColumnWidth : function(col, width, suppressEvent){
|
rlm@46
|
32033 this.config[col].width = width;
|
rlm@46
|
32034 this.totalWidth = null;
|
rlm@46
|
32035 if(!suppressEvent){
|
rlm@46
|
32036 this.fireEvent("widthchange", this, col, width);
|
rlm@46
|
32037 }
|
rlm@46
|
32038 },
|
rlm@46
|
32039
|
rlm@46
|
32040
|
rlm@46
|
32041 getTotalWidth : function(includeHidden){
|
rlm@46
|
32042 if(!this.totalWidth){
|
rlm@46
|
32043 this.totalWidth = 0;
|
rlm@46
|
32044 for(var i = 0, len = this.config.length; i < len; i++){
|
rlm@46
|
32045 if(includeHidden || !this.isHidden(i)){
|
rlm@46
|
32046 this.totalWidth += this.getColumnWidth(i);
|
rlm@46
|
32047 }
|
rlm@46
|
32048 }
|
rlm@46
|
32049 }
|
rlm@46
|
32050 return this.totalWidth;
|
rlm@46
|
32051 },
|
rlm@46
|
32052
|
rlm@46
|
32053
|
rlm@46
|
32054 getColumnHeader : function(col){
|
rlm@46
|
32055 return this.config[col].header;
|
rlm@46
|
32056 },
|
rlm@46
|
32057
|
rlm@46
|
32058
|
rlm@46
|
32059 setColumnHeader : function(col, header){
|
rlm@46
|
32060 this.config[col].header = header;
|
rlm@46
|
32061 this.fireEvent("headerchange", this, col, header);
|
rlm@46
|
32062 },
|
rlm@46
|
32063
|
rlm@46
|
32064
|
rlm@46
|
32065 getColumnTooltip : function(col){
|
rlm@46
|
32066 return this.config[col].tooltip;
|
rlm@46
|
32067 },
|
rlm@46
|
32068
|
rlm@46
|
32069 setColumnTooltip : function(col, tooltip){
|
rlm@46
|
32070 this.config[col].tooltip = tooltip;
|
rlm@46
|
32071 },
|
rlm@46
|
32072
|
rlm@46
|
32073
|
rlm@46
|
32074 getDataIndex : function(col){
|
rlm@46
|
32075 return this.config[col].dataIndex;
|
rlm@46
|
32076 },
|
rlm@46
|
32077
|
rlm@46
|
32078
|
rlm@46
|
32079 setDataIndex : function(col, dataIndex){
|
rlm@46
|
32080 this.config[col].dataIndex = dataIndex;
|
rlm@46
|
32081 },
|
rlm@46
|
32082
|
rlm@46
|
32083
|
rlm@46
|
32084 findColumnIndex : function(dataIndex){
|
rlm@46
|
32085 var c = this.config;
|
rlm@46
|
32086 for(var i = 0, len = c.length; i < len; i++){
|
rlm@46
|
32087 if(c[i].dataIndex == dataIndex){
|
rlm@46
|
32088 return i;
|
rlm@46
|
32089 }
|
rlm@46
|
32090 }
|
rlm@46
|
32091 return -1;
|
rlm@46
|
32092 },
|
rlm@46
|
32093
|
rlm@46
|
32094
|
rlm@46
|
32095 isCellEditable : function(colIndex, rowIndex){
|
rlm@46
|
32096 return (this.config[colIndex].editable || (typeof this.config[colIndex].editable == "undefined" && this.config[colIndex].editor)) ? true : false;
|
rlm@46
|
32097 },
|
rlm@46
|
32098
|
rlm@46
|
32099
|
rlm@46
|
32100 getCellEditor : function(colIndex, rowIndex){
|
rlm@46
|
32101 return this.config[colIndex].editor;
|
rlm@46
|
32102 },
|
rlm@46
|
32103
|
rlm@46
|
32104
|
rlm@46
|
32105 setEditable : function(col, editable){
|
rlm@46
|
32106 this.config[col].editable = editable;
|
rlm@46
|
32107 },
|
rlm@46
|
32108
|
rlm@46
|
32109
|
rlm@46
|
32110
|
rlm@46
|
32111 isHidden : function(colIndex){
|
rlm@46
|
32112 return this.config[colIndex].hidden;
|
rlm@46
|
32113 },
|
rlm@46
|
32114
|
rlm@46
|
32115
|
rlm@46
|
32116
|
rlm@46
|
32117 isFixed : function(colIndex){
|
rlm@46
|
32118 return this.config[colIndex].fixed;
|
rlm@46
|
32119 },
|
rlm@46
|
32120
|
rlm@46
|
32121
|
rlm@46
|
32122 isResizable : function(colIndex){
|
rlm@46
|
32123 return colIndex >= 0 && this.config[colIndex].resizable !== false && this.config[colIndex].fixed !== true;
|
rlm@46
|
32124 },
|
rlm@46
|
32125
|
rlm@46
|
32126 setHidden : function(colIndex, hidden){
|
rlm@46
|
32127 var c = this.config[colIndex];
|
rlm@46
|
32128 if(c.hidden !== hidden){
|
rlm@46
|
32129 c.hidden = hidden;
|
rlm@46
|
32130 this.totalWidth = null;
|
rlm@46
|
32131 this.fireEvent("hiddenchange", this, colIndex, hidden);
|
rlm@46
|
32132 }
|
rlm@46
|
32133 },
|
rlm@46
|
32134
|
rlm@46
|
32135
|
rlm@46
|
32136 setEditor : function(col, editor){
|
rlm@46
|
32137 this.config[col].editor = editor;
|
rlm@46
|
32138 }
|
rlm@46
|
32139 });
|
rlm@46
|
32140
|
rlm@46
|
32141 Ext.grid.ColumnModel.defaultRenderer = function(value){
|
rlm@46
|
32142 if(typeof value == "string" && value.length < 1){
|
rlm@46
|
32143 return " ";
|
rlm@46
|
32144 }
|
rlm@46
|
32145 return value;
|
rlm@46
|
32146 };
|
rlm@46
|
32147
|
rlm@46
|
32148 Ext.grid.DefaultColumnModel = Ext.grid.ColumnModel;
|
rlm@46
|
32149
|
rlm@46
|
32150
|
rlm@46
|
32151 Ext.grid.AbstractSelectionModel = function(){
|
rlm@46
|
32152 this.locked = false;
|
rlm@46
|
32153 Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);
|
rlm@46
|
32154 };
|
rlm@46
|
32155
|
rlm@46
|
32156 Ext.extend(Ext.grid.AbstractSelectionModel, Ext.util.Observable, {
|
rlm@46
|
32157
|
rlm@46
|
32158 init : function(grid){
|
rlm@46
|
32159 this.grid = grid;
|
rlm@46
|
32160 this.initEvents();
|
rlm@46
|
32161 },
|
rlm@46
|
32162
|
rlm@46
|
32163
|
rlm@46
|
32164 lock : function(){
|
rlm@46
|
32165 this.locked = true;
|
rlm@46
|
32166 },
|
rlm@46
|
32167
|
rlm@46
|
32168
|
rlm@46
|
32169 unlock : function(){
|
rlm@46
|
32170 this.locked = false;
|
rlm@46
|
32171 },
|
rlm@46
|
32172
|
rlm@46
|
32173
|
rlm@46
|
32174 isLocked : function(){
|
rlm@46
|
32175 return this.locked;
|
rlm@46
|
32176 }
|
rlm@46
|
32177 });
|
rlm@46
|
32178
|
rlm@46
|
32179 Ext.grid.RowSelectionModel = function(config){
|
rlm@46
|
32180 Ext.apply(this, config);
|
rlm@46
|
32181 this.selections = new Ext.util.MixedCollection(false, function(o){
|
rlm@46
|
32182 return o.id;
|
rlm@46
|
32183 });
|
rlm@46
|
32184
|
rlm@46
|
32185 this.last = false;
|
rlm@46
|
32186 this.lastActive = false;
|
rlm@46
|
32187
|
rlm@46
|
32188 this.addEvents(
|
rlm@46
|
32189
|
rlm@46
|
32190 "selectionchange",
|
rlm@46
|
32191
|
rlm@46
|
32192 "beforerowselect",
|
rlm@46
|
32193
|
rlm@46
|
32194 "rowselect",
|
rlm@46
|
32195
|
rlm@46
|
32196 "rowdeselect"
|
rlm@46
|
32197 );
|
rlm@46
|
32198
|
rlm@46
|
32199 Ext.grid.RowSelectionModel.superclass.constructor.call(this);
|
rlm@46
|
32200 };
|
rlm@46
|
32201
|
rlm@46
|
32202 Ext.extend(Ext.grid.RowSelectionModel, Ext.grid.AbstractSelectionModel, {
|
rlm@46
|
32203
|
rlm@46
|
32204 singleSelect : false,
|
rlm@46
|
32205
|
rlm@46
|
32206
|
rlm@46
|
32207 initEvents : function(){
|
rlm@46
|
32208
|
rlm@46
|
32209 if(!this.grid.enableDragDrop && !this.grid.enableDrag){
|
rlm@46
|
32210 this.grid.on("rowmousedown", this.handleMouseDown, this);
|
rlm@46
|
32211 }else{ this.grid.on("rowclick", function(grid, rowIndex, e) {
|
rlm@46
|
32212 if(e.button === 0 && !e.shiftKey && !e.ctrlKey) {
|
rlm@46
|
32213 this.selectRow(rowIndex, false);
|
rlm@46
|
32214 grid.view.focusRow(rowIndex);
|
rlm@46
|
32215 }
|
rlm@46
|
32216 }, this);
|
rlm@46
|
32217 }
|
rlm@46
|
32218
|
rlm@46
|
32219 this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {
|
rlm@46
|
32220 "up" : function(e){
|
rlm@46
|
32221 if(!e.shiftKey){
|
rlm@46
|
32222 this.selectPrevious(e.shiftKey);
|
rlm@46
|
32223 }else if(this.last !== false && this.lastActive !== false){
|
rlm@46
|
32224 var last = this.last;
|
rlm@46
|
32225 this.selectRange(this.last, this.lastActive-1);
|
rlm@46
|
32226 this.grid.getView().focusRow(this.lastActive);
|
rlm@46
|
32227 if(last !== false){
|
rlm@46
|
32228 this.last = last;
|
rlm@46
|
32229 }
|
rlm@46
|
32230 }else{
|
rlm@46
|
32231 this.selectFirstRow();
|
rlm@46
|
32232 }
|
rlm@46
|
32233 },
|
rlm@46
|
32234 "down" : function(e){
|
rlm@46
|
32235 if(!e.shiftKey){
|
rlm@46
|
32236 this.selectNext(e.shiftKey);
|
rlm@46
|
32237 }else if(this.last !== false && this.lastActive !== false){
|
rlm@46
|
32238 var last = this.last;
|
rlm@46
|
32239 this.selectRange(this.last, this.lastActive+1);
|
rlm@46
|
32240 this.grid.getView().focusRow(this.lastActive);
|
rlm@46
|
32241 if(last !== false){
|
rlm@46
|
32242 this.last = last;
|
rlm@46
|
32243 }
|
rlm@46
|
32244 }else{
|
rlm@46
|
32245 this.selectFirstRow();
|
rlm@46
|
32246 }
|
rlm@46
|
32247 },
|
rlm@46
|
32248 scope: this
|
rlm@46
|
32249 });
|
rlm@46
|
32250
|
rlm@46
|
32251 var view = this.grid.view;
|
rlm@46
|
32252 view.on("refresh", this.onRefresh, this);
|
rlm@46
|
32253 view.on("rowupdated", this.onRowUpdated, this);
|
rlm@46
|
32254 view.on("rowremoved", this.onRemove, this);
|
rlm@46
|
32255 },
|
rlm@46
|
32256
|
rlm@46
|
32257 onRefresh : function(){
|
rlm@46
|
32258 var ds = this.grid.store, index;
|
rlm@46
|
32259 var s = this.getSelections();
|
rlm@46
|
32260 this.clearSelections(true);
|
rlm@46
|
32261 for(var i = 0, len = s.length; i < len; i++){
|
rlm@46
|
32262 var r = s[i];
|
rlm@46
|
32263 if((index = ds.indexOfId(r.id)) != -1){
|
rlm@46
|
32264 this.selectRow(index, true);
|
rlm@46
|
32265 }
|
rlm@46
|
32266 }
|
rlm@46
|
32267 if(s.length != this.selections.getCount()){
|
rlm@46
|
32268 this.fireEvent("selectionchange", this);
|
rlm@46
|
32269 }
|
rlm@46
|
32270 },
|
rlm@46
|
32271
|
rlm@46
|
32272 onRemove : function(v, index, r){
|
rlm@46
|
32273 if(this.selections.remove(r) !== false){
|
rlm@46
|
32274 this.fireEvent('selectionchange', this);
|
rlm@46
|
32275 }
|
rlm@46
|
32276 },
|
rlm@46
|
32277
|
rlm@46
|
32278 onRowUpdated : function(v, index, r){
|
rlm@46
|
32279 if(this.isSelected(r)){
|
rlm@46
|
32280 v.onRowSelect(index);
|
rlm@46
|
32281 }
|
rlm@46
|
32282 },
|
rlm@46
|
32283
|
rlm@46
|
32284
|
rlm@46
|
32285 selectRecords : function(records, keepExisting){
|
rlm@46
|
32286 if(!keepExisting){
|
rlm@46
|
32287 this.clearSelections();
|
rlm@46
|
32288 }
|
rlm@46
|
32289 var ds = this.grid.store;
|
rlm@46
|
32290 for(var i = 0, len = records.length; i < len; i++){
|
rlm@46
|
32291 this.selectRow(ds.indexOf(records[i]), true);
|
rlm@46
|
32292 }
|
rlm@46
|
32293 },
|
rlm@46
|
32294
|
rlm@46
|
32295
|
rlm@46
|
32296 getCount : function(){
|
rlm@46
|
32297 return this.selections.length;
|
rlm@46
|
32298 },
|
rlm@46
|
32299
|
rlm@46
|
32300
|
rlm@46
|
32301 selectFirstRow : function(){
|
rlm@46
|
32302 this.selectRow(0);
|
rlm@46
|
32303 },
|
rlm@46
|
32304
|
rlm@46
|
32305
|
rlm@46
|
32306 selectLastRow : function(keepExisting){
|
rlm@46
|
32307 this.selectRow(this.grid.store.getCount() - 1, keepExisting);
|
rlm@46
|
32308 },
|
rlm@46
|
32309
|
rlm@46
|
32310
|
rlm@46
|
32311 selectNext : function(keepExisting){
|
rlm@46
|
32312 if(this.hasNext()){
|
rlm@46
|
32313 this.selectRow(this.last+1, keepExisting);
|
rlm@46
|
32314 this.grid.getView().focusRow(this.last);
|
rlm@46
|
32315 return true;
|
rlm@46
|
32316 }
|
rlm@46
|
32317 return false;
|
rlm@46
|
32318 },
|
rlm@46
|
32319
|
rlm@46
|
32320
|
rlm@46
|
32321 selectPrevious : function(keepExisting){
|
rlm@46
|
32322 if(this.hasPrevious()){
|
rlm@46
|
32323 this.selectRow(this.last-1, keepExisting);
|
rlm@46
|
32324 this.grid.getView().focusRow(this.last);
|
rlm@46
|
32325 return true;
|
rlm@46
|
32326 }
|
rlm@46
|
32327 return false;
|
rlm@46
|
32328 },
|
rlm@46
|
32329
|
rlm@46
|
32330
|
rlm@46
|
32331 hasNext : function(){
|
rlm@46
|
32332 return this.last !== false && (this.last+1) < this.grid.store.getCount();
|
rlm@46
|
32333 },
|
rlm@46
|
32334
|
rlm@46
|
32335
|
rlm@46
|
32336 hasPrevious : function(){
|
rlm@46
|
32337 return !!this.last;
|
rlm@46
|
32338 },
|
rlm@46
|
32339
|
rlm@46
|
32340
|
rlm@46
|
32341
|
rlm@46
|
32342 getSelections : function(){
|
rlm@46
|
32343 return [].concat(this.selections.items);
|
rlm@46
|
32344 },
|
rlm@46
|
32345
|
rlm@46
|
32346
|
rlm@46
|
32347 getSelected : function(){
|
rlm@46
|
32348 return this.selections.itemAt(0);
|
rlm@46
|
32349 },
|
rlm@46
|
32350
|
rlm@46
|
32351
|
rlm@46
|
32352 each : function(fn, scope){
|
rlm@46
|
32353 var s = this.getSelections();
|
rlm@46
|
32354 for(var i = 0, len = s.length; i < len; i++){
|
rlm@46
|
32355 if(fn.call(scope || this, s[i], i) === false){
|
rlm@46
|
32356 return false;
|
rlm@46
|
32357 }
|
rlm@46
|
32358 }
|
rlm@46
|
32359 return true;
|
rlm@46
|
32360 },
|
rlm@46
|
32361
|
rlm@46
|
32362
|
rlm@46
|
32363 clearSelections : function(fast){
|
rlm@46
|
32364 if(this.locked) return;
|
rlm@46
|
32365 if(fast !== true){
|
rlm@46
|
32366 var ds = this.grid.store;
|
rlm@46
|
32367 var s = this.selections;
|
rlm@46
|
32368 s.each(function(r){
|
rlm@46
|
32369 this.deselectRow(ds.indexOfId(r.id));
|
rlm@46
|
32370 }, this);
|
rlm@46
|
32371 s.clear();
|
rlm@46
|
32372 }else{
|
rlm@46
|
32373 this.selections.clear();
|
rlm@46
|
32374 }
|
rlm@46
|
32375 this.last = false;
|
rlm@46
|
32376 },
|
rlm@46
|
32377
|
rlm@46
|
32378
|
rlm@46
|
32379
|
rlm@46
|
32380 selectAll : function(){
|
rlm@46
|
32381 if(this.locked) return;
|
rlm@46
|
32382 this.selections.clear();
|
rlm@46
|
32383 for(var i = 0, len = this.grid.store.getCount(); i < len; i++){
|
rlm@46
|
32384 this.selectRow(i, true);
|
rlm@46
|
32385 }
|
rlm@46
|
32386 },
|
rlm@46
|
32387
|
rlm@46
|
32388
|
rlm@46
|
32389 hasSelection : function(){
|
rlm@46
|
32390 return this.selections.length > 0;
|
rlm@46
|
32391 },
|
rlm@46
|
32392
|
rlm@46
|
32393
|
rlm@46
|
32394 isSelected : function(index){
|
rlm@46
|
32395 var r = typeof index == "number" ? this.grid.store.getAt(index) : index;
|
rlm@46
|
32396 return (r && this.selections.key(r.id) ? true : false);
|
rlm@46
|
32397 },
|
rlm@46
|
32398
|
rlm@46
|
32399
|
rlm@46
|
32400 isIdSelected : function(id){
|
rlm@46
|
32401 return (this.selections.key(id) ? true : false);
|
rlm@46
|
32402 },
|
rlm@46
|
32403
|
rlm@46
|
32404 handleMouseDown : function(g, rowIndex, e){
|
rlm@46
|
32405 if(e.button !== 0 || this.isLocked()){
|
rlm@46
|
32406 return;
|
rlm@46
|
32407 };
|
rlm@46
|
32408 var view = this.grid.getView();
|
rlm@46
|
32409 if(e.shiftKey && this.last !== false){
|
rlm@46
|
32410 var last = this.last;
|
rlm@46
|
32411 this.selectRange(last, rowIndex, e.ctrlKey);
|
rlm@46
|
32412 this.last = last; view.focusRow(rowIndex);
|
rlm@46
|
32413 }else{
|
rlm@46
|
32414 var isSelected = this.isSelected(rowIndex);
|
rlm@46
|
32415 if(e.ctrlKey && isSelected){
|
rlm@46
|
32416 this.deselectRow(rowIndex);
|
rlm@46
|
32417 }else if(!isSelected || this.getCount() > 1){
|
rlm@46
|
32418 this.selectRow(rowIndex, e.ctrlKey || e.shiftKey);
|
rlm@46
|
32419 view.focusRow(rowIndex);
|
rlm@46
|
32420 }
|
rlm@46
|
32421 }
|
rlm@46
|
32422 },
|
rlm@46
|
32423
|
rlm@46
|
32424
|
rlm@46
|
32425 selectRows : function(rows, keepExisting){
|
rlm@46
|
32426 if(!keepExisting){
|
rlm@46
|
32427 this.clearSelections();
|
rlm@46
|
32428 }
|
rlm@46
|
32429 for(var i = 0, len = rows.length; i < len; i++){
|
rlm@46
|
32430 this.selectRow(rows[i], true);
|
rlm@46
|
32431 }
|
rlm@46
|
32432 },
|
rlm@46
|
32433
|
rlm@46
|
32434
|
rlm@46
|
32435 selectRange : function(startRow, endRow, keepExisting){
|
rlm@46
|
32436 if(this.locked) return;
|
rlm@46
|
32437 if(!keepExisting){
|
rlm@46
|
32438 this.clearSelections();
|
rlm@46
|
32439 }
|
rlm@46
|
32440 if(startRow <= endRow){
|
rlm@46
|
32441 for(var i = startRow; i <= endRow; i++){
|
rlm@46
|
32442 this.selectRow(i, true);
|
rlm@46
|
32443 }
|
rlm@46
|
32444 }else{
|
rlm@46
|
32445 for(var i = startRow; i >= endRow; i--){
|
rlm@46
|
32446 this.selectRow(i, true);
|
rlm@46
|
32447 }
|
rlm@46
|
32448 }
|
rlm@46
|
32449 },
|
rlm@46
|
32450
|
rlm@46
|
32451
|
rlm@46
|
32452 deselectRange : function(startRow, endRow, preventViewNotify){
|
rlm@46
|
32453 if(this.locked) return;
|
rlm@46
|
32454 for(var i = startRow; i <= endRow; i++){
|
rlm@46
|
32455 this.deselectRow(i, preventViewNotify);
|
rlm@46
|
32456 }
|
rlm@46
|
32457 },
|
rlm@46
|
32458
|
rlm@46
|
32459
|
rlm@46
|
32460 selectRow : function(index, keepExisting, preventViewNotify){
|
rlm@46
|
32461 if(this.locked || (index < 0 || index >= this.grid.store.getCount())) return;
|
rlm@46
|
32462 var r = this.grid.store.getAt(index);
|
rlm@46
|
32463 if(r && this.fireEvent("beforerowselect", this, index, keepExisting, r) !== false){
|
rlm@46
|
32464 if(!keepExisting || this.singleSelect){
|
rlm@46
|
32465 this.clearSelections();
|
rlm@46
|
32466 }
|
rlm@46
|
32467 this.selections.add(r);
|
rlm@46
|
32468 this.last = this.lastActive = index;
|
rlm@46
|
32469 if(!preventViewNotify){
|
rlm@46
|
32470 this.grid.getView().onRowSelect(index);
|
rlm@46
|
32471 }
|
rlm@46
|
32472 this.fireEvent("rowselect", this, index, r);
|
rlm@46
|
32473 this.fireEvent("selectionchange", this);
|
rlm@46
|
32474 }
|
rlm@46
|
32475 },
|
rlm@46
|
32476
|
rlm@46
|
32477
|
rlm@46
|
32478 deselectRow : function(index, preventViewNotify){
|
rlm@46
|
32479 if(this.locked) return;
|
rlm@46
|
32480 if(this.last == index){
|
rlm@46
|
32481 this.last = false;
|
rlm@46
|
32482 }
|
rlm@46
|
32483 if(this.lastActive == index){
|
rlm@46
|
32484 this.lastActive = false;
|
rlm@46
|
32485 }
|
rlm@46
|
32486 var r = this.grid.store.getAt(index);
|
rlm@46
|
32487 if(r){
|
rlm@46
|
32488 this.selections.remove(r);
|
rlm@46
|
32489 if(!preventViewNotify){
|
rlm@46
|
32490 this.grid.getView().onRowDeselect(index);
|
rlm@46
|
32491 }
|
rlm@46
|
32492 this.fireEvent("rowdeselect", this, index, r);
|
rlm@46
|
32493 this.fireEvent("selectionchange", this);
|
rlm@46
|
32494 }
|
rlm@46
|
32495 },
|
rlm@46
|
32496
|
rlm@46
|
32497 restoreLast : function(){
|
rlm@46
|
32498 if(this._last){
|
rlm@46
|
32499 this.last = this._last;
|
rlm@46
|
32500 }
|
rlm@46
|
32501 },
|
rlm@46
|
32502
|
rlm@46
|
32503 acceptsNav : function(row, col, cm){
|
rlm@46
|
32504 return !cm.isHidden(col) && cm.isCellEditable(col, row);
|
rlm@46
|
32505 },
|
rlm@46
|
32506
|
rlm@46
|
32507 onEditorKey : function(field, e){
|
rlm@46
|
32508 var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
|
rlm@46
|
32509 var shift = e.shiftKey;
|
rlm@46
|
32510 if(k == e.TAB){
|
rlm@46
|
32511 e.stopEvent();
|
rlm@46
|
32512 ed.completeEdit();
|
rlm@46
|
32513 if(shift){
|
rlm@46
|
32514 newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
|
rlm@46
|
32515 }else{
|
rlm@46
|
32516 newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
|
rlm@46
|
32517 }
|
rlm@46
|
32518 }else if(k == e.ENTER){
|
rlm@46
|
32519 e.stopEvent();
|
rlm@46
|
32520 ed.completeEdit();
|
rlm@46
|
32521 if(this.moveEditorOnEnter !== false){
|
rlm@46
|
32522 if(shift){
|
rlm@46
|
32523 newCell = g.walkCells(ed.row - 1, ed.col, -1, this.acceptsNav, this);
|
rlm@46
|
32524 }else{
|
rlm@46
|
32525 newCell = g.walkCells(ed.row + 1, ed.col, 1, this.acceptsNav, this);
|
rlm@46
|
32526 }
|
rlm@46
|
32527 }
|
rlm@46
|
32528 }else if(k == e.ESC){
|
rlm@46
|
32529 ed.cancelEdit();
|
rlm@46
|
32530 }
|
rlm@46
|
32531 if(newCell){
|
rlm@46
|
32532 g.startEditing(newCell[0], newCell[1]);
|
rlm@46
|
32533 }
|
rlm@46
|
32534 }
|
rlm@46
|
32535 });
|
rlm@46
|
32536
|
rlm@46
|
32537 Ext.grid.CellSelectionModel = function(config){
|
rlm@46
|
32538 Ext.apply(this, config);
|
rlm@46
|
32539
|
rlm@46
|
32540 this.selection = null;
|
rlm@46
|
32541
|
rlm@46
|
32542 this.addEvents(
|
rlm@46
|
32543
|
rlm@46
|
32544 "beforecellselect",
|
rlm@46
|
32545
|
rlm@46
|
32546 "cellselect",
|
rlm@46
|
32547
|
rlm@46
|
32548 "selectionchange"
|
rlm@46
|
32549 );
|
rlm@46
|
32550
|
rlm@46
|
32551 Ext.grid.CellSelectionModel.superclass.constructor.call(this);
|
rlm@46
|
32552 };
|
rlm@46
|
32553
|
rlm@46
|
32554 Ext.extend(Ext.grid.CellSelectionModel, Ext.grid.AbstractSelectionModel, {
|
rlm@46
|
32555
|
rlm@46
|
32556
|
rlm@46
|
32557 initEvents : function(){
|
rlm@46
|
32558 this.grid.on("cellmousedown", this.handleMouseDown, this);
|
rlm@46
|
32559 this.grid.getGridEl().on(Ext.isIE || Ext.isSafari3 ? "keydown" : "keypress", this.handleKeyDown, this);
|
rlm@46
|
32560 var view = this.grid.view;
|
rlm@46
|
32561 view.on("refresh", this.onViewChange, this);
|
rlm@46
|
32562 view.on("rowupdated", this.onRowUpdated, this);
|
rlm@46
|
32563 view.on("beforerowremoved", this.clearSelections, this);
|
rlm@46
|
32564 view.on("beforerowsinserted", this.clearSelections, this);
|
rlm@46
|
32565 if(this.grid.isEditor){
|
rlm@46
|
32566 this.grid.on("beforeedit", this.beforeEdit, this);
|
rlm@46
|
32567 }
|
rlm@46
|
32568 },
|
rlm@46
|
32569
|
rlm@46
|
32570 beforeEdit : function(e){
|
rlm@46
|
32571 this.select(e.row, e.column, false, true, e.record);
|
rlm@46
|
32572 },
|
rlm@46
|
32573
|
rlm@46
|
32574 onRowUpdated : function(v, index, r){
|
rlm@46
|
32575 if(this.selection && this.selection.record == r){
|
rlm@46
|
32576 v.onCellSelect(index, this.selection.cell[1]);
|
rlm@46
|
32577 }
|
rlm@46
|
32578 },
|
rlm@46
|
32579
|
rlm@46
|
32580 onViewChange : function(){
|
rlm@46
|
32581 this.clearSelections(true);
|
rlm@46
|
32582 },
|
rlm@46
|
32583
|
rlm@46
|
32584
|
rlm@46
|
32585 getSelectedCell : function(){
|
rlm@46
|
32586 return this.selection ? this.selection.cell : null;
|
rlm@46
|
32587 },
|
rlm@46
|
32588
|
rlm@46
|
32589
|
rlm@46
|
32590 clearSelections : function(preventNotify){
|
rlm@46
|
32591 var s = this.selection;
|
rlm@46
|
32592 if(s){
|
rlm@46
|
32593 if(preventNotify !== true){
|
rlm@46
|
32594 this.grid.view.onCellDeselect(s.cell[0], s.cell[1]);
|
rlm@46
|
32595 }
|
rlm@46
|
32596 this.selection = null;
|
rlm@46
|
32597 this.fireEvent("selectionchange", this, null);
|
rlm@46
|
32598 }
|
rlm@46
|
32599 },
|
rlm@46
|
32600
|
rlm@46
|
32601
|
rlm@46
|
32602 hasSelection : function(){
|
rlm@46
|
32603 return this.selection ? true : false;
|
rlm@46
|
32604 },
|
rlm@46
|
32605
|
rlm@46
|
32606
|
rlm@46
|
32607 handleMouseDown : function(g, row, cell, e){
|
rlm@46
|
32608 if(e.button !== 0 || this.isLocked()){
|
rlm@46
|
32609 return;
|
rlm@46
|
32610 };
|
rlm@46
|
32611 this.select(row, cell);
|
rlm@46
|
32612 },
|
rlm@46
|
32613
|
rlm@46
|
32614
|
rlm@46
|
32615 select : function(rowIndex, colIndex, preventViewNotify, preventFocus, r){
|
rlm@46
|
32616 if(this.fireEvent("beforecellselect", this, rowIndex, colIndex) !== false){
|
rlm@46
|
32617 this.clearSelections();
|
rlm@46
|
32618 r = r || this.grid.store.getAt(rowIndex);
|
rlm@46
|
32619 this.selection = {
|
rlm@46
|
32620 record : r,
|
rlm@46
|
32621 cell : [rowIndex, colIndex]
|
rlm@46
|
32622 };
|
rlm@46
|
32623 if(!preventViewNotify){
|
rlm@46
|
32624 var v = this.grid.getView();
|
rlm@46
|
32625 v.onCellSelect(rowIndex, colIndex);
|
rlm@46
|
32626 if(preventFocus !== true){
|
rlm@46
|
32627 v.focusCell(rowIndex, colIndex);
|
rlm@46
|
32628 }
|
rlm@46
|
32629 }
|
rlm@46
|
32630 this.fireEvent("cellselect", this, rowIndex, colIndex);
|
rlm@46
|
32631 this.fireEvent("selectionchange", this, this.selection);
|
rlm@46
|
32632 }
|
rlm@46
|
32633 },
|
rlm@46
|
32634
|
rlm@46
|
32635 isSelectable : function(rowIndex, colIndex, cm){
|
rlm@46
|
32636 return !cm.isHidden(colIndex);
|
rlm@46
|
32637 },
|
rlm@46
|
32638
|
rlm@46
|
32639
|
rlm@46
|
32640 handleKeyDown : function(e){
|
rlm@46
|
32641 if(!e.isNavKeyPress()){
|
rlm@46
|
32642 return;
|
rlm@46
|
32643 }
|
rlm@46
|
32644 var g = this.grid, s = this.selection;
|
rlm@46
|
32645 if(!s){
|
rlm@46
|
32646 e.stopEvent();
|
rlm@46
|
32647 var cell = g.walkCells(0, 0, 1, this.isSelectable, this);
|
rlm@46
|
32648 if(cell){
|
rlm@46
|
32649 this.select(cell[0], cell[1]);
|
rlm@46
|
32650 }
|
rlm@46
|
32651 return;
|
rlm@46
|
32652 }
|
rlm@46
|
32653 var sm = this;
|
rlm@46
|
32654 var walk = function(row, col, step){
|
rlm@46
|
32655 return g.walkCells(row, col, step, sm.isSelectable, sm);
|
rlm@46
|
32656 };
|
rlm@46
|
32657 var k = e.getKey(), r = s.cell[0], c = s.cell[1];
|
rlm@46
|
32658 var newCell;
|
rlm@46
|
32659
|
rlm@46
|
32660 switch(k){
|
rlm@46
|
32661 case e.TAB:
|
rlm@46
|
32662 if(e.shiftKey){
|
rlm@46
|
32663 newCell = walk(r, c-1, -1);
|
rlm@46
|
32664 }else{
|
rlm@46
|
32665 newCell = walk(r, c+1, 1);
|
rlm@46
|
32666 }
|
rlm@46
|
32667 break;
|
rlm@46
|
32668 case e.DOWN:
|
rlm@46
|
32669 newCell = walk(r+1, c, 1);
|
rlm@46
|
32670 break;
|
rlm@46
|
32671 case e.UP:
|
rlm@46
|
32672 newCell = walk(r-1, c, -1);
|
rlm@46
|
32673 break;
|
rlm@46
|
32674 case e.RIGHT:
|
rlm@46
|
32675 newCell = walk(r, c+1, 1);
|
rlm@46
|
32676 break;
|
rlm@46
|
32677 case e.LEFT:
|
rlm@46
|
32678 newCell = walk(r, c-1, -1);
|
rlm@46
|
32679 break;
|
rlm@46
|
32680 case e.ENTER:
|
rlm@46
|
32681 if(g.isEditor && !g.editing){
|
rlm@46
|
32682 g.startEditing(r, c);
|
rlm@46
|
32683 e.stopEvent();
|
rlm@46
|
32684 return;
|
rlm@46
|
32685 }
|
rlm@46
|
32686 break;
|
rlm@46
|
32687 };
|
rlm@46
|
32688 if(newCell){
|
rlm@46
|
32689 this.select(newCell[0], newCell[1]);
|
rlm@46
|
32690 e.stopEvent();
|
rlm@46
|
32691 }
|
rlm@46
|
32692 },
|
rlm@46
|
32693
|
rlm@46
|
32694 acceptsNav : function(row, col, cm){
|
rlm@46
|
32695 return !cm.isHidden(col) && cm.isCellEditable(col, row);
|
rlm@46
|
32696 },
|
rlm@46
|
32697
|
rlm@46
|
32698 onEditorKey : function(field, e){
|
rlm@46
|
32699 var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
|
rlm@46
|
32700 if(k == e.TAB){
|
rlm@46
|
32701 if(e.shiftKey){
|
rlm@46
|
32702 newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
|
rlm@46
|
32703 }else{
|
rlm@46
|
32704 newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
|
rlm@46
|
32705 }
|
rlm@46
|
32706 e.stopEvent();
|
rlm@46
|
32707 }else if(k == e.ENTER){
|
rlm@46
|
32708 ed.completeEdit();
|
rlm@46
|
32709 e.stopEvent();
|
rlm@46
|
32710 }else if(k == e.ESC){
|
rlm@46
|
32711 e.stopEvent();
|
rlm@46
|
32712 ed.cancelEdit();
|
rlm@46
|
32713 }
|
rlm@46
|
32714 if(newCell){
|
rlm@46
|
32715 g.startEditing(newCell[0], newCell[1]);
|
rlm@46
|
32716 }
|
rlm@46
|
32717 }
|
rlm@46
|
32718 });
|
rlm@46
|
32719
|
rlm@46
|
32720 Ext.grid.EditorGridPanel = Ext.extend(Ext.grid.GridPanel, {
|
rlm@46
|
32721
|
rlm@46
|
32722 clicksToEdit: 2,
|
rlm@46
|
32723
|
rlm@46
|
32724 isEditor : true,
|
rlm@46
|
32725 detectEdit: false,
|
rlm@46
|
32726
|
rlm@46
|
32727
|
rlm@46
|
32728 autoEncode : false,
|
rlm@46
|
32729
|
rlm@46
|
32730
|
rlm@46
|
32731 trackMouseOver: false,
|
rlm@46
|
32732 initComponent : function(){
|
rlm@46
|
32733 Ext.grid.EditorGridPanel.superclass.initComponent.call(this);
|
rlm@46
|
32734
|
rlm@46
|
32735 if(!this.selModel){
|
rlm@46
|
32736
|
rlm@46
|
32737 this.selModel = new Ext.grid.CellSelectionModel();
|
rlm@46
|
32738 }
|
rlm@46
|
32739
|
rlm@46
|
32740 this.activeEditor = null;
|
rlm@46
|
32741
|
rlm@46
|
32742 this.addEvents(
|
rlm@46
|
32743
|
rlm@46
|
32744 "beforeedit",
|
rlm@46
|
32745
|
rlm@46
|
32746 "afteredit",
|
rlm@46
|
32747
|
rlm@46
|
32748 "validateedit"
|
rlm@46
|
32749 );
|
rlm@46
|
32750 },
|
rlm@46
|
32751
|
rlm@46
|
32752 initEvents : function(){
|
rlm@46
|
32753 Ext.grid.EditorGridPanel.superclass.initEvents.call(this);
|
rlm@46
|
32754
|
rlm@46
|
32755 this.on("bodyscroll", this.stopEditing, this, [true]);
|
rlm@46
|
32756
|
rlm@46
|
32757 if(this.clicksToEdit == 1){
|
rlm@46
|
32758 this.on("cellclick", this.onCellDblClick, this);
|
rlm@46
|
32759 }else {
|
rlm@46
|
32760 if(this.clicksToEdit == 'auto' && this.view.mainBody){
|
rlm@46
|
32761 this.view.mainBody.on("mousedown", this.onAutoEditClick, this);
|
rlm@46
|
32762 }
|
rlm@46
|
32763 this.on("celldblclick", this.onCellDblClick, this);
|
rlm@46
|
32764 }
|
rlm@46
|
32765 this.getGridEl().addClass("xedit-grid");
|
rlm@46
|
32766 },
|
rlm@46
|
32767
|
rlm@46
|
32768 onCellDblClick : function(g, row, col){
|
rlm@46
|
32769 this.startEditing(row, col);
|
rlm@46
|
32770 },
|
rlm@46
|
32771
|
rlm@46
|
32772 onAutoEditClick : function(e, t){
|
rlm@46
|
32773 if(e.button !== 0){
|
rlm@46
|
32774 return;
|
rlm@46
|
32775 }
|
rlm@46
|
32776 var row = this.view.findRowIndex(t);
|
rlm@46
|
32777 var col = this.view.findCellIndex(t);
|
rlm@46
|
32778 if(row !== false && col !== false){
|
rlm@46
|
32779 this.stopEditing();
|
rlm@46
|
32780 if(this.selModel.getSelectedCell){ var sc = this.selModel.getSelectedCell();
|
rlm@46
|
32781 if(sc && sc.cell[0] === row && sc.cell[1] === col){
|
rlm@46
|
32782 this.startEditing(row, col);
|
rlm@46
|
32783 }
|
rlm@46
|
32784 }else{
|
rlm@46
|
32785 if(this.selModel.isSelected(row)){
|
rlm@46
|
32786 this.startEditing(row, col);
|
rlm@46
|
32787 }
|
rlm@46
|
32788 }
|
rlm@46
|
32789 }
|
rlm@46
|
32790 },
|
rlm@46
|
32791
|
rlm@46
|
32792 onEditComplete : function(ed, value, startValue){
|
rlm@46
|
32793 this.editing = false;
|
rlm@46
|
32794 this.activeEditor = null;
|
rlm@46
|
32795 ed.un("specialkey", this.selModel.onEditorKey, this.selModel);
|
rlm@46
|
32796 var r = ed.record;
|
rlm@46
|
32797 var field = this.colModel.getDataIndex(ed.col);
|
rlm@46
|
32798 value = this.postEditValue(value, startValue, r, field);
|
rlm@46
|
32799 if(String(value) !== String(startValue)){
|
rlm@46
|
32800 var e = {
|
rlm@46
|
32801 grid: this,
|
rlm@46
|
32802 record: r,
|
rlm@46
|
32803 field: field,
|
rlm@46
|
32804 originalValue: startValue,
|
rlm@46
|
32805 value: value,
|
rlm@46
|
32806 row: ed.row,
|
rlm@46
|
32807 column: ed.col,
|
rlm@46
|
32808 cancel:false
|
rlm@46
|
32809 };
|
rlm@46
|
32810 if(this.fireEvent("validateedit", e) !== false && !e.cancel){
|
rlm@46
|
32811 r.set(field, e.value);
|
rlm@46
|
32812 delete e.cancel;
|
rlm@46
|
32813 this.fireEvent("afteredit", e);
|
rlm@46
|
32814 }
|
rlm@46
|
32815 }
|
rlm@46
|
32816 this.view.focusCell(ed.row, ed.col);
|
rlm@46
|
32817 },
|
rlm@46
|
32818
|
rlm@46
|
32819
|
rlm@46
|
32820 startEditing : function(row, col){
|
rlm@46
|
32821 this.stopEditing();
|
rlm@46
|
32822 if(this.colModel.isCellEditable(col, row)){
|
rlm@46
|
32823 this.view.ensureVisible(row, col, true);
|
rlm@46
|
32824 var r = this.store.getAt(row);
|
rlm@46
|
32825 var field = this.colModel.getDataIndex(col);
|
rlm@46
|
32826 var e = {
|
rlm@46
|
32827 grid: this,
|
rlm@46
|
32828 record: r,
|
rlm@46
|
32829 field: field,
|
rlm@46
|
32830 value: r.data[field],
|
rlm@46
|
32831 row: row,
|
rlm@46
|
32832 column: col,
|
rlm@46
|
32833 cancel:false
|
rlm@46
|
32834 };
|
rlm@46
|
32835 if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
|
rlm@46
|
32836 this.editing = true;
|
rlm@46
|
32837 var ed = this.colModel.getCellEditor(col, row);
|
rlm@46
|
32838 if(!ed.rendered){
|
rlm@46
|
32839 ed.render(this.view.getEditorParent(ed));
|
rlm@46
|
32840 }
|
rlm@46
|
32841 (function(){ ed.row = row;
|
rlm@46
|
32842 ed.col = col;
|
rlm@46
|
32843 ed.record = r;
|
rlm@46
|
32844 ed.on("complete", this.onEditComplete, this, {single: true});
|
rlm@46
|
32845 ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
|
rlm@46
|
32846 this.activeEditor = ed;
|
rlm@46
|
32847 var v = this.preEditValue(r, field);
|
rlm@46
|
32848 ed.startEdit(this.view.getCell(row, col), v);
|
rlm@46
|
32849 }).defer(50, this);
|
rlm@46
|
32850 }
|
rlm@46
|
32851 }
|
rlm@46
|
32852 },
|
rlm@46
|
32853
|
rlm@46
|
32854 preEditValue : function(r, field){
|
rlm@46
|
32855 return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlDecode(r.data[field]) : r.data[field];
|
rlm@46
|
32856 },
|
rlm@46
|
32857
|
rlm@46
|
32858 postEditValue : function(value, originalValue, r, field){
|
rlm@46
|
32859 return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlEncode(value) : value;
|
rlm@46
|
32860 },
|
rlm@46
|
32861
|
rlm@46
|
32862
|
rlm@46
|
32863 stopEditing : function(cancel){
|
rlm@46
|
32864 if(this.activeEditor){
|
rlm@46
|
32865 this.activeEditor[cancel === true ? 'cancelEdit' : 'completeEdit']();
|
rlm@46
|
32866 }
|
rlm@46
|
32867 this.activeEditor = null;
|
rlm@46
|
32868 }
|
rlm@46
|
32869 });
|
rlm@46
|
32870 Ext.reg('editorgrid', Ext.grid.EditorGridPanel);
|
rlm@46
|
32871 Ext.grid.GridEditor = function(field, config){
|
rlm@46
|
32872 Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
|
rlm@46
|
32873 field.monitorTab = false;
|
rlm@46
|
32874 };
|
rlm@46
|
32875
|
rlm@46
|
32876 Ext.extend(Ext.grid.GridEditor, Ext.Editor, {
|
rlm@46
|
32877 alignment: "tl-tl",
|
rlm@46
|
32878 autoSize: "width",
|
rlm@46
|
32879 hideEl : false,
|
rlm@46
|
32880 cls: "x-small-editor x-grid-editor",
|
rlm@46
|
32881 shim:false,
|
rlm@46
|
32882 shadow:false
|
rlm@46
|
32883 });
|
rlm@46
|
32884
|
rlm@46
|
32885 Ext.grid.PropertyRecord = Ext.data.Record.create([
|
rlm@46
|
32886 {name:'name',type:'string'}, 'value'
|
rlm@46
|
32887 ]);
|
rlm@46
|
32888
|
rlm@46
|
32889
|
rlm@46
|
32890 Ext.grid.PropertyStore = function(grid, source){
|
rlm@46
|
32891 this.grid = grid;
|
rlm@46
|
32892 this.store = new Ext.data.Store({
|
rlm@46
|
32893 recordType : Ext.grid.PropertyRecord
|
rlm@46
|
32894 });
|
rlm@46
|
32895 this.store.on('update', this.onUpdate, this);
|
rlm@46
|
32896 if(source){
|
rlm@46
|
32897 this.setSource(source);
|
rlm@46
|
32898 }
|
rlm@46
|
32899 Ext.grid.PropertyStore.superclass.constructor.call(this);
|
rlm@46
|
32900 };
|
rlm@46
|
32901 Ext.extend(Ext.grid.PropertyStore, Ext.util.Observable, {
|
rlm@46
|
32902 setSource : function(o){
|
rlm@46
|
32903 this.source = o;
|
rlm@46
|
32904 this.store.removeAll();
|
rlm@46
|
32905 var data = [];
|
rlm@46
|
32906 for(var k in o){
|
rlm@46
|
32907 if(this.isEditableValue(o[k])){
|
rlm@46
|
32908 data.push(new Ext.grid.PropertyRecord({name: k, value: o[k]}, k));
|
rlm@46
|
32909 }
|
rlm@46
|
32910 }
|
rlm@46
|
32911 this.store.loadRecords({records: data}, {}, true);
|
rlm@46
|
32912 },
|
rlm@46
|
32913
|
rlm@46
|
32914 onUpdate : function(ds, record, type){
|
rlm@46
|
32915 if(type == Ext.data.Record.EDIT){
|
rlm@46
|
32916 var v = record.data['value'];
|
rlm@46
|
32917 var oldValue = record.modified['value'];
|
rlm@46
|
32918 if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){
|
rlm@46
|
32919 this.source[record.id] = v;
|
rlm@46
|
32920 record.commit();
|
rlm@46
|
32921 this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue);
|
rlm@46
|
32922 }else{
|
rlm@46
|
32923 record.reject();
|
rlm@46
|
32924 }
|
rlm@46
|
32925 }
|
rlm@46
|
32926 },
|
rlm@46
|
32927
|
rlm@46
|
32928 getProperty : function(row){
|
rlm@46
|
32929 return this.store.getAt(row);
|
rlm@46
|
32930 },
|
rlm@46
|
32931
|
rlm@46
|
32932 isEditableValue: function(val){
|
rlm@46
|
32933 if(Ext.isDate(val)){
|
rlm@46
|
32934 return true;
|
rlm@46
|
32935 }else if(typeof val == 'object' || typeof val == 'function'){
|
rlm@46
|
32936 return false;
|
rlm@46
|
32937 }
|
rlm@46
|
32938 return true;
|
rlm@46
|
32939 },
|
rlm@46
|
32940
|
rlm@46
|
32941 setValue : function(prop, value){
|
rlm@46
|
32942 this.source[prop] = value;
|
rlm@46
|
32943 this.store.getById(prop).set('value', value);
|
rlm@46
|
32944 },
|
rlm@46
|
32945
|
rlm@46
|
32946 getSource : function(){
|
rlm@46
|
32947 return this.source;
|
rlm@46
|
32948 }
|
rlm@46
|
32949 });
|
rlm@46
|
32950
|
rlm@46
|
32951
|
rlm@46
|
32952 Ext.grid.PropertyColumnModel = function(grid, store){
|
rlm@46
|
32953 this.grid = grid;
|
rlm@46
|
32954 var g = Ext.grid;
|
rlm@46
|
32955 g.PropertyColumnModel.superclass.constructor.call(this, [
|
rlm@46
|
32956 {header: this.nameText, width:50, sortable: true, dataIndex:'name', id: 'name', menuDisabled:true},
|
rlm@46
|
32957 {header: this.valueText, width:50, resizable:false, dataIndex: 'value', id: 'value', menuDisabled:true}
|
rlm@46
|
32958 ]);
|
rlm@46
|
32959 this.store = store;
|
rlm@46
|
32960 this.bselect = Ext.DomHelper.append(document.body, {
|
rlm@46
|
32961 tag: 'select', cls: 'x-grid-editor x-hide-display', children: [
|
rlm@46
|
32962 {tag: 'option', value: 'true', html: 'true'},
|
rlm@46
|
32963 {tag: 'option', value: 'false', html: 'false'}
|
rlm@46
|
32964 ]
|
rlm@46
|
32965 });
|
rlm@46
|
32966 var f = Ext.form;
|
rlm@46
|
32967
|
rlm@46
|
32968 var bfield = new f.Field({
|
rlm@46
|
32969 el:this.bselect,
|
rlm@46
|
32970 bselect : this.bselect,
|
rlm@46
|
32971 autoShow: true,
|
rlm@46
|
32972 getValue : function(){
|
rlm@46
|
32973 return this.bselect.value == 'true';
|
rlm@46
|
32974 }
|
rlm@46
|
32975 });
|
rlm@46
|
32976 this.editors = {
|
rlm@46
|
32977 'date' : new g.GridEditor(new f.DateField({selectOnFocus:true})),
|
rlm@46
|
32978 'string' : new g.GridEditor(new f.TextField({selectOnFocus:true})),
|
rlm@46
|
32979 'number' : new g.GridEditor(new f.NumberField({selectOnFocus:true, style:'text-align:left;'})),
|
rlm@46
|
32980 'boolean' : new g.GridEditor(bfield)
|
rlm@46
|
32981 };
|
rlm@46
|
32982 this.renderCellDelegate = this.renderCell.createDelegate(this);
|
rlm@46
|
32983 this.renderPropDelegate = this.renderProp.createDelegate(this);
|
rlm@46
|
32984 };
|
rlm@46
|
32985
|
rlm@46
|
32986 Ext.extend(Ext.grid.PropertyColumnModel, Ext.grid.ColumnModel, {
|
rlm@46
|
32987 nameText : 'Name',
|
rlm@46
|
32988 valueText : 'Value',
|
rlm@46
|
32989 dateFormat : 'm/j/Y',
|
rlm@46
|
32990
|
rlm@46
|
32991 renderDate : function(dateVal){
|
rlm@46
|
32992 return dateVal.dateFormat(this.dateFormat);
|
rlm@46
|
32993 },
|
rlm@46
|
32994
|
rlm@46
|
32995 renderBool : function(bVal){
|
rlm@46
|
32996 return bVal ? 'true' : 'false';
|
rlm@46
|
32997 },
|
rlm@46
|
32998
|
rlm@46
|
32999 isCellEditable : function(colIndex, rowIndex){
|
rlm@46
|
33000 return colIndex == 1;
|
rlm@46
|
33001 },
|
rlm@46
|
33002
|
rlm@46
|
33003 getRenderer : function(col){
|
rlm@46
|
33004 return col == 1 ?
|
rlm@46
|
33005 this.renderCellDelegate : this.renderPropDelegate;
|
rlm@46
|
33006 },
|
rlm@46
|
33007
|
rlm@46
|
33008 renderProp : function(v){
|
rlm@46
|
33009 return this.getPropertyName(v);
|
rlm@46
|
33010 },
|
rlm@46
|
33011
|
rlm@46
|
33012 renderCell : function(val){
|
rlm@46
|
33013 var rv = val;
|
rlm@46
|
33014 if(Ext.isDate(val)){
|
rlm@46
|
33015 rv = this.renderDate(val);
|
rlm@46
|
33016 }else if(typeof val == 'boolean'){
|
rlm@46
|
33017 rv = this.renderBool(val);
|
rlm@46
|
33018 }
|
rlm@46
|
33019 return Ext.util.Format.htmlEncode(rv);
|
rlm@46
|
33020 },
|
rlm@46
|
33021
|
rlm@46
|
33022 getPropertyName : function(name){
|
rlm@46
|
33023 var pn = this.grid.propertyNames;
|
rlm@46
|
33024 return pn && pn[name] ? pn[name] : name;
|
rlm@46
|
33025 },
|
rlm@46
|
33026
|
rlm@46
|
33027 getCellEditor : function(colIndex, rowIndex){
|
rlm@46
|
33028 var p = this.store.getProperty(rowIndex);
|
rlm@46
|
33029 var n = p.data['name'], val = p.data['value'];
|
rlm@46
|
33030 if(this.grid.customEditors[n]){
|
rlm@46
|
33031 return this.grid.customEditors[n];
|
rlm@46
|
33032 }
|
rlm@46
|
33033 if(Ext.isDate(val)){
|
rlm@46
|
33034 return this.editors['date'];
|
rlm@46
|
33035 }else if(typeof val == 'number'){
|
rlm@46
|
33036 return this.editors['number'];
|
rlm@46
|
33037 }else if(typeof val == 'boolean'){
|
rlm@46
|
33038 return this.editors['boolean'];
|
rlm@46
|
33039 }else{
|
rlm@46
|
33040 return this.editors['string'];
|
rlm@46
|
33041 }
|
rlm@46
|
33042 }
|
rlm@46
|
33043 });
|
rlm@46
|
33044
|
rlm@46
|
33045
|
rlm@46
|
33046 Ext.grid.PropertyGrid = Ext.extend(Ext.grid.EditorGridPanel, {
|
rlm@46
|
33047
|
rlm@46
|
33048
|
rlm@46
|
33049
|
rlm@46
|
33050 enableColumnMove:false,
|
rlm@46
|
33051 stripeRows:false,
|
rlm@46
|
33052 trackMouseOver: false,
|
rlm@46
|
33053 clicksToEdit:1,
|
rlm@46
|
33054 enableHdMenu : false,
|
rlm@46
|
33055 viewConfig : {
|
rlm@46
|
33056 forceFit:true
|
rlm@46
|
33057 },
|
rlm@46
|
33058
|
rlm@46
|
33059 initComponent : function(){
|
rlm@46
|
33060 this.customEditors = this.customEditors || {};
|
rlm@46
|
33061 this.lastEditRow = null;
|
rlm@46
|
33062 var store = new Ext.grid.PropertyStore(this);
|
rlm@46
|
33063 this.propStore = store;
|
rlm@46
|
33064 var cm = new Ext.grid.PropertyColumnModel(this, store);
|
rlm@46
|
33065 store.store.sort('name', 'ASC');
|
rlm@46
|
33066 this.addEvents(
|
rlm@46
|
33067
|
rlm@46
|
33068 'beforepropertychange',
|
rlm@46
|
33069
|
rlm@46
|
33070 'propertychange'
|
rlm@46
|
33071 );
|
rlm@46
|
33072 this.cm = cm;
|
rlm@46
|
33073 this.ds = store.store;
|
rlm@46
|
33074 Ext.grid.PropertyGrid.superclass.initComponent.call(this);
|
rlm@46
|
33075
|
rlm@46
|
33076 this.selModel.on('beforecellselect', function(sm, rowIndex, colIndex){
|
rlm@46
|
33077 if(colIndex === 0){
|
rlm@46
|
33078 this.startEditing.defer(200, this, [rowIndex, 1]);
|
rlm@46
|
33079 return false;
|
rlm@46
|
33080 }
|
rlm@46
|
33081 }, this);
|
rlm@46
|
33082 },
|
rlm@46
|
33083
|
rlm@46
|
33084 onRender : function(){
|
rlm@46
|
33085 Ext.grid.PropertyGrid.superclass.onRender.apply(this, arguments);
|
rlm@46
|
33086
|
rlm@46
|
33087 this.getGridEl().addClass('x-props-grid');
|
rlm@46
|
33088 },
|
rlm@46
|
33089
|
rlm@46
|
33090 afterRender: function(){
|
rlm@46
|
33091 Ext.grid.PropertyGrid.superclass.afterRender.apply(this, arguments);
|
rlm@46
|
33092 if(this.source){
|
rlm@46
|
33093 this.setSource(this.source);
|
rlm@46
|
33094 }
|
rlm@46
|
33095 },
|
rlm@46
|
33096
|
rlm@46
|
33097
|
rlm@46
|
33098 setSource : function(source){
|
rlm@46
|
33099 this.propStore.setSource(source);
|
rlm@46
|
33100 },
|
rlm@46
|
33101
|
rlm@46
|
33102
|
rlm@46
|
33103 getSource : function(){
|
rlm@46
|
33104 return this.propStore.getSource();
|
rlm@46
|
33105 }
|
rlm@46
|
33106 });
|
rlm@46
|
33107 Ext.reg("propertygrid", Ext.grid.PropertyGrid);
|
rlm@46
|
33108
|
rlm@46
|
33109
|
rlm@46
|
33110 Ext.grid.RowNumberer = function(config){
|
rlm@46
|
33111 Ext.apply(this, config);
|
rlm@46
|
33112 if(this.rowspan){
|
rlm@46
|
33113 this.renderer = this.renderer.createDelegate(this);
|
rlm@46
|
33114 }
|
rlm@46
|
33115 };
|
rlm@46
|
33116
|
rlm@46
|
33117 Ext.grid.RowNumberer.prototype = {
|
rlm@46
|
33118
|
rlm@46
|
33119 header: "",
|
rlm@46
|
33120
|
rlm@46
|
33121 width: 23,
|
rlm@46
|
33122
|
rlm@46
|
33123 sortable: false,
|
rlm@46
|
33124
|
rlm@46
|
33125
|
rlm@46
|
33126 fixed:true,
|
rlm@46
|
33127 menuDisabled:true,
|
rlm@46
|
33128 dataIndex: '',
|
rlm@46
|
33129 id: 'numberer',
|
rlm@46
|
33130 rowspan: undefined,
|
rlm@46
|
33131
|
rlm@46
|
33132
|
rlm@46
|
33133 renderer : function(v, p, record, rowIndex){
|
rlm@46
|
33134 if(this.rowspan){
|
rlm@46
|
33135 p.cellAttr = 'rowspan="'+this.rowspan+'"';
|
rlm@46
|
33136 }
|
rlm@46
|
33137 return rowIndex+1;
|
rlm@46
|
33138 }
|
rlm@46
|
33139 };
|
rlm@46
|
33140
|
rlm@46
|
33141 Ext.grid.CheckboxSelectionModel = Ext.extend(Ext.grid.RowSelectionModel, {
|
rlm@46
|
33142
|
rlm@46
|
33143 header: '<div class="x-grid3-hd-checker"> </div>',
|
rlm@46
|
33144
|
rlm@46
|
33145 width: 20,
|
rlm@46
|
33146
|
rlm@46
|
33147 sortable: false,
|
rlm@46
|
33148
|
rlm@46
|
33149
|
rlm@46
|
33150 menuDisabled:true,
|
rlm@46
|
33151 fixed:true,
|
rlm@46
|
33152 dataIndex: '',
|
rlm@46
|
33153 id: 'checker',
|
rlm@46
|
33154
|
rlm@46
|
33155
|
rlm@46
|
33156 initEvents : function(){
|
rlm@46
|
33157 Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);
|
rlm@46
|
33158 this.grid.on('render', function(){
|
rlm@46
|
33159 var view = this.grid.getView();
|
rlm@46
|
33160 view.mainBody.on('mousedown', this.onMouseDown, this);
|
rlm@46
|
33161 Ext.fly(view.innerHd).on('mousedown', this.onHdMouseDown, this);
|
rlm@46
|
33162
|
rlm@46
|
33163 }, this);
|
rlm@46
|
33164 },
|
rlm@46
|
33165
|
rlm@46
|
33166
|
rlm@46
|
33167 onMouseDown : function(e, t){
|
rlm@46
|
33168 if(e.button === 0 && t.className == 'x-grid3-row-checker'){
|
rlm@46
|
33169 e.stopEvent();
|
rlm@46
|
33170 var row = e.getTarget('.x-grid3-row');
|
rlm@46
|
33171 if(row){
|
rlm@46
|
33172 var index = row.rowIndex;
|
rlm@46
|
33173 if(this.isSelected(index)){
|
rlm@46
|
33174 this.deselectRow(index);
|
rlm@46
|
33175 }else{
|
rlm@46
|
33176 this.selectRow(index, true);
|
rlm@46
|
33177 }
|
rlm@46
|
33178 }
|
rlm@46
|
33179 }
|
rlm@46
|
33180 },
|
rlm@46
|
33181
|
rlm@46
|
33182
|
rlm@46
|
33183 onHdMouseDown : function(e, t){
|
rlm@46
|
33184 if(t.className == 'x-grid3-hd-checker'){
|
rlm@46
|
33185 e.stopEvent();
|
rlm@46
|
33186 var hd = Ext.fly(t.parentNode);
|
rlm@46
|
33187 var isChecked = hd.hasClass('x-grid3-hd-checker-on');
|
rlm@46
|
33188 if(isChecked){
|
rlm@46
|
33189 hd.removeClass('x-grid3-hd-checker-on');
|
rlm@46
|
33190 this.clearSelections();
|
rlm@46
|
33191 }else{
|
rlm@46
|
33192 hd.addClass('x-grid3-hd-checker-on');
|
rlm@46
|
33193 this.selectAll();
|
rlm@46
|
33194 }
|
rlm@46
|
33195 }
|
rlm@46
|
33196 },
|
rlm@46
|
33197
|
rlm@46
|
33198
|
rlm@46
|
33199 renderer : function(v, p, record){
|
rlm@46
|
33200 return '<div class="x-grid3-row-checker"> </div>';
|
rlm@46
|
33201 }
|
rlm@46
|
33202 });
|
rlm@46
|
33203
|
rlm@46
|
33204 Ext.LoadMask = function(el, config){
|
rlm@46
|
33205 this.el = Ext.get(el);
|
rlm@46
|
33206 Ext.apply(this, config);
|
rlm@46
|
33207 if(this.store){
|
rlm@46
|
33208 this.store.on('beforeload', this.onBeforeLoad, this);
|
rlm@46
|
33209 this.store.on('load', this.onLoad, this);
|
rlm@46
|
33210 this.store.on('loadexception', this.onLoad, this);
|
rlm@46
|
33211 this.removeMask = Ext.value(this.removeMask, false);
|
rlm@46
|
33212 }else{
|
rlm@46
|
33213 var um = this.el.getUpdater();
|
rlm@46
|
33214 um.showLoadIndicator = false; um.on('beforeupdate', this.onBeforeLoad, this);
|
rlm@46
|
33215 um.on('update', this.onLoad, this);
|
rlm@46
|
33216 um.on('failure', this.onLoad, this);
|
rlm@46
|
33217 this.removeMask = Ext.value(this.removeMask, true);
|
rlm@46
|
33218 }
|
rlm@46
|
33219 };
|
rlm@46
|
33220
|
rlm@46
|
33221 Ext.LoadMask.prototype = {
|
rlm@46
|
33222
|
rlm@46
|
33223
|
rlm@46
|
33224
|
rlm@46
|
33225 msg : 'Loading...',
|
rlm@46
|
33226
|
rlm@46
|
33227 msgCls : 'x-mask-loading',
|
rlm@46
|
33228
|
rlm@46
|
33229
|
rlm@46
|
33230 disabled: false,
|
rlm@46
|
33231
|
rlm@46
|
33232
|
rlm@46
|
33233 disable : function(){
|
rlm@46
|
33234 this.disabled = true;
|
rlm@46
|
33235 },
|
rlm@46
|
33236
|
rlm@46
|
33237
|
rlm@46
|
33238 enable : function(){
|
rlm@46
|
33239 this.disabled = false;
|
rlm@46
|
33240 },
|
rlm@46
|
33241
|
rlm@46
|
33242 onLoad : function(){
|
rlm@46
|
33243 this.el.unmask(this.removeMask);
|
rlm@46
|
33244 },
|
rlm@46
|
33245
|
rlm@46
|
33246 onBeforeLoad : function(){
|
rlm@46
|
33247 if(!this.disabled){
|
rlm@46
|
33248 this.el.mask(this.msg, this.msgCls);
|
rlm@46
|
33249 }
|
rlm@46
|
33250 },
|
rlm@46
|
33251
|
rlm@46
|
33252
|
rlm@46
|
33253 show: function(){
|
rlm@46
|
33254 this.onBeforeLoad();
|
rlm@46
|
33255 },
|
rlm@46
|
33256
|
rlm@46
|
33257
|
rlm@46
|
33258 hide: function(){
|
rlm@46
|
33259 this.onLoad();
|
rlm@46
|
33260 },
|
rlm@46
|
33261
|
rlm@46
|
33262 destroy : function(){
|
rlm@46
|
33263 if(this.store){
|
rlm@46
|
33264 this.store.un('beforeload', this.onBeforeLoad, this);
|
rlm@46
|
33265 this.store.un('load', this.onLoad, this);
|
rlm@46
|
33266 this.store.un('loadexception', this.onLoad, this);
|
rlm@46
|
33267 }else{
|
rlm@46
|
33268 var um = this.el.getUpdater();
|
rlm@46
|
33269 um.un('beforeupdate', this.onBeforeLoad, this);
|
rlm@46
|
33270 um.un('update', this.onLoad, this);
|
rlm@46
|
33271 um.un('failure', this.onLoad, this);
|
rlm@46
|
33272 }
|
rlm@46
|
33273 }
|
rlm@46
|
33274 };
|
rlm@46
|
33275
|
rlm@46
|
33276 Ext.ProgressBar = Ext.extend(Ext.BoxComponent, {
|
rlm@46
|
33277
|
rlm@46
|
33278 baseCls : 'x-progress',
|
rlm@46
|
33279
|
rlm@46
|
33280
|
rlm@46
|
33281 waitTimer : null,
|
rlm@46
|
33282
|
rlm@46
|
33283
|
rlm@46
|
33284 initComponent : function(){
|
rlm@46
|
33285 Ext.ProgressBar.superclass.initComponent.call(this);
|
rlm@46
|
33286 this.addEvents(
|
rlm@46
|
33287
|
rlm@46
|
33288 "update"
|
rlm@46
|
33289 );
|
rlm@46
|
33290 },
|
rlm@46
|
33291
|
rlm@46
|
33292
|
rlm@46
|
33293 onRender : function(ct, position){
|
rlm@46
|
33294 Ext.ProgressBar.superclass.onRender.call(this, ct, position);
|
rlm@46
|
33295
|
rlm@46
|
33296 var tpl = new Ext.Template(
|
rlm@46
|
33297 '<div class="{cls}-wrap">',
|
rlm@46
|
33298 '<div class="{cls}-inner">',
|
rlm@46
|
33299 '<div class="{cls}-bar">',
|
rlm@46
|
33300 '<div class="{cls}-text">',
|
rlm@46
|
33301 '<div> </div>',
|
rlm@46
|
33302 '</div>',
|
rlm@46
|
33303 '</div>',
|
rlm@46
|
33304 '<div class="{cls}-text {cls}-text-back">',
|
rlm@46
|
33305 '<div> </div>',
|
rlm@46
|
33306 '</div>',
|
rlm@46
|
33307 '</div>',
|
rlm@46
|
33308 '</div>'
|
rlm@46
|
33309 );
|
rlm@46
|
33310
|
rlm@46
|
33311 if(position){
|
rlm@46
|
33312 this.el = tpl.insertBefore(position, {cls: this.baseCls}, true);
|
rlm@46
|
33313 }else{
|
rlm@46
|
33314 this.el = tpl.append(ct, {cls: this.baseCls}, true);
|
rlm@46
|
33315 }
|
rlm@46
|
33316 if(this.id){
|
rlm@46
|
33317 this.el.dom.id = this.id;
|
rlm@46
|
33318 }
|
rlm@46
|
33319 var inner = this.el.dom.firstChild;
|
rlm@46
|
33320 this.progressBar = Ext.get(inner.firstChild);
|
rlm@46
|
33321
|
rlm@46
|
33322 if(this.textEl){
|
rlm@46
|
33323
|
rlm@46
|
33324 this.textEl = Ext.get(this.textEl);
|
rlm@46
|
33325 delete this.textTopEl;
|
rlm@46
|
33326 }else{
|
rlm@46
|
33327
|
rlm@46
|
33328 this.textTopEl = Ext.get(this.progressBar.dom.firstChild);
|
rlm@46
|
33329 var textBackEl = Ext.get(inner.childNodes[1]);
|
rlm@46
|
33330 this.textTopEl.setStyle("z-index", 99).addClass('x-hidden');
|
rlm@46
|
33331 this.textEl = new Ext.CompositeElement([this.textTopEl.dom.firstChild, textBackEl.dom.firstChild]);
|
rlm@46
|
33332 this.textEl.setWidth(inner.offsetWidth);
|
rlm@46
|
33333 }
|
rlm@46
|
33334 this.progressBar.setHeight(inner.offsetHeight);
|
rlm@46
|
33335 },
|
rlm@46
|
33336
|
rlm@46
|
33337
|
rlm@46
|
33338 afterRender : function(){
|
rlm@46
|
33339 Ext.ProgressBar.superclass.afterRender.call(this);
|
rlm@46
|
33340 if(this.value){
|
rlm@46
|
33341 this.updateProgress(this.value, this.text);
|
rlm@46
|
33342 }else{
|
rlm@46
|
33343 this.updateText(this.text);
|
rlm@46
|
33344 }
|
rlm@46
|
33345 },
|
rlm@46
|
33346
|
rlm@46
|
33347
|
rlm@46
|
33348 updateProgress : function(value, text){
|
rlm@46
|
33349 this.value = value || 0;
|
rlm@46
|
33350 if(text){
|
rlm@46
|
33351 this.updateText(text);
|
rlm@46
|
33352 }
|
rlm@46
|
33353 var w = Math.floor(value*this.el.dom.firstChild.offsetWidth);
|
rlm@46
|
33354 this.progressBar.setWidth(w);
|
rlm@46
|
33355 if(this.textTopEl){
|
rlm@46
|
33356
|
rlm@46
|
33357 this.textTopEl.removeClass('x-hidden').setWidth(w);
|
rlm@46
|
33358 }
|
rlm@46
|
33359 this.fireEvent('update', this, value, text);
|
rlm@46
|
33360 return this;
|
rlm@46
|
33361 },
|
rlm@46
|
33362
|
rlm@46
|
33363
|
rlm@46
|
33364 wait : function(o){
|
rlm@46
|
33365 if(!this.waitTimer){
|
rlm@46
|
33366 var scope = this;
|
rlm@46
|
33367 o = o || {};
|
rlm@46
|
33368 this.waitTimer = Ext.TaskMgr.start({
|
rlm@46
|
33369 run: function(i){
|
rlm@46
|
33370 var inc = o.increment || 10;
|
rlm@46
|
33371 this.updateProgress(((((i+inc)%inc)+1)*(100/inc))*.01);
|
rlm@46
|
33372 },
|
rlm@46
|
33373 interval: o.interval || 1000,
|
rlm@46
|
33374 duration: o.duration,
|
rlm@46
|
33375 onStop: function(){
|
rlm@46
|
33376 if(o.fn){
|
rlm@46
|
33377 o.fn.apply(o.scope || this);
|
rlm@46
|
33378 }
|
rlm@46
|
33379 this.reset();
|
rlm@46
|
33380 },
|
rlm@46
|
33381 scope: scope
|
rlm@46
|
33382 });
|
rlm@46
|
33383 }
|
rlm@46
|
33384 return this;
|
rlm@46
|
33385 },
|
rlm@46
|
33386
|
rlm@46
|
33387
|
rlm@46
|
33388 isWaiting : function(){
|
rlm@46
|
33389 return this.waitTimer != null;
|
rlm@46
|
33390 },
|
rlm@46
|
33391
|
rlm@46
|
33392
|
rlm@46
|
33393 updateText : function(text){
|
rlm@46
|
33394 this.text = text || ' ';
|
rlm@46
|
33395 this.textEl.update(this.text);
|
rlm@46
|
33396 return this;
|
rlm@46
|
33397 },
|
rlm@46
|
33398
|
rlm@46
|
33399
|
rlm@46
|
33400 setSize : function(w, h){
|
rlm@46
|
33401 Ext.ProgressBar.superclass.setSize.call(this, w, h);
|
rlm@46
|
33402 if(this.textTopEl){
|
rlm@46
|
33403 var inner = this.el.dom.firstChild;
|
rlm@46
|
33404 this.textEl.setSize(inner.offsetWidth, inner.offsetHeight);
|
rlm@46
|
33405 }
|
rlm@46
|
33406 return this;
|
rlm@46
|
33407 },
|
rlm@46
|
33408
|
rlm@46
|
33409
|
rlm@46
|
33410 reset : function(hide){
|
rlm@46
|
33411 this.updateProgress(0);
|
rlm@46
|
33412 if(this.textTopEl){
|
rlm@46
|
33413 this.textTopEl.addClass('x-hidden');
|
rlm@46
|
33414 }
|
rlm@46
|
33415 if(this.waitTimer){
|
rlm@46
|
33416 this.waitTimer.onStop = null;
|
rlm@46
|
33417 Ext.TaskMgr.stop(this.waitTimer);
|
rlm@46
|
33418 this.waitTimer = null;
|
rlm@46
|
33419 }
|
rlm@46
|
33420 if(hide === true){
|
rlm@46
|
33421 this.hide();
|
rlm@46
|
33422 }
|
rlm@46
|
33423 return this;
|
rlm@46
|
33424 }
|
rlm@46
|
33425 });
|
rlm@46
|
33426 Ext.reg('progress', Ext.ProgressBar);
|
rlm@46
|
33427
|
rlm@46
|
33428 Ext.Slider = Ext.extend(Ext.BoxComponent, {
|
rlm@46
|
33429
|
rlm@46
|
33430
|
rlm@46
|
33431 vertical: false,
|
rlm@46
|
33432
|
rlm@46
|
33433 minValue: 0,
|
rlm@46
|
33434
|
rlm@46
|
33435 maxValue: 100,
|
rlm@46
|
33436
|
rlm@46
|
33437 keyIncrement: 1,
|
rlm@46
|
33438
|
rlm@46
|
33439 increment: 0,
|
rlm@46
|
33440
|
rlm@46
|
33441 clickRange: [5,15],
|
rlm@46
|
33442
|
rlm@46
|
33443 clickToChange : true,
|
rlm@46
|
33444
|
rlm@46
|
33445 animate: true,
|
rlm@46
|
33446
|
rlm@46
|
33447
|
rlm@46
|
33448 initComponent : function(){
|
rlm@46
|
33449 if(this.value === undefined){
|
rlm@46
|
33450 this.value = this.minValue;
|
rlm@46
|
33451 }
|
rlm@46
|
33452 Ext.Slider.superclass.initComponent.call(this);
|
rlm@46
|
33453 this.keyIncrement = Math.max(this.increment, this.keyIncrement);
|
rlm@46
|
33454 this.addEvents(
|
rlm@46
|
33455
|
rlm@46
|
33456 'beforechange',
|
rlm@46
|
33457
|
rlm@46
|
33458 'change',
|
rlm@46
|
33459
|
rlm@46
|
33460 'dragstart',
|
rlm@46
|
33461
|
rlm@46
|
33462 'drag',
|
rlm@46
|
33463
|
rlm@46
|
33464 'dragend'
|
rlm@46
|
33465 );
|
rlm@46
|
33466
|
rlm@46
|
33467 if(this.vertical){
|
rlm@46
|
33468 Ext.apply(this, Ext.Slider.Vertical);
|
rlm@46
|
33469 }
|
rlm@46
|
33470 },
|
rlm@46
|
33471
|
rlm@46
|
33472
|
rlm@46
|
33473 onRender : function(){
|
rlm@46
|
33474 this.autoEl = {
|
rlm@46
|
33475 cls: 'x-slider ' + (this.vertical ? 'x-slider-vert' : 'x-slider-horz'),
|
rlm@46
|
33476 cn:{cls:'x-slider-end',cn:{cls:'x-slider-inner',cn:[{cls:'x-slider-thumb'},{tag:'a', cls:'x-slider-focus', href:"#", tabIndex: '-1', hidefocus:'on'}]}}
|
rlm@46
|
33477 };
|
rlm@46
|
33478 Ext.Slider.superclass.onRender.apply(this, arguments);
|
rlm@46
|
33479 this.endEl = this.el.first();
|
rlm@46
|
33480 this.innerEl = this.endEl.first();
|
rlm@46
|
33481 this.thumb = this.innerEl.first();
|
rlm@46
|
33482 this.halfThumb = (this.vertical ? this.thumb.getHeight() : this.thumb.getWidth())/2;
|
rlm@46
|
33483 this.focusEl = this.thumb.next();
|
rlm@46
|
33484 this.initEvents();
|
rlm@46
|
33485 },
|
rlm@46
|
33486
|
rlm@46
|
33487
|
rlm@46
|
33488 initEvents : function(){
|
rlm@46
|
33489 this.thumb.addClassOnOver('x-slider-thumb-over');
|
rlm@46
|
33490 this.mon(this.el, 'mousedown', this.onMouseDown, this);
|
rlm@46
|
33491 this.mon(this.el, 'keydown', this.onKeyDown, this);
|
rlm@46
|
33492
|
rlm@46
|
33493 this.tracker = new Ext.dd.DragTracker({
|
rlm@46
|
33494 onBeforeStart: this.onBeforeDragStart.createDelegate(this),
|
rlm@46
|
33495 onStart: this.onDragStart.createDelegate(this),
|
rlm@46
|
33496 onDrag: this.onDrag.createDelegate(this),
|
rlm@46
|
33497 onEnd: this.onDragEnd.createDelegate(this),
|
rlm@46
|
33498 tolerance: 3,
|
rlm@46
|
33499 autoStart: 300
|
rlm@46
|
33500 });
|
rlm@46
|
33501 this.tracker.initEl(this.thumb);
|
rlm@46
|
33502 this.on('beforedestroy', this.tracker.destroy, this.tracker);
|
rlm@46
|
33503 },
|
rlm@46
|
33504
|
rlm@46
|
33505
|
rlm@46
|
33506 onMouseDown : function(e){
|
rlm@46
|
33507 if(this.disabled) {return;}
|
rlm@46
|
33508 if(this.clickToChange && e.target != this.thumb.dom){
|
rlm@46
|
33509 var local = this.innerEl.translatePoints(e.getXY());
|
rlm@46
|
33510 this.onClickChange(local);
|
rlm@46
|
33511 }
|
rlm@46
|
33512 this.focus();
|
rlm@46
|
33513 },
|
rlm@46
|
33514
|
rlm@46
|
33515
|
rlm@46
|
33516 onClickChange : function(local){
|
rlm@46
|
33517 if(local.top > this.clickRange[0] && local.top < this.clickRange[1]){
|
rlm@46
|
33518 this.setValue(Math.round(local.left/this.getRatio()));
|
rlm@46
|
33519 }
|
rlm@46
|
33520 },
|
rlm@46
|
33521
|
rlm@46
|
33522
|
rlm@46
|
33523 onKeyDown : function(e){
|
rlm@46
|
33524 if(this.disabled){e.preventDefault();return;}
|
rlm@46
|
33525 var k = e.getKey();
|
rlm@46
|
33526 switch(k){
|
rlm@46
|
33527 case e.UP:
|
rlm@46
|
33528 case e.RIGHT:
|
rlm@46
|
33529 e.stopEvent();
|
rlm@46
|
33530 if(e.ctrlKey){
|
rlm@46
|
33531 this.setValue(this.maxValue);
|
rlm@46
|
33532 }else{
|
rlm@46
|
33533 this.setValue(this.value+this.keyIncrement);
|
rlm@46
|
33534 }
|
rlm@46
|
33535 break;
|
rlm@46
|
33536 case e.DOWN:
|
rlm@46
|
33537 case e.LEFT:
|
rlm@46
|
33538 e.stopEvent();
|
rlm@46
|
33539 if(e.ctrlKey){
|
rlm@46
|
33540 this.setValue(this.minValue);
|
rlm@46
|
33541 }else{
|
rlm@46
|
33542 this.setValue(this.value-this.keyIncrement);
|
rlm@46
|
33543 }
|
rlm@46
|
33544 break;
|
rlm@46
|
33545 default:
|
rlm@46
|
33546 e.preventDefault();
|
rlm@46
|
33547 }
|
rlm@46
|
33548 },
|
rlm@46
|
33549
|
rlm@46
|
33550
|
rlm@46
|
33551 doSnap : function(value){
|
rlm@46
|
33552 if(!this.increment || this.increment == 1 || !value) {
|
rlm@46
|
33553 return value;
|
rlm@46
|
33554 }
|
rlm@46
|
33555 var newValue = value, inc = this.increment;
|
rlm@46
|
33556 var m = value % inc;
|
rlm@46
|
33557 if(m > 0){
|
rlm@46
|
33558 if(m > (inc/2)){
|
rlm@46
|
33559 newValue = value + (inc-m);
|
rlm@46
|
33560 }else{
|
rlm@46
|
33561 newValue = value - m;
|
rlm@46
|
33562 }
|
rlm@46
|
33563 }
|
rlm@46
|
33564 return newValue.constrain(this.minValue, this.maxValue);
|
rlm@46
|
33565 },
|
rlm@46
|
33566
|
rlm@46
|
33567
|
rlm@46
|
33568 afterRender : function(){
|
rlm@46
|
33569 Ext.Slider.superclass.afterRender.apply(this, arguments);
|
rlm@46
|
33570 if(this.value !== undefined){
|
rlm@46
|
33571 var v = this.normalizeValue(this.value);
|
rlm@46
|
33572 if(v !== this.value){
|
rlm@46
|
33573 delete this.value;
|
rlm@46
|
33574 this.setValue(v, false);
|
rlm@46
|
33575 }else{
|
rlm@46
|
33576 this.moveThumb(this.translateValue(v), false);
|
rlm@46
|
33577 }
|
rlm@46
|
33578 }
|
rlm@46
|
33579 },
|
rlm@46
|
33580
|
rlm@46
|
33581
|
rlm@46
|
33582 getRatio : function(){
|
rlm@46
|
33583 var w = this.innerEl.getWidth();
|
rlm@46
|
33584 var v = this.maxValue - this.minValue;
|
rlm@46
|
33585 return w/v;
|
rlm@46
|
33586 },
|
rlm@46
|
33587
|
rlm@46
|
33588
|
rlm@46
|
33589 normalizeValue : function(v){
|
rlm@46
|
33590 if(typeof v != 'number'){
|
rlm@46
|
33591 v = parseInt(v);
|
rlm@46
|
33592 }
|
rlm@46
|
33593 v = Math.round(v);
|
rlm@46
|
33594 v = this.doSnap(v);
|
rlm@46
|
33595 v = v.constrain(this.minValue, this.maxValue);
|
rlm@46
|
33596 return v;
|
rlm@46
|
33597 },
|
rlm@46
|
33598
|
rlm@46
|
33599
|
rlm@46
|
33600 setValue : function(v, animate){
|
rlm@46
|
33601 v = this.normalizeValue(v);
|
rlm@46
|
33602 if(v !== this.value && this.fireEvent('beforechange', this, v, this.value) !== false){
|
rlm@46
|
33603 this.value = v;
|
rlm@46
|
33604 this.moveThumb(this.translateValue(v), animate !== false);
|
rlm@46
|
33605 this.fireEvent('change', this, v);
|
rlm@46
|
33606 }
|
rlm@46
|
33607 },
|
rlm@46
|
33608
|
rlm@46
|
33609
|
rlm@46
|
33610 translateValue : function(v){
|
rlm@46
|
33611 return (v * this.getRatio())-this.halfThumb;
|
rlm@46
|
33612 },
|
rlm@46
|
33613
|
rlm@46
|
33614
|
rlm@46
|
33615 moveThumb: function(v, animate){
|
rlm@46
|
33616 if(!animate || this.animate === false){
|
rlm@46
|
33617 this.thumb.setLeft(v);
|
rlm@46
|
33618 }else{
|
rlm@46
|
33619 this.thumb.shift({left: v, stopFx: true, duration:.35});
|
rlm@46
|
33620 }
|
rlm@46
|
33621 },
|
rlm@46
|
33622
|
rlm@46
|
33623
|
rlm@46
|
33624 focus : function(){
|
rlm@46
|
33625 this.focusEl.focus(10);
|
rlm@46
|
33626 },
|
rlm@46
|
33627
|
rlm@46
|
33628
|
rlm@46
|
33629 onBeforeDragStart : function(e){
|
rlm@46
|
33630 return !this.disabled;
|
rlm@46
|
33631 },
|
rlm@46
|
33632
|
rlm@46
|
33633
|
rlm@46
|
33634 onDragStart: function(e){
|
rlm@46
|
33635 this.thumb.addClass('x-slider-thumb-drag');
|
rlm@46
|
33636 this.fireEvent('dragstart', this, e);
|
rlm@46
|
33637 },
|
rlm@46
|
33638
|
rlm@46
|
33639
|
rlm@46
|
33640 onDrag: function(e){
|
rlm@46
|
33641 var pos = this.innerEl.translatePoints(this.tracker.getXY());
|
rlm@46
|
33642 this.setValue(Math.round(pos.left/this.getRatio()), false);
|
rlm@46
|
33643 this.fireEvent('drag', this, e);
|
rlm@46
|
33644 },
|
rlm@46
|
33645
|
rlm@46
|
33646
|
rlm@46
|
33647 onDragEnd: function(e){
|
rlm@46
|
33648 this.thumb.removeClass('x-slider-thumb-drag');
|
rlm@46
|
33649 this.fireEvent('dragend', this, e);
|
rlm@46
|
33650 },
|
rlm@46
|
33651
|
rlm@46
|
33652
|
rlm@46
|
33653 onResize : function(w, h){
|
rlm@46
|
33654 this.innerEl.setWidth(w - (this.el.getPadding('l') + this.endEl.getPadding('r')));
|
rlm@46
|
33655 },
|
rlm@46
|
33656
|
rlm@46
|
33657
|
rlm@46
|
33658 getValue : function(){
|
rlm@46
|
33659 return this.value;
|
rlm@46
|
33660 }
|
rlm@46
|
33661 });
|
rlm@46
|
33662 Ext.reg('slider', Ext.Slider);
|
rlm@46
|
33663
|
rlm@46
|
33664
|
rlm@46
|
33665 Ext.Slider.Vertical = {
|
rlm@46
|
33666 onResize : function(w, h){
|
rlm@46
|
33667 this.innerEl.setHeight(h - (this.el.getPadding('t') + this.endEl.getPadding('b')));
|
rlm@46
|
33668 },
|
rlm@46
|
33669
|
rlm@46
|
33670 getRatio : function(){
|
rlm@46
|
33671 var h = this.innerEl.getHeight();
|
rlm@46
|
33672 var v = this.maxValue - this.minValue;
|
rlm@46
|
33673 return h/v;
|
rlm@46
|
33674 },
|
rlm@46
|
33675
|
rlm@46
|
33676 moveThumb: function(v, animate){
|
rlm@46
|
33677 if(!animate || this.animate === false){
|
rlm@46
|
33678 this.thumb.setBottom(v);
|
rlm@46
|
33679 }else{
|
rlm@46
|
33680 this.thumb.shift({bottom: v, stopFx: true, duration:.35});
|
rlm@46
|
33681 }
|
rlm@46
|
33682 },
|
rlm@46
|
33683
|
rlm@46
|
33684 onDrag: function(e){
|
rlm@46
|
33685 var pos = this.innerEl.translatePoints(this.tracker.getXY());
|
rlm@46
|
33686 var bottom = this.innerEl.getHeight()-pos.top;
|
rlm@46
|
33687 this.setValue(Math.round(bottom/this.getRatio()), false);
|
rlm@46
|
33688 this.fireEvent('drag', this, e);
|
rlm@46
|
33689 },
|
rlm@46
|
33690
|
rlm@46
|
33691 onClickChange : function(local){
|
rlm@46
|
33692 if(local.left > this.clickRange[0] && local.left < this.clickRange[1]){
|
rlm@46
|
33693 var bottom = this.innerEl.getHeight()-local.top;
|
rlm@46
|
33694 this.setValue(Math.round(bottom/this.getRatio()));
|
rlm@46
|
33695 }
|
rlm@46
|
33696 }
|
rlm@46
|
33697 };
|
rlm@46
|
33698
|
rlm@46
|
33699 Ext.StatusBar = Ext.extend(Ext.Toolbar, {
|
rlm@46
|
33700
|
rlm@46
|
33701
|
rlm@46
|
33702
|
rlm@46
|
33703
|
rlm@46
|
33704
|
rlm@46
|
33705
|
rlm@46
|
33706
|
rlm@46
|
33707 cls : 'x-statusbar',
|
rlm@46
|
33708
|
rlm@46
|
33709 busyIconCls : 'x-status-busy',
|
rlm@46
|
33710
|
rlm@46
|
33711 busyText : 'Loading...',
|
rlm@46
|
33712
|
rlm@46
|
33713 autoClear : 5000,
|
rlm@46
|
33714
|
rlm@46
|
33715 activeThreadId : 0,
|
rlm@46
|
33716
|
rlm@46
|
33717 initComponent : function(){
|
rlm@46
|
33718 if(this.statusAlign=='right'){
|
rlm@46
|
33719 this.cls += ' x-status-right';
|
rlm@46
|
33720 }
|
rlm@46
|
33721 Ext.StatusBar.superclass.initComponent.call(this);
|
rlm@46
|
33722 },
|
rlm@46
|
33723
|
rlm@46
|
33724 afterRender : function(){
|
rlm@46
|
33725 Ext.StatusBar.superclass.afterRender.call(this);
|
rlm@46
|
33726
|
rlm@46
|
33727 var right = this.statusAlign=='right',
|
rlm@46
|
33728 td = Ext.get(this.nextBlock());
|
rlm@46
|
33729
|
rlm@46
|
33730 if(right){
|
rlm@46
|
33731 this.tr.appendChild(td.dom);
|
rlm@46
|
33732 }else{
|
rlm@46
|
33733 td.insertBefore(this.tr.firstChild);
|
rlm@46
|
33734 }
|
rlm@46
|
33735
|
rlm@46
|
33736 this.statusEl = td.createChild({
|
rlm@46
|
33737 cls: 'x-status-text ' + (this.iconCls || this.defaultIconCls || ''),
|
rlm@46
|
33738 html: this.text || this.defaultText || ''
|
rlm@46
|
33739 });
|
rlm@46
|
33740 this.statusEl.unselectable();
|
rlm@46
|
33741
|
rlm@46
|
33742 this.spacerEl = td.insertSibling({
|
rlm@46
|
33743 tag: 'td',
|
rlm@46
|
33744 style: 'width:100%',
|
rlm@46
|
33745 cn: [{cls:'ytb-spacer'}]
|
rlm@46
|
33746 }, right ? 'before' : 'after');
|
rlm@46
|
33747 },
|
rlm@46
|
33748
|
rlm@46
|
33749
|
rlm@46
|
33750 setStatus : function(o){
|
rlm@46
|
33751 o = o || {};
|
rlm@46
|
33752
|
rlm@46
|
33753 if(typeof o == 'string'){
|
rlm@46
|
33754 o = {text:o};
|
rlm@46
|
33755 }
|
rlm@46
|
33756 if(o.text !== undefined){
|
rlm@46
|
33757 this.setText(o.text);
|
rlm@46
|
33758 }
|
rlm@46
|
33759 if(o.iconCls !== undefined){
|
rlm@46
|
33760 this.setIcon(o.iconCls);
|
rlm@46
|
33761 }
|
rlm@46
|
33762
|
rlm@46
|
33763 if(o.clear){
|
rlm@46
|
33764 var c = o.clear,
|
rlm@46
|
33765 wait = this.autoClear,
|
rlm@46
|
33766 defaults = {useDefaults: true, anim: true};
|
rlm@46
|
33767
|
rlm@46
|
33768 if(typeof c == 'object'){
|
rlm@46
|
33769 c = Ext.applyIf(c, defaults);
|
rlm@46
|
33770 if(c.wait){
|
rlm@46
|
33771 wait = c.wait;
|
rlm@46
|
33772 }
|
rlm@46
|
33773 }else if(typeof c == 'number'){
|
rlm@46
|
33774 wait = c;
|
rlm@46
|
33775 c = defaults;
|
rlm@46
|
33776 }else if(typeof c == 'boolean'){
|
rlm@46
|
33777 c = defaults;
|
rlm@46
|
33778 }
|
rlm@46
|
33779
|
rlm@46
|
33780 c.threadId = this.activeThreadId;
|
rlm@46
|
33781 this.clearStatus.defer(wait, this, [c]);
|
rlm@46
|
33782 }
|
rlm@46
|
33783 return this;
|
rlm@46
|
33784 },
|
rlm@46
|
33785
|
rlm@46
|
33786
|
rlm@46
|
33787 clearStatus : function(o){
|
rlm@46
|
33788 o = o || {};
|
rlm@46
|
33789
|
rlm@46
|
33790 if(o.threadId && o.threadId !== this.activeThreadId){
|
rlm@46
|
33791 return this;
|
rlm@46
|
33792 }
|
rlm@46
|
33793
|
rlm@46
|
33794 var text = o.useDefaults ? this.defaultText : '',
|
rlm@46
|
33795 iconCls = o.useDefaults ? this.defaultIconCls : '';
|
rlm@46
|
33796
|
rlm@46
|
33797 if(o.anim){
|
rlm@46
|
33798 this.statusEl.fadeOut({
|
rlm@46
|
33799 remove: false,
|
rlm@46
|
33800 useDisplay: true,
|
rlm@46
|
33801 scope: this,
|
rlm@46
|
33802 callback: function(){
|
rlm@46
|
33803 this.setStatus({
|
rlm@46
|
33804 text: text,
|
rlm@46
|
33805 iconCls: iconCls
|
rlm@46
|
33806 });
|
rlm@46
|
33807 this.statusEl.show();
|
rlm@46
|
33808 }
|
rlm@46
|
33809 });
|
rlm@46
|
33810 }else{
|
rlm@46
|
33811 this.statusEl.hide();
|
rlm@46
|
33812 this.setStatus({
|
rlm@46
|
33813 text: text,
|
rlm@46
|
33814 iconCls: iconCls
|
rlm@46
|
33815 });
|
rlm@46
|
33816 this.statusEl.show();
|
rlm@46
|
33817 }
|
rlm@46
|
33818 return this;
|
rlm@46
|
33819 },
|
rlm@46
|
33820
|
rlm@46
|
33821
|
rlm@46
|
33822 setText : function(text){
|
rlm@46
|
33823 this.activeThreadId++;
|
rlm@46
|
33824 this.text = text || '';
|
rlm@46
|
33825 if(this.rendered){
|
rlm@46
|
33826 this.statusEl.update(this.text);
|
rlm@46
|
33827 }
|
rlm@46
|
33828 return this;
|
rlm@46
|
33829 },
|
rlm@46
|
33830
|
rlm@46
|
33831
|
rlm@46
|
33832 getText : function(){
|
rlm@46
|
33833 return this.text;
|
rlm@46
|
33834 },
|
rlm@46
|
33835
|
rlm@46
|
33836
|
rlm@46
|
33837 setIcon : function(cls){
|
rlm@46
|
33838 this.activeThreadId++;
|
rlm@46
|
33839 cls = cls || '';
|
rlm@46
|
33840
|
rlm@46
|
33841 if(this.rendered){
|
rlm@46
|
33842 if(this.currIconCls){
|
rlm@46
|
33843 this.statusEl.removeClass(this.currIconCls);
|
rlm@46
|
33844 this.currIconCls = null;
|
rlm@46
|
33845 }
|
rlm@46
|
33846 if(cls.length > 0){
|
rlm@46
|
33847 this.statusEl.addClass(cls);
|
rlm@46
|
33848 this.currIconCls = cls;
|
rlm@46
|
33849 }
|
rlm@46
|
33850 }else{
|
rlm@46
|
33851 this.currIconCls = cls;
|
rlm@46
|
33852 }
|
rlm@46
|
33853 return this;
|
rlm@46
|
33854 },
|
rlm@46
|
33855
|
rlm@46
|
33856
|
rlm@46
|
33857 showBusy : function(o){
|
rlm@46
|
33858 if(typeof o == 'string'){
|
rlm@46
|
33859 o = {text:o};
|
rlm@46
|
33860 }
|
rlm@46
|
33861 o = Ext.applyIf(o || {}, {
|
rlm@46
|
33862 text: this.busyText,
|
rlm@46
|
33863 iconCls: this.busyIconCls
|
rlm@46
|
33864 });
|
rlm@46
|
33865 return this.setStatus(o);
|
rlm@46
|
33866 }
|
rlm@46
|
33867 });
|
rlm@46
|
33868 Ext.reg('statusbar', Ext.StatusBar);
|
rlm@46
|
33869
|
rlm@46
|
33870 Ext.debug = {};
|
rlm@46
|
33871
|
rlm@46
|
33872 (function(){
|
rlm@46
|
33873
|
rlm@46
|
33874 var cp;
|
rlm@46
|
33875
|
rlm@46
|
33876 function createConsole(){
|
rlm@46
|
33877
|
rlm@46
|
33878 var scriptPanel = new Ext.debug.ScriptsPanel();
|
rlm@46
|
33879 var logView = new Ext.debug.LogPanel();
|
rlm@46
|
33880 var tree = new Ext.debug.DomTree();
|
rlm@46
|
33881
|
rlm@46
|
33882 var tabs = new Ext.TabPanel({
|
rlm@46
|
33883 activeTab: 0,
|
rlm@46
|
33884 border: false,
|
rlm@46
|
33885 tabPosition: 'bottom',
|
rlm@46
|
33886 items: [{
|
rlm@46
|
33887 title: 'Debug Console',
|
rlm@46
|
33888 layout:'border',
|
rlm@46
|
33889 items: [logView, scriptPanel]
|
rlm@46
|
33890 },{
|
rlm@46
|
33891 title: 'DOM Inspector',
|
rlm@46
|
33892 layout:'border',
|
rlm@46
|
33893 items: [tree]
|
rlm@46
|
33894 }]
|
rlm@46
|
33895 });
|
rlm@46
|
33896
|
rlm@46
|
33897 cp = new Ext.Panel({
|
rlm@46
|
33898 id: 'x-debug-browser',
|
rlm@46
|
33899 title: 'Console',
|
rlm@46
|
33900 collapsible: true,
|
rlm@46
|
33901 animCollapse: false,
|
rlm@46
|
33902 style: 'position:absolute;left:0;bottom:0;',
|
rlm@46
|
33903 height:200,
|
rlm@46
|
33904 logView: logView,
|
rlm@46
|
33905 layout: 'fit',
|
rlm@46
|
33906
|
rlm@46
|
33907 tools:[{
|
rlm@46
|
33908 id: 'close',
|
rlm@46
|
33909 handler: function(){
|
rlm@46
|
33910 cp.destroy();
|
rlm@46
|
33911 cp = null;
|
rlm@46
|
33912 Ext.EventManager.removeResizeListener(handleResize);
|
rlm@46
|
33913 }
|
rlm@46
|
33914 }],
|
rlm@46
|
33915
|
rlm@46
|
33916 items: tabs
|
rlm@46
|
33917 });
|
rlm@46
|
33918
|
rlm@46
|
33919 cp.render(document.body);
|
rlm@46
|
33920
|
rlm@46
|
33921 cp.resizer = new Ext.Resizable(cp.el, {
|
rlm@46
|
33922 minHeight:50,
|
rlm@46
|
33923 handles: "n",
|
rlm@46
|
33924 pinned: true,
|
rlm@46
|
33925 transparent:true,
|
rlm@46
|
33926 resizeElement : function(){
|
rlm@46
|
33927 var box = this.proxy.getBox();
|
rlm@46
|
33928 this.proxy.hide();
|
rlm@46
|
33929 cp.setHeight(box.height);
|
rlm@46
|
33930 return box;
|
rlm@46
|
33931 }
|
rlm@46
|
33932 });
|
rlm@46
|
33933
|
rlm@46
|
33934 function handleResize(){
|
rlm@46
|
33935 cp.setWidth(Ext.getBody().getViewSize().width);
|
rlm@46
|
33936 }
|
rlm@46
|
33937 Ext.EventManager.onWindowResize(handleResize);
|
rlm@46
|
33938
|
rlm@46
|
33939 handleResize();
|
rlm@46
|
33940 }
|
rlm@46
|
33941
|
rlm@46
|
33942
|
rlm@46
|
33943 Ext.apply(Ext, {
|
rlm@46
|
33944 log : function(){
|
rlm@46
|
33945 if(!cp){
|
rlm@46
|
33946 createConsole();
|
rlm@46
|
33947 }
|
rlm@46
|
33948 cp.logView.log.apply(cp.logView, arguments);
|
rlm@46
|
33949 },
|
rlm@46
|
33950
|
rlm@46
|
33951 logf : function(format, arg1, arg2, etc){
|
rlm@46
|
33952 Ext.log(String.format.apply(String, arguments));
|
rlm@46
|
33953 },
|
rlm@46
|
33954
|
rlm@46
|
33955 dump : function(o){
|
rlm@46
|
33956 if(typeof o == 'string' || typeof o == 'number' || typeof o == 'undefined' || Ext.isDate(o)){
|
rlm@46
|
33957 Ext.log(o);
|
rlm@46
|
33958 }else if(!o){
|
rlm@46
|
33959 Ext.log("null");
|
rlm@46
|
33960 }else if(typeof o != "object"){
|
rlm@46
|
33961 Ext.log('Unknown return type');
|
rlm@46
|
33962 }else if(Ext.isArray(o)){
|
rlm@46
|
33963 Ext.log('['+o.join(',')+']');
|
rlm@46
|
33964 }else{
|
rlm@46
|
33965 var b = ["{\n"];
|
rlm@46
|
33966 for(var key in o){
|
rlm@46
|
33967 var to = typeof o[key];
|
rlm@46
|
33968 if(to != "function" && to != "object"){
|
rlm@46
|
33969 b.push(String.format(" {0}: {1},\n", key, o[key]));
|
rlm@46
|
33970 }
|
rlm@46
|
33971 }
|
rlm@46
|
33972 var s = b.join("");
|
rlm@46
|
33973 if(s.length > 3){
|
rlm@46
|
33974 s = s.substr(0, s.length-2);
|
rlm@46
|
33975 }
|
rlm@46
|
33976 Ext.log(s + "\n}");
|
rlm@46
|
33977 }
|
rlm@46
|
33978 },
|
rlm@46
|
33979
|
rlm@46
|
33980 _timers : {},
|
rlm@46
|
33981
|
rlm@46
|
33982 time : function(name){
|
rlm@46
|
33983 name = name || "def";
|
rlm@46
|
33984 Ext._timers[name] = new Date().getTime();
|
rlm@46
|
33985 },
|
rlm@46
|
33986
|
rlm@46
|
33987 timeEnd : function(name, printResults){
|
rlm@46
|
33988 var t = new Date().getTime();
|
rlm@46
|
33989 name = name || "def";
|
rlm@46
|
33990 var v = String.format("{0} ms", t-Ext._timers[name]);
|
rlm@46
|
33991 Ext._timers[name] = new Date().getTime();
|
rlm@46
|
33992 if(printResults !== false){
|
rlm@46
|
33993 Ext.log('Timer ' + (name == "def" ? v : name + ": " + v));
|
rlm@46
|
33994 }
|
rlm@46
|
33995 return v;
|
rlm@46
|
33996 }
|
rlm@46
|
33997 });
|
rlm@46
|
33998
|
rlm@46
|
33999 })();
|
rlm@46
|
34000
|
rlm@46
|
34001
|
rlm@46
|
34002 Ext.debug.ScriptsPanel = Ext.extend(Ext.Panel, {
|
rlm@46
|
34003 id:'x-debug-scripts',
|
rlm@46
|
34004 region: 'east',
|
rlm@46
|
34005 minWidth: 200,
|
rlm@46
|
34006 split: true,
|
rlm@46
|
34007 width: 350,
|
rlm@46
|
34008 border: false,
|
rlm@46
|
34009 layout:'anchor',
|
rlm@46
|
34010 style:'border-width:0 0 0 1px;',
|
rlm@46
|
34011
|
rlm@46
|
34012 initComponent : function(){
|
rlm@46
|
34013
|
rlm@46
|
34014 this.scriptField = new Ext.form.TextArea({
|
rlm@46
|
34015 anchor: '100% -26',
|
rlm@46
|
34016 style:'border-width:0;'
|
rlm@46
|
34017 });
|
rlm@46
|
34018
|
rlm@46
|
34019 this.trapBox = new Ext.form.Checkbox({
|
rlm@46
|
34020 id: 'console-trap',
|
rlm@46
|
34021 boxLabel: 'Trap Errors',
|
rlm@46
|
34022 checked: true
|
rlm@46
|
34023 });
|
rlm@46
|
34024
|
rlm@46
|
34025 this.toolbar = new Ext.Toolbar([{
|
rlm@46
|
34026 text: 'Run',
|
rlm@46
|
34027 scope: this,
|
rlm@46
|
34028 handler: this.evalScript
|
rlm@46
|
34029 },{
|
rlm@46
|
34030 text: 'Clear',
|
rlm@46
|
34031 scope: this,
|
rlm@46
|
34032 handler: this.clear
|
rlm@46
|
34033 },
|
rlm@46
|
34034 '->',
|
rlm@46
|
34035 this.trapBox,
|
rlm@46
|
34036 ' ', ' '
|
rlm@46
|
34037 ]);
|
rlm@46
|
34038
|
rlm@46
|
34039 this.items = [this.toolbar, this.scriptField];
|
rlm@46
|
34040
|
rlm@46
|
34041 Ext.debug.ScriptsPanel.superclass.initComponent.call(this);
|
rlm@46
|
34042 },
|
rlm@46
|
34043
|
rlm@46
|
34044 evalScript : function(){
|
rlm@46
|
34045 var s = this.scriptField.getValue();
|
rlm@46
|
34046 if(this.trapBox.getValue()){
|
rlm@46
|
34047 try{
|
rlm@46
|
34048 var rt = eval(s);
|
rlm@46
|
34049 Ext.dump(rt === undefined? '(no return)' : rt);
|
rlm@46
|
34050 }catch(e){
|
rlm@46
|
34051 Ext.log(e.message || e.descript);
|
rlm@46
|
34052 }
|
rlm@46
|
34053 }else{
|
rlm@46
|
34054 var rt = eval(s);
|
rlm@46
|
34055 Ext.dump(rt === undefined? '(no return)' : rt);
|
rlm@46
|
34056 }
|
rlm@46
|
34057 },
|
rlm@46
|
34058
|
rlm@46
|
34059 clear : function(){
|
rlm@46
|
34060 this.scriptField.setValue('');
|
rlm@46
|
34061 this.scriptField.focus();
|
rlm@46
|
34062 }
|
rlm@46
|
34063
|
rlm@46
|
34064 });
|
rlm@46
|
34065
|
rlm@46
|
34066 Ext.debug.LogPanel = Ext.extend(Ext.Panel, {
|
rlm@46
|
34067 autoScroll: true,
|
rlm@46
|
34068 region: 'center',
|
rlm@46
|
34069 border: false,
|
rlm@46
|
34070 style:'border-width:0 1px 0 0',
|
rlm@46
|
34071
|
rlm@46
|
34072 log : function(){
|
rlm@46
|
34073 var markup = [ '<div style="padding:5px !important;border-bottom:1px solid #ccc;">',
|
rlm@46
|
34074 Ext.util.Format.htmlEncode(Array.prototype.join.call(arguments, ', ')).replace(/\n/g, '<br />').replace(/\s/g, ' '),
|
rlm@46
|
34075 '</div>'].join('');
|
rlm@46
|
34076
|
rlm@46
|
34077 this.body.insertHtml('beforeend', markup);
|
rlm@46
|
34078 this.body.scrollTo('top', 100000);
|
rlm@46
|
34079 },
|
rlm@46
|
34080
|
rlm@46
|
34081 clear : function(){
|
rlm@46
|
34082 this.body.update('');
|
rlm@46
|
34083 this.body.dom.scrollTop = 0;
|
rlm@46
|
34084 }
|
rlm@46
|
34085 });
|
rlm@46
|
34086
|
rlm@46
|
34087 Ext.debug.DomTree = Ext.extend(Ext.tree.TreePanel, {
|
rlm@46
|
34088 enableDD:false ,
|
rlm@46
|
34089 lines:false,
|
rlm@46
|
34090 rootVisible:false,
|
rlm@46
|
34091 animate:false,
|
rlm@46
|
34092 hlColor:'ffff9c',
|
rlm@46
|
34093 autoScroll: true,
|
rlm@46
|
34094 region:'center',
|
rlm@46
|
34095 border:false,
|
rlm@46
|
34096
|
rlm@46
|
34097 initComponent : function(){
|
rlm@46
|
34098
|
rlm@46
|
34099
|
rlm@46
|
34100 Ext.debug.DomTree.superclass.initComponent.call(this);
|
rlm@46
|
34101
|
rlm@46
|
34102 var styles = false, hnode;
|
rlm@46
|
34103 var nonSpace = /^\s*$/;
|
rlm@46
|
34104 var html = Ext.util.Format.htmlEncode;
|
rlm@46
|
34105 var ellipsis = Ext.util.Format.ellipsis;
|
rlm@46
|
34106 var styleRe = /\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi;
|
rlm@46
|
34107
|
rlm@46
|
34108 function findNode(n){
|
rlm@46
|
34109 if(!n || n.nodeType != 1 || n == document.body || n == document){
|
rlm@46
|
34110 return false;
|
rlm@46
|
34111 }
|
rlm@46
|
34112 var pn = [n], p = n;
|
rlm@46
|
34113 while((p = p.parentNode) && p.nodeType == 1 && p.tagName.toUpperCase() != 'HTML'){
|
rlm@46
|
34114 pn.unshift(p);
|
rlm@46
|
34115 }
|
rlm@46
|
34116 var cn = hnode;
|
rlm@46
|
34117 for(var i = 0, len = pn.length; i < len; i++){
|
rlm@46
|
34118 cn.expand();
|
rlm@46
|
34119 cn = cn.findChild('htmlNode', pn[i]);
|
rlm@46
|
34120 if(!cn){ return false;
|
rlm@46
|
34121 }
|
rlm@46
|
34122 }
|
rlm@46
|
34123 cn.select();
|
rlm@46
|
34124 var a = cn.ui.anchor;
|
rlm@46
|
34125 treeEl.dom.scrollTop = Math.max(0 ,a.offsetTop-10);
|
rlm@46
|
34126 cn.highlight();
|
rlm@46
|
34127 return true;
|
rlm@46
|
34128 }
|
rlm@46
|
34129
|
rlm@46
|
34130 function nodeTitle(n){
|
rlm@46
|
34131 var s = n.tagName;
|
rlm@46
|
34132 if(n.id){
|
rlm@46
|
34133 s += '#'+n.id;
|
rlm@46
|
34134 }else if(n.className){
|
rlm@46
|
34135 s += '.'+n.className;
|
rlm@46
|
34136 }
|
rlm@46
|
34137 return s;
|
rlm@46
|
34138 }
|
rlm@46
|
34139
|
rlm@46
|
34140 function onNodeSelect(t, n, last){
|
rlm@46
|
34141 return;
|
rlm@46
|
34142 if(last && last.unframe){
|
rlm@46
|
34143 last.unframe();
|
rlm@46
|
34144 }
|
rlm@46
|
34145 var props = {};
|
rlm@46
|
34146 if(n && n.htmlNode){
|
rlm@46
|
34147 if(frameEl.pressed){
|
rlm@46
|
34148 n.frame();
|
rlm@46
|
34149 }
|
rlm@46
|
34150 if(inspecting){
|
rlm@46
|
34151 return;
|
rlm@46
|
34152 }
|
rlm@46
|
34153 addStyle.enable();
|
rlm@46
|
34154 reload.setDisabled(n.leaf);
|
rlm@46
|
34155 var dom = n.htmlNode;
|
rlm@46
|
34156 stylePanel.setTitle(nodeTitle(dom));
|
rlm@46
|
34157 if(styles && !showAll.pressed){
|
rlm@46
|
34158 var s = dom.style ? dom.style.cssText : '';
|
rlm@46
|
34159 if(s){
|
rlm@46
|
34160 var m;
|
rlm@46
|
34161 while ((m = styleRe.exec(s)) != null){
|
rlm@46
|
34162 props[m[1].toLowerCase()] = m[2];
|
rlm@46
|
34163 }
|
rlm@46
|
34164 }
|
rlm@46
|
34165 }else if(styles){
|
rlm@46
|
34166 var cl = Ext.debug.cssList;
|
rlm@46
|
34167 var s = dom.style, fly = Ext.fly(dom);
|
rlm@46
|
34168 if(s){
|
rlm@46
|
34169 for(var i = 0, len = cl.length; i<len; i++){
|
rlm@46
|
34170 var st = cl[i];
|
rlm@46
|
34171 var v = s[st] || fly.getStyle(st);
|
rlm@46
|
34172 if(v != undefined && v !== null && v !== ''){
|
rlm@46
|
34173 props[st] = v;
|
rlm@46
|
34174 }
|
rlm@46
|
34175 }
|
rlm@46
|
34176 }
|
rlm@46
|
34177 }else{
|
rlm@46
|
34178 for(var a in dom){
|
rlm@46
|
34179 var v = dom[a];
|
rlm@46
|
34180 if((isNaN(a+10)) && v != undefined && v !== null && v !== '' && !(Ext.isGecko && a[0] == a[0].toUpperCase())){
|
rlm@46
|
34181 props[a] = v;
|
rlm@46
|
34182 }
|
rlm@46
|
34183 }
|
rlm@46
|
34184 }
|
rlm@46
|
34185 }else{
|
rlm@46
|
34186 if(inspecting){
|
rlm@46
|
34187 return;
|
rlm@46
|
34188 }
|
rlm@46
|
34189 addStyle.disable();
|
rlm@46
|
34190 reload.disabled();
|
rlm@46
|
34191 }
|
rlm@46
|
34192 stylesGrid.setSource(props);
|
rlm@46
|
34193 stylesGrid.treeNode = n;
|
rlm@46
|
34194 stylesGrid.view.fitColumns();
|
rlm@46
|
34195 }
|
rlm@46
|
34196
|
rlm@46
|
34197 this.loader = new Ext.tree.TreeLoader();
|
rlm@46
|
34198 this.loader.load = function(n, cb){
|
rlm@46
|
34199 var isBody = n.htmlNode == document.body;
|
rlm@46
|
34200 var cn = n.htmlNode.childNodes;
|
rlm@46
|
34201 for(var i = 0, c; c = cn[i]; i++){
|
rlm@46
|
34202 if(isBody && c.id == 'x-debug-browser'){
|
rlm@46
|
34203 continue;
|
rlm@46
|
34204 }
|
rlm@46
|
34205 if(c.nodeType == 1){
|
rlm@46
|
34206 n.appendChild(new Ext.debug.HtmlNode(c));
|
rlm@46
|
34207 }else if(c.nodeType == 3 && !nonSpace.test(c.nodeValue)){
|
rlm@46
|
34208 n.appendChild(new Ext.tree.TreeNode({
|
rlm@46
|
34209 text:'<em>' + ellipsis(html(String(c.nodeValue)), 35) + '</em>',
|
rlm@46
|
34210 cls: 'x-tree-noicon'
|
rlm@46
|
34211 }));
|
rlm@46
|
34212 }
|
rlm@46
|
34213 }
|
rlm@46
|
34214 cb();
|
rlm@46
|
34215 };
|
rlm@46
|
34216
|
rlm@46
|
34217
|
rlm@46
|
34218 this.root = this.setRootNode(new Ext.tree.TreeNode('Ext'));
|
rlm@46
|
34219
|
rlm@46
|
34220 hnode = this.root.appendChild(new Ext.debug.HtmlNode(
|
rlm@46
|
34221 document.getElementsByTagName('html')[0]
|
rlm@46
|
34222 ));
|
rlm@46
|
34223
|
rlm@46
|
34224 }
|
rlm@46
|
34225 });
|
rlm@46
|
34226
|
rlm@46
|
34227
|
rlm@46
|
34228 Ext.debug.HtmlNode = function(){
|
rlm@46
|
34229 var html = Ext.util.Format.htmlEncode;
|
rlm@46
|
34230 var ellipsis = Ext.util.Format.ellipsis;
|
rlm@46
|
34231 var nonSpace = /^\s*$/;
|
rlm@46
|
34232
|
rlm@46
|
34233 var attrs = [
|
rlm@46
|
34234 {n: 'id', v: 'id'},
|
rlm@46
|
34235 {n: 'className', v: 'class'},
|
rlm@46
|
34236 {n: 'name', v: 'name'},
|
rlm@46
|
34237 {n: 'type', v: 'type'},
|
rlm@46
|
34238 {n: 'src', v: 'src'},
|
rlm@46
|
34239 {n: 'href', v: 'href'}
|
rlm@46
|
34240 ];
|
rlm@46
|
34241
|
rlm@46
|
34242 function hasChild(n){
|
rlm@46
|
34243 for(var i = 0, c; c = n.childNodes[i]; i++){
|
rlm@46
|
34244 if(c.nodeType == 1){
|
rlm@46
|
34245 return true;
|
rlm@46
|
34246 }
|
rlm@46
|
34247 }
|
rlm@46
|
34248 return false;
|
rlm@46
|
34249 }
|
rlm@46
|
34250
|
rlm@46
|
34251 function renderNode(n, leaf){
|
rlm@46
|
34252 var tag = n.tagName.toLowerCase();
|
rlm@46
|
34253 var s = '<' + tag;
|
rlm@46
|
34254 for(var i = 0, len = attrs.length; i < len; i++){
|
rlm@46
|
34255 var a = attrs[i];
|
rlm@46
|
34256 var v = n[a.n];
|
rlm@46
|
34257 if(v && !nonSpace.test(v)){
|
rlm@46
|
34258 s += ' ' + a.v + '="<i>' + html(v) +'</i>"';
|
rlm@46
|
34259 }
|
rlm@46
|
34260 }
|
rlm@46
|
34261 var style = n.style ? n.style.cssText : '';
|
rlm@46
|
34262 if(style){
|
rlm@46
|
34263 s += ' style="<i>' + html(style.toLowerCase()) +'</i>"';
|
rlm@46
|
34264 }
|
rlm@46
|
34265 if(leaf && n.childNodes.length > 0){
|
rlm@46
|
34266 s+='><em>' + ellipsis(html(String(n.innerHTML)), 35) + '</em></'+tag+'>';
|
rlm@46
|
34267 }else if(leaf){
|
rlm@46
|
34268 s += ' />';
|
rlm@46
|
34269 }else{
|
rlm@46
|
34270 s += '>';
|
rlm@46
|
34271 }
|
rlm@46
|
34272 return s;
|
rlm@46
|
34273 }
|
rlm@46
|
34274
|
rlm@46
|
34275 var HtmlNode = function(n){
|
rlm@46
|
34276 var leaf = !hasChild(n);
|
rlm@46
|
34277 this.htmlNode = n;
|
rlm@46
|
34278 this.tagName = n.tagName.toLowerCase();
|
rlm@46
|
34279 var attr = {
|
rlm@46
|
34280 text : renderNode(n, leaf),
|
rlm@46
|
34281 leaf : leaf,
|
rlm@46
|
34282 cls: 'x-tree-noicon'
|
rlm@46
|
34283 };
|
rlm@46
|
34284 HtmlNode.superclass.constructor.call(this, attr);
|
rlm@46
|
34285 this.attributes.htmlNode = n; if(!leaf){
|
rlm@46
|
34286 this.on('expand', this.onExpand, this);
|
rlm@46
|
34287 this.on('collapse', this.onCollapse, this);
|
rlm@46
|
34288 }
|
rlm@46
|
34289 };
|
rlm@46
|
34290
|
rlm@46
|
34291
|
rlm@46
|
34292 Ext.extend(HtmlNode, Ext.tree.AsyncTreeNode, {
|
rlm@46
|
34293 cls: 'x-tree-noicon',
|
rlm@46
|
34294 preventHScroll: true,
|
rlm@46
|
34295 refresh : function(highlight){
|
rlm@46
|
34296 var leaf = !hasChild(this.htmlNode);
|
rlm@46
|
34297 this.setText(renderNode(this.htmlNode, leaf));
|
rlm@46
|
34298 if(highlight){
|
rlm@46
|
34299 Ext.fly(this.ui.textNode).highlight();
|
rlm@46
|
34300 }
|
rlm@46
|
34301 },
|
rlm@46
|
34302
|
rlm@46
|
34303 onExpand : function(){
|
rlm@46
|
34304 if(!this.closeNode && this.parentNode){
|
rlm@46
|
34305 this.closeNode = this.parentNode.insertBefore(new Ext.tree.TreeNode({
|
rlm@46
|
34306 text:'</' + this.tagName + '>',
|
rlm@46
|
34307 cls: 'x-tree-noicon'
|
rlm@46
|
34308 }), this.nextSibling);
|
rlm@46
|
34309 }else if(this.closeNode){
|
rlm@46
|
34310 this.closeNode.ui.show();
|
rlm@46
|
34311 }
|
rlm@46
|
34312 },
|
rlm@46
|
34313
|
rlm@46
|
34314 onCollapse : function(){
|
rlm@46
|
34315 if(this.closeNode){
|
rlm@46
|
34316 this.closeNode.ui.hide();
|
rlm@46
|
34317 }
|
rlm@46
|
34318 },
|
rlm@46
|
34319
|
rlm@46
|
34320 render : function(bulkRender){
|
rlm@46
|
34321 HtmlNode.superclass.render.call(this, bulkRender);
|
rlm@46
|
34322 },
|
rlm@46
|
34323
|
rlm@46
|
34324 highlightNode : function(){
|
rlm@46
|
34325 },
|
rlm@46
|
34326
|
rlm@46
|
34327 highlight : function(){
|
rlm@46
|
34328 },
|
rlm@46
|
34329
|
rlm@46
|
34330 frame : function(){
|
rlm@46
|
34331 this.htmlNode.style.border = '1px solid #0000ff';
|
rlm@46
|
34332 },
|
rlm@46
|
34333
|
rlm@46
|
34334 unframe : function(){
|
rlm@46
|
34335 this.htmlNode.style.border = '';
|
rlm@46
|
34336 }
|
rlm@46
|
34337 });
|
rlm@46
|
34338
|
rlm@46
|
34339 return HtmlNode;
|
rlm@46
|
34340 }();
|
rlm@46
|
34341
|
rlm@46
|
34342
|
rlm@46
|
34343
|