summaryrefslogtreecommitdiff
path: root/includes/js/dojox/grid/_grid/drag.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/grid/_grid/drag.js')
-rw-r--r--includes/js/dojox/grid/_grid/drag.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/includes/js/dojox/grid/_grid/drag.js b/includes/js/dojox/grid/_grid/drag.js
new file mode 100644
index 0000000..df086f9
--- /dev/null
+++ b/includes/js/dojox/grid/_grid/drag.js
@@ -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
+
+}