Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / mdnd / adapter / DndToDojo.js @ 13

History | View | Annotate | Download (8.95 KB)

1 9 andrej.cim
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6
7
8
if(!dojo._hasResource["dojox.mdnd.adapter.DndToDojo"]){
9
dojo._hasResource["dojox.mdnd.adapter.DndToDojo"]=true;
10
dojo.provide("dojox.mdnd.adapter.DndToDojo");
11
dojo.require("dojox.mdnd.PureSource");
12
dojo.require("dojox.mdnd.LazyManager");
13
dojo.declare("dojox.mdnd.adapter.DndToDojo",null,{_dojoList:null,_currentDojoArea:null,_dojoxManager:null,_dragStartHandler:null,_dropHandler:null,_moveHandler:null,_moveUpHandler:null,_draggedNode:null,constructor:function(){
14
this._dojoList=[];
15
this._currentDojoArea=null;
16
this._dojoxManager=dojox.mdnd.areaManager();
17
this._dragStartHandler=dojo.subscribe("/dojox/mdnd/drag/start",this,function(_1,_2,_3){
18
this._draggedNode=_1;
19
this._moveHandler=dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove");
20
});
21
this._dropHandler=dojo.subscribe("/dojox/mdnd/drop",this,function(_4,_5,_6){
22
if(this._currentDojoArea){
23
dojo.publish("/dojox/mdnd/adapter/dndToDojo/cancel",[this._currentDojoArea.node,this._currentDojoArea.type,this._draggedNode,this.accept]);
24
}
25
this._draggedNode=null;
26
this._currentDojoArea=null;
27
dojo.disconnect(this._moveHandler);
28
});
29
},_getIndexDojoArea:function(_7){
30
if(_7){
31
for(var i=0,l=this._dojoList.length;i<l;i++){
32
if(this._dojoList[i].node===_7){
33
return i;
34
}
35
}
36
}
37
return -1;
38
},_initCoordinates:function(_8){
39
if(_8){
40
var _9=dojo.position(_8,true),_a={};
41
_a.x=_9.x;
42
_a.y=_9.y;
43
_a.x1=_9.x+_9.w;
44
_a.y1=_9.y+_9.h;
45
return _a;
46
}
47
return null;
48
},register:function(_b,_c,_d){
49
if(this._getIndexDojoArea(_b)==-1){
50
var _e=this._initCoordinates(_b),_f={"node":_b,"type":_c,"dojo":(_d)?_d:false,"coords":_e};
51
this._dojoList.push(_f);
52
if(_d&&!this._lazyManager){
53
this._lazyManager=new dojox.mdnd.LazyManager();
54
}
55
}
56
},unregisterByNode:function(_10){
57
var _11=this._getIndexDojoArea(_10);
58
if(_11!=-1){
59
this._dojoList.splice(_11,1);
60
}
61
},unregisterByType:function(_12){
62
if(_12){
63
var _13=[];
64
dojo.forEach(this._dojoList,function(_14,i){
65
if(_14.type!=_12){
66
_13.push(_14);
67
}
68
});
69
this._dojoList=_13;
70
}
71
},unregister:function(){
72
this._dojoList=[];
73
},refresh:function(){
74
var _15=this._dojoList;
75
this.unregister();
76
dojo.forEach(_15,function(_16){
77
_16.coords=this._initCoordinates(_16.node);
78
},this);
79
this._dojoList=_15;
80
},refreshByType:function(_17){
81
var _18=this._dojoList;
82
this.unregister();
83
dojo.forEach(_18,function(_19){
84
if(_19.type==_17){
85
_19.coords=this._initCoordinates(_19.node);
86
}
87
},this);
88
this._dojoList=_18;
89
},_getHoverDojoArea:function(_1a){
90
this._oldDojoArea=this._currentDojoArea;
91
this._currentDojoArea=null;
92
var x=_1a.x;
93
var y=_1a.y;
94
var _1b=this._dojoList.length;
95
for(var i=0;i<_1b;i++){
96
var _1c=this._dojoList[i];
97
var _1d=_1c.coords;
98
if(_1d.x<=x&&x<=_1d.x1&&_1d.y<=y&&y<=_1d.y1){
99
this._currentDojoArea=_1c;
100
break;
101
}
102
}
103
},onMouseMove:function(e){
104
var _1e={"x":e.pageX,"y":e.pageY};
105
this._getHoverDojoArea(_1e);
106
if(this._currentDojoArea!=this._oldDojoArea){
107
if(this._currentDojoArea==null){
108
this.onDragExit(e);
109
}else{
110
if(this._oldDojoArea==null){
111
this.onDragEnter(e);
112
}else{
113
this.onDragExit(e);
114
this.onDragEnter(e);
115
}
116
}
117
}
118
},isAccepted:function(_1f,_20){
119
return true;
120
},onDragEnter:function(e){
121
if(this._currentDojoArea.dojo){
122
dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
123
dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
124
dojo.disconnect(this._dojoxManager._dragItem.item.events.pop());
125
dojo.body().removeChild(this._dojoxManager._cover);
126
dojo.body().removeChild(this._dojoxManager._cover2);
127
var _21=this._dojoxManager._dragItem.item.node;
128
if(dojox.mdnd.adapter._dndFromDojo){
129
dojox.mdnd.adapter._dndFromDojo.unsubscribeDnd();
130
}
131
dojo.style(_21,{"position":"relative","top":"0","left":"0"});
132
this._lazyManager.startDrag(e,_21);
133
var _22=dojo.connect(this._lazyManager.manager,"overSource",this,function(){
134
dojo.disconnect(_22);
135
if(this._lazyManager.manager.canDropFlag){
136
this._dojoxManager._dropIndicator.node.style.display="none";
137
}
138
});
139
this.cancelHandler=dojo.subscribe("/dnd/cancel",this,function(){
140
var _23=this._dojoxManager._dragItem.item;
141
_23.events=[dojo.connect(_23.handle,"onmousedown",_23,"onMouseDown")];
142
dojo.body().appendChild(this._dojoxManager._cover);
143
dojo.body().appendChild(this._dojoxManager._cover2);
144
this._dojoxManager._cover.appendChild(_23.node);
145
var _24=this._dojoxManager._areaList[this._dojoxManager._sourceIndexArea];
146
var _25=this._dojoxManager._sourceDropIndex;
147
var _26=null;
148
if(_25!=_24.items.length&&_25!=-1){
149
_26=_24.items[this._dojoxManager._sourceDropIndex].item.node;
150
}
151
if(this._dojoxManager._dropIndicator.node.style.display=="none"){
152
this._dojoxManager._dropIndicator.node.style.display=="";
153
}
154
this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDrag",this._dojoxManager,"onDrag"));
155
this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDragEnd",this._dojoxManager,"onDrop"));
156
this._draggedNode.style.display="";
157
this._dojoxManager.onDrop(this._draggedNode);
158
dojo.unsubscribe(this.cancelHandler);
159
dojo.unsubscribe(this.dropHandler);
160
if(dojox.mdnd.adapter._dndFromDojo){
161
dojox.mdnd.adapter._dndFromDojo.subscribeDnd();
162
}
163
});
164
this.dropHandler=dojo.subscribe("/dnd/drop/before",this,function(_27){
165
dojo.unsubscribe(this.cancelHandler);
166
dojo.unsubscribe(this.dropHandler);
167
this.onDrop();
168
});
169
}else{
170
this.accept=this.isAccepted(this._dojoxManager._dragItem.item.node,this._currentDojoArea);
171
if(this.accept){
172
dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
173
dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
174
this._dojoxManager._dropIndicator.node.style.display="none";
175
if(!this._moveUpHandler){
176
this._moveUpHandler=dojo.connect(dojo.doc,"onmouseup",this,"onDrop");
177
}
178
}
179
}
180
dojo.publish("/dojox/mdnd/adapter/dndToDojo/over",[this._currentDojoArea.node,this._currentDojoArea.type,this._draggedNode,this.accept]);
181
},onDragExit:function(e){
182
if(this._oldDojoArea.dojo){
183
dojo.unsubscribe(this.cancelHandler);
184
dojo.unsubscribe(this.dropHandler);
185
var _28=this._dojoxManager._dragItem.item;
186
this._dojoxManager._dragItem.item.events.push(dojo.connect(_28.node.ownerDocument,"onmousemove",_28,"onMove"));
187
dojo.body().appendChild(this._dojoxManager._cover);
188
dojo.body().appendChild(this._dojoxManager._cover2);
189
this._dojoxManager._cover.appendChild(_28.node);
190
var _29=_28.node.style;
191
_29.position="absolute";
192
_29.left=(_28.offsetDrag.l+e.pageX)+"px";
193
_29.top=(_28.offsetDrag.t+e.pageX)+"px";
194
_29.display="";
195
this._lazyManager.cancelDrag();
196
if(dojox.mdnd.adapter._dndFromDojo){
197
dojox.mdnd.adapter._dndFromDojo.subscribeDnd();
198
}
199
if(this._dojoxManager._dropIndicator.node.style.display=="none"){
200
this._dojoxManager._dropIndicator.node.style.display="";
201
}
202
this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDrag",this._dojoxManager,"onDrag"));
203
this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDragEnd",this._dojoxManager,"onDrop"));
204
this._dojoxManager._dragItem.item.onMove(e);
205
}else{
206
if(this.accept){
207
if(this._moveUpHandler){
208
dojo.disconnect(this._moveUpHandler);
209
this._moveUpHandler=null;
210
}
211
if(this._dojoxManager._dropIndicator.node.style.display=="none"){
212
this._dojoxManager._dropIndicator.node.style.display="";
213
}
214
this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDrag",this._dojoxManager,"onDrag"));
215
this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDragEnd",this._dojoxManager,"onDrop"));
216
this._dojoxManager._dragItem.item.onMove(e);
217
}
218
}
219
dojo.publish("/dojox/mdnd/adapter/dndToDojo/out",[this._oldDojoArea.node,this._oldDojoArea.type,this._draggedNode,this.accept]);
220
},onDrop:function(e){
221
if(this._currentDojoArea.dojo){
222
if(dojox.mdnd.adapter._dndFromDojo){
223
dojox.mdnd.adapter._dndFromDojo.subscribeDnd();
224
}
225
}
226
if(this._dojoxManager._dropIndicator.node.style.display=="none"){
227
this._dojoxManager._dropIndicator.node.style.display="";
228
}
229
if(this._dojoxManager._cover.parentNode&&this._dojoxManager._cover.parentNode.nodeType==1){
230
dojo.body().removeChild(this._dojoxManager._cover);
231
dojo.body().removeChild(this._dojoxManager._cover2);
232
}
233
if(this._draggedNode.parentNode==this._dojoxManager._cover){
234
this._dojoxManager._cover.removeChild(this._draggedNode);
235
}
236
dojo.disconnect(this._moveHandler);
237
dojo.disconnect(this._moveUpHandler);
238
this._moveHandler=this._moveUpHandler=null;
239
dojo.publish("/dojox/mdnd/adapter/dndToDojo/drop",[this._draggedNode,this._currentDojoArea.node,this._currentDojoArea.type]);
240
dojo.removeClass(this._draggedNode,"dragNode");
241
var _2a=this._draggedNode.style;
242
_2a.position="relative";
243
_2a.left="0";
244
_2a.top="0";
245
_2a.width="auto";
246
dojo.forEach(this._dojoxManager._dragItem.handlers,dojo.disconnect);
247
this._dojoxManager._deleteMoveableItem(this._dojoxManager._dragItem);
248
this._draggedNode=null;
249
this._currentDojoArea=null;
250
this._dojoxManager._resetAfterDrop();
251
}});
252
dojox.mdnd.adapter._dndToDojo=null;
253
dojox.mdnd.adapter.dndToDojo=function(){
254
if(!dojox.mdnd.adapter._dndToDojo){
255
dojox.mdnd.adapter._dndToDojo=new dojox.mdnd.adapter.DndToDojo();
256
}
257
return dojox.mdnd.adapter._dndToDojo;
258
};
259
}