@@ -3020,8 +3020,6 @@ axes.drawLabels = function(gd, ax, opts) {
30203020 }
30213021
30223022 function positionLabels ( s , angle ) {
3023- var isInside = insideTicklabelposition ( ax ) ;
3024-
30253023 s . each ( function ( d ) {
30263024 var thisLabel = d3 . select ( this ) ;
30273025 var mathjaxGroup = thisLabel . select ( '.text-math-group' ) ;
@@ -3049,12 +3047,10 @@ axes.drawLabels = function(gd, ax, opts) {
30493047 'text-anchor' : anchor
30503048 } ) ;
30513049
3052- if ( isInside ) {
3053- thisText . style ( 'opacity' , 1 ) ; // visible
3050+ thisText . style ( 'opacity' , 1 ) ; // visible
30543051
3055- if ( ax . _hideOutOfRangeInsideTickLabels ) {
3056- ax . _hideOutOfRangeInsideTickLabels ( ) ;
3057- }
3052+ if ( ax . _adjustTickLabelsOverflow ) {
3053+ ax . _adjustTickLabelsOverflow ( ) ;
30583054 }
30593055 } else {
30603056 var mjWidth = Drawing . bBox ( mathjaxGroup . node ( ) ) . width ;
@@ -3064,63 +3060,73 @@ axes.drawLabels = function(gd, ax, opts) {
30643060 } ) ;
30653061 }
30663062
3067- ax . _hideOutOfRangeInsideTickLabels = function ( ) {
3068- if ( insideTicklabelposition ( ax ) ) {
3063+ ax . _adjustTickLabelsOverflow = function ( ) {
3064+ var ticklabeloverflow = ax . ticklabeloverflow ;
3065+ if ( ! ticklabeloverflow || ticklabeloverflow === 'allow' ) return ;
3066+
3067+ var hideOverflow = ticklabeloverflow . indexOf ( 'hide' ) !== - 1 ;
3068+
3069+ var isX = ax . _id . charAt ( 0 ) === 'x' ;
3070+ // div positions
3071+ var p0 = 0 ;
3072+ var p1 = isX ?
3073+ gd . _fullLayout . width :
3074+ gd . _fullLayout . height ;
3075+
3076+ if ( ticklabeloverflow . indexOf ( 'domain' ) !== - 1 ) {
3077+ // domain positions
30693078 var rl = Lib . simpleMap ( ax . range , ax . r2l ) ;
3079+ p0 = ax . l2p ( rl [ 0 ] ) + ax . _offset ;
3080+ p1 = ax . l2p ( rl [ 1 ] ) + ax . _offset ;
3081+ }
30703082
3071- // hide inside tick labels that go outside axis end points
3072- var p0 = ax . l2p ( rl [ 0 ] ) ;
3073- var p1 = ax . l2p ( rl [ 1 ] ) ;
3083+ var min = Math . min ( p0 , p1 ) ;
3084+ var max = Math . max ( p0 , p1 ) ;
30743085
3075- var min = Math . min ( p0 , p1 ) + ax . _offset ;
3076- var max = Math . max ( p0 , p1 ) + ax . _offset ;
3086+ var side = ax . side ;
30773087
3078- var side = ax . side ;
3079- var isX = ax . _id . charAt ( 0 ) === 'x' ;
3088+ var visibleLabelMin = Infinity ;
3089+ var visibleLabelMax = - Infinity ;
30803090
3081- var visibleLabelMin = Infinity ;
3082- var visibleLabelMax = - Infinity ;
3091+ tickLabels . each ( function ( d ) {
3092+ var thisLabel = d3 . select ( this ) ;
3093+ var mathjaxGroup = thisLabel . select ( '.text-math-group' ) ;
30833094
3084- tickLabels . each ( function ( d ) {
3085- var thisLabel = d3 . select ( this ) ;
3086- var mathjaxGroup = thisLabel . select ( '.text-math-group' ) ;
3087-
3088- if ( mathjaxGroup . empty ( ) ) {
3089- var bb = Drawing . bBox ( thisLabel . node ( ) ) ;
3090- var hide = false ;
3091- if ( isX ) {
3092- if ( bb . right > max ) hide = true ;
3093- else if ( bb . left < min ) hide = true ;
3095+ if ( mathjaxGroup . empty ( ) ) {
3096+ var bb = Drawing . bBox ( thisLabel . node ( ) ) ;
3097+ var adjust = 0 ;
3098+ if ( isX ) {
3099+ if ( bb . right > max ) adjust = 1 ;
3100+ else if ( bb . left < min ) adjust = 1 ;
3101+ } else {
3102+ if ( bb . bottom > max ) adjust = 1 ;
3103+ else if ( bb . top + ( ax . tickangle ? 0 : d . fontSize / 4 ) < min ) adjust = 1 ;
3104+ }
3105+
3106+ var t = thisLabel . select ( 'text' ) ;
3107+ if ( adjust ) {
3108+ if ( hideOverflow ) t . style ( 'opacity' , 0 ) ; // hidden
3109+ } else {
3110+ t . style ( 'opacity' , 1 ) ; // visible
3111+
3112+ if ( side === 'bottom' || side === 'right' ) {
3113+ visibleLabelMin = Math . min ( visibleLabelMin , isX ? bb . top : bb . left ) ;
30943114 } else {
3095- if ( bb . bottom > max ) hide = true ;
3096- else if ( bb . top + ( ax . tickangle ? 0 : d . fontSize / 4 ) < min ) hide = true ;
3115+ visibleLabelMin = - Infinity ;
30973116 }
30983117
3099- var t = thisLabel . select ( 'text' ) ;
3100- if ( hide ) {
3101- t . style ( 'opacity' , 0 ) ; // hidden
3118+ if ( side === 'top' || side === 'left' ) {
3119+ visibleLabelMax = Math . max ( visibleLabelMax , isX ? bb . bottom : bb . right ) ;
31023120 } else {
3103- t . style ( 'opacity' , 1 ) ; // visible
3104-
3105- if ( side === 'bottom' || side === 'right' ) {
3106- visibleLabelMin = Math . min ( visibleLabelMin , isX ? bb . top : bb . left ) ;
3107- } else {
3108- visibleLabelMin = - Infinity ;
3109- }
3110-
3111- if ( side === 'top' || side === 'left' ) {
3112- visibleLabelMax = Math . max ( visibleLabelMax , isX ? bb . bottom : bb . right ) ;
3113- } else {
3114- visibleLabelMax = Infinity ;
3115- }
3121+ visibleLabelMax = Infinity ;
31163122 }
3117- } // TODO: hide mathjax?
3118- } ) ;
3123+ }
3124+ } // TODO: hide mathjax?
3125+ } ) ;
31193126
3120- if ( ax . _anchorAxis ) {
3121- ax . _anchorAxis . _visibleLabelMin = visibleLabelMin ;
3122- ax . _anchorAxis . _visibleLabelMax = visibleLabelMax ;
3123- }
3127+ if ( ax . _anchorAxis ) {
3128+ ax . _anchorAxis . _visibleLabelMin = visibleLabelMin ;
3129+ ax . _anchorAxis . _visibleLabelMax = visibleLabelMax ;
31243130 }
31253131 } ;
31263132
0 commit comments