@@ -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,6 +1884,10 @@ function initMargins(fullLayout) {
1881
1884
*/
1882
1885
plots . autoMargin = function ( gd , id , o ) {
1883
1886
var fullLayout = gd . _fullLayout ;
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 ) ;
1884
1891
1885
1892
var pushMargin = fullLayout . _pushmargin ;
1886
1893
var pushMarginIds = fullLayout . _pushmarginIds ;
@@ -1900,13 +1907,15 @@ plots.autoMargin = function(gd, id, o) {
1900
1907
1901
1908
// if the item is too big, just give it enough automargin to
1902
1909
// make sure you can still grab it and bring it back
1903
- if ( o . l + o . r > fullLayout . width * 0.5 ) {
1904
- Lib . log ( 'Margin push' , id , 'is too big in x, dropping' ) ;
1905
- o . l = o . r = 0 ;
1910
+ var rW = ( o . l + o . r ) / maxSpaceW ;
1911
+ if ( rW > 1 ) {
1912
+ o . l /= rW ;
1913
+ o . r /= rW ;
1906
1914
}
1907
- if ( o . b + o . t > fullLayout . height * 0.5 ) {
1908
- Lib . log ( 'Margin push' , id , 'is too big in y, dropping' ) ;
1909
- o . b = o . t = 0 ;
1915
+ var rH = ( o . t + o . b ) / maxSpaceH ;
1916
+ if ( rH > 1 ) {
1917
+ o . t /= rH ;
1918
+ o . b /= rH ;
1910
1919
}
1911
1920
1912
1921
var xl = o . xl !== undefined ? o . xl : o . x ;
@@ -1931,6 +1940,11 @@ plots.autoMargin = function(gd, id, o) {
1931
1940
1932
1941
plots . doAutoMargin = function ( gd ) {
1933
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
+
1934
1948
if ( ! fullLayout . _size ) fullLayout . _size = { } ;
1935
1949
initMargins ( fullLayout ) ;
1936
1950
@@ -1945,8 +1959,6 @@ plots.doAutoMargin = function(gd) {
1945
1959
var mr = margin . r ;
1946
1960
var mt = margin . t ;
1947
1961
var mb = margin . b ;
1948
- var width = fullLayout . width ;
1949
- var height = fullLayout . height ;
1950
1962
var pushMargin = fullLayout . _pushmargin ;
1951
1963
var pushMarginIds = fullLayout . _pushmarginIds ;
1952
1964
@@ -1978,11 +1990,10 @@ plots.doAutoMargin = function(gd) {
1978
1990
if ( isNumeric ( pl ) && pushMargin [ k2 ] . r ) {
1979
1991
var fr = pushMargin [ k2 ] . r . val ;
1980
1992
var pr = pushMargin [ k2 ] . r . size ;
1981
-
1982
1993
if ( fr > fl ) {
1983
1994
var newL = ( pl * fr + ( pr - width ) * fl ) / ( fr - fl ) ;
1984
1995
var newR = ( pr * ( 1 - fl ) + ( pl - width ) * ( 1 - fr ) ) / ( fr - fl ) ;
1985
- if ( newL >= 0 && newR >= 0 && width - ( newL + newR ) > 0 && newL + newR > ml + mr ) {
1996
+ if ( newL + newR > ml + mr ) {
1986
1997
ml = newL ;
1987
1998
mr = newR ;
1988
1999
}
@@ -1992,11 +2003,10 @@ plots.doAutoMargin = function(gd) {
1992
2003
if ( isNumeric ( pb ) && pushMargin [ k2 ] . t ) {
1993
2004
var ft = pushMargin [ k2 ] . t . val ;
1994
2005
var pt = pushMargin [ k2 ] . t . size ;
1995
-
1996
2006
if ( ft > fb ) {
1997
2007
var newB = ( pb * ft + ( pt - height ) * fb ) / ( ft - fb ) ;
1998
2008
var newT = ( pt * ( 1 - fb ) + ( pb - height ) * ( 1 - ft ) ) / ( ft - fb ) ;
1999
- if ( newB >= 0 && newT >= 0 && height - ( newT + newB ) > 0 && newB + newT > mb + mt ) {
2009
+ if ( newB + newT > mb + mt ) {
2000
2010
mb = newB ;
2001
2011
mt = newT ;
2002
2012
}
@@ -2006,6 +2016,18 @@ plots.doAutoMargin = function(gd) {
2006
2016
}
2007
2017
}
2008
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
+
2009
2031
gs . l = Math . round ( ml ) ;
2010
2032
gs . r = Math . round ( mr ) ;
2011
2033
gs . t = Math . round ( mt ) ;
0 commit comments