]>
git.wh0rd.org - tt-rss.git/blob - lib/dojo/dnd/Moveable.js.uncompressed.js
1 define("dojo/dnd/Moveable", [
2 "../_base/array", "../_base/declare", "../_base/event", "../_base/lang",
3 "../dom", "../dom-class", "../Evented", "../on", "../topic", "../touch", "./common", "./Mover", "../_base/window"
4 ], function(array
, declare
, event
, lang
, dom
, domClass
, Evented
, on
, topic
, touch
, dnd
, Mover
, win
){
10 var Moveable
= declare("dojo.dnd.Moveable", [Evented
], {
12 // an object, which makes a node movable
14 // object attributes (for markup)
19 constructor: function(node
, params
){
21 // a node (or node's id) to be moved
22 // params: Moveable.__MoveableArgs?
23 // optional parameters
24 this.node
= dom
.byId(node
);
25 if(!params
){ params
= {}; }
26 this.handle
= params
.handle
? dom
.byId(params
.handle
) : null;
27 if(!this.handle
){ this.handle
= this.node
; }
28 this.delay
= params
.delay
> 0 ? params
.delay
: 0;
29 this.skip
= params
.skip
;
30 this.mover
= params
.mover
? params
.mover
: Mover
;
32 on(this.handle
, touch
.press
, lang
.hitch(this, "onMouseDown")),
33 // cancel text selection and text dragging
34 on(this.handle
, "dragstart", lang
.hitch(this, "onSelectStart")),
35 on(this.handle
, "selectstart", lang
.hitch(this, "onSelectStart"))
40 markupFactory: function(params
, node
, Ctor
){
41 return new Ctor(node
, params
);
47 // stops watching for possible move, deletes all references, so the object can be garbage-collected
48 array
.forEach(this.events
, function(handle
){ handle
.remove(); });
49 this.events
= this.node
= this.handle
= null;
52 // mouse event processors
53 onMouseDown: function(e
){
55 // event processor for onmousedown/ontouchstart, creates a Mover for the node
58 if(this.skip
&& dnd
.isFormElement(e
)){ return; }
61 on(this.handle
, touch
.move, lang
.hitch(this, "onMouseMove")),
62 on(this.handle
, touch
.release
, lang
.hitch(this, "onMouseUp"))
64 this._lastX
= e
.pageX
;
65 this._lastY
= e
.pageY
;
67 this.onDragDetected(e
);
71 onMouseMove: function(e
){
73 // event processor for onmousemove/ontouchmove, used only for delayed drags
76 if(Math
.abs(e
.pageX
- this._lastX
) > this.delay
|| Math
.abs(e
.pageY
- this._lastY
) > this.delay
){
78 this.onDragDetected(e
);
82 onMouseUp: function(e
){
84 // event processor for onmouseup, used only for delayed drags
87 for(var i
= 0; i
< 2; ++i
){
88 this.events
.pop().remove();
92 onSelectStart: function(e
){
94 // event processor for onselectevent and ondragevent
97 if(!this.skip
|| !dnd
.isFormElement(e
)){
103 onDragDetected: function(/*Event*/ e
){
105 // called when the drag is detected;
106 // responsible for creation of the mover
107 new this.mover(this.node
, e
, this);
109 onMoveStart: function(/*Mover*/ mover
){
111 // called before every move operation
112 topic
.publish("/dnd/move/start", mover
);
113 domClass
.add(win
.body(), "dojoMove");
114 domClass
.add(this.node
, "dojoMoveItem");
116 onMoveStop: function(/*Mover*/ mover
){
118 // called after every move operation
119 topic
.publish("/dnd/move/stop", mover
);
120 domClass
.remove(win
.body(), "dojoMove");
121 domClass
.remove(this.node
, "dojoMoveItem");
123 onFirstMove: function(/*===== mover, e =====*/){
125 // called during the very first move notification;
126 // can be used to initialize coordinates, can be overwritten.
130 // default implementation does nothing
132 onMove: function(mover
, leftTop
/*=====, e =====*/){
134 // called during every move notification;
135 // should actually move the node; can be overwritten.
139 this.onMoving(mover
, leftTop
);
140 var s
= mover
.node
.style
;
141 s
.left
= leftTop
.l
+ "px";
142 s
.top
= leftTop
.t
+ "px";
143 this.onMoved(mover
, leftTop
);
145 onMoving: function(/*===== mover, leftTop =====*/){
147 // called before every incremental move; can be overwritten.
151 // default implementation does nothing
153 onMoved: function(/*===== mover, leftTop =====*/){
155 // called after every incremental move; can be overwritten.
159 // default implementation does nothing
164 Moveable.__MoveableArgs = declare([], {
165 // handle: Node||String
166 // A node (or node's id), which is used as a mouse handle.
167 // If omitted, the node itself is used as a handle.
171 // delay move by this number of pixels
175 // skip move of form elements
179 // a constructor of custom Mover