From: Dan Vanderkam Date: Sat, 6 Apr 2013 15:13:36 +0000 (-0700) Subject: Merge pull request #239 from timeu/bugfix_upstream X-Git-Tag: v1.0.0~42 X-Git-Url: https://adrianiainlam.tk/git/?a=commitdiff_plain;h=2dde24e570f97f8d0f69445563d068a5678aa475;hp=794e4d006192940a44e2678cb570392017dc9361;p=dygraphs.git Merge pull request #239 from timeu/bugfix_upstream #Issue 333: Pass point index to drawHighlightPointCallback and drawPointCallback --- diff --git a/auto_tests/tests/callback.js b/auto_tests/tests/callback.js index a727fa5..a8d5e7e 100644 --- a/auto_tests/tests/callback.js +++ b/auto_tests/tests/callback.js @@ -611,3 +611,78 @@ CallbackTestCase.prototype.underlayCallback_yAxisRange = function() { assertEquals(0, yMin); assertEquals(10, yMax); }; + +/** + * Test that drawPointCallback is called for isolated points and correct idx for the point is returned. + */ +CallbackTestCase.prototype.testDrawPointCallback_idx = function() { + var indices = []; + + var g; + var callback = function(g, seriesName, canvasContext, cx, cy, color, pointSizeParam,idx) { + indices.push(idx); + Dygraph.Circles.DEFAULT.apply(this, arguments); + }; + + var graph = document.getElementById("graph"); + + var testdata = [[10, 2], [11, 3], [12, NaN], [13, 2], [14, NaN], [15, 3]]; + var graphOpts = { + labels: ['X', 'Y'], + valueRange: [0, 4], + drawPoints : false, + drawPointCallback : callback, + pointSize : 8 + }; + + // Test that correct idx for isolated points are passed to the callback. + g = new Dygraph(graph, testdata, graphOpts); + assertEquals(2, indices.length); + assertEquals([3, 5],indices); + + // Test that correct indices for isolated points + gap points are passed to the callback when + // drawGapEdgePoints is set. This should add one point at the right + // edge of the segment at x=11, but not at the graph edge at x=10. + indices = []; // Reset for new test + graphOpts.drawGapEdgePoints = true; + g = new Dygraph(graph, testdata, graphOpts); + assertEquals(3, indices.length); + assertEquals([1, 3, 5],indices); + + + //Test that correct indices are passed to the callback when zoomed in. + indices = []; // Reset for new test + graphOpts.dateWindow = [12.5,13.5] + graphOpts.drawPoints = true; + testdata = [[10, 2], [11, 3], [12, 4], [13, 2], [14, 5], [15, 3]]; + g = new Dygraph(graph, testdata, graphOpts); + assertEquals(3, indices.length); + assertEquals([2, 3, 4],indices); +}; + +/** + * Test that the correct idx is returned for the point in the onHiglightCallback. + */ +CallbackTestCase.prototype.testDrawHighlightPointCallback_idx = function() { + var idxToCheck = null; + + var drawHighlightPointCallback = function(g, seriesName, canvasContext, cx, cy, color, pointSizeParam,idx) { + idxToCheck = idx; + }; + var testdata = [[1, 2], [2, 3], [3, NaN], [4, 2], [5, NaN], [6, 3]]; + var graph = document.getElementById("graph"); + var g = new Dygraph(graph, testdata, + { + drawHighlightPointCallback : drawHighlightPointCallback + }); + + assertNull(idxToCheck); + DygraphOps.dispatchMouseMove(g, 3, 0); + // check that NaN point is not highlighted + assertNull(idxToCheck); + DygraphOps.dispatchMouseMove(g, 1, 2); + // check that correct index is returned + assertEquals(0,idxToCheck); + DygraphOps.dispatchMouseMove(g, 6, 3); + assertEquals(5,idxToCheck); +}; \ No newline at end of file diff --git a/dygraph-canvas.js b/dygraph-canvas.js index 99ad493..90ef027 100644 --- a/dygraph-canvas.js +++ b/dygraph-canvas.js @@ -373,7 +373,7 @@ DygraphCanvasRenderer._drawSeries = function(e, ctx.moveTo(point.canvasx, point.canvasy); } if (drawPoints || isIsolated) { - pointsOnLine.push([point.canvasx, point.canvasy]); + pointsOnLine.push([point.canvasx, point.canvasy, point.idx]); } prevCanvasX = point.canvasx; prevCanvasY = point.canvasy; @@ -398,7 +398,7 @@ DygraphCanvasRenderer._drawPointsOnLine = function( var cb = pointsOnLine[idx]; ctx.save(); drawPointCallback( - e.dygraph, e.setName, ctx, cb[0], cb[1], color, pointSize); + e.dygraph, e.setName, ctx, cb[0], cb[1], color, pointSize, cb[2]); ctx.restore(); } }; diff --git a/dygraph-layout.js b/dygraph-layout.js index 4caafc0..b67fe2c 100644 --- a/dygraph-layout.js +++ b/dygraph-layout.js @@ -242,7 +242,8 @@ DygraphLayout.prototype._evaluateLineCharts = function() { y: yNormal, xval: xValue, yval: yValue, - name: setName // TODO(danvk): is this really necessary? + name: setName, // TODO(danvk): is this really necessary? + idx: j + this.dygraph_.boundaryIds_[setIdx][0] }; } diff --git a/dygraph-options-reference.js b/dygraph-options-reference.js index 38fefcc..a4e262c 100644 --- a/dygraph-options-reference.js +++ b/dygraph-options-reference.js @@ -61,6 +61,7 @@ Dygraph.OPTIONS_REFERENCE = // [ "cy" , "center y coordinate" ], [ "color" , "series color" ], [ "pointSize" , "the radius of the image." ] + [ "idx" , "the row-index of the point in the data."] ], "description": "Draw a custom item when drawPoints is enabled. Default is a small dot matching the series color. This method should constrain drawing to within pointSize pixels from (cx, cy). Also see drawHighlightPointCallback" }, @@ -130,6 +131,7 @@ Dygraph.OPTIONS_REFERENCE = // [ "cy" , "center y coordinate" ], [ "color" , "series color" ], [ "pointSize" , "the radius of the image." ] + [ "idx" , "the row-index of the point in the data."] ], "description": "Draw a custom item when a point is highlighted. Default is a small dot matching the series color. This method should constrain drawing to within pointSize pixels from (cx, cy) Also see drawPointCallback" }, diff --git a/dygraph.js b/dygraph.js index 4316ac3..0dcc23a 100644 --- a/dygraph.js +++ b/dygraph.js @@ -1988,7 +1988,7 @@ Dygraph.prototype.updateSelection_ = function(opt_animFraction) { ctx.strokeStyle = color; ctx.fillStyle = color; callback(this.g, pt.name, ctx, canvasx, pt.canvasy, - color, circleSize); + color, circleSize, pt.idx); } ctx.restore();