2 * Because scriptaculous DnD sucks..
3 * Written by Mathew McBride <matt@mcbridematt.dhs.org> / <matt@comalies>
5 * Copyright 2009 The Citadel Team
6 * Licensed under the GPL V3
8 var draggedElement = null;
9 var currentDropTargets = null;
10 var dropTarget = null;
11 var dragAndDropElement = null;
12 var oldSelectHandler = null;
13 function mouseDownHandler(event) {
14 var target = event.target;
15 var actualTarget = target;
16 if (target.nodeName.toLowerCase() == "td") {
17 actualTarget = target.parentNode;
19 if (!actualTarget.dropEnabled && actualTarget.getAttribute("citadel:dropenabled") == null) {
23 draggedElement = actualTarget;
26 function mouseUpHandler(event) {
27 var target = event.target;
28 var dropped = dropTarget;
29 if (dragAndDropElement != null) {
30 if (dropped != null && dropped.dropHandler) {
31 dropped.dropHandler(dropped,draggedElement);
33 document.body.removeChild(dragAndDropElement);
35 dragAndDropElement = null;
36 draggedElement = null;
41 function mouseMoveHandler(event) {
42 if (draggedElement != null) {
43 if (dragAndDropElement == null) {
44 var dragAndDropElementFunction = (draggedElement.ctdlDnDElement) ? draggedElement.ctdlDndElement : eval(draggedElement.getAttribute("citadel:dndelement"));
45 dragAndDropElement = dragAndDropElementFunction.call();
46 dragAndDropElement.className = "draganddrop";
47 document.body.appendChild(dragAndDropElement);
49 var clientX = event.clientX+5;
50 var clientY = event.clientY+5;
51 dragAndDropElement.style.top = clientY + "px";
52 dragAndDropElement.style.left = clientX + "px";
56 function mouseMoveOver(event) {
57 if (event.target.dropTarget) {
58 dropTarget = event.target;
61 function mouseMoveOut(event) {
66 function setupDragDrop() {
67 $(document.body).observe('mousedown', mouseDownHandler);
68 $(document.body).observe('mouseup',mouseUpHandler);
69 $(document.body).observe('mousemove',mouseMoveHandler);
70 $(document.body).observe('mouseover', mouseMoveOver);
71 $(document.body).observe('mouseout', mouseMoveOut);
73 function turnOffTextSelect() {
74 document.onmousedown = new Function("return false");
75 document.onmouseup = new Function("return true");
76 oldSelectHandler = document.onselectstart;
77 document.onselectstart = function() { return false; };
79 function turnOnTextSelect() {
80 document.onmousedown = null;
81 document.onmouseup = null;
82 document.onselectstart = oldSelectHandler;