summaryrefslogtreecommitdiff
path: root/lib/dijit/_KeyNavContainer.js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2010-11-15 10:39:52 +0300
committerAndrew Dolgov <[email protected]>2010-11-15 10:39:52 +0300
commit2f01fe57a8d37767827d6db42850aef86a767c53 (patch)
tree516a95ffce2fc2435aed8d9976e444dbcba7dce3 /lib/dijit/_KeyNavContainer.js
parent951906dcecb1d3c7bcf751976a03e0c196ca6db0 (diff)
add dijit/dojo stuff; initial ui mockup
Diffstat (limited to 'lib/dijit/_KeyNavContainer.js')
-rw-r--r--lib/dijit/_KeyNavContainer.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/lib/dijit/_KeyNavContainer.js b/lib/dijit/_KeyNavContainer.js
new file mode 100644
index 000000000..839ba8319
--- /dev/null
+++ b/lib/dijit/_KeyNavContainer.js
@@ -0,0 +1,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;
+}});
+}