| /* |
| 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.tree.dndSource"]){ |
| dojo._hasResource["dijit.tree.dndSource"]=true; |
| dojo.provide("dijit.tree.dndSource"); |
| dojo.require("dijit.tree._dndSelector"); |
| dojo.require("dojo.dnd.Manager"); |
| dojo.declare("dijit.tree.dndSource",dijit.tree._dndSelector,{isSource:true,accept:["text","treeNode"],copyOnly:false,dragThreshold:5,betweenThreshold:0,constructor:function(_1,_2){ |
| if(!_2){ |
| _2={}; |
| } |
| dojo.mixin(this,_2); |
| this.isSource=typeof _2.isSource=="undefined"?true:_2.isSource; |
| var _3=_2.accept instanceof Array?_2.accept:["text","treeNode"]; |
| this.accept=null; |
| if(_3.length){ |
| this.accept={}; |
| for(var i=0;i<_3.length;++i){ |
| this.accept[_3[i]]=1; |
| } |
| } |
| this.isDragging=false; |
| this.mouseDown=false; |
| this.targetAnchor=null; |
| this.targetBox=null; |
| this.dropPosition=""; |
| this._lastX=0; |
| this._lastY=0; |
| this.sourceState=""; |
| if(this.isSource){ |
| dojo.addClass(this.node,"dojoDndSource"); |
| } |
| this.targetState=""; |
| if(this.accept){ |
| dojo.addClass(this.node,"dojoDndTarget"); |
| } |
| this.topics=[dojo.subscribe("/dnd/source/over",this,"onDndSourceOver"),dojo.subscribe("/dnd/start",this,"onDndStart"),dojo.subscribe("/dnd/drop",this,"onDndDrop"),dojo.subscribe("/dnd/cancel",this,"onDndCancel")]; |
| },checkAcceptance:function(_4,_5){ |
| return true; |
| },copyState:function(_6){ |
| return this.copyOnly||_6; |
| },destroy:function(){ |
| this.inherited("destroy",arguments); |
| dojo.forEach(this.topics,dojo.unsubscribe); |
| this.targetAnchor=null; |
| },_onDragMouse:function(e){ |
| var m=dojo.dnd.manager(),_7=this.targetAnchor,_8=this.current,_9=this.currentWidget,_a=this.dropPosition; |
| var _b="Over"; |
| if(_8&&this.betweenThreshold>0){ |
| if(!this.targetBox||_7!=_8){ |
| this.targetBox=dojo.position(_8,true); |
| } |
| if((e.pageY-this.targetBox.y)<=this.betweenThreshold){ |
| _b="Before"; |
| }else{ |
| if((e.pageY-this.targetBox.y)>=(this.targetBox.h-this.betweenThreshold)){ |
| _b="After"; |
| } |
| } |
| } |
| if(_8!=_7||_b!=_a){ |
| if(_7){ |
| this._removeItemClass(_7,_a); |
| } |
| if(_8){ |
| this._addItemClass(_8,_b); |
| } |
| if(!_8){ |
| m.canDrop(false); |
| }else{ |
| if(_9==this.tree.rootNode&&_b!="Over"){ |
| m.canDrop(false); |
| }else{ |
| if(m.source==this&&(_8.id in this.selection)){ |
| m.canDrop(false); |
| }else{ |
| if(this.checkItemAcceptance(_8,m.source,_b.toLowerCase())&&!this._isParentChildDrop(m.source,_8)){ |
| m.canDrop(true); |
| }else{ |
| m.canDrop(false); |
| } |
| } |
| } |
| } |
| this.targetAnchor=_8; |
| this.dropPosition=_b; |
| } |
| },onMouseMove:function(e){ |
| if(this.isDragging&&this.targetState=="Disabled"){ |
| return; |
| } |
| this.inherited(arguments); |
| var m=dojo.dnd.manager(); |
| if(this.isDragging){ |
| this._onDragMouse(e); |
| }else{ |
| if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>=this.dragThreshold||Math.abs(e.pageY-this._lastY)>=this.dragThreshold)){ |
| var n=this.getSelectedNodes(); |
| var _c=[]; |
| for(var i in n){ |
| _c.push(n[i]); |
| } |
| if(_c.length){ |
| m.startDrag(this,_c,this.copyState(dojo.isCopyKey(e))); |
| } |
| } |
| } |
| },onMouseDown:function(e){ |
| this.mouseDown=true; |
| this.mouseButton=e.button; |
| this._lastX=e.pageX; |
| this._lastY=e.pageY; |
| this.inherited("onMouseDown",arguments); |
| },onMouseUp:function(e){ |
| if(this.mouseDown){ |
| this.mouseDown=false; |
| this.inherited("onMouseUp",arguments); |
| } |
| },onMouseOut:function(){ |
| this.inherited(arguments); |
| this._unmarkTargetAnchor(); |
| },checkItemAcceptance:function(_d,_e,_f){ |
| return true; |
| },onDndSourceOver:function(_10){ |
| if(this!=_10){ |
| this.mouseDown=false; |
| this._unmarkTargetAnchor(); |
| }else{ |
| if(this.isDragging){ |
| var m=dojo.dnd.manager(); |
| m.canDrop(false); |
| } |
| } |
| },onDndStart:function(_11,_12,_13){ |
| if(this.isSource){ |
| this._changeState("Source",this==_11?(_13?"Copied":"Moved"):""); |
| } |
| var _14=this.checkAcceptance(_11,_12); |
| this._changeState("Target",_14?"":"Disabled"); |
| if(this==_11){ |
| dojo.dnd.manager().overSource(this); |
| } |
| this.isDragging=true; |
| },itemCreator:function(_15,_16,_17){ |
| return dojo.map(_15,function(_18){ |
| return {"id":_18.id,"name":_18.textContent||_18.innerText||""}; |
| }); |
| },onDndDrop:function(_19,_1a,_1b){ |
| if(this.containerState=="Over"){ |
| var _1c=this.tree,_1d=_1c.model,_1e=this.targetAnchor,_1f=false; |
| this.isDragging=false; |
| var _20=dijit.getEnclosingWidget(_1e); |
| var _21; |
| var _22; |
| _21=(_20&&_20.item)||_1c.item; |
| if(this.dropPosition=="Before"||this.dropPosition=="After"){ |
| _21=(_20.getParent()&&_20.getParent().item)||_1c.item; |
| _22=_20.getIndexInParent(); |
| if(this.dropPosition=="After"){ |
| _22=_20.getIndexInParent()+1; |
| } |
| }else{ |
| _21=(_20&&_20.item)||_1c.item; |
| } |
| var _23; |
| dojo.forEach(_1a,function(_24,idx){ |
| var _25=_19.getItem(_24.id); |
| if(dojo.indexOf(_25.type,"treeNode")!=-1){ |
| var _26=_25.data,_27=_26.item,_28=_26.getParent().item; |
| } |
| if(_19==this){ |
| if(typeof _22=="number"){ |
| if(_21==_28&&_26.getIndexInParent()<_22){ |
| _22-=1; |
| } |
| } |
| _1d.pasteItem(_27,_28,_21,_1b,_22); |
| }else{ |
| if(_1d.isItem(_27)){ |
| _1d.pasteItem(_27,_28,_21,_1b,_22); |
| }else{ |
| if(!_23){ |
| _23=this.itemCreator(_1a,_1e,_19); |
| } |
| _1d.newItem(_23[idx],_21,_22); |
| } |
| } |
| },this); |
| this.tree._expandNode(_20); |
| } |
| this.onDndCancel(); |
| },onDndCancel:function(){ |
| this._unmarkTargetAnchor(); |
| this.isDragging=false; |
| this.mouseDown=false; |
| delete this.mouseButton; |
| this._changeState("Source",""); |
| this._changeState("Target",""); |
| },onOverEvent:function(){ |
| this.inherited(arguments); |
| dojo.dnd.manager().overSource(this); |
| },onOutEvent:function(){ |
| this._unmarkTargetAnchor(); |
| var m=dojo.dnd.manager(); |
| if(this.isDragging){ |
| m.canDrop(false); |
| } |
| m.outSource(this); |
| this.inherited(arguments); |
| },_isParentChildDrop:function(_29,_2a){ |
| if(!_29.tree||_29.tree!=this.tree){ |
| return false; |
| } |
| var _2b=_29.tree.domNode; |
| var ids={}; |
| for(var x in _29.selection){ |
| ids[_29.selection[x].parentNode.id]=true; |
| } |
| var _2c=_2a.parentNode; |
| while(_2c!=_2b&&(!_2c.id||!ids[_2c.id])){ |
| _2c=_2c.parentNode; |
| } |
| return _2c.id&&ids[_2c.id]; |
| },_unmarkTargetAnchor:function(){ |
| if(!this.targetAnchor){ |
| return; |
| } |
| this._removeItemClass(this.targetAnchor,this.dropPosition); |
| this.targetAnchor=null; |
| this.targetBox=null; |
| this.dropPosition=null; |
| },_markDndStatus:function(_2d){ |
| this._changeState("Source",_2d?"Copied":"Moved"); |
| }}); |
| } |