From 1354d17270961fff662d40f90521223f8fd0d73b Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 14 Aug 2012 18:59:10 +0400 Subject: update dojo to 1.7.3 --- lib/dijit/_KeyNavContainer.js | 263 +----------------------------------------- 1 file changed, 2 insertions(+), 261 deletions(-) (limited to 'lib/dijit/_KeyNavContainer.js') diff --git a/lib/dijit/_KeyNavContainer.js b/lib/dijit/_KeyNavContainer.js index aa1bcad4b..4d0a2e12c 100644 --- a/lib/dijit/_KeyNavContainer.js +++ b/lib/dijit/_KeyNavContainer.js @@ -1,261 +1,2 @@ -/* - Copyright (c) 2004-2011, 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"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dijit._KeyNavContainer"] = true; -dojo.provide("dijit._KeyNavContainer"); -dojo.require("dijit._Container"); - - -dojo.declare("dijit._KeyNavContainer", - dijit._Container, - { - - // summary: - // A _Container with keyboard navigation of its children. - // description: - // To use this mixin, call connectKeyNavHandlers() in - // postCreate() and call startupKeyNavChildren() in startup(). - // It provides normalized keyboard and focusing code for Container - // widgets. -/*===== - // focusedChild: [protected] Widget - // The currently focused child widget, or null if there isn't one - focusedChild: null, -=====*/ - - // tabIndex: Integer - // Tab index of the container; same as HTML tabIndex attribute. - // Note then when user tabs into the container, focus is immediately - // moved to the first item in the container. - tabIndex: "0", - - _keyNavCodes: {}, - - connectKeyNavHandlers: function(/*dojo.keys[]*/ prevKeyCodes, /*dojo.keys[]*/ nextKeyCodes){ - // summary: - // Call in postCreate() to attach the keyboard handlers - // to the container. - // preKeyCodes: dojo.keys[] - // Key codes for navigating to the previous child. - // nextKeyCodes: dojo.keys[] - // Key codes for navigating to the next child. - // tags: - // protected - - 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(){ - // summary: - // Call in startup() to set child tabindexes to -1 - // tags: - // protected - dojo.forEach(this.getChildren(), dojo.hitch(this, "_startupChild")); - }, - - addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){ - // summary: - // Add a child to our _Container - dijit._KeyNavContainer.superclass.addChild.apply(this, arguments); - this._startupChild(widget); - }, - - focus: function(){ - // summary: - // Default focus() implementation: focus the first child. - this.focusFirstChild(); - }, - - focusFirstChild: function(){ - // summary: - // Focus the first focusable child in the container. - // tags: - // protected - var child = this._getFirstFocusableChild(); - if(child){ // edge case: Menu could be empty or hidden - this.focusChild(child); - } - }, - - focusLastChild: function(){ - // summary: - // Focus the last focusable child in the container. - // tags: - // protected - var child = this._getLastFocusableChild(); - if(child){ // edge case: Menu could be empty or hidden - this.focusChild(child); - } - }, - - focusNext: function(){ - // summary: - // Focus the next widget - // tags: - // protected - var child = this._getNextFocusableChild(this.focusedChild, 1); - this.focusChild(child); - }, - - focusPrev: function(){ - // summary: - // Focus the last focusable node in the previous widget - // (ex: go to the ComboButton icon section rather than button section) - // tags: - // protected - var child = this._getNextFocusableChild(this.focusedChild, -1); - this.focusChild(child, true); - }, - - focusChild: function(/*dijit._Widget*/ widget, /*Boolean*/ last){ - // summary: - // Focus widget. - // widget: - // Reference to container's child widget - // last: - // If true and if widget has multiple focusable nodes, focus the - // last one instead of the first one - // tags: - // protected - - if(this.focusedChild && widget !== this.focusedChild){ - this._onChildBlur(this.focusedChild); - } - widget.set("tabIndex", this.tabIndex); // for IE focus outline to appear, must set tabIndex before focs - widget.focus(last ? "end" : "start"); - this._set("focusedChild", widget); - }, - - _startupChild: function(/*dijit._Widget*/ widget){ - // summary: - // Setup for each child widget - // description: - // Sets tabIndex=-1 on each child, so that the tab key will - // leave the container rather than visiting each child. - // tags: - // private - - widget.set("tabIndex", "-1"); - - this.connect(widget, "_onFocus", function(){ - // Set valid tabIndex so tabbing away from widget goes to right place, see #10272 - widget.set("tabIndex", this.tabIndex); - }); - this.connect(widget, "_onBlur", function(){ - widget.set("tabIndex", "-1"); - }); - }, - - _onContainerFocus: function(evt){ - // summary: - // Handler for when the container gets focus - // description: - // Initially the container itself has a tabIndex, but when it gets - // focus, switch focus to first child... - // tags: - // private - - // Note that we can't use _onFocus() because switching focus from the - // _onFocus() handler confuses the focus.js code - // (because it causes _onFocusNode() to be called recursively) - - // focus bubbles on Firefox, - // so just make sure that focus has really gone to the container - if(evt.target !== this.domNode){ return; } - - this.focusFirstChild(); - - // and then set the container's tabIndex to -1, - // (don't remove as that breaks Safari 4) - // so that tab or shift-tab will go to the fields after/before - // the container, rather than the container itself - dojo.attr(this.domNode, "tabIndex", "-1"); - }, - - _onBlur: function(evt){ - // When focus is moved away the container, and its descendant (popup) widgets, - // then restore the container's tabIndex so that user can tab to it again. - // Note that using _onBlur() so that this doesn't happen when focus is shifted - // to one of my child widgets (typically a popup) - if(this.tabIndex){ - dojo.attr(this.domNode, "tabIndex", this.tabIndex); - } - this.inherited(arguments); - }, - - _onContainerKeypress: function(evt){ - // summary: - // When a key is pressed, if it's an arrow key etc. then - // it's handled here. - // tags: - // private - if(evt.ctrlKey || evt.altKey){ return; } - var func = this._keyNavCodes[evt.charOrCode]; - if(func){ - func(); - dojo.stopEvent(evt); - } - }, - - _onChildBlur: function(/*dijit._Widget*/ widget){ - // summary: - // Called when focus leaves a child widget to go - // to a sibling widget. - // tags: - // protected - }, - - _getFirstFocusableChild: function(){ - // summary: - // Returns first child that can be focused - return this._getNextFocusableChild(null, 1); // dijit._Widget - }, - - _getLastFocusableChild: function(){ - // summary: - // Returns last child that can be focused - return this._getNextFocusableChild(null, -1); // dijit._Widget - }, - - _getNextFocusableChild: function(child, dir){ - // summary: - // Returns the next or previous focusable child, compared - // to "child" - // child: Widget - // The current widget - // dir: Integer - // * 1 = after - // * -1 = before - 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; // dijit._Widget - } - child = this._getSiblingOfChild(child, dir); - } - // no focusable child found - return null; // dijit._Widget - } - } -); - -} +//>>built +define("dijit/_KeyNavContainer",["dojo/_base/kernel","./_Container","./_FocusMixin","dojo/_base/array","dojo/keys","dojo/_base/declare","dojo/_base/event","dojo/dom-attr","dojo/_base/lang"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9){return _6("dijit._KeyNavContainer",[_3,_2],{tabIndex:"0",connectKeyNavHandlers:function(_a,_b){var _c=(this._keyNavCodes={});var _d=_9.hitch(this,"focusPrev");var _e=_9.hitch(this,"focusNext");_4.forEach(_a,function(_f){_c[_f]=_d;});_4.forEach(_b,function(_10){_c[_10]=_e;});_c[_5.HOME]=_9.hitch(this,"focusFirstChild");_c[_5.END]=_9.hitch(this,"focusLastChild");this.connect(this.domNode,"onkeypress","_onContainerKeypress");this.connect(this.domNode,"onfocus","_onContainerFocus");},startupKeyNavChildren:function(){_1.deprecated("startupKeyNavChildren() call no longer needed","","2.0");},startup:function(){this.inherited(arguments);_4.forEach(this.getChildren(),_9.hitch(this,"_startupChild"));},addChild:function(_11,_12){this.inherited(arguments);this._startupChild(_11);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){this.focusChild(this._getFirstFocusableChild());},focusLastChild:function(){this.focusChild(this._getLastFocusableChild());},focusNext:function(){this.focusChild(this._getNextFocusableChild(this.focusedChild,1));},focusPrev:function(){this.focusChild(this._getNextFocusableChild(this.focusedChild,-1),true);},focusChild:function(_13,_14){if(!_13){return;}if(this.focusedChild&&_13!==this.focusedChild){this._onChildBlur(this.focusedChild);}_13.set("tabIndex",this.tabIndex);_13.focus(_14?"end":"start");this._set("focusedChild",_13);},_startupChild:function(_15){_15.set("tabIndex","-1");this.connect(_15,"_onFocus",function(){_15.set("tabIndex",this.tabIndex);});this.connect(_15,"_onBlur",function(){_15.set("tabIndex","-1");});},_onContainerFocus:function(evt){if(evt.target!==this.domNode||this.focusedChild){return;}this.focusFirstChild();_8.set(this.domNode,"tabIndex","-1");},_onBlur:function(evt){if(this.tabIndex){_8.set(this.domNode,"tabIndex",this.tabIndex);}this.focusedChild=null;this.inherited(arguments);},_onContainerKeypress:function(evt){if(evt.ctrlKey||evt.altKey){return;}var _16=this._keyNavCodes[evt.charOrCode];if(_16){_16();_7.stop(evt);}},_onChildBlur:function(){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getLastFocusableChild:function(){return this._getNextFocusableChild(null,-1);},_getNextFocusableChild:function(_17,dir){if(_17){_17=this._getSiblingOfChild(_17,dir);}var _18=this.getChildren();for(var i=0;i<_18.length;i++){if(!_17){_17=_18[(dir>0)?0:(_18.length-1)];}if(_17.isFocusable()){return _17;}_17=this._getSiblingOfChild(_17,dir);}return null;}});}); \ No newline at end of file -- cgit v1.2.3