95 lines
2.5 KiB
JavaScript
95 lines
2.5 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2010, 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["dijit._KeyNavContainer"]){
|
|
dojo._hasResource["dijit._KeyNavContainer"]=true;
|
|
dojo.provide("dijit._KeyNavContainer");
|
|
dojo.require("dijit._Container");
|
|
dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_1,_2){
|
|
var _3=(this._keyNavCodes={});
|
|
var _4=dojo.hitch(this,this.focusPrev);
|
|
var _5=dojo.hitch(this,this.focusNext);
|
|
dojo.forEach(_1,function(_6){
|
|
_3[_6]=_4;
|
|
});
|
|
dojo.forEach(_2,function(_7){
|
|
_3[_7]=_5;
|
|
});
|
|
this.connect(this.domNode,"onkeypress","_onContainerKeypress");
|
|
this.connect(this.domNode,"onfocus","_onContainerFocus");
|
|
},startupKeyNavChildren:function(){
|
|
dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));
|
|
},addChild:function(_8,_9){
|
|
dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);
|
|
this._startupChild(_8);
|
|
},focus:function(){
|
|
this.focusFirstChild();
|
|
},focusFirstChild:function(){
|
|
var _a=this._getFirstFocusableChild();
|
|
if(_a){
|
|
this.focusChild(_a);
|
|
}
|
|
},focusNext:function(){
|
|
var _b=this._getNextFocusableChild(this.focusedChild,1);
|
|
this.focusChild(_b);
|
|
},focusPrev:function(){
|
|
var _c=this._getNextFocusableChild(this.focusedChild,-1);
|
|
this.focusChild(_c,true);
|
|
},focusChild:function(_d,_e){
|
|
if(this.focusedChild&&_d!==this.focusedChild){
|
|
this._onChildBlur(this.focusedChild);
|
|
}
|
|
_d.focus(_e?"end":"start");
|
|
this.focusedChild=_d;
|
|
},_startupChild:function(_f){
|
|
_f.set("tabIndex","-1");
|
|
this.connect(_f,"_onFocus",function(){
|
|
_f.set("tabIndex",this.tabIndex);
|
|
});
|
|
this.connect(_f,"_onBlur",function(){
|
|
_f.set("tabIndex","-1");
|
|
});
|
|
},_onContainerFocus:function(evt){
|
|
if(evt.target!==this.domNode){
|
|
return;
|
|
}
|
|
this.focusFirstChild();
|
|
dojo.attr(this.domNode,"tabIndex","-1");
|
|
},_onBlur:function(evt){
|
|
if(this.tabIndex){
|
|
dojo.attr(this.domNode,"tabIndex",this.tabIndex);
|
|
}
|
|
this.inherited(arguments);
|
|
},_onContainerKeypress:function(evt){
|
|
if(evt.ctrlKey||evt.altKey){
|
|
return;
|
|
}
|
|
var _10=this._keyNavCodes[evt.charOrCode];
|
|
if(_10){
|
|
_10();
|
|
dojo.stopEvent(evt);
|
|
}
|
|
},_onChildBlur:function(_11){
|
|
},_getFirstFocusableChild:function(){
|
|
return this._getNextFocusableChild(null,1);
|
|
},_getNextFocusableChild:function(_12,dir){
|
|
if(_12){
|
|
_12=this._getSiblingOfChild(_12,dir);
|
|
}
|
|
var _13=this.getChildren();
|
|
for(var i=0;i<_13.length;i++){
|
|
if(!_12){
|
|
_12=_13[(dir>0)?0:(_13.length-1)];
|
|
}
|
|
if(_12.isFocusable()){
|
|
return _12;
|
|
}
|
|
_12=this._getSiblingOfChild(_12,dir);
|
|
}
|
|
return null;
|
|
}});
|
|
}
|