Skip to content

Commit f8b584e

Browse files
committed
handle winning points in traces that produce multiple points
1 parent fa67044 commit f8b584e

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

src/components/fx/hover.js

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ var YSHIFTY = Math.sin(YA_RADIANS);
3939
var HOVERARROWSIZE = constants.HOVERARROWSIZE;
4040
var HOVERTEXTPAD = constants.HOVERTEXTPAD;
4141

42+
var multipleHoverPoints = {
43+
box: true,
44+
ohlc: true,
45+
violin: true,
46+
candlestick: true
47+
};
48+
4249
// fx.hover: highlight data on hover
4350
// evt can be a mousemove event, or an object with data about what points
4451
// to hover on
@@ -659,7 +666,14 @@ function _hover(gd, evt, subplot, noHoverEvent) {
659666
// pick winning point
660667
var winningPoint = hoverData[0];
661668
// discard other points
662-
hoverData = [winningPoint];
669+
if(multipleHoverPoints[winningPoint.trace.type]) {
670+
hoverData = hoverData.filter(function(d) {
671+
return d.trace.index === winningPoint.trace.index;
672+
});
673+
} else {
674+
hoverData = [winningPoint];
675+
}
676+
var initLen = hoverData.length;
663677

664678
var winX = getCoord('x', winningPoint, fullLayout);
665679
var winY = getCoord('y', winningPoint, fullLayout);
@@ -671,15 +685,7 @@ function _hover(gd, evt, subplot, noHoverEvent) {
671685
var seen = {};
672686
var id = 0;
673687
var insert = function(newHd) {
674-
var type = newHd.trace.type;
675-
var multiplePoints = (
676-
type === 'box' ||
677-
type === 'violin' ||
678-
type === 'ohlc' ||
679-
type === 'candlestick'
680-
);
681-
682-
var key = multiplePoints ? hoverDataKey(newHd) : newHd.trace.index;
688+
var key = multipleHoverPoints[newHd.trace.type] ? hoverDataKey(newHd) : newHd.trace.index;
683689
if(!seen[key]) {
684690
id++;
685691
seen[key] = id;
@@ -697,10 +703,13 @@ function _hover(gd, evt, subplot, noHoverEvent) {
697703
}
698704
};
699705

700-
// insert the winnig point first
701-
insert(winningPoint);
706+
var k;
707+
// insert the winnig point(s) first
708+
for(k = 0; k < initLen; k++) {
709+
insert(hoverData[k]);
710+
}
702711
// override from the end
703-
for(var k = hoverData.length - 1; k > 0; k--) {
712+
for(k = hoverData.length - 1; k > initLen - 1; k--) {
704713
insert(hoverData[k]);
705714
}
706715
hoverData = finalPoints;

test/jasmine/tests/violin_test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,8 +537,8 @@ describe('Test violin hover:', function() {
537537
name: ['', '', '', '', '', ''],
538538
axis: 'Sat',
539539
hoverLabelPos: [
540-
[364, 270], [387, 270], [339, 270],
541-
[346, 270], [349, 270], [352, 270]
540+
[364, 270], [352, 270], [339, 270],
541+
[346, 270], [349, 270], [387, 270]
542542
]
543543
}, {
544544
desc: 'single horizontal violin',

0 commit comments

Comments
 (0)