rev |
line source |
bsw@519
|
1 if (!jsFail) {
|
bsw@519
|
2 window.addEventListener("load", function(event) {
|
bsw@519
|
3 var originalElement;
|
bsw@519
|
4 var draggedElement;
|
bsw@519
|
5 var mouseX;
|
bsw@519
|
6 var mouseY;
|
bsw@519
|
7 var mouseOffsetX;
|
bsw@519
|
8 var mouseOffsetY;
|
bsw@519
|
9 var elementOffsetX;
|
bsw@519
|
10 var elementOffsetY;
|
bsw@519
|
11 var dropFunc;
|
bsw@519
|
12 var dragElement = function(element, func) {
|
bsw@519
|
13 //if (typeof(element) == "string") element = document.getElementById(element);
|
bsw@519
|
14 originalElement = element;
|
bsw@519
|
15 draggedElement = originalElement.cloneNode(true);
|
bsw@519
|
16 originalElement.style.visibility = "hidden";
|
bsw@519
|
17 draggedElement.style.margin = 0;
|
bsw@519
|
18 draggedElement.style.position = "absolute";
|
bsw@519
|
19 draggedElement.style.left = elementOffsetX = originalElement.offsetLeft;
|
bsw@519
|
20 draggedElement.style.top = elementOffsetY = originalElement.offsetTop;
|
bsw@519
|
21 draggedElement.style.width = originalElement.clientWidth;
|
bsw@519
|
22 draggedElement.style.height = originalElement.clientHeight;
|
bsw@519
|
23 draggedElement.style.backgroundColor = "#eee";
|
bsw@519
|
24 draggedElement.style.opacity = 0.8;
|
bsw@519
|
25 originalElement.offsetParent.appendChild(draggedElement);
|
bsw@519
|
26 // workaround for wrong clientWidth and clientHeight information:
|
bsw@519
|
27 draggedElement.style.width = 2*originalElement.clientWidth - draggedElement.clientWidth;
|
bsw@519
|
28 draggedElement.style.height = 2*originalElement.clientHeight - draggedElement.clientHeight;
|
bsw@519
|
29 mouseOffsetX = mouseX;
|
bsw@519
|
30 mouseOffsetY = mouseY;
|
bsw@519
|
31 dropFunc = func;
|
bsw@519
|
32 };
|
bsw@519
|
33 window.addEventListener("mousemove", function(event) {
|
bsw@519
|
34 mouseX = event.pageX;
|
bsw@519
|
35 mouseY = event.pageY;
|
bsw@519
|
36 if (draggedElement) {
|
bsw@519
|
37 draggedElement.style.left = elementOffsetX + mouseX - mouseOffsetX;
|
bsw@519
|
38 draggedElement.style.top = elementOffsetY + mouseY - mouseOffsetY;
|
bsw@519
|
39 }
|
bsw@519
|
40 }, true);
|
bsw@519
|
41 var mouseDrop = function(event) {
|
bsw@519
|
42 if (draggedElement) {
|
bsw@519
|
43 dropFunc(
|
bsw@519
|
44 originalElement,
|
bsw@519
|
45 elementOffsetX + mouseX - mouseOffsetX,
|
bsw@519
|
46 elementOffsetY + mouseY - mouseOffsetY
|
bsw@519
|
47 );
|
bsw@519
|
48 originalElement.style.visibility = '';
|
bsw@519
|
49 draggedElement.parentNode.removeChild(draggedElement);
|
bsw@519
|
50 originalElement = null;
|
bsw@519
|
51 draggedElement = null;
|
bsw@519
|
52 }
|
bsw@519
|
53 };
|
bsw@519
|
54 window.addEventListener("mouseup", mouseDrop, true);
|
bsw@519
|
55 window.addEventListener("mousedown", mouseDrop, true);
|
bsw@519
|
56 var elements = document.getElementsByTagName("*");
|
bsw@519
|
57 for (var i=0; i<elements.length; i++) {
|
bsw@519
|
58 var element = elements[i];
|
bsw@519
|
59 if (element.className == "movable") {
|
bsw@519
|
60 element.addEventListener("mousedown", function(event) {
|
bsw@519
|
61 event.target.style.cursor = "move";
|
bsw@519
|
62 dragElement(event.currentTarget, function(element, dropX, dropY) {
|
bsw@519
|
63 event.target.style.cursor = '';
|
bsw@519
|
64 elementDropped(element, dropX, dropY);
|
bsw@519
|
65 });
|
bsw@519
|
66 event.preventDefault();
|
bsw@519
|
67 }, false);
|
bsw@519
|
68 } else if (element.className == "clickable") {
|
bsw@519
|
69 element.addEventListener("mousedown", function(event) {
|
bsw@519
|
70 event.stopPropagation();
|
bsw@519
|
71 }, false);
|
bsw@519
|
72 }
|
bsw/jbe@5
|
73 }
|
bsw@519
|
74 }, false);
|
bsw@519
|
75
|
bsw@519
|
76 } |