liquid_feedback_frontend

diff static/js/dragdrop.js @ 5:afd9f769c7ae

Version beta1

Final voting with Schulze-Method is now possible

Many bug fixes and code cleanup

Registration with invite codes

More sort and filter options

Seperated display of "supporters" and "potential supporters"

Optical changes

Flood limit / initiative contigent is now checked by frontend

Neccessary changes to access core beta11
author bsw/jbe
date Fri Dec 25 12:00:00 2009 +0100 (2009-12-25)
parents
children 8d91bccab0bf
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/static/js/dragdrop.js	Fri Dec 25 12:00:00 2009 +0100
     1.3 @@ -0,0 +1,73 @@
     1.4 +window.addEventListener("load", function(event) {
     1.5 +  var originalElement;
     1.6 +  var draggedElement;
     1.7 +  var mouseX;
     1.8 +  var mouseY;
     1.9 +  var mouseOffsetX;
    1.10 +  var mouseOffsetY;
    1.11 +  var elementOffsetX;
    1.12 +  var elementOffsetY;
    1.13 +  var dropFunc;
    1.14 +  var dragElement = function(element, func) {
    1.15 +    //if (typeof(element) == "string") element = document.getElementById(element);
    1.16 +    originalElement = element;
    1.17 +    draggedElement = originalElement.cloneNode(true);
    1.18 +    originalElement.style.visibility = "hidden";
    1.19 +    draggedElement.style.margin = 0;
    1.20 +    draggedElement.style.position = "absolute";
    1.21 +    draggedElement.style.left = elementOffsetX = originalElement.offsetLeft;
    1.22 +    draggedElement.style.top  = elementOffsetY = originalElement.offsetTop;
    1.23 +    draggedElement.style.width  = originalElement.clientWidth;
    1.24 +    draggedElement.style.height = originalElement.clientHeight;
    1.25 +    draggedElement.style.backgroundColor = "#eee";
    1.26 +    draggedElement.style.opacity = 0.8;
    1.27 +    originalElement.offsetParent.appendChild(draggedElement);
    1.28 +    // workaround for wrong clientWidth and clientHeight information:
    1.29 +    draggedElement.style.width = 2*originalElement.clientWidth - draggedElement.clientWidth;
    1.30 +    draggedElement.style.height = 2*originalElement.clientHeight - draggedElement.clientHeight;
    1.31 +    mouseOffsetX = mouseX;
    1.32 +    mouseOffsetY = mouseY;
    1.33 +    dropFunc = func;
    1.34 +  };
    1.35 +  window.addEventListener("mousemove", function(event) {
    1.36 +    mouseX = event.pageX;
    1.37 +    mouseY = event.pageY;
    1.38 +    if (draggedElement) {
    1.39 +      draggedElement.style.left = elementOffsetX + mouseX - mouseOffsetX;
    1.40 +      draggedElement.style.top  = elementOffsetY + mouseY - mouseOffsetY;
    1.41 +    }
    1.42 +  }, true);
    1.43 +  var mouseDrop = function(event) {
    1.44 +    if (draggedElement) {
    1.45 +      dropFunc(
    1.46 +        originalElement,
    1.47 +        elementOffsetX + mouseX - mouseOffsetX,
    1.48 +        elementOffsetY + mouseY - mouseOffsetY
    1.49 +      );
    1.50 +      originalElement.style.visibility = '';
    1.51 +      draggedElement.parentNode.removeChild(draggedElement);
    1.52 +      originalElement = null;
    1.53 +      draggedElement = null;
    1.54 +    }
    1.55 +  };
    1.56 +  window.addEventListener("mouseup",   mouseDrop, true);
    1.57 +  window.addEventListener("mousedown", mouseDrop, true);
    1.58 +  var elements = document.getElementsByTagName("*");
    1.59 +  for (var i=0; i<elements.length; i++) {
    1.60 +    var element = elements[i];
    1.61 +    if (element.className == "movable") {
    1.62 +      element.addEventListener("mousedown", function(event) {
    1.63 +        event.target.style.cursor = "move";
    1.64 +        dragElement(event.currentTarget, function(element, dropX, dropY) {
    1.65 +          event.target.style.cursor = null;
    1.66 +          elementDropped(element, dropX, dropY);
    1.67 +        });
    1.68 +        event.preventDefault();
    1.69 +      }, false);
    1.70 +    } else if (element.className == "clickable") {
    1.71 +      element.addEventListener("mousedown", function(event) {
    1.72 +        event.stopPropagation();
    1.73 +      }, false);
    1.74 +    }
    1.75 +  }
    1.76 +}, false);

Impressum / About Us