@@ -39,6 +39,13 @@ var YSHIFTY = Math.sin(YA_RADIANS);
3939var HOVERARROWSIZE = constants . HOVERARROWSIZE ;
4040var 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 ;
0 commit comments