From 56236f0e75021d4e2b9d31df89205df2f40236fc Mon Sep 17 00:00:00 2001 From: erdogant Date: Fri, 7 Oct 2022 15:04:50 +0200 Subject: [PATCH] update sphinx pages --- docs/pages/doctrees/Coding quality.doctree | Bin 11066 -> 11089 bytes docs/pages/doctrees/Documentation.doctree | Bin 11701 -> 11724 bytes docs/pages/doctrees/Examples.doctree | Bin 17766 -> 18009 bytes docs/pages/doctrees/Installation.doctree | Bin 5137 -> 5160 bytes docs/pages/doctrees/Tutorials.doctree | Bin 21233 -> 22410 bytes docs/pages/doctrees/environment.pickle | Bin 31034 -> 33911 bytes docs/pages/doctrees/index.doctree | Bin 10227 -> 10250 bytes docs/pages/doctrees/scatterd.scatterd.doctree | Bin 53357 -> 56653 bytes docs/pages/doctrees/sponsor.doctree | Bin 7349 -> 7372 bytes docs/pages/html/Coding quality.html | 14 +- docs/pages/html/Documentation.html | 12 +- docs/pages/html/Examples.html | 38 +- docs/pages/html/Installation.html | 14 +- docs/pages/html/Tutorials.html | 41 +- docs/pages/html/_sources/Examples.rst.txt | 22 +- .../_sphinx_javascript_frameworks_compat.js | 134 +++ docs/pages/html/_static/basic.css | 13 +- docs/pages/html/_static/doctools.js | 418 +++------ .../html/_static/documentation_options.js | 2 +- .../{jquery-3.5.1.js => jquery-3.6.0.js} | 227 ++--- docs/pages/html/_static/jquery.js | 4 +- docs/pages/html/_static/language_data.js | 100 +-- docs/pages/html/_static/searchtools.js | 821 +++++++++--------- docs/pages/html/_static/sphinx_highlight.js | 144 +++ docs/pages/html/genindex.html | 4 +- docs/pages/html/index.html | 16 +- docs/pages/html/objects.inv | 2 +- docs/pages/html/py-modindex.html | 4 +- docs/pages/html/scatterd.scatterd.html | 64 +- docs/pages/html/search.html | 4 +- docs/pages/html/searchindex.js | 2 +- docs/pages/html/sponsor.html | 4 +- 32 files changed, 1089 insertions(+), 1015 deletions(-) create mode 100644 docs/pages/html/_static/_sphinx_javascript_frameworks_compat.js rename docs/pages/html/_static/{jquery-3.5.1.js => jquery-3.6.0.js} (98%) create mode 100644 docs/pages/html/_static/sphinx_highlight.js diff --git a/docs/pages/doctrees/Coding quality.doctree b/docs/pages/doctrees/Coding quality.doctree index 647fcfee7fc708ea7961475c367bcbfdb05f0d96..91c9872c4e2048267c3b020458d93e7df4fc2597 100644 GIT binary patch delta 59 zcmdlLb}@{lfpx0eMwUeyV!WBTiRr2FIr)hxnR)3`dRTHY^RlN*-m2lu%afX$l$sI` MR#3e8tA;BR0Hd82nE(I) delta 38 ucmcZ@wkwRKfpx0>MwUey{5+|-NvSFEnYoGSsl`(|C-2d4-psG*!~_5tK@Il+ diff --git a/docs/pages/doctrees/Documentation.doctree b/docs/pages/doctrees/Documentation.doctree index b95833dac17a67a85022415b6b0476347edbc912..d6362f349b7d66d19827de0dd29799ec8fd41824 100644 GIT binary patch delta 90 zcmdlQeI}ZvfpzM^jV$t-V!WBTiRr2FIr)hxnR)3`dRTHY^RlN*HqvzF>C}4-92(Vr67sX>DO=Wpk8?lQ}6vlZ+|m0Uxt-DnbGR iLj#i`94M2Z4+aJsYCr=30Fx009FqqvGXXx6J1vpr0T%)Q diff --git a/docs/pages/doctrees/Examples.doctree b/docs/pages/doctrees/Examples.doctree index bcd4b83f589eb80194bc215c69ba7b56e2f79099..a80861846209413cc14640195f43dabcb10478fd 100644 GIT binary patch delta 718 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 RSCkJ;{}0-!BIW=9 literal 21233 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 literal 31034 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 ZNs}QbF#<*dlc5(LlX53E0YsCjCt+H87bgG! diff --git a/docs/pages/doctrees/scatterd.scatterd.doctree b/docs/pages/doctrees/scatterd.scatterd.doctree index 3c025cfb8b559905e563edf6aa96cc75b6993768..1311fef379f88c436721f96e560bb12a4d2d532d 100644 GIT binary patch literal 56653 zcmeHw3y>XGd8S61_edkj4+%Vy+_o`u$DW5|W0NQzVOx^1Q5bB=CIZX8?t5>~^ljZ& zy8B8q0%N%xKeV(Vv2S7=2MC0)EW62OiI)J`Bo(q-K#^>y+JqD#Cd9Q{N$pms&64%< z@D}_3=hb~qcb~r9ngO;7gQVN%^*_&d{ywihKlIDDzqE<`7i{-BcD=PaZ`Nw9cFpp7 z!Dy{r?KZ8J-+Q(<^JwqkUMU!J&9h#+>sGB^un9_3?Rul;TCLs#yWDnaT5A;g*STN+*{e~6E3MOy6`!3_SwQNCqRiKY0q2S=X)+%xk%YVE_ zc!EYR4Td`=)be}w&S0!8*tWL>!;IUdV6ahdS-quh#SF$x-*@Ykt`AgDsx9@JhZ2lb z8>Z($BK#g|nN9j@wASr}4;8a|+O?LkOg9+u%@xe*+1u?Yd#k<2-eT_!Zai}E)bXQt zzwN{+uL_hbw{{9x@=j4!MB+Tpop(LpeBZIn-HN>_7^=5w)@npCRA=^;z^Q!|sN@>> zb1nRthCegNH3;t339qGKuw&NUUhvvxyVh-3KVt|Q{6{Z%4b7Y5DT0rlJ-p=i%&vXC zJr@z@Xj~j#HI${Zb`WI*Mp`RIdpUuwy$^H`_8bFKnJcc@u_H1DTTf6`bsBAdo|=A_ zk{H_iFmQJpRrV5T)=bq73iBp=uYCygJHUkkKIW-IbB|1|FKc($1M$FXgP#TgYIRV2 zx!o$)td>{z*UHs)qwSVvj8eU2P#wqBFw+aJ=h_pBpHFQq#U$l*F^P^WG1jJF5P+Z> zu@mpVo1nKtPT8x2|NC86>d4opic>l{YgEhbN@dn)m=&wx%@9+U!0oq^_7HrqKXJgZ zhk{Gu>f-*9lofi(FqpfM?j@yQ0=S>+0B#_~U>h<(0DwGOQXd;zZ8i>i9TRbH6smZZ zd&cUab2&g|nRWahf?19Y5Re!n+EP{Z+Em4JjcH2AihES2xKUIb)!HaB5?7f0Zu?=> z&Lg3A?Dt?7B-~#@xJMjlS^$rYI^bW#;yY9?5l%v#PE?Fm8aPR1+(ZqDo>^A)!^`Xn z;Fm1#htuT^23kEc>J2E^2SKpsVJt}n4z7Xcpy0D0^#?fM1Vf|;P;Nhzn7WIXk$L<~ zI*;}z6FGdb7>C2ObE+&#$-4snC^Pw$+)Vyy4koQkeg9J2<06$#nK*pHh!5`33&zop z+Z6}Gl%Cw*hbeydf}Jt+fzW`U1VD2zy4-Cvh?m)q1>gM; zM0?6qYUeD?5G1L=Fh%+ZNMNECNnfG3SZ%lbXdouWty_fy?K@%l2B%@PTLv4J3^FW< zF*U20u%a=X*BM%QgDF11_Mtl?Rm#pzi{I%Bz&wr4Hg$Or4wqOqg_n1t=S z5{GT!Tfo+ob2IuEiI|guxRQO=UX`rP5fw&U=LS(XxOaVGAz3XLj^kK$UWhuW7QnZY zU4fb`i+EJ9nJi*pKb%`W#}2f(DgYi#|F@F4B94DX4&CjG>F+0{&ztP zh!3)0_iF`99*vxzgGvO`c9QWQN9cCPa!tSON+bCqr#!HzkUgy>8w|8#1GQ7fDpQ>H zSTI~~kr%;8yfMn%pVJK!WU1e+Cl3+ive|9;s;A>LzyUOm@zT3 z#Y{88vbZqfSr%y1X5A2$Vxm{`nP^f=Lu(>NNixyEja(-9B}=nMPpN=;C8|D*jad5HaANin_s&k&OQZ|BYEpszTKpa}B&iJtwPV23>Nhtawi zmw}@N=GuVD-{+XfgRd|~zwRy)1{y33G;n0~AZ%ZD+f8Go?%UmpL1zg?yq>3uFsE}A zO*!Qp)>?(gt5GW} zQzP7?VEUZoN5ZBsi&a%8KgRFo^DS&@eOC}o60$%;Q%)m~AdW+&U%`L&@?L=fijbqy zuC2wGh3tt6yg*xix}0OEfpXoqn(^wP50$VZ86}v0o-yX;j3t;?LSJIt%R6XD5gtxA zPBx%T*KCxbPP?@dX`IEoESO0Oe&3%~%aKFYObMV6Ao<^=jRRckB^(ByZ#PKa;Y)>8@CQ&-o-Y9AH`6rR&w+Q?N#`c96}$ z5HN;0*R_Lm)@2Dp=8sUGgiZ%$vQ!FFYR1dwpEa_}?TdTQ%jZ8pUyxru|9sd$a7Dai z=x0-oYSwUkQkQTj_)a-bWat=0{{<@gqoknZ2+_>%+|e*(Xvo-DKz^JG;yput2>PAIoK z&Ex_Og47}~2B-9n7#u)#q^O;FPrG&ZKI3R0TT02#TypGQ3YX7(Md)V~QQJGFVV;vKj^5Az+^#v_gkHMb2sO;J&_uaB zOH18(2)Zb^_O19&BvjW{!sS>okrlcNtb@tbN;LjWS(J6AU@DB1aQ5J@W1s_PulThO zeqC^`B!3(DH|QX`(#lpai!QX5_yX&Khg8#yP&6 zx_Hxm*!;A3Km3jVe}Hd+V)?KtblP&+gV}(WdiI+y>9a?+s=s)L+3;YMw$*l<{CBl! z!a@UV12_Pyw#)SuuYS&2EZuO^ta0F`86an^z@)1uknX9b5RkGJ(ae8&mT&;Uh zag8Oc@dUC_b8#Bm1Vkr|-tY$cK(-ceo}oH@p1!6={(~Cuj_>jPaf|PoCUQ+5H1^Nm zeDka^T{&AeYfjhmX%eJVE2aw%Ot@*32p*@8TQy{Ddb!?cz%vzLnhF#t?%8I|3iEv% zHfq`MynlZGO%Jd0>UB*447ro*SFaxub%Uk#S-s{?7hks?4YTOj5+=w4izk@Mzg8Uz zgg3&LZocS0Z8;^N$WI&9*nwin~2w>0Z*~Xx3v7H`1OC!XOma8 zG_*Ehlq8#MW)ecgia%vgA0LwAKY5gL3fP0PP|zL|k@zQWma6C~RYi6eC^8XQUUj zG_*!yl=2zrU+L);FcM{>ppnMI_qdpihDaVa5qpv?^m(l`DHi&}d=~nOmWI|sj8Z-e zeM3*LfQ2X<1ue8qdb^GpX_RMkJB10dss4{vtQ1pyJD;hBhP7k4ZW|?|l+RR`>gg3Q z6=kESsic{Yn5jlsHn)^`mJKzl6)MG0C8(4mk~pZPq3u(Ql4PhMG8@9>Vo$PEcj_q? zFcoE_psB{gS*e(v1~HEdLmy;WOsy;_7J49`h1yygS_?5sc`fv?o?-zDQAP?{Xd*IK z7&j4S3KNkB*+jph6(+?*&*U@F$FwxGCSsH%6AjaOQ7#pKl;!%Ao@N0fQC12XX@@$8 z8?)31E5XGQ&$3)!*2|pc_jQVi)qTi9Plt%kmdmSyJrum3(%3SxZA}Cq_xK)8=V$APs-Y^88Odtpc{8EEKfO zL}YzEW}Z==DI88D$U=>c7Kk5)pi+)uYPXh#)<}$!Y@{3Bz@^#@KV^BY)zd0qB+5cT zBTb^(!+j4iJB^8aE>a{#mh6yLvXt(0FrTGYd8KWebY)ov&5z>VzvUKm)Q!ZdU%1}Y$ zz4ymx_fX7fwnmxbnw1k}<$gk|+!WXOSU%VJw3dd}br>bdb>8!%-Lb{B`lDt;w&Q=) z>$pHCp{mc*NwUl0De1&rSz%S@e%Odm2bc#EOI`Y?*#*1 z9$=duVE3)&eDsdDnx`#t^^N69Hvz^ogi)M-M1xE@|3hn+=#~-OaSC?=Zphv{VB{Yd zBM?uSv5oSj?7jTaQ@Jb}k0uGh$#(EfW7=p>zMzS32mimw;a1snuockZmXU@ z6xxbydRLW|b`B?@+^!Vs3vC5yC7>6n?S;6Nc6#=*3=Kxk_3R`?^`~cN)-v6hzVRo! zbNc4QIuMV#U%JhaW9H5l;TZRL#g30-RCQr1F?Uv#mFCU~(1vg-T55Z@t^F@>DyR8 z4SYu3FWu%5cm5O+F43JaE85V)gaoIo9og(7zKOoX4`a5Rj z^7kzuH|LK078WBB;cIg7$Nc+psHEGPU)aB|fQB>un`%dnxdzd+Tuk~P%elXZoQzWD z(eBWvI1A&EB$<)hiZF6$qZEGlA{4$HRX9Aza=xR8oP8?%wb)G)yDithri9Fx9LR-L;h!>;Y`Soh2!H;4qX`O!O}@7Jst{ z!!K==VP5XvFiBXX`fwT+C6v1|t9J^u1(`(wp;QXl2=zjSPIE?|N9hq63R4I=>^Uv$ zWZ8WLp8P-!>+}3k=!b@Q6Ed2lcj8D0dKpwonGnOQT<8Sf(!o#G&;!NvLFRByX;IH1 zL!|2nhv`KNBhmsioQX(OKRFTUXc0LXr7T3cBHgLD>UBkAgS@>6qbD}XASe4bND>mM z{+fnF3FUUBbVZ@9Agu)8j@n)}?(EFaU{2hr^YbW1=>+-IQuJ0d-0Md#M!VBmrQs4@ z^w-2C6%(&SwcyiG;TIy7AzZ@CR@u4@S#BAhzUB_{AKf&gycCCrUs%r%6NLH*KD{rO zv$5#uUl3J+DdRJon3W5khN*UVH{p*mm%pL3nhrc@C5BPIPPj}jS{S2#6B^FMD5@hF zqqKLd{eBS{6R0>Xyg`WKeeCX>FI@zYED+>(>K`Kr(uPccd>tAt zVpr$6h{n~s*8Zu8h@ykV-ZItxm4>GY<=$KzYv5K@hBorGs)vg=8G)}UN98sft)I+r zf}Ci5oPU9*bbGrEH?fNQ0?C0c3e|VDs*P^VB1jDP|Fo=z_-+rpz((-d2-m|ESQaPU zSpO8ya<|yGRR+;?42uMfS3sqdpb@ijf$|_~fkQHVkU6|jX;IH11LXaL!}Ows0r@6q zIJ4tY{V0G8D|E~h@uBQk5g8ekEUbjDqml2Au=|rZ6Kb-o^ixF`ddEg7{lS7t*P^9g zL`32FF|<@2KMgGt$}QyW?!s0m*EQ-M8R!$|>-cF8*17nj&=H9}Ka$JXEcW~$5j!#V#H?H}$AeAIB@0Dm zEtoQg$c5v|F#Gd zf3s1F{=5Da4bB)t9@Q7qkSC$s9&Kk6It%pW08`YqvoYmYGqjl(Q|J+*6ij(XUQFrd zeA4c1G6tk~!AR(IDO5@coiJPC_Zw7t>HGq1+NqUaVsm4WVqkTL!#S`On6?SJxNsJ|_-G z=iA{W=FSbe4n*h9aYYCc?(<*~6Sw-3bG}~Hw%|AH_{9az>Ns4(3jccm%H2gjE?IAN zx<1Y`nXoswwF03XsRx&HHyYHEu>S{s!pG@g{vFDZ>_qU4oa|<^J&_b)Nir?9maD(8 zAg@dMOCo$?RxbF=wV~{NO6z*CXE6F+!fkrd!ol7zLc^IbN_8c}C~OiR8a=v~X z!MivOvN}C$@ELWoG_wR5W&;n);CDhhZTLc=7ki~3%h-tnW9B8F*KU^`Bz@F~yiHsM zl~QI@F)QkDP8K?6E=C_zTGVsMhQK!x4%3Sk9s+NHhBJpisvmg>)b0*CUPMMlB}>8K zf(!%tFhTS=5*byCF!9hvDcb5^(MiCk`e7RIC6v29PoEPi402Ti&`~L8gU-GTUFQRx zllUnxyi+!1%7fn1YS91qmYJDxOuk`yeAP@h+*unw={@IK zHOPbe2Hdr2JVM5PmtCmhS#_^juaatN6@2zsgR~{TJy(Imar*TsMoMH6I(M6%Z#52( zYDeIrA=mQxYsmQY-LT!#s?jE6ndB>7tW7181SQHIpTVpvd0)uYi`e_cbHuXXqwydN zvvL7yU(4RVqqLfil;~6pRDX+bnO?LosD26>&IDDeqa2|6#Ue5?D(eQSUn|1IS2s%0 zU+-VhNua9wVj8H%%bmOdzy|giVsC>@hOEDZs6w-DfUI%&$*_ez0ltJ)RD^-j6l1Um zpp1AfV?cq0f1SRsf5+4#jfk!y%-L>`X(Q9UtjbV(@p zy1qJ{aMGZ^@_;oet!%6r&(Lm8thq0GyCKZJ*QF>ZKtvy8 z4u4H)F&$hYQSS4E!}Owsap*(Pa3&5>{YW^ZJ@WHn5fPJ!=uWx(ad9F^9bGkaT1QVP zcgsb2z3`6U;@SaVPt-=s$URS@4&NYtKTC< zvu{Y8IBxk}7mmlQb;M^Uq%@&%f*7yn@*{`x@?ETyaYv$k>&&CQhkGS^C>VjE0Kclu zUf$zFEqL1&C=-U(G_2YwgU|Z+e@ZnI0JZ@mG*p8v-Lm>HD+3@ASYzMIm{#g-fNV&# zPtmk)4cCEAIpahH>0Dw@VLpw{k;|vG)SZW@%l!kpIMm)tzrbye1;cK);?}FZXM4ia zMvt!28&3ET6eb9}IrpLNr<@agn*fEohgJ&NaK4Ki?K^f8c*a<;t=6u>C7yn{(r8yt zM_4*}B^*^ebm)+Ajd54A({_D0Y+P|6LKw%yWw+hrhm2v55-q?li=AZ&Ws3@hHApSd zR3yWwEgOqUh0;u<$_Z#4*7I58lsfH}P>+)=)t2v{_Pv&Ma{7T;Xp%m>WBLK9rK;)s zmP>B}p-0B^HaE-mX)PiNXkt}EfgkH$2O6{Dg!iI24H=c}ux++hV3HDMU^j@`ENOg^ z&e%ptpNJ}zosC=<9{865@iRnO1P!xQ6DnGF>Z#gio%JVOC8_8Aq^scKMwaKUyR&8y z{84okF^rKAshTh>2P14O>Y33{l6?!_G1CUJx58D|$01V;rsK!0Wy`f%RZCp>7)=tK zI6iIC#eeqLTlf&Ij}}q~)VqO?toyZt*_FC)cPj@C+xI)(!G#6-JYQ`$7c95dUNKw# z0w2{VzKD3#c^nyq`x;6RnvL>?!oV()24TXJic~PzkGWhik%2yVUH`1?>a(y=F){Wp zDV(J17eXUzx$D+@&a+Sl!7zgq4l`Q=9wAmZDG6x)q1~;RG9U)EA2&$7|Q}#en&7!gGlEWAwl@N zFkm(}5d&%q%Le?6LOxxop#eV!bs`2t333?lI0*f3NR@P2xeRzGxvUK0qtJFu)5l3H z2y5rt?#cp-NxcQKHI)7h<-M}#H1oFKWOp5eeey3+H_WQzA(4ndqp2X)Utxs^+Q_y% z#5?1~aJMVC*k)w=|E4*Q<~Mg132C7o7={nOvhg5gTH(Xjkp zFmPQDTOsow5_s^}r7V`e2Ym9cV1yG318TJry$yYIx!WQWtvxF`!Z}m09!E+zd+^u9 zCGZ#SsGz_0!LJL>mE>;&{|1)rGI60Pdn+Hb?0Jp{fVp_5&y_fbaTWZy2L41o84--Y zl&)Kcu@MK7cLvvamR}}5@0DhZ5}Y?_wrkz+jjJ}#hohNZu!sK^iSuFgo;|$e_e^AO z&PLXVmj`zrIe6;$(YxPv;uNnO|1sZLI|!q{NAADE4Zgf+GM#+@(Dp;Jz$M$_3BgZ= zOqEXZKy;RD1SgWh+YEi7iG=p#rY(ZmCHu5!>5@1jEb0%EvgCeqEf_M|)n#8U*=Oxl z$q`tnV>{qgSBbhCqQGO|qxN|r=6I+uE?zWA7V8ayH98upVg>foiDEq>iRIjg&FmwL zJR=yH&0{WRtq+LW11Bl>ABv^G!TXaTCX=w_Em|>BzTI>ORMJHi+=S18thbZ0cE}#T z_>uI_kVh$bSHK@-rB{k@`{2cJ8#(r%Fs$b63L+^o+vkd~edc1=9$*&$hx+9y-~&~~ z2c9Xy-uo_wy~w7oki$sgu7EzsYW!poK0kgjd~V~@SBv6~wvruk9NrR0d;{M{T(ee( zp+(W~=ZkRuhlF#-fzdAP$%`DB1{M_>U(wRgej$xflD?3Z`8~vM=;;;sS{P*`J!FZ) zN_JWNT39%WMBp~8>P&$oMZOkxGiu-!=LhhQgTKkw!nTHkNaTBA9Oi+WeOL>E0vLLf z?}bGcT_#Sz87&%*(6wcF*_F~n&u~UAh4!YLA^ay2QOn~|H1@&J1YZ;PA|o*LK;_M> zvJTX-8b*4Ye`tYA6^r!fXPmT=-X0)HBfY)&i$r?lS5~CQ_{QL;Xtejbvv341JI>n` z4|}j;N`&{8^@;E(g{;`_G9p3OZOj^HUDzDlF@1Z6MFQ&-x4lv8Q2My-Mo~9dU$rO^ z+aT2zM*1*hkO$E*NO*IHU?hK(77F1U#b(qfZBkZ$EDqZO`D!E*LBBFhw*}|&M9MCO- z_IIL?uQ)yU$HCtO?T1M}oWU1py9S8J9R>K$=D=xU-jFtYZ0zQCk4pmx(FwU{u@DY_SOFV8A1>N#W^qh|<*=|!Wy?0g&S((e}>=b_G+$0Aw@2#* z!m5G39Qe4}cD9f2$k1lY$F)uJZFv8okDkM}EaAwYzJVz3I}Y21_X*m`mZ8h>S8CeH zO3vv>S|Dw?W4%O56B;G`#LeY}Y#Ux1D`gC5kw9SxXCP>YP8b5vRcHa3vnTuJtfsKQ*9*Sj9utj1#@VH{itmDbir*hV!z%8F;9eCKyj@l(#f z!+-jHE9cwPVhkLc01hg!62zT0cnbHQu^ne{&AR8;nRkEmfGDwBQFnUwjK3?X7pFauyyLyev)nV*;^CvW9l864H{SR9PQ$FiWkoH2 zk-Hn+8&GdwZPaUvSC>UQWyibv&@HfG0NDTr7dVH=FYjRge=;w7;@>2AVsw}ahT&Q# zSn%!zgLH}g-S)#ccK$U&$X;Uy6G6EU;w{1e4XS3mc65GD}|yw(=DGBu{TC7zI$l z<1t<@*a-`pUBBM&=HV3=T(DK^1;cMQ@o0MJrQ4T+u@$RjxhBN3P=5@73AW|JreJuO zpk&I>_Gx$=XOB3EvJ`Cd+tqT#te(bPAU6bjxof@PlI3>WZ?%0Zl6h<(*ycgV-0C*V ztElrHq)g(fYX_Eqo8+($G&x06tOoI8uZ&+nD_0w)=K;$=kyQ{0TU`rx2$vi1GT-PO z+Z>GBW-x)cKQ-sU#`|E8oLRP9x9yf;J8Z3Cxu9oc6%O_U+uL0qt_X{? zGDKSG1$&hor3q*EvCSz|ae}HDIr97ltg*cnzL6 zTdiJjDZI$E-CDV3b-+J>46e^F1;cO}YZ=4@jnr%94mfii4kHYMYj^#2IZO&R*TJc_ z)w<12SvVdjmL$M6FYsn>Hn73%Bn7nF^3eQYQpdBpwRU+GHn=PWJFL}C+q25in#4=0 ze)&w@t5X-!f{84g?^CjsiMW$*zG43{8Oc-@Lpj)X`+43_(lCHPVxpc42@vtret3$FnS zwgqbi7lO;HQ0jEqYMS*%*{s!Eiy+8T!A@)$P3~EZWeRH-f~~X#8i7IWEmrGH4@UH0 zl)?-2XK>AWt47}X%RU@Wguo3QX(uoVuI2;ELYwf_2@ekN!2XPAY6~tCB+1a)vUtG# zhV>drAHhWW+xaJqKE4HidBGSaK*|gk)lv%pP}xZBf4@irH4JgLk85L0L2f;fI%_7Ko^7$8Ruv-D@d zqL25ELr3qJE9a>{ zEy8&oWtei1F?b=k2c{RIQ5z4?csLdevAAI{7$k@Pg5eWK-+uJ?Q5?R>WOR?TL6FAk z9UH_B^8_VvE6yMiZIL42_=6D01(%2sj+>8o(S%4QSTa$k-{}G@TR|8Zui+rf#w%>K HTbciV%W#wX literal 53357 zcmeHw3y>XGd8S61_ei6MZ5boUZe+~dvF9Pnm=IZGV!URyBh^>(Lj`TcOb z-l_FkRy*iF*Pne?|5CpaPI%@8zti(-RzKVXC2F?Qtb10wf3_b^WAVUg`U|Z7m~Yhr zr_&bI?Gby_9y{Bw*c0JM-~>%8mK9Flf8t@|q}8yXy&BNRl2CB?acd1ZNaVk#Pk4ex zuM0=JCe#Z0_ReskD%iHSgrkhx<#4#^w5|SfZ^aBJ%^>icm0kc;P^v9X-A4(=YE9Gk zArXF$w9OX%HD2#^qlXoZ|<$wo5B&NUANX^ilI8QZvjs2SAj}yg+I5! zpBeZwi(G@?o^Ay2H-yU5K`ex6*!=8_c zb1W$iuNukHT|a~}0we8Jqti&C3jz*-fD_>a*vee>%&r|1GTeHK>Z;r91Pj#myOqSq z;75SH`>D2NkxsZ)C>VuZR`NJOtHPjujU$xV& z)~&Yh1nbpWr`ho;vqr^f8`M-uZO-q{T4D?OSddl9k|>uboW}!7`&Hmf<6s7 zRo?+G4|<-|UGK=GRyi|g)T-X<%ACL2r<}eIIP$s;jW}K+zHaM zB3Bp%Yc#W6p%P93_w!vq2c#HoLk37UC(oADlP1<$%|m|IM06X6D!%2NxBBQoE>LN( z?p@uG{-84!dNe3&f+$PX)J>Us=L*x5koER1o!-V#Z&YdH$VgIO_D|ZEP&x06lw-ex zbVp!*7hxW|ddmU`Y&w8(F?;V&eMGnjbvaQnUTNqI6>$?aBl=}kRSz$-JA_}dxWAY! zZaCELn{i)2xjqJRy`aMuu7Hn1!RNqa&vP^gM~MGZZa$HP-xRg6A zV1qC7hG@gk^<%;iNj7)a0goEJHjSnfG3uR`>9qUq@X)4B;TVV-taq)xJA#j-|;Ygso~6iGF)(4-HsPjtu?dNZCd$*S8_yCn$V6|Z{t0R4^$RU z2=7rishfehG*dGnqV#6wjGotATJE&1Im5TQOEYtjbl&n-I=;1Z7ayh0iN?}K9uk%A zP93kLPU7wd17!D;ihaRelPt-d8-^P9W>GhMd}Br%SuGH4;t+FLNII?NW9+>1 z?-X371z{CCwBMI1A&eI>3EczO4B_WPf}cAI*o}=G5%_MCDzoeeg@-Yl;@)lueegk+ z>p`tt=`idbfl34lc9MY)ho(-~^30&)NkiBYr#!Tzko_?&*>I?n7@^$LSY;2VJrRyN zZSs~A8)(P5^K-gUf-JSICl7&B!|XMK>Up!-vt(An>-=7q0D#{zz2NP=4!&6-#<-0* zhcd9mhg=Y&CSLrt;Q)0BRX+n^g)*C<9d3&N-y6wl#Pg@qe;_12A5+C{+7k~ zXIe2bO!GOY)LR+YG{3KQKo{4GoLAN15p7=|)Y(l8TZTuYc{jAe0Q z#Ir2W|JDkWVWK}PW}@$CX=qKvC`l$7x{J#Mzhr5~H|vIDw}g2p14Yb}UltD~k?qam*SE&DIz0rvl<1+(@`5GMV#dly=U2C!_%#TeGz!z=)Z`!^i#cv$rYo)F&t zFbVJs7T_5;YWh}SG`vpBSakxsw_?!gEirdfq>3<=yNG7m;XnI$ufX6#$g$F?uP2y=?5P!aEwqAc zIVVs9RVT1o$?B00Rj?x&6__`jHRk7yWtc2MUt-Y*wL8r@b0$ zoW-&%P)Q4H*9$4<0#%L=|A0nzhntOxf~lAlf5pKGzOL1-!|Y~t4JOHB%uy>tfgPNG ztJSql-|=IG;GI42ID(VkvT;A8(9_QPx*wqYzmM>rT@= zg8nn%7(9}9X!|8nHZZ+aE9kp@XgI{Ov`ag+{?jnGy?%(zE4Z_mKMo0WE@2tN;b$pN zLZ?Hsc`Ai@BIC;C=ZySvHz&R4%H`+jtM8S|FGLN5uS}MV{A`b_nl&1H)U^i+zI)tm zj*e0EHWmFGDe89MA3nM;--vp}s}TxCr{K6~1ReZ8>l+j$EACpXp)lut;NKz(WQ`{6 zg;g0!awZ(k@ z{R&8>(_umXy@dtXxP%kT85Q>Ge8{+KmcTrX$Ys|RK{&&2@hoH}h#F{_vhgGd6R@wd$10i``Xf6RsF34hr|OS|wvXgJq}sdnU!x_QpvLgG(Z#)rzt zm_}u&!im5ynZ^@WK_d@^CL@33^y5h~BdcW?sY4}Qe=2QI2O2JAP=F^sgQE_)?<^ys z=u!#XQ+rev?y2SSQR?~}ttL=P+obCN=mAC6(gO9I`$uBFSWRg14}BnlcD9T zS#@}=Bdg!OcrzQMs1P6=q%;`fD@A04ciuhjivu_WGac$;gH1O@O=r;9m@XJdX+i^J zxr}OIOzBjP*I=B42A=y88fZ30is*{>J~Gad}xD%Fi8_uflT(p)d2k)LU z?!0>z$XTl}FR}Ev*MoZI8f$Nj?15OCS(`W493LvKvxIe?KsG5Z&0w1_D3C@EzLq|a zZCadXs7{|}ZmpC5pax76_(of6~xn>R-2NquUx;bNJ;+<2* z3H{RcaZ&dgx#(r?qTx7qM;`h`3G&eNR>4!+ynucoJCesei_ORj*=ODlz2b+R;RmWS z5O1i&Hfs&7Q3r{(2=EjbOV^axAkg|s#;RBsD(T*b;>+JnQZ~-sdV)Qc0_?3T?1g36 zd-`hF8>J}Ev>MalManiXc~N2VSIRK?ON7aR7k@virJ-F}WR#?p#oTrIFX`!(SYM=U zWCuQ4ry2HP%uU)vyk`yhicS8jmj4XD{!hhh@=YxbtxXsu$tIhbgb?!LPZ`tyT2HHl zJtzw$?J*ULev)RXiLO#p#F!q@4Ye6&nS@FO_DSs3($JcPQIgCuA;LT^RV+m|((QW6 zC5%KFDr+RVCzb?t2_x~XuxuKMKgt3f(F&AduKS9a>oF}2t+^N_$y~X}R@KuhVI;~% zStG^X7LrDyncVS4*`sWvHLXAyMhc1<>1VVwv_@i-iW#Y|r&q#Al#P-`nvCA!5;htk zdE7+oNw&~uw9;f)=##}P^m|$wS_?5s#Vqs(dU_=+MA;~5p>5K;b;3yFJe%7oN{~%; zMJrZ@ss4L0Q~jluhSpS!QZZBgot|C^Q&Bd`no64YNSJDjWphi3XW39Uj+Tfdu7gSi zB8l6yG_;0dlq5rqkhu^p7kiSWx=T;7gsCVaB~3LM%}FKfG>my%82TW~@+Pe;8C~h2 zVitOfmWI|sj8ahx*?Nj4EJPV8X`!juOkvVQm?=y|9%K`}ODjxL-S_K`5qW|K{V!dwdcl!Y*~LSz_bFH|ZJ zIxJ{uXbrhmfsBymf#wCjqWZB-Xr(42cl%28$Q`QQT2BQVISflJw7V2lULS-22XNno@c`XgC z!5AgQU~F}iOEx~k6J*(bO;5Lk!6-W=4K~i#aub$fSJAMEJ@zEa@IrD0@EBy=`QLimoOe>sHE|p{Q=rLlyI7@apt&YJP=vuIIWleGgA}=j<(mj}>wccBJsl#6585RpL}QW?f5nZYb^RHO$<( zM)=Jx8h2-R9tsb7O4f$5x$Z2qm2hWOSy}F!QciVNZvAX`<|V+L)%Nn;`H>tA#!jCN z~jiC&Hz=GiJrx+h}zDoYKCYU*^ugMflAw zTH2j|7aGoWXQ8cxJFCjda_5wCsylP*XS*{m0q(4}m+#IW&Cy^%cYee-Di5~ zj=6@>v|LR3Aj|oRGIBCXc_+4K2J|V;-@xT%5oXJX@EWKzXrNeVWW8f>Q-LEVph)%O zEGSATcYSKN6uJu2^8tp`w(?=9-tHgThJihTPc ze%ldl!J!u(J!GxXK?pDKYT-PniB}z3@U0REz6<50L-pTDB4u zM|;v)M~V`J`iQfAw~({3uJkuVRjFMGvkG;kQK}u@UHGHS<&G)2)oeeHb%||I>6(OJ zyP)CREB`Bfi5-NtNyTKpA$9 zK&5M9*N33tGIn*}71OwS!^m69h$uQ(0#DWcm4&A%%ZLmTF~VVX(b6%> zKY@mGJ1*6a0?05$&rFe=t^Yz985xy4tb|YbkZ%UCOHDWvYO<{KKPbb{zq(dR|HG0> z*P`YBC?lfq`~+I6j-Q2=DdiT6c6VW`uy9p~S5*%35%8yT3|lZ>{ZYD$I*L|1UHn3! z*(9^EXGko*U_1^{D05xI@yS4+It#)#VYAM~ABB!c>^Z$vhNWy|Kv@{fO+uxN)nd#l z1amyt!mN$Qloym%vwfhnDPtIa4x1$9TmWo z-!3B~qq1R`^5rs2eDPW-`o+N&orWo@FJ@s%O1Zt-&KAQIZ8^Xcwe5UNxs;>Lf|zoQ z99GGIl*jSQ$$Zrq&cVWmSqG0<1~}~UokH%!(B);KfK+tBtc^#P?c3y5vmqmfE?c3} zHJMe}2@U6>3)N8pbeSn5Bcrlm=<@n9Ox%5~6n$uLMW>;Q>Wf+El2UGV@O~FTO@T^) zJ1W(D-1)1G#hn&ET9pMo@Ma{6u!XL5zAhHnW&nF_Eiy9{z`faQ!U$&gyLJMh?tES9 zJJrCay}E_mlA%!%7{OhJ= zD`YbslaW!$gJM2y&s?5Qbg9X*(qCPMp;tkrYZ9fu1{yA-bnR^Z;W8qMo|KqVQ#(=? z_NSC4unEKK{(7VS{i9DL&Le9 zp6W+ITHRv8N6N^^sN^ASw06LTy(mHSIWmZUq6`zia;+5o$-xy3j+g*G)ep0PFQwca zMf#jjVOXddfR0KzA9Pl7bX^Q|&g_G)N#L!78E@zGray!J$9H$kPGa)GnaLRsK5Dhn zxd6XbE_gGnnDNGD&ziqr!&hbJJ*y6Ra5mOkpTXk}?040JD!%3TEvH7Rsa5dVXARPp zg3kO3Bu>(=moQQyi_ke?`hnHFlT)x(5llW6Pe^IFRV=^lLRHo zc9h|~OC7&fs24Fn{S#u@R6xb7LV!BZ3hhfutJz2y3+?_7;WE2uX;6I`8qNh(s-ps+ zx^=s(xopN`GBPR~2CDnYF!4&LbWK9mTcF_q6`cmEsxM}NYO>s!g8(+LB@TNV?1y9h zEkYHVbr7;9;U~iu_5}D6RZ$TJN>hx%B7idDxr&vrF@`m)2?cE+pWuxkAYg?c4rJpO zlSHl|vJrJ4m*Ea8px_5BfY`$uNGTv|L@5y6;dEv*DDa1n+=qcv^{)JZ^S|T(SFwRJ zyq{ecYgB?B9I{j*_6Nus8abMo2-GWg-aU8cf!WkhU0gcL!Zh(LLJSh6oh}3@Y}&GLNp(=0M21N_fmJT6%P8Lc_VBM>SMnba{6f85xxg8(p3& z!^8)!m7+g9xT4cW7u6H9MwgUwuO6t=2`3E)D-T$s(#pr0|l6*r^2- zIzN0Ae&TLJZyn}v#W!Z5c&}x_BmtQqR`y)uChGuZg;ViIzI2O$kenzKNRa3c3ppP{ zqOTD3q#_Y!6+)t6)CLD4`XF=or%H?2;1Y`f{~O^jyJ%?~x&jU7;t$5 zVj2Kw((r^5FQm^DW$bJan5*2oXO*yAF<8$D$G5?#OlTqf$v^JyX4c<2WL3N zqgLB@0&3sEw45puJD5j4Yppa*Zye%htFKn9IH62Uvi|f#Z;n21{zGq0$Bcgr-YfS} zHu-t{XRp1*-k0{h@;EQrVd-HQmZB)^A#!^QVAUbR4uY>zPVKqz80dY;pF{}}3^UH%B`QU&D1L-8AZAAu@7!pN)kGL+?)6GLDm zzE3YlR26zF*Lb7XCessrE6%q&0khboggc49z6D&nQ{vZF`1K4(V^@ho?y0P_A0i;6T;U=O;pZsyqY8X z@d#fquG67CHXf1-Pv~2WeNMErE6E-YJ=3ye2OHg~>*^Kzg1si0i+>c{1=DX9b;A=! z4?T7A*oj9^J;j+x{#fX)9|A!0$vrOQIKeDBrpxltb& z{-Dyb9+CU4m@n$-mH3hZWkVj=;{$9G zR`Sc@mlUEgBtqM$ru#jJ2FiR%;YPF%`;r1haq=aFzsHaW251;rlrJe{Mh@5t#yPwy zgdbv9h#19qqe8E#*Ty;D0={UR^B4Gw#5v?wTAV}2F1u`u^Xdz*qdz~o+094nXc)$d z>2Xc?$i@uxlmZ!AH8IllM1r2zoHH(Xuz{>=2KFo)Q#UC78Q)bt{uvf^uYp>k$Y+=; zi{3>>A7t#kQSebb+KFUvcVjb3v@0!m6RZ9C)nScD|2)Ek~OPAJ;a? zw_`jzK&x!&8b^klIal{liX#_D(fp6ANn0=Sw`1IYo$S}yu7%2A+cECNN;v~sEKnH1 zX-wLoQ@Rbh3N0XPO?vPX19Mi^={en8zds4A=z>vD4Z+Mu^ULu~3#h_Eme;%9Bh*QF zEF_ErQ>yaH&=}jSz(-l}ER^rQ8x;>%7U4g!xoy2?u&oLS298ew2fqey;bPY0Y21Ur zb{)XYuzujQOjs;8;TU?8EGv^|A9f1VnhWH8aE33`z|?VP)ocd~t4?6|Ru-JjBA$qZ ziDG}T(d=BXyeh4{aM9_`%o#H^SaS-jR(CNao4!|q_x<27By2!Bz|W<4llxgRKN4H$ zP!(n_6OElu;`lSO`5mg@V(m7 z{>8;wy}eK~y%pFVTlW`goz^0KT5$dQe9Jp;Egd;_|Irf%f8_LQV7p2Uu2g6TOWeb# zgE^i3hEreKUlr|CU4Q?*hZiX+U~rLhi2U+C^^cQz+4(-5;(YO!({L0npMd4uemG2* zXn)eagd@Z!5jFPNbMSID!B@xP4p^}dhtp=)fun(9h1%jVD9JHmIVNAuLxi1#_O?(& zBJFS1L2@`s--G)09M&BQr)xbAR>XrUOJ5GR@)Z1VKz}(L2OPnj(SASN3CmW!z-jsm z@Ky^h*sk}((I-qil^A*H_T_M5)oNRw2_Y=hp8za^-B_>}3?8N^nJTn>4jw1jBhHR2 zhueZqt-4~?&S5T)8^N{8^?tak(dh*3PGH3{j}L|0e29|a3!T+9)OjCLrg2TJ3+tIJ zvdRS*eVJqtI6Rh#hs-s~UW98TJ1Q#_7@JFPVb zbQPFE&*z0k!jZbQ(p!c0rZ1RY8*~LFJj-lB%0%EnCqkk6Plwaw3X&>pKiSl%-l?v^28rcxhqc!2_*OMulXyujsGfIVZy0gW?bW*D zn=4HegmF2>JA^$KZUtdrJcdu%!l43abQ>#H#WylsNe_49FCYQ{ieGO-Vy^7W6soHEK%pm=ZPr8s0nx4(PIQJYvDIf(D@h z-F^|_Y!N&*Fjt@#)dRbKd_3F-KG~{@?kOOu>UYsYo(Xrrh!mJ>Rohv$oA3vLvDrb_ z-|Dwa=xA^6LBIAvQP+`Y`dEdHnTjp=DDiXGM#4C ztk*q@K*!VJPHYlw?OV+T#j|I^Emr${ABOI5oZ<*{T<}4sT_g^)g- zwWQldVBYMk-EeQh%`Z3OU-%ty@~v^Q4o23>$lNZO|Luj_;tog@v#sWU8>41HSu_Q4 zhL@ujh^NqUU>9)M)=H--e3}%!UP%7JEPQm7vCiO5F3CE7G^yk2$@9Cd}9^ExPzy@#-9{?B$f=#FWbvWza;;9MS z#;2)oI^70r1PX9}AaiAdbPxJQ3NHYf5^_*<20dZWS0eI8cp7Sel_y{bf#odEY$o<< zhc_OzXgCR0oScvTm f(UeFgSTg0%&xQa(t|E*~)^W6D0~59iuYdm^AfPt> diff --git a/docs/pages/doctrees/sponsor.doctree b/docs/pages/doctrees/sponsor.doctree index c6e99787b8bf54104358fee61c01e86f8ac2a5da..7c87298e606d9b51c9b7e1a5689ceaa64f34477f 100644 GIT binary patch delta 49 zcmdmLdB&2ZfpzM^jVumQV!WBTiRr2FIr)hxnR)3`dRTHY^RlN*4wiDB>>?$wd76|w F69C4A5pw_l delta 38 ucmX?Oxz&=TfpzMtjVumQ{5+|-NvSFEnYoGSsl`(|Cr3#+Z(b`U&jbJv;tje0 diff --git a/docs/pages/html/Coding quality.html b/docs/pages/html/Coding quality.html index cfec4e9..b3a32ea 100644 --- a/docs/pages/html/Coding quality.html +++ b/docs/pages/html/Coding quality.html @@ -15,7 +15,9 @@ + + @@ -31,7 +33,7 @@ scatterd
- 1.1.3 + 1.2.0
@@ -103,14 +105,14 @@
-

