summaryrefslogtreecommitdiff
path: root/lib/dojo/dnd/Source.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dojo/dnd/Source.js')
-rw-r--r--lib/dojo/dnd/Source.js298
1 files changed, 298 insertions, 0 deletions
diff --git a/lib/dojo/dnd/Source.js b/lib/dojo/dnd/Source.js
new file mode 100644
index 000000000..fb05eb048
--- /dev/null
+++ b/lib/dojo/dnd/Source.js
@@ -0,0 +1,298 @@
+/*
+ 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.Source"]){
+dojo._hasResource["dojo.dnd.Source"]=true;
+dojo.provide("dojo.dnd.Source");
+dojo.require("dojo.dnd.Selector");
+dojo.require("dojo.dnd.Manager");
+dojo.declare("dojo.dnd.Source",dojo.dnd.Selector,{isSource:true,horizontal:false,copyOnly:false,selfCopy:false,selfAccept:true,skipForm:false,withHandles:false,autoSync:false,delay:0,accept:["text"],generateText:true,constructor:function(_1,_2){
+dojo.mixin(this,dojo.mixin({},_2));
+var _3=this.accept;
+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.before=true;
+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");
+}
+if(this.horizontal){
+dojo.addClass(this.node,"dojoDndHorizontal");
+}
+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){
+if(this==_4){
+return !this.copyOnly||this.selfAccept;
+}
+for(var i=0;i<_5.length;++i){
+var _6=_4.getItem(_5[i].id).type;
+var _7=false;
+for(var j=0;j<_6.length;++j){
+if(_6[j] in this.accept){
+_7=true;
+break;
+}
+}
+if(!_7){
+return false;
+}
+}
+return true;
+},copyState:function(_8,_9){
+if(_8){
+return true;
+}
+if(arguments.length<2){
+_9=this==dojo.dnd.manager().target;
+}
+if(_9){
+if(this.copyOnly){
+return this.selfCopy;
+}
+}else{
+return this.copyOnly;
+}
+return false;
+},destroy:function(){
+dojo.dnd.Source.superclass.destroy.call(this);
+dojo.forEach(this.topics,dojo.unsubscribe);
+this.targetAnchor=null;
+},markupFactory:function(_a,_b){
+_a._skipStartup=true;
+return new dojo.dnd.Source(_b,_a);
+},onMouseMove:function(e){
+if(this.isDragging&&this.targetState=="Disabled"){
+return;
+}
+dojo.dnd.Source.superclass.onMouseMove.call(this,e);
+var m=dojo.dnd.manager();
+if(!this.isDragging){
+if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay)){
+var _c=this.getSelectedNodes();
+if(_c.length){
+m.startDrag(this,_c,this.copyState(dojo.isCopyKey(e),true));
+}
+}
+}
+if(this.isDragging){
+var _d=false;
+if(this.current){
+if(!this.targetBox||this.targetAnchor!=this.current){
+this.targetBox=dojo.position(this.current,true);
+}
+if(this.horizontal){
+_d=(e.pageX-this.targetBox.x)<(this.targetBox.w/2);
+}else{
+_d=(e.pageY-this.targetBox.y)<(this.targetBox.h/2);
+}
+}
+if(this.current!=this.targetAnchor||_d!=this.before){
+this._markTargetAnchor(_d);
+m.canDrop(!this.current||m.source!=this||!(this.current.id in this.selection));
+}
+}
+},onMouseDown:function(e){
+if(!this.mouseDown&&this._legalMouseDown(e)&&(!this.skipForm||!dojo.dnd.isFormElement(e))){
+this.mouseDown=true;
+this._lastX=e.pageX;
+this._lastY=e.pageY;
+dojo.dnd.Source.superclass.onMouseDown.call(this,e);
+}
+},onMouseUp:function(e){
+if(this.mouseDown){
+this.mouseDown=false;
+dojo.dnd.Source.superclass.onMouseUp.call(this,e);
+}
+},onDndSourceOver:function(_e){
+if(this!=_e){
+this.mouseDown=false;
+if(this.targetAnchor){
+this._unmarkTargetAnchor();
+}
+}else{
+if(this.isDragging){
+var m=dojo.dnd.manager();
+m.canDrop(this.targetState!="Disabled"&&(!this.current||m.source!=this||!(this.current.id in this.selection)));
+}
+}
+},onDndStart:function(_f,_10,_11){
+if(this.autoSync){
+this.sync();
+}
+if(this.isSource){
+this._changeState("Source",this==_f?(_11?"Copied":"Moved"):"");
+}
+var _12=this.accept&&this.checkAcceptance(_f,_10);
+this._changeState("Target",_12?"":"Disabled");
+if(this==_f){
+dojo.dnd.manager().overSource(this);
+}
+this.isDragging=true;
+},onDndDrop:function(_13,_14,_15,_16){
+if(this==_16){
+this.onDrop(_13,_14,_15);
+}
+this.onDndCancel();
+},onDndCancel:function(){
+if(this.targetAnchor){
+this._unmarkTargetAnchor();
+this.targetAnchor=null;
+}
+this.before=true;
+this.isDragging=false;
+this.mouseDown=false;
+this._changeState("Source","");
+this._changeState("Target","");
+},onDrop:function(_17,_18,_19){
+if(this!=_17){
+this.onDropExternal(_17,_18,_19);
+}else{
+this.onDropInternal(_18,_19);
+}
+},onDropExternal:function(_1a,_1b,_1c){
+var _1d=this._normalizedCreator;
+if(this.creator){
+this._normalizedCreator=function(_1e,_1f){
+return _1d.call(this,_1a.getItem(_1e.id).data,_1f);
+};
+}else{
+if(_1c){
+this._normalizedCreator=function(_20,_21){
+var t=_1a.getItem(_20.id);
+var n=_20.cloneNode(true);
+n.id=dojo.dnd.getUniqueId();
+return {node:n,data:t.data,type:t.type};
+};
+}else{
+this._normalizedCreator=function(_22,_23){
+var t=_1a.getItem(_22.id);
+_1a.delItem(_22.id);
+return {node:_22,data:t.data,type:t.type};
+};
+}
+}
+this.selectNone();
+if(!_1c&&!this.creator){
+_1a.selectNone();
+}
+this.insertNodes(true,_1b,this.before,this.current);
+if(!_1c&&this.creator){
+_1a.deleteSelectedNodes();
+}
+this._normalizedCreator=_1d;
+},onDropInternal:function(_24,_25){
+var _26=this._normalizedCreator;
+if(this.current&&this.current.id in this.selection){
+return;
+}
+if(_25){
+if(this.creator){
+this._normalizedCreator=function(_27,_28){
+return _26.call(this,this.getItem(_27.id).data,_28);
+};
+}else{
+this._normalizedCreator=function(_29,_2a){
+var t=this.getItem(_29.id);
+var n=_29.cloneNode(true);
+n.id=dojo.dnd.getUniqueId();
+return {node:n,data:t.data,type:t.type};
+};
+}
+}else{
+if(!this.current){
+return;
+}
+this._normalizedCreator=function(_2b,_2c){
+var t=this.getItem(_2b.id);
+return {node:_2b,data:t.data,type:t.type};
+};
+}
+this._removeSelection();
+this.insertNodes(true,_24,this.before,this.current);
+this._normalizedCreator=_26;
+},onDraggingOver:function(){
+},onDraggingOut:function(){
+},onOverEvent:function(){
+dojo.dnd.Source.superclass.onOverEvent.call(this);
+dojo.dnd.manager().overSource(this);
+if(this.isDragging&&this.targetState!="Disabled"){
+this.onDraggingOver();
+}
+},onOutEvent:function(){
+dojo.dnd.Source.superclass.onOutEvent.call(this);
+dojo.dnd.manager().outSource(this);
+if(this.isDragging&&this.targetState!="Disabled"){
+this.onDraggingOut();
+}
+},_markTargetAnchor:function(_2d){
+if(this.current==this.targetAnchor&&this.before==_2d){
+return;
+}
+if(this.targetAnchor){
+this._removeItemClass(this.targetAnchor,this.before?"Before":"After");
+}
+this.targetAnchor=this.current;
+this.targetBox=null;
+this.before=_2d;
+if(this.targetAnchor){
+this._addItemClass(this.targetAnchor,this.before?"Before":"After");
+}
+},_unmarkTargetAnchor:function(){
+if(!this.targetAnchor){
+return;
+}
+this._removeItemClass(this.targetAnchor,this.before?"Before":"After");
+this.targetAnchor=null;
+this.targetBox=null;
+this.before=true;
+},_markDndStatus:function(_2e){
+this._changeState("Source",_2e?"Copied":"Moved");
+},_legalMouseDown:function(e){
+if(!dojo.mouseButtons.isLeft(e)){
+return false;
+}
+if(!this.withHandles){
+return true;
+}
+for(var _2f=e.target;_2f&&_2f!==this.node;_2f=_2f.parentNode){
+if(dojo.hasClass(_2f,"dojoDndHandle")){
+return true;
+}
+if(dojo.hasClass(_2f,"dojoDndItem")||dojo.hasClass(_2f,"dojoDndIgnore")){
+break;
+}
+}
+return false;
+}});
+dojo.declare("dojo.dnd.Target",dojo.dnd.Source,{constructor:function(_30,_31){
+this.isSource=false;
+dojo.removeClass(this.node,"dojoDndSource");
+},markupFactory:function(_32,_33){
+_32._skipStartup=true;
+return new dojo.dnd.Target(_33,_32);
+}});
+dojo.declare("dojo.dnd.AutoSource",dojo.dnd.Source,{constructor:function(_34,_35){
+this.autoSync=true;
+},markupFactory:function(_36,_37){
+_36._skipStartup=true;
+return new dojo.dnd.AutoSource(_37,_36);
+}});
+}