]>
git.wh0rd.org - tt-rss.git/blob - lib/dojo/dnd/Moveable.js.uncompressed.js
1 define("dojo/dnd/Moveable", ["../main", "../Evented", "../touch", "./Mover"], function(dojo
, Evented
, touch
) {
9 dojo.declare("dojo.dnd.__MoveableArgs", [], {
10 // handle: Node||String
11 // A node (or node's id), which is used as a mouse handle.
12 // If omitted, the node itself is used as a handle.
16 // delay move by this number of pixels
20 // skip move of form elements
24 // a constructor of custom Mover
29 dojo
.declare("dojo.dnd.Moveable", [Evented
], {
30 // object attributes (for markup)
35 constructor: function(node
, params
){
37 // an object, which makes a node moveable
39 // a node (or node's id) to be moved
40 // params: dojo.dnd.__MoveableArgs?
41 // optional parameters
42 this.node
= dojo
.byId(node
);
43 if(!params
){ params
= {}; }
44 this.handle
= params
.handle
? dojo
.byId(params
.handle
) : null;
45 if(!this.handle
){ this.handle
= this.node
; }
46 this.delay
= params
.delay
> 0 ? params
.delay
: 0;
47 this.skip
= params
.skip
;
48 this.mover
= params
.mover
? params
.mover
: dojo
.dnd
.Mover
;
50 dojo
.connect(this.handle
, touch
.press
, this, "onMouseDown"),
51 // cancel text selection and text dragging
52 dojo
.connect(this.handle
, "ondragstart", this, "onSelectStart"),
53 dojo
.connect(this.handle
, "onselectstart", this, "onSelectStart")
58 markupFactory: function(params
, node
, ctor
){
59 return new ctor(node
, params
);
65 // stops watching for possible move, deletes all references, so the object can be garbage-collected
66 dojo
.forEach(this.events
, dojo
.disconnect
);
67 this.events
= this.node
= this.handle
= null;
70 // mouse event processors
71 onMouseDown: function(e
){
73 // event processor for onmousedown/ontouchstart, creates a Mover for the node
76 if(this.skip
&& dojo
.dnd
.isFormElement(e
)){ return; }
79 dojo
.connect(this.handle
, touch
.move, this, "onMouseMove"),
80 dojo
.connect(this.handle
, touch
.release
, this, "onMouseUp")
82 this._lastX
= e
.pageX
;
83 this._lastY
= e
.pageY
;
85 this.onDragDetected(e
);
89 onMouseMove: function(e
){
91 // event processor for onmousemove/ontouchmove, used only for delayed drags
94 if(Math
.abs(e
.pageX
- this._lastX
) > this.delay
|| Math
.abs(e
.pageY
- this._lastY
) > this.delay
){
96 this.onDragDetected(e
);
100 onMouseUp: function(e
){
102 // event processor for onmouseup, used only for delayed drags
105 for(var i
= 0; i
< 2; ++i
){
106 dojo
.disconnect(this.events
.pop());
110 onSelectStart: function(e
){
112 // event processor for onselectevent and ondragevent
115 if(!this.skip
|| !dojo
.dnd
.isFormElement(e
)){
121 onDragDetected: function(/* Event */ e
){
123 // called when the drag is detected;
124 // responsible for creation of the mover
125 new this.mover(this.node
, e
, this);
127 onMoveStart: function(/* dojo.dnd.Mover */ mover
){
129 // called before every move operation
130 dojo
.publish("/dnd/move/start", [mover
]);
131 dojo
.addClass(dojo
.body(), "dojoMove");
132 dojo
.addClass(this.node
, "dojoMoveItem");
134 onMoveStop: function(/* dojo.dnd.Mover */ mover
){
136 // called after every move operation
137 dojo
.publish("/dnd/move/stop", [mover
]);
138 dojo
.removeClass(dojo
.body(), "dojoMove");
139 dojo
.removeClass(this.node
, "dojoMoveItem");
141 onFirstMove: function(/* dojo.dnd.Mover */ mover
, /* Event */ e
){
143 // called during the very first move notification;
144 // can be used to initialize coordinates, can be overwritten.
146 // default implementation does nothing
148 onMove: function(/* dojo.dnd.Mover */ mover
, /* Object */ leftTop
, /* Event */ e
){
150 // called during every move notification;
151 // should actually move the node; can be overwritten.
152 this.onMoving(mover
, leftTop
);
153 var s
= mover
.node
.style
;
154 s
.left
= leftTop
.l
+ "px";
155 s
.top
= leftTop
.t
+ "px";
156 this.onMoved(mover
, leftTop
);
158 onMoving: function(/* dojo.dnd.Mover */ mover
, /* Object */ leftTop
){
160 // called before every incremental move; can be overwritten.
162 // default implementation does nothing
164 onMoved: function(/* dojo.dnd.Mover */ mover
, /* Object */ leftTop
){
166 // called after every incremental move; can be overwritten.
168 // default implementation does nothing
172 return dojo
.dnd
.Moveable
;