From d13b69558a5aeffca302501adf80dccf874eedd4 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Mon, 26 Apr 2021 14:57:17 +0800 Subject: [PATCH 1/4] docs: add warning for outdated versions --- .gitlab-ci.yml | 2 +- docs/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 672f4e9a66..8b3a502307 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -63,7 +63,7 @@ variables: CI_AUTO_TEST_SCRIPT_REPO_BRANCH: "ci/v3.1" # Versioned esp-idf-doc env image to use for all document building jobs - ESP_IDF_DOC_ENV_IMAGE: "$CI_DOCKER_REGISTRY/esp-idf-doc-env:v8" + ESP_IDF_DOC_ENV_IMAGE: "$CI_DOCKER_REGISTRY/esp-idf-doc-env:v10" .setup_tools_unless_target_test: &setup_tools_unless_target_test | if [[ -n "$IDF_DONT_USE_MIRRORS" ]]; then diff --git a/docs/requirements.txt b/docs/requirements.txt index 6802c11198..930e8d10a5 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -19,4 +19,4 @@ nwdiag==2.0.0 recommonmark future>=0.16.0 # for ../tools/gen_esp_err_to_name.py sphinx_selective_exclude==1.0.3 -sphinx_idf_theme==0.2 +sphinx_idf_theme==0.3.0 From eeab4e44695982493d0f9936b3418be7cd402af5 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Tue, 6 Apr 2021 11:56:11 +0800 Subject: [PATCH 2/4] docs: add google analytics tracking --- docs/conf_common.py | 3 +++ docs/extensions/google_analytics.py | 30 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 docs/extensions/google_analytics.py diff --git a/docs/conf_common.py b/docs/conf_common.py index cf5f1418f9..c055657a71 100644 --- a/docs/conf_common.py +++ b/docs/conf_common.py @@ -59,6 +59,7 @@ extensions = ['breathe', 'extensions.html_redirects', 'extensions.toctree_filter', 'extensions.list_filter', + 'extensions.google_analytics', # Note: order is important here, events must # be registered by one extension before they can be @@ -361,6 +362,8 @@ html_static_path = ['../_static'] # Output file base name for HTML help builder. htmlhelp_basename = 'ReadtheDocsTemplatedoc' +google_analytics_id = os.environ['CI_GOOGLE_ANALYTICS_ID'] + # -- Options for LaTeX output --------------------------------------------- latex_template_dir = os.path.join(config_dir, 'latex_templates') diff --git a/docs/extensions/google_analytics.py b/docs/extensions/google_analytics.py new file mode 100644 index 0000000000..e565318169 --- /dev/null +++ b/docs/extensions/google_analytics.py @@ -0,0 +1,30 @@ +# Embeds a google analytics tracking tag in every HTML page +def setup(app): + app.add_config_value('google_analytics_id', None, 'html') + app.connect('html-page-context', google_analytics_embed) + + return {'parallel_read_safe': True, 'parallel_write_safe': True, 'version': '0.1'} + + +def google_analytics_embed(app, pagename, templatename, context, doctree): + + ga_id = app.config.google_analytics_id + if not ga_id: + return + + metatags = context.get('metatags', '') + + google_analytics_snippet = """ + + + """.format(ga_id, ga_id) + + # Prepend the google analytics to the HTML metatags (which will be passed to the sphinx templating engine) + metatags = google_analytics_snippet + metatags + context['metatags'] = metatags From 539f7edbb384a53e11525125096d05d1e36fe11c Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Thu, 30 Jul 2020 11:47:24 +0800 Subject: [PATCH 3/4] Docs: build doc with new layout for target and version select --- docs/_static/choose_language.png | Bin 0 -> 25922 bytes docs/_static/choose_version.png | Bin 22448 -> 19466 bytes docs/_static/js/version_table.js | 54 +++++++++++++++++++++++++++++++ docs/_static/version_table.html | 7 ++++ docs/en/index.rst | 2 +- docs/en/languages.rst | 4 +-- docs/en/versions.rst | 12 +++++-- 7 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 docs/_static/choose_language.png create mode 100644 docs/_static/js/version_table.js create mode 100644 docs/_static/version_table.html diff --git a/docs/_static/choose_language.png b/docs/_static/choose_language.png new file mode 100644 index 0000000000000000000000000000000000000000..9b24c1faa9f22fe4126779828d00eb81d34203a5 GIT binary patch literal 25922 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

