12345678 |
- /*
- Copyright (c) 2004-2009, 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._HasDropDown"]){dojo._hasResource["dijit._HasDropDown"]=true;dojo.provide("dijit._HasDropDown");dojo.require("dijit._base.place");dojo.require("dijit._Widget");dojo.declare("dijit._HasDropDown",null,{_buttonNode:null,_arrowWrapperNode:null,_popupStateNode:null,_aroundNode:null,dropDown:null,autoWidth:true,forceWidth:false,maxHeight:0,dropDownPosition:["below","above"],_stopClickEvents:true,_onDropDownMouse:function(e){if(e.type=="click"&&!this._seenKeydown){return;}this._seenKeydown=false;if(e.type=="mousedown"){this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseup");}if(this.disabled||this.readOnly){return;}if(this._stopClickEvents){dojo.stopEvent(e);}this.toggleDropDown();if(e.type=="click"||e.type=="keypress"){this._onDropDownMouseup();}},_onDropDownMouseup:function(e){if(e&&this._docHandler){this.disconnect(this._docHandler);}var _1=this.dropDown,_2=false;if(e&&this._opened){var c=dojo.position(this._buttonNode,true);if(!(e.pageX>=c.x&&e.pageX<=c.x+c.w)||!(e.pageY>=c.y&&e.pageY<=c.y+c.h)){var t=e.target;while(t&&!_2){if(dojo.hasClass(t,"dijitPopup")){_2=true;}else{t=t.parentNode;}}if(_2){t=e.target;if(_1.onItemClick){var _3;while(t&&!(_3=dijit.byNode(t))){t=t.parentNode;}if(_3&&_3.onClick&&_3.getParent){_3.getParent().onItemClick(_3,e);}}return;}}}if(this._opened&&_1.focus){window.setTimeout(dojo.hitch(_1,"focus"),1);}},_setupDropdown:function(){this._buttonNode=this._buttonNode||this.focusNode||this.domNode;this._popupStateNode=this._popupStateNode||this.focusNode||this._buttonNode;this._aroundNode=this._aroundNode||this.domNode;this.connect(this._buttonNode,"onmousedown","_onDropDownMouse");this.connect(this._buttonNode,"onclick","_onDropDownMouse");this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");this.connect(this._buttonNode,"onblur","_onDropDownBlur");this.connect(this._buttonNode,"onkeypress","_onKey");if(this._setStateClass){this.connect(this,"openDropDown","_setStateClass");this.connect(this,"closeDropDown","_setStateClass");}var _4={"after":this.isLeftToRight()?"Right":"Left","before":this.isLeftToRight()?"Left":"Right","above":"Up","below":"Down","left":"Left","right":"Right"}[this.dropDownPosition[0]]||this.dropDownPosition[0]||"Down";dojo.addClass(this._arrowWrapperNode||this._buttonNode,"dijit"+_4+"ArrowButton");},postCreate:function(){this._setupDropdown();this.inherited(arguments);},destroyDescendants:function(){if(this.dropDown){if(!this.dropDown._destroyed){this.dropDown.destroyRecursive();}delete this.dropDown;}this.inherited(arguments);},_onDropDownKeydown:function(e){this._seenKeydown=true;},_onKeyPress:function(e){if(this._opened&&e.charOrCode==dojo.keys.ESCAPE&&!e.shiftKey&&!e.ctrlKey&&!e.altKey){this.toggleDropDown();dojo.stopEvent(e);return;}this.inherited(arguments);},_onDropDownBlur:function(e){this._seenKeydown=false;},_onKey:function(e){if(this.disabled||this.readOnly){return;}var d=this.dropDown;if(d&&this._opened&&d.handleKey){if(d.handleKey(e)===false){return;}}if(d&&this._opened&&e.keyCode==dojo.keys.ESCAPE){this.toggleDropDown();return;}if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.charOrCode==" "){this._onDropDownMouse(e);}},_onBlur:function(){this.closeDropDown();this.inherited(arguments);},isLoaded:function(){return true;},loadDropDown:function(_5){_5();},toggleDropDown:function(){if(this.disabled||this.readOnly){return;}this.focus();var _6=this.dropDown;if(!_6){return;}if(!this._opened){if(!this.isLoaded()){this.loadDropDown(dojo.hitch(this,"openDropDown"));return;}else{this.openDropDown();}}else{this.closeDropDown();}},openDropDown:function(){var _7=this.dropDown;var _8=_7.domNode;var _9=this;if(!this._preparedNode){dijit.popup.moveOffScreen(_8);this._preparedNode=true;if(_8.style.width){this._explicitDDWidth=true;}if(_8.style.height){this._explicitDDHeight=true;}}if(this.maxHeight||this.forceWidth||this.autoWidth){var _a={display:"",visibility:"hidden"};if(!this._explicitDDWidth){_a.width="";}if(!this._explicitDDHeight){_a.height="";}dojo.style(_8,_a);var mb=dojo.marginBox(_8);var _b=(this.maxHeight&&mb.h>this.maxHeight);dojo.style(_8,{overflow:_b?"auto":"hidden"});if(this.forceWidth){mb.w=this.domNode.offsetWidth;}else{if(this.autoWidth){mb.w=Math.max(mb.w,this.domNode.offsetWidth);}else{delete mb.w;}}if(_b){mb.h=this.maxHeight;if("w" in mb){mb.w+=16;}}else{delete mb.h;}delete mb.t;delete mb.l;if(dojo.isFunction(_7.resize)){_7.resize(mb);}else{dojo.marginBox(_8,mb);}}var _c=dijit.popup.open({parent:this,popup:_7,around:this._aroundNode,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){_9.closeDropDown(true);},onCancel:function(){_9.closeDropDown(true);},onClose:function(){dojo.attr(_9._popupStateNode,"popupActive",false);dojo.removeClass(_9._popupStateNode,"dijitHasDropDownOpen");_9._opened=false;_9.state="";}});dojo.attr(this._popupStateNode,"popupActive","true");dojo.addClass(_9._popupStateNode,"dijitHasDropDownOpen");this._opened=true;this.state="Opened";return _c;},closeDropDown:function(_d){if(this._opened){dijit.popup.close(this.dropDown);if(_d){this.focus();}this._opened=false;this.state="";}}});}
|