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