summaryrefslogtreecommitdiff
path: root/lib/dijit/_KeyNavContainer.js
blob: 839ba8319319b9b6701f1b616caffc308ec907f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
	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;
}});
}