X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=auto_tests%2Ftests%2FDygraphOps.js;h=52f594385cbfb68c4b5b02d2ab4aa16194b85d14;hb=bf50de0db3094fc5155efc8aee14112df2545e42;hp=3bd3c4417ea5a1a86e80f49c429da6e41950af85;hpb=3fc84ab9f2bd242018fd4d91f41a151e6d3b79f1;p=dygraphs.git diff --git a/auto_tests/tests/DygraphOps.js b/auto_tests/tests/DygraphOps.js index 3bd3c44..52f5943 100644 --- a/auto_tests/tests/DygraphOps.js +++ b/auto_tests/tests/DygraphOps.js @@ -26,72 +26,190 @@ */ 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; }; -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); +/** + * Dispatch an event onto the graph's canvas. + */ +DygraphOps.dispatchCanvasEvent = function(g, event) { + g.canvas_.dispatchEvent(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.dispatchDoubleClick = function(g, custom) { + var opts = { + type : 'dblclick', + detail : 2 + }; + var event = DygraphOps.createEvent(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); +}; + +/* + * Create an 'opts' argument which can be passed to createEvent that contains + * type, screenX, screenY, clientX, clientY. + */ +DygraphOps.createOptsForPoint_ = function(g, type, x, y) { + var pos = Dygraph.findPos(g.canvas_); + var pageX = pos.x + x; + var pageY = pos.y + y; + + return { + type : type, + screenX : pageX, + screenY : pageY, + clientX : pageX, + clientY : pageY, + }; +}; + +DygraphOps.dispatchMouseDown_Point = function(g, x, y, custom) { + var opts = DygraphOps.createOptsForPoint_(g, 'mousedown', x, y); + opts.detail = 1; + var event = DygraphOps.createEvent(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); }; + +DygraphOps.dispatchMouseMove_Point = function(g, x, y, custom) { + var opts = DygraphOps.createOptsForPoint_(g, 'mousemove', x, y); + var event = DygraphOps.createEvent(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); +}; + +DygraphOps.dispatchMouseUp_Point = function(g, x, y, custom) { + var opts = DygraphOps.createOptsForPoint_(g, 'mouseup', x, y); + var event = DygraphOps.createEvent(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); +}; + +DygraphOps.dispatchMouseOver_Point = function(g, x, y, custom) { + var opts = DygraphOps.createOptsForPoint_(g, 'mouseover', x, y); + var event = DygraphOps.createEvent(opts, custom); + DygraphOps.dispatchCanvasEvent(g, event); +}; + +DygraphOps.dispatchMouseOut_Point = function(g, x, y, custom) { + var opts = DygraphOps.createOptsForPoint_(g, 'mouseout', x, y); + 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); +}; + +/** + * Dispatches a mouse over using the graph's data coordinate system. + * (The y value mapped to the first axis.) + */ +DygraphOps.dispatchMouseOver = function(g, x, y, custom) { + DygraphOps.dispatchMouseOver_Point( + g, + g.toDomXCoord(x), + g.toDomYCoord(y), + custom); +}; + +/** + * Dispatches a mouse out using the graph's data coordinate system. + * (The y value mapped to the first axis.) + */ +DygraphOps.dispatchMouseOut = function(g, x, y, custom) { + DygraphOps.dispatchMouseOut_Point( + g, + g.toDomXCoord(x), + g.toDomYCoord(y), + custom); +}; +