File: ctdldragdrop.js

package info (click to toggle)
webcit 902-dfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 8,888 kB
  • ctags: 3,854
  • sloc: ansic: 34,145; sh: 4,455; makefile: 352; xml: 91; sed: 9
file content (83 lines) | stat: -rw-r--r-- 2,599 bytes parent folder | download | duplicates (5)
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
74
75
76
77
78
79
80
81
82
83
/** 
 * Because scriptaculous DnD sucks..
 * Written by Mathew McBride <matt@mcbridematt.dhs.org> / <matt@comalies>
 * 
 * Copyright 2009 The Citadel Team
 * Licensed under the GPL V3
 */
var draggedElement = null;
var currentDropTargets = null;
var dropTarget = null;
var dragAndDropElement = null;
var oldSelectHandler = null;
function mouseDownHandler(event) {
  var target = event.target;
  var actualTarget = target;
  if (target.nodeName.toLowerCase() == "td") {
    actualTarget = target.parentNode;
  }
  if (!actualTarget.dropEnabled && actualTarget.getAttribute("citadel:dropenabled") == null) {
    return;
  }
  turnOffTextSelect();
  draggedElement = actualTarget;
  return false;
}
function mouseUpHandler(event) {
  var target = event.target;
  var dropped = dropTarget;
  if (dragAndDropElement != null) {
  if (dropped != null && dropped.dropHandler) {
    dropped.dropHandler(dropped,draggedElement);
  }
  document.body.removeChild(dragAndDropElement);
  }
  dragAndDropElement = null;
  draggedElement = null;
  dropTarget = null;
  turnOnTextSelect();
  return true;
}
function mouseMoveHandler(event) {
  if (draggedElement != null) {
    if (dragAndDropElement == null) {
      var dragAndDropElementFunction = (draggedElement.ctdlDnDElement) ? draggedElement.ctdlDndElement : eval(draggedElement.getAttribute("citadel:dndelement"));
      dragAndDropElement = dragAndDropElementFunction.call();
    dragAndDropElement.className = "draganddrop";
    document.body.appendChild(dragAndDropElement);
    }
    var clientX = event.clientX+5;
    var clientY = event.clientY+5;
    dragAndDropElement.style.top = clientY + "px";
    dragAndDropElement.style.left = clientX + "px";
  }
  return false;
}
function mouseMoveOver(event) {
  if (event.target.dropTarget) {
    dropTarget = event.target;
  }
}
function mouseMoveOut(event) {
  if (dropTarget) {
    dropTarget = null;
  }
}
function setupDragDrop() {
  $(document.body).observe('mousedown', mouseDownHandler);
    $(document.body).observe('mouseup',mouseUpHandler);
    $(document.body).observe('mousemove',mouseMoveHandler);
    $(document.body).observe('mouseover', mouseMoveOver);
    $(document.body).observe('mouseout', mouseMoveOut); 
}
function turnOffTextSelect() {
  document.onmousedown = new Function("return false");
  document.onmouseup = new Function("return true");
 oldSelectHandler = document.onselectstart;
 document.onselectstart = function() { return false; };
}
function turnOnTextSelect() {
  document.onmousedown = null;
  document.onmouseup = null;
  document.onselectstart = oldSelectHandler;
}