]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/grid/_grid/drag.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / grid / _grid / drag.js
diff --git a/static/dojo-release-1.1.1/dojox/grid/_grid/drag.js b/static/dojo-release-1.1.1/dojox/grid/_grid/drag.js
new file mode 100644 (file)
index 0000000..df086f9
--- /dev/null
@@ -0,0 +1,113 @@
+if(!dojo._hasResource["dojox.grid._grid.drag"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._grid.drag"] = true;
+dojo.provide("dojox.grid._grid.drag");
+
+// summary:
+//     utility functions for dragging as used in grid.
+// begin closure
+(function(){
+
+var dgdrag = dojox.grid.drag = {};
+
+dgdrag.dragging = false;
+dgdrag.hysteresis = 2;
+
+dgdrag.capture = function(inElement) {
+       //console.debug('dojox.grid.drag.capture');
+       if (inElement.setCapture)
+               inElement.setCapture();
+       else {
+               document.addEventListener("mousemove", inElement.onmousemove, true);
+               document.addEventListener("mouseup", inElement.onmouseup, true);
+               document.addEventListener("click", inElement.onclick, true);
+       }
+}
+
+dgdrag.release = function(inElement) {
+       //console.debug('dojox.grid.drag.release');
+       if(inElement.releaseCapture){
+               inElement.releaseCapture();
+       }else{
+               document.removeEventListener("click", inElement.onclick, true);
+               document.removeEventListener("mouseup", inElement.onmouseup, true);
+               document.removeEventListener("mousemove", inElement.onmousemove, true);
+       }
+}
+
+dgdrag.start = function(inElement, inOnDrag, inOnEnd, inEvent, inOnStart){
+       if(/*dgdrag.elt ||*/ !inElement || dgdrag.dragging){
+               console.debug('failed to start drag: bad input node or already dragging');
+               return;
+       }
+       dgdrag.dragging = true;
+       dgdrag.elt = inElement;
+       dgdrag.events = {
+               drag: inOnDrag || dojox.grid.nop, 
+               end: inOnEnd || dojox.grid.nop, 
+               start: inOnStart || dojox.grid.nop, 
+               oldmove: inElement.onmousemove, 
+               oldup: inElement.onmouseup, 
+               oldclick: inElement.onclick 
+       };
+       dgdrag.positionX = (inEvent && ('screenX' in inEvent) ? inEvent.screenX : false);
+       dgdrag.positionY = (inEvent && ('screenY' in inEvent) ? inEvent.screenY : false);
+       dgdrag.started = (dgdrag.position === false);
+       inElement.onmousemove = dgdrag.mousemove;
+       inElement.onmouseup = dgdrag.mouseup;
+       inElement.onclick = dgdrag.click;
+       dgdrag.capture(dgdrag.elt);
+}
+
+dgdrag.end = function(){
+       //console.debug("dojox.grid.drag.end");
+       dgdrag.release(dgdrag.elt);
+       dgdrag.elt.onmousemove = dgdrag.events.oldmove;
+       dgdrag.elt.onmouseup = dgdrag.events.oldup;
+       dgdrag.elt.onclick = dgdrag.events.oldclick;
+       dgdrag.elt = null;
+       try{
+               if(dgdrag.started){
+                       dgdrag.events.end();
+               }
+       }finally{
+               dgdrag.dragging = false;
+       }
+}
+
+dgdrag.calcDelta = function(inEvent){
+       inEvent.deltaX = inEvent.screenX - dgdrag.positionX;
+       inEvent.deltaY = inEvent.screenY - dgdrag.positionY;
+}
+
+dgdrag.hasMoved = function(inEvent){
+       return Math.abs(inEvent.deltaX) + Math.abs(inEvent.deltaY) > dgdrag.hysteresis;
+}
+
+dgdrag.mousemove = function(inEvent){
+       inEvent = dojo.fixEvent(inEvent);
+       dojo.stopEvent(inEvent);
+       dgdrag.calcDelta(inEvent);
+       if((!dgdrag.started)&&(dgdrag.hasMoved(inEvent))){
+               dgdrag.events.start(inEvent);
+               dgdrag.started = true;
+       }
+       if(dgdrag.started){
+               dgdrag.events.drag(inEvent);
+       }
+}
+
+dgdrag.mouseup = function(inEvent){
+       //console.debug("dojox.grid.drag.mouseup");
+       dojo.stopEvent(dojo.fixEvent(inEvent));
+       dgdrag.end();
+}
+
+dgdrag.click = function(inEvent){
+       dojo.stopEvent(dojo.fixEvent(inEvent));
+       //dgdrag.end();
+}
+
+})();
+// end closure
+
+}