From 6c7db5e2092efec967aca83f9aef1645aceb763f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 4 Mar 2019 16:47:38 -0500 Subject: [PATCH 1/6] fix #3579 - consider tick labels to go past plot area ... in axis automargin computations. Add two mocks to lock this down! --- src/plots/cartesian/axes.js | 24 ++++ .../baselines/automargin-push-x-extra.png | Bin 0 -> 47791 bytes .../baselines/automargin-push-y-extra.png | Bin 0 -> 42035 bytes test/image/mocks/automargin-push-x-extra.json | 109 ++++++++++++++++++ test/image/mocks/automargin-push-y-extra.json | 109 ++++++++++++++++++ 5 files changed, 242 insertions(+) create mode 100644 test/image/baselines/automargin-push-x-extra.png create mode 100644 test/image/baselines/automargin-push-y-extra.png create mode 100644 test/image/mocks/automargin-push-x-extra.json create mode 100644 test/image/mocks/automargin-push-y-extra.json diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index 9c266949bc8..1e0fee8609e 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -1984,6 +1984,30 @@ axes.drawOne = function(gd, ax, opts) { if(ax.title.text !== fullLayout._dfltTitle[axLetter]) { push[s] += ax.title.font.size; } + + if(axLetter === 'x' && bbox.width > 0) { + var rExtra = bbox.right - (ax._offset + ax._length); + if(rExtra > 0) { + push.x = 1; + push.r = rExtra; + } + var lExtra = ax._offset - bbox.left; + if(lExtra > 0) { + push.x = 0; + push.l = lExtra; + } + } else if(axLetter === 'y' && bbox.height > 0) { + var bExtra = bbox.bottom - (ax._offset + ax._length); + if(bExtra > 0) { + push.y = 0; + push.b = bExtra; + } + var tExtra = ax._offset - bbox.top; + if(tExtra > 0) { + push.y = 1; + push.t = tExtra; + } + } } Plots.autoMargin(gd, axAutoMarginID(ax), push); diff --git a/test/image/baselines/automargin-push-x-extra.png b/test/image/baselines/automargin-push-x-extra.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7488acec41ba50ed7dfccaa6b17325de46a8d5 GIT binary patch literal 47791 zcmb5WWk8kB6E=*5fJlo-N+aFfDTrX8beD9;0qGR!kU9t=B}#X9cc;VwDd}!__uxrOZ;N$%Jhfl671s%-ed_8+_W&_+45UW1V2hDrlJH8W%Z5d#nD-^|B(UrI7O9t*C?>nixjuRIReIRj z_&+iI#d#@lVs@>kicx;3^zoR^lw0xU>000-GDzulgp+j+40Ir23wu+C z^CPhgD%zK>o0Z-0;pd_MT|5l?v>Prch4Q`Lq2{!zf|h)vZZka5%U!Aak3~sQ$s8lu zHs-4wvMDb!72=QE$is5As_q0^ByN;a~>z!r1qVZ{2RF?h4Y>lZC3FX52nIMShb)0F#&;4 zakXZW7bfveb=0z<;srW&wwHSy^q7GlvKM_(}-a3Q;fVq}&>AuHOq^pDvxA zZxq-q_@I7$_KC4_IZpFsmA$d<;xGF3WlGlZvJ|^^q6AS7!D{ENkLO1l^qcfutn-eA z+sCCNN-ZQdwfe`(L0Du4)1lJNM26&OpMgA-%Ot#(jo4zBdW#QUY^FzPpLYxp?cBvA zUikha|KoZ#>)$gI*@xy&Tbs*fbeBnm2uXei|Any6#ZJRKVW>*3n$P>4x`|P~@gJ%K zgivnD=4Q*o)?j=Qeko3gTkzLLk{t3gm!92BJE9Ft5Vy;$)JT1tr5EI=O;ThmbPNr@3+cK#M-E`k3(LW z_OW)cD&U+NZ|2u*bLvv?gLN9oad$bEO6Wd{Fg3ofb<*gAgqawAL`r`@)cV0+F-o8_+kjZOK-S3){G$%Jsgy>8-4XOQFZ&W#BNEJnnQ*(TzJ3J|B8mv zKn1Gal^!8FJ*i%76x?;(MrGPYpP6?D>Fy&U7QDI;w))DKN+G%s^NIW|1$9)bhLgGX z5O8>3<-Df#^NE*mWo0C|Jf5*x!9ec1mZ$%0R4=~Ef_!53)i0BhfbmV^&DH!35q{{^ zCsm!`cPXxPCM$4G~8BXN4rt<81X}Btp!ONLn=wxSO5jVZBNJ`dyKIeX*sBF?Cs2r^|K0~Kr`22OxBazG9mi8CzsYyexEKsm8Q$Sh?4LtWtqu6e^akL)du5~KGEa> zRn4BP#02^sct8`+r^MlE>Dhc}aYw!3tfJwnPu2aBs>bo7x@a6a`;T`eS)Tko!w7ip z`KcN4>Q;D^cuhvA@@!j?2qNce>GH;kuEVKDu|)6io|@pjKi&-HFl?uJ-g_n!q%8K|b z(=jKW{)&0=oS|7ih%D}ddU}$?Vy`SKX$T=3uet}`Ldk%r5G6G3i-IJ({;6a7pD1r6 zfXIQ)HnH>ZaDM@FL;vdgl#_&;I&l-yi(FOX3l+Qv(cRLV?QJK~EQa57>Z;E;CG0=- z>K#XBY*sFXbG2@MWXczZ@>)f61W)L^@9VVVP`CzmG7-!B)3yaue#+5~Yw4hqIwC>J z>CJ$i00!4u*ZpW6Mh12zcg?|KV+AeyE?V>$({oAAevbj9kELCfCwUcf=H2|!L~IS0 z#SDDU=nhhPFRNAmo~uaQ4U3q2MFdFGNv_p1RvWu3RU9|xA2=`0-7 zlbVP%OdcgRDV3Kt%4}*+($upW>@;VEOx6?<4V0u={KZ!p_;+6T^F^oU+GMD#Zxl3G z|N3!io-$jfCYEISlr>s~+>**CqkqFVUOO;e$F0lAYU(*<6s(y}_f^co@WADzJM~N% zzzofT!_t?I`XeSeQ<2{4vnqKSM5JdjzD3U*D?ij>K>y91xaK+J@fRo!`-s2xj}OX| zOOQJ~{TPc{@Qq%<;Msn>TpqoyLJ4`)(YI20b>{K2{W3v|$2si_PL+jS_gT3zdQG^X zz0M`V#sf*Z-FkZu8YTkovsy-P*4|uSWF0)DolZ!j5403-B38wlr&COV1dNiF9ta(? zT2}v)Wi{+8$zK&9Bl!5Evvr}PKOte;brhIM-1o+Rk$gZSRuY&-i(+Y`fH?w?m5dhe zhMFs93M%Bu{y;HWib?ie#$ei;&-5!>w)!#AhOxnmcQQ@=ELOjivst*wJG0g9N>cmD z9HEa3&H#N`B)TSq9z11&F7OCjnvlp2+H^Z=d!8+4b#=tN5LJhWb#d^7xDK);NhidE zJ(AbbZk-EIBrI~#=bF2E;GL>&FYy;ozeC2OtA&{us3X+I_7`GT{_7*zgyrsG9lCKGk%ycY9nLjz@LBAevruVP zERma}-tA$Tj}A9Ph@PW;7II;I6G%}XifK_e#hPeuq$67ie>qj_pGb*UzlGecpAq~+_agYoQ1QN@vPdtd0>a+*q2!GNPQa^iIms!7eKLyz^F7JAgg~ z(mdK4oqTFFf~S1%MC@o(IqR4|%FoW@;+RJ;FE`jpe%-DoIBZ!K4NlVZe~5U!drAUj9t?+@deIcrk(T_W<)C*5l1lN(Cm2*XOR6 zwH{ty?C`O8o%M`uSlIhEO>2{vQzbg;bHyeU8*eW~h;3JG`g#`Ue+p`p`|aA;AC2E& z8GXuCqTmj&kd4Obeh&(Enk$j;n~v9aP5P!jg&N=IP48o)v(#!tg6IT=iCE-bmFHYN z_<8lqDRs^5-!_PYZBSr&U2nch$zY-{?~E<*3nwOxOu*hKN*0ag!yCgd{_3TEmco^? zXY{qG7H6?pXm5>4+L7DiBR%`%%lP*D zqjlD3I^K|lAKNk^4~Ybrq7|Jp1+NZA>_!y%WR9i+6qPzvN@y5V(!R*?1t;oC zO`$y4UtPz>fXz>-;OUw4owfNS+CQs&MQjBUNm=8s0Ltksa0@nzygzOQ`K+boK&se$ zq~ zsolw}3(0;0+7y`ds0}1^oXE)<4K$E4i;26~E>V}XlFr(bzXJ7ElDG8NAD1~X$hYI6 zoOedwFEEPdO?6!%QfBH)(usaI-dj9Fge|A-ww{^NmCy7)pT2G`mbr);zw$SsSwOjy z?H_+sG5UU4A`1zNzj1VtPRhB8osjqJ0})Ka=Xl36a(2;W`y?8!P9Y&)Tp#`u;K%6b}&@sB1ws$xbvU-TjD)r8z+HS*jwG zmnDreP|mZuunWn{5|(UAB*m}Gpf1aEw>!l(Zz`itwZM@(SS6QlgF*DbyF4j^%=;zfS!uGDMy8ys$cOOUb+! zOHkrh5R?-^VjUTKFlT#S&T9GE$tQ7|fJr4`+c6d+q~nE-)X#6dFWo`p6M%T{)Sb+6 z{U*shDEmk-v>Uqej+3`6wRz_iVbP0rlkc99X5@dR8N!hxf`$ER1v#QkaSlx;Dmmm! z6id1Wg615YelQ*U;v*opY|O4Hg;C^h-v$}TGV9@ zRo87HgoM0tYUP%RT?WNf(lqwu{a!#7*l&4E`jgG-BO^@@a0r%H<%AQ<-qF{Yx^=_c zo%EG27`TpO;@`dapLIU;DaF$BR2BzGe}}rX6<+Y zp^jQ*9AGhgt;}Btu4hOVD@-xtEkZQrIH3v*9KVOAC7PejYIKK3l}2r{YE=$$$FB`% zDm*9Eo-|UaP%Y4r#q_=R(0LaFp6Pqf*fh*WYU^}3cl2hp6SG>{_cImL4li`6O-VFN z?fP1Mly^RxhT7GDJUlGLE*I8pB6y-)ePUW$bW*&tRJLv$(LPQ1FD3NGxD~T0qo0YZ zfV9_k|A@cj18+%>>dL&=Ot9E17Q0I2yv}@H4vp3?f;*EEkZP|`r1q7@Ec}Elg;iee z_kgsI@ZPwl7vNb=XXdXTs#4<;@{Uxc4%a*cpRZv@Sb~|e0=q95Z0oIRB7&U z)5c>k!A_+7Ww8%bL>N6wpX!dM>vhGm4a~N3qW}DL^a`9$7~L&aiVd2uBtpX0hNm`J ztv*i8d-n->UBx35X+R7Kieu4C8gFFAE;PQ++)}vlp(4>A1KRqo*&kh2-!JpwW-ydi+2pCo*PB9*GV|0{pBVfjy>BS_Ad=95#xLwhRS{nA+&rY=f83^;K&KVmL=6nx`{hIug-~liNoc3KMN58<}&o6Ffot8_%pMG zbIaARi+)VOk-8i1iyVJUDho#_kHy2NP2ikVcP(H2%#e?%Ji*&D=z+-@O#~>$J=^sr zF&>n(_?#|4W+6svP;%<|Y>Zry_ZW8UQOw)oL8(AA!(Zh4Am`vPU zT$Axon)sle)9MsY&Kmd4qK@{Bti7-){WuQb8ryM4hecKr3`0{`OV)c?AG@ukr5LrT z`8IJr@H|tib1U27JtO{HHalvZRZGf2=?Z5u!tkVPsU5}k#53kW9DOBr5;J?^IemW? zK)YE)C(C^JpAA1>g8?m9CRLE-pUm*7 zF6&J?5RaL7ePn}_l(Y5l%>|TD*yB1 zyT0Oj0AqZLVdt#ruw+HI(a}lik}lS71qrha8ZODB*7N~|mmtoSn&HzaC7Wuj=r~Uq z^Mhl))NFTgytPtD*2AjA4?|AJlAw}nLn%kTo@lrZV5>hxgtKNzfH~!bCMP5{ys72C zxjfhdDo((=XVCi^JMPKuOJa_!TD98QEv?C9k@w|hsC|>l2l1Ttp+b8K@B|^tO|0mc z|H*sqX-`2w-r!H4*olx<%l)MS5Ydq1cI{ct&d#zdrehhDZTkgQ9}P~LKT=|yzJ*vZ`H0A~M=ie#c zk{d( z$GhI7pB{n(v&mt_IkMrD3wY>G=P2fqP2WT_@>;`(3Ewe=Ax}{d;eoqMYDDI zo%v+(3`vjRx0Oat%mVNPp8SrqdD{Q?XJc;UU)I-5i34fwsg|kNp{KmsuGx7WSgQ0{ zFe@vbCl+v?tgLm1uLp*Vrx4!~Op;Au?JO8bu8?8XBW$q@|iLj9AUJsQQ#3S_ z9PWqyF9|M!D`*+UNUmq#fLuOL#%&r&+1T;e%N;g-It|S}k7v;|;Wh@$ote(mQ(_ts z%b6bgJG?r86%z_Qm#T5zx@QC9$(70Yjd-MzxEK0K!UX^BIUrJal<{lyTkgj2l(D#I zPiC}?jxXyAIM4lmLpkVW^s+tcgGI`$*&#sV`$OgpE+fsog)IMrb5LK+0h$6Eix8idG*FCeZjg9|1TS!jco(io$4X54)9$8RF?1CVEjAD)ZHsHP6zORwc^F@?x+TFKZBSkr#+^W! zS&c+M#1DalwL($Hv?hO%#?UEp1`V#Uah1~)(5Qm6J8W$g_$KUnx_9Nth9D`BjgRNA zDem&K1!W{INU`NFko_PB^Kl(TC4Ff92&a&afe(|Ielc|H@fDtlar}dG0MGl-*J>ej z5n+Fy!mG$-WX?+ukr{SbTLv&E;NXrss;$RL<%91zU{yzg0yHle|Iib&Ib%g|7wk_*% zq?x+(vOb}vsdY=_usK&!-vRsqc_kIP&19i|TI!`_qn|x9Lohd0+uXC^GqaH~&+b@} zB-71wpmwYF^QO#!zc~ygrW*#G&91G(#b}k(MM2pkQ{geba2@SpOoG5XQ1C7jQ1oXT) zEIooN+p{%<)vcC1=xhq424%W*=-Ch1JWK*>B>e6I$In3`3@L09blk}XG*OF zPbl0BD@}noh3olmCf~hq2CMyD za?P&&FC-Qj44MyjzNj$uyjJ4{)NiU@+ed;dBmZbqkhMV*d0Ivvm~cfwggRtq00IK( zVeqsOGnX+ye>?v}e^ils{_!CT8&=UGSa>7f-~M=rHv+^ZF_0~m;Zz6p;!3I)>Kx{) zuTzgfm4nBvG*0f+3~*C|G65*gl0wU|%Fm}{h5e3-giG6x+j>og?{ZDk)Ob!C@y55t zI=m`K2tu8*^~3*m|8Fk<<(mMixCWXkny^odZ#k#CXjTC_!@}bWp}g^08%&e=ot%C~ zY%Nw*xNaauYrz$Btekt5_0K-lkc)kHA7ayct)J}7&y#i*f4>KK=$l@^6T#Xq7)3|( zF`#jq#mnp#rt5?~cu#)FQV}T{Qw=|K){k+BO4xT2Ey*emI{>Ap`&}l^B5>k3cztas zT`>`rfRFzPONA{=lG-Z1)Ao;#hfhycG$!&VuZSc;Ga`ePH5}#)ikBe^0ZjT%${SS8 zy`GMJ!z2XRI7<{oPUc5HT3B!49u9HIkg(jUab+QZ?;#a7o`*wE6}wO^pmkUZ&R3;o z!3+volA4lS7X8PgZ>Dwy|MTFz8CSn}@~d_JKm>aXpIqu%ce1{Ti|kZSH+`D3-=8rl zA%owQvz1b)H=F4IJIHC*ghKd$vZhz5m;;F`M~7>O)e?_+eExMl%i-<>)TZ97xZd(q zBA6W>!hY|+PGO1NEI#xtdgp*!pi5Cncgxxk@^YDpxz2k1|0iy1dDmqP@YK-HNsmOg0d9ut!BC_s=d`@%OFw(-3d5D_^VoLlb(=wX)0aEaHrWMS0wkpV@=_L(}~{P!)y)u zcQ9WWpz_pv(&re)#XEhwtdPszOSeLqUeJFMZ4zFyU5%mZarDVd%>5J=M2I)C_z`!= zlGCEQTFt~oAmNqq4}*TGX3}+TPflLy&+QQ=F?lfzCv7|q>|FiUjx?*iUup`?x>%Qo zKK>Ar-XDVtm2q<$$BT|lso-GK#WU0*^UrC=!SG3@s73Y(qc<5yvC=^D+HFDwg-i<= ztWdf$pVqaPIMtzFAZt8sU-g(mm8vzCx59GDpwr6lE@tQ)3p$%|&#C!bK%aCc`jwF) zy>Y$s*0gbTZQXu1Q&xWhDw6i(bN|ihz8yFrxUb+h4+2S_>3i-WfWe72f>K2Z5#eI^ z{FI=0hsGvV4FH!zVRv~%CZ6P1qX}zVlMq5?HN7_&atMi^6=M@Lpq8Rd=b+mKm0r;~ zed>8^vcD*~#dt0U(H4MntPI5@eI}en6Vp!rv9yG|En7oICjh}z9i(e95&W6V6z$go z7%fguJR4t7@g+sgLpAd+uS-U;i!H1;9iEM$nz+T#4#F(y6qF?S#)2MuqLphp>yLoP z9{(Fx>g1a)(4=w$;@^bz7b&ca@&#`RiS@>*%yTI#z*iCqpdXC{D2jDie=GP`io0bo ze|OaVAtrvYA_^!#TAT)-Ig|KrI1@-iVS=W#8`&7pLk6v< zsMMDI0~ufwevu+l)d~>Wv;23yZrAnyGNcg!Oayc#*fY6l**O47~UKQ2d0SGpCkk9(Hr#5F*TD! z<~`wq^Cy(xBL-wmWzbO&>4_{2k%5dfU@ZH9b>zs3`}2)`un+|^4S&3yNrUeT9WZMO z7NF!T6lX<7Fm^Q74W$Ow3IUwrd5! z6rTUR4!IrA+$GrrAB=|v#=A>-ZyyvSePY3`GBrbs`?7+8d}#N<7(VC$aFtOIfY(0m zW*MZKVZrqRw~4|!&&~d3zhyx;_F@oVF z!a^_M`a-`IPl-1!6jaS|Ou^!j$jAlg0WC6rJJESvw$Te9(E<>hKd zLs{1_qNN5>0z{o#tsNEXHtW=wVeXoXEgVdE4-YDR7m~>s72aMXuG6=Fju+uHRPVn+2z5&-k=mV z4Bn%-HC<+Ru~m_7(DrfVz%+I5AWbUhD=52}&eggKv#t?`G_uVjrYrpH=q$$Ltzg`YpfpVnokLD9btPk8JoT{2pGBqQnWF@I7D~+1{S$OP>S%!i868O-NQXY84m}J)v%!1iR&OYAWxaOVFx049@T~cp zHE@joxrRQR87|Rla*r$)Siy4y_qR2K2dK%xzk_1CA_+PbDRIOQhs+@thwFX-Syn~v z7T2cf)VZ0CegBl`ZH&pxkRafY#o+PbQ2lbQ)oU3v$cF7N_YmUE@y)xB7&%@XZK#_1 z*UvkSDAHY!u9tw=q~y=%IoYCH<-oK%Alo>8DJEtkfMe?VzBtaQ0l1NHVChcCmUM}q z>x3WArf7#MTc~o)Oq9oKeT0JeXe*to+ zg#AFd)K5=dQL*aQYQ0I`be4sv`MNFBoC_35T% z4AFIdqJ(LpC)(s|2WCxPJa9h(4*@Qc5Dz^YZviOkzn2C|nP&307c5m9RjP`^axZ^%z{aj^(`Y)13zjx`QJPv6T-*sRNZ8)yhL z#VV9J?>*1D4-7PE2uY0-#Z>IB>10*opk|AAMId3McC-#AI8BIf&;6x2%I%#>?o23e z`g{{^P;8TLq~&(=7|EdBrKFVi>WNr-BwF^IRNoWiOBo=_axaLTE&k~Eg$}Dq$?p4I zYcmyW$MX#fA^N2Qmq)};lptoQ-*K^pcM&`<_nwY^d({%l_a;wc>^a#MmnUm8RN6nG z&se46!u`wd$BDCKQ11>XBFV%9+GhFZ>F}-D1(8eVrm$B|q1+v|C_A>dON;q27j`cH z*r5O85!#8mEUStV#vO#;r7DG((hz)iQaQ_@i6@n=yIEglJZ5h030J!AO*9p4Q!5Io5kVYq!yc?kF@jS^Y~l zPL88b&=lmGBB!x@Q!X^%HW;0UnFdZ#r_mOLNt@>R`Wba|G8fwOQQZbGc@gq*6+XPQ zvU^y`{+z}H*PVCid2*~Df`F+GoN9~=yWh@ytp}kJDd$Y?0u;6yq>Wxs#A%GJJ&Zs` z{B~f0pvQ^wOZ43u)HlPC3nO}5m80`{GrYC9@4tnm9tgrWY&aZj*tArnD5@lh(({mE zqs4$W3%i-aOxdi^M7?$|vC-gLckRVg&1KRQ9*nOOwG6B)$C za~iK=A|)M$I+ei@c_SR}U^QV@uiIkMe?7A#Ad?H1kLK|gr=z-s9lP~qWmS84YVW=C z9M622*=~M-8o#&(96w=fuBURpZV5I`2_V;lPUoS2`}u_unG^FCY5AX6RtDl1g-%IX zV+!5b>S(XlfHO%8XyED7#=EnYrGfZE?iEfA%w~FKe!$Og|5@#H$q=!UG*@T1B~3SJ z+UF@edr3Yx6ng^145o^Qoyb`5<64--GF)88Z|OtdwpOdAV)!_Ma0D>YAbIGREmhL1 z_uee8OFsIO4l4ri1Cao*5<^4X(JB{A8E1}N_$tNH^M;E?IZoz+iZG7q_Dj(S_?JU3 z6N`@xfrrAkm$;plA3m*Ne3480h%MFlVs3LwTiEv{m;!NYwHBBce&+%{uSsY&Oq#nz zfewkw?V+QNp_w06A?<^^voy$fG5|Eb`o(!#4-D@8L=^5~DQ z%3Xxvn^T@4@LF?G?PLSq@qhAA1ySSMtq*aV zh8}-OoL8i_q{iruIXZj8X`JHwH6*~>1$*-0l_4mnO3pbF*^@z*L%CpDw{msH19iVe! zg!4DWWPhBaMia86&NBC{KT9F^hVdYb?-g%023T)zAo&CsVvG`hn+Au?-y0t+*Zc2RHBJ1zq8(K^xbItk1Tx4N4P+Ui7VN#`Ndl=sI&ht0%hk!pGaQA-q=8df-w8 zlh!_&%TFHwTaXcbI1GXpc=6F zI5fkj#+a=`syr$55M$8BdQ?egJJ?A{85sDCTYz`3csJi#lUV^;VHGr3&HneCw;yIu29}J0utF4g%m63Nf|#lF?9M z$_EYYB3!DQ2SZZv+~Ps9V-5&TEF9m^9?;kBG~9@;^d=&iSPLYKZT+m`YL9pvq3d~u zlKwP;x0S<`I%yvDu{*n<({KN-7BZ0@-UKrh-jGkFq6f`6CZr& z7Lm5Si|qpd?Dgdt1T=jO7U(uK%Y)8K>uaxp6p^+01~G6=%=FsxcTVdIpev%0=WU)wnJq8w+@r=CYkpj_a~nbg+G|8oTO9Tx zMITW%`5o65?_pTU5xOQ>x5)fF_ zQ*sVuJCJ!k;xT_f{(h5VG+&zpT%KzIB{#G<9QK(WJRfi`YUtB@yP2?#9dOg=(N|H! z_WLny`5F z4QYy>X=NxF4;Ri>Q#^7J`DHPqV(EdmTOB+cOT$q|51$--gnOBCHeWl}>!pFyVi8yL=WE`U zcWMci=CymWo@tIWMxwR?k0j#KAd-~0JB*U@_vG#ZRE+ADNmb{A^+H8}9$*|2C#mde znDo~d@qb1mh0hRzl$sCbmLz`WcJTdE%jgF5i&o+lK2P?AzqlG0P6m=LO1y5)AJuul zI1EKIucm(rVol#-BWfnhpYVf>TiusT3w*Fz;J_E_r%uV(i$!0;C-G1N+50}Q)2{qFiV5sMrUvjiNbmhx_%nD6&pt@JNz^3BKm;LPQB`ei+LBV#Wy!3$u{Q3xkoY zR7`{1Y^6C=hs8%&J9sE5o2kSXR~hlJ(0xz1Y{BAC;6m+CphjtMHte@9<+^qS(UZN^Os_mUw3NEz2c&Pz8$xwblV7mh zA_;w$WGntxW#oe%66SoFAydrjvms($*4wJYYr8ZrEAm2!jFr)liGkw8gXry6In!YN z@nct|#`H>6JBpX}@nUs1q#_#RVRu%?jtrhntiaJRRjvMGpXa9hu%jum3B*%<`Jo!d zi96QkjX!9$*^oKO!C;}-`ll#H&su^ZFx|^7wo1rm&4rfdv%Zg~swWL?7P8>>)+g@E zBGgf{yvY{!GWTBl4mfTr0>pmYHyvWB(#Qu&JJ|LWR624eUkf3+H~_lxj)NE{ zh*_5)sg}7IGf8w}w8dWT+lk6sn|De5{HY57e-S#de1y1xCxe7@RYYt2>OtcM`dI@d zcyI&0Z$ZbG{DF@&?`fUkp=*ck5L%wnH{u;D;Fg}WTy&7X#I)&biChP6%Qb&1t@f5% zS*im4fIhi!+x^juZX^X1FS$Q@SztHNOTbUR!~VRo*iN`&jhIpo=VhQO(VPc)fTbxv z?#5ZUF-fiUf(t^KD@XtVrQ8fPZt9N%zPDM@O2?#FU^a&)L4@e3L?zCu)MeAqrBMK(6NtBRp24qU@k;arp5sh zb+ESh^kW>gdSK!OGG(MP9JZ)emgK>tOLu#9QX;GeSb3+kP2jQ!qkYRrL!dQ=+)T1e zO@dGT*e~VuI#v*y6&68~V2=z}6^3IuPx1$Xl&q71wvz_SjvsYOPj$-di&!TBpya9b z+5|6&d3TmgT$V4}#*jCgo@ETUzqtG6|RaFa1Y#7-;8%VjjHEFqBO} z0&=(a{Rd(w5V?q;aR>zDEWglhzgx4kia(94``Zh^kIN#h^64w^f*cJuL<@jw6X!;L zGyKv!oU<08xD4Ry$9E$5Q1;{HWB48_oeTefJGQU3CJrD=&@WD^{mVgo{b0_(3Z4!D6Gh8pNKY}{LL+j4qRis$j8n=fpOVqy{=QzCE)UP`T zyrbwQn5u-2cAJGmx6w|y8$PWGmH`2Jnwa0suPf~Bv{?+n*~QgOLD4iuuBqGP$Ocwl zj!AD{bdbQZs^=W94l<+2Ww;HtDLAK?=XvuE|MGSY$h&{k zdKJAuq;jkff6y~`XRiy*uRKs7o}=@Fc$d5wu!JL|HiXGSOnT9(nz#MW9Msi$&Gzr= zN!^_cSoA-+I+^cC7I3ibAai+CZ~}6R{?9^&;O=n(=xF}Sw7ZwXnRXsyUjA7CuW5c8 zc7(Tqu915aj_aB6NzacYP|1w0Sys_)@_CZcD)cdor!u;r+pFpaHSpYCq`m)LXImgX zOuP*BxApo$!zB)f*(ozSL_uVuc4l8_9Eg%PX`iw;l)mvl; zwf(`*C1jBWn0k7F+w*kkB-L4fZ71TJb;J)B+UCdAp<*xg^ue;pub3=Ls@>{9z!b{% z(Cq<)5kSg1s-0Pb+yA8#;)#llan5ovd;uivEm@385U=xf`h(x8#u#tEzv1Ai=?xV< zo;1v=g@NA zc{94JF*F5*k>Je_0EyKB_h9o7nO7BL9T=a-e)auO!74Zw6v6oVgZ4B`yi&>nT)%3B zUtuhs_h| zPq7cTXJ>MQsIwJ_b0vM`$SD+c8oXLNb;JQ)z%19WFBZVaj?(W4@OL>D zbs$}h^U$a+qsT&#zkvsdqWu%ZvHDNI&5&?||a869rT z5P~*GFADLn6+Qx5a>&A+%hRO@VA+8THs3VLzN4|>b}k3vM>*$%9c;^Y@PQ;P`&)o% zwW&8JJ@Y|yMJ^coMdl?#T`CA0(A^Jjp*$e+7SD|iyszfV#=2q|s0w7>Nv#OHV}psB z(Y4WYKug^OSPVW0$KJ0fVkQ5e9!AyV7?($MT2qtwS=IbCU;|k`*!1J+fRl9Nt+{;9 zGbto5uH>R4MFkan*HYmFzQSHu*{ZQ!jGS7L0&ebg9~Eqm>GiM68o$IXp%$`2zu|#D-O3D$K8Z14#k< z6#@?{3wj{&I$W4S@&Ga0?+mHGcR{YlNeqrg^_zcysQx$;_7qWw7s*2u<(5qjBvfqZd~f~9$v=4DlkLyVTLC*Qb=al#-CW~9*dH>TLB5< zMA%Ut$2s7rJcPR@J@K?adZ(fyGR}@RoQ+5^Wx5- zQ2PkD+*FlC2oqHvgNDPg7~S--U&i?Nc+-J9BZ5<4cTsHizuMS!g!CNmLFTMjUj5jY zAS#VMteif)t~v#rIw(M*CynOElGAfrOv7!3vbl!mF=VaMB7hXp8Dw0|DCVQ`}tnazi`}2E$KG*fT zE`O-oeLvTEo_!uCTWv%

