@@ -1866,8 +1866,13 @@ function initMargins(fullLayout) {
1866
1866
if ( ! fullLayout . _pushmarginIds ) fullLayout . _pushmarginIds = { } ;
1867
1867
}
1868
1868
1869
- var minFinalWidth = 64 ; // could possibly be exposed as layout.margin.minfinalwidth
1870
- var minFinalHeight = 64 ; // could possibly be exposed as layout.margin.minfinalheight
1869
+ // non-negotiable - this is the smallest height we will allow users to specify via explicit margins
1870
+ var MIN_SPECIFIED_WIDTH = 2 ;
1871
+ var MIN_SPECIFIED_HEIGHT = 2 ;
1872
+
1873
+ // could be exposed as an option - the smallest we will allow automargin to shrink a larger plot
1874
+ var MIN_REDUCED_WIDTH = 64 ;
1875
+ var MIN_REDUCED_HEIGHT = 64 ;
1871
1876
1872
1877
/**
1873
1878
* autoMargin: called by components that may need to expand the margins to
@@ -1888,36 +1893,53 @@ plots.autoMargin = function(gd, id, o) {
1888
1893
var fullLayout = gd . _fullLayout ;
1889
1894
var width = fullLayout . width ;
1890
1895
var height = fullLayout . height ;
1896
+ var margin = fullLayout . margin ;
1897
+
1898
+ var minFinalWidth = Lib . constrain (
1899
+ width - margin . l - margin . r ,
1900
+ MIN_SPECIFIED_WIDTH ,
1901
+ MIN_REDUCED_WIDTH
1902
+ ) ;
1903
+
1904
+ var minFinalHeight = Lib . constrain (
1905
+ height - margin . t - margin . b ,
1906
+ MIN_SPECIFIED_HEIGHT ,
1907
+ MIN_REDUCED_HEIGHT
1908
+ ) ;
1909
+
1891
1910
var maxSpaceW = Math . max ( 0 , width - minFinalWidth ) ;
1892
1911
var maxSpaceH = Math . max ( 0 , height - minFinalHeight ) ;
1893
1912
1894
1913
var pushMargin = fullLayout . _pushmargin ;
1895
1914
var pushMarginIds = fullLayout . _pushmarginIds ;
1896
1915
1897
- if ( fullLayout . margin . autoexpand !== false ) {
1916
+ if ( margin . autoexpand !== false ) {
1898
1917
if ( ! o ) {
1899
1918
delete pushMargin [ id ] ;
1900
1919
delete pushMarginIds [ id ] ;
1901
1920
} else {
1902
1921
var pad = o . pad ;
1903
1922
if ( pad === undefined ) {
1904
- var margin = fullLayout . margin ;
1905
1923
// if no explicit pad is given, use 12px unless there's a
1906
1924
// specified margin that's smaller than that
1907
1925
pad = Math . min ( 12 , margin . l , margin . r , margin . t , margin . b ) ;
1908
1926
}
1909
1927
1910
1928
// if the item is too big, just give it enough automargin to
1911
1929
// make sure you can still grab it and bring it back
1912
- var rW = ( o . l + o . r ) / maxSpaceW ;
1913
- if ( rW > 1 ) {
1914
- o . l /= rW ;
1915
- o . r /= rW ;
1930
+ if ( maxSpaceW ) {
1931
+ var rW = ( o . l + o . r ) / maxSpaceW ;
1932
+ if ( rW > 1 ) {
1933
+ o . l /= rW ;
1934
+ o . r /= rW ;
1935
+ }
1916
1936
}
1917
- var rH = ( o . t + o . b ) / maxSpaceH ;
1918
- if ( rH > 1 ) {
1919
- o . t /= rH ;
1920
- o . b /= rH ;
1937
+ if ( maxSpaceH ) {
1938
+ var rH = ( o . t + o . b ) / maxSpaceH ;
1939
+ if ( rH > 1 ) {
1940
+ o . t /= rH ;
1941
+ o . b /= rH ;
1942
+ }
1921
1943
}
1922
1944
1923
1945
var xl = o . xl !== undefined ? o . xl : o . x ;
@@ -1944,8 +1966,6 @@ plots.doAutoMargin = function(gd) {
1944
1966
var fullLayout = gd . _fullLayout ;
1945
1967
var width = fullLayout . width ;
1946
1968
var height = fullLayout . height ;
1947
- var maxSpaceW = Math . max ( 0 , width - minFinalWidth ) ;
1948
- var maxSpaceH = Math . max ( 0 , height - minFinalHeight ) ;
1949
1969
1950
1970
if ( ! fullLayout . _size ) fullLayout . _size = { } ;
1951
1971
initMargins ( fullLayout ) ;
@@ -2018,16 +2038,35 @@ plots.doAutoMargin = function(gd) {
2018
2038
}
2019
2039
}
2020
2040
2021
- var rW = ( ml + mr ) / maxSpaceW ;
2022
- if ( rW > 1 ) {
2023
- ml /= rW ;
2024
- mr /= rW ;
2041
+ var minFinalWidth = Lib . constrain (
2042
+ width - margin . l - margin . r ,
2043
+ MIN_SPECIFIED_WIDTH ,
2044
+ MIN_REDUCED_WIDTH
2045
+ ) ;
2046
+
2047
+ var minFinalHeight = Lib . constrain (
2048
+ height - margin . t - margin . b ,
2049
+ MIN_SPECIFIED_HEIGHT ,
2050
+ MIN_REDUCED_HEIGHT
2051
+ ) ;
2052
+
2053
+ var maxSpaceW = Math . max ( 0 , width - minFinalWidth ) ;
2054
+ var maxSpaceH = Math . max ( 0 , height - minFinalHeight ) ;
2055
+
2056
+ if ( maxSpaceW ) {
2057
+ var rW = ( ml + mr ) / maxSpaceW ;
2058
+ if ( rW > 1 ) {
2059
+ ml /= rW ;
2060
+ mr /= rW ;
2061
+ }
2025
2062
}
2026
2063
2027
- var rH = ( mb + mt ) / maxSpaceH ;
2028
- if ( rH > 1 ) {
2029
- mb /= rH ;
2030
- mt /= rH ;
2064
+ if ( maxSpaceH ) {
2065
+ var rH = ( mb + mt ) / maxSpaceH ;
2066
+ if ( rH > 1 ) {
2067
+ mb /= rH ;
2068
+ mt /= rH ;
2069
+ }
2031
2070
}
2032
2071
2033
2072
gs . l = Math . round ( ml ) ;
0 commit comments