@@ -1549,20 +1549,20 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
15491549 }
15501550 var pmin = 0 ;
15511551 var pmax = ( axIsX ? fullLayout . width : fullLayout . height ) ;
1552+ // in hovermode avoid overlap between hover labels and axis label
15521553 if ( fullLayout . hovermode === 'x' || fullLayout . hovermode === 'y' ) {
15531554 // extent of rect behind hover label on cross axis (without arrow):
15541555 var offsets = getHoverLabelOffsets ( d , rotateLabels ) ;
1555- var shiftX = getLabelShiftX ( d ) ;
1556+ var shiftX = getTextShiftX ( d ) ;
15561557 // calculation based on alignHoverText function
1557- var offsetRectX = ( shiftX . x2x + ( shiftX . alignShift - 1 ) * d . tx2width / 2 + offsets . x ) * fullLayout . _invScaleX ;
1558+ var offsetRectX = ( shiftX . text2ShiftX + ( shiftX . alignShift - 1 ) * d . tx2width / 2 + offsets . x ) * fullLayout . _invScaleX ;
15581559 var offsetRectY = ( offsets . y - d . by / 2 - 1 ) * fullLayout . _invScaleY ;
15591560
15601561 var labelMin = d . crossPos + ( axIsX ? offsetRectY : offsetRectX ) ;
15611562 var labelMax = labelMin + ( axIsX ? d . tx2width * fullLayout . _invScaleX : ( d . by + 2 ) * fullLayout . _invScaleY ) ;
15621563 if ( axIsX ) {
1563- // at least 1 pixel overlap
15641564 if ( axisLabelMinY !== undefined && axisLabelMaxY !== undefined && Math . min ( labelMax , axisLabelMaxY ) - Math . max ( labelMin , axisLabelMinY ) > 1 ) {
1565- // has overlap with axis label
1565+ // has at least 1 pixel overlap with axis label
15661566 if ( crossAx . side === 'left' ) {
15671567 pmin = crossAx . _mainLinePosition ;
15681568 pmax = fullLayout . width ;
@@ -1571,9 +1571,8 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
15711571 }
15721572 }
15731573 } else {
1574- // at least 1 pixel overlap
15751574 if ( axisLabelMinX !== undefined && axisLabelMaxX !== undefined && Math . min ( labelMax , axisLabelMaxX ) - Math . max ( labelMin , axisLabelMinX ) > 1 ) {
1576- // has overlap with axis label
1575+ // has at least 1 pixel overlap with axis label
15771576 if ( crossAx . side === 'top' ) {
15781577 pmin = crossAx . _mainLinePosition ;
15791578 pmax = fullLayout . height ;
@@ -1751,21 +1750,24 @@ function getHoverLabelOffsets(hoverLabel, rotateLabels) {
17511750 } ;
17521751}
17531752
1754- function getLabelShiftX ( hoverLabel ) {
1753+ /**
1754+ * Calculate the shift in x for text and text2 elements
1755+ */
1756+ function getTextShiftX ( hoverLabel ) {
17551757 var alignShift = { start : 1 , end : - 1 , middle : 0 } [ hoverLabel . anchor ] ;
1756- var txx = alignShift * ( HOVERARROWSIZE + HOVERTEXTPAD ) ;
1757- var tx2x = txx + alignShift * ( hoverLabel . txwidth + HOVERTEXTPAD ) ;
1758+ var textShiftX = alignShift * ( HOVERARROWSIZE + HOVERTEXTPAD ) ;
1759+ var text2ShiftX = textShiftX + alignShift * ( hoverLabel . txwidth + HOVERTEXTPAD ) ;
17581760
17591761 var isMiddle = hoverLabel . anchor === 'middle' ;
17601762 if ( isMiddle ) {
1761- txx -= hoverLabel . tx2width / 2 ;
1762- tx2x += hoverLabel . txwidth / 2 + HOVERTEXTPAD ;
1763+ textShiftX -= hoverLabel . tx2width / 2 ;
1764+ text2ShiftX += hoverLabel . txwidth / 2 + HOVERTEXTPAD ;
17631765 }
17641766
17651767 return {
17661768 alignShift : alignShift ,
1767- xx : txx ,
1768- x2x : tx2x
1769+ textShiftX : textShiftX ,
1770+ text2ShiftX : text2ShiftX
17691771 } ;
17701772}
17711773
@@ -1782,7 +1784,7 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
17821784 var tx = g . select ( 'text.nums' ) ;
17831785 var anchor = d . anchor ;
17841786 var horzSign = anchor === 'end' ? - 1 : 1 ;
1785- var shiftX = getLabelShiftX ( d ) ;
1787+ var shiftX = getTextShiftX ( d ) ;
17861788 var offsets = getHoverLabelOffsets ( d , rotateLabels ) ;
17871789 var offsetX = offsets . x ;
17881790 var offsetY = offsets . y ;
@@ -1803,7 +1805,7 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
18031805 'V' + pY ( offsetY - HOVERARROWSIZE ) +
18041806 'Z' ) ) ;
18051807
1806- var posX = offsetX + shiftX . xx ;
1808+ var posX = offsetX + shiftX . textShiftX ;
18071809 var posY = offsetY + d . ty0 - d . by / 2 + HOVERTEXTPAD ;
18081810 var textAlign = d . textAlign || 'auto' ;
18091811
@@ -1826,11 +1828,11 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
18261828 if ( d . tx2width ) {
18271829 g . select ( 'text.name' )
18281830 . call ( svgTextUtils . positionText ,
1829- pX ( shiftX . x2x + shiftX . alignShift * HOVERTEXTPAD + offsetX ) ,
1831+ pX ( shiftX . text2ShiftX + shiftX . alignShift * HOVERTEXTPAD + offsetX ) ,
18301832 pY ( offsetY + d . ty0 - d . by / 2 + HOVERTEXTPAD ) ) ;
18311833 g . select ( 'rect' )
18321834 . call ( Drawing . setRect ,
1833- pX ( shiftX . x2x + ( shiftX . alignShift - 1 ) * d . tx2width / 2 + offsetX ) ,
1835+ pX ( shiftX . text2ShiftX + ( shiftX . alignShift - 1 ) * d . tx2width / 2 + offsetX ) ,
18341836 pY ( offsetY - d . by / 2 - 1 ) ,
18351837 pX ( d . tx2width ) , pY ( d . by + 2 ) ) ;
18361838 }
0 commit comments