|J#)lm~0t{;>1`%CMd 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 literal 0 HcmV?d00001 diff --git a/docs/_static/choose_version.png b/docs/_static/choose_version.png index c8927df118dddf510599750fe1da789bb6a48888..ad479c7fd93c668e889c263b6117d9321976cdc3 100644 GIT binary patch literal 19466 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 CE&-4L literal 22448 zcmeAS@N?(olHy`uVBq!ia0y~yU^HZ4U|hh##K6GdYkT}A0|Ntdv6E*A2M5RPhyD*3 z7!(*hT^vIy;@<4#jtLIm^?kp>j^r6C1r0ygCO0}yXfhC8k+flIfPRMS%Z!C0{7xsNF&CQLeXpTTsx z;n`^?c7NkjnBEe@A#h@|U5!a(_1bjX*SoLfulN3T^zqaA=fA)CWKve@>-*u?uV=X| zj2sM&8B6fL1~!l~)d!Z_jyk_| zVBp|UV3^gS$H)@X&5&_v>n-Lzj7$qWUobly*viqM7Q5Q^fHX*f9RofE4_-cG+|-iC zz!KBJz;UTniaCanX-30x_5=ndhXYeNzU*eZD|g(Yzji{k#!PdI?oUTfrM?fH+|2L5 zBf!99CQwlD&dcS`FaBpNo!%lYKB;^<77wN`&%1K(#lPR%eq7lXfA*{VjAQ%W|2yq} zRqVgw90?=w^n)LzFU4MTRyWFCIREgC&#QON-}gJmVuarFUa{jd|_gA zYC9Bv+<(5@)z9L)Ke*T_u!@AI5uEyV={!2$>fl+3;lf=^fek{$1^HY@W=Rxkbe@tA2&$@8xeR*)De7 zRKB>Md0Dqbb644hqr7ZuHMf{fn_rjzwu`^cov$evls3I^`jJe%6KzoeMw~j*y~iA^-F;#=JiUBq zb!g~)FYf+7*G!f_JyY?m|9JQ64d?dj+H6^tenHh~+IuV2rApoQwb=&~as>+OEvA0m z)*<=XabHMO$%^VNJRQ}k@p`#h-<#vxN?u=$Sr`^Du{XXZBB|qF>86(Nk zCiClUvhBMso%-i~J&3F-ll^cb-~R0ST_1BpLj#Y=PwP3d@$mG_y$sFA+yak|sb<7gC4O5i zb?W_3RQF3{%P z(0J{<+Y2?TI~Q{^pXpziRKK{t&Sm!U#onPWCf#%5s^t3th(M8sN(PQ(A``;}V zH4fNg?)31*{`ZTYRh@cP|6}2D=Kz65E6~2+`C%fnO%2RP$KYTZJ?hU=GciY}iXmkDMqJl=X;#H@`FWlMLwplgpm$~u7 z&0aRELZ;9CCHuTP-u~;c)F{)7`{NGj{{Gzlbc)^9tM$JF#6H#>3d#L?|Nid}Yk1T% zR@=qiQ0ovgEIj}3YEj(P`SyE0Ft3{$R;K8m$M~xu!J8G|j_|6?&{fb8 z$(p@W?#+#vo9zF0ma#?uyWDPcar1dUbq)2Msqg>3)RFz~{PX7NE9@x_J_q02y!emh zr*moLV&1h${rc}_UhCir(TM4|vFw%c#m6!wAKAZ5X1uy>vAmV8)66qY!S5IDpT1Bx zbwyw6rRE9Y;-}U*hR$8_Q|(v2rs|24F<)lC^a$-E!lI9nN1ZOj*sY%V zSM1d79Jfg)0zTFJVT(Kxt!@-%bUWp4GpnG$ffTNLzrI|_-*uBM!_;R_?rZtIe||m> zKhjz-BgT;-NJ%Z}(Ue(kOOH8SG;<5yHgT!b+M5qr&WI^I755Sk!csUuPe3Z+?l!?JpNJl~=uRD7NG{FT(C&;nAVC`eNj+)epa< z|L>jlW6|XA7gf}RHU@6x`+M3;|H`!gmVYZt{%jUs;VZ6nVt+;5({Dvt0-IECSeMWJ z_2%};D@U%zT!=ZBH~Vk&qfgZpv6+e)+5i5${=Vq*zls;(rrQ78+Y<%h_ZzrHDtneWxvv7VjVw9Meblamp}Q`Fd5&Z(GW8dYiTvcA>r zU|+eY-gLoar7a&4znrNJ`Rf1W>3{oxlYe`^Ok7&qbR_M~oZUiAlD4v;6Ajduts(?DoIccX)rqgsb(|t7AW~@7e17wpAeb@wER&d07r$O4b?u zF0q{VT~KlJV&C2BOLTTio&D!)wAWkM;CuLafB7d2vW?|^I}{n`G)!12Rxe-}{^EhG z@}7jWA|FKsmAs$P?*4mhw?27$cKJ#{xoC^Ev;I!YbnlvB^?&>R-U;;|Z}LuB^Y6_X z#^d@ky7sCpv-|evbK#8whdYxjw3BFKi)SNeX-Z&C|#J%oAEt#%XY?A zzr|^ruQ92f7Tte$&!s-WODRI@76?TG_X` z;c4l$-=@b-pT4hZ;ji=O|G(S+@5_DGs}&`N8mmA3`}Ul>SKaPJ^oMUN@1#G?&FvM} zo09n?N6+(iB?^|@5A=!(ikSqJF5cO0e?v7%il^<^p6%w(532P`-sp4r`$c)xzW#Y!j!~>x z3#~VabFckjxhl`){(a;03(Ty4dH(*;S2@0#n_uNs@wI<1?GAaLJvmu`JO8uBgnx-y z`>MY2y*hI8!@HCHFU+`o4Fe?W|8U;j-Cs~8^Xu8KixxXv*1maj^Wes7Nj7!DznKnY zpZfiMxt;L8pXu`>z56YS@BezzEWYUM`S_{g_v-##y=-8(*-KE!qLV>iB3EqD(gn10tmdt(a`MFF%jDvx3xgdkD6|brU6O*4J!>kf6Hv=Y?Ic^LlFHNQ- zaBx_(GGtuRlsL#CP$0#4VaeryCPjq@B1{WBmnX0&I~>SlahUAq%-Pn^5X{k_Hn&Nz z2bX~l8rA;)&6j>}UmSHafrEpg@gU1C)0;PMuDp1oO8!fNwg59rL&Ii{fLU)|?ds2e zJNwY)FH>aGr?QqcFbHh$Yq+H1c~7}u!TeBWa0^%ULF@ZDM}))0x?BJLc)5K3v1`&A zvK$PI{(mw)ot&&*UD4Bje4BGKVO*JX!5okKSHg85*;@Vxym{ zl2XRYRTfi29tsP-d45=_#5bJVJ8$JjRW6?W9W6UII+-;eOu4i@ugq-j*`PCZWo<^E zpO~789_;g|t#Z4(a+u>d8GfuIXg5 zn>~Ljt+d8+x^k#=q$78*xJT1e%c8yhS86uq-+kF*wRPe_;q@N#f~JPv$m%hO-xYZ} zr&vtl&rVIxKg;gC*%M}aaQ4hi75m-XDBc+C2bUzn}WlGNDnTA-p} z@9Xn*$I9;L29^Hxa!qFMoDdg!zht`c(dE_LCl;)k7VNBiY5S?G9cR-YS1cA>ZXEl| zFP^bq{oFKfv+SF5SewLUowiH~-4e9x@Xk}#e-^daJG(tO`iwoudAZ+JuWBYnjvXe9 z%Wc0lALZ`u;d=aAh^OgoZ%N0cdkbdGZdoxoc3p48tT|GBOFha=#Kg=W^ItLEb%xz| z+S$m2%FTQB+}J#M`tccO3?fuceh7%Q4DV6DdQw~U*tfQ>)2f^L4#v&Y7fWh9a6_P= zPpxx7tG3FKuZJELueExj?iVd+5t1vhX9mZyv!9or{xIvaqrrO7&(qFEDr~iCe&`o? zPW38-_t)@qSK||ZbUaf#@7)uSa{W+K(TZb@$;o~P9DS<{_uSM8>tC`<&HrQaE3N#k zuX-xJs}^*9zi`#))s(Dri~ZMiE}C4Lm49DLch9OlmlGdwwAh7a?fLe^-R+0cm6r4! zI-94Rjb4$bGWq!#A(01bWtE%HihrE=Xxc6HBktFGWG`oy9`iHHjQi>Qo7=tdK!#93 zz+{brd%-XF)@gk*)_!vEk$SN5m8!kFR<1lMVB;bivFLbGz{{13w|;rm_u#Boq?mkY z`KCv=j=q29J#G2%Nmg4QrPX#fPFfSFYn*&@QtPHY-Nvf@OV>WF2=tmBub-Q=p@#M2 z=V!kRKImpCu2gYw^+}vXPfps+Y~2! zh5hE!%bQOBO?tpBP>{*Qmr=CiYvA=bozImznOAj~q7T`tT=PC3x`l7!XR9519!5*# z2q!f(bPGr@`zj?LKRap8Y}LaG1~uG=HDoq1H43UeXw_f&c}M?;Xy740s092rxIu*!p z^yo2Oc=F;?+ogsEQ>MqhljkfsbL^F^;gzME%vu{}guYLI5^ip0VrF*Yl+pLxDI5j& z8kQGHYxnDMzeso5ux*2(`ri6EzNrpM3J-ih+RLuSPN@4)^zB^4)sJVjr|Cv)c++|} z=-n&Z_iD4&g+EezXTPa%*V#wgRwsDyu*j$zh+SV`{cdfnCF^Rww_YJ{;-=MnXnVO% zc;}xslh?JU*lZ=TcqT^M-HqJ-;B3;`*fK>!0f|7SbCT+u7dOdDs+LyN-H4d>vu+hf zzulr<*WTWr*7yHdY@apDd|GPG)El+7y6KT@xtpJ_&zYSW!`)H;*I^;g@#~`Rs=Kt# z#0V_S=`nedZ+}hqgrld(akCuVr_1E5ws;x5kZ=JFq&(p9WmBo0v)$fyQ{H)Q?MvoQ zi!Xmmdn+{ii})2V{Qc)54e>C^R^^C4<@(Wmx z_4;3tiM3QVsX54ZbkqlAmEyJxKUG`GA@EZp;a&i!eNA1+(dKgVU`~3-?4s)%=(o#Qf-(-*Zbg zk@HU9k3Y+=dg~)SH@-OSdt#<^r^nBk$)z0G=ihi_I~axYyXwtN4ac`5g7<{fhN(c4@vZoc>Xfi9Ob;r%oIJzIWz zNBi}?$%!|Qo8(UonYwC1fKXQIA)k8|JMw}Bjh|jPcy-}3-kIOIk{S(KJn@*S^YN~x9Dt%;HmrLFI#+Z_iFZ>wL;Cu4sSD_ zeN8s_$iC`~WLQjHI@g|GX<4_+<)f$Lel1y|mA^P6!ESBIZ*FU? znRgmLevswpVPs7IBeqDlF8Qe1*>$=vcYj-dc=g`4Kh3vaZ_y~au~ji?+Z(SZMHd%- zO5LLC{50((x76*klRhcG(nKJn+rR0i}h?V3OJUUv5s`MVnw z&E8*7*m)~XY6%O|ImHJbXTNy<@o>e5&G!HNUu`+xCs*1Rx`BzMp~0Eu!?GUZW1j7& z%Cgj)wtT#-yt)1oAt|}U^vB;ikNylM zmj7-GWEpJaXi!rRt9HsgX3u!x$&Y;J6$g(fG0d71@s@L|B$8nbduOGz>(>{aeYAkl zT+!%H+S0v0?!?F)&a+svL498JyH1X6cO?~>1!gQ@d2@Bix}D2dIpsNDsw=VOyRo=y z?_Otg%lBl3`^o@~+Yhq}cb{}@>-0Jh=c}~$(e1S6|A&?4v%7E{JbduXH>sJo7(JG} z`nA;idguaA_8X4VIz12k`|Y%$>(%>zMp|9r)kjVAHZ?77UGcOj=6C}8*(pc-A8(X! z+w1ksH?TFxpG7zJt4DF?9Q{6FBdK#~9+DeBKXYN-6rg@HFuv@g*W!8h|92kkIdqMqBP^`0qjCS1Mu^JtGpoNJ)A-2IwmXJ;g3oC;O?H)o1UU2tAm-0FD`&iX{!#Ftxz z_f42ye@5r-)<zdYAtaK8TKP7!;UO6#jdDc?5-SZkY`+v^UoNV^GU`gOz zjkOuydpW)v=SoRVxmskkabM^=0r+Zqj+;+AFuillk3UUo_3! zzW&6=puUAyC3(ubiuAtTu2F6J6@KkTVExmWzoKpZ8F`=f9N}=?w&u6RT1P(a(`Qw5 zqZZ3L=lSt}I`k0v(oGiTH@nBK3AcOC& z&|>G**k46kJ@((V%vB)y{>R9ycv>zf?RXK!;xIYy>Yad_g$@iRmV8p2 zF(uke3p}@H<*j&Qp};UphP{_XZvsI!X z>Ds%~x>HRbovzU?{=RnBIms8&>AzOh?ws0d;aK|bV(+7d#^Z1Qoa?+fBk+2}r?wO4 zYQiR8uA3HAcgoBEZH$%y_r0u_VZsq#4?8hE-;sWB$JLD0ORaZKU2Bz6&Xk^UDQaQM zkIB1^1$(o5CcLQWd%7vd_`ynN^?M>>x!!%JVjj^3f)7~xrbI0xH&QHm{r}ha)v;EB6 zTC$q+P0`Byq~$xzigj8&*EL4rOki%yy9l7 z@X3siN`D)jPN^um5ioamy5zhNR-37Tb!oQmj5hwxl9Eoj!ZKYz_x8lVAa~!rr;P6V ziv}hKI$YY;qjY)ArVo>+C;clfSf`kM@w$I`-8YOJ05Yx}P}d0&_O`J3^q6IcGWUt-NoH`~9VT}nsl z+Zvy^X?ylgn*F8l-oGy=cG>E$@wh+byzlMVTfJ>eGv6Ql`mybd?@Mj-Hz&h0cuPsq=6*6!V_m!xmYKYg(v z_}c$N{j*$(Ds7gnGD$w)*CYL;A*QS}f72_6X-Z|uQd_q=`NZ${i}+c1j`{1!ejQ%k z`MdSpcNpjIKQe9R%7j=o+lI%z^O=P%ugKK6yYFX);kw>w9krHIqj%;0mQ*d97~*wa zBv^iqNZUG&d1_td^KKkFeP_qch}TPm-WnNid)J%$vaE5F`Nm*VPhT$ccb2oFL&9SB zm<#PT%9yawKcqrw_x?HWo|^YBFA$vkJNV(VwU)ehT;I#>3F8?M%Bs3bgV9v_j%1!oqBY4xwxV5^<&?}TvkbibV%PyZ#*f=F;lAb)B>Ard3kdz z`2OowY`&sm;T(NFWuo?xPN_CiSJ_qboI_fa?@g;!+4yCvX!O$LMINW#ZY(|Dcu9Br zr+~Evw~o(Qd2;3JP27BY^|CBJJmWsO^8JItq5_4`(u$*L8dZsI86F9SlOpGwV(1M=h27Xu3^U%Hhuaa>HO!KuIH8fmKKLi zd3QI|UwspQ-BI*l)0BXwkT*AL7Bp%vYHqN)`X%IulJ;s&oo8EW4s^bY)I0J>@V9sQ znyI>021e|2R-CN9x_kR`?F#A5*{e2fZxNGyEva$x(p~wfSvxwT%ii9YWOg^;&#^Aw zkt3TT>aXA(XeL!F-PY z+PAWey0?s~6B1lGKHh6y?L2eOkz92>kr;!&v34EXXUc~hae5ghJVW=s*OJe7HU~|( zd6;j?y8!Lkx;00X9!5@5ZWH5SX8g^0V6)2GbT-R|102EykM5MV*s^|hIA9B^ZWqs8 zIPGyeLq^e`Eus~#-nYnDz}5oDu{cbAckx`n>5t9~CYE)#xNJ)KnHG3{&q!bK^oJtD zEE)S;)_J?w880lU-eP>E=#Kz{Z{PfFO#XM988R-}-jd9+tm9}(>A>_Kh)&fQGS^q>RWP%}%xe%fv3#;SMu$;CK0kQl6Wb%qjT4n0i1;dT=LbukdRzF> zZ0bTShT{zfPJo86CeGZxGU7vd#rrcG6GRp@9yp@-K*e`aV}9_#mNWa0r_FeOW~RlH zg=!85Y#1xr`z!SXxLJ<1Fzh*;?z6#pp+kZO)45r@`9j%bn3)_7lrb&vydCN2rC=b% z;xKu!qvRV1hsc~PX(|EY?#ZCaj7h9f)Ga!8{>s183AoZ4GnKu z942qu+%&}@!Gxnh&Ar)Z3L{I7I>W3jb48c1FfDduFtL=HvXDn1!J1M3_T+EgCm*#Q zKjzxSR6CQS^j>cGwRrvYIU&-y+m6lJW@CGBzqMuRf^C1YdV}(d{~hFvOgtTaZr9(d zC$(jrD;!yLW0eEz=N3kqx-2@lt!3wk+?~;_?&G@?<;hZ;||NkNP}^nKw)!f!60=z6T3J(t4nJR1N zuXJT<{oLT7>uX*GthSDNy?(BJ?YC;TBYWIgTV(A@lqQ)-^)B&KogSC_;tMZ#%I%4_ zuPxE3mv2hUPSSq4Ve_&D;oGmpTbA#NQJg(vb?RGw+iwQ{yEaYTUlKaUYt@HNj&Gk61$Ql5-Kx5MjZd~D&l`>~jki|KvL?Yo z_PxiGB))3hGY+EwXXrXVt)i`{L%7OI6hxhp!Nw;I{S6ETyuGJc7IT ziSbWW<9^sEqi?e@^u(zy&HdG@osZwo&0n!6M(MS|CYH_5&USL8EcDy7c;A~xQ{5!8 z)*dKZe7G!o(m}DJ3BRo7ZQ|qjRW_B8m35QkT8_$}Z5-L>o_bt$3%hXW3hShV)V@29 zq9!{2VC{a+GWk<6mlp5A`I9Fd$v<`WT=rGrJu@}CpTG8dek!uYzV`0Vo;!SO@pCq% z#N}j9+rs=YP2HQNt4Y6jRw>W^50#pW8to*b*FO;vSUs(<%eeT(PHn*!fyw$R+@I|J zv!CRP-(%x=$>(Rx2|mS*~f-DizFlDf4t*kk(sgkR@2c1Yo=Xx zUc4`K-Lcq-xq07SsK)&I)2+WQdiS&Gn`fAxpR2d%`XUy6tCkGS)fr2zv{vqlyZ2CB zHRUmXxR#W40n^@9`(Em$ckwfSfAb>q-uBa4vr2a;Y+5WSo)T#=s-Ra4nX0*xvpao7QPu{> zJ2QFPtX(aq|N0l@$fD~rS>QT%_xY`_Cd{|Ubye7wWinwdPkz?_v>URwau$ZkEDzso z+#0vN`{NQ3Lk-@dh`r}7NF9A_m3gI9XkW#w3-P7L`1ZJl)VDrVo;BM>-_U8Iudat8 z17lYMb8-0Hvxo9U-uzGx7E)^dQCC-I<9Opt>*?t>DQosu99=ixsVa&=S|>B7o%yBIYv^71H z%)R{`+qq+Tm*d#a&U#w!9(KLaeA>QjlSe-kvc8>5;9j)ohXpIBcm5pQJHNSkyXk@a zAFr0NypdNo)R?1HcaML#8coV-#nYj51$D_4>@md*0k*VlS-cK-Bldw#r= z4ZZyJ*0S9jo1-t@P+XlUc+`Gtn%nQ*L&c)a!WRtPj9X`UO3m0(HQUdxw^ep*R0(tbUjG&S{IwD@7kOKJK_PDK%F)(UbJmm?jr@|Q=8IS{MK`kgvc=SfSXFELjlm|KyF<4)%E;N(y4~4y_UE0i z?dRSI@!vfw7jpDMKukzT%<_$^i&}n6zSN@<-M!)TmlrB#54q+mM*f^=^zZH(=hJOg zi54vx5nna#D$FxfX8V6s_eRBn#9zB_9(50%TY61qT5{fmo0+pr6nfe0(*tjpElxO} zEpJ*79Oizj;?}jW+E1@m&kxCbyXb5;&(lZI=Erki9COW@8hX6ECZzq*<+ejl1r{Z4 zG?Xxjvf6TTX=L=}$>rKY-|OaBU8zitIO_P!j%CiWlXW4yU(Ef2mg#(7nkvmd-PA1P z{b6A}rwLn37cc3X^)&3cd~I-2R#H}yrnQg1nJ=eS>ZV<{8z@wO;(yDWh$=kG>vZ z_qcaPW0L8$lPOD=m+6&Wy5M%Ie{XzBN3G@2l=CtUPJ7nxTDM%c<7K{>>9n_p>l8N0@$2g7n6rCj*2RC#6%#!Jc23hQn_cwwOn8QX=G|RMv3+czd6Qh+kFVF= zkl(VDcUF0`O;ke+}oxb?Nod0a%Q*udUtt!j?SJL6L;A@Z#$JU zlg}kf+Dp_!LjQ=CG5>@$Hep#E@v`2!>Kzxhh|FtLH}sv_apQ|iNL9}|dE=7Eq`T)t zIX?;($7g%g)W2U;r@X%Mv_$m^i=fgctvfDE*irg(;q7nx{YqzFRC~Z+!oJzUck-Dd z!sah>=dF5keW&H@p!*Xq1sP7syI-^AM_bHF)ued8r&HhEiF2^s+&<-b-u+ndT~>R~ z_w)+?{$!N*^4#4^W^??bOAE?lpZq!^FsB>b`L~)LRJH8JGWUNfby-Ers&Bu1*6C_1 zd{^=A1rKBI!k0@Hg{*Synp0z`7ZP2yjIs67-ivG6`*>aX3!c994U+k-5}!C$1xRTg|zOq^fS+ZM*Lj-k^~j{*X=8DOh~rn({tLp_QDL zf-}|JmP%fclw$Y&*eG*r^|qiln?0Y{%0+GJu|BLG{r$*Ddui88)kLZ|M}n4ekkHy}&n z_=IUEbneDH?_Q)-I5bNt%zOMc;uvXWOR6XuByxFd-fauKfdbP z-KUXTlzhUaMdNL+OWMl|ihwWCV#(4?C7NlUIK ztZXlsWT$!KwC#?>;$0z~%ks6)bst~mHnSo0`P>-?GK<4k+fAIxzA5Bm^!5wZ))l(@ zQ@v9TZ&bb;ETv`cSKziegWWIT);q!FcB*^|+WhkkAH;m&p9dOen0sRj%fV`;I{|X) z4k{8gzhqB|ug>F{cymp=^Ah<-0>Xtmza(o~GG3mZcT=ca>%7SXkIMzl&G)%n@@rW- zuCL|Wn$o!D^ct6s>zB<4@-kc3|He;JAx>*qz(g(`*;V(WHYKReJNcyOg@A(4@;vK# zf7flu_?#ViWmOVK!xW8~nzzG@xs3`_Pqdw>net69t}5k*il_H9L4C7Ht52Mn^r+HG zP)a`g);Xy{rZ9%y2M;e^R#94Aw&q5Fz^>I2`quf+_8vSPv%ScF|3!ZFh@GBNJ6Hcu zi<^E;=DyJRBa_{-oYOa(l6^~YaGTYjd}Yq$7sVFWmV+M;`p{=DMqtn`k zhRK`_YIAu+&M-D63NiTd2`i+qGx@18%qlSoFkokC^JFlw^l6wN%V9B-A>-0Xhl4T# z5^9VWo)|DXl_@+(VT$|z=ed1gc(}OJebIlHPi{LXBf!A)O}L@(QeD~vW{w^e#tTn8 zF0tNrI8evb7Z-gT*8TpdTQj%(_SCP}PisqGb^9%&Q1NiHTqn=7-&M)x8rs{lPOW~D zrL6s?GsJL}MXlem*ZC7nb1SQw{@qD`K9%1q>BDpT?NfAZ|84cj-&mrQ@lvYu*Xy3s zTGqB(G6eY;8Ye0}n4oqu(et!w&E4_+>vuffz{jBTKk~#K?5j_!$_RkG=zZa+_vSRM8`|StgXM8*H{buD^=J$7HH5C%X zIeH8k*-cLJ%~uzEb;|$gm6HDMtWx*v$wrE$C-=C|_K(}-JN33{K1bFT06l)vh$QnFK1e>?Zvp4q=B z=c#_I=<-QgHA+o?Ya&|Kz068Hxt8&A)clV2zZ)mcl5_mF-pEuo_Ke1v9ddJQ>UXUd zpEdp4oQo^8&e`R^HOyJlp?*1C!`MGAIGF9G;7b4V8CIp6n*OzQXa;spl2nRMdp>vB zrf%{4S^Cu`51k_&4)8GUHa(fZZRt@f>mSL^Qfs~Ms;$O^vl*@@PMf<#6zjQnO>cv( z==!v8wJlpU7yHXI5--y)->6bu-Vm|1CwR`xPzFC)Nt(_ee zS1K*t`6B;FPS9>8_P(QO#>NqKI!oS5m=w(R<(cS^FopBRde0@hBY*TZ$^K9Aa!L`n zfBt;GI>+pt1wSXX_k0y!e`DLruGcGehgNLt6m9Qq;r??&rzzq0$HR-9EHW0X@=%8K zyL@dEE_x}vFOjfdQe0aiW^Z(8yML9M|B>W}%q{U1H7td@w^bg?y3Qe%w>S|oTz+o}*zz5ULTU~Zq7v|iU zp>)bZeKjZ^&sOW&Pbd#w1@u1!6;-4%Cl?z)@YUH)udrTG-e z-TQa!+EsGF=FT-E1zCXtHpcV}p^4^wvUv}duIV<_)pA{_e?04xz1Ayh?k64PY4ToK zH|B^43R;#2UtRQ<{c`2h<6gWUSHJXe$%x`Qe_-;Oz9mnkXZM-buDP^qW1d0l5&!%W zea+OLw^yVpDYj&X^5*r<{B{zjI1n>_$EJW-W8iMT;L_KlG*4Ah<)) zmdWp;iqoev%~S6zxh~9H@PGcks@N4;uN~}N3zOpGj_Kar8GWm5^|G~AJ9g_8)hey$ z>ozJAou()_YZpiA-r_S8X1LXM`v@<-)MLf2+Nou(e)MSP%KbZE%HKT@_TiP;)bO3j z<&0lNHHJBzt(LOv_tWQnA@}anP2n zUv=kc#a><@b9b(qwKUTt=EgjxbC*;uO_Q@&eDdCox~)lq+ds+fnes;5gsau<@`qbp z;j4e~*R4ukn(_XXim%S8`&Sm^o;c;s9#|HIi!Ew6a6+(Pp4!JnpKdf-wS-u*d$IdlpIjxYZSJXDE_(ln{fq0M7MF>{ zil~P#vsE9hD(Xx2Oo}y65zE-I;?s=+mCi@s#jjrp`TA#Wq`nho^XX641#%9ts95j2E5=6g&_RkN~aSFl^v+WolI9uqgSj;%yKt zB(M49tJB=_{L`zwmYRp2+h;hDBWjo1qJLJ8H=VL*`Ch=m;bX(ZmvQO&!zb!WU!VRz zF=e&jYxlh&s-zJ4~B0+baJq#1vkp5)^BxVQRs(%PV2cZ0iYwbyRX(dG;SE%)SR z{B4?f<(2i`=0#2G<0roUbzWQYje^bcxyOshr>*j*o95E{f!@_gnku z*3s_LifP@?m#&t})SLMEXrYta;hR0)T4GZTZ6-W!eYed#Bu;N)>4klpnUbG-FKVjY zYxUkFMptL2>s(d^hDJ`m19iTWPOT1~HO=dp?cWJI_Ik#BkM&JnJ?|11k%Qn_Oc@^uLkDpjPHygRHoB!Y}<5gy+6BBF0 zV{0FZ|DQcGK4yJdr_i)z`g0#1KQQTuYrBAMs_5D&IUZNPe&XA&p(tIyBk1Cd#?WQq zSIzG}_4#ywI)xXOvc6H26<3CbTr?WNpN?+}*c#!h> z=H1GLHyaMPs3rWj$Xw*OYU)?fQ@>8Vesm@N+>D3e)t=Ac!^~a>5+a zUKQxizs^EHW}A3r^#PL`JVmD@SQHFCa$2l9nP*h-aD{u~lwBTc&n4^#o>IK>eZRQN zg+nHsg?l&rh*{0|v-5Ho3!hq-ahcG*3Z6F&S05!<2|TU?)#5^q-Iv2v&x?GlxsfAZ zcV&+I@{HH15q@r=rOJ{v>C+lqd((N$>~p04r?1hh^NIbtHq3_0sD^2I#q7t~A+^^t zc;?t@cg&h)bfam7hTZ8Hs}5$Sca8_%6;2AN3l5RC5B~FnXN|$0=~~(r>Py?*kk&nY zgRXm;92KU>FJ?beYT>olSABhT+Y*dJde?>*cRfEd*=FxF&*!W6=p24zGFf0zLxZ(I zL%QcKXKiQMeM+o8BRmt*$%I|M1^-ZB}Z7RX9!ixOGv!%WasDaH(bLbV!McC*REafE-zfV zG}VQ>sQB@@i%Z01C3x7bshlWsD$~^Qkm+$tPEUW{vSz{SkW-nn=9pv(O;gRdR66V0 z&UrITIGalJLN{NVv)I$dX;zz;O|5A(kBc7zQ^mEe?8IN?Od-cpS3hXIULSk-+c^`P zLz9YbD8yc8kW=4SY``zoDpquE!?oKX8)nF~nn_Pq^3mmsqvKA$gs>&xp1Yrn`#c6m}vGOSE@SzgqJ|8ch8+f<%+!E9=b#>)Jw z6ItpyVh=U7B=i-(Z8lXfP~^0DzFojLW6Rcb{Vgqji@p}sFI%{G9W1Wn&k;uAEs;z$Y)7p?-KrS<7QlRP|(dQj+0pI%RGzL*kAJU zpQn15DOxN07lhpn(G1<%i&D7D! zeS1=0|B9QPaI5R}!23d9zx?Wzne*?nQ0|+{=UpG(VOz_1nq{@*>GE5X(uHQUE!&f< zT55Ryh}{g~?2Wau=ejOmcF!ycQAt(dao;wj=4WW<{a3AxRxiW<>Po-T4_VZ5^?YEI zNsmU60Ut}7ia}Ae&723V=W}bSJg3ZG_wUg3`P2FKoL$GjAnp%37hubSzIC~IuN*28 zbdD@sBIci7s$y)Q)g|}R;*Ueql|W{tx>k<>ouy7oa&wh_ZoKR>E4gTwyWX~Vfw|2u zpZ6DksdY5jw*Ix}`IO(Ymz`dALg5yNv4K%f#@eehH=g;zowhyBB3ff@{>4KAp61Lg z8x;+b9xqvGCG-Emik1Ysk3Yk=%5pa5FbUQ@YH6)qKKs_RTdQuV>2|ui%f6cT=+?$> zGB!(YPTVP9RR7U?_Rj~$!c!d%R-Y1JvfeO{$l5|pOLXP$872KZQ1PH1qr_# z7CjDQpX+nmYkky8#vhG>&fc-MC;OAWce|*azH(=Vutb~q&bnP?bGI&HtKf=nY`DzP zbH(E17j7jj?|oAqh5HM=S+IfC`^8BO_dO|&CtKIstv@oK)Beu? zZG2LX{v7o_(ki~sO6TbD8wVe;a)#CUeVo5n;fJRhlrM`>*H(L1QP56B8 zmrjf8b~Z>Yo5`#zylWS?>X$U3xCeTTvU1D68W^PLGxn$23H`aOvhUCjzmVlY3pbeC z`}NN^{&2yW|KVG&%eqteA{ulaH#NL`<~d1a|Nnp073U6cnBHvu-g@9NqZ^0e3|6LZ zLN7MYYdKzagPZ>nbEBYwK~S}g@&m0IEKGTh4;s}Hf4vgp<(pbk$zcg)$ftlx(nTzL)TC$r5UG$a{rS)2 zx$erD;QMXWMa$|9dQpJ|+#Ef^Olq=0 zn^;`?CaW=! zoO-5XlUD5Btq1JO6+S%JF0f8$McoQf4& zPYb=+eEjhyyQXA^19LgP{H?t-_Z4p`E7LkJhGU-Lxso4F$8ydv@zm8yyni+JH^Y_N zTR~oNMi*M0IA?Wi-V5)$c)?>63iU@gGFv`x_9Y;5l2#kpdNq5=#| zhZP@m?)uOjlgVAM{#t>9Q=GyB6{do-4U-+3Btgu1X1YpqLnLM}GC3U3Vw6x{tJK8e zkPyPzpyn=WF2csL22>NevT!yWSRvGq{n`yG_@X*@?$sj`7&sUj1=T-1h%Hx+6A@ux zX=vbOSy3po&UQPahzcXqVwVNg@3_ua$g188-~lZ{{uaAdu<5ZwLJ8-ESuH1Dzi?{5 z)Nnw6C1H*Xv~AmPO(o{D72A`A9tsKb4m1}E&5KT-Cvb$R@uDij>ysCs@-Ag$%x3wu zMm=%)aVZ_pPNPPKHy?YLQZ$%2Za6OJS4&)eoG)*J2uF_yqlCJ9*P6|5jX0Vf=FCnw zFUo0Cv2XR+dmESO`ul%)KRqUT-pt6w+io`bBCnxwn|*0_0BGwXWVCM8!yV@yv2V1V z6{-?zSQc{X^2eU8GizS^9ka2?S+hYs=;(?^Uo2;?Td%nL*14LbmF`depb$6f#L^-!GLeCf9f$@0Bv|!@J*1>V9hJde?{9rSReWDQAAJi z+289aTfQ!zbuCd+=IEKetVv`(1Md;Jq{RWEty;0id;*}RaJHqwX zqGg|FR6*dfW&Q?fHYTZ4P{tZ{O&{6MGC~Grm5P@{3EdL>Za!|bJe)w;^NBp+ZS(gIl4gG=z@ICoQL8Q z4a~z%q#4Zc*%fI$`&?bzja$`^mfT+Pwd;<$R@3n`!K$ZQyTxCBICQ}2_SfaU9AfLe zT*Qs5SDobY_M3fm-t4O)o3jiTfB4L_wD83?=^Mg2CRw^)6BM4YORlLTAk_UH+3W_V7T8fPP)5^{g~ z-}MWb&Syr>6Vz5edM>TP|J9|s^7oI_=W5;Bc7E}ZJyYZU-HR>HmkPCGmXW@=-tUsi zw~MFk)26+PDlD5BwLI;^^JOX@XBTb$9QBnYKkd|`pSv#aEc!O*;KbVNiaht;q;xt2 zen|D(-1ku2PTw_Ul~td==b?`~?!TVk@8R@mQOcLAFT40$jQrC7UYnqK_JmaboG(m0+ivzsWf?1xmf(}%Ma8plIF^9o*@b9&;c-Zcwa zS8}TyJS9{4dg>geq^m}Lg=yy;OfSV5|8&}<@cwiCgf}0Ko)%U)Ytenr$@NOzqazw2 z)4qO>wql!oJo!QJo^>kQkCcC1Tz)QP%8V*$=LvJ{`Y+lR%=+y9Uf4ALO?0`{V!zy! z4@a~oEe}ckD!8O`$@Kai9@AzQ2j!~#=+}$iR1x;tGxK=EHfI~2M1!~2@}C}4U)&sV zcKZss)AP)lm#@}*XRyh)ZQ{~x#@$=yrS4m}JNN6q<02gaj&W{+C%HT${{2YW`0B~j zYx$|aL^n>X`;>jftoi(whps>_GF=ZfzKx^)&PJrzB_?EBYBb3w&f zQ$AS*f1l_0?(xgz?`-}@J0Dl^|M*`0eD$RnUtPt8e7)k%2mEoJAAI%bkDb@|+~+UJ zRoQR7>%CUZqo3mOG4B7@dUh^|UbcDbmK}aK7hanPUlTQp-#;I`Klp#5-lpZAEC2As zeKC1|J5}_omCx)q8Pm$&r(O7{n;K+wZ$;jeur0scT7Da@s95xLRfym5*HKTsUL6iN zcp=JvXUdhWTPAs^=Pzp0+q5;Xx8_IAox5ju`BrBHgq?m_=y$(sZ_?$JYgwF=D|1)h z^RU!;ZIHS#MDUFuc<+yAtKZcusg3O>`RC-7w=OeZInD8}`=m6#z_w@kuQPwAWUuvk zEh}^BE(8CqbCV{!g`U-YJEi^b3c==w;-V+RLLV9@`fs>WmNv0S*W}9rEomulU!Kz5 zsisl+4^8CTHZI<_s#WwK$NU9WXL>xQZCZ8jjM8oAA8p^e>p#cso^N`3_vbs+OERO5 zMjukhySI9Wr>M)R_f!9$Hhv{8w`9-fQ<}-_@5E>Q{yH^QW}dBq1kSd4 zvft{dZgY+FK@RuhCvP8JuD7kk`@o9pij40fs_wA9Jn$h6vID9A<-c=Ep2t**C)WNp zn|ivy-F$_*pv<=E3-=y3OIvca)ToxjrDF5m6SuFGSg`DtV}0Dp-g|J(?X)Y`jbnHd zs~#v?buaCbm>Pagv^)K{+WILHx23gKNbZt0O-byw$PnoUm)%GFv0FL+iIS%@8~m5Vs^;`R+HJt#c!nw6wO# zajbn`ek;1_>$-fM>F0gwSl)X|KXy6xOXleUzGmT4&3o79=Px_9x5G15c2=JEy%_%W z4W1|8`x(`y|4^9p??iP;(3RwQ`*iq~4lr*GoO(!;cWvx59sZ|FCihvc^8B>U@47qR zk2P1-6Rt`?wo1(nG5FEgto-|#k<-(3Oo>*vRv@-Vln==)LCtvUATYg?_^UL?%_Daj&r0B&hI&bOSTXE}~p0oDM;um%I zZ5;O}dhU5IDrdH3oAUnjNbN(K)oiumVQ&_!%h;%~T&|$xoz)Uy_*lk0%ajd26EFYJ z**vlK?1R3QPJbjO@=xtlt*}`2+gxqVN6a9G^+6`8>{ev4fuyzuT+x`dt5eH^@~0v zaSQl4#O5A(>G8C5r{N1j!}xgbT)wZI&RgcroR_e0A^WbTjQql<>{Y9Ghu(8xY2P$! zU#`rP`g-NJb6eZ3Z?5z)Tx)Xmrk~NY8KSQI@8jhDxJ%a9_iNgJzfgO*leIIM$@Q*y zZFx0WZ)(cRzqtha7|dfj{W zgqtV!m3{fN$m!mn%FOfK@9zbg#;(uZCG9PLOtP3uBOA7oEq2k@EWeL)Dkm+!ZuHVg zOaJtWBiHrn%;PuN*iO5$Qq=r)G*6)O@2s=A-8*|_H_Z|Y{1cp=w&lKtP5ILMI}+_C zw{{ss>}&c_S^P2SWJbto@2)4yQh$^e8D$=vB|h=n@6F4-L!Rl{b)}2wdZ!uGVkbuNqU_6TCczIyS~#~1jCUbGEWu$~%<;#4IqhXsO>-66Xt3)1- z>VCfB`@8#kuXWbGnUq?}wmxO4+P&-9@61CbdB0S7$LDE?7(RddMQru^)mrbbhLz3S z^@xGr{n_f{o8PFf*nan+z{A+O-?vUoVG5H~ZdkwkaJA{Q^z_;_zs`8n3cX+X?CPUP z+kb0i-us<*6W^@=_2t&Sc*(~zJ}Xb}erT-y_2hw5XXd<%cX3;{J$~{c zJT+-rhROEwtbMCq-Re%Y>sMVn%hh-B$NWQIFBOZL@hCs*-C3riI79MahR%}Z!or3J zEGz}1MPHfZaXu(4a`{$qOjn>lhNH)p@xqfE+ZihuSbhmH_&U`yFs*ZCFnJmEmhm1# zW8(YWLWXBdU+>=cPj}_3eT@gxmi>KadvxcncX!^bIlD{!uz0OA1JgV21B$+%>JL{v zk*0GUK<2Nxp7s0x6(4^4?PTWb&JFK*zS>^r<=@V5f}iD>BxCh)PyO@m_2=iv zy=aU}vMuLd$@f}6Nc0;=&7=t`l|TJn?Fx1ilQUcOvU1JL-|lNK2F5Fi`uoi@yuEne z1Su_FF{Y1G1IpiP>rFhm{N3y?zZK$Y_dm>b_6(dp@wMe^RV6K%c;i;9eTw>Zc_zg- zXKcOn&;oP>%eSmepZ`s@m+IhGFXnrE+g9^GXHD&b?aKr5PuzBy#2DB8|G<~)on!opa`P-{^ty|``+WW`%{@JtQw{Pd{C0pk79p{f(xpcl-8NdCD z20;y{o^yIv&t9zDHzRgy;}M4gZcN|$CY#Mjz3{y=YFGW0F2-r@2@IDW?$mISspmhu zUv5Qr&i?x^-*&El_T}60?`_|Av+~^z`TO4gsCMTK^F6BH-!NqQyM_ILAYk3CnaYO9t1wpY9=3{1%m2Nv$suH+YNlw-NxZ2M!~&3RTccGgeH zURGBTpc-*SzWcr8Hyz{DrR|RlGH;a}6?@m_f2e%HqXQq(&v<>^Q~WZ{T|G!ts@KA< zZIbrk`^H%d)xR}~o_lclyTj{SyL-Ox(%`S;xBpk6a(>zG#$(v3#`5^k<^zOwgrp%)CCST%=8+4!iY2C&A z_2|3W>+?VPT{ONlJLOzr(!Hu{QTbPHrcJ5$eH1;j_D9bT-j?$!DSOJ}>t;;J7SLAG zu(+{e%C(ttycx@KI+&Q&c^oKNFIE>^EY9^^Z+EU|;<^`BKUi4Q?e63BMZR<$4bP{r$a==ihaa0-n0=H7_^6 zWd0i!sl|5v%$J*A^6#%-=JmKDI7Od1xM!(HxMOO+eAd=m$B!SMC!;)d+hvcf9j94e zO}%2e{QRHS;{LXh=iYrhm!T5v?H6ZsuKHJ@-Palpw!^oAmA>46K5q@5N2S-BbY0cZ zws*fTFW2I<7yCGW^CKr_j+B%Q5!3Eh`M)Yoa{Mwjzgc>ggzKs~g>YFtSpQ?f%gryFJsT~` z;~l?Eov(Rs%Es;8Uwkh}Xa2gdJ;U3OdDD(_;b#t3wM&VX?~eKWNyjH$Ncg)vS8#rM z+Jo;wkKOC5tAtn*7q)*-zqT^}|91B0iF%2ldrIuCo!?{o?(Q>{bvsZhp*2z3IzCZgftvSEM_PAuzk}s`JP2W!}vUqEM>Re4>?xy=!9%NoVw4C*4@S{KV z$!>P+a~Un2oo-}sa!*qgtQ1lq7PLJ?mVazTEu;+kF`rV-H$`u&&jF!$5YRQ7lO0> z3e+uLo#44;!+EN%$0s9IJYd2{dyO|8+7}#7HHvayJS92v=FXiRrw-NMlZoH??Ns^| ziw7Z}yD#kB&NjPZ%VG;Y_2w=)F+WB@N4*@uQ-{>oEns!|<@WsgI=kX;a~q9~8R8Sv Xj=j0TcAJ5Lfx*+&&t;ucLK6c3NqwRE diff --git a/docs/_static/js/version_table.js b/docs/_static/js/version_table.js new file mode 100644 index 0000000000..5e0c4cba58 --- /dev/null +++ b/docs/_static/js/version_table.js @@ -0,0 +1,54 @@ +$(document).ready(function() { + + let version = DOCUMENTATION_OPTIONS.VERSION; + let language = DOCUMENTATION_OPTIONS.LANGUAGE; + let idf_target = DOCUMENTATION_OPTIONS.IDF_TARGET; + let pagename = DOCUMENTATION_OPTIONS.PAGENAME + ".html"; + + let defaults = DOCUMENTATION_VERSIONS.DEFAULTS; + let versions = DOCUMENTATION_VERSIONS.VERSIONS; + + /* Apply the defaults to each version, where needed */ + for (let i = 0; i < versions.length; i++) { + let v = versions[i]; + for (let d in defaults) { + if (!(d in v)) { + v[d] = defaults[d]; + } + } + } + + /* Find the (relative) base URL for this project, finding a sibling URL will be built as follows: + /// + + (Where 'idf_target' path element are optional depending on if the project has multiple target support) + */ + let project_base_url = DOCUMENTATION_OPTIONS.URL_ROOT + "../../.."; + if (DOCUMENTATION_OPTIONS.IDF_TARGETS) { + project_base_url += "/.."; + } + + /* Given a version from the list, return the URL to link to it */ + function getVersionUrl(v) { + let result = project_base_url + "/" + language + "/" + v.name; + if (v.has_targets) { + result += "/" + (idf_target || "esp32"); + } + + return result + "/"; + }; + + old_ver_list = ""; + + for (let i = 0; i < versions.length; i++) { + let v = versions[i]; + let url = getVersionUrl(v); + + if (v.old) { + old_ver_list += "

  • " + v.name + "
  • "; + } + + } + + $( "#version_list" ).append(old_ver_list); +}); diff --git a/docs/_static/version_table.html b/docs/_static/version_table.html new file mode 100644 index 0000000000..6e0feedbbe --- /dev/null +++ b/docs/_static/version_table.html @@ -0,0 +1,7 @@ + + + +
      + +
    +
    diff --git a/docs/en/index.rst b/docs/en/index.rst index 547c663db2..a2731a9518 100644 --- a/docs/en/index.rst +++ b/docs/en/index.rst @@ -6,7 +6,7 @@ This is the documentation for Espressif IoT Development Framework (`esp-idf Date: Mon, 8 Mar 2021 17:13:21 +0800 Subject: [PATCH 4/4] doc:updated cn translation for language.rst and version.rst to provide new layout for version/target select --- docs/en/languages.rst | 12 +++--- docs/en/versions.rst | 49 ++++++++++------------- docs/zh_CN/index.rst | 2 +- docs/zh_CN/languages.rst | 15 ++++++- docs/zh_CN/versions.rst | 85 +++++++++++++++++++++++++++++++--------- 5 files changed, 106 insertions(+), 57 deletions(-) diff --git a/docs/en/languages.rst b/docs/en/languages.rst index 260a808018..7ff553be79 100644 --- a/docs/en/languages.rst +++ b/docs/en/languages.rst @@ -1,16 +1,14 @@ -Switch Between Languages/切换语言 +Switch Between Languages ================================= -The ESP-IDF Programming Manual is now available in two languages. Please refer to the English version if there is any discrepancy. +:link_to_translation:`zh_CN:[中文]` -《ESP-IDF 编程手册》部分文档现在有两种语言的版本。如有出入请以英文版本为准。 +The ESP-IDF Programming Guide is now available in two languages. Please refer to the English version if there is any discrepancy. -- English/英文 -- Chinese/中文 +- English +- Chinese You can easily change from one language to another by clicking the language link you can find at the top of every document that has a translation. -如下图所示,你可使用边栏的面板进行语言的切换。如果该面板被折叠,点击左下角 **Read the Docs** 标题按钮来显示它。 - .. image:: /../_static/choose_language.png diff --git a/docs/en/versions.rst b/docs/en/versions.rst index e90a315a60..f12fc87c93 100644 --- a/docs/en/versions.rst +++ b/docs/en/versions.rst @@ -78,46 +78,37 @@ As a general guideline: - If possible, periodically update the project to a new major or minor ESP-IDF version (for example, once a year.) The update process should be straightforward for Minor updates, but may require some planning and checking of the release notes for Major updates. - Always plan to update to a newer release before the release you are using becomes End of Life. -Each ESP-IDF major and minor release (V4.1, V4.2, etc) is supported for -30 months after the initial stable release date. +Each ESP-IDF major and minor release (V4.1, V4.2, etc) is supported for 30 months after the initial stable release date. -Supported means that the ESP-IDF team will continue to apply bug fixes, -security fixes, etc to the release branch on GitHub, and periodically -make new bugfix releases as needed. +Supported means that the ESP-IDF team will continue to apply bug fixes, security fixes, etc to the release branch on GitHub, and periodically make new bugfix releases as needed. Support period is divided into "Service" and "Maintenance" period: -+-------------+--------------+---------------------------------------+ -| Period | Duration | Recommended for new projects? | -+=============+==============+=======================================+ -| Service | 12 months | Yes | -+-------------+--------------+---------------------------------------+ -| Maintenance | 18 months | No | -+-------------+--------------+---------------------------------------+ +.. list-table:: + :header-rows: 1 + :widths: 25 25 55 + + * - Period + - Duration + - Recommended for new projects? + * - Service + - 12 months + - Yes + * - Maintenance + - 18 months + - No -During the Service period, bugfixes releases are more frequent. In some cases, -support for new features may be added during the Service period (this is -reserved for features which are needed to meet particular regulatory -requirements or standards for new products, and which carry a very low risk of -introducing regressions.) +During the Service period, bugfixes releases are more frequent. In some cases, support for new features may be added during the Service period (this is reserved for features which are needed to meet particular regulatory requirements or standards for new products, and which carry a very low risk of introducing regressions.) -During the Maintenance period, the version is still supported but only bugfixes -for high severity issues or security issues will be applied. +During the Maintenance period, the version is still supported but only bugfixes for high severity issues or security issues will be applied. Using an “In Service” version is recommended when starting a new project. -Users are encouraged to upgrade all projects to a newer ESP-IDF release before -the support period finishes and the release becomes End of Life (EOL). It is our -policy to not continue fixing bugs in End of Life releases. +Users are encouraged to upgrade all projects to a newer ESP-IDF release before the support period finishes and the release becomes End of Life (EOL). It is our policy to not continue fixing bugs in End of Life releases. -Pre-release versions (betas, previews, `-rc` and `-dev` versions, etc) -are not covered by any support period. Sometimes a particular feature is -marked as "Preview" in a release, which means it is also not covered -by the support period. +Pre-release versions (betas, previews, `-rc` and `-dev` versions, etc) are not covered by any support period. Sometimes a particular feature is marked as "Preview" in a release, which means it is also not covered by the support period. -The ESP-IDF Programming Guide has information about the -`different versions of ESP-IDF `_ -(major, minor, bugfix, etc). +The ESP-IDF Programming Guide has information about the `different versions of ESP-IDF `_ (major, minor, bugfix, etc). .. image:: https://dl.espressif.com/dl/esp-idf/support-periods.svg diff --git a/docs/zh_CN/index.rst b/docs/zh_CN/index.rst index f32f7e88b8..3c46d468de 100644 --- a/docs/zh_CN/index.rst +++ b/docs/zh_CN/index.rst @@ -6,7 +6,7 @@ ESP-IDF 编程指南 .. only:: html - 本文档仅包含针对 {IDF_TARGET_NAME} 芯片的 ESP-IDF 使用。如需了解其他芯片,请点击页面左下方的 "Switch Version"。 + 本文档仅包含针对 {IDF_TARGET_NAME} 芯片的 ESP-IDF 使用。如需了解其他芯片,请在页面左上方的下拉菜单中选择您的目标芯片。 .. only:: latex diff --git a/docs/zh_CN/languages.rst b/docs/zh_CN/languages.rst index bb384e9eee..4ecb79cc12 100644 --- a/docs/zh_CN/languages.rst +++ b/docs/zh_CN/languages.rst @@ -1 +1,14 @@ -.. include:: ../en/languages.rst +切换语言 +================================= + +:link_to_translation:`en:[English]` + +《ESP-IDF 编程指南》部分文档现在有两种语言的版本。如有出入请以英文版本为准。 + +- 英文 +- 中文 + +如下图所示,如果该文档两种语言版本均具备,您可以通过点击文档上方的语言链接轻松进行语言切换。 + +.. image:: /../_static/choose_language.png + diff --git a/docs/zh_CN/versions.rst b/docs/zh_CN/versions.rst index 4d62b675f1..ea58b47e25 100644 --- a/docs/zh_CN/versions.rst +++ b/docs/zh_CN/versions.rst @@ -19,13 +19,23 @@ ESP-IDF 的 GitHub 仓库时常更新,特别是用于开发新特性的 master ESP-IDF 在 GitHub 平台上的完整发布历史请见 `发布说明页面`_。您可以在该页面查看各个版本的发布说明、配套文档及相应获取方式。 -此外,您还可以直接前往文档页面,查看部分 ESP-IDF 版本的配套文档,具体可通过点击页面左下角的小三角标志,在不同版本间切换。 -.. image:: /../_static/choose_version.png +.. only:: html + + 此外,您还可以直接前往文档页面,查看不同 ESP-IDF 版本的配套文档,具体可点击页面左上角中版本的下拉菜单(在目标下拉菜单和搜索栏之间),实现在不同版本间切换。 + + .. image:: /../_static/choose_version.png + + 旧版本的文档也仍然可用: + + .. raw:: html + :file: ../_static/version_table.html + + 我该选择哪个版本? ----------------------------------- +---------------------- - 如有量产需求,请使用 `最新稳定版本`_ 。稳定版本已通过人工测试,后续更新仅修复 bug,主要特性不受影响(更多详情,请见 `版本管理`_ )。请访问 `发布说明页面`_ 界面查看每一个稳定发布版本。 @@ -35,7 +45,6 @@ ESP-IDF 在 GitHub 平台上的完整发布历史请见 `发布说明页面`_。 有关如何更新 ESP-IDF 本地副本的内容,请参考 :ref:`updating` 章节。 - 版本管理 ----------------- @@ -56,7 +65,7 @@ ESP-IDF 采用了 `语义版本管理方法 `_,即您可 支持期限 --------------- -ESP-IDF 的每个主要版本和次要版本都有相应的支持期限。支持期限满后,版本停止更新维护,将不再支持。 +ESP-IDF 的每个主要版本和次要版本都有相应的支持期限。支持期限满后,版本停止更新维护,将不再提供支持。 `支持期限政策`_ 对此有具体描述,并介绍了每个版本的支持期限是如何界定的。 @@ -65,10 +74,46 @@ ESP-IDF 的每个主要版本和次要版本都有相应的支持期限。支持 一般而言: - 如您刚开始一个新项目,建议使用最新稳定版本。 -- 如您有 GitHub 账号,请点击 `发布说明页面`_ 界面右上角的 "Watch" 按键,并选中 "Releases only" 选项。GitHub 将会在新版本发布的时候通知您。当您所使用的版本有 bugfix 版本发布时,请做好升级至该 bugfix 版本的规划。 -- 如可能,请定期(如每年一次)将项目的 IDF 版本升级至一个新的主要版本或次要版本。对于小版本更新,更新过程应该比较简单,但对于主要版本更新,可能需要细致查看发布说明并做对应的更新规划。 +- 如您有 GitHub 账号,请点击 `发布说明页面`_ 界面右上角的 "Watch" 按键,并选中 "Releases only" 选项。GitHub 将会在新版本发布的时候通知您。当您所使用的版本有 Bugfix 版本发布时,请做好升级至该 Bugfix 版本的规划。 +- 如可能,请定期(如每年一次)将项目的 IDF 版本升级至一个新的主要版本或次要版本。对于次要版本更新,更新过程应该比较简单,但对于主要版本更新,可能需要细致查看发布说明并做对应的更新规划。 - 请确保您所使用的版本停止更新维护前,已做好升级至新版本的规划。 +ESP-IDF 的每个主要版本和次要版本(V4.1、V4.2 等)的支持期限为 30 个月,从最初的稳定版发布日算起。 + +在支持期限内意味着 ESP-IDF 团队将继续在 GitHub 的发布分支上进行 bug 修复、安全修复等,并根据需要定期发布新的 Bugfix 版本。 + +支持期限分为“服务期”和“维护期”: + +.. list-table:: + :header-rows: 1 + :widths: 25 25 55 + + * - 周期 + - 时长 + - 是否推荐新工程使用 + * - 服务期 + - 12 个月 + - 是 + * - 维护期 + - 18 个月 + - 否 + +在服务期内,Bugfix 版本的发布更为频繁。某些情况下,在服务期内会增加新特性,这些特性主要是为了满足新产品特定监管要求或标准,并且回归风险非常低。 + +在维护期内,该版本仍受支持,但只会对严重性较高的问题或安全问题进行 bug 修复。 + +当开始一个新项目时,建议使用在服务期内的版本。 + +鼓励用户在您所用的版本支持期限结束之前,将所有的工程升级到最新的 ESP-IDF 版本。在版本支持期限满后,我们将不再继续进行 bug 修复。 + +支持期限不包括预发布版本(betas、预览版、 `-rc` 和 `-dev` 版等),有时会将某个特性在发布版中标记为“预览版”,这意味着该特性也不在支持期限内。 + +关于 `不同版本的 ESP-IDF `_ (主要版本、次要版本、Bugfix 版本等)的更多信息,请参考 ESP-IDF 编程指南。 + + +.. image:: https://dl.espressif.com/dl/esp-idf/support-periods.svg + + 查看当前版本 ---------------------------- @@ -78,6 +123,8 @@ ESP-IDF 的每个主要版本和次要版本都有相应的支持期限。支持 此外,由于 ESP-IDF 的版本也已编译至固件中,因此您也可以使用宏 ``IDF_VER`` 查看 ESP-IDF 的版本(以字符串的格式)。ESP-IDF 默认引导程序会在设备启动时打印 ESP-IDF 的版本。请注意,在 GitHub 仓库中的代码更新时,代码中的版本信息仅会在源代码重新编译或在清除编译时才会更新,因此打印出来的版本可能并不是最新的。 +如果编写的代码需要支持多个 ESP-IDF 版本,可以在编译时使用 :ref:`compile-time macros` 检查版本。 + 几个 ESP-IDF 版本的例子: =============================== =================================================================================================== @@ -97,7 +144,6 @@ ESP-IDF 的每个主要版本和次要版本都有相应的支持期限。支持 | - ``dirty`` 代表 ESP-IDF 的本地副本有修改。 =============================== =================================================================================================== - Git 工作流 ------------ @@ -105,15 +151,16 @@ Git 工作流 - 新的改动总是在 master 分支(最新版本)上进行。master 分支上的 ESP-IDF 版本总带有 ``-dev`` 标签,表示“正在开发中”,例 ``v3.1-dev``。 - 这些改动将首先在乐鑫的内部 Git 仓库进行代码审阅与测试,而后在自动化测试完成后推至 GitHub。 -- 新版本一旦完成特性开发(在 ``master`` 分支上进行)并达到进入 beta 测试的标准,则将该版本签出至一个新分支(例 ``release/v3.1``)。此外,该分支还打上预发布标签(例 ``v3.1-beta1``)。您可以在 GitHub 平台上查看 ESP-IDF 的完整 `分支列表`_ 和 `标签列表`_。Beta 预发布版本可能仍存在大量“已知问题”(Known Issue)。 +- 新版本一旦完成特性开发(在 ``master`` 分支上进行)并达到进入 beta 测试的标准,则将该版本切换至一个新分支(例 ``release/v3.1``)。此外,该分支还打上预发布标签(例 ``v3.1-beta1``)。您可以在 GitHub 平台上查看 ESP-IDF 的完整 `分支列表`_ 和 `标签列表`_。Beta 预发布版本可能仍存在大量“已知问题”(Known Issue)。 - 随着对 beta 版本的不断测试,bug 修复将同时增加至该发布分支和 ``master`` 分支。而且,``master`` 分支可能也已经开始为下个版本开发新特性了。 - 当测试快结束时,该发布分支上将增加一个 rc 标签,代表候选发布 (Release Candidate) ,例 ``v3.1-rc1``。此时,该分支仍属于预发布版本。 - 如果一直未发现或报告重大 bug,则该预发布版本将最终增加“主要版本”(例 ``v4.0``)或“次要版本”标记(例 ``v3.1``),成为正式发布版本,并体现在 `发布说明页面`_ 。 -- 后续,该版本中发现的 bug 都将在该发布分支上进行修复。人工测试完成后,该分支将增加一个 bugfix 版本标签(例 ``v3.1.1``),并体现在 `发布说明页面`_ 。 +- 后续,该版本中发现的 bug 都将在该发布分支上进行修复。人工测试完成后,该分支将增加一个 Bugfix 版本标签(例 ``v3.1.1``),并体现在 `发布说明页面`_ 。 .. _updating: + 更新 ESP-IDF ---------------- @@ -131,10 +178,10 @@ Git 工作流 更新至一个稳定发布版本 ^^^^^^^^^^^^^^^^^^^^^^^^^^ -(推荐量产用户)如需更新至一个新的 ESP-IDF 发布版本,请参考以下步骤: +对于量产用户,推荐更新至一个新的 ESP-IDF 发布版本,请参考以下步骤: - 请定期查看 `发布说明页面`_ ,了解最新发布情况。 -- 如有新发布的 bugfix 版本(例 ``v3.0.1`` 或 ``v3.0.2``)时,请将新的 bugfix 版本更新至您的 ESP-IDF 目录: +- 如有新发布的 Bugfix 版本(例 ``v3.0.1`` 或 ``v3.0.2``)时,请将新的 Bugfix 版本更新至您的 ESP-IDF 目录: .. code-block:: bash @@ -143,7 +190,7 @@ Git 工作流 git checkout vX.Y.Z git submodule update --init --recursive -- 如有主要版本或次要版本新发布时,请查看发布说明中的具体描述,并决定是否升级您的版本。具体命令与上方描述一致。 +- 在主要版本或次要版本新发布时,请查看发布说明中的具体描述,并决定是否升级您的版本。具体命令与上方描述一致。 .. note:: 如果您之前在安装 ESP-IDF 时使用了 zip 文件包,而非通过 Git 命令,则您将无法使用 Git 命令进行版本升级,此属正常情况。这种情况下,请重新下载最新 zip 文件包,并替换掉之前 ``IDF_PATH`` 下的全部内容。 @@ -153,7 +200,7 @@ Git 工作流 更新至一个预发布版本 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -您也可以将您的本地副本签出(命令 ``git checkout``)至一个预发布版本或 rc 版本,具体方法请参考 :ref:`更新至一个稳定发布版本` 中的描述。 +您也可以将您的本地副本切换(命令 ``git checkout``)至一个预发布版本或 rc 版本,具体方法请参考 :ref:`更新至一个稳定发布版本` 中的描述。 预发布版本通常不体现在 `发布说明页面`_。更多详情,请查看完整 `标签列表`_。使用预发布版本的注意事项,请参考 :ref:`更新至一个发布分支` 中的描述。 @@ -166,14 +213,14 @@ Git 工作流 如需使用 ESP-IDF 的 master 分支,请参考以下步骤: -- 本地签出至 master 分支:: +- 本地切换至 master 分支:: cd $IDF_PATH git checkout master git pull git submodule update --init --recursive -- 此外,您还应在后续工作中不时使用 ``git pull`` 命令,将远端 master 上的更新同步到本地。注意,在更新 master 分支后,您可能需要更改项代码,也可能遇到新的 bug。 +- 此外,您还应在后续工作中不时使用 ``git pull`` 命令,将远端 master 上的更新同步到本地。注意,在更新 master 分支后,您可能需要更改工程代码,也可能遇到新的 bug。 - 如需从 master 分支切换至一个发布分支或稳定版本,请使用 ``git checkout`` 命令。 .. important:: 强烈建议您定期使用 ``git pull`` 和 ``git submodule update --init --recursive`` 命令,确保本地副本的及时更新。旧的 master 分支相当于一个“快照”,可能存在未记录的问题,且无法获得支持。对于半稳定版本,请参考 :ref:`更新至一个发布分支`。 @@ -187,7 +234,7 @@ Git 工作流 更多详情,请前往 GitHub 查看完整 `标签列表`_。 -举例,您可以关注 ESP-IDF v3.1 分支,随时关注该分支上的 bugfix 版本发布( 例 ``v3.1.1`` 等):: +举例,您可以关注 ESP-IDF v3.1 分支,随时关注该分支上的 Bugfix 版本发布( 例 ``v3.1.1`` 等):: cd $IDF_PATH git fetch @@ -195,9 +242,9 @@ Git 工作流 git pull git submodule update --init --recursive -您每次在该分支上使用 ``git pull`` 时都相当于把最新的 bugfix 版本发布更新至您的本地副本中。 +您每次在该分支上使用 ``git pull`` 时都相当于把最新的 Bugfix 版本发布更新至您的本地副本中。 -.. note:: 发布分支并不会有专门的配套文档,建议您使用与本分支最接近的版本。 +.. note:: 发布分支并不会有专门的配套文档,建议您使用与本分支最接近版本的文档。 .. _`发布说明页面`: http://github.com/espressif/esp-idf/releases .. _`分支列表`: https://github.com/espressif/esp-idf/branches