@@ -1549,20 +1549,20 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
1549
1549
}
1550
1550
var pmin = 0 ;
1551
1551
var pmax = ( axIsX ? fullLayout . width : fullLayout . height ) ;
1552
+ // in hovermode avoid overlap between hover labels and axis label
1552
1553
if ( fullLayout . hovermode === 'x' || fullLayout . hovermode === 'y' ) {
1553
1554
// extent of rect behind hover label on cross axis (without arrow):
1554
1555
var offsets = getHoverLabelOffsets ( d , rotateLabels ) ;
1555
- var shiftX = getLabelShiftX ( d ) ;
1556
+ var shiftX = getTextShiftX ( d ) ;
1556
1557
// 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 ;
1558
1559
var offsetRectY = ( offsets . y - d . by / 2 - 1 ) * fullLayout . _invScaleY ;
1559
1560
1560
1561
var labelMin = d . crossPos + ( axIsX ? offsetRectY : offsetRectX ) ;
1561
1562
var labelMax = labelMin + ( axIsX ? d . tx2width * fullLayout . _invScaleX : ( d . by + 2 ) * fullLayout . _invScaleY ) ;
1562
1563
if ( axIsX ) {
1563
- // at least 1 pixel overlap
1564
1564
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
1566
1566
if ( crossAx . side === 'left' ) {
1567
1567
pmin = crossAx . _mainLinePosition ;
1568
1568
pmax = fullLayout . width ;
@@ -1571,9 +1571,8 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
1571
1571
}
1572
1572
}
1573
1573
} else {
1574
- // at least 1 pixel overlap
1575
1574
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
1577
1576
if ( crossAx . side === 'top' ) {
1578
1577
pmin = crossAx . _mainLinePosition ;
1579
1578
pmax = fullLayout . height ;
@@ -1751,21 +1750,24 @@ function getHoverLabelOffsets(hoverLabel, rotateLabels) {
1751
1750
} ;
1752
1751
}
1753
1752
1754
- function getLabelShiftX ( hoverLabel ) {
1753
+ /**
1754
+ * Calculate the shift in x for text and text2 elements
1755
+ */
1756
+ function getTextShiftX ( hoverLabel ) {
1755
1757
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 ) ;
1758
1760
1759
1761
var isMiddle = hoverLabel . anchor === 'middle' ;
1760
1762
if ( isMiddle ) {
1761
- txx -= hoverLabel . tx2width / 2 ;
1762
- tx2x += hoverLabel . txwidth / 2 + HOVERTEXTPAD ;
1763
+ textShiftX -= hoverLabel . tx2width / 2 ;
1764
+ text2ShiftX += hoverLabel . txwidth / 2 + HOVERTEXTPAD ;
1763
1765
}
1764
1766
1765
1767
return {
1766
1768
alignShift : alignShift ,
1767
- xx : txx ,
1768
- x2x : tx2x
1769
+ textShiftX : textShiftX ,
1770
+ text2ShiftX : text2ShiftX
1769
1771
} ;
1770
1772
}
1771
1773
@@ -1782,7 +1784,7 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
1782
1784
var tx = g . select ( 'text.nums' ) ;
1783
1785
var anchor = d . anchor ;
1784
1786
var horzSign = anchor === 'end' ? - 1 : 1 ;
1785
- var shiftX = getLabelShiftX ( d ) ;
1787
+ var shiftX = getTextShiftX ( d ) ;
1786
1788
var offsets = getHoverLabelOffsets ( d , rotateLabels ) ;
1787
1789
var offsetX = offsets . x ;
1788
1790
var offsetY = offsets . y ;
@@ -1803,7 +1805,7 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
1803
1805
'V' + pY ( offsetY - HOVERARROWSIZE ) +
1804
1806
'Z' ) ) ;
1805
1807
1806
- var posX = offsetX + shiftX . xx ;
1808
+ var posX = offsetX + shiftX . textShiftX ;
1807
1809
var posY = offsetY + d . ty0 - d . by / 2 + HOVERTEXTPAD ;
1808
1810
var textAlign = d . textAlign || 'auto' ;
1809
1811
@@ -1826,11 +1828,11 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
1826
1828
if ( d . tx2width ) {
1827
1829
g . select ( 'text.name' )
1828
1830
. call ( svgTextUtils . positionText ,
1829
- pX ( shiftX . x2x + shiftX . alignShift * HOVERTEXTPAD + offsetX ) ,
1831
+ pX ( shiftX . text2ShiftX + shiftX . alignShift * HOVERTEXTPAD + offsetX ) ,
1830
1832
pY ( offsetY + d . ty0 - d . by / 2 + HOVERTEXTPAD ) ) ;
1831
1833
g . select ( 'rect' )
1832
1834
. 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 ) ,
1834
1836
pY ( offsetY - d . by / 2 - 1 ) ,
1835
1837
pX ( d . tx2width ) , pY ( d . by + 2 ) ) ;
1836
1838
}
0 commit comments