@@ -39,6 +39,13 @@ var YSHIFTY = Math.sin(YA_RADIANS);
39
39
var HOVERARROWSIZE = constants . HOVERARROWSIZE ;
40
40
var HOVERTEXTPAD = constants . HOVERTEXTPAD ;
41
41
42
+ var multipleHoverPoints = {
43
+ box : true ,
44
+ ohlc : true ,
45
+ violin : true ,
46
+ candlestick : true
47
+ } ;
48
+
42
49
// fx.hover: highlight data on hover
43
50
// evt can be a mousemove event, or an object with data about what points
44
51
// to hover on
@@ -659,7 +666,14 @@ function _hover(gd, evt, subplot, noHoverEvent) {
659
666
// pick winning point
660
667
var winningPoint = hoverData [ 0 ] ;
661
668
// 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 ;
663
677
664
678
var winX = getCoord ( 'x' , winningPoint , fullLayout ) ;
665
679
var winY = getCoord ( 'y' , winningPoint , fullLayout ) ;
@@ -671,15 +685,7 @@ function _hover(gd, evt, subplot, noHoverEvent) {
671
685
var seen = { } ;
672
686
var id = 0 ;
673
687
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 ;
683
689
if ( ! seen [ key ] ) {
684
690
id ++ ;
685
691
seen [ key ] = id ;
@@ -697,10 +703,13 @@ function _hover(gd, evt, subplot, noHoverEvent) {
697
703
}
698
704
} ;
699
705
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
+ }
702
711
// override from the end
703
- for ( var k = hoverData . length - 1 ; k > 0 ; k -- ) {
712
+ for ( k = hoverData . length - 1 ; k > initLen - 1 ; k -- ) {
704
713
insert ( hoverData [ k ] ) ;
705
714
}
706
715
hoverData = finalPoints ;
0 commit comments