From 3d99880a9b48cfb03353632ebd7177b4b9ff32b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 2 May 2016 10:42:53 -0400 Subject: [PATCH 1/2] make sure that superimposed pts are in 'closest' hover data: - so that superimposed trace hover data can skip over 'hoverinfo' traces upon hover label creation. --- src/plots/cartesian/graph_interact.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plots/cartesian/graph_interact.js b/src/plots/cartesian/graph_interact.js index b36f5952ce8..a33ef57d124 100644 --- a/src/plots/cartesian/graph_interact.js +++ b/src/plots/cartesian/graph_interact.js @@ -618,7 +618,7 @@ fx.getClosest = function(cd, distfn, pointData) { // do this for 'closest' for(var i=0; i Date: Mon, 2 May 2016 10:43:10 -0400 Subject: [PATCH 2/2] add 'closest' hover mode test cases --- test/jasmine/tests/hover_label_test.js | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/test/jasmine/tests/hover_label_test.js b/test/jasmine/tests/hover_label_test.js index 29cef75bfe8..d9b42db1d33 100644 --- a/test/jasmine/tests/hover_label_test.js +++ b/test/jasmine/tests/hover_label_test.js @@ -269,6 +269,70 @@ describe('hover info', function() { }); }); + describe('\'closest\' hover info (superimposed case)', function() { + var mockCopy = Lib.extendDeep({}, mock); + + // superimposed traces + mockCopy.data.push(Lib.extendDeep({}, mockCopy.data[0])); + mockCopy.layout.hovermode = 'closest'; + + var gd; + + beforeEach(function(done) { + gd = createGraphDiv(); + Plotly.plot(gd, mockCopy.data, mockCopy.layout).then(done); + }); + + it('render hover labels of the above trace', function() { + Fx.hover('graph', evt, 'xy'); + + expect(gd._hoverdata.length).toEqual(1); + + var hoverTrace = gd._hoverdata[0]; + + expect(hoverTrace.fullData.index).toEqual(1); + expect(hoverTrace.curveNumber).toEqual(1); + expect(hoverTrace.pointNumber).toEqual(16); + expect(hoverTrace.x).toEqual(0.33); + expect(hoverTrace.y).toEqual(1.25); + + expect(d3.selectAll('g.axistext').size()).toEqual(0); + expect(d3.selectAll('g.hovertext').size()).toEqual(1); + + var expectations = ['PV learning ...', '(0.33, 1.25)']; + d3.selectAll('g.hovertext').selectAll('text').each(function(_, i) { + expect(d3.select(this).html()).toEqual(expectations[i]); + }); + }); + + it('render only non-hoverinfo \'none\' hover labels', function(done) { + + Plotly.restyle(gd, 'hoverinfo', ['none', 'name']).then(function() { + Fx.hover('graph', evt, 'xy'); + + expect(gd._hoverdata.length).toEqual(1); + + var hoverTrace = gd._hoverdata[0]; + + expect(hoverTrace.fullData.index).toEqual(1); + expect(hoverTrace.curveNumber).toEqual(1); + expect(hoverTrace.pointNumber).toEqual(16); + expect(hoverTrace.x).toEqual(0.33); + expect(hoverTrace.y).toEqual(1.25); + + expect(d3.selectAll('g.axistext').size()).toEqual(0); + expect(d3.selectAll('g.hovertext').size()).toEqual(1); + + var text = d3.selectAll('g.hovertext').select('text'); + expect(text.size()).toEqual(1); + expect(text.html()).toEqual('PV learning ...'); + + done(); + }); + + }); + }); + describe('hoverformat', function() { var data = [{