| /* |
| Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. |
| Available via Academic Free License >= 2.1 OR the modified BSD license. |
| see: http://dojotoolkit.org/license for details |
| */ |
| |
| |
| if(!dojo._hasResource["dojox.grid._Builder"]){ |
| dojo._hasResource["dojox.grid._Builder"]=true; |
| dojo.provide("dojox.grid._Builder"); |
| dojo.require("dojox.grid.util"); |
| dojo.require("dojo.dnd.Moveable"); |
| (function(){ |
| var dg=dojox.grid; |
| var _2=function(td){ |
| return td.cellIndex>=0?td.cellIndex:dojo.indexOf(td.parentNode.cells,td); |
| }; |
| var _4=function(tr){ |
| return tr.rowIndex>=0?tr.rowIndex:dojo.indexOf(tr.parentNode.childNodes,tr); |
| }; |
| var _6=function(_7,_8){ |
| return _7&&((_7.rows||0)[_8]||_7.childNodes[_8]); |
| }; |
| var _9=function(_a){ |
| for(var n=_a;n&&n.tagName!="TABLE";n=n.parentNode){ |
| } |
| return n; |
| }; |
| var _c=function(_d,_e){ |
| for(var n=_d;n&&_e(n);n=n.parentNode){ |
| } |
| return n; |
| }; |
| var _10=function(_11){ |
| var _12=_11.toUpperCase(); |
| return function(_13){ |
| return _13.tagName!=_12; |
| }; |
| }; |
| var _14=dojox.grid.util.rowIndexTag; |
| var _15=dojox.grid.util.gridViewTag; |
| dg._Builder=dojo.extend(function(_16){ |
| if(_16){ |
| this.view=_16; |
| this.grid=_16.grid; |
| } |
| },{view:null,_table:"<table class=\"dojoxGridRowTable\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"wairole:presentation\"",getTableArray:function(){ |
| var _17=[this._table]; |
| if(this.view.viewWidth){ |
| _17.push([" style=\"width:",this.view.viewWidth,";\""].join("")); |
| } |
| _17.push(">"); |
| return _17; |
| },generateCellMarkup:function(_18,_19,_1a,_1b){ |
| var _1c=[],_1d; |
| var _1e=dojo.isFF<3?"wairole:":""; |
| if(_1b){ |
| _1d=["<th tabIndex=\"-1\" role=\"",_1e,"columnheader\""]; |
| }else{ |
| _1d=["<td tabIndex=\"-1\" role=\"",_1e,"gridcell\""]; |
| } |
| _18.colSpan&&_1d.push(" colspan=\"",_18.colSpan,"\""); |
| _18.rowSpan&&_1d.push(" rowspan=\"",_18.rowSpan,"\""); |
| _1d.push(" class=\"dojoxGridCell "); |
| _18.classes&&_1d.push(_18.classes," "); |
| _1a&&_1d.push(_1a," "); |
| _1c.push(_1d.join("")); |
| _1c.push(""); |
| _1d=["\" idx=\"",_18.index,"\" style=\""]; |
| if(_19&&_19[_19.length-1]!=";"){ |
| _19+=";"; |
| } |
| _1d.push(_18.styles,_19||"",_18.hidden?"display:none;":""); |
| _18.unitWidth&&_1d.push("width:",_18.unitWidth,";"); |
| _1c.push(_1d.join("")); |
| _1c.push(""); |
| _1d=["\""]; |
| _18.attrs&&_1d.push(" ",_18.attrs); |
| _1d.push(">"); |
| _1c.push(_1d.join("")); |
| _1c.push(""); |
| _1c.push("</td>"); |
| return _1c; |
| },isCellNode:function(_1f){ |
| return Boolean(_1f&&_1f!=dojo.doc&&dojo.attr(_1f,"idx")); |
| },getCellNodeIndex:function(_20){ |
| return _20?Number(dojo.attr(_20,"idx")):-1; |
| },getCellNode:function(_21,_22){ |
| for(var i=0,row;row=_6(_21.firstChild,i);i++){ |
| for(var j=0,_26;_26=row.cells[j];j++){ |
| if(this.getCellNodeIndex(_26)==_22){ |
| return _26; |
| } |
| } |
| } |
| },findCellTarget:function(_27,_28){ |
| var n=_27; |
| while(n&&(!this.isCellNode(n)||(n.offsetParent&&_15 in n.offsetParent.parentNode&&n.offsetParent.parentNode[_15]!=this.view.id))&&(n!=_28)){ |
| n=n.parentNode; |
| } |
| return n!=_28?n:null; |
| },baseDecorateEvent:function(e){ |
| e.dispatch="do"+e.type; |
| e.grid=this.grid; |
| e.sourceView=this.view; |
| e.cellNode=this.findCellTarget(e.target,e.rowNode); |
| e.cellIndex=this.getCellNodeIndex(e.cellNode); |
| e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null); |
| },findTarget:function(_2b,_2c){ |
| var n=_2b; |
| while(n&&(n!=this.domNode)&&(!(_2c in n)||(_15 in n&&n[_15]!=this.view.id))){ |
| n=n.parentNode; |
| } |
| return (n!=this.domNode)?n:null; |
| },findRowTarget:function(_2e){ |
| return this.findTarget(_2e,_14); |
| },isIntraNodeEvent:function(e){ |
| try{ |
| return (e.cellNode&&e.relatedTarget&&dojo.isDescendant(e.relatedTarget,e.cellNode)); |
| } |
| catch(x){ |
| return false; |
| } |
| },isIntraRowEvent:function(e){ |
| try{ |
| var row=e.relatedTarget&&this.findRowTarget(e.relatedTarget); |
| return !row&&(e.rowIndex==-1)||row&&(e.rowIndex==row.gridRowIndex); |
| } |
| catch(x){ |
| return false; |
| } |
| },dispatchEvent:function(e){ |
| if(e.dispatch in this){ |
| return this[e.dispatch](e); |
| } |
| },domouseover:function(e){ |
| if(e.cellNode&&(e.cellNode!=this.lastOverCellNode)){ |
| this.lastOverCellNode=e.cellNode; |
| this.grid.onMouseOver(e); |
| } |
| this.grid.onMouseOverRow(e); |
| },domouseout:function(e){ |
| if(e.cellNode&&(e.cellNode==this.lastOverCellNode)&&!this.isIntraNodeEvent(e,this.lastOverCellNode)){ |
| this.lastOverCellNode=null; |
| this.grid.onMouseOut(e); |
| if(!this.isIntraRowEvent(e)){ |
| this.grid.onMouseOutRow(e); |
| } |
| } |
| },domousedown:function(e){ |
| if(e.cellNode){ |
| this.grid.onMouseDown(e); |
| } |
| this.grid.onMouseDownRow(e); |
| }}); |
| dg._ContentBuilder=dojo.extend(function(_36){ |
| dg._Builder.call(this,_36); |
| },dg._Builder.prototype,{update:function(){ |
| this.prepareHtml(); |
| },prepareHtml:function(){ |
| var _37=this.grid.get,_38=this.view.structure.cells; |
| for(var j=0,row;(row=_38[j]);j++){ |
| for(var i=0,_3c;(_3c=row[i]);i++){ |
| _3c.get=_3c.get||(_3c.value==undefined)&&_37; |
| _3c.markup=this.generateCellMarkup(_3c,_3c.cellStyles,_3c.cellClasses,false); |
| } |
| } |
| },generateHtml:function(_3d,_3e){ |
| var _3f=this.getTableArray(),v=this.view,_41=v.structure.cells,_42=this.grid.getItem(_3e); |
| dojox.grid.util.fire(this.view,"onBeforeRow",[_3e,_41]); |
| for(var j=0,row;(row=_41[j]);j++){ |
| if(row.hidden||row.header){ |
| continue; |
| } |
| _3f.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">"); |
| for(var i=0,_46,m,cc,cs;(_46=row[i]);i++){ |
| m=_46.markup,cc=_46.customClasses=[],cs=_46.customStyles=[]; |
| m[5]=_46.format(_3e,_42); |
| m[1]=cc.join(" "); |
| m[3]=cs.join(";"); |
| _3f.push.apply(_3f,m); |
| } |
| _3f.push("</tr>"); |
| } |
| _3f.push("</table>"); |
| return _3f.join(""); |
| },decorateEvent:function(e){ |
| e.rowNode=this.findRowTarget(e.target); |
| if(!e.rowNode){ |
| return false; |
| } |
| e.rowIndex=e.rowNode[_14]; |
| this.baseDecorateEvent(e); |
| e.cell=this.grid.getCell(e.cellIndex); |
| return true; |
| }}); |
| dg._HeaderBuilder=dojo.extend(function(_4b){ |
| this.moveable=null; |
| dg._Builder.call(this,_4b); |
| },dg._Builder.prototype,{_skipBogusClicks:false,overResizeWidth:4,minColWidth:1,update:function(){ |
| if(this.tableMap){ |
| this.tableMap.mapRows(this.view.structure.cells); |
| }else{ |
| this.tableMap=new dg._TableMap(this.view.structure.cells); |
| } |
| },generateHtml:function(_4c,_4d){ |
| var _4e=this.getTableArray(),_4f=this.view.structure.cells; |
| dojox.grid.util.fire(this.view,"onBeforeRow",[-1,_4f]); |
| for(var j=0,row;(row=_4f[j]);j++){ |
| if(row.hidden){ |
| continue; |
| } |
| _4e.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">"); |
| for(var i=0,_53,_54;(_53=row[i]);i++){ |
| _53.customClasses=[]; |
| _53.customStyles=[]; |
| if(this.view.simpleStructure){ |
| if(_53.headerClasses){ |
| if(_53.headerClasses.indexOf("dojoDndItem")==-1){ |
| _53.headerClasses+=" dojoDndItem"; |
| } |
| }else{ |
| _53.headerClasses="dojoDndItem"; |
| } |
| if(_53.attrs){ |
| if(_53.attrs.indexOf("dndType='gridColumn'")==-1){ |
| _53.attrs+=" dndType='gridColumn_"+this.grid.id+"'"; |
| } |
| }else{ |
| _53.attrs="dndType='gridColumn_"+this.grid.id+"'"; |
| } |
| } |
| _54=this.generateCellMarkup(_53,_53.headerStyles,_53.headerClasses,true); |
| _54[5]=(_4d!=undefined?_4d:_4c(_53)); |
| _54[3]=_53.customStyles.join(";"); |
| _54[1]=_53.customClasses.join(" "); |
| _4e.push(_54.join("")); |
| } |
| _4e.push("</tr>"); |
| } |
| _4e.push("</table>"); |
| return _4e.join(""); |
| },getCellX:function(e){ |
| var x=e.layerX; |
| if(dojo.isMoz){ |
| var n=_c(e.target,_10("th")); |
| x-=(n&&n.offsetLeft)||0; |
| var t=e.sourceView.getScrollbarWidth(); |
| if(!dojo._isBodyLtr()&&e.sourceView.headerNode.scrollLeft<t){ |
| x-=t; |
| } |
| } |
| var n=_c(e.target,function(){ |
| if(!n||n==e.cellNode){ |
| return false; |
| } |
| x+=(n.offsetLeft<0?0:n.offsetLeft); |
| return true; |
| }); |
| return x; |
| },decorateEvent:function(e){ |
| this.baseDecorateEvent(e); |
| e.rowIndex=-1; |
| e.cellX=this.getCellX(e); |
| return true; |
| },prepareResize:function(e,mod){ |
| do{ |
| var i=_2(e.cellNode); |
| e.cellNode=(i?e.cellNode.parentNode.cells[i+mod]:null); |
| e.cellIndex=(e.cellNode?this.getCellNodeIndex(e.cellNode):-1); |
| }while(e.cellNode&&e.cellNode.style.display=="none"); |
| return Boolean(e.cellNode); |
| },canResize:function(e){ |
| if(!e.cellNode||e.cellNode.colSpan>1){ |
| return false; |
| } |
| var _5e=this.grid.getCell(e.cellIndex); |
| return !_5e.noresize&&!_5e.canResize(); |
| },overLeftResizeArea:function(e){ |
| if(dojo._isBodyLtr()){ |
| return (e.cellIndex>0)&&(e.cellX<this.overResizeWidth)&&this.prepareResize(e,-1); |
| } |
| var t=e.cellNode&&(e.cellX<this.overResizeWidth); |
| return t; |
| },overRightResizeArea:function(e){ |
| if(dojo._isBodyLtr()){ |
| return e.cellNode&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth); |
| } |
| return (e.cellIndex>0)&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth)&&this.prepareResize(e,-1); |
| },domousemove:function(e){ |
| if(!this.moveable){ |
| var c=(this.overRightResizeArea(e)?"e-resize":(this.overLeftResizeArea(e)?"w-resize":"")); |
| if(c&&!this.canResize(e)){ |
| c="not-allowed"; |
| } |
| if(dojo.isIE){ |
| var t=e.sourceView.headerNode.scrollLeft; |
| e.sourceView.headerNode.style.cursor=c||""; |
| e.sourceView.headerNode.scrollLeft=t; |
| }else{ |
| e.sourceView.headerNode.style.cursor=c||""; |
| } |
| if(c){ |
| dojo.stopEvent(e); |
| } |
| } |
| },domousedown:function(e){ |
| if(!this.moveable){ |
| if((this.overRightResizeArea(e)||this.overLeftResizeArea(e))&&this.canResize(e)){ |
| this.beginColumnResize(e); |
| }else{ |
| this.grid.onMouseDown(e); |
| this.grid.onMouseOverRow(e); |
| } |
| } |
| },doclick:function(e){ |
| if(this._skipBogusClicks){ |
| dojo.stopEvent(e); |
| return true; |
| } |
| },beginColumnResize:function(e){ |
| this.moverDiv=document.createElement("div"); |
| dojo.style(this.moverDiv,{position:"absolute",left:0}); |
| dojo.body().appendChild(this.moverDiv); |
| var m=this.moveable=new dojo.dnd.Moveable(this.moverDiv); |
| var _69=[],_6a=this.tableMap.findOverlappingNodes(e.cellNode); |
| for(var i=0,_6c;(_6c=_6a[i]);i++){ |
| _69.push({node:_6c,index:this.getCellNodeIndex(_6c),width:_6c.offsetWidth}); |
| } |
| var _6d=e.sourceView; |
| var adj=dojo._isBodyLtr()?1:-1; |
| var _6f=e.grid.views.views; |
| var _70=[]; |
| for(var i=_6d.idx+adj,_71;(_71=_6f[i]);i=i+adj){ |
| _70.push({node:_71.headerNode,left:window.parseInt(_71.headerNode.style.left)}); |
| } |
| var _72=_6d.headerContentNode.firstChild; |
| var _73={scrollLeft:e.sourceView.headerNode.scrollLeft,view:_6d,node:e.cellNode,index:e.cellIndex,w:dojo.contentBox(e.cellNode).w,vw:dojo.contentBox(_6d.headerNode).w,table:_72,tw:dojo.contentBox(_72).w,spanners:_69,followers:_70}; |
| m.onMove=dojo.hitch(this,"doResizeColumn",_73); |
| dojo.connect(m,"onMoveStop",dojo.hitch(this,function(){ |
| this.endResizeColumn(_73); |
| if(_73.node.releaseCapture){ |
| _73.node.releaseCapture(); |
| } |
| this.moveable.destroy(); |
| delete this.moveable; |
| this.moveable=null; |
| })); |
| _6d.convertColPctToFixed(); |
| if(e.cellNode.setCapture){ |
| e.cellNode.setCapture(); |
| } |
| m.onMouseDown(e); |
| },doResizeColumn:function(_74,_75,_76){ |
| var _77=dojo._isBodyLtr(); |
| var _78=_77?_76.l:-_76.l; |
| var w=_74.w+_78; |
| var vw=_74.vw+_78; |
| var tw=_74.tw+_78; |
| if(w>=this.minColWidth){ |
| for(var i=0,s,sw;(s=_74.spanners[i]);i++){ |
| sw=s.width+_78; |
| s.node.style.width=sw+"px"; |
| _74.view.setColWidth(s.index,sw); |
| } |
| for(var i=0,f,fl;(f=_74.followers[i]);i++){ |
| fl=f.left+_78; |
| f.node.style.left=fl+"px"; |
| } |
| _74.node.style.width=w+"px"; |
| _74.view.setColWidth(_74.index,w); |
| _74.view.headerNode.style.width=vw+"px"; |
| _74.view.setColumnsWidth(tw); |
| if(!_77){ |
| _74.view.headerNode.scrollLeft=_74.scrollLeft+_78; |
| } |
| } |
| if(_74.view.flexCells&&!_74.view.testFlexCells()){ |
| var t=_9(_74.node); |
| t&&(t.style.width=""); |
| } |
| },endResizeColumn:function(_82){ |
| dojo.destroy(this.moverDiv); |
| delete this.moverDiv; |
| this._skipBogusClicks=true; |
| var _83=dojo.connect(_82.view,"update",this,function(){ |
| dojo.disconnect(_83); |
| this._skipBogusClicks=false; |
| }); |
| setTimeout(dojo.hitch(_82.view,"update"),50); |
| }}); |
| dg._TableMap=dojo.extend(function(_84){ |
| this.mapRows(_84); |
| },{map:null,mapRows:function(_85){ |
| var _86=_85.length; |
| if(!_86){ |
| return; |
| } |
| this.map=[]; |
| for(var j=0,row;(row=_85[j]);j++){ |
| this.map[j]=[]; |
| } |
| for(var j=0,row;(row=_85[j]);j++){ |
| for(var i=0,x=0,_8b,_8c,_8d;(_8b=row[i]);i++){ |
| while(this.map[j][x]){ |
| x++; |
| } |
| this.map[j][x]={c:i,r:j}; |
| _8d=_8b.rowSpan||1; |
| _8c=_8b.colSpan||1; |
| for(var y=0;y<_8d;y++){ |
| for(var s=0;s<_8c;s++){ |
| this.map[j+y][x+s]=this.map[j][x]; |
| } |
| } |
| x+=_8c; |
| } |
| } |
| },dumpMap:function(){ |
| for(var j=0,row,h="";(row=this.map[j]);j++,h=""){ |
| for(var i=0,_94;(_94=row[i]);i++){ |
| h+=_94.r+","+_94.c+" "; |
| } |
| } |
| },getMapCoords:function(_95,_96){ |
| for(var j=0,row;(row=this.map[j]);j++){ |
| for(var i=0,_9a;(_9a=row[i]);i++){ |
| if(_9a.c==_96&&_9a.r==_95){ |
| return {j:j,i:i}; |
| } |
| } |
| } |
| return {j:-1,i:-1}; |
| },getNode:function(_9b,_9c,_9d){ |
| var row=_9b&&_9b.rows[_9c]; |
| return row&&row.cells[_9d]; |
| },_findOverlappingNodes:function(_9f,_a0,_a1){ |
| var _a2=[]; |
| var m=this.getMapCoords(_a0,_a1); |
| var row=this.map[m.j]; |
| for(var j=0,row;(row=this.map[j]);j++){ |
| if(j==m.j){ |
| continue; |
| } |
| var rw=row[m.i]; |
| var n=(rw?this.getNode(_9f,rw.r,rw.c):null); |
| if(n){ |
| _a2.push(n); |
| } |
| } |
| return _a2; |
| },findOverlappingNodes:function(_a8){ |
| return this._findOverlappingNodes(_9(_a8),_4(_a8.parentNode),_2(_a8)); |
| }}); |
| })(); |
| } |