Skip to content

Commit 172c3e6

Browse files
authored
Merge pull request #3778 from plotly/fix3776-waterfall-hovermode-closest
Bug fix waterfall hovermode closest decreasing values
2 parents d996136 + 50df8e6 commit 172c3e6

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

Diff for: src/traces/bar/hover.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ function hoverOnBars(pointData, xval, yval, hovermode) {
3434
var trace = cd[0].trace;
3535
var t = cd[0].t;
3636
var isClosest = (hovermode === 'closest');
37+
var isWaterfall = (trace.type === 'waterfall');
3738
var maxHoverDistance = pointData.maxHoverDistance;
3839
var maxSpikeDistance = pointData.maxSpikeDistance;
3940

@@ -82,10 +83,17 @@ function hoverOnBars(pointData, xval, yval, hovermode) {
8283
}
8384

8485
function sizeFn(di) {
86+
var v = sizeVal;
87+
var b = di.b;
88+
var s = di[sizeLetter];
89+
90+
if(isWaterfall) {
91+
s += Math.abs(di.rawS || 0);
92+
}
93+
8594
// add a gradient so hovering near the end of a
8695
// bar makes it a little closer match
87-
return Fx.inbox(di.b - sizeVal, di[sizeLetter] - sizeVal,
88-
maxHoverDistance + (di[sizeLetter] - sizeVal) / (di[sizeLetter] - di.b) - 1);
96+
return Fx.inbox(b - v, s - v, maxHoverDistance + (s - v) / (s - b) - 1);
8997
}
9098

9199
if(trace.orientation === 'h') {

Diff for: test/image/mocks/waterfall_profit-loss_2018vs2019_rectangle.json

+1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
"margin": { "l": 150 },
151151
"height": 800,
152152
"width": 800,
153+
"hovermode": "closest",
153154
"showlegend": true
154155
}
155156
}

Diff for: test/jasmine/tests/waterfall_test.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -1257,6 +1257,13 @@ describe('waterfall hover', function() {
12571257
expect(out.style).toEqual([0, '#3D9970', 0, 13.23]);
12581258
assertPos(out.pos, [11.87, 59.33, 52.71, 52.71]);
12591259
});
1260+
1261+
it('should return the correct hover point data (case closest - decreasing case)', function() {
1262+
var out = _hover(gd, 0.8, 4, 'closest');
1263+
1264+
expect(out.style).toBeCloseToArray([1, '#FF4136', 1, -9.47]);
1265+
assertPos(out.pos, [137, 181, 266, 266]);
1266+
});
12601267
});
12611268

12621269
describe('text labels', function() {
@@ -1371,6 +1378,7 @@ describe('waterfall hover', function() {
13711378
[-3.9, 1, 'closest'],
13721379
[5.9, 1.9, 'closest'],
13731380
[-3.9, -10, 'x'],
1381+
[1, 2.1, 'closest'],
13741382
[5.9, 19, 'x']
13751383
].forEach(function(hoverSpec) {
13761384
var out = _hover(gd, hoverSpec[0], hoverSpec[1], hoverSpec[2]);
@@ -1382,7 +1390,6 @@ describe('waterfall hover', function() {
13821390
// then a few that are off the edge so yield nothing
13831391
[
13841392
[1, -0.1, 'closest'],
1385-
[1, 2.1, 'closest'],
13861393
[-4.1, 1, 'closest'],
13871394
[6.1, 1, 'closest'],
13881395
[-4.1, 1, 'x'],

0 commit comments

Comments
 (0)