From 2f01fe57a8d37767827d6db42850aef86a767c53 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 15 Nov 2010 10:39:52 +0300 Subject: add dijit/dojo stuff; initial ui mockup --- lib/dijit/_HasDropDown.js | 208 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 lib/dijit/_HasDropDown.js (limited to 'lib/dijit/_HasDropDown.js') diff --git a/lib/dijit/_HasDropDown.js b/lib/dijit/_HasDropDown.js new file mode 100644 index 000000000..6606acb00 --- /dev/null +++ b/lib/dijit/_HasDropDown.js @@ -0,0 +1,208 @@ +/* + 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._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,_onDropDownMouseDown:function(e){ +if(this.disabled||this.readOnly){ +return; +} +this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp"); +this.toggleDropDown(); +},_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); +} +},_onDropDownClick:function(e){ +if(this._stopClickEvents){ +dojo.stopEvent(e); +} +},_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","_onDropDownMouseDown"); +this.connect(this._buttonNode,"onclick","_onDropDownClick"); +this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown"); +this.connect(this._buttonNode,"onkeyup","_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){ +if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE){ +e.preventDefault(); +} +},_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(); +}else{ +if(d&&!this._opened&&(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE)){ +this.toggleDropDown(); +if(d.focus){ +setTimeout(dojo.hitch(d,"focus"),1); +} +} +} +},_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,{overflowX:"hidden",overflowY:_b?"auto":"hidden"}); +if(_b){ +mb.h=this.maxHeight; +if("w" in mb){ +mb.w+=16; +} +}else{ +delete mb.h; +} +delete mb.t; +delete mb.l; +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(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){ +if(_d){ +this.focus(); +} +dijit.popup.close(this.dropDown); +this._opened=false; +this.state=""; +} +}}); +} -- cgit v1.2.3