Coding quality

+

Coding quality

I value software quality. Higher quality software has fewer defects, better security, and better performance, which leads to happier users who can work more effectively. Code reviews are an effective method for improving software quality. McConnell (2004) suggests that unit testing finds approximately 25% of defects, function testing 35%, integration testing 45%, and code review 55-60%. While this means that none of these methods are good enough on their own and that they should be combined, clearly code review is an essential tool here.

This library is therefore developed with several techniques, such as coding styling, low complexity, docstrings, reviews, and unit tests. Such conventions are helpfull to improve the quality, make the code cleaner and more understandable but alos to trace future bugs, and spot syntax errors.

-

library

+

library

The file structure of the generated package looks like:

path/to/scatterd/
 ├── .editorconfig
@@ -140,13 +142,13 @@ 

library -

Style

+

Style

This library is compliant with the PEP-8 standards. PEP stands for Python Enhancement Proposal and sets a baseline for the readability of Python code. Each public function contains a docstring that is based on numpy standards.

-

Complexity

+

Complexity

This library has been developed by using measures that help decreasing technical debt. Developing software with low(er) technical dept may take extra development time, but has many advantages:

    @@ -157,7 +159,7 @@

    Complexity -

    Unit tests

    +

    Unit tests

    The use of unit tests is essential to garantee a consistent output of developed functions. The following tests are secured using tests.test_scatterd():

      diff --git a/docs/pages/html/Documentation.html b/docs/pages/html/Documentation.html index d925067..cfd91ac 100644 --- a/docs/pages/html/Documentation.html +++ b/docs/pages/html/Documentation.html @@ -15,7 +15,9 @@ + + @@ -31,7 +33,7 @@ scatterd
      - 1.1.3 + 1.2.0
      @@ -97,7 +99,7 @@
      -

      Medium Blog

      +

      Medium Blog

      -

      Github

      +

      Github

      -

      Citing

      +

      Citing

      Note

      Bibtex can be found at the right side at the github page.

      diff --git a/docs/pages/html/Examples.html b/docs/pages/html/Examples.html index 1998024..d37e6ed 100644 --- a/docs/pages/html/Examples.html +++ b/docs/pages/html/Examples.html @@ -15,7 +15,9 @@ + + @@ -31,7 +33,7 @@ scatterd
      - 1.1.3 + 1.2.0
      @@ -97,7 +99,7 @@
      -

      Quick Scatter

      +

      Quick Scatter

      In the following example we will make a simple scatter plot using all default parameters.

      # Import example iris dataet
       from sklearn import datasets
      @@ -109,7 +111,7 @@ 

      Quick Scatterfrom scatterd import scatterd # Scatter the results -scatterd(X[:,0], X[:,1]) +fig, ax = scatterd(X[:,0], X[:,1])

      @@ -124,10 +126,10 @@

      Quick Scatter -

      Coloring Dots

      +

      Coloring Dots

      Coloring the dots can using RGB values or standard strings, such as ‘r’, ‘k’ etc

      # Color dots in red
      -scatterd(X[:,0], X[:,1], c=[1,0,0])
      +fig, ax = scatterd(X[:,0], X[:,1], c=[1,0,0])
       
      @@ -142,13 +144,13 @@

      Coloring Dots -

      Coloring Class Label Fonts

      +

      Coloring Class Label Fonts

      Coloring the dots can using RGB values or standard strings, such as ‘r’, ‘k’ etc

      # Fontcolor in red
      -scatterd(X[:,0], X[:,1], fontcolor=[1,0,0])
      +fig, ax = scatterd(X[:,0], X[:,1], fontcolor=[1,0,0])
       
       # Fontcolor red
      -scatterd(X[:,0], X[:,1], fontcolor='r')
      +fig, ax = scatterd(X[:,0], X[:,1], fontcolor='r')
       
      @@ -163,13 +165,13 @@

      Coloring Class Label Fonts -

      Coloring on classlabels

      +

      Coloring on classlabels

      Coloring the dots on the input class labels.

      # Color on classlabels
      -scatterd(X[:,0], X[:,1], labels=labels)
      +fig, ax = scatterd(X[:,0], X[:,1], labels=labels)
       
       # Change color using the cmap
      -scatterd(X[:,0], X[:,1], labels=labels, cmap='Set2')
      +fig, ax = scatterd(X[:,0], X[:,1], labels=labels, cmap='Set2')
       
      @@ -186,19 +188,19 @@

      Coloring on classlabels
      -

      Overlay with Kernel Density

      +

      Overlay with Kernel Density

      Overlay the scatterplot with kernel densities.

      # Add density to plot
      -scatterd(X[:,0], X[:,1], density=True)
      +fig, ax = scatterd(X[:,0], X[:,1], density=True)
       
       # Color the classlabels
      -scatterd(X[:,0], X[:,1], labels=labels, density=True)
      +fig, ax = scatterd(X[:,0], X[:,1], labels=labels, density=True)
       
       # Increase dot sizes
      -scatterd(X[:,0], X[:,1], labels=labels, density=True, s=100)
      +fig, ax = scatterd(X[:,0], X[:,1], labels=labels, density=True, s=100)
       
       # Change various parameters
      -scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0])
      +fig, ax = scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0])
       

      @@ -219,13 +221,13 @@

      Overlay with Kernel Density -

      Customized colormap

      +

      Customized colormap

      Overlay the scatterplot with kernel densities.

      # Change various parameters
       args_density = {'fill':True, 'thresh': 0, 'levels': 100, 'cmap':"mako"}
       
       # Scatter
      -scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0], axiscolor=None, args_density=args_density)
      +fig, ax = scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0], axiscolor=None, args_density=args_density)
       
      diff --git a/docs/pages/html/Installation.html b/docs/pages/html/Installation.html index fd19944..14d9b75 100644 --- a/docs/pages/html/Installation.html +++ b/docs/pages/html/Installation.html @@ -15,7 +15,9 @@ + + @@ -31,7 +33,7 @@ scatterd
      - 1.1.3 + 1.2.0
      @@ -104,9 +106,9 @@
      -

      Installation

      +

      Installation

      -

      Pypi

      +

      Pypi

      # Install from Pypi:
       pip install scatterd
       
      @@ -116,7 +118,7 @@ 

      Pypi

      -

      Github source

      +

      Github source

      # Install directly from github
       pip install git+https://github.com/erdogant/scatterd
       
      @@ -124,9 +126,9 @@

      Github source -

      Uninstalling

      +

      Uninstalling

      -

      Remove installation

      +

      Remove installation

      Note that the removal of the environment will also remove the scatterd installation.

      # Install from Pypi:
       pip uninstall scatterd
      diff --git a/docs/pages/html/Tutorials.html b/docs/pages/html/Tutorials.html
      index d99e4d9..391063d 100644
      --- a/docs/pages/html/Tutorials.html
      +++ b/docs/pages/html/Tutorials.html
      @@ -15,7 +15,9 @@
               
               
               
      +        
               
      +        
           
           
           
      @@ -31,7 +33,7 @@
                    scatterd
                 
                     
      - 1.1.3 + 1.2.0
      @@ -97,7 +99,7 @@
      -

      Input

      +

      Input

      Make scaterplot.

      param x
      @@ -221,25 +223,36 @@

      Examples

      >>> # Import library
       >>> from scatterd import scatterd, import_example
      +>>>
       >>> # Import example
       >>> df = import_example()
      ->>> # plain scatter plot
      ->>> ax = scatterd(df['tsneX'], df['tsneY'])
      ->>> # plain scatter plot
      ->>> ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'])
      ->>> # Gradient
      ->>> ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], gradient='#FFFFFF')
      +>>>
      +>>> # Simple scatter
      +>>> fig, ax = scatterd(df['tsneX'], df['tsneY'])
      +>>>
      +>>> # Scatter with labels
      +>>> fig, ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'])
      +>>>
      +>>> # Scatter with gradient
      +>>> fig, ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], gradient='#FFFFFF')
      +>>>
       >>> # Change cmap
      ->>> ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], gradient='#FFFFFF', cmap='Set2')
      ->>> # Density
      ->>> ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], density=True)
      ->>> # Density with gradient
      ->>> ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], density=True, gradient='#FFFFFF')
      +>>> fig, ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], gradient='#FFFFFF', cmap='Set2')
      +>>>
      +>>> # Scatter with density
      +>>> fig, ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], density=True)
      +>>>
      +>>> # Scatter with density and gradient
      +>>> fig, ax = scatterd(df['tsneX'], df['tsneY'], labels=df['labx'], density=True, gradient='#FFFFFF')
       >>>
       

      References

      -

      Colormap: https://matplotlib.org/examples/color/colormaps_reference.html

      +
      diff --git a/docs/pages/html/_sources/Examples.rst.txt b/docs/pages/html/_sources/Examples.rst.txt index 90790e1..74a0054 100644 --- a/docs/pages/html/_sources/Examples.rst.txt +++ b/docs/pages/html/_sources/Examples.rst.txt @@ -15,7 +15,7 @@ In the following example we will make a simple scatter plot using all default pa from scatterd import scatterd # Scatter the results - scatterd(X[:,0], X[:,1]) + fig, ax = scatterd(X[:,0], X[:,1]) .. |fig1| image:: ../figs/fig1_simple.png @@ -36,7 +36,7 @@ Coloring the dots can using RGB values or standard strings, such as 'r', 'k' etc .. code:: python # Color dots in red - scatterd(X[:,0], X[:,1], c=[1,0,0]) + fig, ax = scatterd(X[:,0], X[:,1], c=[1,0,0]) .. |fig2| image:: ../figs/fig2_red.png @@ -57,10 +57,10 @@ Coloring the dots can using RGB values or standard strings, such as 'r', 'k' etc .. code:: python # Fontcolor in red - scatterd(X[:,0], X[:,1], fontcolor=[1,0,0]) + fig, ax = scatterd(X[:,0], X[:,1], fontcolor=[1,0,0]) # Fontcolor red - scatterd(X[:,0], X[:,1], fontcolor='r') + fig, ax = scatterd(X[:,0], X[:,1], fontcolor='r') .. |fig3| image:: ../figs/fig1_fontcoloring.png @@ -81,10 +81,10 @@ Coloring the dots on the input class labels. .. code:: python # Color on classlabels - scatterd(X[:,0], X[:,1], labels=labels) + fig, ax = scatterd(X[:,0], X[:,1], labels=labels) # Change color using the cmap - scatterd(X[:,0], X[:,1], labels=labels, cmap='Set2') + fig, ax = scatterd(X[:,0], X[:,1], labels=labels, cmap='Set2') .. |fig4| image:: ../figs/fig_classlabels1.png @@ -109,16 +109,16 @@ Overlay the scatterplot with kernel densities. .. code:: python # Add density to plot - scatterd(X[:,0], X[:,1], density=True) + fig, ax = scatterd(X[:,0], X[:,1], density=True) # Color the classlabels - scatterd(X[:,0], X[:,1], labels=labels, density=True) + fig, ax = scatterd(X[:,0], X[:,1], labels=labels, density=True) # Increase dot sizes - scatterd(X[:,0], X[:,1], labels=labels, density=True, s=100) + fig, ax = scatterd(X[:,0], X[:,1], labels=labels, density=True, s=100) # Change various parameters - scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0]) + fig, ax = scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0]) .. |fig6| image:: ../figs/fig_density_1.png @@ -151,7 +151,7 @@ Overlay the scatterplot with kernel densities. args_density = {'fill':True, 'thresh': 0, 'levels': 100, 'cmap':"mako"} # Scatter - scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0], axiscolor=None, args_density=args_density) + fig, ax = scatterd(X[:,0], X[:,1], labels=labels, s=s, cmap='Set2', xlabel='xlabel', ylabel='ylabel', title='Title', fontsize=25, density=True, fontcolor=[0,0,0], axiscolor=None, args_density=args_density) diff --git a/docs/pages/html/_static/_sphinx_javascript_frameworks_compat.js b/docs/pages/html/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8549469 --- /dev/null +++ b/docs/pages/html/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs/pages/html/_static/basic.css b/docs/pages/html/_static/basic.css index bf18350..eeb0519 100644 --- a/docs/pages/html/_static/basic.css +++ b/docs/pages/html/_static/basic.css @@ -222,7 +222,7 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ div.body { - min-width: 450px; + min-width: 360px; max-width: 800px; } @@ -236,7 +236,6 @@ div.body p, div.body dd, div.body li, div.body blockquote { a.headerlink { visibility: hidden; } - a.brackets:before, span.brackets > a:before{ content: "["; @@ -247,6 +246,7 @@ span.brackets > a:after { content: "]"; } + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -334,13 +334,11 @@ aside.sidebar { p.sidebar-title { font-weight: bold; } - div.admonition, div.topic, blockquote { clear: left; } /* -- topics ---------------------------------------------------------------- */ - div.topic { border: 1px solid #ccc; padding: 7px; @@ -428,10 +426,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.footnote td, table.footnote th { - border: 0 !important; -} - th { text-align: left; padding-right: 5px; @@ -614,7 +608,6 @@ ol.simple p, ul.simple p { margin-bottom: 0; } - dl.footnote > dt, dl.citation > dt { float: left; @@ -643,11 +636,11 @@ dl.field-list > dt { padding-left: 0.5em; padding-right: 5px; } - dl.field-list > dt:after { content: ":"; } + dl.field-list > dd { padding-left: 0.5em; margin-top: 0em; diff --git a/docs/pages/html/_static/doctools.js b/docs/pages/html/_static/doctools.js index e1bfd70..527b876 100644 --- a/docs/pages/html/_static/doctools.js +++ b/docs/pages/html/_static/doctools.js @@ -2,357 +2,155 @@ * doctools.js * ~~~~~~~~~~~ * - * Sphinx JavaScript utilities for all documentation. + * Base JavaScript utilities for all Sphinx HTML documentation. * * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); } - return result; }; -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - /** * Small JavaScript module for the documentation. */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - this.initOnKeyListeners(); +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); }, /** * i18n support */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists } }, - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; }, - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - var url = new URL(window.location); - url.searchParams.delete('highlight'); - window.history.replaceState({}, '', url); + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; }, - /** + /** * helper function to focus on search bar */ - focusSearchBar : function() { - $('input[name=q]').first().focus(); + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** - * make the url absolute + * Initialise the domain index toggle buttons */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); }, - initOnKeyListeners: function() { + initOnKeyListeners: () => { // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - return; - - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON') { - if (event.altKey || event.ctrlKey || event.metaKey) - return; - - if (!event.shiftKey) { - switch (event.key) { - case 'ArrowLeft': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - break; - case 'ArrowRight': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - break; - case 'Escape': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.hideSearchWords(); - return false; - } - } - - // some keyboard layouts may need Shift to get / + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { switch (event.key) { - case '/': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.focusSearchBar(); - return false; + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; } } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } }); - } + }, }; // quick alias for translations -_ = Documentation.gettext; +const _ = Documentation.gettext; -$(document).ready(function() { - Documentation.init(); -}); +_ready(Documentation.init); diff --git a/docs/pages/html/_static/documentation_options.js b/docs/pages/html/_static/documentation_options.js index 894bf90..29a4487 100644 --- a/docs/pages/html/_static/documentation_options.js +++ b/docs/pages/html/_static/documentation_options.js @@ -1,7 +1,7 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), VERSION: 'scatterd', - LANGUAGE: 'None', + LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', FILE_SUFFIX: '.html', diff --git a/docs/pages/html/_static/jquery-3.5.1.js b/docs/pages/html/_static/jquery-3.6.0.js similarity index 98% rename from docs/pages/html/_static/jquery-3.5.1.js rename to docs/pages/html/_static/jquery-3.6.0.js index 5093733..fc6c299 100644 --- a/docs/pages/html/_static/jquery-3.5.1.js +++ b/docs/pages/html/_static/jquery-3.6.0.js @@ -1,15 +1,15 @@ /*! - * jQuery JavaScript Library v3.5.1 + * jQuery JavaScript Library v3.6.0 * https://jquery.com/ * * Includes Sizzle.js * https://sizzlejs.com/ * - * Copyright JS Foundation and other contributors + * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2020-05-04T22:49Z + * Date: 2021-03-02T17:08Z */ ( function( global, factory ) { @@ -76,12 +76,16 @@ var support = {}; var isFunction = function isFunction( obj ) { - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; var isWindow = function isWindow( obj ) { @@ -147,7 +151,7 @@ function toType( obj ) { var - version = "3.5.1", + version = "3.6.0", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -401,7 +405,7 @@ jQuery.extend( { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? - [ arr ] : arr + [ arr ] : arr ); } else { push.call( ret, arr ); @@ -496,9 +500,9 @@ if ( typeof Symbol === "function" ) { // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); function isArrayLike( obj ) { @@ -518,14 +522,14 @@ function isArrayLike( obj ) { } var Sizzle = /*! - * Sizzle CSS Selector Engine v2.3.5 + * Sizzle CSS Selector Engine v2.3.6 * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Released under the MIT license * https://js.foundation/ * - * Date: 2020-03-14 + * Date: 2021-02-16 */ ( function( window ) { var i, @@ -1108,8 +1112,8 @@ support = Sizzle.support = {}; * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; // Support: IE <=8 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes @@ -3024,9 +3028,9 @@ var rneedsContext = jQuery.expr.match.needsContext; function nodeName( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); -}; +} var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); @@ -3997,8 +4001,8 @@ jQuery.extend( { resolveContexts = Array( i ), resolveValues = slice.call( arguments ), - // the master Deferred - master = jQuery.Deferred(), + // the primary Deferred + primary = jQuery.Deferred(), // subordinate callback factory updateFunc = function( i ) { @@ -4006,30 +4010,30 @@ jQuery.extend( { resolveContexts[ i ] = this; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); + primary.resolveWith( resolveContexts, resolveValues ); } }; }; // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || + if ( primary.state() === "pending" || isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - return master.then(); + return primary.then(); } } // Multiple arguments are aggregated like Promise.all array elements while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); } - return master.promise(); + return primary.promise(); } } ); @@ -4180,8 +4184,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { for ( ; i < len; i++ ) { fn( elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } @@ -5089,10 +5093,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { } -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; @@ -5387,8 +5388,8 @@ jQuery.event = { event = jQuery.event.fix( nativeEvent ), handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event @@ -5512,12 +5513,12 @@ jQuery.event = { get: isFunction( hook ) ? function() { if ( this.originalEvent ) { - return hook( this.originalEvent ); + return hook( this.originalEvent ); } } : function() { if ( this.originalEvent ) { - return this.originalEvent[ name ]; + return this.originalEvent[ name ]; } }, @@ -5656,7 +5657,13 @@ function leverageNative( el, type, expectSync ) { // Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); - return result.value; + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; } // If this is an inner synthetic event for an event with a bubbling surrogate @@ -5821,34 +5828,7 @@ jQuery.each( { targetTouches: true, toElement: true, touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } + which: true }, jQuery.event.addProp ); jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { @@ -5874,6 +5854,12 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp return true; }, + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + delegateType: delegateType }; } ); @@ -6541,6 +6527,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); // set in CSS while `offset*` properties report correct values. // Behavior in IE 9 is more subtle than in newer versions & it passes // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) reliableTrDimensions: function() { var table, tr, trChild, trStyle; if ( reliableTrDimensionsVal == null ) { @@ -6548,17 +6538,32 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); tr = document.createElement( "tr" ); trChild = document.createElement( "div" ); - table.style.cssText = "position:absolute;left:-11111px"; + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. tr.style.height = "1px"; trChild.style.height = "9px"; + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + documentElement .appendChild( table ) .appendChild( tr ) .appendChild( trChild ); trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; documentElement.removeChild( table ); } @@ -7022,10 +7027,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) { // Running getBoundingClientRect on a disconnected node // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); } }, @@ -7084,7 +7089,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, swap( elem, { marginLeft: 0 }, function() { return elem.getBoundingClientRect().left; } ) - ) + "px"; + ) + "px"; } } ); @@ -7223,7 +7228,7 @@ Tween.propHooks = { if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || + jQuery.cssHooks[ tween.prop ] || tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { @@ -7468,7 +7473,7 @@ function defaultPrefilter( elem, props, opts ) { anim.done( function() { - /* eslint-enable no-loop-func */ + /* eslint-enable no-loop-func */ // The final step of a "hide" animation is actually hiding the element if ( !hidden ) { @@ -7588,7 +7593,7 @@ function Animation( elem, properties, options ) { tweens: [], createTween: function( prop, end ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; }, @@ -7761,7 +7766,8 @@ jQuery.fn.extend( { anim.stop( true ); } }; - doAnimation.finish = doAnimation; + + doAnimation.finish = doAnimation; return empty || optall.queue === false ? this.each( doAnimation ) : @@ -8401,8 +8407,8 @@ jQuery.fn.extend( { if ( this.setAttribute ) { this.setAttribute( "class", className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" + "" : + dataPriv.get( this, "__className__" ) || "" ); } } @@ -8417,7 +8423,7 @@ jQuery.fn.extend( { while ( ( elem = this[ i++ ] ) ) { if ( elem.nodeType === 1 && ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; + return true; } } @@ -8707,9 +8713,7 @@ jQuery.extend( jQuery.event, { special.bindType || type; // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); @@ -8856,7 +8860,7 @@ var rquery = ( /\?/ ); // Cross-browser xml parsing jQuery.parseXML = function( data ) { - var xml; + var xml, parserErrorElem; if ( !data || typeof data !== "string" ) { return null; } @@ -8865,12 +8869,17 @@ jQuery.parseXML = function( data ) { // IE throws on parseFromString with invalid input. try { xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } + } catch ( e ) {} - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); } return xml; }; @@ -8971,16 +8980,14 @@ jQuery.fn.extend( { // Can add propHook for "elements" to filter or add form elements var elements = jQuery.prop( this, "elements" ); return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { + } ).filter( function() { var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works return this.name && !jQuery( this ).is( ":disabled" ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { + } ).map( function( _i, elem ) { var val = jQuery( this ).val(); if ( val == null ) { @@ -9033,7 +9040,8 @@ var // Anchor tag for parsing the document origin originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; + +originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { @@ -9414,8 +9422,8 @@ jQuery.extend( { // Context for global events is callbackContext if it is a DOM node or jQuery collection globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, + jQuery( callbackContext ) : + jQuery.event, // Deferreds deferred = jQuery.Deferred(), @@ -9727,8 +9735,10 @@ jQuery.extend( { response = ajaxHandleResponses( s, jqXHR, responses ); } - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { s.converters[ "text script" ] = function() {}; } @@ -10466,12 +10476,6 @@ jQuery.offset = { options.using.call( elem, props ); } else { - if ( typeof props.top === "number" ) { - props.top += "px"; - } - if ( typeof props.left === "number" ) { - props.left += "px"; - } curElem.css( props ); } } @@ -10640,8 +10644,11 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) { // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, - function( defaultExtra, funcName ) { + jQuery.each( { + padding: "inner" + name, + content: type, + "": "outer" + name + }, function( defaultExtra, funcName ) { // Margin is only for outerHeight, outerWidth jQuery.fn[ funcName ] = function( margin, value ) { @@ -10726,7 +10733,8 @@ jQuery.fn.extend( { } } ); -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + +jQuery.each( + ( "blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu" ).split( " " ), function( _i, name ) { @@ -10737,7 +10745,8 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + this.on( name, null, data, fn ) : this.trigger( name ); }; - } ); + } +); diff --git a/docs/pages/html/_static/jquery.js b/docs/pages/html/_static/jquery.js index b061403..c4c6022 100644 --- a/docs/pages/html/_static/jquery.js +++ b/docs/pages/html/_static/jquery.js @@ -1,2 +1,2 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"
      ","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
      ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
      ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 { + const [docname, title, anchor, descr, score, filename] = result + return score }, */ @@ -28,9 +30,11 @@ if (!Scorer) { // or matches in the last dotted part of the object name objPartialMatch: 6, // Additive scores depending on the priority of the object - objPrio: {0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5}, // used to be unimportantResults + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, // Used when the priority is not in the mapping. objPrioDefault: 0, @@ -39,452 +43,495 @@ if (!Scorer) { partialTitle: 7, // query found in terms term: 5, - partialTerm: 2 + partialTerm: 2, }; } -if (!splitQuery) { - function splitQuery(query) { - return query.split(/\s+/); +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings } /** * Search Module */ -var Search = { - - _index : null, - _queued_query : null, - _pulse_status : -1, - - htmlToText : function(htmlString) { - var virtualDocument = document.implementation.createHTMLDocument('virtual'); - var htmlElement = $(htmlString, virtualDocument); - htmlElement.find('.headerlink').remove(); - docContent = htmlElement.find('[role=main]')[0]; - if(docContent === undefined) { - console.warn("Content block not found. Sphinx search tries to obtain it " + - "via '[role=main]'. Could you check your theme or template."); - return ""; - } - return docContent.textContent || docContent.innerText; +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; }, - init : function() { - var params = $.getQueryParameters(); - if (params.q) { - var query = params.q[0]; - $('input[name="q"]')[0].value = query; - this.performSearch(query); - } + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); }, - loadIndex : function(url) { - $.ajax({type: "GET", url: url, data: null, - dataType: "script", cache: true, - complete: function(jqxhr, textstatus) { - if (textstatus != "success") { - document.getElementById("searchindexloader").src = url; - } - }}); - }, + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), - setIndex : function(index) { - var q; - this._index = index; - if ((q = this._queued_query) !== null) { - this._queued_query = null; - Search.query(q); + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); } }, - hasIndex : function() { - return this._index !== null; - }, + hasIndex: () => Search._index !== null, - deferQuery : function(query) { - this._queued_query = query; - }, + deferQuery: (query) => (Search._queued_query = query), - stopPulse : function() { - this._pulse_status = 0; - }, + stopPulse: () => (Search._pulse_status = -1), - startPulse : function() { - if (this._pulse_status >= 0) - return; - function pulse() { - var i; + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { Search._pulse_status = (Search._pulse_status + 1) % 4; - var dotString = ''; - for (i = 0; i < Search._pulse_status; i++) - dotString += '.'; - Search.dots.text(dotString); - if (Search._pulse_status > -1) - window.setTimeout(pulse, 500); - } + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; pulse(); }, /** * perform a search for something (or wait until index is loaded) */ - performSearch : function(query) { + performSearch: (query) => { // create the required interface elements - this.out = $('#search-results'); - this.title = $('

      ' + _('Searching') + '

      ').appendTo(this.out); - this.dots = $('').appendTo(this.title); - this.status = $('

       

      ').appendTo(this.out); - this.output = $('