root / trunk / web / dojo / dojox / grid / _Grid.js @ 13
History | View | Annotate | Download (19.4 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.grid._Grid"]){ |
| 9 |
dojo._hasResource["dojox.grid._Grid"]=true; |
| 10 |
dojo.provide("dojox.grid._Grid");
|
| 11 |
dojo.require("dijit.dijit");
|
| 12 |
dojo.require("dijit.Menu");
|
| 13 |
dojo.require("dojox.html.metrics");
|
| 14 |
dojo.require("dojox.grid.util");
|
| 15 |
dojo.require("dojox.grid._Scroller");
|
| 16 |
dojo.require("dojox.grid._Layout");
|
| 17 |
dojo.require("dojox.grid._View");
|
| 18 |
dojo.require("dojox.grid._ViewManager");
|
| 19 |
dojo.require("dojox.grid._RowManager");
|
| 20 |
dojo.require("dojox.grid._FocusManager");
|
| 21 |
dojo.require("dojox.grid._EditManager");
|
| 22 |
dojo.require("dojox.grid.Selection");
|
| 23 |
dojo.require("dojox.grid._RowSelector");
|
| 24 |
dojo.require("dojox.grid._Events");
|
| 25 |
dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"); |
| 26 |
(function(){
|
| 27 |
if(!dojo.isCopyKey){
|
| 28 |
dojo.isCopyKey=dojo.dnd.getCopyKeyState; |
| 29 |
} |
| 30 |
dojo.declare("dojox.grid._Grid",[dijit._Widget,dijit._Templated,dojox.grid._Events],{templateString:"<div hidefocus=\"hidefocus\" wairole=\"grid\" dojoAttachEvent=\"onmouseout:_mouseOut\">\n\t<div class=\"dojoxGridMasterHeader\" dojoAttachPoint=\"viewsHeaderNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterView\" dojoAttachPoint=\"viewsNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterMessages\" style=\"display: none;\" dojoAttachPoint=\"messagesNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n",classTag:"dojoxGrid",rowCount:5,keepRows:75,rowsPerPage:25,autoWidth:false,initialWidth:"",autoHeight:"",rowHeight:0,autoRender:true,defaultHeight:"15em",height:"",structure:null,elasticView:-1,singleClickEdit:false,selectionMode:"extended",rowSelector:"",columnReordering:false,headerMenu:null,placeholderLabel:"GridColumns",selectable:false,_click:null,loadingMessage:"<span class='dojoxGridLoading'>${loadingState}</span>",errorMessage:"<span class='dojoxGridError'>${errorState}</span>",noDataMessage:"",escapeHTMLInData:true,formatterScope:null,editable:false,sortInfo:0,themeable:true,_placeholders:null,_layoutClass:dojox.grid._Layout,buildRendering:function(){ |
| 31 |
this.inherited(arguments); |
| 32 |
if(!this.domNode.getAttribute("tabIndex")){ |
| 33 |
this.domNode.tabIndex="0"; |
| 34 |
} |
| 35 |
this.createScroller();
|
| 36 |
this.createLayout();
|
| 37 |
this.createViews();
|
| 38 |
this.createManagers();
|
| 39 |
this.createSelection();
|
| 40 |
this.connect(this.selection,"onSelected","onSelected"); |
| 41 |
this.connect(this.selection,"onDeselected","onDeselected"); |
| 42 |
this.connect(this.selection,"onChanged","onSelectionChanged"); |
| 43 |
dojox.html.metrics.initOnFontResize(); |
| 44 |
this.connect(dojox.html.metrics,"onFontResize","textSizeChanged"); |
| 45 |
dojox.grid.util.funnelEvents(this.domNode,this,"doKeyEvent",dojox.grid.util.keyEvents); |
| 46 |
if(this.selectionMode!="none"){ |
| 47 |
dojo.attr(this.domNode,"aria-multiselectable",this.selectionMode=="single"?"false":"true"); |
| 48 |
} |
| 49 |
dojo.addClass(this.domNode,this.classTag); |
| 50 |
if(!this.isLeftToRight()){ |
| 51 |
dojo.addClass(this.domNode,this.classTag+"Rtl"); |
| 52 |
} |
| 53 |
},postMixInProperties:function(){ |
| 54 |
this.inherited(arguments); |
| 55 |
var _1=dojo.i18n.getLocalization("dijit","loading",this.lang); |
| 56 |
this.loadingMessage=dojo.string.substitute(this.loadingMessage,_1); |
| 57 |
this.errorMessage=dojo.string.substitute(this.errorMessage,_1); |
| 58 |
if(this.srcNodeRef&&this.srcNodeRef.style.height){ |
| 59 |
this.height=this.srcNodeRef.style.height; |
| 60 |
} |
| 61 |
this._setAutoHeightAttr(this.autoHeight,true); |
| 62 |
this.lastScrollTop=this.scrollTop=0; |
| 63 |
},postCreate:function(){ |
| 64 |
this._placeholders=[];
|
| 65 |
this._setHeaderMenuAttr(this.headerMenu); |
| 66 |
this._setStructureAttr(this.structure); |
| 67 |
this._click=[];
|
| 68 |
this.inherited(arguments); |
| 69 |
if(this.domNode&&this.autoWidth&&this.initialWidth){ |
| 70 |
this.domNode.style.width=this.initialWidth; |
| 71 |
} |
| 72 |
if(this.domNode&&!this.editable){ |
| 73 |
dojo.attr(this.domNode,"aria-readonly","true"); |
| 74 |
} |
| 75 |
},destroy:function(){ |
| 76 |
this.domNode.onReveal=null; |
| 77 |
this.domNode.onSizeChange=null; |
| 78 |
delete this._click; |
| 79 |
this.edit.destroy();
|
| 80 |
delete this.edit; |
| 81 |
this.views.destroyViews();
|
| 82 |
if(this.scroller){ |
| 83 |
this.scroller.destroy();
|
| 84 |
delete this.scroller; |
| 85 |
} |
| 86 |
if(this.focus){ |
| 87 |
this.focus.destroy();
|
| 88 |
delete this.focus; |
| 89 |
} |
| 90 |
if(this.headerMenu&&this._placeholders.length){ |
| 91 |
dojo.forEach(this._placeholders,function(p){ |
| 92 |
p.unReplace(true);
|
| 93 |
}); |
| 94 |
this.headerMenu.unBindDomNode(this.viewsHeaderNode); |
| 95 |
} |
| 96 |
this.inherited(arguments); |
| 97 |
},_setAutoHeightAttr:function(ah,_2){ |
| 98 |
if(typeof ah=="string"){ |
| 99 |
if(!ah||ah=="false"){ |
| 100 |
ah=false;
|
| 101 |
}else{
|
| 102 |
if(ah=="true"){ |
| 103 |
ah=true;
|
| 104 |
}else{
|
| 105 |
ah=window.parseInt(ah,10);
|
| 106 |
} |
| 107 |
} |
| 108 |
} |
| 109 |
if(typeof ah=="number"){ |
| 110 |
if(isNaN(ah)){
|
| 111 |
ah=false;
|
| 112 |
} |
| 113 |
if(ah<0){ |
| 114 |
ah=true;
|
| 115 |
}else{
|
| 116 |
if(ah===0){ |
| 117 |
ah=false;
|
| 118 |
} |
| 119 |
} |
| 120 |
} |
| 121 |
this.autoHeight=ah;
|
| 122 |
if(typeof ah=="boolean"){ |
| 123 |
this._autoHeight=ah;
|
| 124 |
}else{
|
| 125 |
if(typeof ah=="number"){ |
| 126 |
this._autoHeight=(ah>=this.get("rowCount")); |
| 127 |
}else{
|
| 128 |
this._autoHeight=false; |
| 129 |
} |
| 130 |
} |
| 131 |
if(this._started&&!_2){ |
| 132 |
this.render();
|
| 133 |
} |
| 134 |
},_getRowCountAttr:function(){ |
| 135 |
return this.updating&&this.invalidated&&this.invalidated.rowCount!=undefined?this.invalidated.rowCount:this.rowCount; |
| 136 |
},textSizeChanged:function(){ |
| 137 |
this.render();
|
| 138 |
},sizeChange:function(){ |
| 139 |
this.update();
|
| 140 |
},createManagers:function(){ |
| 141 |
this.rows=new dojox.grid._RowManager(this); |
| 142 |
this.focus=new dojox.grid._FocusManager(this); |
| 143 |
this.edit=new dojox.grid._EditManager(this); |
| 144 |
},createSelection:function(){ |
| 145 |
this.selection=new dojox.grid.Selection(this); |
| 146 |
},createScroller:function(){ |
| 147 |
this.scroller=new dojox.grid._Scroller(); |
| 148 |
this.scroller.grid=this; |
| 149 |
this.scroller.renderRow=dojo.hitch(this,"renderRow"); |
| 150 |
this.scroller.removeRow=dojo.hitch(this,"rowRemoved"); |
| 151 |
},createLayout:function(){ |
| 152 |
this.layout=new this._layoutClass(this); |
| 153 |
this.connect(this.layout,"moveColumn","onMoveColumn"); |
| 154 |
},onMoveColumn:function(){ |
| 155 |
this.render();
|
| 156 |
},onResizeColumn:function(_3){ |
| 157 |
},createViews:function(){ |
| 158 |
this.views=new dojox.grid._ViewManager(this); |
| 159 |
this.views.createView=dojo.hitch(this,"createView"); |
| 160 |
},createView:function(_4,_5){ |
| 161 |
var c=dojo.getObject(_4);
|
| 162 |
var _6=new c({grid:this,index:_5}); |
| 163 |
this.viewsNode.appendChild(_6.domNode);
|
| 164 |
this.viewsHeaderNode.appendChild(_6.headerNode);
|
| 165 |
this.views.addView(_6);
|
| 166 |
return _6;
|
| 167 |
},buildViews:function(){ |
| 168 |
for(var i=0,vs;(vs=this.layout.structure[i]);i++){ |
| 169 |
this.createView(vs.type||dojox._scopeName+".grid._View",i).setStructure(vs); |
| 170 |
} |
| 171 |
this.scroller.setContentNodes(this.views.getContentNodes()); |
| 172 |
},_setStructureAttr:function(_7){ |
| 173 |
var s=_7;
|
| 174 |
if(s&&dojo.isString(s)){
|
| 175 |
dojo.deprecated("dojox.grid._Grid.attr('structure', 'objVar')","use dojox.grid._Grid.attr('structure', objVar) instead","2.0"); |
| 176 |
s=dojo.getObject(s); |
| 177 |
} |
| 178 |
this.structure=s;
|
| 179 |
if(!s){
|
| 180 |
if(this.layout.structure){ |
| 181 |
s=this.layout.structure;
|
| 182 |
}else{
|
| 183 |
return;
|
| 184 |
} |
| 185 |
} |
| 186 |
this.views.destroyViews();
|
| 187 |
if(s!==this.layout.structure){ |
| 188 |
this.layout.setStructure(s);
|
| 189 |
} |
| 190 |
this._structureChanged();
|
| 191 |
},setStructure:function(_8){ |
| 192 |
dojo.deprecated("dojox.grid._Grid.setStructure(obj)","use dojox.grid._Grid.attr('structure', obj) instead.","2.0"); |
| 193 |
this._setStructureAttr(_8);
|
| 194 |
},getColumnTogglingItems:function(){ |
| 195 |
return dojo.map(this.layout.cells,function(_9){ |
| 196 |
if(!_9.menuItems){
|
| 197 |
_9.menuItems=[]; |
| 198 |
} |
| 199 |
var _a=this; |
| 200 |
var _b=new dijit.CheckedMenuItem({label:_9.name,checked:!_9.hidden,_gridCell:_9,onChange:function(_c){ |
| 201 |
if(_a.layout.setColumnVisibility(this._gridCell.index,_c)){ |
| 202 |
var _d=this._gridCell.menuItems; |
| 203 |
if(_d.length>1){ |
| 204 |
dojo.forEach(_d,function(_e){
|
| 205 |
if(_e!==this){ |
| 206 |
_e.setAttribute("checked",_c);
|
| 207 |
} |
| 208 |
},this);
|
| 209 |
} |
| 210 |
_c=dojo.filter(_a.layout.cells,function(c){
|
| 211 |
if(c.menuItems.length>1){ |
| 212 |
dojo.forEach(c.menuItems,"item.attr('disabled', false);");
|
| 213 |
}else{
|
| 214 |
c.menuItems[0].attr("disabled",false); |
| 215 |
} |
| 216 |
return !c.hidden;
|
| 217 |
}); |
| 218 |
if(_c.length==1){ |
| 219 |
dojo.forEach(_c[0].menuItems,"item.attr('disabled', true);"); |
| 220 |
} |
| 221 |
} |
| 222 |
},destroy:function(){ |
| 223 |
var _f=dojo.indexOf(this._gridCell.menuItems,this); |
| 224 |
this._gridCell.menuItems.splice(_f,1); |
| 225 |
delete this._gridCell; |
| 226 |
dijit.CheckedMenuItem.prototype.destroy.apply(this,arguments); |
| 227 |
}}); |
| 228 |
_9.menuItems.push(_b); |
| 229 |
return _b;
|
| 230 |
},this);
|
| 231 |
},_setHeaderMenuAttr:function(_10){ |
| 232 |
if(this._placeholders&&this._placeholders.length){ |
| 233 |
dojo.forEach(this._placeholders,function(p){ |
| 234 |
p.unReplace(true);
|
| 235 |
}); |
| 236 |
this._placeholders=[];
|
| 237 |
} |
| 238 |
if(this.headerMenu){ |
| 239 |
this.headerMenu.unBindDomNode(this.viewsHeaderNode); |
| 240 |
} |
| 241 |
this.headerMenu=_10;
|
| 242 |
if(!_10){
|
| 243 |
return;
|
| 244 |
} |
| 245 |
this.headerMenu.bindDomNode(this.viewsHeaderNode); |
| 246 |
if(this.headerMenu.getPlaceholders){ |
| 247 |
this._placeholders=this.headerMenu.getPlaceholders(this.placeholderLabel); |
| 248 |
} |
| 249 |
},setHeaderMenu:function(_11){ |
| 250 |
dojo.deprecated("dojox.grid._Grid.setHeaderMenu(obj)","use dojox.grid._Grid.attr('headerMenu', obj) instead.","2.0"); |
| 251 |
this._setHeaderMenuAttr(_11);
|
| 252 |
},setupHeaderMenu:function(){ |
| 253 |
if(this._placeholders&&this._placeholders.length){ |
| 254 |
dojo.forEach(this._placeholders,function(p){ |
| 255 |
if(p._replaced){
|
| 256 |
p.unReplace(true);
|
| 257 |
} |
| 258 |
p.replace(this.getColumnTogglingItems());
|
| 259 |
},this);
|
| 260 |
} |
| 261 |
},_fetch:function(_12){ |
| 262 |
this.setScrollTop(0); |
| 263 |
},getItem:function(_13){ |
| 264 |
return null; |
| 265 |
},showMessage:function(_14){ |
| 266 |
if(_14){
|
| 267 |
this.messagesNode.innerHTML=_14;
|
| 268 |
this.messagesNode.style.display=""; |
| 269 |
}else{
|
| 270 |
this.messagesNode.innerHTML=""; |
| 271 |
this.messagesNode.style.display="none"; |
| 272 |
} |
| 273 |
},_structureChanged:function(){ |
| 274 |
this.buildViews();
|
| 275 |
if(this.autoRender&&this._started){ |
| 276 |
this.render();
|
| 277 |
} |
| 278 |
},hasLayout:function(){ |
| 279 |
return this.layout.cells.length; |
| 280 |
},resize:function(_15,_16){ |
| 281 |
this._pendingChangeSize=_15;
|
| 282 |
this._pendingResultSize=_16;
|
| 283 |
this.sizeChange();
|
| 284 |
},_getPadBorder:function(){ |
| 285 |
this._padBorder=this._padBorder||dojo._getPadBorderExtents(this.domNode); |
| 286 |
return this._padBorder; |
| 287 |
},_getHeaderHeight:function(){ |
| 288 |
var vns=this.viewsHeaderNode.style,t=vns.display=="none"?0:this.views.measureHeader(); |
| 289 |
vns.height=t+"px";
|
| 290 |
this.views.normalizeHeaderNodeHeight();
|
| 291 |
return t;
|
| 292 |
},_resize:function(_17,_18){ |
| 293 |
_17=_17||this._pendingChangeSize;
|
| 294 |
_18=_18||this._pendingResultSize;
|
| 295 |
delete this._pendingChangeSize; |
| 296 |
delete this._pendingResultSize; |
| 297 |
if(!this.domNode){ |
| 298 |
return;
|
| 299 |
} |
| 300 |
var pn=this.domNode.parentNode; |
| 301 |
if(!pn||pn.nodeType!=1||!this.hasLayout()||pn.style.visibility=="hidden"||pn.style.display=="none"){ |
| 302 |
return;
|
| 303 |
} |
| 304 |
var _19=this._getPadBorder(); |
| 305 |
var hh=undefined; |
| 306 |
var h;
|
| 307 |
if(this._autoHeight){ |
| 308 |
this.domNode.style.height="auto"; |
| 309 |
this.viewsNode.style.height=""; |
| 310 |
}else{
|
| 311 |
if(typeof this.autoHeight=="number"){ |
| 312 |
h=hh=this._getHeaderHeight();
|
| 313 |
h+=(this.scroller.averageRowHeight*this.autoHeight); |
| 314 |
this.domNode.style.height=h+"px"; |
| 315 |
}else{
|
| 316 |
if(this.domNode.clientHeight<=_19.h){ |
| 317 |
if(pn==document.body){
|
| 318 |
this.domNode.style.height=this.defaultHeight; |
| 319 |
}else{
|
| 320 |
if(this.height){ |
| 321 |
this.domNode.style.height=this.height; |
| 322 |
}else{
|
| 323 |
this.fitTo="parent"; |
| 324 |
} |
| 325 |
} |
| 326 |
} |
| 327 |
} |
| 328 |
} |
| 329 |
if(_18){
|
| 330 |
_17=_18; |
| 331 |
} |
| 332 |
if(_17){
|
| 333 |
dojo.marginBox(this.domNode,_17);
|
| 334 |
this.height=this.domNode.style.height; |
| 335 |
delete this.fitTo; |
| 336 |
}else{
|
| 337 |
if(this.fitTo=="parent"){ |
| 338 |
h=this._parentContentBoxHeight=this._parentContentBoxHeight||dojo._getContentBox(pn).h; |
| 339 |
this.domNode.style.height=Math.max(0,h)+"px"; |
| 340 |
} |
| 341 |
} |
| 342 |
var _1a=dojo.some(this.views.views,function(v){ |
| 343 |
return v.flexCells;
|
| 344 |
}); |
| 345 |
if(!this._autoHeight&&(h||dojo._getContentBox(this.domNode).h)===0){ |
| 346 |
this.viewsHeaderNode.style.display="none"; |
| 347 |
}else{
|
| 348 |
this.viewsHeaderNode.style.display="block"; |
| 349 |
if(!_1a&&hh===undefined){ |
| 350 |
hh=this._getHeaderHeight();
|
| 351 |
} |
| 352 |
} |
| 353 |
if(_1a){
|
| 354 |
hh=undefined;
|
| 355 |
} |
| 356 |
this.adaptWidth();
|
| 357 |
this.adaptHeight(hh);
|
| 358 |
this.postresize();
|
| 359 |
},adaptWidth:function(){ |
| 360 |
var _1b=(!this.initialWidth&&this.autoWidth); |
| 361 |
var w=_1b?0:this.domNode.clientWidth||(this.domNode.offsetWidth-this._getPadBorder().w),vw=this.views.arrange(1,w); |
| 362 |
this.views.onEach("adaptWidth"); |
| 363 |
if(_1b){
|
| 364 |
this.domNode.style.width=vw+"px"; |
| 365 |
} |
| 366 |
},adaptHeight:function(_1c){ |
| 367 |
var t=_1c===undefined?this._getHeaderHeight():_1c; |
| 368 |
var h=(this._autoHeight?-1:Math.max(this.domNode.clientHeight-t,0)||0); |
| 369 |
this.views.onEach("setSize",[0,h]); |
| 370 |
this.views.onEach("adaptHeight"); |
| 371 |
if(!this._autoHeight){ |
| 372 |
var _1d=0,_1e=0; |
| 373 |
var _1f=dojo.filter(this.views.views,function(v){ |
| 374 |
var has=v.hasHScrollbar();
|
| 375 |
if(has){
|
| 376 |
_1d++; |
| 377 |
}else{
|
| 378 |
_1e++; |
| 379 |
} |
| 380 |
return (!has);
|
| 381 |
}); |
| 382 |
if(_1d>0&&_1e>0){ |
| 383 |
dojo.forEach(_1f,function(v){
|
| 384 |
v.adaptHeight(true);
|
| 385 |
}); |
| 386 |
} |
| 387 |
} |
| 388 |
if(this.autoHeight===true||h!=-1||(typeof this.autoHeight=="number"&&this.autoHeight>=this.get("rowCount"))){ |
| 389 |
this.scroller.windowHeight=h;
|
| 390 |
}else{
|
| 391 |
this.scroller.windowHeight=Math.max(this.domNode.clientHeight-t,0); |
| 392 |
} |
| 393 |
},startup:function(){ |
| 394 |
if(this._started){ |
| 395 |
return;
|
| 396 |
} |
| 397 |
this.inherited(arguments); |
| 398 |
if(this.autoRender){ |
| 399 |
this.render();
|
| 400 |
} |
| 401 |
},render:function(){ |
| 402 |
if(!this.domNode){ |
| 403 |
return;
|
| 404 |
} |
| 405 |
if(!this._started){ |
| 406 |
return;
|
| 407 |
} |
| 408 |
if(!this.hasLayout()){ |
| 409 |
this.scroller.init(0,this.keepRows,this.rowsPerPage); |
| 410 |
return;
|
| 411 |
} |
| 412 |
this.update=this.defaultUpdate; |
| 413 |
this._render();
|
| 414 |
},_render:function(){ |
| 415 |
this.scroller.init(this.get("rowCount"),this.keepRows,this.rowsPerPage); |
| 416 |
this.prerender();
|
| 417 |
this.setScrollTop(0); |
| 418 |
this.postrender();
|
| 419 |
},prerender:function(){ |
| 420 |
this.keepRows=this._autoHeight?0:this.keepRows; |
| 421 |
this.scroller.setKeepInfo(this.keepRows); |
| 422 |
this.views.render();
|
| 423 |
this._resize();
|
| 424 |
},postrender:function(){ |
| 425 |
this.postresize();
|
| 426 |
this.focus.initFocusView();
|
| 427 |
dojo.setSelectable(this.domNode,this.selectable); |
| 428 |
},postresize:function(){ |
| 429 |
if(this._autoHeight){ |
| 430 |
var _20=Math.max(this.views.measureContent())+"px"; |
| 431 |
this.viewsNode.style.height=_20;
|
| 432 |
} |
| 433 |
},renderRow:function(_21,_22){ |
| 434 |
this.views.renderRow(_21,_22,this._skipRowRenormalize); |
| 435 |
},rowRemoved:function(_23){ |
| 436 |
this.views.rowRemoved(_23);
|
| 437 |
},invalidated:null,updating:false,beginUpdate:function(){ |
| 438 |
this.invalidated=[];
|
| 439 |
this.updating=true; |
| 440 |
},endUpdate:function(){ |
| 441 |
this.updating=false; |
| 442 |
var i=this.invalidated,r; |
| 443 |
if(i.all){
|
| 444 |
this.update();
|
| 445 |
}else{
|
| 446 |
if(i.rowCount!=undefined){ |
| 447 |
this.updateRowCount(i.rowCount);
|
| 448 |
}else{
|
| 449 |
for(r in i){ |
| 450 |
this.updateRow(Number(r));
|
| 451 |
} |
| 452 |
} |
| 453 |
} |
| 454 |
this.invalidated=[];
|
| 455 |
},defaultUpdate:function(){ |
| 456 |
if(!this.domNode){ |
| 457 |
return;
|
| 458 |
} |
| 459 |
if(this.updating){ |
| 460 |
this.invalidated.all=true; |
| 461 |
return;
|
| 462 |
} |
| 463 |
this.lastScrollTop=this.scrollTop; |
| 464 |
this.prerender();
|
| 465 |
this.scroller.invalidateNodes();
|
| 466 |
this.setScrollTop(this.lastScrollTop); |
| 467 |
this.postrender();
|
| 468 |
},update:function(){ |
| 469 |
this.render();
|
| 470 |
},updateRow:function(_24){ |
| 471 |
_24=Number(_24); |
| 472 |
if(this.updating){ |
| 473 |
this.invalidated[_24]=true; |
| 474 |
}else{
|
| 475 |
this.views.updateRow(_24);
|
| 476 |
this.scroller.rowHeightChanged(_24);
|
| 477 |
} |
| 478 |
},updateRows:function(_25,_26){ |
| 479 |
_25=Number(_25); |
| 480 |
_26=Number(_26); |
| 481 |
var i;
|
| 482 |
if(this.updating){ |
| 483 |
for(i=0;i<_26;i++){ |
| 484 |
this.invalidated[i+_25]=true; |
| 485 |
} |
| 486 |
}else{
|
| 487 |
for(i=0;i<_26;i++){ |
| 488 |
this.views.updateRow(i+_25,this._skipRowRenormalize); |
| 489 |
} |
| 490 |
this.scroller.rowHeightChanged(_25);
|
| 491 |
} |
| 492 |
},updateRowCount:function(_27){ |
| 493 |
if(this.updating){ |
| 494 |
this.invalidated.rowCount=_27;
|
| 495 |
}else{
|
| 496 |
this.rowCount=_27;
|
| 497 |
this._setAutoHeightAttr(this.autoHeight,true); |
| 498 |
if(this.layout.cells.length){ |
| 499 |
this.scroller.updateRowCount(_27);
|
| 500 |
} |
| 501 |
this._resize();
|
| 502 |
if(this.layout.cells.length){ |
| 503 |
this.setScrollTop(this.scrollTop); |
| 504 |
} |
| 505 |
} |
| 506 |
},updateRowStyles:function(_28){ |
| 507 |
this.views.updateRowStyles(_28);
|
| 508 |
},getRowNode:function(_29){ |
| 509 |
if(this.focus.focusView&&!(this.focus.focusView instanceof dojox.grid._RowSelector)){ |
| 510 |
return this.focus.focusView.rowNodes[_29]; |
| 511 |
}else{
|
| 512 |
for(var i=0,_2a;(_2a=this.views.views[i]);i++){ |
| 513 |
if(!(_2a instanceof dojox.grid._RowSelector)){ |
| 514 |
return _2a.rowNodes[_29];
|
| 515 |
} |
| 516 |
} |
| 517 |
} |
| 518 |
return null; |
| 519 |
},rowHeightChanged:function(_2b){ |
| 520 |
this.views.renormalizeRow(_2b);
|
| 521 |
this.scroller.rowHeightChanged(_2b);
|
| 522 |
},fastScroll:true,delayScroll:false,scrollRedrawThreshold:(dojo.isIE?100:50),scrollTo:function(_2c){ |
| 523 |
if(!this.fastScroll){ |
| 524 |
this.setScrollTop(_2c);
|
| 525 |
return;
|
| 526 |
} |
| 527 |
var _2d=Math.abs(this.lastScrollTop-_2c); |
| 528 |
this.lastScrollTop=_2c;
|
| 529 |
if(_2d>this.scrollRedrawThreshold||this.delayScroll){ |
| 530 |
this.delayScroll=true; |
| 531 |
this.scrollTop=_2c;
|
| 532 |
this.views.setScrollTop(_2c);
|
| 533 |
if(this._pendingScroll){ |
| 534 |
window.clearTimeout(this._pendingScroll);
|
| 535 |
} |
| 536 |
var _2e=this; |
| 537 |
this._pendingScroll=window.setTimeout(function(){ |
| 538 |
delete _2e._pendingScroll;
|
| 539 |
_2e.finishScrollJob(); |
| 540 |
},200);
|
| 541 |
}else{
|
| 542 |
this.setScrollTop(_2c);
|
| 543 |
} |
| 544 |
},finishScrollJob:function(){ |
| 545 |
this.delayScroll=false; |
| 546 |
this.setScrollTop(this.scrollTop); |
| 547 |
},setScrollTop:function(_2f){ |
| 548 |
this.scroller.scroll(this.views.setScrollTop(_2f)); |
| 549 |
},scrollToRow:function(_30){ |
| 550 |
this.setScrollTop(this.scroller.findScrollTop(_30)+1); |
| 551 |
},styleRowNode:function(_31,_32){ |
| 552 |
if(_32){
|
| 553 |
this.rows.styleRowNode(_31,_32);
|
| 554 |
} |
| 555 |
},_mouseOut:function(e){ |
| 556 |
this.rows.setOverRow(-2); |
| 557 |
},getCell:function(_33){ |
| 558 |
return this.layout.cells[_33]; |
| 559 |
},setCellWidth:function(_34,_35){ |
| 560 |
this.getCell(_34).unitWidth=_35;
|
| 561 |
},getCellName:function(_36){ |
| 562 |
return "Cell "+_36.index; |
| 563 |
},canSort:function(_37){ |
| 564 |
},sort:function(){ |
| 565 |
},getSortAsc:function(_38){ |
| 566 |
_38=_38==undefined?this.sortInfo:_38; |
| 567 |
return Boolean(_38>0); |
| 568 |
},getSortIndex:function(_39){ |
| 569 |
_39=_39==undefined?this.sortInfo:_39; |
| 570 |
return Math.abs(_39)-1; |
| 571 |
},setSortIndex:function(_3a,_3b){ |
| 572 |
var si=_3a+1; |
| 573 |
if(_3b!=undefined){ |
| 574 |
si*=(_3b?1:-1); |
| 575 |
}else{
|
| 576 |
if(this.getSortIndex()==_3a){ |
| 577 |
si=-this.sortInfo;
|
| 578 |
} |
| 579 |
} |
| 580 |
this.setSortInfo(si);
|
| 581 |
},setSortInfo:function(_3c){ |
| 582 |
if(this.canSort(_3c)){ |
| 583 |
this.sortInfo=_3c;
|
| 584 |
this.sort();
|
| 585 |
this.update();
|
| 586 |
} |
| 587 |
},doKeyEvent:function(e){ |
| 588 |
e.dispatch="do"+e.type;
|
| 589 |
this.onKeyEvent(e);
|
| 590 |
},_dispatch:function(m,e){ |
| 591 |
if(m in this){ |
| 592 |
return this[m](e); |
| 593 |
} |
| 594 |
return false; |
| 595 |
},dispatchKeyEvent:function(e){ |
| 596 |
this._dispatch(e.dispatch,e);
|
| 597 |
},dispatchContentEvent:function(e){ |
| 598 |
this.edit.dispatchEvent(e)||e.sourceView.dispatchContentEvent(e)||this._dispatch(e.dispatch,e); |
| 599 |
},dispatchHeaderEvent:function(e){ |
| 600 |
e.sourceView.dispatchHeaderEvent(e)||this._dispatch("doheader"+e.type,e); |
| 601 |
},dokeydown:function(e){ |
| 602 |
this.onKeyDown(e);
|
| 603 |
},doclick:function(e){ |
| 604 |
if(e.cellNode){
|
| 605 |
this.onCellClick(e);
|
| 606 |
}else{
|
| 607 |
this.onRowClick(e);
|
| 608 |
} |
| 609 |
},dodblclick:function(e){ |
| 610 |
if(e.cellNode){
|
| 611 |
this.onCellDblClick(e);
|
| 612 |
}else{
|
| 613 |
this.onRowDblClick(e);
|
| 614 |
} |
| 615 |
},docontextmenu:function(e){ |
| 616 |
if(e.cellNode){
|
| 617 |
this.onCellContextMenu(e);
|
| 618 |
}else{
|
| 619 |
this.onRowContextMenu(e);
|
| 620 |
} |
| 621 |
},doheaderclick:function(e){ |
| 622 |
if(e.cellNode){
|
| 623 |
this.onHeaderCellClick(e);
|
| 624 |
}else{
|
| 625 |
this.onHeaderClick(e);
|
| 626 |
} |
| 627 |
},doheaderdblclick:function(e){ |
| 628 |
if(e.cellNode){
|
| 629 |
this.onHeaderCellDblClick(e);
|
| 630 |
}else{
|
| 631 |
this.onHeaderDblClick(e);
|
| 632 |
} |
| 633 |
},doheadercontextmenu:function(e){ |
| 634 |
if(e.cellNode){
|
| 635 |
this.onHeaderCellContextMenu(e);
|
| 636 |
}else{
|
| 637 |
this.onHeaderContextMenu(e);
|
| 638 |
} |
| 639 |
},doStartEdit:function(_3d,_3e){ |
| 640 |
this.onStartEdit(_3d,_3e);
|
| 641 |
},doApplyCellEdit:function(_3f,_40,_41){ |
| 642 |
this.onApplyCellEdit(_3f,_40,_41);
|
| 643 |
},doCancelEdit:function(_42){ |
| 644 |
this.onCancelEdit(_42);
|
| 645 |
},doApplyEdit:function(_43){ |
| 646 |
this.onApplyEdit(_43);
|
| 647 |
},addRow:function(){ |
| 648 |
this.updateRowCount(this.get("rowCount")+1); |
| 649 |
},removeSelectedRows:function(){ |
| 650 |
if(this.allItemsSelected){ |
| 651 |
this.updateRowCount(0); |
| 652 |
}else{
|
| 653 |
this.updateRowCount(Math.max(0,this.get("rowCount")-this.selection.getSelected().length)); |
| 654 |
} |
| 655 |
this.selection.clear();
|
| 656 |
}}); |
| 657 |
dojox.grid._Grid.markupFactory=function(_44,_45,_46,_47){ |
| 658 |
var d=dojo;
|
| 659 |
var _48=function(n){ |
| 660 |
var w=d.attr(n,"width")||"auto"; |
| 661 |
if((w!="auto")&&(w.slice(-2)!="em")&&(w.slice(-1)!="%")){ |
| 662 |
w=parseInt(w,10)+"px"; |
| 663 |
} |
| 664 |
return w;
|
| 665 |
}; |
| 666 |
if(!_44.structure&&_45.nodeName.toLowerCase()=="table"){ |
| 667 |
_44.structure=d.query("> colgroup",_45).map(function(cg){ |
| 668 |
var sv=d.attr(cg,"span"); |
| 669 |
var v={noscroll:(d.attr(cg,"noscroll")=="true")?true:false,__span:(!!sv?parseInt(sv,10):1),cells:[]}; |
| 670 |
if(d.hasAttr(cg,"width")){ |
| 671 |
v.width=_48(cg); |
| 672 |
} |
| 673 |
return v;
|
| 674 |
}); |
| 675 |
if(!_44.structure.length){
|
| 676 |
_44.structure.push({__span:Infinity,cells:[]});
|
| 677 |
} |
| 678 |
d.query("thead > tr",_45).forEach(function(tr,_49){ |
| 679 |
var _4a=0; |
| 680 |
var _4b=0; |
| 681 |
var _4c;
|
| 682 |
var _4d=null; |
| 683 |
d.query("> th",tr).map(function(th){ |
| 684 |
if(!_4d){
|
| 685 |
_4c=0;
|
| 686 |
_4d=_44.structure[0];
|
| 687 |
}else{
|
| 688 |
if(_4a>=(_4c+_4d.__span)){
|
| 689 |
_4b++; |
| 690 |
_4c+=_4d.__span; |
| 691 |
var _4e=_4d;
|
| 692 |
_4d=_44.structure[_4b]; |
| 693 |
} |
| 694 |
} |
| 695 |
var _4f={name:d.trim(d.attr(th,"name")||th.innerHTML),colSpan:parseInt(d.attr(th,"colspan")||1,10),type:d.trim(d.attr(th,"cellType")||""),id:d.trim(d.attr(th,"id")||"")}; |
| 696 |
_4a+=_4f.colSpan; |
| 697 |
var _50=d.attr(th,"rowspan"); |
| 698 |
if(_50){
|
| 699 |
_4f.rowSpan=_50; |
| 700 |
} |
| 701 |
if(d.hasAttr(th,"width")){ |
| 702 |
_4f.width=_48(th); |
| 703 |
} |
| 704 |
if(d.hasAttr(th,"relWidth")){ |
| 705 |
_4f.relWidth=window.parseInt(dojo.attr(th,"relWidth"),10); |
| 706 |
} |
| 707 |
if(d.hasAttr(th,"hidden")){ |
| 708 |
_4f.hidden=d.attr(th,"hidden")=="true"; |
| 709 |
} |
| 710 |
if(_47){
|
| 711 |
_47(th,_4f); |
| 712 |
} |
| 713 |
_4f.type=_4f.type?dojo.getObject(_4f.type):dojox.grid.cells.Cell; |
| 714 |
if(_4f.type&&_4f.type.markupFactory){
|
| 715 |
_4f.type.markupFactory(th,_4f); |
| 716 |
} |
| 717 |
if(!_4d.cells[_49]){
|
| 718 |
_4d.cells[_49]=[]; |
| 719 |
} |
| 720 |
_4d.cells[_49].push(_4f); |
| 721 |
}); |
| 722 |
}); |
| 723 |
} |
| 724 |
return new _46(_44,_45); |
| 725 |
}; |
| 726 |
})(); |
| 727 |
} |