forked from kangax/protolicious
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdraghelper.js
73 lines (60 loc) · 1.7 KB
/
draghelper.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
* Simplified version of a UI.DragHelper
* http://svn.prototype-ui.com/public/prototype-ui/trunk/src/util/drag.js
*
*/
(function() {
var initPointer, currentDraggable, dragging;
document.observe('mousedown', onMousedown);
function onMousedown(event) {
var draggable = event.findElement('[ui:draggable="true"]');
if (draggable) {
// prevent default browser action
event.stop();
currentDraggable = draggable;
initPointer = event.pointer();
document.observe("mousemove", onMousemove)
.observe("mouseup", onMouseup);
}
};
function onMousemove(event) {
event.stop();
if (dragging)
fire('drag:updated', event);
else {
dragging = true;
fire('drag:started', event);
}
};
function onMouseup(event) {
document.stopObserving('mousemove', onMousemove)
.stopObserving('mouseup', onMouseup);
if (dragging) {
dragging = false;
fire('drag:ended', event);
}
};
function fire(eventName, mouseEvent) {
var pointer = mouseEvent.pointer();
currentDraggable.fire(eventName, {
dx: pointer.x - initPointer.x,
dy: pointer.y - initPointer.y,
mouseEvent: mouseEvent
})
};
Element.addMethods({
enableDrag: function(element) {
element = $(element);
element.writeAttribute('ui:draggable', 'true');
return element;
},
disableDrag: function(element){
element = $(element);
element.writeAttribute('ui:draggable', null);
return element;
},
isDraggable: function(element) {
return $(element).readAttribute('ui:draggable') == 'true';
}
});
})();