@@ -11,55 +11,47 @@ function hoverPoints(pointData, xval, yval, hovermode, opts) {
1111 var hovermodeHasX = ( hovermode || '' ) . charAt ( 0 ) === 'x' ;
1212 var hovermodeHasY = ( hovermode || '' ) . charAt ( 0 ) === 'y' ;
1313
14- var xpx = pointData . xa . c2p ( xval ) ;
15- var ypx = pointData . ya . c2p ( yval ) ;
14+ var points = _hoverPoints ( pointData , xval , yval ) ;
1615
17- var points = _hoverPoints ( pointData , xpx , ypx ) ;
16+ if ( ( hovermodeHasX || hovermodeHasY ) && opts . hoversubplots === 'axis' && points [ 0 ] ) {
17+ var subplotsWith = (
18+ hovermodeHasX ?
19+ pointData . xa :
20+ pointData . ya
21+ ) . _subplotsWith ;
1822
19- if ( ( hovermodeHasX || hovermodeHasY ) && opts . hoversubplots === 'axis' ) {
20- var _xpx = points [ 0 ] . _xpx ;
21- var _ypx = points [ 0 ] . _ypx ;
23+ var gd = opts . gd ;
2224
23- if (
24- ( hovermodeHasX && _xpx !== undefined ) ||
25- ( hovermodeHasY && _ypx !== undefined )
26- ) {
27- var subplotsWith = (
28- hovermodeHasX ?
29- pointData . xa :
30- pointData . ya
31- ) . _subplotsWith ;
25+ var _pointData = extendFlat ( { } , pointData ) ;
3226
33- var gd = opts . gd ;
27+ for ( var i = 0 ; i < subplotsWith . length ; i ++ ) {
28+ var spId = subplotsWith [ i ] ;
3429
35- var _pointData = extendFlat ( { } , pointData ) ;
36-
37- for ( var i = 0 ; i < subplotsWith . length ; i ++ ) {
38- var spId = subplotsWith [ i ] ;
39-
40- if ( hovermodeHasY ) {
41- _pointData . xa = getFromId ( gd , spId , 'x' ) ;
42- } else { // hovermodeHasX
43- _pointData . ya = getFromId ( gd , spId , 'y' ) ;
44- }
30+ if ( hovermodeHasY ) {
31+ _pointData . xa = getFromId ( gd , spId , 'x' ) ;
32+ } else { // hovermodeHasX
33+ _pointData . ya = getFromId ( gd , spId , 'y' ) ;
34+ }
4535
46- var newPoints = _hoverPoints ( _pointData , _xpx , _ypx , hovermodeHasX , hovermodeHasY ) ;
36+ var axisHoversubplots = hovermodeHasX || hovermodeHasY ;
37+ var newPoints = _hoverPoints ( _pointData , xval , yval , axisHoversubplots ) ;
4738
48- points = points . concat ( newPoints ) ;
49- }
39+ points = points . concat ( newPoints ) ;
5040 }
5141 }
5242
5343 return points ;
5444}
5545
56- function _hoverPoints ( pointData , xpx , ypx , hoversubplotsX , hoversubplotsY ) {
46+ function _hoverPoints ( pointData , xval , yval , axisHoversubplots ) {
5747 var cd = pointData . cd ;
5848 var trace = cd [ 0 ] . trace ;
5949 var scene = pointData . scene ;
6050 var cdata = scene . matrixOptions . cdata ;
6151 var xa = pointData . xa ;
6252 var ya = pointData . ya ;
53+ var xpx = xa . c2p ( xval ) ;
54+ var ypx = ya . c2p ( yval ) ;
6355 var maxDistance = pointData . distance ;
6456
6557 var xi = helpers . getDimIndex ( trace , xa ) ;
@@ -69,36 +61,21 @@ function _hoverPoints(pointData, xpx, ypx, hoversubplotsX, hoversubplotsY) {
6961 var x = cdata [ xi ] ;
7062 var y = cdata [ yi ] ;
7163
72- var id , dxy , _xpx , _ypx ;
64+ var id , dxy ;
7365 var minDist = maxDistance ;
7466
7567 for ( var i = 0 ; i < x . length ; i ++ ) {
76- if ( ( hoversubplotsX || hoversubplotsY ) && i !== pointData . index ) continue ;
68+ if ( axisHoversubplots && i !== pointData . index ) continue ;
7769
7870 var ptx = x [ i ] ;
7971 var pty = y [ i ] ;
80- var thisXpx = xa . c2p ( ptx ) ;
81- var thisYpx = ya . c2p ( pty ) ;
82-
83- var dx = thisXpx - xpx ;
84- var dy = thisYpx - ypx ;
85- var dist = 0 ;
86-
87- var pick = false ;
88- if ( hoversubplotsX ) {
89- if ( dx === 0 ) pick = true ;
90- } else if ( hoversubplotsY ) {
91- if ( dy === 0 ) pick = true ;
92- } else {
93- dist = Math . sqrt ( dx * dx + dy * dy ) ;
94- if ( dist < minDist ) pick = true ;
95- }
72+ var dx = xa . c2p ( ptx ) - xpx ;
73+ var dy = ya . c2p ( pty ) - ypx ;
74+ var dist = Math . sqrt ( dx * dx + dy * dy ) ;
9675
97- if ( pick ) {
76+ if ( axisHoversubplots || dist < minDist ) {
9877 minDist = dxy = dist ;
9978 id = i ;
100- _xpx = thisXpx ;
101- _ypx = thisYpx ;
10279 }
10380 }
10481
@@ -108,10 +85,7 @@ function _hoverPoints(pointData, xpx, ypx, hoversubplotsX, hoversubplotsY) {
10885
10986 if ( id === undefined ) return [ pointData ] ;
11087
111- var out = calcHover ( pointData , x , y , trace ) ;
112- out . _xpx = _xpx ;
113- out . _ypx = _ypx ;
114- return [ out ] ;
88+ return [ calcHover ( pointData , x , y , trace ) ] ;
11589}
11690
11791module . exports = {
0 commit comments