Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / layout / GridContainerLite.js

History | View | Annotate | Download (10.8 KB)

1
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6

    
7

    
8
if(!dojo._hasResource["dojox.layout.GridContainerLite"]){
9
dojo._hasResource["dojox.layout.GridContainerLite"]=true;
10
dojo.provide("dojox.layout.GridContainerLite");
11
dojo.require("dijit._Templated");
12
dojo.require("dijit.layout._LayoutWidget");
13
dojo.require("dojox.mdnd.AreaManager");
14
dojo.require("dojox.mdnd.DropIndicator");
15
dojo.require("dojox.mdnd.dropMode.OverDropMode");
16
dojo.require("dojox.mdnd.AutoScroll");
17
dojo.declare("dojox.layout.GridContainerLite",[dijit.layout._LayoutWidget,dijit._Templated],{autoRefresh:true,templateString:dojo.cache("dojox.layout","resources/GridContainer.html","<div id=\"${id}\" class=\"gridContainer\" dojoAttachPoint=\"containerNode\" tabIndex=\"0\" dojoAttachEvent=\"onkeypress:_selectFocus\">\n\t<div dojoAttachPoint=\"gridContainerDiv\">\n\t\t<table class=\"gridContainerTable\" dojoAttachPoint=\"gridContainerTable\" cellspacing=\"0\" cellpadding=\"0\">\n\t\t\t<tbody>\n\t\t\t\t<tr dojoAttachPoint=\"gridNode\" >\n\t\t\t\t\t\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</div>\n"),dragHandleClass:"dojoxDragHandle",nbZones:1,doLayout:true,isAutoOrganized:true,acceptTypes:[],colWidths:"",constructor:function(_1,_2){
18
this.acceptTypes=(_1||{}).acceptTypes||["text"];
19
this._disabled=true;
20
},postCreate:function(){
21
this.inherited(arguments);
22
this._grid=[];
23
this._createCells();
24
this.subscribe("/dojox/mdnd/drop","resizeChildAfterDrop");
25
this.subscribe("/dojox/mdnd/drag/start","resizeChildAfterDragStart");
26
this._dragManager=dojox.mdnd.areaManager();
27
this._dragManager.autoRefresh=this.autoRefresh;
28
this._dragManager.dragHandleClass=this.dragHandleClass;
29
if(this.doLayout){
30
this._border={"h":(dojo.isIE)?dojo._getBorderExtents(this.gridContainerTable).h:0,"w":(dojo.isIE==6)?1:0};
31
}else{
32
dojo.style(this.domNode,"overflowY","hidden");
33
dojo.style(this.gridContainerTable,"height","auto");
34
}
35
this.inherited(arguments);
36
},startup:function(){
37
if(this._started){
38
return;
39
}
40
if(this.isAutoOrganized){
41
this._organizeChildren();
42
}else{
43
this._organizeChildrenManually();
44
}
45
dojo.forEach(this.getChildren(),function(_3){
46
_3.startup();
47
});
48
if(this._isShown()){
49
this.enableDnd();
50
}
51
this.inherited(arguments);
52
},resizeChildAfterDrop:function(_4,_5,_6){
53
if(this._disabled){
54
return false;
55
}
56
if(dijit.getEnclosingWidget(_5.node)==this){
57
var _7=dijit.byNode(_4);
58
if(_7.resize&&dojo.isFunction(_7.resize)){
59
_7.resize();
60
}
61
if(this.doLayout){
62
var _8=this._contentBox.h,_9=dojo.contentBox(this.gridContainerDiv).h;
63
if(_9>=_8){
64
dojo.style(this.gridContainerTable,"height",(_8-this._border.h)+"px");
65
}
66
}
67
return true;
68
}
69
return false;
70
},resizeChildAfterDragStart:function(_a,_b,_c){
71
if(this._disabled){
72
return false;
73
}
74
if(dijit.getEnclosingWidget(_b.node)==this){
75
this._draggedNode=_a;
76
if(this.doLayout){
77
dojo.marginBox(this.gridContainerTable,{"h":dojo.contentBox(this.gridContainerDiv).h-this._border.h});
78
}
79
return true;
80
}
81
return false;
82
},getChildren:function(){
83
var _d=[];
84
dojo.forEach(this._grid,function(_e){
85
_d=_d.concat(dojo.query("> [widgetId]",_e.node).map(dijit.byNode));
86
});
87
return _d;
88
},_isShown:function(){
89
if("open" in this){
90
return this.open;
91
}else{
92
var _f=this.domNode;
93
return (_f.style.display!="none")&&(_f.style.visibility!="hidden")&&!dojo.hasClass(_f,"dijitHidden");
94
}
95
},layout:function(){
96
if(this.doLayout){
97
var _10=this._contentBox;
98
dojo.marginBox(this.gridContainerTable,{"h":_10.h-this._border.h});
99
dojo.contentBox(this.domNode,{"w":_10.w-this._border.w});
100
}
101
dojo.forEach(this.getChildren(),function(_11){
102
if(_11.resize&&dojo.isFunction(_11.resize)){
103
_11.resize();
104
}
105
});
106
},onShow:function(){
107
if(this._disabled){
108
this.enableDnd();
109
}
110
},onHide:function(){
111
if(!this._disabled){
112
this.disableDnd();
113
}
114
},_createCells:function(){
115
if(this.nbZones===0){
116
this.nbZones=1;
117
}
118
var _12=this.acceptTypes.join(","),i=0;
119
var _13=this.colWidths||[];
120
var _14=[];
121
var _15;
122
var _16=0;
123
for(i=0;i<this.nbZones;i++){
124
if(_14.length<_13.length){
125
_16+=_13[i];
126
_14.push(_13[i]);
127
}else{
128
if(!_15){
129
_15=(100-_16)/(this.nbZones-i);
130
}
131
_14.push(_15);
132
}
133
}
134
i=0;
135
while(i<this.nbZones){
136
this._grid.push({"node":dojo.create("td",{"class":"gridContainerZone","accept":_12,"id":this.id+"_dz"+i,"style":{"width":_14[i]+"%"}},this.gridNode)});
137
i++;
138
}
139
},enableDnd:function(){
140
var m=this._dragManager;
141
dojo.forEach(this._grid,function(_17){
142
m.registerByNode(_17.node);
143
});
144
m._dropMode.updateAreas(m._areaList);
145
this._disabled=false;
146
},disableDnd:function(){
147
var m=this._dragManager;
148
dojo.forEach(this._grid,function(_18){
149
m.unregister(_18.node);
150
});
151
m._dropMode.updateAreas(m._areaList);
152
this._disabled=true;
153
},_organizeChildren:function(){
154
var _19=dojox.layout.GridContainerLite.superclass.getChildren.call(this);
155
var _1a=this.nbZones,_1b=Math.floor(_19.length/_1a),mod=_19.length%_1a,i=0;
156
for(var z=0;z<_1a;z++){
157
for(var r=0;r<_1b;r++){
158
this._insertChild(_19[i],z);
159
i++;
160
}
161
if(mod>0){
162
try{
163
this._insertChild(_19[i],z);
164
i++;
165
}
166
catch(e){
167
console.error("Unable to insert child in GridContainer",e);
168
}
169
mod--;
170
}else{
171
if(_1b===0){
172
break;
173
}
174
}
175
}
176
},_organizeChildrenManually:function(){
177
var _1c=dojox.layout.GridContainerLite.superclass.getChildren.call(this),_1d=_1c.length,_1e;
178
for(var i=0;i<_1d;i++){
179
_1e=_1c[i];
180
try{
181
this._insertChild(_1e,_1e.column-1);
182
}
183
catch(e){
184
console.error("Unable to insert child in GridContainer",e);
185
}
186
}
187
},_insertChild:function(_1f,_20,p){
188
var _21=this._grid[_20].node,_22=_21.childNodes.length;
189
if(typeof (p)==undefined||p>_22){
190
p=_22;
191
}
192
if(this._disabled){
193
dojo.place(_1f.domNode,_21,p);
194
dojo.attr(_1f.domNode,"tabIndex","0");
195
}else{
196
if(!_1f.dragRestriction){
197
this._dragManager.addDragItem(_21,_1f.domNode,p,true);
198
}else{
199
dojo.place(_1f.domNode,_21,p);
200
dojo.attr(_1f.domNode,"tabIndex","0");
201
}
202
}
203
return _1f;
204
},removeChild:function(_23){
205
if(this._disabled){
206
this.inherited(arguments);
207
}else{
208
this._dragManager.removeDragItem(_23.domNode.parentNode,_23.domNode);
209
}
210
},addService:function(_24,_25,p){
211
dojo.deprecated("addService is deprecated.","Please use  instead.","Future");
212
this.addChild(_24,_25,p);
213
},addChild:function(_26,_27,p){
214
_26.domNode.id=_26.id;
215
dojox.layout.GridContainerLite.superclass.addChild.call(this,_26,0);
216
if(_27<0||_27==undefined){
217
_27=0;
218
}
219
if(p<=0){
220
p=0;
221
}
222
try{
223
return this._insertChild(_26,_27,p);
224
}
225
catch(e){
226
console.error("Unable to insert child in GridContainer",e);
227
}
228
return null;
229
},_setColWidthsAttr:function(_28){
230
this.colWidths=dojo.isString(_28)?_28.split(","):(dojo.isArray(_28)?_28:[_28]);
231
if(this._started){
232
this._updateColumnsWidth();
233
}
234
},_updateColumnsWidth:function(_29){
235
var _2a=this._grid.length;
236
var _2b=this.colWidths||[];
237
var _2c=[];
238
var _2d;
239
var _2e=0;
240
var i;
241
for(i=0;i<_2a;i++){
242
if(_2c.length<_2b.length){
243
_2e+=_2b[i]*1;
244
_2c.push(_2b[i]);
245
}else{
246
if(!_2d){
247
_2d=(100-_2e)/(this.nbZones-i);
248
if(_2d<0){
249
_2d=100/this.nbZones;
250
}
251
}
252
_2c.push(_2d);
253
_2e+=_2d*1;
254
}
255
}
256
if(_2e>100){
257
var _2f=100/_2e;
258
for(i=0;i<_2c.length;i++){
259
_2c[i]*=_2f;
260
}
261
}
262
for(i=0;i<_2a;i++){
263
this._grid[i].node.style.width=_2c[i]+"%";
264
}
265
},_selectFocus:function(_30){
266
if(this._disabled){
267
return;
268
}
269
var key=_30.keyCode,k=dojo.keys,_31=null,_32=dijit.getFocus(),_33=_32.node,m=this._dragManager,_34,i,j,r,_35,_36,_37;
270
if(_33==this.containerNode){
271
_36=this.gridNode.childNodes;
272
switch(key){
273
case k.DOWN_ARROW:
274
case k.RIGHT_ARROW:
275
_34=false;
276
for(i=0;i<_36.length;i++){
277
_35=_36[i].childNodes;
278
for(j=0;j<_35.length;j++){
279
_31=_35[j];
280
if(_31!=null&&_31.style.display!="none"){
281
dijit.focus(_31);
282
dojo.stopEvent(_30);
283
_34=true;
284
break;
285
}
286
}
287
if(_34){
288
break;
289
}
290
}
291
break;
292
case k.UP_ARROW:
293
case k.LEFT_ARROW:
294
_36=this.gridNode.childNodes;
295
_34=false;
296
for(i=_36.length-1;i>=0;i--){
297
_35=_36[i].childNodes;
298
for(j=_35.length;j>=0;j--){
299
_31=_35[j];
300
if(_31!=null&&_31.style.display!="none"){
301
dijit.focus(_31);
302
dojo.stopEvent(_30);
303
_34=true;
304
break;
305
}
306
}
307
if(_34){
308
break;
309
}
310
}
311
break;
312
}
313
}else{
314
if(_33.parentNode.parentNode==this.gridNode){
315
var _38=(key==k.UP_ARROW||key==k.LEFT_ARROW)?"lastChild":"firstChild";
316
var pos=(key==k.UP_ARROW||key==k.LEFT_ARROW)?"previousSibling":"nextSibling";
317
switch(key){
318
case k.UP_ARROW:
319
case k.DOWN_ARROW:
320
dojo.stopEvent(_30);
321
_34=false;
322
var _39=_33;
323
while(!_34){
324
_35=_39.parentNode.childNodes;
325
var num=0;
326
for(i=0;i<_35.length;i++){
327
if(_35[i].style.display!="none"){
328
num++;
329
}
330
if(num>1){
331
break;
332
}
333
}
334
if(num==1){
335
return;
336
}
337
if(_39[pos]==null){
338
_31=_39.parentNode[_38];
339
}else{
340
_31=_39[pos];
341
}
342
if(_31.style.display==="none"){
343
_39=_31;
344
}else{
345
_34=true;
346
}
347
}
348
if(_30.shiftKey){
349
var _3a=_33.parentNode;
350
for(i=0;i<this.gridNode.childNodes.length;i++){
351
if(_3a==this.gridNode.childNodes[i]){
352
break;
353
}
354
}
355
_35=this.gridNode.childNodes[i].childNodes;
356
for(j=0;j<_35.length;j++){
357
if(_31==_35[j]){
358
break;
359
}
360
}
361
if(dojo.isMoz||dojo.isWebKit){
362
i--;
363
}
364
_37=dijit.byNode(_33);
365
if(!_37.dragRestriction){
366
r=m.removeDragItem(_3a,_33);
367
this.addChild(_37,i,j);
368
dojo.attr(_33,"tabIndex","0");
369
dijit.focus(_33);
370
}else{
371
dojo.publish("/dojox/layout/gridContainer/moveRestriction",[this]);
372
}
373
}else{
374
dijit.focus(_31);
375
}
376
break;
377
case k.RIGHT_ARROW:
378
case k.LEFT_ARROW:
379
dojo.stopEvent(_30);
380
if(_30.shiftKey){
381
var z=0;
382
if(_33.parentNode[pos]==null){
383
if(dojo.isIE&&key==k.LEFT_ARROW){
384
z=this.gridNode.childNodes.length-1;
385
}
386
}else{
387
if(_33.parentNode[pos].nodeType==3){
388
z=this.gridNode.childNodes.length-2;
389
}else{
390
for(i=0;i<this.gridNode.childNodes.length;i++){
391
if(_33.parentNode[pos]==this.gridNode.childNodes[i]){
392
break;
393
}
394
z++;
395
}
396
if(dojo.isMoz||dojo.isWebKit){
397
z--;
398
}
399
}
400
}
401
_37=dijit.byNode(_33);
402
var _3b=_33.getAttribute("dndtype");
403
if(_3b==null){
404
if(_37&&_37.dndType){
405
_3b=_37.dndType.split(/\s*,\s*/);
406
}else{
407
_3b=["text"];
408
}
409
}else{
410
_3b=_3b.split(/\s*,\s*/);
411
}
412
var _3c=false;
413
for(i=0;i<this.acceptTypes.length;i++){
414
for(j=0;j<_3b.length;j++){
415
if(_3b[j]==this.acceptTypes[i]){
416
_3c=true;
417
break;
418
}
419
}
420
}
421
if(_3c&&!_37.dragRestriction){
422
var _3d=_33.parentNode,_3e=0;
423
if(k.LEFT_ARROW==key){
424
var t=z;
425
if(dojo.isMoz||dojo.isWebKit){
426
t=z+1;
427
}
428
_3e=this.gridNode.childNodes[t].childNodes.length;
429
}
430
r=m.removeDragItem(_3d,_33);
431
this.addChild(_37,z,_3e);
432
dojo.attr(r,"tabIndex","0");
433
dijit.focus(r);
434
}else{
435
dojo.publish("/dojox/layout/gridContainer/moveRestriction",[this]);
436
}
437
}else{
438
var _3f=_33.parentNode;
439
while(_31===null){
440
if(_3f[pos]!==null&&_3f[pos].nodeType!==3){
441
_3f=_3f[pos];
442
}else{
443
if(pos==="previousSibling"){
444
_3f=_3f.parentNode.childNodes[_3f.parentNode.childNodes.length-1];
445
}else{
446
_3f=(dojo.isIE)?_3f.parentNode.childNodes[0]:_3f.parentNode.childNodes[1];
447
}
448
}
449
_31=_3f[_38];
450
if(_31&&_31.style.display=="none"){
451
_35=_31.parentNode.childNodes;
452
var _40=null;
453
if(pos=="previousSibling"){
454
for(i=_35.length-1;i>=0;i--){
455
if(_35[i].style.display!="none"){
456
_40=_35[i];
457
break;
458
}
459
}
460
}else{
461
for(i=0;i<_35.length;i++){
462
if(_35[i].style.display!="none"){
463
_40=_35[i];
464
break;
465
}
466
}
467
}
468
if(!_40){
469
_33=_31;
470
_3f=_33.parentNode;
471
_31=null;
472
}else{
473
_31=_40;
474
}
475
}
476
}
477
dijit.focus(_31);
478
}
479
break;
480
}
481
}
482
}
483
},destroy:function(){
484
var m=this._dragManager;
485
dojo.forEach(this._grid,function(_41){
486
m.unregister(_41.node);
487
});
488
this.inherited(arguments);
489
}});
490
dojo.extend(dijit._Widget,{column:"1",dragRestriction:false});
491
}