@@ -1071,28 +1071,33 @@ function createHoverText(hoverData, opts, gd) {
1071
1071
legendDraw ( gd , mockLegend ) ;
1072
1072
1073
1073
// Position the hover
1074
- var ly ;
1074
+ var lyBottom , lyTop ;
1075
1075
if ( axLetter === 'y' ) {
1076
- ly = Math . min . apply ( null , hoverData . map ( function ( c ) { return c . y1 ; } ) ) ;
1076
+ lyTop = Math . min . apply ( null , hoverData . map ( function ( c ) { return Math . min ( c . y0 , c . y1 ) ; } ) ) ;
1077
+ lyBottom = Math . max . apply ( null , hoverData . map ( function ( c ) { return Math . max ( c . y0 , c . y1 ) ; } ) ) ;
1077
1078
} else {
1078
- ly = Lib . mean ( hoverData . map ( function ( c ) { return ( c . y0 + c . y1 ) / 2 ; } ) ) ;
1079
+ lyTop = lyBottom = Lib . mean ( hoverData . map ( function ( c ) { return ( c . y0 + c . y1 ) / 2 ; } ) ) ;
1079
1080
}
1080
1081
1081
1082
var lxRight , lxLeft ;
1082
1083
if ( axLetter === 'x' ) {
1083
- lxRight = Math . max . apply ( null , hoverData . map ( function ( c ) { return c . x1 ; } ) ) ;
1084
- lxLeft = Math . min . apply ( null , hoverData . map ( function ( c ) { return c . x0 ; } ) ) ;
1084
+ lxRight = Math . max . apply ( null , hoverData . map ( function ( c ) { return Math . max ( c . x0 , c . x1 ) ; } ) ) ;
1085
+ lxLeft = Math . min . apply ( null , hoverData . map ( function ( c ) { return Math . min ( c . x0 , c . x1 ) ; } ) ) ;
1085
1086
} else {
1086
1087
lxRight = lxLeft = Lib . mean ( hoverData . map ( function ( c ) { return ( c . x0 + c . x1 ) / 2 ; } ) ) ;
1087
1088
}
1088
1089
1089
1090
var legendContainer = container . select ( 'g.legend' ) ;
1090
1091
var tbb = legendContainer . node ( ) . getBoundingClientRect ( ) ;
1091
- lxRight += xa . _offset ;
1092
- lxLeft += xa . _offset ;
1093
- ly += ya . _offset - tbb . height / 2 ;
1092
+ var xOffset = xa . _offset ;
1093
+ var yOffset = ya . _offset ;
1094
+ lxRight += xOffset ;
1095
+ lxLeft += xOffset ;
1096
+ lyTop += yOffset ;
1097
+ lyBottom += yOffset ;
1094
1098
1095
1099
var lx = lxRight ;
1100
+ var ly = lyTop ;
1096
1101
1097
1102
// Change horizontal alignment to end up on screen
1098
1103
var txWidth = tbb . width + 2 * HOVERTEXTPAD ;
@@ -1108,18 +1113,17 @@ function createHoverText(hoverData, opts, gd) {
1108
1113
1109
1114
// Change vertical alignement to end up on screen
1110
1115
var txHeight = tbb . height + 2 * HOVERTEXTPAD ;
1111
- var overflowTop = ly <= outerTop ;
1112
- var overflowBottom = ly + txHeight >= outerHeight ;
1113
- var canFit = txHeight <= outerHeight ;
1114
- if ( canFit ) {
1115
- if ( overflowTop ) {
1116
- ly = ya . _offset + 2 * HOVERTEXTPAD ;
1117
- } else if ( overflowBottom ) {
1118
- ly = outerHeight - txHeight ;
1119
- }
1116
+ var anchorBottomOK = lyBottom + txHeight <= outerHeight ;
1117
+ var anchorTopOK = lyTop - txHeight >= 0 ;
1118
+ if ( ! anchorTopOK && anchorBottomOK ) {
1119
+ ly = lyBottom ;
1120
+ ly += 2 * HOVERTEXTPAD ;
1121
+ } else {
1122
+ ly = lyTop ;
1123
+ ly -= txHeight ;
1120
1124
}
1121
- legendContainer . attr ( 'transform' , strTranslate ( lx , ly ) ) ;
1122
1125
1126
+ legendContainer . attr ( 'transform' , strTranslate ( lx , ly ) ) ;
1123
1127
return legendContainer ;
1124
1128
}
1125
1129
0 commit comments