@@ -2010,13 +2010,6 @@ plots.doAutoMargin = function(gd) {
2010
2010
var reservedMargins = { t : 0 , b : 0 , l : 0 , r : 0 } ;
2011
2011
var oldMargins = Lib . extendFlat ( { } , gs ) ;
2012
2012
2013
- var margins = gd . _fullLayout . _reservedMargin ;
2014
- for ( var key in margins ) {
2015
- for ( var side in margins [ key ] ) {
2016
- var val = margins [ key ] [ side ] ;
2017
- reservedMargins [ side ] = Math . max ( reservedMargins [ side ] , val ) ;
2018
- }
2019
- }
2020
2013
// adjust margins for outside components
2021
2014
// fullLayout.margin is the requested margin,
2022
2015
// fullLayout._size has margins and plotsize after adjustment
@@ -2029,11 +2022,18 @@ plots.doAutoMargin = function(gd) {
2029
2022
var minreducedwidth = fullLayout . minreducedwidth ;
2030
2023
var minreducedheight = fullLayout . minreducedheight ;
2031
2024
2032
- if ( fullLayout . margin . autoexpand !== false ) {
2025
+ if ( margin . autoexpand !== false ) {
2033
2026
for ( var k in pushMargin ) {
2034
2027
if ( ! pushMarginIds [ k ] ) delete pushMargin [ k ] ;
2035
2028
}
2036
2029
2030
+ var margins = gd . _fullLayout . _reservedMargin ;
2031
+ for ( var key in margins ) {
2032
+ for ( var side in margins [ key ] ) {
2033
+ var val = margins [ key ] [ side ] ;
2034
+ reservedMargins [ side ] = Math . max ( reservedMargins [ side ] , val ) ;
2035
+ }
2036
+ }
2037
2037
// fill in the requested margins
2038
2038
pushMargin . base = {
2039
2039
l : { val : 0 , size : ml } ,
@@ -2042,9 +2042,23 @@ plots.doAutoMargin = function(gd) {
2042
2042
b : { val : 0 , size : mb }
2043
2043
} ;
2044
2044
2045
+
2046
+ // make sure that the reservedMargin is the minimum needed
2047
+ for ( var s in reservedMargins ) {
2048
+ var autoMarginPush = 0 ;
2049
+ for ( var m in pushMargin ) {
2050
+ if ( m !== 'base' ) {
2051
+ if ( isNumeric ( pushMargin [ m ] [ s ] . size ) ) {
2052
+ autoMarginPush = pushMargin [ m ] [ s ] . size > autoMarginPush ? pushMargin [ m ] [ s ] . size : autoMarginPush ;
2053
+ }
2054
+ }
2055
+ }
2056
+ var extraMargin = Math . max ( 0 , ( margin [ s ] - autoMarginPush ) ) ;
2057
+ reservedMargins [ s ] = Math . max ( 0 , reservedMargins [ s ] - extraMargin ) ;
2058
+ }
2059
+
2045
2060
// now cycle through all the combinations of l and r
2046
2061
// (and t and b) to find the required margins
2047
-
2048
2062
for ( var k1 in pushMargin ) {
2049
2063
var pushleft = pushMargin [ k1 ] . l || { } ;
2050
2064
var pushbottom = pushMargin [ k1 ] . b || { } ;
0 commit comments