@@ -19,35 +19,38 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
19
19
trace = cd [ 0 ] . trace ,
20
20
t = cd [ 0 ] . t ,
21
21
xa = pointData . xa ,
22
- ya = pointData . ya ,
23
- barDelta = ( hovermode === 'closest' ) ?
24
- t . barwidth / 2 :
25
- t . bargroupwidth / 2 ,
26
- barPos ;
22
+ ya = pointData . ya ;
27
23
24
+ var barPos ;
28
25
if ( hovermode !== 'closest' ) barPos = function ( di ) { return di . p ; } ;
29
26
else if ( trace . orientation === 'h' ) barPos = function ( di ) { return di . y ; } ;
30
27
else barPos = function ( di ) { return di . x ; } ;
31
28
29
+ var barDelta = ( hovermode === 'closest' ) ?
30
+ function ( i ) { return ( t . barwidth [ i ] || t . barwidth ) / 2 ; } :
31
+ function ( ) { return t . bargroupwidth / 2 ; } ;
32
+
32
33
var dx , dy ;
33
34
if ( trace . orientation === 'h' ) {
34
35
dx = function ( di ) {
35
36
// add a gradient so hovering near the end of a
36
37
// bar makes it a little closer match
37
38
return Fx . inbox ( di . b - xval , di . x - xval ) + ( di . x - xval ) / ( di . x - di . b ) ;
38
39
} ;
39
- dy = function ( di ) {
40
+ dy = function ( di , i ) {
40
41
var centerPos = barPos ( di ) - yval ;
41
- return Fx . inbox ( centerPos - barDelta , centerPos + barDelta ) ;
42
+ var delta = barDelta ( i ) ;
43
+ return Fx . inbox ( centerPos - delta , centerPos + delta ) ;
42
44
} ;
43
45
}
44
46
else {
45
47
dy = function ( di ) {
46
48
return Fx . inbox ( di . b - yval , di . y - yval ) + ( di . y - yval ) / ( di . y - di . b ) ;
47
49
} ;
48
- dx = function ( di ) {
50
+ dx = function ( di , i ) {
49
51
var centerPos = barPos ( di ) - xval ;
50
- return Fx . inbox ( centerPos - barDelta , centerPos + barDelta ) ;
52
+ var delta = barDelta ( i ) ;
53
+ return Fx . inbox ( centerPos - delta , centerPos + delta ) ;
51
54
} ;
52
55
}
53
56
@@ -58,7 +61,8 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
58
61
if ( pointData . index === false ) return ;
59
62
60
63
// the closest data point
61
- var di = cd [ pointData . index ] ,
64
+ var index = pointData . index ,
65
+ di = cd [ index ] ,
62
66
mc = di . mcc || trace . marker . color ,
63
67
mlc = di . mlcc || trace . marker . line . color ,
64
68
mlw = di . mlw || trace . marker . line . width ;
@@ -70,16 +74,16 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
70
74
pointData . x0 = pointData . x1 = xa . c2p ( di . x , true ) ;
71
75
pointData . xLabelVal = size ;
72
76
73
- pointData . y0 = ya . c2p ( barPos ( di ) - barDelta , true ) ;
74
- pointData . y1 = ya . c2p ( barPos ( di ) + barDelta , true ) ;
77
+ pointData . y0 = ya . c2p ( barPos ( di ) - barDelta ( index ) , true ) ;
78
+ pointData . y1 = ya . c2p ( barPos ( di ) + barDelta ( index ) , true ) ;
75
79
pointData . yLabelVal = di . p ;
76
80
}
77
81
else {
78
82
pointData . y0 = pointData . y1 = ya . c2p ( di . y , true ) ;
79
83
pointData . yLabelVal = size ;
80
84
81
- pointData . x0 = xa . c2p ( barPos ( di ) - barDelta , true ) ;
82
- pointData . x1 = xa . c2p ( barPos ( di ) + barDelta , true ) ;
85
+ pointData . x0 = xa . c2p ( barPos ( di ) - barDelta ( index ) , true ) ;
86
+ pointData . x1 = xa . c2p ( barPos ( di ) + barDelta ( index ) , true ) ;
83
87
pointData . xLabelVal = di . p ;
84
88
}
85
89
0 commit comments