@@ -11,55 +11,47 @@ function hoverPoints(pointData, xval, yval, hovermode, opts) {
11
11
var hovermodeHasX = ( hovermode || '' ) . charAt ( 0 ) === 'x' ;
12
12
var hovermodeHasY = ( hovermode || '' ) . charAt ( 0 ) === 'y' ;
13
13
14
- var xpx = pointData . xa . c2p ( xval ) ;
15
- var ypx = pointData . ya . c2p ( yval ) ;
14
+ var points = _hoverPoints ( pointData , xval , yval ) ;
16
15
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 ;
18
22
19
- if ( ( hovermodeHasX || hovermodeHasY ) && opts . hoversubplots === 'axis' ) {
20
- var _xpx = points [ 0 ] . _xpx ;
21
- var _ypx = points [ 0 ] . _ypx ;
23
+ var gd = opts . gd ;
22
24
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 ) ;
32
26
33
- var gd = opts . gd ;
27
+ for ( var i = 0 ; i < subplotsWith . length ; i ++ ) {
28
+ var spId = subplotsWith [ i ] ;
34
29
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
+ }
45
35
46
- var newPoints = _hoverPoints ( _pointData , _xpx , _ypx , hovermodeHasX , hovermodeHasY ) ;
36
+ var axisHoversubplots = hovermodeHasX || hovermodeHasY ;
37
+ var newPoints = _hoverPoints ( _pointData , xval , yval , axisHoversubplots ) ;
47
38
48
- points = points . concat ( newPoints ) ;
49
- }
39
+ points = points . concat ( newPoints ) ;
50
40
}
51
41
}
52
42
53
43
return points ;
54
44
}
55
45
56
- function _hoverPoints ( pointData , xpx , ypx , hoversubplotsX , hoversubplotsY ) {
46
+ function _hoverPoints ( pointData , xval , yval , axisHoversubplots ) {
57
47
var cd = pointData . cd ;
58
48
var trace = cd [ 0 ] . trace ;
59
49
var scene = pointData . scene ;
60
50
var cdata = scene . matrixOptions . cdata ;
61
51
var xa = pointData . xa ;
62
52
var ya = pointData . ya ;
53
+ var xpx = xa . c2p ( xval ) ;
54
+ var ypx = ya . c2p ( yval ) ;
63
55
var maxDistance = pointData . distance ;
64
56
65
57
var xi = helpers . getDimIndex ( trace , xa ) ;
@@ -69,36 +61,21 @@ function _hoverPoints(pointData, xpx, ypx, hoversubplotsX, hoversubplotsY) {
69
61
var x = cdata [ xi ] ;
70
62
var y = cdata [ yi ] ;
71
63
72
- var id , dxy , _xpx , _ypx ;
64
+ var id , dxy ;
73
65
var minDist = maxDistance ;
74
66
75
67
for ( var i = 0 ; i < x . length ; i ++ ) {
76
- if ( ( hoversubplotsX || hoversubplotsY ) && i !== pointData . index ) continue ;
68
+ if ( axisHoversubplots && i !== pointData . index ) continue ;
77
69
78
70
var ptx = x [ i ] ;
79
71
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 ) ;
96
75
97
- if ( pick ) {
76
+ if ( axisHoversubplots || dist < minDist ) {
98
77
minDist = dxy = dist ;
99
78
id = i ;
100
- _xpx = thisXpx ;
101
- _ypx = thisYpx ;
102
79
}
103
80
}
104
81
@@ -108,10 +85,7 @@ function _hoverPoints(pointData, xpx, ypx, hoversubplotsX, hoversubplotsY) {
108
85
109
86
if ( id === undefined ) return [ pointData ] ;
110
87
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 ) ] ;
115
89
}
116
90
117
91
module . exports = {
0 commit comments