@@ -3630,49 +3630,64 @@ $.elycharts.line = {
3630
3630
var labelsCenter = props . labelsCenter ;
3631
3631
if ( labelsCenter == 'auto' )
3632
3632
labelsCenter = ( env . indexCenter == 'bar' ) ;
3633
+ var hideLabelsUntilX = 0 ; // Used for labelsHideCovered
3633
3634
3634
3635
if ( axis . x && axis . x . props . labels )
3635
3636
for ( i = 0 ; i < labels . length ; i ++ )
3636
3637
if ( labels [ i ] ) {
3638
+
3637
3639
if ( axis . x . props . labelsSkip && i < axis . x . props . labelsSkip )
3638
3640
labels [ i ] = false ;
3639
3641
else if ( typeof labels [ i ] != 'boolean' || labels [ i ] ) {
3640
3642
val = labels [ i ] ;
3641
3643
if ( axis . x . props . labelsFormatHandler )
3642
3644
val = axis . x . props . labelsFormatHandler ( val ) ;
3643
3645
txt = ( axis . x . props . prefix ? axis . x . props . prefix : "" ) + labels [ i ] + ( axis . x . props . suffix ? axis . x . props . suffix : "" ) ;
3644
- labx = ( labelsCenter && axis . x . props . labelsAnchor != "start" ? Math . round ( deltaBarX / 2 ) : 0 ) + opt . margins [ 3 ] + i * ( labelsCenter ? deltaBarX : deltaX ) + ( axis . x . props . labelsMargin ? axis . x . props . labelsMargin : 0 ) ;
3646
+ labx = opt . margins [ 3 ] + i * ( labelsCenter ? deltaBarX : deltaX ) + ( axis . x . props . labelsMargin ? axis . x . props . labelsMargin : 0 ) ;
3645
3647
laby = opt . height - opt . margins [ 2 ] + axis . x . props . labelsDistance ;
3646
3648
labe = paper . text ( labx , laby , txt ) . attr ( axis . x . props . labelsProps ) . toBack ( ) ;
3647
- if ( axis . x . props . labelsRotate )
3648
- // Rotazione label
3649
- labe . attr ( { "text-anchor" : axis . x . props . labelsRotate > 0 ? "start" : "end" } ) . rotate ( axis . x . props . labelsRotate , labx , laby ) . toBack ( ) ;
3650
- else if ( props . nx == 'auto' && labx + labe . getBBox ( ) . width / ( axis . x . props . labelsAnchor && axis . x . props . labelsAnchor == "start" ? 1 : 2 ) > opt . width ) {
3651
- // Il label has overflow on the right => delete it (if nx = auto)
3652
- labe . hide ( ) ;
3653
- labels [ i ] = false ;
3654
- } else if ( props . nx == 'auto' && ( ! axis . x . props . labelsAnchor || axis . x . props . labelsAnchor != "start" ) && labx - labe . getBBox ( ) . width / 2 < 0 ) {
3655
- // Il label has overflow on the left => delete it (if nx = auto and labelsAnchor != start)
3656
- labe . hide ( ) ;
3657
- labels [ i ] = false ;
3658
- } else if ( axis . x . props . labelsAnchor && axis . x . props . labelsAnchor == "start" ) {
3649
+ var startlabe , endlabe ; // Used for labelsHideCovered
3650
+ if ( axis . x . props . labelsAnchor && axis . x . props . labelsAnchor == "start" ) {
3659
3651
// label not rotated buth with a labelsAnchor
3660
3652
labe . attr ( { "text-anchor" : "start" } ) ;
3661
- lw = labe . getBBox ( ) . width + ( axis . x . props . labelsMargin ? axis . x . props . labelsMargin : 0 ) + ( axis . x . props . labelsMarginRight ? axis . x . props . labelsMarginRight : 0 ) - ( labelsCenter ? deltaBarX : deltaX ) ;
3662
- if ( axis . x . props . labelsHideCovered && lw > 0 ) {
3663
- j = i + Math . ceil ( lw / ( labelsCenter ? deltaBarX : deltaX ) ) ;
3664
- for ( ; i < j && i + 1 < labels . length ; i ++ )
3665
- labels [ i + 1 ] = false ;
3666
- }
3667
- } else if ( axis . x . props . labelsHideCovered ) {
3668
- // Manages labelsHideCovered with labelsAnchor != 'start'
3669
- lw = ( labe . getBBox ( ) . width + ( axis . x . props . labelsMargin ? axis . x . props . labelsMargin : 0 ) + ( axis . x . props . labelsMarginRight ? axis . x . props . labelsMarginRight : 0 ) ) / 1 - ( labelsCenter ? deltaBarX : deltaX ) ;
3670
- if ( lw > 0 ) {
3671
- j = i + Math . ceil ( lw / ( labelsCenter ? deltaBarX : deltaX ) ) ;
3672
- for ( ; i < j && i + 1 < labels . length ; i ++ )
3673
- labels [ i + 1 ] = false ;
3674
- }
3653
+ startlabe = labx ;
3654
+ endlabe = labx + labe . getBBox ( ) . width + ( axis . x . props . labelsMargin ? axis . x . props . labelsMargin : 0 ) + ( axis . x . props . labelsMarginRight ? axis . x . props . labelsMarginRight : 0 ) ;
3655
+ } else {
3656
+ // Manages labelsHideCovered with labelsAnchor = 'middle' (default)
3657
+ var deltalabe = ( labe . getBBox ( ) . width + ( axis . x . props . labelsMargin ? axis . x . props . labelsMargin : 0 ) + ( axis . x . props . labelsMarginRight ? axis . x . props . labelsMarginRight : 0 ) ) / 2 ;
3658
+ startlabe = labx - deltalabe ;
3659
+ endlabe = labx + deltalabe ;
3660
+ }
3661
+
3662
+ //console.warn(txt, labx, startlabe, endlabe, labe.getBBox().width, hideLabelsUntilX);
3663
+
3664
+ if ( axis . x . props . labelsRotate ) {
3665
+ // Rotazione label (disable labelsHideCovered)
3666
+ labe . attr ( { "text-anchor" : axis . x . props . labelsRotate > 0 ? "start" : "end" } ) . rotate ( axis . x . props . labelsRotate , labx , laby ) . toBack ( ) ;
3667
+ startlabe = - 9999 ;
3668
+ endlabe = - 9999 ;
3675
3669
}
3670
+
3671
+ // Manage label overflow
3672
+ if ( startlabe > - 9999 && props . nx == 'auto' ) {
3673
+ if ( endlabe > opt . width )
3674
+ // Il label has overflow on the right => delete it (if nx = auto)
3675
+ labels [ i ] = false ;
3676
+ else if ( startlabe < 0 )
3677
+ // Il label has overflow on the left => delete it (if nx = auto and labelsAnchor != start)
3678
+ labels [ i ] = false ;
3679
+ }
3680
+
3681
+ // Manage labelsHideCovered
3682
+ if ( labels [ i ] != false && axis . x . props . labelsHideCovered && endlabe > 0 ) {
3683
+ if ( hideLabelsUntilX == 0 || startlabe > hideLabelsUntilX )
3684
+ hideLabelsUntilX = endlabe ;
3685
+ else
3686
+ labels [ i ] = false ;
3687
+ }
3688
+ if ( labels [ i ] == false )
3689
+ labe . hide ( ) ;
3690
+
3676
3691
paths . push ( { path : [ [ 'RELEMENT' , labe ] ] , attr : false } ) ;
3677
3692
}
3678
3693
}
0 commit comments