jSyn|P@&W=wDgFZM?o3;<1 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 O{NPQF8&?>fCH)^S4G^pV literal 0 HcmV?d00001 diff --git a/test/image/baselines/automargin-push-y-extra.png b/test/image/baselines/automargin-push-y-extra.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad607c65ed0cf3f4fefb7caf93bca77dac09f9f GIT binary patch literal 42035 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

AFBy13~ec zlT{;z|VvC24Z)VYDWyi{%CS35R@&OquZ!xN$(2#k{wZ8=SHOO>gTdb z4pTGI+#Z;-kb~9m`m9^%%OVfS@BqFV0F{r>dD876ykLOHq+?PhhZBlHWcmgo1r$Cp zyvASv0Z!I#xl?tQ0@q}}8Z}ggJ?0Wl`}yiWt2Tj7S%gqv*2mjn!btPF;|wKDZ%Yis znj!j`V%20>hNtM{!=S`y;bU0{6IcbnEBUi4(7yYLCqaqgY;w5PN#ufhvjpA!Hx;>t z2GQhuulmIMBs9=N3dkKJaH1fZsJl4;Pz(j9p2HH2fGpGcsclpOu4>V*SKQlO0FDtLI?%F0+?0eK^7?Yk7lAM^B7LHZn|2_W-#K=tvk1M%PcgKu|rv7TAy#*TPu zl+(8BqQ-aihj`Sg^zZGV%G*5wm8&*w-{hC{H_eiGf4Qwk+m?hVDdw0VR5~79!VaGD zKIz{9YqxN&avcpeJ1wXU0M)D<4VIB}9(k#PJZS3ZH_DY4sU@@yN8=S5 zH0QYGJY^GYK%zRFZxixdQ2)*tF(h~|r+Qe5+)vg%4V|;ink3zWy4PVo&tk4Ytc*mwTpoDlB#sLcJ&nde%GGblWPj}GPCQlh(R1aY%eE{>+BN9A64zKwqX z5bz6Yb+B7Wa#S_Vz`XEB6K!`b3$MKQS=jF!Hity2U-=agFaOex^1TwPiu0orp11sQ zUQfdnvNU~n{E=BTV4zpDA@ z(K4Y6Peru5_?FLaxA9NdS}NH>P|h}Xb?~pirhNmdXUEDuXj)BI5Eno66QYp6z@cyp z+N)^mKIWDfC^Q~xaJMT`XEPdj15;c7Vzvo@ z=AFS4jyakrp-Vg7!CNgq)}pmixfME6vk8}Cs(|9ni2eS-NOp-r`3IOYZ7#IF*A z95>vKivuK`m9g2G&VXtG`qdrNOeTyRFWBogDz`N1%K9~|wb9=yq3wz?J*f8pBG0qN z>KyZd#@5P+g!oyN6JEu`ObyZvQlSc=^5UfqS}Bm@4qHjw%lNcsF)!I197g}aPsM1} z{B~Uzc4t3x(?~OW2hS;ET2)li@2aU!=#0f8&MytxvYE!P^PIt*O;xd{rWKv6YQA8v z0=q5+Fp!zi9y$L55a^+9#TTXON)G&K2{e6?m8^TfT^JYG)-hHrjG>3Qt##_tbsM$e zCzUx9+IMfAXhTLdMdZfog32)W`H@u%0DD4^aryQpT8FHky`0=HYC)wlm2S1CVFBVh zvSrWjkhg#LYUD+LwW}-BYDF#sNNux#uwJB~498S^sJ94YYgiM#-IV!goI>4qhy#K{s3;4N23Q)Opq~Ehy)Z5{qp>CdwZCufk%=l za-vMS!)~Fb85~YBG^0cF2sbGB{c#Oin|)D#Lr|STiN+AtkM>5prkFrFTWi ztat&YCV|9Xs0|^bIYD#z09d1hIqFDepf@{W-UBjt5PnAli~{1%1PSz5iRC`m97B81Gi6e@OS!8=FX$i%ERnM^sOOFpqo%flb4m1;HVlTpWGW@nv8;=W1#0 zHCXG9iO`SdBW+yjmCq9gTYH>)bMJb4+qh}Y?b!DuErhrHX_*{!7-=tk46yfDYHUUWw1Z#2XgQK+IN8L~K2 zRXp@Rf|{`G;U4U@Yyc9yPchxY7s>F;+s6Q&`uTx;2BRBff#9rkYMnlZEnQ_Lwxexz zXf>+Eu1lWqefXvdS;?9)Y_6vk`8E7c!w5Vvs77MlO^Dd~AX!r@s~uVB3>H0LkC(4r zcAAC!8R%~G3Vle^(J*$M4z@jr5`i;cROfHK?DX;}JD6wRZNCJe$PpC@!M(TkzVb1s zX{J+_2;Dg?%~ff1cHNjn{(*Do86C8mXg!K&N*>(Y8hdG#B?&gWHNOyHINoF0;=Nci zlgJ-nL^^SQpDM72B2d9TfFn|9*^GGH)WgPFv->&xwWCwb7eVin*{1{%rOA5}^Gi^; z=)6s@qo38$g^{+i7HzqrgL$IBUWD!2vCg?pu$T2;nYY( z;Mbh{Z_Y#6QL0;msnd{QQTc2&ap2}G7A!%Aag#@o!xkDzK;Q$>5~w+9M7}9)5BeP* z8nb6-4<2V29S$pPB*GURsWfNK`p}+gjpUwPrctyDTBORTlEt-l2r`vbJx}MN83CHX z-ce%<>pIMK`{%=^*c+n)ZwIV}Pl~*ao7{$6#F{}`D6eQ>CNfO}!oa|&XslV5aoVnV z#^0qYhJrse_|Feo`J@>M%>`4&i68 zH75z^;$O>rwm(lAlhKHGa#Y_E$1dFt1S=ElSB|nZC^?0Iz=*3boGkeb#nSA|sWSHm ze8_MO82{JwC5!@qYB6MHw6(n5@1hm)vOm<)tb7l+$Xfv@)rs;TX1eJmvsrb+v$0jl zp@CZ-%?XR^&5o_D349~IFGK5a{R{dE^pkw$WqTsNXt%zlEuXQxJSY(}m(D>ss$2-= zsN-H`+Do*KM7%el6*Ku;;JA4&ywEAEm5VR#X#}V%?5~ZQ$J!t>J>~p;`?MG`<;d|C z&|2&0-N@}z zFFMm0?~#Gj3q6X`$bTDJylNtK~ zb!!4iBZpw!bL5(!8C7H}^!8>GHh^dpYNbEoU_>I!ECR5j&-hEmd57>BarC48oj#yM z$$5?_A0=`zY2R`^ZjOI{ACSi=iOq}++U5qXw6}`bYjZ$OT?bW@YuwqeUXwax-tU%P z9w-=U1bw|f1*SHBwUF~%&8^# z;pw}?ubw4_aE3&N&sWP&UU1Q z_Z73EHiY7>+wsh;DP+QQu_3Q-8IbN65Vz?l**4I&4ug^m zde_rOeTk}hHzj^+uQwIg`65u3A(^E1QxA<&@s^lgXwYYRa-P2U1^H(KX^b?lSVa$K zrE>+$f?(`%Nidq0&lmxz)jt9x>3xb(-KHfXNSFv=MoGyLn|h2tSF2$^LXl$wb0~)2 zcDQrL?lgw^SCCSXh9p%~6rF%r1=E!D`s5^3G+O)(@B*}cEf6M!7@D3zUiv)wK=KeOG8;D>#M8N-ysmx z;RKh5$G^)K?ue!?WdiL8)VXgUedHWC9oKv}e1EK6@miiDAyQF9UvhyVpC2pT(n3p1 zi%}@hWY{sOr)n!KHv|yK4MZ)S9i85%&i+V zMuTcbFM!3g_?aana&c6cd7T%$CuqO40cToszD@l*bsL2{H8!PCqg}W`M<5o2!$vw& ztN5Qw#+rY4ky7M37eKEMa{O|5l;abCQ$QMAs-MFmh6zofbZn-}KcV^Z!n9*WcZL&YC#m-p?u4r7 zO`=R*iI5@JEo3$m&E8CTB<-&QnazX*wMEUr6>bJ+MR6IG>XS0dwpv|TlvxQC$0NJ+Zh`x`{veE9|spjAhJ4$X4m9Ak~;bJffS3x%Up{@#wSk}e~a zM{NcR>>|w0$)9by|6K~Q5|JTl=H=W51kH^;Xs*A0hcMX-94Zh_yrznXF3A|)Kdt1} z{qJK1j+h@#P@$I>CCV3PK)GQ8#;Xf-M~e8uHMo?hhY=sm1c*Rp2tehkm#~&I%V5puf>yEj| z5#XSn4hshS+~|UN7tP18hozGLv+)qrP>E;|Dj*XRVJ8uXojnnm3GkNX^iJiJ@Nm|t zE@}Z+(_8qHsqLFuxIZUDWn!RVFxL@LEWt)cQ-NEp+J0Zws8>@*V_GTr5}OO`Ug09~ znToIuU-`Ue_uSH6{@$KgQHfxV(}W%2RZ$-@P2`~@pq46^w?RbFEzl-`G?LFkXO8>7 zmk$J3BDJc(3w@nW&Y803-mRF#uEBbMeXFcVhE+z@p?4$OJ(EIy!by(lG-E?pqG>Z!U%0T_E`}^XWIJ zYkB(NugXP}5+NU>BjXza8HPb9*$h(W`6zrf>tFjLxMh+9|A(`Ly~^yxA@x80ePl1F z;YSY6!#|NsA28-l0PebP3zMoBpV81 zg4nArc{Qel{#yW4-hqGg9d?+m|INbz<(4$utdm+Puv>6cflBcPlvY09Eypt5fbr9xFng#qp6StNa_ThhR6<_DISE$iw z2ep3CR&c9wzI91#-@<>kZo(b`L+U%he;raxk4>gQ*7%cU1TU;qGghNT$;#UBkb+`c z^+8=N(|>CYXmF3zTn_sVo)=^+J2En70!GI3>VvvU`SS2LU6;cyQU7@>EGh(1MA5Xu z$>~1PBna*MO(ekpOg^S7>9<_dbtAR+SHVE2n}9@-)c;gOo7+rjEF1#g!H6Q~O4c;b zKNBR)rvco6)o~s~Qr9XP-vfSs))MC!wk=rX&&h<)JWJRjCTQQw^<&fO27#$A^Id(G zZB+qH$7>u6rxbMi&$4k<{U3(|Vs>7)SN=P*kAhBD_)HSHF$8q;NX&cJoYjAi22ctx z(cw?AbIRbeuZF>@G6eEW7zR?3dR_qHs^YtnZ|42q8&|`IP#CXbb_gMJ>0y(8gQTe5 zI*BJiJ+Eu=3$~;O&|J%bOalOzSh2Y{r@tSgMR#N$hEZ@$NZuF>=8oE4R)GYI0TMZ= z7cmQ);_Qc0WqyBuS0h2tr0nf=j zXD>V_NX#wI-ft^Qb}*Lvn2XGRf04k0stEQ3Wx%lvea6@Ef+53SnZV?-&-0TcG!UEF zZIHS6cs}fZT!6QF$!k^q4hGY-IKy~SFOTzDO zVoXUw%M75~fs8(MbC)0_uqDDB(`Bs!SI1jvM?kvSD>kryuL^Vfzcbsnu5!NRXe_bu-e&nLq7{r5{yXeZlak-4ChcZ; zmUtEa3svd=g#OIZ!EM!|OW*4@)_^c_c@g>)e?LWT5rOr=dp})_{7=!04cY@yG8+ni x)-m!hG&sRuEv Date: Mon, 4 Mar 2019 16:49:21 -0500 Subject: [PATCH 2/6] improve axis automargin tests - start tests with margin:{l:0, t:0, r:0, b:0} to get more consistent result machine-to-machine - add a few check to :lock: #3579 even more --- test/jasmine/tests/axes_test.js | 306 ++++++++++++++------------------ 1 file changed, 132 insertions(+), 174 deletions(-) diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index 2b3f190178c..130771793cb 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -3235,23 +3235,7 @@ describe('Test axes', function() { }); describe('automargin', function() { - var data = [{ - x: [ - 'short label 1', 'loooooong label 1', - 'short label 2', 'loooooong label 2', - 'short label 3', 'loooooong label 3', - 'short label 4', 'loooooongloooooongloooooong label 4', - 'short label 5', 'loooooong label 5' - ], - y: [ - 'short label 1', 'loooooong label 1', - 'short label 2', 'loooooong label 2', - 'short label 3', 'loooooong label 3', - 'short label 4', 'loooooong label 4', - 'short label 5', 'loooooong label 5' - ] - }]; - var gd, initialSize, previousSize, savedBottom; + var gd; beforeEach(function() { gd = createGraphDiv(); @@ -3260,170 +3244,144 @@ describe('Test axes', function() { afterEach(destroyGraphDiv); it('should grow and shrink margins', function(done) { + var initialSize; + var previousSize; + + function assertSize(msg, actual, exp) { + for(var k in exp) { + var parts = exp[k].split(' -'); + var op = parts[0]; + + var method = { + '=': 'toBe', + '~=': 'toBeWithin', + grew: 'toBeGreaterThan', + shrunk: 'toBeLessThan', + initial: 'toBe' + }[op]; + + var val = op === 'initial' ? initialSize[k] : previousSize[k]; + var msgk = msg + ' ' + k + (parts[1] ? ' -' + parts[1] : ''); + var args = op === '~=' ? [val, 1.1, msgk] : [val, msgk, '']; + + expect(actual[k])[method](args[0], args[1], args[2]); + } + } - Plotly.plot(gd, data) - .then(function() { - expect(gd._fullLayout.xaxis._tickAngles.xtick).toBe(30); - - initialSize = previousSize = Lib.extendDeep({}, gd._fullLayout._size); - return Plotly.relayout(gd, {'yaxis.automargin': true}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBeGreaterThan(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBe(previousSize.b); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'xaxis.automargin': true}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBe(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBeGreaterThan(previousSize.b); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - savedBottom = previousSize.b; - - // move all the long x labels off-screen - return Plotly.relayout(gd, {'xaxis.range': [-10, -5]}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBe(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.t).toBe(previousSize.t); - expect(size.b).toBe(initialSize.b); - - // move all the long y labels off-screen - return Plotly.relayout(gd, {'yaxis.range': [-10, -5]}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBe(initialSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.t).toBe(previousSize.t); - expect(size.b).toBe(initialSize.b); - - // bring the long labels back - return Plotly.relayout(gd, { - 'xaxis.autorange': true, - 'yaxis.autorange': true - }); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBe(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.t).toBe(previousSize.t); - expect(size.b).toBe(previousSize.b); - - return Plotly.relayout(gd, {'xaxis.tickangle': 45}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBe(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBeGreaterThan(previousSize.b); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'xaxis.tickangle': 30}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBe(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBe(savedBottom); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'yaxis.ticklen': 30}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBeGreaterThan(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBe(previousSize.b); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'yaxis.title.font.size': 30}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size).toEqual(previousSize); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'yaxis.title.text': 'hello'}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBeGreaterThan(previousSize.l); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBe(previousSize.b); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'yaxis.anchor': 'free'}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBeWithin(previousSize.l, 1.1); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBe(previousSize.b); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'yaxis.position': 0.1}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBeLessThan(previousSize.l, 'axis moved right'); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBe(previousSize.b); - expect(size.t).toBe(previousSize.t); - - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, {'yaxis.anchor': 'x'}); - }) - .then(function() { - var size = gd._fullLayout._size; - expect(size.l).toBeGreaterThan(previousSize.l, 'axis snapped back'); - expect(size.r).toBe(previousSize.r); - expect(size.b).toBe(previousSize.b); - expect(size.t).toBe(previousSize.t); + function check(msg, relayoutObj, exp) { + return function() { + return Plotly.relayout(gd, relayoutObj).then(function() { + var gs = Lib.extendDeep({}, gd._fullLayout._size); + assertSize(msg, gs, exp); + previousSize = gs; + }); + }; + } - previousSize = Lib.extendDeep({}, size); - return Plotly.relayout(gd, { - 'yaxis.side': 'right', - 'xaxis.side': 'top' - }); + Plotly.plot(gd, [{ + x: [ + 'short label 1', 'loooooong label 1', + 'short label 2', 'loooooong label 2', + 'short label 3', 'loooooong label 3', + 'short label 4', 'loooooongloooooongloooooong label 4', + 'short label 5', 'loooooong label 5' + ], + y: [ + 'short label 1', 'loooooong label 1', + 'short label 2', 'loooooong label 2', + 'short label 3', 'loooooong label 3', + 'short label 4', 'loooooong label 4', + 'short label 5', 'loooooong label 5' + ] + }], { + margin: {l: 0, r: 0, b: 0, t: 0}, + width: 600, height: 600 }) .then(function() { - var size = gd._fullLayout._size; - // left to right and bottom to top - expect(size.l).toBe(initialSize.r); - expect(size.r).toBe(previousSize.l); - expect(size.b).toBe(initialSize.b); - expect(size.t).toBeWithin(previousSize.b, 1.1); + expect(gd._fullLayout.xaxis._tickAngles.xtick).toBe(30); - return Plotly.relayout(gd, { - 'xaxis.automargin': false, - 'yaxis.automargin': false - }); - }) - .then(function() { - var size = gd._fullLayout._size; - // back to the defaults - expect(size).toEqual(initialSize); - }) + var gs = gd._fullLayout._size; + initialSize = Lib.extendDeep({}, gs); + previousSize = Lib.extendDeep({}, gs); + }) + .then(check('automargin y', {'yaxis.automargin': true}, { + t: '=', l: 'grew', + b: '=', r: '=' + })) + .then(check('automargin x', {'xaxis.automargin': true}, { + t: '=', l: '=', + b: 'grew', r: 'grew' + })) + .then(check('move all x label off-screen', {'xaxis.range': [-10, -5]}, { + t: '=', l: '=', + b: 'initial', r: 'initial' + })) + .then(check('move all y label off-screen', {'yaxis.range': [-10, -5]}, { + t: '=', l: 'initial', + b: '=', r: '=' + })) + .then(check('back to label for auto ranges', {'xaxis.autorange': true, 'yaxis.autorange': true}, { + t: '=', l: 'grew', + b: 'grew', r: 'grew' + })) + .then(check('tilt x label to 45 degrees', {'xaxis.tickangle': 45}, { + t: '=', l: '=', + b: 'grew', r: 'shrunk' + })) + .then(check('tilt x labels back to 30 degrees', {'xaxis.tickangle': 30}, { + t: '=', l: '=', + b: 'shrunk', r: 'grew' + })) + .then(check('bump y-axis tick length', {'yaxis.ticklen': 30}, { + t: '=', l: 'grew', + b: '=', r: 'grew - as x ticks got shifted right' + })) + .then(check('add y-axis title', {'yaxis.title.text': 'hello'}, { + t: '=', l: 'grew', + b: '=', r: 'grew - as x ticks got shifted right' + })) + .then(check('size up y-axis title', {'yaxis.title.font.size': 30}, { + t: '=', l: 'grew', + b: '=', r: 'grew - as x ticks got shifted right' + })) + .then(check('tilt y labels up 30 degrees', {'yaxis.tickangle': 30}, { + t: 'grew', l: 'shrunk', + b: '=', r: 'shrunk - as x ticks got shifted left' + })) + .then(check('un-tilt y labels', {'yaxis.tickangle': null}, { + t: 'shrunk', l: 'grew', + b: '=', r: 'grew' + })) + .then(check('unanchor y-axis', {'yaxis.anchor': 'free'}, { + t: '=', l: '~=', + b: '=', r: '=' + })) + .then(check('offset y-axis to the left', {'yaxis.position': 0.1}, { + t: '=', l: 'shrunk - as y-axis shifted right', + b: '=', r: 'shrunk - as y-axis shifted right' + })) + .then(check('re-anchor y-axis', {'yaxis.anchor': 'x'}, { + t: '=', l: 'grew', + b: '=', r: 'grew' + })) + .then(check('flip axis side', {'yaxis.side': 'right', 'xaxis.side': 'top'}, { + t: 'grew', l: 'shrunk', + b: 'shrunk', r: 'grew' + })) + .then(check('tilt x labels vertically', {'xaxis.tickangle': 90}, { + t: 'grew', l: 'shrunk', + b: '=', r: '=' + })) + .then(check('tilt y labels down 30 degrees', {'yaxis.tickangle': 30}, { + t: '=', l: '=', + b: 'grew', r: 'shrunk' + })) + .then(check('turn off automargin', {'xaxis.automargin': false, 'yaxis.automargin': false}, { + t: 'initial', l: 'initial', + b: 'initial', r: 'initial' + })) .catch(failTest) .then(done); - }); }); From 8a1b5e76b0b57ed777b8c4e6ef131c0d93fb0690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 4 Mar 2019 16:51:10 -0500 Subject: [PATCH 3/6] throw axis scaling error when ax._length is negative - which happens currently in #3600 - should make debugging easier --- src/plots/cartesian/set_convert.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plots/cartesian/set_convert.js b/src/plots/cartesian/set_convert.js index 941d01de3e7..bc99687a750 100644 --- a/src/plots/cartesian/set_convert.js +++ b/src/plots/cartesian/set_convert.js @@ -484,15 +484,14 @@ module.exports = function setConvert(ax, fullLayout) { ax._length = gs.h * (ax.domain[1] - ax.domain[0]); ax._m = ax._length / (rl0 - rl1); ax._b = -ax._m * rl1; - } - else { + } else { ax._offset = gs.l + ax.domain[0] * gs.w; ax._length = gs.w * (ax.domain[1] - ax.domain[0]); ax._m = ax._length / (rl1 - rl0); ax._b = -ax._m * rl0; } - if(!isFinite(ax._m) || !isFinite(ax._b)) { + if(!isFinite(ax._m) || !isFinite(ax._b) || ax._length < 0) { fullLayout._replotting = false; throw new Error('Something went wrong with axis scaling'); } From 87b10a78ac7a8153314d76c6a1ce0aba04f2fb4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 4 Mar 2019 16:52:21 -0500 Subject: [PATCH 4/6] fix #3600 - skip automargin pushes that lead to negative plot area --- src/plots/plots.js | 22 +++++---- test/jasmine/tests/axes_test.js | 80 +++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 12 deletions(-) diff --git a/src/plots/plots.js b/src/plots/plots.js index cde651366e8..3ea28626067 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1841,6 +1841,8 @@ plots.doAutoMargin = function(gd) { var mr = margin.r; var mt = margin.t; var mb = margin.b; + var width = fullLayout.width; + var height = fullLayout.height; var pushMargin = fullLayout._pushmargin; var pushMarginIds = fullLayout._pushmarginIds; @@ -1876,11 +1878,9 @@ plots.doAutoMargin = function(gd) { var pr = pushMargin[k2].r.size; if(fr > fl) { - var newl = (pl * fr + - (pr - fullLayout.width) * fl) / (fr - fl); - var newr = (pr * (1 - fl) + - (pl - fullLayout.width) * (1 - fr)) / (fr - fl); - if(newl >= 0 && newr >= 0 && newl + newr > ml + mr) { + var newl = (pl * fr + (pr - width) * fl) / (fr - fl); + var newr = (pr * (1 - fl) + (pl - width) * (1 - fr)) / (fr - fl); + if(newl >= 0 && newr >= 0 && width - (newl + newr) > 0 && newl + newr > ml + mr) { ml = newl; mr = newr; } @@ -1892,11 +1892,9 @@ plots.doAutoMargin = function(gd) { var pt = pushMargin[k2].t.size; if(ft > fb) { - var newb = (pb * ft + - (pt - fullLayout.height) * fb) / (ft - fb); - var newt = (pt * (1 - fb) + - (pb - fullLayout.height) * (1 - ft)) / (ft - fb); - if(newb >= 0 && newt >= 0 && newb + newt > mb + mt) { + var newb = (pb * ft + (pt - height) * fb) / (ft - fb); + var newt = (pt * (1 - fb) + (pb - height) * (1 - ft)) / (ft - fb); + if(newb >= 0 && newt >= 0 && height - (newt + newb) > 0 && newb + newt > mb + mt) { mb = newb; mt = newt; } @@ -1911,8 +1909,8 @@ plots.doAutoMargin = function(gd) { gs.t = Math.round(mt); gs.b = Math.round(mb); gs.p = Math.round(margin.pad); - gs.w = Math.round(fullLayout.width) - gs.l - gs.r; - gs.h = Math.round(fullLayout.height) - gs.t - gs.b; + gs.w = Math.round(width) - gs.l - gs.r; + gs.h = Math.round(height) - gs.t - gs.b; // if things changed and we're not already redrawing, trigger a redraw if(!fullLayout._replotting && diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index 130771793cb..ba4d9c81d2f 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -3383,6 +3383,86 @@ describe('Test axes', function() { .catch(failTest) .then(done); }); + + it('should not lead to negative plot area heights', function(done) { + function _assert(msg, exp) { + var gs = gd._fullLayout._size; + expect(gs.h).toBeGreaterThan(0, msg + '- positive height'); + expect(gs.b).toBeGreaterThan(exp.bottomLowerBound, msg + ' - margin bottom'); + expect(gs.b + gs.h + gs.t).toBeWithin(exp.totalHeight, 1.5, msg + ' - total height'); + } + + Plotly.plot(gd, [{ + x: ['loooooong label 1', 'loooooong label 2'], + y: [1, 2] + }], { + xaxis: {automargin: true, tickangle: 90}, + width: 500, + height: 500 + }) + .then(function() { + _assert('base', { + bottomLowerBound: 80, + totalHeight: 500 + }); + }) + .then(function() { return Plotly.relayout(gd, 'height', 100); }) + .then(function() { + _assert('after relayout to *small* height', { + bottomLowerBound: 30, + totalHeight: 100 + }); + }) + .then(function() { return Plotly.relayout(gd, 'height', 800); }) + .then(function() { + _assert('after relayout to *big* height', { + bottomLowerBound: 80, + totalHeight: 800 + }); + }) + .catch(failTest) + .then(done); + }); + + it('should not lead to negative plot area widths', function(done) { + function _assert(msg, exp) { + var gs = gd._fullLayout._size; + expect(gs.w).toBeGreaterThan(0, msg + '- positive width'); + expect(gs.l).toBeGreaterThan(exp.leftLowerBound, msg + ' - margin left'); + expect(gs.l + gs.w + gs.r).toBeWithin(exp.totalWidth, 1.5, msg + ' - total width'); + } + + Plotly.plot(gd, [{ + y: ['loooooong label 1', 'loooooong label 2'], + x: [1, 2] + }], { + yaxis: {automargin: true}, + width: 500, + height: 500 + }) + .then(function() { + _assert('base', { + leftLowerBound: 80, + totalWidth: 500 + }); + }) + .then(function() { return Plotly.relayout(gd, 'width', 100); }) + .then(function() { + _assert('after relayout to *small* width', { + leftLowerBound: 30, + totalWidth: 100 + }); + }) + .then(function() { return Plotly.relayout(gd, 'width', 1000); }) + .then(function() { + _assert('after relayout to *big* width', { + leftLowerBound: 80, + totalWidth: 1000 + }); + }) + .catch(failTest) + .then(done); + }); }); describe('zeroline visibility logic', function() { From d5bacfefbc0d75cfaf81a70a568bc27e08ed2c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 5 Mar 2019 10:24:10 -0500 Subject: [PATCH 5/6] :camel: case --- src/plots/plots.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/plots/plots.js b/src/plots/plots.js index 3ea28626067..4028498c4ee 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1878,11 +1878,11 @@ plots.doAutoMargin = function(gd) { var pr = pushMargin[k2].r.size; if(fr > fl) { - var newl = (pl * fr + (pr - width) * fl) / (fr - fl); - var newr = (pr * (1 - fl) + (pl - width) * (1 - fr)) / (fr - fl); - if(newl >= 0 && newr >= 0 && width - (newl + newr) > 0 && newl + newr > ml + mr) { - ml = newl; - mr = newr; + var newL = (pl * fr + (pr - width) * fl) / (fr - fl); + var newR = (pr * (1 - fl) + (pl - width) * (1 - fr)) / (fr - fl); + if(newL >= 0 && newR >= 0 && width - (newL + newR) > 0 && newL + newR > ml + mr) { + ml = newL; + mr = newR; } } } @@ -1892,11 +1892,11 @@ plots.doAutoMargin = function(gd) { var pt = pushMargin[k2].t.size; if(ft > fb) { - var newb = (pb * ft + (pt - height) * fb) / (ft - fb); - var newt = (pt * (1 - fb) + (pb - height) * (1 - ft)) / (ft - fb); - if(newb >= 0 && newt >= 0 && height - (newt + newb) > 0 && newb + newt > mb + mt) { - mb = newb; - mt = newt; + var newB = (pb * ft + (pt - height) * fb) / (ft - fb); + var newT = (pt * (1 - fb) + (pb - height) * (1 - ft)) / (ft - fb); + if(newB >= 0 && newT >= 0 && height - (newT + newB) > 0 && newB + newT > mb + mt) { + mb = newB; + mt = newT; } } } From 18f827d738fb7ac48bee45f4b7f8f164ccec28a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 5 Mar 2019 10:27:07 -0500 Subject: [PATCH 6/6] mojtaba-proof test msgs --- test/jasmine/tests/axes_test.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index ba4d9c81d2f..1e2b528d3e4 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -3249,7 +3249,7 @@ describe('Test axes', function() { function assertSize(msg, actual, exp) { for(var k in exp) { - var parts = exp[k].split(' -'); + var parts = exp[k].split('|'); var op = parts[0]; var method = { @@ -3261,7 +3261,7 @@ describe('Test axes', function() { }[op]; var val = op === 'initial' ? initialSize[k] : previousSize[k]; - var msgk = msg + ' ' + k + (parts[1] ? ' -' + parts[1] : ''); + var msgk = msg + ' ' + k + (parts[1] ? ' |' + parts[1] : ''); var args = op === '~=' ? [val, 1.1, msgk] : [val, msgk, '']; expect(actual[k])[method](args[0], args[1], args[2]); @@ -3334,19 +3334,19 @@ describe('Test axes', function() { })) .then(check('bump y-axis tick length', {'yaxis.ticklen': 30}, { t: '=', l: 'grew', - b: '=', r: 'grew - as x ticks got shifted right' + b: '=', r: 'grew| as x ticks got shifted right' })) .then(check('add y-axis title', {'yaxis.title.text': 'hello'}, { t: '=', l: 'grew', - b: '=', r: 'grew - as x ticks got shifted right' + b: '=', r: 'grew| as x ticks got shifted right' })) .then(check('size up y-axis title', {'yaxis.title.font.size': 30}, { t: '=', l: 'grew', - b: '=', r: 'grew - as x ticks got shifted right' + b: '=', r: 'grew| as x ticks got shifted right' })) .then(check('tilt y labels up 30 degrees', {'yaxis.tickangle': 30}, { t: 'grew', l: 'shrunk', - b: '=', r: 'shrunk - as x ticks got shifted left' + b: '=', r: 'shrunk| as x ticks got shifted left' })) .then(check('un-tilt y labels', {'yaxis.tickangle': null}, { t: 'shrunk', l: 'grew', @@ -3357,8 +3357,8 @@ describe('Test axes', function() { b: '=', r: '=' })) .then(check('offset y-axis to the left', {'yaxis.position': 0.1}, { - t: '=', l: 'shrunk - as y-axis shifted right', - b: '=', r: 'shrunk - as y-axis shifted right' + t: '=', l: 'shrunk| as y-axis shifted right', + b: '=', r: 'shrunk| as y-axis shifted right' })) .then(check('re-anchor y-axis', {'yaxis.anchor': 'x'}, { t: '=', l: 'grew',