From 5ee26cc16754904d3e81c5786c35109ecdfb2687 Mon Sep 17 00:00:00 2001 From: Dan Vanderkam Date: Mon, 18 Feb 2013 18:31:12 -0500 Subject: [PATCH] Ignore zooms entirely outisde the plot area; Fix broken tests. --- auto_tests/tests/interaction_model.js | 49 +++++++++++++++++++---------------- dygraph-interaction-model.js | 14 +++++++--- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/auto_tests/tests/interaction_model.js b/auto_tests/tests/interaction_model.js index 7391061..e36c20b 100644 --- a/auto_tests/tests/interaction_model.js +++ b/auto_tests/tests/interaction_model.js @@ -253,9 +253,9 @@ InteractionModelTestCase.prototype.testIsZoomed_none = function() { InteractionModelTestCase.prototype.testIsZoomed_x = function() { var g = new Dygraph(document.getElementById("graph"), data2, {}); - DygraphOps.dispatchMouseDown_Point(g, 10, 10); - DygraphOps.dispatchMouseMove_Point(g, 30, 10); - DygraphOps.dispatchMouseUp_Point(g, 30, 10); + DygraphOps.dispatchMouseDown_Point(g, 100, 100); + DygraphOps.dispatchMouseMove_Point(g, 130, 100); + DygraphOps.dispatchMouseUp_Point(g, 130, 100); assertTrue(g.isZoomed()); assertTrue(g.isZoomed("x")); @@ -278,14 +278,14 @@ InteractionModelTestCase.prototype.testIsZoomed_both = function() { var g = new Dygraph(document.getElementById("graph"), data2, {}); // Zoom x axis - DygraphOps.dispatchMouseDown_Point(g, 10, 10); - DygraphOps.dispatchMouseMove_Point(g, 30, 10); - DygraphOps.dispatchMouseUp_Point(g, 30, 10); + DygraphOps.dispatchMouseDown_Point(g, 100, 100); + DygraphOps.dispatchMouseMove_Point(g, 130, 100); + DygraphOps.dispatchMouseUp_Point(g, 130, 100); // Now zoom y axis - DygraphOps.dispatchMouseDown_Point(g, 10, 10); - DygraphOps.dispatchMouseMove_Point(g, 10, 30); - DygraphOps.dispatchMouseUp_Point(g, 10, 30); + DygraphOps.dispatchMouseDown_Point(g, 100, 100); + DygraphOps.dispatchMouseMove_Point(g, 100, 130); + DygraphOps.dispatchMouseUp_Point(g, 100, 130); assertTrue(g.isZoomed()); @@ -334,25 +334,30 @@ InteractionModelTestCase.prototype.testIsZoomed_updateOptions_both = function() InteractionModelTestCase.prototype.testCorrectAxisValueRangeAfterUnzoom = function() { - var g = new Dygraph(document.getElementById("graph"), data2, {valueRange:[1,50],dateRange:[1,9],animatedZooms:false}); + var g = new Dygraph(document.getElementById("graph"), + data2, { + valueRange: [1, 50], + dateWindow: [1, 9], + animatedZooms:false + }); // Zoom x axis - DygraphOps.dispatchMouseDown_Point(g, 10, 10); - DygraphOps.dispatchMouseMove_Point(g, 30, 10); - DygraphOps.dispatchMouseUp_Point(g, 30, 10); + DygraphOps.dispatchMouseDown_Point(g, 100, 100); + DygraphOps.dispatchMouseMove_Point(g, 130, 100); + DygraphOps.dispatchMouseUp_Point(g, 130, 100); // Zoom y axis - DygraphOps.dispatchMouseDown_Point(g, 10, 10); - DygraphOps.dispatchMouseMove_Point(g, 10, 30); - DygraphOps.dispatchMouseUp_Point(g, 10, 30); + DygraphOps.dispatchMouseDown_Point(g, 100, 100); + DygraphOps.dispatchMouseMove_Point(g, 100, 130); + DygraphOps.dispatchMouseUp_Point(g, 100, 130); currentYAxisRange = g.yAxisRange(); currentXAxisRange = g.xAxisRange(); //check that the range for the axis has changed - assertNotEquals(1,currentXAxisRange[0]); - assertNotEquals(10,currentXAxisRange[1]); - assertNotEquals(1,currentYAxisRange[0]); - assertNotEquals(50,currentYAxisRange[1]); + assertNotEquals(1, currentXAxisRange[0]); + assertNotEquals(10, currentXAxisRange[1]); + assertNotEquals(1, currentYAxisRange[0]); + assertNotEquals(50, currentYAxisRange[1]); // unzoom by doubleclick. This is really the order in which a browser // generates events, and we depend on it. @@ -366,8 +371,8 @@ InteractionModelTestCase.prototype.testCorrectAxisValueRangeAfterUnzoom = functi // TODO check if range for x-axis is correct. // Currently not possible because dateRange is set to null and extremes are returned newYAxisRange = g.yAxisRange(); - assertEquals(1,newYAxisRange[0]); - assertEquals(50,newYAxisRange[1]); + assertEquals(1, newYAxisRange[0]); + assertEquals(50, newYAxisRange[1]); }; /** diff --git a/dygraph-interaction-model.js b/dygraph-interaction-model.js index b1981d7..38e63d9 100644 --- a/dygraph-interaction-model.js +++ b/dygraph-interaction-model.js @@ -349,14 +349,20 @@ Dygraph.Interaction.endZoom = function(event, g, context) { if (regionWidth >= 10 && context.dragDirection == Dygraph.HORIZONTAL) { var left = Math.min(context.dragStartX, context.dragEndX), right = Math.max(context.dragStartX, context.dragEndX); - g.doZoomX_(Math.max(left, plotArea.x), - Math.min(right, plotArea.x + plotArea.w)); + left = Math.max(left, plotArea.x); + right = Math.min(right, plotArea.x + plotArea.w); + if (left < right) { + g.doZoomX_(left, right); + } context.cancelNextDblclick = true; } else if (regionHeight >= 10 && context.dragDirection == Dygraph.VERTICAL) { var top = Math.min(context.dragStartY, context.dragEndY), bottom = Math.max(context.dragStartY, context.dragEndY); - g.doZoomY_(Math.max(top, plotArea.y), - Math.min(bottom, plotArea.y + plotArea.h)); + top = Math.max(top, plotArea.y); + bottom = Math.min(bottom, plotArea.y + plotArea.h); + if (top < bottom) { + g.doZoomY_(top, bottom); + } context.cancelNextDblclick = true; } else { if (context.zoomMoved) g.clearZoomRect_(); -- 2.7.4