123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- 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(/*dojo.keys[]*/ prevKeyCodes, /*dojo.keys[]*/ nextKeyCodes){
-
-
-
-
-
-
-
-
-
- var keyCodes = (this._keyNavCodes = {});
- var prev = dojo.hitch(this, this.focusPrev);
- var next = dojo.hitch(this, this.focusNext);
- dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; });
- dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; });
- keyCodes[dojo.keys.HOME] = dojo.hitch(this, "focusFirstChild");
- keyCodes[dojo.keys.END] = dojo.hitch(this, "focusLastChild");
- this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
- this.connect(this.domNode, "onfocus", "_onContainerFocus");
- },
- startupKeyNavChildren: function(){
-
-
-
-
- dojo.forEach(this.getChildren(), dojo.hitch(this, "_startupChild"));
- },
- addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
-
-
- dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
- this._startupChild(widget);
- },
- focus: function(){
-
-
- this.focusFirstChild();
- },
- focusFirstChild: function(){
-
-
-
-
- var child = this._getFirstFocusableChild();
- if(child){
- this.focusChild(child);
- }
- },
- focusLastChild: function(){
-
-
-
-
- var child = this._getLastFocusableChild();
- if(child){
- this.focusChild(child);
- }
- },
- focusNext: function(){
-
-
-
-
- var child = this._getNextFocusableChild(this.focusedChild, 1);
- this.focusChild(child);
- },
- focusPrev: function(){
-
-
-
-
-
- var child = this._getNextFocusableChild(this.focusedChild, -1);
- this.focusChild(child, true);
- },
- focusChild: function(/*dijit._Widget*/ widget, /*Boolean*/ last){
-
-
-
-
-
-
-
-
-
-
- if(this.focusedChild && widget !== this.focusedChild){
- this._onChildBlur(this.focusedChild);
- }
- widget.set("tabIndex", this.tabIndex);
- widget.focus(last ? "end" : "start");
- this._set("focusedChild", widget);
- },
- _startupChild: function(/*dijit._Widget*/ widget){
-
-
-
-
-
-
-
-
- widget.set("tabIndex", "-1");
-
- this.connect(widget, "_onFocus", function(){
-
- widget.set("tabIndex", this.tabIndex);
- });
- this.connect(widget, "_onBlur", function(){
- widget.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 func = this._keyNavCodes[evt.charOrCode];
- if(func){
- func();
- dojo.stopEvent(evt);
- }
- },
- _onChildBlur: function(/*dijit._Widget*/ widget){
-
-
-
-
-
- },
- _getFirstFocusableChild: function(){
-
-
- return this._getNextFocusableChild(null, 1);
- },
- _getLastFocusableChild: function(){
-
-
- return this._getNextFocusableChild(null, -1);
- },
- _getNextFocusableChild: function(child, dir){
-
-
-
-
-
-
-
-
- if(child){
- child = this._getSiblingOfChild(child, dir);
- }
- var children = this.getChildren();
- for(var i=0; i < children.length; i++){
- if(!child){
- child = children[(dir>0) ? 0 : (children.length-1)];
- }
- if(child.isFocusable()){
- return child;
- }
- child = this._getSiblingOfChild(child, dir);
- }
-
- return null;
- }
- }
- );
- }
|