From: timeu <uemit.seren@gmail.com> Date: Thu, 26 Jan 2012 18:53:04 +0000 (-0500) Subject: Fix for issues 236 & 270 from timeu. X-Git-Tag: v1.0.0~331 X-Git-Url: https://adrianiainlam.tk/git/?a=commitdiff_plain;h=1c6b239c23ed69c382adc81465daa7f1cfc12b54;p=dygraphs.git Fix for issues 236 & 270 from timeu. Issue 236: Highlight callback will fail if the first data series has visibility=false Issue 270: Remove onResize event handler in destroy() function --- diff --git a/auto_tests/misc/local.html b/auto_tests/misc/local.html index d24cab8..8e4cfdd 100644 --- a/auto_tests/misc/local.html +++ b/auto_tests/misc/local.html @@ -39,6 +39,7 @@ <script type="text/javascript" src="../tests/update_options.js"></script> <script type="text/javascript" src="../tests/utils_test.js"></script> <script type="text/javascript" src="../tests/multiple_axes.js"></script> + <script type="text/javascript" src="../tests/callback.js"></script> <script type="text/javascript"> diff --git a/auto_tests/tests/callback.js b/auto_tests/tests/callback.js new file mode 100644 index 0000000..1697e21 --- /dev/null +++ b/auto_tests/tests/callback.js @@ -0,0 +1,54 @@ +/** + * @fileoverview Test cases for the callbacks. + * + * @author uemit.seren@gmail.com (Ãmit Seren) + */ + +var CallbackTestCase = TestCase("callback"); + +CallbackTestCase.prototype.setUp = function() { + document.body.innerHTML = "<div id='graph'></div>"; +}; + +CallbackTestCase.prototype.tearDown = function() { +}; + + var data = "X,a\,b,c\n" + + "10,-1,1,2\n" + + "11,0,3,1\n" + + "12,1,4,2\n" + + "13,0,2,3\n"; + + + /** + * This tests that when the function idxToRow_ returns the proper row and the onHiglightCallback + * is properly called when the first series is hidden (setVisibility = false) + * + */ + CallbackTestCase.prototype.testHighlightCallbackIsCalled = function() { + var h_row; + var h_pts; + + var highlightCallback = function(e, x, pts, row) { + h_row = row; + h_pts = pts; + }; + + + + var graph = document.getElementById("graph"); + var g = new Dygraph(graph, data, + { + width: 100, + height : 100, + visibility: [false, true, true], + highlightCallback : highlightCallback, + }); + + DygraphOps.dispatchMouseMove(g, 13, 10); + + //check correct row is returned + assertEquals(3, h_row); + //check there are only two points (because first series is hidden) + assertEquals(2, h_pts.length); + }; diff --git a/dygraph.js b/dygraph.js index e8293ae..c633df7 100644 --- a/dygraph.js +++ b/dygraph.js @@ -840,11 +840,13 @@ Dygraph.prototype.createInterface_ = function() { this.createStatusMessage_(); this.createDragInterface_(); + this.resizeHandler = function(e) { + dygraph.resize(); + } + // Update when the window is resized. // TODO(danvk): drop frames depending on complexity of the chart. - Dygraph.addEvent(window, 'resize', function(e) { - dygraph.resize(); - }); + Dygraph.addEvent(window, 'resize', this.resizeHandler); }; /** @@ -868,7 +870,9 @@ Dygraph.prototype.destroy = function() { } } }; - + // remove event handlers + Dygraph.removeEvent(window,'resize',this.resizeHandler); + this.resizeHandler = null; // These may not all be necessary, but it can't hurt... nullOut(this.layout_); nullOut(this.plotter_); @@ -1526,11 +1530,20 @@ Dygraph.prototype.mouseMove_ = function(event) { Dygraph.prototype.idxToRow_ = function(idx) { if (idx < 0) return -1; - for (var i in this.layout_.datasets) { - if (idx < this.layout_.datasets[i].length) { - return this.boundaryIds_[0][0]+idx; + // make sure that you get the boundaryIds record which is also defined (see bug #236) + var boundaryIdx = -1; + for (var i = 0; i < this.boundaryIds_.length; i++) { + if (this.boundaryIds_[i] !== undefined) { + boundaryIdx = i; + break; + } + } + if (boundaryIdx < 0) return -1; + for (var name in this.layout_.datasets) { + if (idx < this.layout_.datasets[name].length) { + return this.boundaryIds_[boundaryIdx][0] + idx; } - idx -= this.layout_.datasets[i].length; + idx -= this.layout_.datasets[name].length; } return -1; };