root / trunk / web / dojo / dojox / layout / GridContainer.js @ 12
History | View | Annotate | Download (8.71 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.GridContainer"]){ |
| 9 |
dojo._hasResource["dojox.layout.GridContainer"]=true; |
| 10 |
dojo.provide("dojox.layout.GridContainer");
|
| 11 |
dojo.require("dojox.layout.GridContainerLite");
|
| 12 |
dojo.declare("dojox.layout.GridContainer",dojox.layout.GridContainerLite,{hasResizableColumns:true,liveResizeColumns:false,minColWidth:20,minChildWidth:150,mode:"right",isRightFixed:false,isLeftFixed:false,startup:function(){ |
| 13 |
this.inherited(arguments); |
| 14 |
if(this.hasResizableColumns){ |
| 15 |
for(var i=0;i<this._grid.length-1;i++){ |
| 16 |
this._createGrip(i);
|
| 17 |
} |
| 18 |
if(!this.getParent()){ |
| 19 |
dojo.ready(dojo.hitch(this,"_placeGrips")); |
| 20 |
} |
| 21 |
} |
| 22 |
},resizeChildAfterDrop:function(_1,_2,_3){ |
| 23 |
if(this.inherited(arguments)){ |
| 24 |
this._placeGrips();
|
| 25 |
} |
| 26 |
},onShow:function(){ |
| 27 |
this.inherited(arguments); |
| 28 |
this._placeGrips();
|
| 29 |
},resize:function(){ |
| 30 |
this.inherited(arguments); |
| 31 |
if(this._isShown()&&this.hasResizableColumns){ |
| 32 |
this._placeGrips();
|
| 33 |
} |
| 34 |
},_createGrip:function(_4){ |
| 35 |
var _5=this._grid[_4],_6=dojo.create("div",{"class":"gridContainerGrip"},this.domNode); |
| 36 |
_5.grip=_6; |
| 37 |
_5.gripHandler=[this.connect(_6,"onmouseover",function(e){ |
| 38 |
var _7=false; |
| 39 |
for(var i=0;i<this._grid.length-1;i++){ |
| 40 |
if(dojo.hasClass(this._grid[i].grip,"gridContainerGripShow")){ |
| 41 |
_7=true;
|
| 42 |
break;
|
| 43 |
} |
| 44 |
} |
| 45 |
if(!_7){
|
| 46 |
dojo.removeClass(e.target,"gridContainerGrip");
|
| 47 |
dojo.addClass(e.target,"gridContainerGripShow");
|
| 48 |
} |
| 49 |
})[0],this.connect(_6,"onmouseout",function(e){ |
| 50 |
if(!this._isResized){ |
| 51 |
dojo.removeClass(e.target,"gridContainerGripShow");
|
| 52 |
dojo.addClass(e.target,"gridContainerGrip");
|
| 53 |
} |
| 54 |
})[0],this.connect(_6,"onmousedown","_resizeColumnOn")[0],this.connect(_6,"ondblclick","_onGripDbClick")[0]]; |
| 55 |
},_placeGrips:function(){ |
| 56 |
var _8,_9,_a=0,_b; |
| 57 |
var _c=this.domNode.style.overflowY; |
| 58 |
dojo.forEach(this._grid,function(_d){ |
| 59 |
if(_d.grip){
|
| 60 |
_b=_d.grip; |
| 61 |
if(!_8){
|
| 62 |
_8=_b.offsetWidth/2;
|
| 63 |
} |
| 64 |
_a+=dojo.marginBox(_d.node).w; |
| 65 |
dojo.style(_b,"left",(_a-_8)+"px"); |
| 66 |
if(!_9){
|
| 67 |
_9=dojo.contentBox(this.gridNode).h;
|
| 68 |
} |
| 69 |
if(_9>0){ |
| 70 |
dojo.style(_b,"height",_9+"px"); |
| 71 |
} |
| 72 |
} |
| 73 |
},this);
|
| 74 |
},_onGripDbClick:function(){ |
| 75 |
this._updateColumnsWidth(this._dragManager); |
| 76 |
this.resize();
|
| 77 |
},_resizeColumnOn:function(e){ |
| 78 |
this._activeGrip=e.target;
|
| 79 |
this._initX=e.pageX;
|
| 80 |
e.preventDefault(); |
| 81 |
dojo.body().style.cursor="ew-resize";
|
| 82 |
this._isResized=true; |
| 83 |
var _e=[];
|
| 84 |
var _f;
|
| 85 |
var i;
|
| 86 |
for(i=0;i<this._grid.length;i++){ |
| 87 |
_e[i]=dojo.contentBox(this._grid[i].node).w;
|
| 88 |
} |
| 89 |
this._oldTabSize=_e;
|
| 90 |
for(i=0;i<this._grid.length;i++){ |
| 91 |
_f=this._grid[i];
|
| 92 |
if(this._activeGrip==_f.grip){ |
| 93 |
this._currentColumn=_f.node;
|
| 94 |
this._currentColumnWidth=_e[i];
|
| 95 |
this._nextColumn=this._grid[i+1].node; |
| 96 |
this._nextColumnWidth=_e[i+1]; |
| 97 |
} |
| 98 |
_f.node.style.width=_e[i]+"px";
|
| 99 |
} |
| 100 |
var _10=function(_11,_12){ |
| 101 |
var _13=0; |
| 102 |
var _14=0; |
| 103 |
dojo.forEach(_11,function(_15){
|
| 104 |
if(_15.nodeType==1){ |
| 105 |
var _16=dojo.getComputedStyle(_15);
|
| 106 |
var _17=(dojo.isIE)?_12:parseInt(_16.minWidth);
|
| 107 |
_14=_17+parseInt(_16.marginLeft)+parseInt(_16.marginRight); |
| 108 |
if(_13<_14){
|
| 109 |
_13=_14; |
| 110 |
} |
| 111 |
} |
| 112 |
}); |
| 113 |
return _13;
|
| 114 |
}; |
| 115 |
var _18=_10(this._currentColumn.childNodes,this.minChildWidth); |
| 116 |
var _19=_10(this._nextColumn.childNodes,this.minChildWidth); |
| 117 |
var _1a=Math.round((dojo.marginBox(this.gridContainerTable).w*this.minColWidth)/100); |
| 118 |
this._currentMinCol=_18;
|
| 119 |
this._nextMinCol=_19;
|
| 120 |
if(_1a>this._currentMinCol){ |
| 121 |
this._currentMinCol=_1a;
|
| 122 |
} |
| 123 |
if(_1a>this._nextMinCol){ |
| 124 |
this._nextMinCol=_1a;
|
| 125 |
} |
| 126 |
this._connectResizeColumnMove=dojo.connect(dojo.doc,"onmousemove",this,"_resizeColumnMove"); |
| 127 |
this._connectOnGripMouseUp=dojo.connect(dojo.doc,"onmouseup",this,"_onGripMouseUp"); |
| 128 |
},_onGripMouseUp:function(){ |
| 129 |
dojo.body().style.cursor="default";
|
| 130 |
dojo.disconnect(this._connectResizeColumnMove);
|
| 131 |
dojo.disconnect(this._connectOnGripMouseUp);
|
| 132 |
this._connectOnGripMouseUp=this._connectResizeColumnMove=null; |
| 133 |
if(this._activeGrip){ |
| 134 |
dojo.removeClass(this._activeGrip,"gridContainerGripShow"); |
| 135 |
dojo.addClass(this._activeGrip,"gridContainerGrip"); |
| 136 |
} |
| 137 |
this._isResized=false; |
| 138 |
},_resizeColumnMove:function(e){ |
| 139 |
e.preventDefault(); |
| 140 |
if(!this._connectResizeColumnOff){ |
| 141 |
dojo.disconnect(this._connectOnGripMouseUp);
|
| 142 |
this._connectOnGripMouseUp=null; |
| 143 |
this._connectResizeColumnOff=dojo.connect(dojo.doc,"onmouseup",this,"_resizeColumnOff"); |
| 144 |
} |
| 145 |
var d=e.pageX-this._initX; |
| 146 |
if(d==0){ |
| 147 |
return;
|
| 148 |
} |
| 149 |
if(!(this._currentColumnWidth+d<this._currentMinCol||this._nextColumnWidth-d<this._nextMinCol)){ |
| 150 |
this._currentColumnWidth+=d;
|
| 151 |
this._nextColumnWidth-=d;
|
| 152 |
this._initX=e.pageX;
|
| 153 |
this._activeGrip.style.left=parseInt(this._activeGrip.style.left)+d+"px"; |
| 154 |
if(this.liveResizeColumns){ |
| 155 |
this._currentColumn.style["width"]=this._currentColumnWidth+"px"; |
| 156 |
this._nextColumn.style["width"]=this._nextColumnWidth+"px"; |
| 157 |
this.resize();
|
| 158 |
} |
| 159 |
} |
| 160 |
},_resizeColumnOff:function(e){ |
| 161 |
dojo.body().style.cursor="default";
|
| 162 |
dojo.disconnect(this._connectResizeColumnMove);
|
| 163 |
dojo.disconnect(this._connectResizeColumnOff);
|
| 164 |
this._connectResizeColumnOff=this._connectResizeColumnMove=null; |
| 165 |
if(!this.liveResizeColumns){ |
| 166 |
this._currentColumn.style["width"]=this._currentColumnWidth+"px"; |
| 167 |
this._nextColumn.style["width"]=this._nextColumnWidth+"px"; |
| 168 |
} |
| 169 |
var _1b=[],_1c=[],_1d=this.gridContainerTable.clientWidth,_1e,_1f=false,i; |
| 170 |
for(i=0;i<this._grid.length;i++){ |
| 171 |
_1e=this._grid[i].node;
|
| 172 |
if(dojo.isIE){
|
| 173 |
_1b[i]=dojo.marginBox(_1e).w; |
| 174 |
_1c[i]=dojo.contentBox(_1e).w; |
| 175 |
}else{
|
| 176 |
_1b[i]=dojo.contentBox(_1e).w; |
| 177 |
_1c=_1b; |
| 178 |
} |
| 179 |
} |
| 180 |
for(i=0;i<_1c.length;i++){ |
| 181 |
if(_1c[i]!=this._oldTabSize[i]){ |
| 182 |
_1f=true;
|
| 183 |
break;
|
| 184 |
} |
| 185 |
} |
| 186 |
if(_1f){
|
| 187 |
var mul=dojo.isIE?100:10000; |
| 188 |
for(i=0;i<this._grid.length;i++){ |
| 189 |
this._grid[i].node.style.width=Math.round((100*mul*_1b[i])/_1d)/mul+"%"; |
| 190 |
} |
| 191 |
this.resize();
|
| 192 |
} |
| 193 |
if(this._activeGrip){ |
| 194 |
dojo.removeClass(this._activeGrip,"gridContainerGripShow"); |
| 195 |
dojo.addClass(this._activeGrip,"gridContainerGrip"); |
| 196 |
} |
| 197 |
this._isResized=false; |
| 198 |
},setColumns:function(_20){ |
| 199 |
var z,j;
|
| 200 |
if(_20>0){ |
| 201 |
var _21=this._grid.length,_22=_21-_20; |
| 202 |
if(_22>0){ |
| 203 |
var _23=[],_24,_25,end,_26;
|
| 204 |
if(this.mode=="right"){ |
| 205 |
end=(this.isLeftFixed&&_21>0)?1:0; |
| 206 |
_25=(this.isRightFixed)?_21-2:_21-1; |
| 207 |
for(z=_25;z>=end;z--){
|
| 208 |
_26=0;
|
| 209 |
_24=this._grid[z].node;
|
| 210 |
for(j=0;j<_24.childNodes.length;j++){ |
| 211 |
if(_24.childNodes[j].nodeType==1&&!(_24.childNodes[j].id=="")){ |
| 212 |
_26++; |
| 213 |
break;
|
| 214 |
} |
| 215 |
} |
| 216 |
if(_26==0){ |
| 217 |
_23[_23.length]=z; |
| 218 |
} |
| 219 |
if(_23.length>=_22){
|
| 220 |
this._deleteColumn(_23);
|
| 221 |
break;
|
| 222 |
} |
| 223 |
} |
| 224 |
if(_23.length<_22){
|
| 225 |
dojo.publish("/dojox/layout/gridContainer/noEmptyColumn",[this]); |
| 226 |
} |
| 227 |
}else{
|
| 228 |
_25=(this.isLeftFixed&&_21>0)?1:0; |
| 229 |
end=(this.isRightFixed)?_21-1:_21; |
| 230 |
for(z=_25;z<end;z++){
|
| 231 |
_26=0;
|
| 232 |
_24=this._grid[z].node;
|
| 233 |
for(j=0;j<_24.childNodes.length;j++){ |
| 234 |
if(_24.childNodes[j].nodeType==1&&!(_24.childNodes[j].id=="")){ |
| 235 |
_26++; |
| 236 |
break;
|
| 237 |
} |
| 238 |
} |
| 239 |
if(_26==0){ |
| 240 |
_23[_23.length]=z; |
| 241 |
} |
| 242 |
if(_23.length>=_22){
|
| 243 |
this._deleteColumn(_23);
|
| 244 |
break;
|
| 245 |
} |
| 246 |
} |
| 247 |
if(_23.length<_22){
|
| 248 |
dojo.publish("/dojox/layout/gridContainer/noEmptyColumn",[this]); |
| 249 |
} |
| 250 |
} |
| 251 |
}else{
|
| 252 |
if(_22<0){ |
| 253 |
this._addColumn(Math.abs(_22));
|
| 254 |
} |
| 255 |
} |
| 256 |
if(this.hasResizableColumns){ |
| 257 |
this._placeGrips();
|
| 258 |
} |
| 259 |
} |
| 260 |
},_addColumn:function(_27){ |
| 261 |
var _28=this._grid,_29,_2a,_2b,_2c,_2d=(this.mode=="right"),_2e=this.acceptTypes.join(","),m=this._dragManager; |
| 262 |
if(this.hasResizableColumns&&((!this.isRightFixed&&_2d)||(this.isLeftFixed&&!_2d&&this.nbZones==1))){ |
| 263 |
this._createGrip(_28.length-1); |
| 264 |
} |
| 265 |
for(var i=0;i<_27;i++){ |
| 266 |
_2a=dojo.create("td",{"class":"gridContainerZone dojoxDndArea","accept":_2e,"id":this.id+"_dz"+this.nbZones}); |
| 267 |
_2c=_28.length; |
| 268 |
if(_2d){
|
| 269 |
if(this.isRightFixed){ |
| 270 |
_2b=_2c-1;
|
| 271 |
_28.splice(_2b,0,{"node":_28[_2b].node.parentNode.insertBefore(_2a,_28[_2b].node)}); |
| 272 |
}else{
|
| 273 |
_2b=_2c; |
| 274 |
_28.push({"node":this.gridNode.appendChild(_2a)});
|
| 275 |
} |
| 276 |
}else{
|
| 277 |
if(this.isLeftFixed){ |
| 278 |
_2b=(_2c==1)?0:1; |
| 279 |
this._grid.splice(1,0,{"node":this._grid[_2b].node.parentNode.appendChild(_2a,this._grid[_2b].node)}); |
| 280 |
_2b=1;
|
| 281 |
}else{
|
| 282 |
_2b=_2c-this.nbZones;
|
| 283 |
this._grid.splice(_2b,0,{"node":_28[_2b].node.parentNode.insertBefore(_2a,_28[_2b].node)}); |
| 284 |
} |
| 285 |
} |
| 286 |
if(this.hasResizableColumns){ |
| 287 |
if((!_2d&&this.nbZones!=1)||(!_2d&&this.nbZones==1&&!this.isLeftFixed)||(_2d&&i<_27-1)||(_2d&&i==_27-1&&this.isRightFixed)){ |
| 288 |
this._createGrip(_2b);
|
| 289 |
} |
| 290 |
} |
| 291 |
m.registerByNode(_28[_2b].node); |
| 292 |
this.nbZones++;
|
| 293 |
} |
| 294 |
this._updateColumnsWidth(m);
|
| 295 |
},_deleteColumn:function(_2f){ |
| 296 |
var _30,_31,_32,_33=0,_34=_2f.length,m=this._dragManager; |
| 297 |
for(var i=0;i<_34;i++){ |
| 298 |
_32=(this.mode=="right")?_2f[i]:_2f[i]-_33; |
| 299 |
_31=this._grid[_32];
|
| 300 |
if(this.hasResizableColumns&&_31.grip){ |
| 301 |
dojo.forEach(_31.gripHandler,function(_35){
|
| 302 |
dojo.disconnect(_35); |
| 303 |
}); |
| 304 |
dojo.destroy(this.domNode.removeChild(_31.grip));
|
| 305 |
_31.grip=null;
|
| 306 |
} |
| 307 |
m.unregister(_31.node); |
| 308 |
dojo.destroy(this.gridNode.removeChild(_31.node));
|
| 309 |
this._grid.splice(_32,1); |
| 310 |
this.nbZones--;
|
| 311 |
_33++; |
| 312 |
} |
| 313 |
var _36=this._grid[this.nbZones-1]; |
| 314 |
if(_36.grip){
|
| 315 |
dojo.forEach(_36.gripHandler,dojo.disconnect); |
| 316 |
dojo.destroy(this.domNode.removeChild(_36.grip));
|
| 317 |
_36.grip=null;
|
| 318 |
} |
| 319 |
this._updateColumnsWidth(m);
|
| 320 |
},_updateColumnsWidth:function(_37){ |
| 321 |
this.inherited(arguments); |
| 322 |
_37._dropMode.updateAreas(_37._areaList); |
| 323 |
},destroy:function(){ |
| 324 |
dojo.unsubscribe(this._dropHandler);
|
| 325 |
this.inherited(arguments); |
| 326 |
}}); |
| 327 |
} |