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