blob: 87036da15ebf43756c1d22beceb55def76a1aa95 [file] [log] [blame]
/*
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.enhanced.plugins.NestedSorting"]){
dojo._hasResource["dojox.grid.enhanced.plugins.NestedSorting"]=true;
dojo.provide("dojox.grid.enhanced.plugins.NestedSorting");
dojo.declare("dojox.grid.enhanced.plugins.NestedSorting",null,{sortAttrs:[],_unarySortCell:{},_minColWidth:63,_widthDelta:23,_minColWidthUpdated:false,_sortTipMap:{},_overResizeWidth:3,storeItemSelected:"storeItemSelectedAttr",exceptionalSelectedItems:[],_a11yText:{"dojoxGridDescending":"▾","dojoxGridAscending":"▴","dojoxGridAscendingTip":"۸","dojoxGridDescendingTip":"۷","dojoxGridUnsortedTip":"x"},constructor:function(_1){
_1.mixin(_1,this);
dojo.forEach(_1.views.views,function(_2){
dojo.connect(_2,"renderHeader",dojo.hitch(_2,_1._initSelectCols));
dojo.connect(_2.header,"domousemove",_2.grid,"_sychronizeResize");
});
_1.getSortProps=_1._getDsSortAttrs;
dojo.connect(_1,"_onFetchComplete",_1,"updateNewRowSelection");
if(_1.indirectSelection&&_1.rowSelectCell.toggleAllSelection){
dojo.connect(_1.rowSelectCell,"toggleAllSelection",_1,"allSelectionToggled");
}
dojo.subscribe(_1.rowSelectionChangedTopic,_1,_1._selectionChanged);
_1.focus.destroy();
_1.focus=new dojox.grid.enhanced.plugins._NestedSortingFocusManager(_1);
dojo.connect(_1.views,"render",_1,"initAriaInfo");
},setSortIndex:function(_3,_4,e){
if(!this.nestedSorting){
this.inherited(arguments);
}else{
if(this.dnd&&!this.dndRowConn){
this.dndRowConn=dojo.connect(this.select,"startMoveRows",dojo.hitch(this,this.clearSort));
}
this.retainLastRowSelection();
this.inSorting=true;
this._toggleProgressTip(true,e);
this._updateSortAttrs(e,_4);
this.focus.addSortFocus(e);
if(this.canSort()){
this.sort();
this.edit.info={};
this.update();
}
this._toggleProgressTip(false,e);
this.inSorting=false;
}
},_updateSortAttrs:function(e,_5){
var _6=false;
var _7=!!e.unarySortChoice;
if(_7){
var _8=this.getCellSortInfo(e.cell);
var _9=(this.sortAttrs.length>0&&_8["sortPos"]!=1)?_8["unarySortAsc"]:this._getNewSortState(_8["unarySortAsc"]);
if(_9&&_9!=0){
this.sortAttrs=[{attr:e.cell.field,asc:_9,cell:e.cell,cellNode:e.cellNode}];
this._unarySortCell={cell:e.cell,node:e.cellNode};
}else{
this.sortAttrs=[];
this._unarySortCell=null;
}
}else{
this.setCellSortInfo(e,_5);
}
},getCellSortInfo:function(_a){
if(!_a){
return false;
}
var _b=null;
var _c=this.sortAttrs;
dojo.forEach(_c,function(_d,_e,_f){
if(_d&&_d["attr"]==_a.field&&_d["cell"]==_a){
_b={unarySortAsc:_f[0]?_f[0]["asc"]:undefined,nestedSortAsc:_d["asc"],sortPos:_e+1};
}
});
return _b?_b:{unarySortAsc:_c&&_c[0]?_c[0]["asc"]:undefined,nestedSortAsc:undefined,sortPos:-1};
},setCellSortInfo:function(e,_10){
var _11=e.cell;
var _12=false;
var _13=[];
var _14=this.sortAttrs;
dojo.forEach(_14,dojo.hitch(this,function(_15,_16){
if(_15&&_15["attr"]==_11.field){
var si=_10?_10:this._getNewSortState(_15["asc"]);
if(si==1||si==-1){
_15["asc"]=si;
}else{
if(si==0){
_13.push(_16);
}else{
throw new Exception("Illegal nested sorting status - "+si);
}
}
_12=true;
}
}));
var _17=0;
dojo.forEach(_13,function(_18){
_14.splice((_18-_17++),1);
});
if(!_12){
var si=_10?_10:1;
if(si!=0){
_14.push({attr:_11.field,asc:si,cell:e.cell,cellNode:e.cellNode});
}
}
if(_13.length>0){
this._unarySortCell={cell:_14[0]["cell"],node:_14[0]["cellNode"]};
}
},_getDsSortAttrs:function(){
var _19=[];
var si=null;
dojo.forEach(this.sortAttrs,function(_1a){
if(_1a&&(_1a["asc"]==1||_1a["asc"]==-1)){
_19.push({attribute:_1a["attr"],descending:(_1a["asc"]==-1)});
}
});
return _19.length>0?_19:null;
},_getNewSortState:function(si){
return si?(si==1?-1:(si==-1?0:1)):1;
},sortStateInt2Str:function(si){
if(!si){
return "Unsorted";
}
switch(si){
case 1:
return "Ascending";
case -1:
return "Descending";
default:
return "Unsorted";
}
},clearSort:function(){
dojo.query("[id*='Sort']",this.viewsHeaderNode).forEach(function(_1b){
dojo.addClass(_1b,"dojoxGridUnsorted");
});
this.sortAttrs=[];
this.focus.clearHeaderFocus();
},_getNestedSortHeaderContent:function(_1c){
var n=_1c.name||_1c.grid.getCellName(_1c);
if(_1c.grid.pluginMgr.isFixedCell(_1c)){
return ["<div class=\"dojoxGridCellContent\">",n,"</div>"].join("");
}
var _1d=_1c.grid.getCellSortInfo(_1c);
var _1e=_1c.grid.sortAttrs;
var _1f=(_1e&&_1e.length>1&&_1d["sortPos"]>=1);
var _20=(_1e&&_1e.length==1&&_1d["sortPos"]==1);
var _21=_1c.grid;
var ret=["<div class=\"dojoxGridSortRoot\">","<div class=\"dojoxGridSortWrapper\">","<span id=\"selectSortSeparator"+_1c.index+"\" class=\"dojoxGridSortSeparatorOff\"></span>","<span class=\"dojoxGridNestedSortWrapper\" tabindex=\"-1\">","<span id=\""+_1c.view.id+"SortPos"+_1c.index+"\" class=\"dojoxGridSortPos "+(_1f?"":"dojoxGridSortPosOff")+"\">"+(_1f?_1d["sortPos"]:"")+"</span>","<span id=\"nestedSortCol"+_1c.index+"\" class=\"dojoxGridSort dojoxGridNestedSort "+(_1f?("dojoxGrid"+_21.sortStateInt2Str(_1d["nestedSortAsc"])):"dojoxGridUnsorted")+"\">",_21._a11yText["dojoxGrid"+_21.sortStateInt2Str(_1d["nestedSortAsc"])]||".","</span>","</span>","<span id=\"SortSeparator"+_1c.index+"\" class=\"dojoxGridSortSeparatorOff\"></span>","<span class=\"dojoxGridUnarySortWrapper\" tabindex=\"-1\"><span id=\"unarySortCol"+_1c.index+"\" class=\"dojoxGridSort dojoxGridUnarySort "+(_20?("dojoxGrid"+_21.sortStateInt2Str(_1d["unarySortAsc"])):"dojoxGridUnsorted")+"\">",_21._a11yText["dojoxGrid"+_21.sortStateInt2Str(_1d["unarySortAsc"])]||".","</span></span>","</div>","<div tabindex=\"-1\" id=\"selectCol"+_1c.index+"\" class=\"dojoxGridHeaderCellSelectRegion\"><span id=\"caption"+_1c.index+"\">"+n+"<span></div>","</div>"];
return ret.join("");
},addHoverSortTip:function(e){
this._sortTipMap[e.cellIndex]=true;
var _22=this.getCellSortInfo(e.cell);
if(!_22){
return;
}
var _23=this._getCellElements(e.cellNode);
if(!_23){
return;
}
var _24=this.sortAttrs;
var _25=!_24||_24.length<1;
var _26=(_24&&_24.length==1&&_22["sortPos"]==1);
dojo.addClass(_23["selectSortSeparator"],"dojoxGridSortSeparatorOn");
if(_25||_26){
this._addHoverUnarySortTip(_23,_22,e);
}else{
this._addHoverNestedSortTip(_23,_22,e);
this.updateMinColWidth(_23["nestedSortPos"]);
}
var _27=_23["selectRegion"];
this._fixSelectRegion(_27);
if(!dijit.hasWaiRole(_27)){
dijit.setWaiState(_27,"label","Column "+(e.cellIndex+1)+" "+e.cell.field);
}
this._toggleHighlight(e.sourceView,e);
this.focus._updateFocusBorder();
},_addHoverUnarySortTip:function(_28,_29,e){
dojo.addClass(_28["nestedSortWrapper"],"dojoxGridUnsorted");
var _2a=this.sortStateInt2Str(this._getNewSortState(_29["unarySortAsc"]));
dijit.setWaiState(_28["unarySortWrapper"],"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_2a.toLowerCase()+" single sort");
var _2b="dojoxGrid"+_2a+"Tip";
dojo.addClass(_28["unarySortChoice"],_2b);
_28["unarySortChoice"].innerHTML=this._a11yText[_2b];
this._addTipInfo(_28["unarySortWrapper"],this._composeSortTip(_2a,"singleSort"));
},_addHoverNestedSortTip:function(_2c,_2d,e){
var _2e=_2c["nestedSortPos"];
var _2f=_2c["unarySortWrapper"];
var _30=_2c["nestedSortWrapper"];
var _31=this.sortAttrs;
dojo.removeClass(_30,"dojoxGridUnsorted");
var _32=this.sortStateInt2Str(this._getNewSortState(_2d["nestedSortAsc"]));
dijit.setWaiState(_30,"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_32.toLowerCase()+" nested sort");
var _33="dojoxGrid"+_32+"Tip";
this._addA11yInfo(_2c["nestedSortChoice"],_33);
this._addTipInfo(_30,this._composeSortTip(_32,"nestedSort"));
_32=this.sortStateInt2Str(_2d["unarySortAsc"]);
dijit.setWaiState(_2f,"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_32.toLowerCase()+" single sort");
_33="dojoxGrid"+_32+"Tip";
this._addA11yInfo(_2c["unarySortChoice"],_33);
this._addTipInfo(_2f,this._composeSortTip(_32,"singleSort"));
dojo.addClass(_2c["sortSeparator"],"dojoxGridSortSeparatorOn");
dojo.removeClass(_2e,"dojoxGridSortPosOff");
if(_2d["sortPos"]<1){
_2e.innerHTML=(_31?_31.length:0)+1;
if(!this._unarySortInFocus()&&_31&&_31.length==1){
var _34=this._getUnaryNode();
_34.innerHTML="1";
dojo.removeClass(_34,"dojoxGridSortPosOff");
dojo.removeClass(_34.parentNode,"dojoxGridUnsorted");
this._fixSelectRegion(this._getCellElements(_34)["selectRegion"]);
}
}
},_unarySortInFocus:function(){
return this._unarySortCell.cell&&this.focus.headerCellInFocus(this._unarySortCell.cell.index);
},_composeSortTip:function(_35,_36){
_35=_35.toLowerCase();
if(_35=="unsorted"){
return this._nls[_35];
}else{
var tip=dojo.string.substitute(this._nls["sortingState"],[this._nls[_36],this._nls[_35]]);
return tip;
}
},_addTipInfo:function(_37,_38){
dojo.attr(_37,"title",_38);
dojo.query("span",_37).forEach(function(n){
dojo.attr(n,"title",_38);
});
},_addA11yInfo:function(_39,_3a){
dojo.addClass(_39,_3a);
_39.innerHTML=this._a11yText[_3a];
},removeHoverSortTip:function(e){
if(!this._sortTipMap[e.cellIndex]){
return;
}
var _3b=this.getCellSortInfo(e.cell);
if(!_3b){
return;
}
var _3c=this._getCellElements(e.cellNode);
if(!_3c){
return;
}
var _3d=_3c.nestedSortChoice;
var _3e=_3c.unarySortChoice;
var _3f=_3c.unarySortWrapper;
var _40=_3c.nestedSortWrapper;
this._toggleHighlight(e.sourceView,e,true);
function _41(_42){
dojo.forEach(_42,function(_43){
var _44=dojo.trim((" "+_43["className"]+" ").replace(/\sdojoxGrid\w+Tip\s/g," "));
if(_43["className"]!=_44){
_43["className"]=_44;
}
});
};
_41([_3d,_3e]);
_3e.innerHTML=this._a11yText["dojoxGrid"+this.sortStateInt2Str(_3b["unarySortAsc"])]||".";
_3d.innerHTML=this._a11yText["dojoxGrid"+this.sortStateInt2Str(_3b["nestedSortAsc"])]||".";
dojo.removeClass(_3c["selectSortSeparator"],"dojoxGridSortSeparatorOn");
dojo.removeClass(_3c["sortSeparator"],"dojoxGridSortSeparatorOn");
if(_3b["sortPos"]==1&&this.focus.isNavHeader()&&!this.focus.headerCellInFocus(e.cellIndex)){
dojo.removeClass(_3c["nestedSortWrapper"],"dojoxGridUnsorted");
}
var _45=this.sortAttrs;
if(!isNaN(_3b["sortPos"])&&_3b["sortPos"]<1){
_3c["nestedSortPos"].innerHTML="";
dojo.addClass(_40,"dojoxGridUnsorted");
if(!this.focus._focusBorderBox&&_45&&_45.length==1){
var _46=this._getUnaryNode();
_46.innerHTML="";
dojo.addClass(_46,"dojoxGridSortPosOff");
this._fixSelectRegion(this._getCellElements(_46)["selectRegion"]);
}
}
this._fixSelectRegion(_3c["selectRegion"]);
dijit.removeWaiState(_40,"label");
dijit.removeWaiState(_3f,"label");
if(_3b["sortPos"]>=0){
var _47=(_45.length==1);
var _48=_47?_3f:_40;
this._setSortRegionWaiState(_47,e.cellIndex,e.cell.field,_3b["sortPos"],_48);
}
this.focus._updateFocusBorder();
this._sortTipMap[e.cellIndex]=false;
},_getUnaryNode:function(){
for(var i=0;i<this.views.views.length;i++){
var n=dojo.byId(this.views.views[i].id+"SortPos"+this._unarySortCell.cell.index);
if(n){
return n;
}
}
},_fixSelectRegion:function(_49){
var _4a=_49.previousSibling;
var _4b=dojo.contentBox(_49.parentNode);
var _4c=dojo.marginBox(_49);
var _4d=dojo.marginBox(_4a);
if(dojo.isIE&&!dojo._isBodyLtr()){
var w=0;
dojo.forEach(_4a.childNodes,function(_4e){
w+=dojo.marginBox(_4e).w;
});
_4d.w=w;
_4d.l=(_4d.t=0);
dojo.marginBox(_4a,_4d);
}
if(_4c.w!=(_4b.w-_4d.w)){
_4c.w=_4b.w-_4d.w;
if(!dojo.isWebKit){
dojo.marginBox(_49,_4c);
}else{
_4c.h=dojo.contentBox(_4b).h;
dojo.style(_49,"width",(_4c.w-4)+"px");
}
}
},updateMinColWidth:function(_4f){
if(this._minColWidthUpdated){
return;
}
var _50=_4f.innerHTML;
_4f.innerHTML=dojo.query(".dojoxGridSortWrapper",this.viewsHeaderNode).length;
var _51=_4f.parentNode.parentNode;
this._minColWidth=dojo.marginBox(_51).w+this._widthDelta;
_4f.innerHTML=_50;
this._minColWidthUpdated=true;
},getMinColWidth:function(){
return this._minColWidth;
},_initSelectCols:function(){
var _52=dojo.query(".dojoxGridHeaderCellSelectRegion",this.headerContentNode);
var _53=dojo.query(".dojoxGridUnarySortWrapper",this.headerContentNode);
var _54=dojo.query(".dojoxGridNestedSortWrapper",this.headerContentNode);
_52.concat(_53).concat(_54).forEach(function(_55){
dojo.connect(_55,"onmousemove",dojo.hitch(this.grid,this.grid._toggleHighlight,this));
dojo.connect(_55,"onmouseout",dojo.hitch(this.grid,this.grid._removeActiveState));
},this);
this.grid._fixHeaderCellStyle(_52,this);
if(dojo.isIE&&!dojo._isBodyLtr()){
this.grid._fixAllSelectRegion();
}
},_fixHeaderCellStyle:function(_56,_57){
dojo.forEach(_56,dojo.hitch(this,function(_58){
var _59=dojo.marginBox(_58),_5a=this._getCellElements(_58),_5b=_5a.sortWrapper;
_5b.style.height=_59.h+"px";
_5b.style.lineHeight=_59.h+"px";
var _5c=_5a["selectSortSeparator"],_5d=_5a["sortSeparator"];
_5d.style.height=_5c.style.height=_59.h*3/5+"px";
_5d.style.marginTop=_5c.style.marginTop=_59.h*1/5+"px";
_57.header.overResizeWidth=this._overResizeWidth;
}));
},_fixAllSelectRegion:function(){
var _5e=dojo.query(".dojoxGridHeaderCellSelectRegion",this.viewsHeaderNode);
dojo.forEach(_5e,dojo.hitch(this,function(_5f){
this._fixSelectRegion(_5f);
}));
},_toggleHighlight:function(_60,e,_61){
if(!e.target||!e.type||!e.type.match(/mouse|contextmenu/)){
return;
}
var _62=this._getCellElements(e.target);
if(!_62){
return;
}
var _63=_62["selectRegion"];
var _64=_62["nestedSortWrapper"];
var _65=_62["unarySortWrapper"];
dojo.removeClass(_63,"dojoxGridSelectRegionHover");
dojo.removeClass(_64,"dojoxGridSortHover");
dojo.removeClass(_65,"dojoxGridSortHover");
if(!_61&&!_60.grid._inResize(_60)){
var _66=this._getSortEventInfo(e);
if(_66.selectChoice){
dojo.addClass(_63,"dojoxGridSelectRegionHover");
}else{
if(_66.nestedSortChoice){
dojo.addClass(_64,"dojoxGridSortHover");
}else{
if(_66.unarySortChoice){
dojo.addClass(_65,"dojoxGridSortHover");
}
}
}
}
},_removeActiveState:function(e){
if(!e.target||!e.type||!e.type.match(/mouse|contextmenu/)){
return;
}
var _67=this._getChoiceRegion(e.target,this._getSortEventInfo(e));
_67&&dojo.removeClass(_67,this.headerCellActiveClass);
},_toggleProgressTip:function(on,e){
var _68=[this.domNode,e?e.cellNode:null];
setTimeout(function(){
dojo.forEach(_68,function(_69){
if(_69){
if(on&&!dojo.hasClass(_69,"dojoxGridSortInProgress")){
dojo.addClass(_69,"dojoxGridSortInProgress");
}else{
if(!on&&dojo.hasClass(_69,"dojoxGridSortInProgress")){
dojo.removeClass(_69,"dojoxGridSortInProgress");
}
}
}
});
},0.1);
},_getSortEventInfo:function(e){
var _6a=function(_6b,css){
return dojo.hasClass(_6b,css)||(_6b.parentNode&&dojo.hasClass(_6b.parentNode,css));
};
return {selectChoice:_6a(e.target,"dojoxGridHeaderCellSelectRegion"),unarySortChoice:_6a(e.target,"dojoxGridUnarySortWrapper"),nestedSortChoice:_6a(e.target,"dojoxGridNestedSortWrapper")};
},ignoreEvent:function(e){
return !(e.nestedSortChoice||e.unarySortChoice||e.selectChoice);
},doheaderclick:function(e){
if(this.nestedSorting){
if(e.selectChoice){
this.onHeaderCellSelectClick(e);
}else{
if((e.unarySortChoice||e.nestedSortChoice)&&!this._inResize(e.sourceView)){
this.onHeaderCellSortClick(e);
}
}
return;
}
this.inherited(arguments);
},onHeaderCellSelectClick:function(e){
},onHeaderCellSortClick:function(e){
this.setSortIndex(e.cell.index,null,e);
},_sychronizeResize:function(e){
if(!e.cell||e.cell.isRowSelector||this.focus.headerCellInFocus(e.cellIndex)){
return;
}
if(!this._inResize(e.sourceView)){
this.addHoverSortTip(e);
}else{
var idx=e.cellIndex;
if(!this._sortTipMap[e.cellIndex]){
e.cellIndex=this._sortTipMap[idx+1]?(idx+1):(this._sortTipMap[idx-1]?(idx-1):idx);
e.cellNode=e.cellNode.parentNode.childNodes[e.cellIndex];
}
this.removeHoverSortTip(e);
}
},_getCellElements:function(_6c){
try{
while(_6c&&_6c.nodeName.toLowerCase()!="th"){
_6c=_6c.parentNode;
}
if(!_6c){
return null;
}
var ns=dojo.query(".dojoxGridSortRoot",_6c);
if(ns.length!=1){
return null;
}
var n=ns[0];
return {"selectSortSeparator":dojo.query("[id^='selectSortSeparator']",n)[0],"nestedSortPos":dojo.query(".dojoxGridSortPos",n)[0],"nestedSortChoice":dojo.query("[id^='nestedSortCol']",n)[0],"sortSeparator":dojo.query("[id^='SortSeparator']",n)[0],"unarySortChoice":dojo.query("[id^='unarySortCol']",n)[0],"selectRegion":dojo.query(".dojoxGridHeaderCellSelectRegion",n)[0],"sortWrapper":dojo.query(".dojoxGridSortWrapper",n)[0],"unarySortWrapper":dojo.query(".dojoxGridUnarySortWrapper",n)[0],"nestedSortWrapper":dojo.query(".dojoxGridNestedSortWrapper",n)[0],"sortRoot":n,"headCellNode":_6c};
}
catch(e){
}
return null;
},_getChoiceRegion:function(_6d,_6e){
var _6f,_70=this._getCellElements(_6d);
if(!_70){
return;
}
_6e.unarySortChoice&&(_6f=_70["unarySortWrapper"]);
_6e.nestedSortChoice&&(_6f=_70["nestedSortWrapper"]);
_6e.selectChoice&&(_6f=_70["selectRegion"]);
return _6f;
},_inResize:function(_71){
return _71.header.moverDiv||dojo.hasClass(_71.headerNode,"dojoxGridColResize")||dojo.hasClass(_71.headerNode,"dojoxGridColNoResize");
},retainLastRowSelection:function(){
dojo.forEach(this._by_idx,function(o,idx){
if(!o||!o.item){
return;
}
var _72=!!this.selection.isSelected(idx);
o.item[this.storeItemSelected]=[_72];
if(this.indirectSelection&&this.rowSelectCell.toggleAllTrigerred&&_72!=this.toggleAllValue){
this.exceptionalSelectedItems.push(o.item);
}
},this);
this.selection.clear();
dojo.publish(this.sortRowSelectionChangedTopic,[this]);
},updateNewRowSelection:function(_73,req){
dojo.forEach(_73,function(_74,idx){
if(this.indirectSelection&&this.rowSelectCell.toggleAllTrigerred){
if(dojo.indexOf(this.exceptionalSelectedItems,_74)<0){
_74[this.storeItemSelected]=[this.toggleAllValue];
}
}
_74[this.storeItemSelected]&&_74[this.storeItemSelected][0]&&this.selection.addToSelection(req.start+idx);
},this);
dojo.publish(this.sortRowSelectionChangedTopic,[this]);
if(dojo.isMoz&&this._by_idx.length==0){
this.update();
}
},allSelectionToggled:function(_75){
this.exceptionalSelectedItems=[];
this.toggleAllValue=this.rowSelectCell.defaultValue;
},_selectionChanged:function(obj){
obj==this.select&&(this.toggleAllValue=false);
},getStoreSelectedValue:function(_76){
var _77=this._by_idx[_76];
return _77&&_77.item&&!!(_77.item[this.storeItemSelected]&&_77.item[this.storeItemSelected][0]);
},initAriaInfo:function(){
var _78=this.sortAttrs;
dojo.forEach(_78,dojo.hitch(this,function(_79,_7a){
var _7b=_79.cell.getHeaderNode();
var _7c=this._getCellElements(_7b);
if(!_7c){
return;
}
var _7d=_7c["selectRegion"];
dijit.setWaiState(_7d,"label","Column "+(_79.cell.index+1)+" "+_79.attr);
var _7e=(_78.length==1);
var _7f=this.sortStateInt2Str(_79.asc).toLowerCase();
var _80=_7e?_7c["unarySortWrapper"]:_7c["nestedSortWrapper"];
dijit.setWaiState(_80,"sort",_7f);
this._setSortRegionWaiState(_7e,_79.cell.index,_79.attr,_7a+1,_80);
}));
},_setSortRegionWaiState:function(_81,_82,_83,_84,_85){
if(_84<0){
return;
}
var _86=_81?"single sort":"nested sort";
var _87="Column "+(_82+1)+" "+_83+" "+_86+" "+(!_81?(" sort position "+_84):"");
dijit.setWaiState(_85,"label",_87);
},_inPage:function(_88){
return _88<this._bop||_88>=this._eop;
}});
dojo.declare("dojox.grid.enhanced.plugins._NestedSortingFocusManager",dojox.grid._FocusManager,{lastHeaderFocus:{cellNode:null,regionIdx:-1},currentHeaderFocusEvt:null,cssMarkers:["dojoxGridHeaderCellSelectRegion","dojoxGridNestedSortWrapper","dojoxGridUnarySortWrapper"],_focusBorderBox:null,_initColumnHeaders:function(){
var _89=this._findHeaderCells();
dojo.forEach(_89,dojo.hitch(this,function(_8a){
var _8b=dojo.query(".dojoxGridHeaderCellSelectRegion",_8a);
var _8c=dojo.query("[class*='SortWrapper']",_8a);
_8b=_8b.concat(_8c);
_8b.length==0&&(_8b=[_8a]);
dojo.forEach(_8b,dojo.hitch(this,function(_8d){
this._connects.push(dojo.connect(_8d,"onfocus",this,"doColHeaderFocus"));
this._connects.push(dojo.connect(_8d,"onblur",this,"doColHeaderBlur"));
}));
}));
},focusHeader:function(_8e,_8f,_90){
if(!this.isNavHeader()){
this.inherited(arguments);
}else{
var _91=this._findHeaderCells();
this._colHeadNode=_91[this._colHeadFocusIdx];
_8f&&(this.lastHeaderFocus.cellNode=this._colHeadNode);
}
if(!this._colHeadNode){
return;
}
if(this.grid.indirectSelection&&this._colHeadFocusIdx==0){
this._colHeadNode=this._findHeaderCells()[++this._colHeadFocusIdx];
}
var _92=_90?0:(this.lastHeaderFocus.regionIdx>=0?this.lastHeaderFocus.regionIdx:(_8e?2:0));
var _93=dojo.query("."+this.cssMarkers[_92],this._colHeadNode)[0]||this._colHeadNode;
this.grid.addHoverSortTip(this.currentHeaderFocusEvt=this._mockEvt(_93));
this.lastHeaderFocus.regionIdx=_92;
_93&&dojox.grid.util.fire(_93,"focus");
},focusSelectColEndingHeader:function(e){
if(!e||!e.cellNode){
return;
}
this._colHeadFocusIdx=e.cellIndex;
this.focusHeader(null,false,true);
},_delayedHeaderFocus:function(){
this.isNavHeader()&&this.focusHeader(null,true);
},_setActiveColHeader:function(_94,_95,_96){
dojo.attr(this.grid.domNode,"aria-activedescendant",_94.id);
this._colHeadNode=_94;
this._colHeadFocusIdx=_95;
},doColHeaderFocus:function(e){
this.lastHeaderFocus.cellNode=this._colHeadNode;
if(e.target==this._colHeadNode){
this._scrollHeader(this.getHeaderIndex());
}else{
var _97=this.getFocusView(e);
if(!_97){
return;
}
_97.header.baseDecorateEvent(e);
this._addFocusBorder(e.target);
this._colHeadFocusIdx=e.cellIndex;
this._colHeadNode=this._findHeaderCells()[this._colHeadFocusIdx];
this._colHeadNode&&this.getHeaderIndex()!=-1&&this._scrollHeader(this._colHeadFocusIdx);
}
this._focusifyCellNode(false);
this.grid.isDndSelectEnable&&this.grid.focus._blurRowBar();
this.grid.addHoverSortTip(this.currentHeaderFocusEvt=this._mockEvt(e.target));
if(dojo.isIE&&!dojo._isBodyLtr()){
this.grid._fixAllSelectRegion();
}
},doColHeaderBlur:function(e){
this.inherited(arguments);
this._removeFocusBorder();
if(!this.isNavCellRegion){
var _98=this.getFocusView(e);
if(!_98){
return;
}
_98.header.baseDecorateEvent(e);
this.grid.removeHoverSortTip(e);
this.lastHeaderFocus.cellNode=this._colHeadNode;
}
},getFocusView:function(e){
var _99;
dojo.forEach(this.grid.views.views,function(_9a){
if(!_99){
var _9b=dojo.coords(_9a.domNode),_9c=dojo.coords(e.target);
var _9d=_9c.x>=_9b.x&&_9c.x<=(_9b.x+_9b.w);
_9d&&(_99=_9a);
}
});
return (this.focusView=_99);
},_mockEvt:function(_9e){
var _9f=this.grid.getCell(this._colHeadFocusIdx);
return {target:_9e,cellIndex:this._colHeadFocusIdx,cell:_9f,cellNode:this._colHeadNode,clientX:-1,sourceView:_9f.view};
},navHeader:function(e){
var _a0=e.ctrlKey?0:(e.keyCode==dojo.keys.LEFT_ARROW)?-1:1;
!dojo._isBodyLtr()&&(_a0*=-1);
this.focusView.header.baseDecorateEvent(e);
dojo.forEach(this.cssMarkers,dojo.hitch(this,function(css,_a1){
if(dojo.hasClass(e.target,css)){
var _a2=_a1+_a0,_a3,_a4;
do{
_a3=dojo.query("."+this.cssMarkers[_a2],e.cellNode)[0];
if(_a3&&dojo.style(_a3.lastChild||_a3.firstChild,"display")!="none"){
_a4=_a3;
break;
}
_a2+=_a0;
}while(_a2>=0&&_a2<this.cssMarkers.length);
if(_a4&&_a2>=0&&_a2<this.cssMarkers.length){
if(e.ctrlKey){
return;
}
dojo.isIE&&(this.grid._sortTipMap[e.cellIndex]=false);
this.navCellRegion(_a4,_a2);
return;
}
var _a5=_a2<0?-1:(_a2>=this.cssMarkers.length?1:0);
this.navHeaderNode(_a5);
}
}));
},navHeaderNode:function(_a6,_a7){
var _a8=this._colHeadFocusIdx+_a6;
var _a9=this._findHeaderCells();
while(_a8>=0&&_a8<_a9.length&&_a9[_a8].style.display=="none"){
_a8+=_a6;
}
if(this.grid.indirectSelection&&_a8==0){
return;
}
if(_a6!=0&&_a8>=0&&_a8<this.grid.layout.cells.length){
this.lastHeaderFocus.cellNode=this._colHeadNode;
this.lastHeaderFocus.regionIdx=-1;
this._colHeadFocusIdx=_a8;
this.focusHeader(_a6<0?true:false,false,_a7);
}
},navCellRegion:function(_aa,_ab){
this.isNavCellRegion=true;
dojox.grid.util.fire(_aa,"focus");
this.currentHeaderFocusEvt.target=_aa;
this.lastHeaderFocus.regionIdx=_ab;
var _ac=_ab==0?_aa:_aa.parentNode.nextSibling;
_ac&&this.grid._fixSelectRegion(_ac);
this.isNavCellRegion=false;
},headerCellInFocus:function(_ad){
return (this._colHeadFocusIdx==_ad)&&this._focusBorderBox;
},clearHeaderFocus:function(){
this._colHeadNode=this._colHeadFocusIdx=null;
this.lastHeaderFocus={cellNode:null,regionIdx:-1};
},addSortFocus:function(e){
var _ae=this.grid.getCellSortInfo(e.cell);
if(!_ae){
return;
}
var _af=this.grid.sortAttrs;
var _b0=!_af||_af.length<1;
var _b1=(_af&&_af.length==1&&_ae["sortPos"]==1);
this._colHeadFocusIdx=e.cellIndex;
this._colHeadNode=e.cellNode;
this.currentHeaderFocusEvt={};
this.lastHeaderFocus.regionIdx=(_b0||_b1)?2:(e.nestedSortChoice?1:0);
},_addFocusBorder:function(_b2){
if(!_b2){
return;
}
this._removeFocusBorder();
this._focusBorderBox=dojo.create("div");
this._focusBorderBox.className="dojoxGridFocusBorderBox";
dojo.toggleClass(_b2,"dojoxGridSelectRegionFocus",true);
dojo.toggleClass(_b2,"dojoxGridSelectRegionHover",false);
var _b3=_b2.offsetHeight;
if(_b2.hasChildNodes()){
_b2.insertBefore(this._focusBorderBox,_b2.firstChild);
}else{
_b2.appendChild(this._focusBorderBox);
}
var _b4={"l":0,"t":0,"r":0,"b":0};
for(var i in _b4){
_b4[i]=dojo.create("div");
}
var pos={x:dojo.coords(_b2).x-dojo.coords(this._focusBorderBox).x,y:dojo.coords(_b2).y-dojo.coords(this._focusBorderBox).y,w:_b2.offsetWidth,h:_b3};
for(var i in _b4){
var n=_b4[i];
dojo.addClass(n,"dojoxGridFocusBorder");
dojo.style(n,"top",pos.y+"px");
dojo.style(n,"left",pos.x+"px");
this._focusBorderBox.appendChild(n);
}
var _b5=function(val){
return val>0?val:0;
};
dojo.style(_b4.r,"left",_b5(pos.x+pos.w-1)+"px");
dojo.style(_b4.b,"top",_b5(pos.y+pos.h-1)+"px");
dojo.style(_b4.l,"height",_b5(pos.h-1)+"px");
dojo.style(_b4.r,"height",_b5(pos.h-1)+"px");
dojo.style(_b4.t,"width",_b5(pos.w-1)+"px");
dojo.style(_b4.b,"width",_b5(pos.w-1)+"px");
},_updateFocusBorder:function(){
if(this._focusBorderBox==null){
return;
}
this._addFocusBorder(this._focusBorderBox.parentNode);
},_removeFocusBorder:function(){
if(this._focusBorderBox&&this._focusBorderBox.parentNode){
dojo.toggleClass(this._focusBorderBox.parentNode,"dojoxGridSelectRegionFocus",false);
this._focusBorderBox.parentNode.removeChild(this._focusBorderBox);
}
this._focusBorderBox=null;
}});
}