diff options
Diffstat (limited to 'lib/dojo/dnd/Manager.js')
-rw-r--r-- | lib/dojo/dnd/Manager.js | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/lib/dojo/dnd/Manager.js b/lib/dojo/dnd/Manager.js new file mode 100644 index 000000000..c6f91aac3 --- /dev/null +++ b/lib/dojo/dnd/Manager.js @@ -0,0 +1,128 @@ +/* + 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["dojo.dnd.Manager"]){ +dojo._hasResource["dojo.dnd.Manager"]=true; +dojo.provide("dojo.dnd.Manager"); +dojo.require("dojo.dnd.common"); +dojo.require("dojo.dnd.autoscroll"); +dojo.require("dojo.dnd.Avatar"); +dojo.declare("dojo.dnd.Manager",null,{constructor:function(){ +this.avatar=null; +this.source=null; +this.nodes=[]; +this.copy=true; +this.target=null; +this.canDropFlag=false; +this.events=[]; +},OFFSET_X:16,OFFSET_Y:16,overSource:function(_1){ +if(this.avatar){ +this.target=(_1&&_1.targetState!="Disabled")?_1:null; +this.canDropFlag=Boolean(this.target); +this.avatar.update(); +} +dojo.publish("/dnd/source/over",[_1]); +},outSource:function(_2){ +if(this.avatar){ +if(this.target==_2){ +this.target=null; +this.canDropFlag=false; +this.avatar.update(); +dojo.publish("/dnd/source/over",[null]); +} +}else{ +dojo.publish("/dnd/source/over",[null]); +} +},startDrag:function(_3,_4,_5){ +this.source=_3; +this.nodes=_4; +this.copy=Boolean(_5); +this.avatar=this.makeAvatar(); +dojo.body().appendChild(this.avatar.node); +dojo.publish("/dnd/start",[_3,_4,this.copy]); +this.events=[dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove"),dojo.connect(dojo.doc,"onmouseup",this,"onMouseUp"),dojo.connect(dojo.doc,"onkeydown",this,"onKeyDown"),dojo.connect(dojo.doc,"onkeyup",this,"onKeyUp"),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent)]; +var c="dojoDnd"+(_5?"Copy":"Move"); +dojo.addClass(dojo.body(),c); +},canDrop:function(_6){ +var _7=Boolean(this.target&&_6); +if(this.canDropFlag!=_7){ +this.canDropFlag=_7; +this.avatar.update(); +} +},stopDrag:function(){ +dojo.removeClass(dojo.body(),"dojoDndCopy"); +dojo.removeClass(dojo.body(),"dojoDndMove"); +dojo.forEach(this.events,dojo.disconnect); +this.events=[]; +this.avatar.destroy(); +this.avatar=null; +this.source=this.target=null; +this.nodes=[]; +},makeAvatar:function(){ +return new dojo.dnd.Avatar(this); +},updateAvatar:function(){ +this.avatar.update(); +},onMouseMove:function(e){ +var a=this.avatar; +if(a){ +dojo.dnd.autoScrollNodes(e); +var s=a.node.style; +s.left=(e.pageX+this.OFFSET_X)+"px"; +s.top=(e.pageY+this.OFFSET_Y)+"px"; +var _8=Boolean(this.source.copyState(dojo.isCopyKey(e))); +if(this.copy!=_8){ +this._setCopyStatus(_8); +} +} +},onMouseUp:function(e){ +if(this.avatar){ +if(this.target&&this.canDropFlag){ +var _9=Boolean(this.source.copyState(dojo.isCopyKey(e))),_a=[this.source,this.nodes,_9,this.target,e]; +dojo.publish("/dnd/drop/before",_a); +dojo.publish("/dnd/drop",_a); +}else{ +dojo.publish("/dnd/cancel"); +} +this.stopDrag(); +} +},onKeyDown:function(e){ +if(this.avatar){ +switch(e.keyCode){ +case dojo.keys.CTRL: +var _b=Boolean(this.source.copyState(true)); +if(this.copy!=_b){ +this._setCopyStatus(_b); +} +break; +case dojo.keys.ESCAPE: +dojo.publish("/dnd/cancel"); +this.stopDrag(); +break; +} +} +},onKeyUp:function(e){ +if(this.avatar&&e.keyCode==dojo.keys.CTRL){ +var _c=Boolean(this.source.copyState(false)); +if(this.copy!=_c){ +this._setCopyStatus(_c); +} +} +},_setCopyStatus:function(_d){ +this.copy=_d; +this.source._markDndStatus(this.copy); +this.updateAvatar(); +dojo.removeClass(dojo.body(),"dojoDnd"+(this.copy?"Move":"Copy")); +dojo.addClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move")); +}}); +dojo.dnd._manager=null; +dojo.dnd.manager=function(){ +if(!dojo.dnd._manager){ +dojo.dnd._manager=new dojo.dnd.Manager(); +} +return dojo.dnd._manager; +}; +} |