| 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 } |