d7c435e1b488d089912ed958d79b366b3dbceec0
[citadel.git] / webcit / static / ctdldragdrop.js
1 /** Because scriptaculous DnD sucks..
2     Written by Mathew McBride <matt@mcbridematt.dhs.org> / <matt@comalies>
3 */
4 var draggedElement = null;
5 var currentDropTargets = null;
6 var dropTarget = null;
7 var dragAndDropElement = null;
8
9 function mouseDownHandler(event) {
10   var target = event.target;
11   var actualTarget = target;
12   if (target.nodeName.toLowerCase() == "td") {
13     actualTarget = target.parentNode;
14   }
15   if (!actualTarget.dropEnabled) {
16     return;
17   }
18   turnOffTextSelect();
19   draggedElement = actualTarget;
20   return false;
21 }
22 function mouseUpHandler(event) {
23   var target = event.target;
24   var dropped = dropTarget;
25   if (dragAndDropElement != null) {
26   if (dropped != null && dropped.dropHandler) {
27     dropped.dropHandler(dropped,draggedElement);
28   }
29   document.body.removeChild(dragAndDropElement);
30   }
31   dragAndDropElement = null;
32   draggedElement = null;
33   dropTarget = null;
34   turnOnTextSelect();
35   return true;
36 }
37 function mouseMoveHandler(event) {
38   if (draggedElement != null) {
39     if (dragAndDropElement == null) {
40     dragAndDropElement = draggedElement.ctdlDnDElement();
41     dragAndDropElement.setAttribute("class", "draganddrop");
42     document.body.appendChild(dragAndDropElement);
43     }
44     var clientX = event.clientX+5;
45     var clientY = event.clientY+5;
46     dragAndDropElement.style.top = clientY + "px";
47     dragAndDropElement.style.left = clientX + "px";
48   }
49   return false;
50 }
51 function mouseMoveOver(event) {
52   if (event.target.dropTarget) {
53     dropTarget = event.target;
54   }
55 }
56 function mouseMoveOut(event) {
57   if (dropTarget) {
58     dropTarget = null;
59   }
60 }
61 document.observe("dom:loaded", setupDragDrop);
62 function setupDragDrop() {
63 if (document.addEventListener != undefined) {
64      $(document.body).observe('mousedown', mouseDownHandler);
65     $(document.body).observe('mouseup',mouseUpHandler);
66     $(document.body).observe('mousemove',mouseMoveHandler);
67     $(document.body).observe('mouseover', mouseMoveOver);
68     $(document.body).observe('mouseout', mouseMoveOut);
69     } 
70 }
71 function turnOffTextSelect() {
72   document.onmousedown = new Function("return false");
73 document.onmouseup = new Function("return true");
74 }
75 function turnOnTextSelect() {
76   document.onmousedown = null;
77   document.onmouseup = null;
78 }