@@ -1864,6 +1864,9 @@ function initMargins(fullLayout) {
1864
1864
if ( ! fullLayout . _pushmarginIds ) fullLayout . _pushmarginIds = { } ;
1865
1865
}
1866
1866
1867
+ var minFinalWidth = 64 ; // could possibly be exposed as layout.margin.minfinalwidth
1868
+ var minFinalHeight = 64 ; // could possibly be exposed as layout.margin.minfinalheight
1869
+
1867
1870
/**
1868
1871
* autoMargin: called by components that may need to expand the margins to
1869
1872
* be rendered on-plot.
@@ -1881,12 +1884,10 @@ function initMargins(fullLayout) {
1881
1884
*/
1882
1885
plots . autoMargin = function ( gd , id , o ) {
1883
1886
var fullLayout = gd . _fullLayout ;
1884
- var minFinalWidth = Math . max ( 0 , fullLayout . width -
1885
- 64 // TODO: could be exposed as layout.margin.minfinalwidth
1886
- ) ;
1887
- var minFinalHeight = Math . max ( 0 , fullLayout . height -
1888
- 64 // TODO: could be exposed as layout.margin.minfinalheight
1889
- ) ;
1887
+ var width = fullLayout . width ;
1888
+ var height = fullLayout . height ;
1889
+ var maxSpaceW = Math . max ( 0 , width - minFinalWidth ) ;
1890
+ var maxSpaceH = Math . max ( 0 , height - minFinalHeight ) ;
1890
1891
1891
1892
var pushMargin = fullLayout . _pushmargin ;
1892
1893
var pushMarginIds = fullLayout . _pushmarginIds ;
@@ -1906,15 +1907,13 @@ plots.autoMargin = function(gd, id, o) {
1906
1907
1907
1908
// if the item is too big, just give it enough automargin to
1908
1909
// make sure you can still grab it and bring it back
1909
- var rW = ( o . l + o . r ) / minFinalWidth ;
1910
+ var rW = ( o . l + o . r ) / maxSpaceW ;
1910
1911
if ( rW > 1 ) {
1911
- Lib . log ( 'Margin push' , id , 'is too big in x, adjusting' ) ;
1912
1912
o . l /= rW ;
1913
1913
o . r /= rW ;
1914
1914
}
1915
- var rH = ( o . t + o . b ) / minFinalHeight ;
1915
+ var rH = ( o . t + o . b ) / maxSpaceH ;
1916
1916
if ( rH > 1 ) {
1917
- Lib . log ( 'Margin push' , id , 'is too big in y, adjusting' ) ;
1918
1917
o . t /= rH ;
1919
1918
o . b /= rH ;
1920
1919
}
@@ -1941,6 +1940,11 @@ plots.autoMargin = function(gd, id, o) {
1941
1940
1942
1941
plots . doAutoMargin = function ( gd ) {
1943
1942
var fullLayout = gd . _fullLayout ;
1943
+ var width = fullLayout . width ;
1944
+ var height = fullLayout . height ;
1945
+ var maxSpaceW = Math . max ( 0 , width - minFinalWidth ) ;
1946
+ var maxSpaceH = Math . max ( 0 , height - minFinalHeight ) ;
1947
+
1944
1948
if ( ! fullLayout . _size ) fullLayout . _size = { } ;
1945
1949
initMargins ( fullLayout ) ;
1946
1950
@@ -1955,8 +1959,6 @@ plots.doAutoMargin = function(gd) {
1955
1959
var mr = margin . r ;
1956
1960
var mt = margin . t ;
1957
1961
var mb = margin . b ;
1958
- var width = fullLayout . width ;
1959
- var height = fullLayout . height ;
1960
1962
var pushMargin = fullLayout . _pushmargin ;
1961
1963
var pushMarginIds = fullLayout . _pushmarginIds ;
1962
1964
@@ -1988,11 +1990,10 @@ plots.doAutoMargin = function(gd) {
1988
1990
if ( isNumeric ( pl ) && pushMargin [ k2 ] . r ) {
1989
1991
var fr = pushMargin [ k2 ] . r . val ;
1990
1992
var pr = pushMargin [ k2 ] . r . size ;
1991
-
1992
1993
if ( fr > fl ) {
1993
1994
var newL = ( pl * fr + ( pr - width ) * fl ) / ( fr - fl ) ;
1994
1995
var newR = ( pr * ( 1 - fl ) + ( pl - width ) * ( 1 - fr ) ) / ( fr - fl ) ;
1995
- if ( newL >= 0 && newR >= 0 && width - ( newL + newR ) > 0 && newL + newR > ml + mr ) {
1996
+ if ( newL + newR > ml + mr ) {
1996
1997
ml = newL ;
1997
1998
mr = newR ;
1998
1999
}
@@ -2002,11 +2003,10 @@ plots.doAutoMargin = function(gd) {
2002
2003
if ( isNumeric ( pb ) && pushMargin [ k2 ] . t ) {
2003
2004
var ft = pushMargin [ k2 ] . t . val ;
2004
2005
var pt = pushMargin [ k2 ] . t . size ;
2005
-
2006
2006
if ( ft > fb ) {
2007
2007
var newB = ( pb * ft + ( pt - height ) * fb ) / ( ft - fb ) ;
2008
2008
var newT = ( pt * ( 1 - fb ) + ( pb - height ) * ( 1 - ft ) ) / ( ft - fb ) ;
2009
- if ( newB >= 0 && newT >= 0 && height - ( newT + newB ) > 0 && newB + newT > mb + mt ) {
2009
+ if ( newB + newT > mb + mt ) {
2010
2010
mb = newB ;
2011
2011
mt = newT ;
2012
2012
}
@@ -2016,6 +2016,18 @@ plots.doAutoMargin = function(gd) {
2016
2016
}
2017
2017
}
2018
2018
2019
+ var rW = ( ml + mr ) / maxSpaceW ;
2020
+ if ( rW > 1 ) {
2021
+ ml /= rW ;
2022
+ mr /= rW ;
2023
+ }
2024
+
2025
+ var rH = ( mb + mt ) / maxSpaceH ;
2026
+ if ( rH > 1 ) {
2027
+ mb /= rH ;
2028
+ mt /= rH ;
2029
+ }
2030
+
2019
2031
gs . l = Math . round ( ml ) ;
2020
2032
gs . r = Math . round ( mr ) ;
2021
2033
gs . t = Math . round ( mt ) ;
0 commit comments