X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=auto_tests%2Ftests%2FDygraphOps.js;h=4dae18e2ec781d19d6394ee7183249e694d0334f;hb=21c079e5c7761be8a0fb1e2d6a4d6ada57fae3a1;hp=3bd3c4417ea5a1a86e80f49c429da6e41950af85;hpb=718ad8e231f9f83b478e814f4f9bf00910ba0da0;p=dygraphs.git diff --git a/auto_tests/tests/DygraphOps.js b/auto_tests/tests/DygraphOps.js index 3bd3c44..4dae18e 100644 --- a/auto_tests/tests/DygraphOps.js +++ b/auto_tests/tests/DygraphOps.js @@ -26,72 +26,166 @@ */ var DygraphOps = {}; -DygraphOps.dispatchDoubleClick = function(g, func) { - var evt = document.createEvent('MouseEvents'); - evt.initMouseEvent( - 'dblclick', - true, true, document.defaultView, - 2, 0, 0, 0, 0, - false, false, false, false, 0, null); - if (func) { - func(evt); - } - g.canvas_.dispatchEvent(evt); +DygraphOps.defaultEvent_ = { + type : '', + canBubble : true, + cancelable : true, + view : document.defaultView, + detail : 0, + screenX : 0, + screenY : 0, + clientX : 0, + clientY : 0, + ctrlKey : false, + altKey : false, + shiftKey : false, + metaKey : false, + button : 0, + relatedTarget : null }; -DygraphOps.dispatchMouseDown = function(g, x, y, func) { - var px = Dygraph.findPosX(g.canvas_); - var py = Dygraph.findPosY(g.canvas_); - - var pageX = px + g.toDomXCoord(x); - var pageY = py + g.toDomYCoord(y); - - var evt = document.createEvent('MouseEvents'); - evt.initMouseEvent( - 'mousedown', - true, true, document.defaultView, - 1, pageX, pageY, pageX, pageY, - false, false, false, false, 0, null); - if (func) { - func(evt); +/** + * Create an event. Sets default event values except for special ones + * overridden by the 'custom' parameter. + * + * @param command the command to create. + * @param custom an associative array of event attributes and their new values. + */ +DygraphOps.createEvent_ = function(command, custom) { + + var copy = function(from, to) { + if (from != null) { + for (var prop in from) { + if(from.hasOwnProperty(prop)) { + to[prop] = from[prop]; + } + } + } } - g.canvas_.dispatchEvent(evt); + + var e = {}; + copy(DygraphOps.defaultEvent_, e); + copy(command, e); + copy(custom, e); + + var event = document.createEvent('MouseEvents'); + event.initMouseEvent( + e.type, + e.canBubble, + e.cancelable, + e.view, + e.detail, + e.screenX, + e.screenY, + e.clientX, + e.clientY, + e.ctrlKey, + e.altKey, + e.shiftKey, + e.metaKey, + e.button, + e.relatedTarget); + return event; +} + +/** + * Dispatch an event onto the graph's canvas. + */ +DygraphOps.dispatchCanvasEvent(g, event) { + g.canvas_.dispatchEvent(event); +} + +DygraphOps.dispatchDoubleClick = function(g, custom) { + var opts = { + type : 'dblclick', + detail : 2 + }; + var event = DygraphOps.createEvent_(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); }; -DygraphOps.dispatchMouseMove = function(g, x, y, func) { - var px = Dygraph.findPosX(g.canvas_); - var py = Dygraph.findPosY(g.canvas_); - - var pageX = px + g.toDomXCoord(x); - var pageY = py + g.toDomYCoord(y); - - var evt = document.createEvent('MouseEvents'); - evt.initMouseEvent( - 'mousemove', - true, true, document.defaultView, - 0, pageX, pageY, pageX, pageY, - false, false, false, false, 0, null); - if (func) { - func(evt); - } - g.canvas_.dispatchEvent(evt); +DygraphOps.dispatchMouseDown_Point = function(g, x, y, custom) { + var pageX = Dygraph.findPosX(g.canvas_) + x; + var pageY = Dygraph.findPosY(g.canvas_) + y; + + var opts = { + type : 'mousedown', + detail : 1, + screenX : pageX, + screenY : pageY, + clientX : pageX, + clientY : pageY, + }; + + var event = DygraphOps.createEvent_(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); +} + +DygraphOps.dispatchMouseMove_Point = function(g, x, y, custom) { + var pageX = Dygraph.findPosX(g.canvas_) + x; + var pageY = Dygraph.findPosY(g.canvas_) + y; + + var opts = { + type : 'mousemove', + screenX : pageX, + screenY : pageY, + clientX : pageX, + clientY : pageY, + }; + + var event = DygraphOps.createEvent_(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); }; -DygraphOps.dispatchMouseUp = function(g, x, y, func) { - var px = Dygraph.findPosX(g.canvas_); - var py = Dygraph.findPosY(g.canvas_); - - var pageX = px + g.toDomXCoord(x); - var pageY = py + g.toDomYCoord(y); - - var evt = document.createEvent('MouseEvents'); - evt.initMouseEvent( - 'mouseup', - true, true, document.defaultView, - 0, pageX, pageY, pageX, pageY, - false, false, false, false, 0, null); - if (func) { - func(evt); - } - g.canvas_.dispatchEvent(evt); +DygraphOps.dispatchMouseUp_Point = function(g, x, y, custom) { + var pageX = Dygraph.findPosX(g.canvas_) + x; + var pageY = Dygraph.findPosY(g.canvas_) + y; + + var opts = { + type : 'mouseup', + screenX : pageX, + screenY : pageY, + clientX : pageX, + clientY : pageY, + }; + + var event = DygraphOps.createEvent_(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); +}; + +/** + * Dispatches a mouse down using the graph's data coordinate system. + * (The y value mapped to the first axis.) + */ +DygraphOps.dispatchMouseDown = function(g, x, y, custom) { + DygraphOps.dispatchMouseDown_Point( + g, + g.toDomXCoord(x), + g.toDomYCoord(y), + custom); }; + +/** + * Dispatches a mouse move using the graph's data coordinate system. + * (The y value mapped to the first axis.) + */ +DygraphOps.dispatchMouseMove = function(g, x, y, custom) { + DygraphOps.dispatchMouseMove_Point( + g, + g.toDomXCoord(x), + g.toDomYCoord(y), + custom); +}; + +/** + * Dispatches a mouse up using the graph's data coordinate system. + * (The y value mapped to the first axis.) + */ +DygraphOps.dispatchMouseUp = function(g, x, y, custom) { + DygraphOps.dispatchMouseUp_Point( + g, + g.toDomXCoord(x), + g.toDomYCoord(y), + custom); +}; +