From 6241826922dee48af2db99597d405c3a79d346f8 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 20 Apr 2024 06:32:07 -0700 Subject: [PATCH 1/2] - --- App_Code/ClsRH.vb | 2 +- Bin/ClbNegBICFDv3_2.dll | Bin 213504 -> 0 bytes ...icrosoft.ReportViewer.Common.resources.dll | Bin 1478064 -> 0 bytes ...portViewer.DataVisualization.resources.dll | Bin 1453000 -> 0 bytes ...icrosoft.ReportViewer.Design.resources.dll | Bin 23488 -> 0 bytes ...osoft.ReportViewer.WebDesign.resources.dll | Bin 23480 -> 0 bytes ...rosoft.ReportViewer.WebForms.resources.dll | Bin 50120 -> 0 bytes ...rosoft.ReportViewer.WinForms.resources.dll | Bin 74168 -> 0 bytes Contabilidad2/RepBalanceGeneral.aspx.exclude | 928 -- .../RepBalanceGeneral.aspx.vb.exclude | 982 -- RH/CatChecadores.aspx.cs | 4 +- Scripts/Notificaciones.js | 136 +- Scripts/jquery-3.7.1.intellisense.js | 2670 ++++ Scripts/jquery-3.7.1.js | 10716 ++++++++++++++++ Scripts/jquery-3.7.1.min.js | 2 + Scripts/jquery-3.7.1.min.map | 1 + Scripts/jquery-3.7.1.slim.js | 8617 +++++++++++++ Scripts/jquery-3.7.1.slim.min.js | 2 + Scripts/jquery-3.7.1.slim.min.map | 1 + SqlServerTypes/readme.htm | 61 - Web_old.config | 701 + libman.json | 5 + 22 files changed, 22765 insertions(+), 2063 deletions(-) delete mode 100644 Bin/ClbNegBICFDv3_2.dll delete mode 100644 Bin/ja/Microsoft.ReportViewer.Common.resources.dll delete mode 100644 Bin/ja/Microsoft.ReportViewer.DataVisualization.resources.dll delete mode 100644 Bin/ja/Microsoft.ReportViewer.Design.resources.dll delete mode 100644 Bin/ja/Microsoft.ReportViewer.WebDesign.resources.dll delete mode 100644 Bin/ja/Microsoft.ReportViewer.WebForms.resources.dll delete mode 100644 Bin/ja/Microsoft.ReportViewer.WinForms.resources.dll delete mode 100644 Contabilidad2/RepBalanceGeneral.aspx.exclude delete mode 100644 Contabilidad2/RepBalanceGeneral.aspx.vb.exclude create mode 100644 Scripts/jquery-3.7.1.intellisense.js create mode 100644 Scripts/jquery-3.7.1.js create mode 100644 Scripts/jquery-3.7.1.min.js create mode 100644 Scripts/jquery-3.7.1.min.map create mode 100644 Scripts/jquery-3.7.1.slim.js create mode 100644 Scripts/jquery-3.7.1.slim.min.js create mode 100644 Scripts/jquery-3.7.1.slim.min.map delete mode 100644 SqlServerTypes/readme.htm create mode 100644 Web_old.config create mode 100644 libman.json diff --git a/App_Code/ClsRH.vb b/App_Code/ClsRH.vb index 5c4a50311..b95960ee1 100644 --- a/App_Code/ClsRH.vb +++ b/App_Code/ClsRH.vb @@ -2057,7 +2057,7 @@ Public Class ClsRH .Add("@CveSubTipoPeriodo", SqlDbType.Int).Value = CveSubTipoPeriodo '.Add("@ErrorMostrarADS", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output - .Add("@RETURN_VALUE", SqlDbType.Int).Direction = ParameterDirection.Output + .Add("@RETURN_VALUE", SqlDbType.Int).Direction = ParameterDirection.ReturnValue End With diff --git a/Bin/ClbNegBICFDv3_2.dll b/Bin/ClbNegBICFDv3_2.dll deleted file mode 100644 index 8ccf14b8c1fc8f02cda74cf5fd78079d82ae0c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213504 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 fICw9^(Y$~_%HtZTl(MK|ML&<^*{TM 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˻Ot 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 IYe&fc09EK0<^TWy diff --git a/Bin/ja/Microsoft.ReportViewer.DataVisualization.resources.dll b/Bin/ja/Microsoft.ReportViewer.DataVisualization.resources.dll deleted file mode 100644 index 72dca1ac4ed3adeec6554e1b54b1f6cdfa7624d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1453000 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

lb|`ewVd&2a-x_0E-@(>X`O9V5xm@cg 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Ë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ⓈNE6IlTc^+OD9NbBWQp)>KDBm+6)f% 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 U=hV7>pLm<*5C1&o5H*PWKTmxG?f?J) diff --git a/Bin/ja/Microsoft.ReportViewer.Design.resources.dll b/Bin/ja/Microsoft.ReportViewer.Design.resources.dll deleted file mode 100644 index df45a3886f05f8c25a45e61ccd25f106628a46c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23488 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 Q|Hj%aODT$~aAN-d0g*yCb^rhX diff --git a/Bin/ja/Microsoft.ReportViewer.WebForms.resources.dll b/Bin/ja/Microsoft.ReportViewer.WebForms.resources.dll deleted file mode 100644 index 7a96469e40e7fea5b295a851c2d0ed4949891c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50120 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 diff --git a/Bin/ja/Microsoft.ReportViewer.WinForms.resources.dll b/Bin/ja/Microsoft.ReportViewer.WinForms.resources.dll deleted file mode 100644 index 20631907914715f3fb7b31ec41f9a829aeae9033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74168 zcmeEv2S60b^7jr&1#`}>fQX8)fH|NbpeQH;=15qA0*lKcVkDSz&I(3U6wDbpb2>e9 z_D&_~Jr&P%X1`y}?67%J@BE+lzPCC|s;aK8uCDH`uI};bJ6m8V5D1KLeEuvD?8TXW z?b*Nj|HR{U={oyM3wD+`S9dStd9JQsXjrr`N-7DF`bP)@{UakKGGTyND2<5}hD8cp zyZH(uBtc@^Ql(5S<)ppc1OiXSP*Cx%X&|54J%K@8Gsa9Hc!np%xu>PeFam)P*Fv0$ zJGwUD_{J5>Kb-}G@gC1R2Q$c5`w0R;S@yr;EWc%e1%iX689_I?23?V{{2`s*K^FCK zZqEoxDn0(MDf78IG z&Fot`HW7OW$f+jO8<%HW99w@eAfh{RQ|#8e7Z{gW5Xgt zY<`dr6zJEgM9qP%OJukuRytCAMfENX z{xBcoGQpzh7@LOg3idVb(_=-m5QEOm(>wg(GUxm|my0*E`nxMN{sJ245-&0&OWSTF*akl>L_;K>R@3>hjo9)dEr z)(5D}Z!CcIQsucFTNG7gUS9yXnQqzYQ@YncwbF-5#TCkC-v~Sb80g#n0Ak|EDMvH8%3sgNz&jGA6aXv#ci|L`Lo*f4mpN6`U_hWM`gFzyD5CR!A z2RKvGZA6qrDsv6<50`|r7of_Z@BjHTo#|H++9K$#+E)Axt)4N_ub@hn?YdBM#<5{R zvQU#yaac$w`o+bIvk&p26b>^3<_G4oJn|LFaj7a$AjF*2DXk}w+!-9NAUhGvR znsqsY8T>n)y>*k z3%hVgqFLPZ#O!}+sW!4>>-iU{CEQZ1Z|g@^OKRDwQaKl=(st9Xmfxvv*HNq6>SI++ zjiici_PW}?z>nhyPSL^qzw+b!x4Sh)XtiCwfl^6$xQoB^`+2Dn7_BLHl1Rfw!nNWb zuIX9P(ck;#js^Kwf_9#rc>CG;i9zKrPrBXp+N3H~r%nx*q%Q4xdF&?pfs;2G_;ko< zHK5Zj^0hSjxcu0aQ=5)$k8OIo(XL-kUx~kaI?uxY%1ue|l{524->}QLmCpoqeCm|a z`RS+=M+>eTx@9=w@>-K?KNl;zx%;kK6-pnjmDYb%oy22N4r9s=cX;i1t99zy^ftUN zCdjc>r%=yTzLB2me2dHK_?>)S-hafW3jQ6fHw=9v+cLCn^{J9#F5a@eGkeH3W_gcr zD{+3zQM;>SMyc zol*#5hxtS?N{QY`=zx~jJa!^p*XCS6Quv9;SLA}fBa|q-1BkhH5M}?65eh{IB|b4T zfasv4>=Q~HF*wb|Z z@DvsRfK}3Hq$*L#eJR)vwO2e=1-xRtezB~k%Am2F3z(CoqBN!fko6_%0#w$O#YIu& zlTR*+s~l`XkVRkdHA=Wz~Ds%xU~ezwhcZLaxR z-A47qbfl#wm={zt97Pnyy0;=B?&ko6-%g!F@~!jck-Y0tXv9l^YT=Bxe#xd2NfCr%}@v4LzaR z0y=)=q30qr)icnIKpY6V%s#%u!^E*-DHEr)!`&lVET!=wI{e?ygJ=}sA2^g5u9X2V zab%1K!W_O|>SY3Hu6BfsQu6W-i_{?rc9hIPeLr4If+T@n{!#y!EQ*VzQi;?>GJ^Lg zYmXN2gSY_n{p7&dGp3w>n@Z&$6Gw?C{}3@ETVnpX5-AoX6;loU$7Em}B}J&lKbCwk zsW@0Fjt>3D7%+;KN&dOwH;eTTgJp`2h9dHHQsNZ`2TZgiScZr%nr);&C75z9h^UtW z!A8iv_vTbcG1+3zMuB}v99U#bcsPUECZmxONyI-^2Gz0?H)JPm%uYHe%uZUBos^WF zcmOxqiF^MEH~CjP^fBK0A$u!ei~V5|SjX(rcbypF{m?3oJ6nZw5q%W3DLZ=dujpE_ zUVWxSq1yfv^G?=U`%_vxsG4#{4-t_80;W>#p$T~#lmA!eG{R%Qd2))aaQ_-LCPgq1 z%(VFz%>48Ot8lXYU(NjdQ-P-cS2Ir9hlAauVF+gRmm!wCsLuains;$_9k>2yd{pYn z@ke8&la7yxoz$S9!c1@fM>8Al**j}d%R95W*?P@+_O9=o&0fdny&wPcyb7il=Z#r& zY2NSSP3F@KP4L8WYx>M7zve&UduuG}?_0O-oLRc@f-dQ;D)^?qc;7K2re@cSp>OA zb=*~{?w03OcCWrsKPkDJwYzk3!S&%Mp?O8cDp8$5Bo z^y;m1!|v~#uQ(aH@H0Qgb#h!=_0M-L_VI|@-r~pHBz=Z?gk_KQc$wnuS@5u&_w48z z-gUxLdzbSV+UHfBfgw}2g~T+HE{HjE^Fj$!M74>RvxIJVT?{wmDtNSx0`?}J?}RV)DV|M3nvZZ4fc6kPn*l!VfL1-c zyN&yHa72Bg=kVUW1AcMbcfz|%;H^1ekKy?z(DMY1M9`Q6*p4_{@O%Pb41p7l_cf5O zN}wBzqXOOy#62dm1f?F%)KXLtLTr=-lF z2vxBeF&M?pAy7bn^cU*9BT!wx4pqDEdw@`+;J?jZODa^Po)g8=SQ zbcPgtONtDVqTbQeIQ1~OwPwZ9cm4u#s!uzY0@@ca%g@-C2e^CG7dQX<#AHDXe>o{$ zZTbVP)t95GtB(nW7wx|sotDb+D+&GCPz&nUuLcpnFDK&t#k$xPgO+b1T$D}*fbdrc zo7c^FpmqN8j25M%mKc}0eml8dD2gByLa3kt2z`YTs4KlK(7!?&yz)B&t%bfOSf9GP z0@+d@GOyr00cfKSP+g^IfvjH2d}%HRpkB)Aa%zupwXJ3gt}mNzK&h^Y!e@@W6y}<* z)w5IzgLN%b_>64CYb{jN+4q7Af@Pm7pcDsc6QXoRIQ>OioCFP0Z1oBb&>U{goXfNR6pq2Pg;!s8qAq7CAsC2~83oxO1P9?rRn(u@dizI;!|fSO&{0|^x>$NLv6MwC%31yGi$XCs zu7g#FAC6Ufrbd)M_793yl{F_>2WGTxITn`7cNJtsZQSYO*`Cpk@=t4oUNQfOEZg(3 zCI7e%l#;R`Eq)RSEilqo_zui4y@4>CZIcuF+d^UNnc~uDEZ(FjJslO_o(b2_m@kL_ zxA7z*p1j$btxsS@^TpBl8~HMeRf;gxAub1|h=3*qiNBFE=j@~@*@;`Slh(1(4Lh=v zCL^|JCB+scEy_-qnw>Z~I{{BOXD6+oP$PPshn4L5gk933|f7g(iZwo!r5hV3b z21=v*!A`@OF*WrS1ijT=0zY^k>n`=NiU;9uaX6L)OqpnvE{;9ZJUeL)8`g%9HUzU} z(ck}R-k0r9_tyh({)vz`ekVEAkT<2M3K}%1Zc~8==&6_2RF!{q-C)NbT;0G-lAt)e z-dZY1+3ck8tnp2QZJzyavAI-+y7q7Qr)@4+`=KK!X>3a28QgXq`WuJ;HNb5H{<<0b zfg4e3I)76rgBBZT!2C}M{>znMCM*Ie0%s8rlngacbO|4&EY3|%{+}Aqmc9SgwtyN2 zu0su75YUdB|Hi$L%hvrD@ZB21rT*Ce(O$^^?UB^lmr#292L)l>R#E=cZ;qnoH%R0+ zaATLRe%}p=wP*Bu?=0;tvB*m-n_iH3?9t$9&PLs4)E#M)*UY`*c$3C+*-DV`PPLU8f+E&mfN<`DS6k|Mz<;?cZL zqYsYosAt)_+n%9qe3w7F)}wmw2R(Z1Db?$gdC0&q6?X@F2K64cLl`uy?%m{J1N){9 zvp{564365Up92xC@C<{eOdQrYd{AXK;~DMC(;Y{B1b+t+Njx~Vs!ogrB z_V3-}hxP%~8lz1k4xRh)WNLfK2ST01OEwNG02^lTyD`(WEEgc8h!Asu6xcW{U4YzN zF1N9CHvsFU$|v8mD5}bFSZ4v;f&v;Tjyw|O(*fZQ#3}7Z(*d*CVsx}P2Ey<>oSo6; z_mw^mWHyfZYmk-ml>05I^Z9)IEvYN#T?~a{B}#kV(5@^|C@pQ}6beALoOA&y=P9Nr zsyzRri=wK`>mLASxA2Yzmt4$07nenI?zGpBYJ}fQfU`l``oWd?W_O|{P0)|Rb6*ZM z{0mZ0&chTQg?9O&9k%?ydz8Q(*HX0r2wuace>n=z*h-+VVV8XDqYq@mN4zTPUL~?{ zlwIv$%95!IP(2j+gl+XxRF=eAfHu)p>Gg$1qykZ>3z3g>*a;wOT|nxQ4g+D8byDOb z9o_**Cq?y0hn2ADO}@q=@O-ZUVw;0Rg$N!2{i_(~#gmDa z>Z=%67nwhr$gfJ74-pFnqSM#pm`7A>g){~vY;+kmZM))`qkR_YLg35N5|4*=Xszs=KEBlCf7qaWQ3+QonGAxQ9N(Fm$L z-oFKct^O3$1-c3`eOCHWcv-bYkX{kg)g^WxC=S}qranpK0nJJm8XwffedgdfKrOX{ zs>^?wrWP)FK!8L$y0LWCLDdr^1 zJ!3K%7n6A>)(`B8t&C1aNAz{gnBqRZ@=ycqON9SVc8oF$U^n4sW4rj!744hffA8=w z2c}YZSme+Sq5hE};to=A5Y|WI;}6k1SK7TBouE*$=er7+gfsX=ztbu30jq$H2Zj$N`JjG>*tXpnz+xX~bNYGynrTpTPj86>3-0~H$-Ai;NSA^?FNN^$(q;&VR? zvI~DdvI@t-e?wFL9axgDxLT<{o?1c2(wNvtz?bNXo(|3x?;J3Ka<%K5| zRt@(-|Byb)^slIZq)tC-1!NWBzoY_^ocZ66UIFdEDECnl^)8=*uFsr&*N9o|_E7() zmVVH9SyF)?x%kPLaa{k-q8U|Zshy^wi1rAACqtSFDTYwkO=+c#cCQ>Az}G) z_oRYOk&~`IJvk+QeCD(XQ3kU=P24=YQS-|4Zq2SWq1X~?Y=s&;+}CU z4(%&Q*mN+XXQd-YWA7h*wra#l`(1lZ#vCesF(cvkOV!Toy5jDB=t{+R8P}(lwz<7J zr^m1RPM>}BX?))AX|MY|^|p*JxW4dp!Pa+K&&17_|KU{S*bC>_;Fo>wyS$3q)a}*S zn!0fL>u$DGUJu%rU9^X*UKxW_kw8;#r+7PWcy&^>4SNp>|b zj@r{NXk@zM{gDf;c8#8niKtFkE&mn=?VlKjnTT7szJg*-MDzRswdpk`6#HVx+y>RO z08=sx@qP%_>375Exd1q{FT^0c>x+rcd4Qh;_|`B1Pw~tNbUZLG)*JU&Ixa}UATSVV z(r+)OGUfok1nvWIUl(bNM|a>5V0Pd<4DauQW_QdSWrLUQc-8{v^`L(rX&(XnMBr5f zjf1$qhxatAw-3+O0B!-E*#Z9~_&9*{n}MD!_@=GjM93$_U0%cepSWLz^IN3r1-#y% z*9x@W0wx-HJBVl1kmrg>Hxl`K3R+D8a}@Xc0kah_;YjOG;M_v`2LZDfFb3dz5Ac$3 zJq%|z!0*EQ`*`04$9nK)jq_^2)j%4ifNKF+?8EU1_Z0aQ1)MQ}s{`6@;L!{`e?~sq zgV!g(O9Z`sFlA+FCNvy&k-lm}9}uFSCGChsU((VypH&@zLLQL+2$TmxNW=&w;U|G? z0aTj@Ql0kUL0SRCmOz3KuB8Z7aK#fD4qsT*7}!|)!aW~q&1$YA6a{yt5A#F` zXtPF#4lD)*@6e`@G=oavJo+*d0yG=#Xxh0R1%%ohkHl9P@=RxCR%QXjnwt>j_UqEe zz+M11QwHt?TJ$Mx%7wpP-YJU6Tp5*TgPUIC<=hC`YRiGeu-uYtIL369-cX=4aRm$X zRVqS_g+M(}6tpXkzTC_JVly|TkKAhmc16yjL5#Niq0l4lGwi#7YF!j6->#nqut*u0 zwrQd;EeT4z1FpEunrMqRMJU>1Alc|b@&zNLcrjp&m)u7nnCn6yARzvw&I~SygdN1B@o($ z<;$vg7Er7;QM8Nq0)UY}QY6v_9*C4Qifu!{G<^*$ywJLofe{vUgy<;BkyJWR?Tc*O z*ZW8*70NCIQq4|+I6NXGK9WVDI8FelNF7Uc9{lmboL&rPb%1ti;=8V-!kpEJV4IN2 z3Wex~4r-y4LBWPzeW?Jq1HnoiftQS`tvL$N+SDBnfw_n*?1p=TFFw%l3P3FB8LvE`k`t%~{ph8(P0a%#_IvS!|W336!bEm3>RRLU{2c{95d^a;Zu1b&jJ*pH6 z6D??kmo@1nsbwsrE(Mmd-u4DSZFK-XeNH;GcXt!Q;XXx4{TFVBtD<@#v@0a!ryY?` zLp6_EfMP``RE6~0>_a?t4wMQy4jH6|QJ1(+0L5HET^HDWfUz0oC@XS6k-7Rx|A{I~ zs)*V%Y=jOihVp!dwFA`vP(y9@uqUhIWN@ep=qoj^7lLSaXkUxRz9Gl_}r&1 z$s_~RQWaD?#}q?pO@Mr;u095?1K3p^m~^kGei_$i9*XWCY5!0`E(mr07DC$lk#9lH z^V`T#c~W!g2OCC>L=4)4P(c-pmfXLEprTFnWNXGyK_ifA^DU%k03t;laRGt$-$H;2 zJOux!#qtJ`7Rp5U0h7Msrcw(+U8Q~cTYW7ux1fPCK*6#q68Ms|DLS2+9%>qffq;tI zeF=e%P&Fz{zAe;1o$LSOw%}Ut0>? zIBPvnUA`8T;Hjg-tx6#!+V(AEd{GJk5S_xp&;q5e)(0*Slsc*-1Q$TS>1(sYcR#uA z@C}eq5hiaP$sr)s+jhJlROKF#DrJ2Yini4i=|<&wP;F^x4On?X;(MN)=OhA;h02e) z?hti06dj{@067qlOvT6H292bV8pYt#Uy@}ssvGa`n9cDSibt_*_2GLg`ZD)3keqyB zJk^oD+@tUoBpPZXp61u}_dL=v+wyOGIWA;t9UL`;<|#1{>-6H~JjGY}Pyhq)`KWhZ20 z$0x``KwbT1{v9e(w#!?Rm^=9Z z(@5VIV!4wi=1$pOxRDU!`W3*${zgt6V5a?T)X{7v9@wvb3gjLxIv$7LX zvJ)1d_-$=%F>SArLeAbT*qcY=F*uXY*D;kf-&$L_HPFhgu{#3h#f+&t^pcBfW=iI5 z##G|mytT{ocdlkk=q_Qe##8<+cP^7V0ZS<$EncZK9@yy7s9ou~(-!1zot3v>YkuNB z{Dp{kO1Tp@i{<&&Uduui-27vNL|(h~(^ze>iC;H4BN;@^{V7Te%!|@8NnF!?k1*<<^g-Pv#L5*vXVo z%j|@Cu$nms*5&M-s!Zci%7px7FsnLf0JU*$dh)|n(^0{oIdX31&B)0_!qBBcgUe^B zI9Z9VJv==bBlfQro5>Xe3q+IcTxI}HU-ng~_`?lbP|8e&LRI1(SX((a(1cQ;kzLz2 zfog`jVk_AK=-?dIKA~BI=1ytFh%lRv%AnB@DwIbJg(;Ie1%;_xcIppIa%XJKoxF#s z#+|9nB_jz_35}j?ZROd3G38!aTX{FYw@q1ab_Et%b$MM@JXXPGc;bWAt0l6jQY%>= zX{$PF%9B!I1Q5C)8UwA!OWMKKBSc9|hdOZ^+9^ZX6BJVwRXT6sRw{jYFqmhptC zsq2lkl}`gbcqK^`{4S=neG=MYd_ft7f$dJgXNLZ5)(8Ww5Uf!eo7XfTQ7D%dW5<-t z*$W%7Pu|FtRB7@|@|JJTTR4fnio2EF^>P6N&K9t|(AJlXX-EH<5HYt}32zqDo1}Pp zW0F7rKyK13#xQ@+QsDF3v@#`fmo0mkIyX0SHMJ|d*qkY4)r7i9VI!Dov}Y^!dSy#W zn4PqoC?o%g`m?wy!cY}=0#g2>aroDwU^Fg^(n4`IJhh;EZ|M^avq8|kW%0A8)7 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 - - - - - -

  • - Exporta Excel - <%-- --%> -
  • -
  • - Imprimir - <%-- --%> -
  • - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    - -
    - - - -
    -
    -
    - -
    - - - - - - - - - - - - - - -
    -
    -
    - -
    - - - -
    -
    -
    - -
    - - - - - -
    -
    -
    -
    -
    - -
    - - - - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    - -
    - - <%-- - - --%> - - <%--NORMAL--%> - <%-- - --%> - - - - -
    - -
    - - - - -
    -
    -

    ACTIVO

    - - - - - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - -
    -
    - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - -
    -
    - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - -
    -
    - -
    -
    -
    - -
    - - - - - - - - - - - - - -
    -
    -

    PASIVO

    - - - - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - -
    -
    - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - -
    -
    - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - - -
    -
    -
    - -
    - - - - - - - - -
    -

    Total del Pasivo:

    -
    - - - -
    -
    -
    -
    - -
    -

    - -

    - - - - - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - -
    -
    - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - -
    -
    - - - - - - - - - - - - - - - - <%----%> - - - - - - - <%----%> - - - - - <%----%> - - <%----%> - - -
    -
    -
    - -
    - - - - - - - - -
    -

    - -

    -
    - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - - -
    - - - - - - -
    -

    Total del Activo:

    -
    - - - -
    -
    -
    -
    -
    - -
    - - -
    - - - - - - -
    -

    - -

    -
    - - - -
    -
    -
    -
    -
    -
    -
    - -
    - -
    - - -
    - -
    -
    - - <%--
    -
    --%> - - <%--MENSUAL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --%> - <%--ANUAL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --%> - - <%--
    -
    -
    --%> - - -
    - - - - <%-- --%> - - diff --git a/Contabilidad2/RepBalanceGeneral.aspx.vb.exclude b/Contabilidad2/RepBalanceGeneral.aspx.vb.exclude deleted file mode 100644 index 45a0fcf15..000000000 --- a/Contabilidad2/RepBalanceGeneral.aspx.vb.exclude +++ /dev/null @@ -1,982 +0,0 @@ -Option Explicit On -Option Strict On - -Imports System.Data -Imports Extensiones -Imports Microsoft.Reporting.WebForms -Partial Class Contabilidad2_RepBalanceGeneral - Inherits ClsPaginas - - - -#Region " P R O P I E D A D E S - B A L A N C E - G E N E R A L" - Private Property DtDatos As DataTable - Get - DtDatos = DirectCast(ViewState("DtDatos"), DataTable) - End Get - - Set(ByVal value As DataTable) - ViewState("DtDatos") = value - End Set - End Property - Private Property TotalActivoActual As Double - Get - TotalActivoActual = ViewState("TotalActivoActual").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalActivoActual") = value - End Set - End Property - Private Property TotalActivoAnterior As Double - Get - TotalActivoAnterior = ViewState("TotalActivoAnterior").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalActivoAnterior") = value - End Set - End Property - Private Property TotalPasivoActual As Double - Get - TotalPasivoActual = ViewState("TotalPasivoActual").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalPasivoActual") = value - End Set - End Property - Private Property TotalPasivoAnterior As Double - Get - TotalPasivoAnterior = ViewState("TotalPasivoAnterior").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalPasivoAnterior") = value - End Set - End Property - Private Property TotalPatrimonioActual As Double - Get - TotalPatrimonioActual = ViewState("TotalPatrimonioActual").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalPatrimonioActual") = value - End Set - End Property - Private Property TotalPatrimonioAnterior As Double - Get - TotalPatrimonioAnterior = ViewState("TotalPatrimonioAnterior").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalPatrimonioAnterior") = value - End Set - End Property - Private Property TotalPasivoPatrimonioActual As Double - Get - TotalPasivoPatrimonioActual = ViewState("TotalPasivoPatrimonioActual").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalPasivoPatrimonioActual") = value - End Set - End Property - Private Property TotalPasivoPatrimonioAnterior As Double - Get - TotalPasivoPatrimonioAnterior = ViewState("TotalPasivoPatrimonioAnterior").ToString.ToDouble - End Get - Set(value As Double) - ViewState("TotalPasivoPatrimonioAnterior") = value - End Set - End Property - - Private Property FechaInicioActual As Date - Get - FechaInicioActual = ViewState("FechaInicioActual").ToString.ToDate - End Get - Set(value As Date) - ViewState("FechaInicioActual") = value - End Set - End Property - Private Property FechaFinActual As Date - Get - FechaFinActual = ViewState("FechaFinActual").ToString.ToDate - End Get - Set(value As Date) - ViewState("FechaFinActual") = value - End Set - End Property - Private Property FechaInicioAnterior As Date - Get - FechaInicioAnterior = ViewState("FechaInicioAnterior").ToString.ToDate - End Get - Set(value As Date) - ViewState("FechaInicioAnterior") = value - End Set - End Property - Private Property FechaFinAnterior As Date - Get - FechaFinAnterior = ViewState("FechaFinAnterior").ToString.ToDate - End Get - Set(value As Date) - ViewState("FechaFinAnterior") = value - End Set - End Property -#End Region - -#Region " PROPIEDADES MENSUAL " - Private Property DtDatosMensual As DataTable - Get - DtDatosMensual = DirectCast(ViewState("DtDatosMensual"), DataTable) - End Get - - Set(ByVal value As DataTable) - ViewState("DtDatosMensual") = value - End Set - End Property -#End Region - -#Region " PROPIEDADES - ANUAL " - Private Property DtDatosAnual As DataTable - Get - DtDatosAnual = DirectCast(ViewState("DtDatosAnual"), DataTable) - End Get - - Set(ByVal value As DataTable) - ViewState("DtDatosAnual") = value - End Set - End Property - Private Property Anos As Integer - Get - Anos = ViewState("Anos").ToString.ToEntero - End Get - Set(value As Integer) - ViewState("Anos") = value - End Set - End Property -#End Region - -#Region " PROPIEDADES" - Private Property TipoReporte As Integer - Get - TipoReporte = ViewState("TipoReporte").ToString.ToEntero - End Get - Set(value As Integer) - ViewState("TipoReporte") = value - End Set - End Property -#End Region - - Dim CuentaResultados As Integer - - Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load - If Not Page.IsPostBack Then - - If UsuarioActual.Empresa.TipoContabilidad = 2 Then - Response.Redirect($"/Contabilidad/RepBalanceGeneral.aspx") - End If - - 'If UsuarioActual.Empresa.UsaAC Then - ' TipoReporte = -1 - 'Else - tdTipoReporte.Visible = True - TipoReporte = 1 - ' End If - - 'SI NO USA AC - If TipoReporte > 0 Then - LtlTituloHacienda.Text = "CAPITAL" - LtlTotalHacienda.Text = "Total Capital:" - LtlTotalPasivoPatrimonio.Text = "Total del Pasivo y Capital:" - - GvActivo.Columns(2).Visible = False - GvActivoNoCirculante.Columns(2).Visible = False - GvActivoDiferido.Columns(2).Visible = False - GvPasivo.Columns(2).Visible = False - GvPasivoNoCirculante.Columns(2).Visible = False - GvPasivoDiferido.Columns(2).Visible = False - GvPatrimonio.Columns(2).Visible = False - GvUtilidad.Columns(2).Visible = False - - GvPatrimonioGenerado.Visible = False - GvPatrimonioActualizacion.Visible = False - - TdTotalActivoAnterior.Visible = False - TdTotalPasivoAnterior.Visible = False - TdTotalPasivo.Visible = False - TdTotalPatrimonio.Visible = False - - Else - GvUtilidad.Visible = False - GvActivoDiferido.Visible = False - GvPasivoDiferido.Visible = False - End If - - CargaDatosGenerales() - - DdlEjercicio.SelectedValue = NowADS().Year.ToString - - 'Anual - Anos = 0 - - 'Normal - InicializaValores() - - 'TabContainer_ActiveTabChanged(Tabs, EventArgs.Empty) - - End If - End Sub - - Private Sub CargaDatosGenerales() - Dim ClsConta As New ClsContabilidad - If ClsConta.GetEjercicios(UsuarioActual.CveEmpresa) Then - DdlEjercicio.DataSource = ClsConta.DtResultados - Else - DdlEjercicio.DataSource = Nothing - End If - - DdlSubproyecto.DataSource = GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, -1) - DdlSubproyecto.DataBind() - - ClsConta.Dispose() - - DdlEjercicio.DataBind() - - End Sub - - -#Region " REPORTE NORMAL " - - Private Sub InicializaValores() - TotalActivoActual = 0 - TotalActivoAnterior = 0 - TotalPasivoActual = 0 - TotalPasivoAnterior = 0 - TotalPatrimonioActual = 0 - TotalPatrimonioAnterior = 0 - TotalPasivoPatrimonioActual = 0 - TotalPasivoPatrimonioAnterior = 0 - End Sub - - Private Sub CargaDatos() - 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) - Dim Anio As String = If(DdlEjercicio.SelectedValue <> "", DdlEjercicio.SelectedValue, NowADS().Year.ToString) - Dim ObjConta As New ClsContabilidad - Dim FechaI = String.Format("01/{0}/{1}", DdlPeriodo.SelectedValue.PadLeft(2, "0"c), Anio) - Dim FechaF = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaI))).ToString("dd/MM/yyyy") - - TipoReporte = If(TipoReporte = -1, -1, DdlTipoReporte.SelectedValue.ToEntero) - - - If ObjConta.GetCuentas(-1, "00321", -1, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then - DtDatos = ObjConta.DtResultados - CuentaResultados = DtDatos.Rows(0)("CveCuenta").ToString.ToEntero - End If - Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString - - If ObjConta.GetSituacionFinanciera("01/01/1000".ToDate, FechaF.ToDate, UsuarioActual.CveEmpresa, CveSubProyecto, TipoReporte) Then - DtDatos = ObjConta.DtResultados - - CargaGrids() - SumaTotales() - Else - DtDatos = Nothing - Alert("Ocurrio un error al cargar los datos del estado de situación financiera", TipoMensaje.MsgError) - End If - - ObjConta.Dispose() - End Sub - Private Sub CargaGrids() - - 'ACTIVO - Dim DtActivoCirculante = DtDatos.FiltraParametros("Tipo in ('A','B','C') AND (Sup = 'ACTIVO CIRCULANTE' OR Nombre = 'ACTIVO CIRCULANTE' OR Sup = 'CIRCULANTE' OR Nombre ='CIRCULANTE')") - Dim DtActivoNoCirculante = DtDatos.FiltraParametros("Tipo in ('A','B','C') AND (Sup = 'ACTIVO NO CIRCULANTE' OR Nombre = 'ACTIVO NO CIRCULANTE' OR Sup = 'FIJO' OR Nombre ='FIJO')") - Dim DtActivoDiferido = DtDatos.FiltraParametros("Tipo in ('A','B','C') AND (Sup = 'DIFERIDO' OR Nombre = 'DIFERIDO')") - Dim Row As DataRow = DtActivoCirculante.NewRow - - If DtActivoCirculante.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL ACTIVO CIRCULANTE" - Row.Item("ImporteActual") = DtActivoCirculante.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtActivoCirculante.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtActivoCirculante.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL ACTIVO CIRCULANTE" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtActivoCirculante.Rows.Add(Row) - - - Row = DtActivoNoCirculante.NewRow - If DtActivoNoCirculante.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL ACTIVO NO CIRCULANTE" - Row.Item("ImporteActual") = DtActivoNoCirculante.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtActivoNoCirculante.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtActivoNoCirculante.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL ACTIVO NO CIRCULANTE" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtActivoNoCirculante.Rows.Add(Row) - - Row = DtActivoDiferido.NewRow - If DtActivoDiferido.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL ACTIVO DIFERIDO" - Row.Item("ImporteActual") = DtActivoDiferido.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtActivoDiferido.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtActivoDiferido.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL ACTIVO DIFERIDO" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtActivoDiferido.Rows.Add(Row) - - GvActivo.DataSource = DtActivoCirculante - GvActivo.DataBind() - GvActivoNoCirculante.DataSource = DtActivoNoCirculante - GvActivoNoCirculante.DataBind() - GvActivoDiferido.DataSource = DtActivoDiferido - GvActivoDiferido.DataBind() - UpActivo.Update() - - - 'PASIVO - Dim DtPasivoCirculante = DtDatos.FiltraParametros("Tipo in ('D') AND (Sup = 'PASIVO CIRCULANTE' OR Sup = 'PASIVO' OR Sup = 'CIRCULANTE' OR Nombre = 'PASIVO CIRCULANTE' OR Sup = 'CORTO PLAZO' OR Nombre = 'CORTO PLAZO')") - Dim DtPasivoNoCirculante = DtDatos.FiltraParametros("Tipo in ('D') AND (Sup = 'PASIVO NO CIRCULANTE' OR Nombre = 'PASIVO NO CIRCULANTE' OR Sup = 'LARGO PLAZO' OR Nombre = 'LARGO PLAZO')") - Dim DtPasivoDiferido = DtDatos.FiltraParametros("Tipo in ('D') AND (Sup = 'DIFERIDO' OR Nombre = 'DIFERIDO')") - - Row = DtPasivoCirculante.NewRow - If DtPasivoCirculante.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL PASIVO CIRCULANTE" - Row.Item("ImporteActual") = DtPasivoCirculante.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtPasivoCirculante.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtPasivoCirculante.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL PASIVO CIRCULANTE" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtPasivoCirculante.Rows.Add(Row) - - Row = DtPasivoNoCirculante.NewRow - If DtPasivoNoCirculante.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL PASIVO NO CIRCULANTE" - Row.Item("ImporteActual") = DtPasivoNoCirculante.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtPasivoNoCirculante.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtPasivoNoCirculante.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL PASIVO NO CIRCULANTE" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtPasivoNoCirculante.Rows.Add(Row) - - Row = DtPasivoDiferido.NewRow - If DtPasivoDiferido.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL PASIVO DIFERIDO" - Row.Item("ImporteActual") = DtPasivoDiferido.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtPasivoDiferido.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtPasivoDiferido.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL PASIVO DIFERIDO" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtPasivoDiferido.Rows.Add(Row) - - GvPasivo.DataSource = DtPasivoCirculante - GvPasivo.DataBind() - GvPasivoNoCirculante.DataSource = DtPasivoNoCirculante - GvPasivoNoCirculante.DataBind() - GvPasivoDiferido.DataSource = DtPasivoDiferido - GvPasivoDiferido.DataBind() - UpPasivo.Update() - - - 'PATRIMONIO - Dim DtPatrimonioContribuido = DtDatos.FiltraParametros("Tipo in ('F') AND (Sup = 'PATRIMONIO CONTRIBUIDO' OR Nombre = 'PATRIMONIO CONTRIBUIDO' OR Sup = 'CAPITAL CONTABLE' OR Sup = 'CAPITAL' OR Nombre = 'CAPITAL CONTABLE' OR Nombre = 'CAPITAL')") - Dim DtUtilidad = DtDatos.FiltraParametros("Tipo in ('F') AND (Codigo = '_UTILIDAD')") - Dim DtPatrimonioGenerado = DtDatos.FiltraParametros("Tipo in ('F') AND (Sup = 'PATRIMONIO GENERADO' OR Nombre = 'PATRIMONIO GENERADO')") - Dim DtPatrimonioActualizacion = DtDatos.FiltraParametros("Tipo in ('F') AND (Sup = 'EXCESO O INSUFICIENCIA EN LA ACTUALIZACION D/PATRI' OR Nombre = 'EXCESO O INSUFICIENCIA EN LA ACTUALIZACION D/PATRI')") - - Row = DtPatrimonioContribuido.NewRow - If DtPatrimonioContribuido.Rows.Count > 0 Then - Row.Item("Nombre") = String.Format("   {0}", If(TipoReporte < 0, "TOTAL PATRIMONIO CONTRIBUIDO", "TOTAL CAPITAL")) - Row.Item("ImporteActual") = DtPatrimonioContribuido.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtPatrimonioContribuido.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtPatrimonioContribuido.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = String.Format("   {0}", If(TipoReporte < 0, "TOTAL PATRIMONIO CONTRIBUIDO", "TOTAL CAPITAL")) - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtPatrimonioContribuido.Rows.Add(Row) - - Row = DtPatrimonioGenerado.NewRow - If DtPatrimonioGenerado.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL PATRIMONIO GENERADO" - 'El id = 87 es el id de la cuenta "RESULTADOS DEL EJERCICIO:(AHORRO/DESAHORRO)" - If DtPatrimonioGenerado.FiltraParametros("CveCuenta = " & CuentaResultados).Rows.Count > 0 Then - Row.Item("ImporteActual") = (DtPatrimonioGenerado.Rows(0)("ImporteActual").ToString.ToDouble + DtPatrimonioGenerado.FiltroPrimero("CveCuenta = " & CuentaResultados)("ImporteActual").ToString.ToDouble).ToString - Row.Item("ImporteAnterior") = (DtPatrimonioGenerado.Rows(0)("ImporteAnterior").ToString.ToDouble + DtPatrimonioGenerado.FiltroPrimero("CveCuenta = " & CuentaResultados)("ImporteAnterior").ToString.ToDouble).ToString - Else - Row.Item("ImporteActual") = DtPatrimonioGenerado.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtPatrimonioGenerado.Rows(0)("ImporteAnterior").ToString - End If - Row.Item("CtaMayor") = -1 - DtPatrimonioGenerado.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL PATRIMONIO GENERADO" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtPatrimonioGenerado.Rows.Add(Row) - - Row = DtPatrimonioActualizacion.NewRow - If DtPatrimonioActualizacion.Rows.Count > 0 Then - Row.Item("Nombre") = "   TOTAL EXCESO O INSUFICIENCIA EN LA ACTUALIZACION" - Row.Item("ImporteActual") = DtPatrimonioActualizacion.Rows(0)("ImporteActual").ToString - Row.Item("ImporteAnterior") = DtPatrimonioActualizacion.Rows(0)("ImporteAnterior").ToString - Row.Item("CtaMayor") = -1 - DtPatrimonioActualizacion.Rows.RemoveAt(0) - Else - Row.Item("Nombre") = "   TOTAL EXCESO O INSUFICIENCIA EN LA ACTUALIZACION" - Row.Item("ImporteActual") = "0.00" - Row.Item("ImporteAnterior") = "0.00" - Row.Item("CtaMayor") = -1 - End If - DtPatrimonioActualizacion.Rows.Add(Row) - - - GvPatrimonio.DataSource = DtPatrimonioContribuido - GvPatrimonio.DataBind() - GvUtilidad.DataSource = DtUtilidad - GvUtilidad.DataBind() - GvPatrimonioGenerado.DataSource = DtPatrimonioGenerado - GvPatrimonioGenerado.DataBind() - GvPatrimonioActualizacion.DataSource = DtPatrimonioActualizacion - GvPatrimonioActualizacion.DataBind() - UpPatrimonio.Update() - End Sub - Private Sub SumaTotales() - TotalPasivoPatrimonioActual = TotalPasivoActual + TotalPatrimonioActual - TotalPasivoPatrimonioAnterior = TotalPasivoAnterior + TotalPatrimonioAnterior - - 'Llena Lb´s Totales - LbTotalActivoActual.Text = TotalActivoActual.ToString.FormatoNumero - LbTotalActivoAnterior.Text = TotalActivoAnterior.ToString.FormatoNumero - - LbTotalPasivoActual.Text = TotalPasivoActual.ToString.FormatoNumero - LbTotalPasivoAnterior.Text = TotalPasivoAnterior.ToString.FormatoNumero - - LbTotalPatrimonioActual.Text = TotalPatrimonioActual.ToString.FormatoNumero - LbTotalPatrimonioAnterior.Text = TotalPatrimonioAnterior.ToString.FormatoNumero - - LbTotalPasivoPatrimonioActual.Text = TotalPasivoPatrimonioActual.ToString.FormatoNumero - LbTotalPasivoPatrimonioAnterior.Text = TotalPasivoPatrimonioAnterior.ToString.FormatoNumero - - - Dim Descuadre = False - 'COLOREA ROJO SI NO CUADRAN TOTALES - If TotalActivoActual <> TotalPasivoPatrimonioActual Then - LbTotalActivoActual.ForeColor = Drawing.Color.Red - LbTotalPasivoPatrimonioActual.ForeColor = Drawing.Color.Red - Descuadre = True - Else - LbTotalActivoActual.ForeColor = Drawing.Color.Black - LbTotalPasivoPatrimonioActual.ForeColor = Drawing.Color.Black - End If - - If TotalActivoAnterior <> TotalPasivoPatrimonioAnterior Then - LbTotalActivoAnterior.ForeColor = Drawing.Color.Red - LbTotalPasivoPatrimonioAnterior.ForeColor = Drawing.Color.Red - Descuadre = True - Else - LbTotalActivoAnterior.ForeColor = Drawing.Color.Black - LbTotalPasivoPatrimonioAnterior.ForeColor = Drawing.Color.Black - End If - - If Descuadre Then - LbDescuadre.Text = "Las sumas de los totales están descuadradas." - Else - LbDescuadre.Text = "" - End If - - - End Sub - - - -#Region "GV´S ROW DATA BOUND" - - Protected Sub GvActivo_RowDataBound(sender As Object, e As GridViewRowEventArgs) - If e.Row.RowType = DataControlRowType.DataRow Then - If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then - TotalActivoActual += e.Row.DBCampo("ImporteActual").ToString.ToDouble - TotalActivoAnterior += e.Row.DBCampo("ImporteAnterior").ToString.ToDouble - e.Row.FCLabel("LbNombre").Font.Italic = True - Else - e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - End If - - If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then - e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red - End If - If e.Row.DBCampo("ImporteAnterior").ToString.ToDouble < 0 Then - e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red - End If - End If - End Sub - - Protected Sub GvPasivo_RowDataBound(sender As Object, e As GridViewRowEventArgs) - If e.Row.RowType = DataControlRowType.DataRow Then - - 'Totales - If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then - TotalPasivoActual += e.Row.DBCampo("ImporteActual").ToString.ToDouble - TotalPasivoAnterior += e.Row.DBCampo("ImporteAnterior").ToString.ToDouble - e.Row.FCLabel("LbNombre").Font.Italic = True - - 'Cuentas - Else - e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - - 'e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString) - 'e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString) - End If - - - 'Colorea NEGATIVOS - If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then - e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red - End If - If e.Row.DBCampo("ImporteAnterior").ToString.ToDouble < 0 Then - e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red - End If - End If - End Sub - - Protected Sub GvPatrimonio_RowDataBound(sender As Object, e As GridViewRowEventArgs) - If e.Row.RowType = DataControlRowType.Header Then - If e.Row.FCLabel("LbTitulo") IsNot Nothing Then e.Row.FCLabel("LbTitulo").Text = "CAPITAL CONTABLE" - End If - - If e.Row.RowType = DataControlRowType.DataRow Then - If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Or e.Row.DBCampo("CtaMayor").ToString.ToEntero = 2 Then - TotalPatrimonioActual += e.Row.DBCampo("ImporteActual").ToString.ToDouble - TotalPatrimonioAnterior += e.Row.DBCampo("ImporteAnterior").ToString.ToDouble - e.Row.FCLabel("LbNombre").Font.Italic = True - 'e.Row.ControlStyle.BackColor = Drawing.Color.LightGray - 'e.Row.ControlStyle.ForeColor = Drawing.Color.White - 'e.Row.ControlStyle.Font.Bold = True - Else - e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - - 'e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString) - 'e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString) - End If - - If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then - e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red - End If - If e.Row.DBCampo("ImporteAnterior").ToString.ToDouble < 0 Then - e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red - End If - End If - End Sub - -#End Region - - -#End Region - - - -#Region " REPORTE MENSUAL " - Private Sub CargaDatosMensual() - 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) - Dim ObjConta As New ClsContabilidad - TipoReporte = If(TipoReporte = -1, -1, DdlTipoReporte.SelectedValue.ToEntero) - - Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString - - If ObjConta.GetBalanceGeneralMensual(DdlEjercicio.SelectedValue.ToEntero, TipoReporte, DdlSubtotales.SelectedValue.ToEntero, CveSubProyecto, UsuarioActual.CveEmpresa) Then - DtDatosMensual = ObjConta.DtResultados - Else - DtDatosMensual = Nothing - Alert("Ocurrió un error al cargar los datos del balance general mensual", TipoMensaje.MsgError) - End If - ObjConta.Dispose() - - EscondeSubtotales() - - If DtDatosMensual IsNot Nothing Then - CargaGridMensual() - End If - End Sub - Private Sub EscondeSubtotales() - - 'Esconde Trimestral - 'GvDatosMensual.Columns(4).Visible = False - 'GvDatosMensual.Columns(9).Visible = False - 'GvDatosMensual.Columns(14).Visible = False - 'GvDatosMensual.Columns(18).Visible = False - - ''Esconde Cuatrimestral - 'GvDatosMensual.Columns(6).Visible = False - 'GvDatosMensual.Columns(12).Visible = False - 'GvDatosMensual.Columns(19).Visible = False - - 'If DdlSubtotales.SelectedValue = "2" Then - ' GvDatosMensual.Columns(4).Visible = True - ' GvDatosMensual.Columns(9).Visible = True - ' GvDatosMensual.Columns(14).Visible = True - ' GvDatosMensual.Columns(18).Visible = True - 'ElseIf DdlSubtotales.SelectedValue = "3" Then - ' GvDatosMensual.Columns(6).Visible = True - ' GvDatosMensual.Columns(12).Visible = True - ' GvDatosMensual.Columns(19).Visible = True - 'End If - - End Sub - Private Sub CargaGridMensual() - 'GvDatosMensual.DataSource = DtDatosMensual - 'GvDatosMensual.DataBind() - 'UpDatosMensual.Update() - End Sub - - 'Protected Sub GvDatosMensual_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosMensual.RowDataBound - ' If e.Row.RowType = DataControlRowType.DataRow Then - - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Or e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then - ' e.Row.FCHyperLink("HLEnero").Text = "" - ' e.Row.FCHyperLink("HLFebrero").Text = "" - ' e.Row.FCHyperLink("HLMarzo").Text = "" - ' e.Row.FCHyperLink("HLAbril").Text = "" - ' e.Row.FCHyperLink("HLMayo").Text = "" - ' e.Row.FCHyperLink("HLJunio").Text = "" - ' e.Row.FCHyperLink("HLJulio").Text = "" - ' e.Row.FCHyperLink("HLAgosto").Text = "" - ' e.Row.FCHyperLink("HLSeptiembre").Text = "" - ' e.Row.FCHyperLink("HLOctubre").Text = "" - ' e.Row.FCHyperLink("HLNoviembre").Text = "" - ' e.Row.FCHyperLink("HLDiciembre").Text = "" - ' End If - - ' 'AGRUPADOR DE CUENTAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then - ' e.Row.FCLabel("LbNombre").Font.Bold = True - ' End If - - ' 'TITULO DE CUENTAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Then - ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") - ' End If - - ' 'CUENTAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 1 Then - ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 20px;") - - ' e.Row.FCHyperLink("HLEnero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLFebrero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/02/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLMarzo").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/03/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLAbril").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/04/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLMayo").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/05/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLJunio").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/06/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLJulio").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/07/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLAgosto").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/08/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLSeptiembre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("09/01/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLOctubre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/10/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLNoviembre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/11/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLDiciembre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/12/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - - ' e.Row.FCHyperLink("HLTrimestral1").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/03/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLTrimestral2").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/04/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/06/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLTrimestral3").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/07/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/09/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLTrimestral4").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/10/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/12/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - - ' e.Row.FCHyperLink("HLCuatrimestral1").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/04/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLCuatrimestral2").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/05/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/08/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - ' e.Row.FCHyperLink("HLCuatrimestral3").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/09/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/12/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) - - ' End If - - ' 'TOTALES - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then - ' e.Row.Attributes.Add("style", "border-top: 1px solid;") - ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") - ' e.Row.FCLabel("LbNombre").Font.Italic = True - ' End If - - ' 'SUMAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 6 Then - ' e.Row.FCLabel("LbNombre").Font.Bold = True - ' End If - - ' End If - 'End Sub -#End Region - - - -#Region " REPORTE ANUAL " - Private Sub CargaDatosAnual() - 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) - Dim ObjConta As New ClsContabilidad - TipoReporte = If(TipoReporte = -1, -1, DdlTipoReporte.SelectedValue.ToEntero) - - Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString - - If ObjConta.GetBalanceGeneralAnual(DdlEjercicio.SelectedValue.ToEntero, TipoReporte, UsuarioActual.CveEmpresa, CveSubProyecto) Then - DtDatos = ObjConta.DtResultados - Else - DtDatos = Nothing - Alert("Ocurrio un error al cargar los datos del balance general anual", TipoMensaje.MsgError) - End If - ObjConta.Dispose() - - Anos = (Year(NowADS()) - DdlEjercicio.SelectedValue.ToEntero) + 1 - - 'Esconde todo - 'For index = 1 To 20 - ' GvDatosAnual.Columns(index).Visible = False - 'Next - - 'For index = 1 To Anos - ' GvDatosAnual.Columns(index).Visible = True - ' GvDatosAnual.Columns(index).HeaderText = (DdlEjercicio.SelectedValue.ToEntero + index - 1).ToString - 'Next - - If DtDatos IsNot Nothing Then - 'CargaGridAnual() - End If - End Sub - - 'Private Sub CargaGridAnual() - ' GvDatosAnual.DataSource = DtDatos - ' GvDatosAnual.DataBind() - ' UpDatosAnual.Update() - 'End Sub - - 'Protected Sub GvDatosAnual_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosAnual.RowDataBound - ' If e.Row.RowType = DataControlRowType.DataRow Then - - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Or e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then - ' For index = 1 To Anos - ' e.Row.FCHyperLink("HLAno" + index.ToString).Text = "" - ' Next - ' End If - - ' 'AGRUPADOR DE CUENTAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then - ' e.Row.FCLabel("LbNombre").Font.Bold = True - ' End If - - ' 'TITULO DE CUENTAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Then - ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") - ' e.Row.FCLabel("LbNombre").Font.Italic = True - ' End If - - ' 'CUENTAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 1 Then - ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 20px;") - - ' For index = 1 To Anos - ' e.Row.FCHyperLink("HLAno" + index.ToString).NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", (DdlEjercicio.SelectedValue.ToEntero + index - 1).ToString), String.Format("31/12/{0}", (DdlEjercicio.SelectedValue.ToEntero + index - 1).ToString), TipoReporte, DdlSubproyecto.SelectedValue) - ' Next - - ' End If - - ' 'TOTALES - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then - ' e.Row.Attributes.Add("style", "border-top: 1px solid;") - ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") - ' e.Row.FCLabel("LbNombre").Font.Italic = True - ' End If - - ' 'SUMAS - ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 6 Then - ' e.Row.FCLabel("LbNombre").Font.Bold = True - ' End If - - ' End If - 'End Sub -#End Region - - - - Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) - - 'Nota: - ' 0 = Normal - ' 1 = Mensual - ' 2 = Anual - - 'If Tabs.ActiveTabIndex = 0 Then - - ' TotalActivoActual = 0 - ' TotalActivoAnterior = 0 - ' TotalPasivoActual = 0 - ' TotalPasivoAnterior = 0 - ' TotalPatrimonioActual = 0 - ' TotalPatrimonioAnterior = 0 - ' TotalPasivoPatrimonioActual = 0 - ' TotalPasivoPatrimonioAnterior = 0 - - ' CargaDatos() - - 'ElseIf Tabs.ActiveTabIndex = 1 Then - - ' CargaDatosMensual() - - 'ElseIf Tabs.ActiveTabIndex = 2 Then - - CargaDatosAnual() - - 'End If - - End Sub - - - - Protected Sub TabContainer_ActiveTabChanged(sender As Object, e As EventArgs) - - 'Nota: - ' 0 = Normal - ' 1 = Mensual - ' 2 = Anual - - 'Esconde Todo de lo variable de Filtros - TdSubTotales.Visible = False - TdPeriodo.Visible = False - - 'If Tabs.ActiveTabIndex = 0 Then - ' TdPeriodo.Visible = True - 'ElseIf Tabs.ActiveTabIndex = 1 Then - ' TdSubTotales.Visible = True - 'ElseIf Tabs.ActiveTabIndex = 2 Then - - 'End If - - UpFiltros.Update() - - BtnConsultar_Click(BtnConsultar, EventArgs.Empty) - - End Sub - - Protected Sub ImgExcel_Click(sender As Object, e As EventArgs) Handles ImgExcel.Click - ImprimirReporte("Excel") - End Sub - - Protected Sub Imprimir_click(sender As Object, e As EventArgs) Handles Imprimir.Click - 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) - Dim ObjConta As New ClsContabilidad - Dim FechaI = String.Format("01/{0}/{1}", DdlPeriodo.SelectedValue.PadLeft(2, CChar("0")), DdlEjercicio.SelectedValue) - Dim FechaF = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaI))).ToString("dd/MM/yyyy") - - 'If ChkFirma.Checked = True Then - - ' Dim Row As DataRow = DtDatos.NewRow - ' Row.Item("Nombre") = String.Format("C.P. Izelda Angulo Peraza{0} Subdirector de contabilidad", "") - ' Row.Item("Sup") = String.Format("Lic. Juan Fortino Leon Robinson{0} Director General", "") - ' Row.Item("ImporteActual") = "0" - ' Row.Item("ImporteAnterior") = "0" - ' Row.Item("Tipo") = "Firma" - ' DtDatos.Rows.Add(Row) - 'End If - Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString - If ObjConta.GetSituacionFinanciera("01/01/1000".ToDate, FechaF.ToDate, UsuarioActual.CveEmpresa, CveSubProyecto, TipoReporte) Then - DtDatos = ObjConta.DtResultados - For Each row As DataRow In DtDatos.Rows - If row("Level").ToString = "0" Then - row("Sup") = "" - Else - If row("Tipo").ToString = "A" OrElse row("Tipo").ToString = "B" OrElse row("Tipo").ToString = "C" Then - If row("Sup").ToString = "ACTIVO CIRCULANTE" OrElse row("Nombre").ToString = "ACTIVO CIRCULANTE" OrElse row("Sup").ToString = "CIRCULANTE" OrElse row("Nombre").ToString = "CIRCULANTE" Then - row("Sup") = "ACTIVO CIRCULANTE" - Else - If row("Sup").ToString = "ACTIVO NO CIRCULANTE" OrElse row("Nombre").ToString = "ACTIVO NO CIRCULANTE" OrElse row("Sup").ToString = "FIJO" OrElse row("Nombre").ToString = "FIJO" Then - row("Sup") = "ACTIVO NO CIRCULANTE" - Else - If row("Sup").ToString = "DIFERIDO" OrElse row("Nombre").ToString = "DIFERIDO" Then - row("Sup") = "DIFERIDO" - Else - row("Sup") = "" - End If - End If - End If - Else - If row("Tipo").ToString = "D" Then - If row("Sup").ToString = "PASIVO CIRCULANTE" OrElse row("Nombre").ToString = "PASIVO CIRCULANTE" OrElse row("Sup").ToString = "CIRCULANTE" OrElse row("Nombre").ToString = "CIRCULANTE" OrElse row("Sup").ToString = "PASIVO" OrElse row("Nombre").ToString = "PASIVO" OrElse row("Sup").ToString = "CORTO PLAZO" OrElse row("Nombre").ToString = "CORTO PLAZO" Then - row("Sup") = "PASIVO CIRCULANTE" - Else - If row("Sup").ToString = "PASIVO NO CIRCULANTE" OrElse row("Nombre").ToString = "PASIVO NO CIRCULANTE" OrElse row("Sup").ToString = "LARGO PLAZO" OrElse row("Nombre").ToString = "LARGO PLAZO" Then - row("Sup") = "PASIVO NO CIRCULANTE" - Else - If row("Sup").ToString = "DIFERIDO" OrElse row("Nombre").ToString = "DIFERIDO" Then - row("Sup") = "DIFERIDO" - Else - row("Sup") = "" - End If - End If - End If - Else - If row("Tipo").ToString = "F" Then ' - If row("Sup").ToString = "CAPITAL" OrElse row("Nombre").ToString = "CAPITAL" OrElse row("Sup").ToString = "CAPITAL CONTABLEE" OrElse row("Nombre").ToString = "CAPITAL CONTABLE" OrElse row("Sup").ToString = "PATRIMONIO CONTRIBUIDO" OrElse row("Nombre").ToString = "PATRIMONIO CONTRIBUIDO" Then - row("Sup") = "CAPITAL" - Else - row("Sup") = "" - End If - Else - row("Sup") = "" - End If - End If - End If - End If - Next - DtDatos.AcceptChanges() - - ImprimirReporte() - Else - DtDatos = Nothing - Alert("Ocurrio un error al cargar los datos del estado de situación financiera", TipoMensaje.MsgError) - End If - ObjConta.Dispose() - End Sub - - - Private Sub ImprimirReporte(Optional Formato As String = "PDF") - Dim FechaI = String.Format("01/{0}/{1}", DdlPeriodo.SelectedValue.PadLeft(2, CChar("0")), DdlEjercicio.SelectedValue) - Dim FechaF = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaI))).ToString("dd/MM/yyyy") - 'nombre del archivo a generar - Dim fileName As String = "BalanceGeneral" - 'ubicacion del rdlc - Dim reportpath As String = "Contabilidad/Reportes/RepBalanceGeneral.rdlc" - - 'parametros a enviar al reporte - Dim params As New List(Of ReportParameter) - params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) - Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") - params.Add(New ReportParameter("pImg", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) - params.Add(New ReportParameter("pFirma1", "")) - params.Add(New ReportParameter("pFirma2", "")) - params.Add(New ReportParameter("pFechaFin", FechaF)) - ImprimirPDF(reportpath, DtDatos, params, fileName, Formato) - End Sub - -End Class \ No newline at end of file diff --git a/RH/CatChecadores.aspx.cs b/RH/CatChecadores.aspx.cs index 7575f4543..0f7a964db 100644 --- a/RH/CatChecadores.aspx.cs +++ b/RH/CatChecadores.aspx.cs @@ -38,11 +38,13 @@ public partial class RH_CatChecadores : ClsPaginas if (ObjRH.GetChecadores(-1, UsuarioActual.CveEmpresa)) { GvDatos.DataSource = ObjRH.DtResultados; + //if (ObjRH.DtResultados.Rows.Count > 0 && GvDatos.HeaderRow.Cells != null) + //{ GvDatos.HeaderRow.Cells[1].Text = LblSubProyecto.Text; } } ObjRH.Dispose(); GvDatos.DataBind(); - GvDatos.HeaderRow.Cells[1].Text = LblSubProyecto.Text; + // if ( GvDatos.DataSource != null) { GvDatos.HeaderRow.Cells[1].Text = LblSubProyecto.Text; } } private void CargaSubProyectos() diff --git a/Scripts/Notificaciones.js b/Scripts/Notificaciones.js index ea40c5c57..b18f8a54e 100644 --- a/Scripts/Notificaciones.js +++ b/Scripts/Notificaciones.js @@ -1,39 +1,25 @@  var NotificacionesADS = function () { var VentanaConConexion = false; - - let nointentos = 0; - const maxintentos = 4; - var wNum; - const valueok = "1"; - const AdsNotificacionesReconected = "AdsNotificacionesReconected"; - const Windownumber = "ADSWindownumber"; - const AdsNotificacionesIsConnected = "AdsNotificacionesIsConnected"; - function initherramientas() { + const valueok = "1"; + function initherramientas() { if (("Notification" in window)) { if (Notification.permission !== 'denied') { Notification.requestPermission(function (permission) { // If the user accepts, let's create a notification - //if (permission === "granted") { - //} + if (permission === "granted") { + } }); } } } //-------------------------------------------------------------------- Eventos ---------------------------------------------------------------------- - var AlertaVentana = function (Titulo, Mensaje, Tipo, timeoutseconds, Opciones) { + var AlertaVentana = function (Titulo, Mensaje, Tipo, timeoutseconds,Opciones) { console.log(Mensaje); - let obj = { metodo: "AlertaVentana", titulo: Titulo, mensaje: Mensaje, timeout: timeoutseconds, tipo: Tipo, opciones: Opciones, tick: (new Date()).getTime() }; + let obj = { metodo: "AlertaVentana", titulo: Titulo, mensaje: Mensaje, timeout: timeoutseconds, tipo: Tipo, opciones: Opciones, tick: (new Date()).getTime() } let myjson = JSON.stringify(obj); localStorage.setItem("ADSNotificaciones", myjson); - execAlertaVentana(obj); - }; - function Execstring(script) { - try { - eval(script); - } catch (e) { - console.error('(SignalR) ErrorScript \'' + script + '\''); - } + execAlertaVentana(obj); } var execAlertaVentana = function (obj) { console.log(obj); @@ -56,7 +42,7 @@ var NotificacionesADS = function () { //}); let Mensaje = obj.mensaje; let titulo = obj.titulo; - let timeout = obj.timeout; + let timeout = obj.timeout; if (timeout) { timeout = timeout * 1000;//convierto a milisegundos } else { timeout = 0; } @@ -74,7 +60,7 @@ var NotificacionesADS = function () { "showMethod": "fadeIn", "hideMethod": "fadeOut" - }; + } switch (obj.tipo) { case 5: @@ -93,95 +79,70 @@ var NotificacionesADS = function () { toastr.warning(Mensaje, titulo, opciones); } } - }; + } //-------------------------------------------------------------------- EndEventos ---------------------------------------------------------------------- function closeopenConexion() { - if (VentanaConConexion) { - localStorage.removeItem(AdsNotificacionesIsConnected); - - let varreconected = localStorage.getItem(AdsNotificacionesReconected);//obtengo la variable para cambiarla y dispara el evento local change - if (varreconected === "1") { - localStorage.removeItem(AdsNotificacionesReconected); - } else { localStorage.setItem(AdsNotificacionesReconected, "1"); } - } - nointentos = maxintentos; + let varreconected = localStorage.getItem("AdsNotificacionesReconected"); + localStorage.removeItem("AdsNotificacionesIsConnected"); + if (varreconected == "1") { + localStorage.removeItem("AdsNotificacionesReconected"); + } else { localStorage.setItem("AdsNotificacionesReconected", "1"); } } function beforeunloadcloseopenConexion(e) { - closeopenConexion(); + closeopenConexion() } - function loadConection() { - VentanaConConexion = true; - localStorage.setItem(AdsNotificacionesIsConnected, valueok); - if ($.connection) { - var proxy = $.connection.notificaciones; - /*$.connection.hub.url = '/signalr';*/ - $.connection.hub.disconnected(function () { - console.log(' (SignalR) diconnected'); - signalrconectionStar(1200); - }); + function loadConection() { + // VentanaConConexion = true; + //localStorage.setItem("AdsNotificacionesIsConnected", valueok); + //if ($.connection) { + // let nointentos =0 + // var proxy = $.connection.notificaciones; + // /*$.connection.hub.url = '/signalr';*/ + // $.connection.hub.disconnected(function () { + // setTimeout(function () { nointentos = nointentos + 1; if (nointentos < 4) { $.connection.hub.start().done(function () { nointentos = 0 }); console.log('Reconected'); } }, 120000); + // }); - proxy.client.AlertaVentana = AlertaVentana; + // proxy.client.AlertaVentana = AlertaVentana; - proxy.client.Execstring = Execstring; - - signalrconectionStar(1200); + // $.connection.hub.start().done(function () { + // console.log('Bienvenido'); + // }); + //} else { + // console.error('Signal Error (no se encontro $.connection)'); + //} + //window.addEventListener("beforeunload", beforeunloadcloseopenConexion); + } + function initConnection() { + let isconnected = localStorage.getItem("AdsNotificacionesIsConnected"); + if (isconnected == valueok) { } else { - console.error('(SignalR) Error :\'no se encontro $.connection\''); - - } - window.addEventListener("beforeunload", beforeunloadcloseopenConexion); - } - function signalrconectionStar(TimeOut) { - - setTimeout(function () { - nointentos = nointentos + 1; - if (nointentos < maxintentos) { - $.connection.hub.start().done(function () { console.log('(SignalR)Bienvenido'); nointentos = 0; }) - .fail(function () { console.log(' (SignalR) no conectado (Intento:' + nointentos + ')'); signalrconectionStar(12000); }); - } - }, TimeOut); - } - function initConnection() { - let isconnected = localStorage.getItem(AdsNotificacionesIsConnected); - - - if (isconnected !== valueok) { - loadConection(); - } else { - console.log('is some there conected (' + wNum+')'); + loadConection() } } - function handlelocalstorage() { + + function handlelocalstorage() { window.addEventListener('storage', function (evt) { - if (evt.key === "ADSNotificaciones") { - /// - x = 1; + if (evt.key == "ADSNotificaciones") { } switch (evt.key + "") { - case 'ADSCloseConection': - closeopenConexion(); - $.connection.hub.stop().done(function () { - console.log('stopped'); - }); - break; case 'AdsNotificacionesReconected': if (!VentanaConConexion) { - setTimeout(function () { initConnection(); }, (wNum * 200)); + setTimeout(function () { initConnection() }, 5000) } else { - window.removeEventListener("beforeunload", beforeunloadcloseopenConexion); + window.removeEventListener("beforeunload", beforeunloadcloseopenConexion) } break; case 'ADSNotificaciones': try { let obj = JSON.parse(evt.newValue); - if (obj && obj.metodo === "AlertaVentana") { + if (obj && obj.metodo == "AlertaVentana") { execAlertaVentana(obj); } } catch (e) { - console.error(e); + console.error(e) } break; } @@ -191,11 +152,6 @@ var NotificacionesADS = function () { return { init: function () { - - wNum = parseInt(localStorage.getItem(Windownumber)); - if (isNaN(wNum) || (wNum > 50)) { wNum = 12; } - wNum = wNum + 1; - localStorage.setItem(Windownumber, wNum); initherramientas(); handlelocalstorage(); initConnection(); diff --git a/Scripts/jquery-3.7.1.intellisense.js b/Scripts/jquery-3.7.1.intellisense.js new file mode 100644 index 000000000..a88b6c6e3 --- /dev/null +++ b/Scripts/jquery-3.7.1.intellisense.js @@ -0,0 +1,2670 @@ +intellisense.annotate(jQuery, { + 'ajax': function() { + /// + /// Perform an asynchronous HTTP (Ajax) request. + /// A string containing the URL to which the request is sent. + /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. + /// + /// + /// + /// Perform an asynchronous HTTP (Ajax) request. + /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). + /// + /// + }, + 'ajaxPrefilter': function() { + /// + /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). + /// An optional string containing one or more space-separated dataTypes + /// A handler to set default values for future Ajax requests. + /// + }, + 'ajaxSetup': function() { + /// + /// Set default values for future Ajax requests. Its use is not recommended. + /// A set of key/value pairs that configure the default Ajax request. All options are optional. + /// + }, + 'ajaxTransport': function() { + /// + /// Creates an object that handles the actual transmission of Ajax data. + /// A string identifying the data type to use + /// A handler to return the new transport object to use with the data type provided in the first argument. + /// + }, + 'boxModel': function() { + /// Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model. + /// + }, + 'browser': function() { + /// Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead. + /// + }, + 'browser.version': function() { + /// The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. + /// + }, + 'Callbacks': function() { + /// + /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. + /// An optional list of space-separated flags that change how the callback list behaves. + /// + /// + }, + 'contains': function() { + /// + /// Check to see if a DOM element is a descendant of another DOM element. + /// The DOM element that may contain the other element. + /// The DOM element that may be contained by (a descendant of) the other element. + /// + /// + }, + 'cssHooks': function() { + /// Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties. + /// + }, + 'data': function() { + /// + /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// The DOM element to query for the data. + /// Name of the data stored. + /// + /// + /// + /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// The DOM element to query for the data. + /// + /// + }, + 'Deferred': function() { + /// + /// A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function. + /// A function that is called just before the constructor returns. + /// + /// + }, + 'dequeue': function() { + /// + /// Execute the next function on the queue for the matched element. + /// A DOM element from which to remove and execute a queued function. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + }, + 'each': function() { + /// + /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. + /// The object or array to iterate over. + /// The function that will be executed on every object. + /// + /// + }, + 'error': function() { + /// + /// Takes a string and throws an exception containing it. + /// The message to send out. + /// + }, + 'extend': function() { + /// + /// Merge the contents of two or more objects together into the first object. + /// An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument. + /// An object containing additional properties to merge in. + /// Additional objects containing properties to merge in. + /// + /// + /// + /// Merge the contents of two or more objects together into the first object. + /// If true, the merge becomes recursive (aka. deep copy). + /// The object to extend. It will receive the new properties. + /// An object containing additional properties to merge in. + /// Additional objects containing properties to merge in. + /// + /// + }, + 'fn.extend': function() { + /// + /// Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods. + /// An object to merge onto the jQuery prototype. + /// + /// + }, + 'get': function() { + /// + /// Load data from the server using a HTTP GET request. + /// A string containing the URL to which the request is sent. + /// A plain object or string that is sent to the server with the request. + /// A callback function that is executed if the request succeeds. + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). + /// + /// + }, + 'getJSON': function() { + /// + /// Load JSON-encoded data from the server using a GET HTTP request. + /// A string containing the URL to which the request is sent. + /// A plain object or string that is sent to the server with the request. + /// A callback function that is executed if the request succeeds. + /// + /// + }, + 'getScript': function() { + /// + /// Load a JavaScript file from the server using a GET HTTP request, then execute it. + /// A string containing the URL to which the request is sent. + /// A callback function that is executed if the request succeeds. + /// + /// + }, + 'globalEval': function() { + /// + /// Execute some JavaScript code globally. + /// The JavaScript code to execute. + /// + }, + 'grep': function() { + /// + /// Finds the elements of an array which satisfy a filter function. The original array is not affected. + /// The array to search through. + /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. + /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. + /// + /// + }, + 'hasData': function() { + /// + /// Determine whether an element has any jQuery data associated with it. + /// A DOM element to be checked for data. + /// + /// + }, + 'holdReady': function() { + /// + /// Holds or releases the execution of jQuery's ready event. + /// Indicates whether the ready hold is being requested or released + /// + }, + 'inArray': function() { + /// + /// Search for a specified value within an array and return its index (or -1 if not found). + /// The value to search for. + /// An array through which to search. + /// The index of the array at which to begin the search. The default is 0, which will search the whole array. + /// + /// + }, + 'isArray': function() { + /// + /// Determine whether the argument is an array. + /// Object to test whether or not it is an array. + /// + /// + }, + 'isEmptyObject': function() { + /// + /// Check to see if an object is empty (contains no enumerable properties). + /// The object that will be checked to see if it's empty. + /// + /// + }, + 'isFunction': function() { + /// + /// Determine if the argument passed is a Javascript function object. + /// Object to test whether or not it is a function. + /// + /// + }, + 'isNumeric': function() { + /// + /// Determines whether its argument is a number. + /// The value to be tested. + /// + /// + }, + 'isPlainObject': function() { + /// + /// Check to see if an object is a plain object (created using "{}" or "new Object"). + /// The object that will be checked to see if it's a plain object. + /// + /// + }, + 'isWindow': function() { + /// + /// Determine whether the argument is a window. + /// Object to test whether or not it is a window. + /// + /// + }, + 'isXMLDoc': function() { + /// + /// Check to see if a DOM node is within an XML document (or is an XML document). + /// The DOM node that will be checked to see if it's in an XML document. + /// + /// + }, + 'makeArray': function() { + /// + /// Convert an array-like object into a true JavaScript array. + /// Any object to turn into a native Array. + /// + /// + }, + 'map': function() { + /// + /// Translate all items in an array or object to new array of items. + /// The Array to translate. + /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. + /// + /// + /// + /// Translate all items in an array or object to new array of items. + /// The Array or Object to translate. + /// The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object. + /// + /// + }, + 'merge': function() { + /// + /// Merge the contents of two arrays together into the first array. + /// The first array to merge, the elements of second added. + /// The second array to merge into the first, unaltered. + /// + /// + }, + 'noConflict': function() { + /// + /// Relinquish jQuery's control of the $ variable. + /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). + /// + /// + }, + 'noop': function() { + /// An empty function. + }, + 'now': function() { + /// Return a number representing the current time. + /// + }, + 'param': function() { + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// An array or object to serialize. + /// + /// + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// An array or object to serialize. + /// A Boolean indicating whether to perform a traditional "shallow" serialization. + /// + /// + }, + 'parseHTML': function() { + /// + /// Parses a string into an array of DOM nodes. + /// HTML string to be parsed + /// Document element to serve as the context in which the HTML fragment will be created + /// A Boolean indicating whether to include scripts passed in the HTML string + /// + /// + }, + 'parseJSON': function() { + /// + /// Takes a well-formed JSON string and returns the resulting JavaScript object. + /// The JSON string to parse. + /// + /// + }, + 'parseXML': function() { + /// + /// Parses a string into an XML document. + /// a well-formed XML string to be parsed + /// + /// + }, + 'post': function() { + /// + /// Load data from the server using a HTTP POST request. + /// A string containing the URL to which the request is sent. + /// A plain object or string that is sent to the server with the request. + /// A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case. + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). + /// + /// + }, + 'proxy': function() { + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The function whose context will be changed. + /// The object to which the context (this) of the function should be set. + /// + /// + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The object to which the context of the function should be set. + /// The name of the function whose context will be changed (should be a property of the context object). + /// + /// + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The function whose context will be changed. + /// The object to which the context (this) of the function should be set. + /// Any number of arguments to be passed to the function referenced in the function argument. + /// + /// + /// + /// Takes a function and returns a new one that will always have a particular context. + /// The object to which the context of the function should be set. + /// The name of the function whose context will be changed (should be a property of the context object). + /// Any number of arguments to be passed to the function named in the name argument. + /// + /// + }, + 'queue': function() { + /// + /// Manipulate the queue of functions to be executed on the matched element. + /// A DOM element where the array of queued functions is attached. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// An array of functions to replace the current queue contents. + /// + /// + /// + /// Manipulate the queue of functions to be executed on the matched element. + /// A DOM element on which to add a queued function. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// The new function to add to the queue. + /// + /// + }, + 'removeData': function() { + /// + /// Remove a previously-stored piece of data. + /// A DOM element from which to remove data. + /// A string naming the piece of data to remove. + /// + /// + }, + 'sub': function() { + /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. + /// + }, + 'support': function() { + /// A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance. + /// + }, + 'trim': function() { + /// + /// Remove the whitespace from the beginning and end of a string. + /// The string to trim. + /// + /// + }, + 'type': function() { + /// + /// Determine the internal JavaScript [[Class]] of an object. + /// Object to get the internal JavaScript [[Class]] of. + /// + /// + }, + 'unique': function() { + /// + /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. + /// The Array of DOM elements. + /// + /// + }, + 'when': function() { + /// + /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. + /// One or more Deferred objects, or plain JavaScript objects. + /// + /// + }, +}); + +var _1228819969 = jQuery.Callbacks; +jQuery.Callbacks = function(flags) { +var _object = _1228819969(flags); +intellisense.annotate(_object, { + 'add': function() { + /// + /// Add a callback or a collection of callbacks to a callback list. + /// A function, or array of functions, that are to be added to the callback list. + /// + /// + }, + 'disable': function() { + /// Disable a callback list from doing anything more. + /// + }, + 'disabled': function() { + /// Determine if the callbacks list has been disabled. + /// + }, + 'empty': function() { + /// Remove all of the callbacks from a list. + /// + }, + 'fire': function() { + /// + /// Call all of the callbacks with the given arguments + /// The argument or list of arguments to pass back to the callback list. + /// + /// + }, + 'fired': function() { + /// Determine if the callbacks have already been called at least once. + /// + }, + 'fireWith': function() { + /// + /// Call all callbacks in a list with the given context and arguments. + /// A reference to the context in which the callbacks in the list should be fired. + /// An argument, or array of arguments, to pass to the callbacks in the list. + /// + /// + }, + 'has': function() { + /// + /// Determine whether a supplied callback is in a list + /// The callback to search for. + /// + /// + }, + 'lock': function() { + /// Lock a callback list in its current state. + /// + }, + 'locked': function() { + /// Determine if the callbacks list has been locked. + /// + }, + 'remove': function() { + /// + /// Remove a callback or a collection of callbacks from a callback list. + /// A function, or array of functions, that are to be removed from the callback list. + /// + /// + }, +}); + +return _object; +}; +intellisense.redirectDefinition(jQuery.Callbacks, _1228819969); + +var _731531622 = jQuery.Deferred; +jQuery.Deferred = function(func) { +var _object = _731531622(func); +intellisense.annotate(_object, { + 'always': function() { + /// + /// Add handlers to be called when the Deferred object is either resolved or rejected. + /// A function, or array of functions, that is called when the Deferred is resolved or rejected. + /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected. + /// + /// + }, + 'done': function() { + /// + /// Add handlers to be called when the Deferred object is resolved. + /// A function, or array of functions, that are called when the Deferred is resolved. + /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved. + /// + /// + }, + 'fail': function() { + /// + /// Add handlers to be called when the Deferred object is rejected. + /// A function, or array of functions, that are called when the Deferred is rejected. + /// Optional additional functions, or arrays of functions, that are called when the Deferred is rejected. + /// + /// + }, + 'isRejected': function() { + /// Determine whether a Deferred object has been rejected. + /// + }, + 'isResolved': function() { + /// Determine whether a Deferred object has been resolved. + /// + }, + 'notify': function() { + /// + /// Call the progressCallbacks on a Deferred object with the given args. + /// Optional arguments that are passed to the progressCallbacks. + /// + /// + }, + 'notifyWith': function() { + /// + /// Call the progressCallbacks on a Deferred object with the given context and args. + /// Context passed to the progressCallbacks as the this object. + /// Optional arguments that are passed to the progressCallbacks. + /// + /// + }, + 'pipe': function() { + /// + /// Utility method to filter and/or chain Deferreds. + /// An optional function that is called when the Deferred is resolved. + /// An optional function that is called when the Deferred is rejected. + /// + /// + /// + /// Utility method to filter and/or chain Deferreds. + /// An optional function that is called when the Deferred is resolved. + /// An optional function that is called when the Deferred is rejected. + /// An optional function that is called when progress notifications are sent to the Deferred. + /// + /// + }, + 'progress': function() { + /// + /// Add handlers to be called when the Deferred object generates progress notifications. + /// A function, or array of functions, to be called when the Deferred generates progress notifications. + /// + /// + }, + 'promise': function() { + /// + /// Return a Deferred's Promise object. + /// Object onto which the promise methods have to be attached + /// + /// + }, + 'reject': function() { + /// + /// Reject a Deferred object and call any failCallbacks with the given args. + /// Optional arguments that are passed to the failCallbacks. + /// + /// + }, + 'rejectWith': function() { + /// + /// Reject a Deferred object and call any failCallbacks with the given context and args. + /// Context passed to the failCallbacks as the this object. + /// An optional array of arguments that are passed to the failCallbacks. + /// + /// + }, + 'resolve': function() { + /// + /// Resolve a Deferred object and call any doneCallbacks with the given args. + /// Optional arguments that are passed to the doneCallbacks. + /// + /// + }, + 'resolveWith': function() { + /// + /// Resolve a Deferred object and call any doneCallbacks with the given context and args. + /// Context passed to the doneCallbacks as the this object. + /// An optional array of arguments that are passed to the doneCallbacks. + /// + /// + }, + 'state': function() { + /// Determine the current state of a Deferred object. + /// + }, + 'then': function() { + /// + /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. + /// A function that is called when the Deferred is resolved. + /// An optional function that is called when the Deferred is rejected. + /// An optional function that is called when progress notifications are sent to the Deferred. + /// + /// + /// + /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. + /// A function, or array of functions, called when the Deferred is resolved. + /// A function, or array of functions, called when the Deferred is rejected. + /// + /// + /// + /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. + /// A function, or array of functions, called when the Deferred is resolved. + /// A function, or array of functions, called when the Deferred is rejected. + /// A function, or array of functions, called when the Deferred notifies progress. + /// + /// + }, +}); + +return _object; +}; +intellisense.redirectDefinition(jQuery.Callbacks, _731531622); + +intellisense.annotate(jQuery.Event.prototype, { + 'currentTarget': function() { + /// The current DOM element within the event bubbling phase. + /// + }, + 'data': function() { + /// An optional object of data passed to an event method when the current executing handler is bound. + /// + }, + 'delegateTarget': function() { + /// The element where the currently-called jQuery event handler was attached. + /// + }, + 'isDefaultPrevented': function() { + /// Returns whether event.preventDefault() was ever called on this event object. + /// + }, + 'isImmediatePropagationStopped': function() { + /// Returns whether event.stopImmediatePropagation() was ever called on this event object. + /// + }, + 'isPropagationStopped': function() { + /// Returns whether event.stopPropagation() was ever called on this event object. + /// + }, + 'metaKey': function() { + /// Indicates whether the META key was pressed when the event fired. + /// + }, + 'namespace': function() { + /// The namespace specified when the event was triggered. + /// + }, + 'pageX': function() { + /// The mouse position relative to the left edge of the document. + /// + }, + 'pageY': function() { + /// The mouse position relative to the top edge of the document. + /// + }, + 'preventDefault': function() { + /// If this method is called, the default action of the event will not be triggered. + }, + 'relatedTarget': function() { + /// The other DOM element involved in the event, if any. + /// + }, + 'result': function() { + /// The last value returned by an event handler that was triggered by this event, unless the value was undefined. + /// + }, + 'stopImmediatePropagation': function() { + /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. + }, + 'stopPropagation': function() { + /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. + }, + 'target': function() { + /// The DOM element that initiated the event. + /// + }, + 'timeStamp': function() { + /// The difference in milliseconds between the time the browser created the event and January 1, 1970. + /// + }, + 'type': function() { + /// Describes the nature of the event. + /// + }, + 'which': function() { + /// For key or mouse events, this property indicates the specific key or button that was pressed. + /// + }, +}); + +intellisense.annotate(jQuery.fn, { + 'add': function() { + /// + /// Add elements to the set of matched elements. + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// One or more elements to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// An HTML fragment to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// An existing jQuery object to add to the set of matched elements. + /// + /// + /// + /// Add elements to the set of matched elements. + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. + /// + /// + }, + 'addBack': function() { + /// + /// Add the previous set of elements on the stack to the current set, optionally filtered by a selector. + /// A string containing a selector expression to match the current set of elements against. + /// + /// + }, + 'addClass': function() { + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// One or more space-separated classes to be added to the class attribute of each matched element. + /// + /// + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'after': function() { + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, + 'ajaxComplete': function() { + /// + /// Register a handler to be called when Ajax requests complete. This is an AjaxEvent. + /// The function to be invoked. + /// + /// + }, + 'ajaxError': function() { + /// + /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxSend': function() { + /// + /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxStart': function() { + /// + /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxStop': function() { + /// + /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'ajaxSuccess': function() { + /// + /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. + /// The function to be invoked. + /// + /// + }, + 'all': function() { + /// Selects all elements. + }, + 'andSelf': function() { + /// Add the previous set of elements on the stack to the current set. + /// + }, + 'animate': function() { + /// + /// Perform a custom animation of a set of CSS properties. + /// An object of CSS properties and values that the animation will move toward. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + /// + /// Perform a custom animation of a set of CSS properties. + /// An object of CSS properties and values that the animation will move toward. + /// A map of additional options to pass to the method. + /// + /// + }, + 'animated': function() { + /// Select all elements that are in the progress of an animation at the time the selector is run. + }, + 'append': function() { + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'appendTo': function() { + /// + /// Insert every element in the set of matched elements to the end of the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. + /// + /// + }, + 'attr': function() { + /// + /// Set one or more attributes for the set of matched elements. + /// The name of the attribute to set. + /// A value to set for the attribute. + /// + /// + /// + /// Set one or more attributes for the set of matched elements. + /// An object of attribute-value pairs to set. + /// + /// + /// + /// Set one or more attributes for the set of matched elements. + /// The name of the attribute to set. + /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments. + /// + /// + }, + 'attributeContains': function() { + /// + /// Selects elements that have the specified attribute with a value containing the a given substring. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeContainsPrefix': function() { + /// + /// Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-). + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeContainsWord': function() { + /// + /// Selects elements that have the specified attribute with a value containing a given word, delimited by spaces. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeEndsWith': function() { + /// + /// Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeEquals': function() { + /// + /// Selects elements that have the specified attribute with a value exactly equal to a certain value. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeHas': function() { + /// + /// Selects elements that have the specified attribute, with any value. + /// An attribute name. + /// + }, + 'attributeMultiple': function() { + /// + /// Matches elements that match all of the specified attribute filters. + /// An attribute filter. + /// Another attribute filter, reducing the selection even more + /// As many more attribute filters as necessary + /// + }, + 'attributeNotEqual': function() { + /// + /// Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'attributeStartsWith': function() { + /// + /// Selects elements that have the specified attribute with a value beginning exactly with a given string. + /// An attribute name. + /// An attribute value. Can be either an unquoted single word or a quoted string. + /// + }, + 'before': function() { + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, + 'bind': function() { + /// + /// Attach a handler to an event for the elements. + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Attach a handler to an event for the elements. + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// An object containing data that will be passed to the event handler. + /// Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true. + /// + /// + /// + /// Attach a handler to an event for the elements. + /// An object containing one or more DOM event types and functions to execute for them. + /// + /// + }, + 'blur': function() { + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'button': function() { + /// Selects all button elements and elements of type button. + }, + 'change': function() { + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'checkbox': function() { + /// Selects all elements of type checkbox. + }, + 'checked': function() { + /// Matches all elements that are checked or selected. + }, + 'child': function() { + /// + /// Selects all direct child elements specified by "child" of elements specified by "parent". + /// Any valid selector. + /// A selector to filter the child elements. + /// + }, + 'children': function() { + /// + /// Get the children of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'class': function() { + /// + /// Selects all elements with the given class. + /// A class to search for. An element can have multiple classes; only one of them must match. + /// + }, + 'clearQueue': function() { + /// + /// Remove from the queue all items that have not yet been run. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + }, + 'click': function() { + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'clone': function() { + /// + /// Create a deep copy of the set of matched elements. + /// A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well. + /// + /// + /// + /// Create a deep copy of the set of matched elements. + /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. + /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). + /// + /// + }, + 'closest': function() { + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// A string containing a selector expression to match elements against. + /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. + /// + /// + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// A jQuery object to match elements against. + /// + /// + /// + /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + /// An element to match elements against. + /// + /// + }, + 'contains': function() { + /// + /// Select all elements that contain the specified text. + /// A string of text to look for. It's case sensitive. + /// + }, + 'contents': function() { + /// Get the children of each element in the set of matched elements, including text and comment nodes. + /// + }, + 'context': function() { + /// The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. + /// + }, + 'css': function() { + /// + /// Set one or more CSS properties for the set of matched elements. + /// A CSS property name. + /// A value to set for the property. + /// + /// + /// + /// Set one or more CSS properties for the set of matched elements. + /// A CSS property name. + /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. + /// + /// + /// + /// Set one or more CSS properties for the set of matched elements. + /// An object of property-value pairs to set. + /// + /// + }, + 'data': function() { + /// + /// Store arbitrary data associated with the matched elements. + /// A string naming the piece of data to set. + /// The new data value; it can be any Javascript type including Array or Object. + /// + /// + /// + /// Store arbitrary data associated with the matched elements. + /// An object of key-value pairs of data to update. + /// + /// + }, + 'dblclick': function() { + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'delay': function() { + /// + /// Set a timer to delay execution of subsequent items in the queue. + /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + }, + 'delegate': function() { + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// A selector to filter the elements that trigger the event. + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// A selector to filter the elements that trigger the event. + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// A selector to filter the elements that trigger the event. + /// A plain object of one or more event types and functions to execute for them. + /// + /// + }, + 'dequeue': function() { + /// + /// Execute the next function on the queue for the matched elements. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + }, + 'descendant': function() { + /// + /// Selects all elements that are descendants of a given ancestor. + /// Any valid selector. + /// A selector to filter the descendant elements. + /// + }, + 'detach': function() { + /// + /// Remove the set of matched elements from the DOM. + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + }, + 'die': function() { + /// + /// Remove event handlers previously attached using .live() from the elements. + /// A string containing a JavaScript event type, such as click or keydown. + /// The function that is no longer to be executed. + /// + /// + /// + /// Remove event handlers previously attached using .live() from the elements. + /// A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed. + /// + /// + }, + 'disabled': function() { + /// Selects all elements that are disabled. + }, + 'each': function() { + /// + /// Iterate over a jQuery object, executing a function for each matched element. + /// A function to execute for each matched element. + /// + /// + }, + 'element': function() { + /// + /// Selects all elements with the given tag name. + /// An element to search for. Refers to the tagName of DOM nodes. + /// + }, + 'empty': function() { + /// Select all elements that have no children (including text nodes). + }, + 'enabled': function() { + /// Selects all elements that are enabled. + }, + 'end': function() { + /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. + /// + }, + 'eq': function() { + /// + /// Select the element at index n within the matched set. + /// Zero-based index of the element to match. + /// + /// + /// Select the element at index n within the matched set. + /// Zero-based index of the element to match, counting backwards from the last element. + /// + }, + 'error': function() { + /// + /// Bind an event handler to the "error" JavaScript event. + /// A function to execute when the event is triggered. + /// + /// + /// + /// Bind an event handler to the "error" JavaScript event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'even': function() { + /// Selects even elements, zero-indexed. See also odd. + }, + 'fadeIn': function() { + /// + /// Display the matched elements by fading them to opaque. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display the matched elements by fading them to opaque. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display the matched elements by fading them to opaque. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'fadeOut': function() { + /// + /// Hide the matched elements by fading them to transparent. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Hide the matched elements by fading them to transparent. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Hide the matched elements by fading them to transparent. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'fadeTo': function() { + /// + /// Adjust the opacity of the matched elements. + /// A string or number determining how long the animation will run. + /// A number between 0 and 1 denoting the target opacity. + /// A function to call once the animation is complete. + /// + /// + /// + /// Adjust the opacity of the matched elements. + /// A string or number determining how long the animation will run. + /// A number between 0 and 1 denoting the target opacity. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'fadeToggle': function() { + /// + /// Display or hide the matched elements by animating their opacity. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements by animating their opacity. + /// A map of additional options to pass to the method. + /// + /// + }, + 'file': function() { + /// Selects all elements of type file. + }, + 'filter': function() { + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// A string containing a selector expression to match the current set of elements against. + /// + /// + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// A function used as a test for each element in the set. this is the current DOM element. + /// + /// + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// An element to match the current set of elements against. + /// + /// + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// An existing jQuery object to match the current set of elements against. + /// + /// + }, + 'find': function() { + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// A jQuery object to match elements against. + /// + /// + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// An element to match elements against. + /// + /// + }, + 'finish': function() { + /// + /// Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements. + /// The name of the queue in which to stop animations. + /// + /// + }, + 'first': function() { + /// Selects the first matched element. + }, + 'first-child': function() { + /// Selects all elements that are the first child of their parent. + }, + 'first-of-type': function() { + /// Selects all elements that are the first among siblings of the same element name. + }, + 'focus': function() { + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'focusin': function() { + /// + /// Bind an event handler to the "focusin" event. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "focusin" event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'focusout': function() { + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'get': function() { + /// + /// Retrieve one of the DOM elements matched by the jQuery object. + /// A zero-based integer indicating which element to retrieve. + /// + /// + }, + 'gt': function() { + /// + /// Select all elements at an index greater than index within the matched set. + /// Zero-based index. + /// + /// + /// Select all elements at an index greater than index within the matched set. + /// Zero-based index, counting backwards from the last element. + /// + }, + 'has': function() { + /// + /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. + /// A DOM element to match elements against. + /// + /// + }, + 'hasClass': function() { + /// + /// Determine whether any of the matched elements are assigned the given class. + /// The class name to search for. + /// + /// + }, + 'header': function() { + /// Selects all elements that are headers, like h1, h2, h3 and so on. + }, + 'height': function() { + /// + /// Set the CSS height of every matched element. + /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). + /// + /// + /// + /// Set the CSS height of every matched element. + /// A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'hidden': function() { + /// Selects all elements that are hidden. + }, + 'hide': function() { + /// + /// Hide the matched elements. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Hide the matched elements. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Hide the matched elements. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'hover': function() { + /// + /// Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. + /// A function to execute when the mouse pointer enters the element. + /// A function to execute when the mouse pointer leaves the element. + /// + /// + }, + 'html': function() { + /// + /// Set the HTML contents of each element in the set of matched elements. + /// A string of HTML to set as the content of each matched element. + /// + /// + /// + /// Set the HTML contents of each element in the set of matched elements. + /// A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set. + /// + /// + }, + 'id': function() { + /// + /// Selects a single element with the given id attribute. + /// An ID to search for, specified via the id attribute of an element. + /// + }, + 'image': function() { + /// Selects all elements of type image. + }, + 'index': function() { + /// + /// Search for a given element from among the matched elements. + /// A selector representing a jQuery collection in which to look for an element. + /// + /// + /// + /// Search for a given element from among the matched elements. + /// The DOM element or first element within the jQuery object to look for. + /// + /// + }, + 'init': function() { + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A string containing a selector expression + /// A DOM Element, Document, or jQuery to use as context + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A DOM element to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An array containing a set of DOM elements to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A plain object to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An existing jQuery object to clone. + /// + /// + }, + 'innerHeight': function() { + /// Get the current computed height for the first element in the set of matched elements, including padding but not border. + /// + }, + 'innerWidth': function() { + /// Get the current computed width for the first element in the set of matched elements, including padding but not border. + /// + }, + 'input': function() { + /// Selects all input, textarea, select and button elements. + }, + 'insertAfter': function() { + /// + /// Insert every element in the set of matched elements after the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. + /// + /// + }, + 'insertBefore': function() { + /// + /// Insert every element in the set of matched elements before the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. + /// + /// + }, + 'is': function() { + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element. + /// + /// + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// An existing jQuery object to match the current set of elements against. + /// + /// + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// An element to match the current set of elements against. + /// + /// + }, + 'jquery': function() { + /// A string containing the jQuery version number. + /// + }, + 'keydown': function() { + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'keypress': function() { + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'keyup': function() { + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'lang': function() { + /// + /// Selects all elements of the specified language. + /// A language code. + /// + }, + 'last': function() { + /// Selects the last matched element. + }, + 'last-child': function() { + /// Selects all elements that are the last child of their parent. + }, + 'last-of-type': function() { + /// Selects all elements that are the last among siblings of the same element name. + }, + 'length': function() { + /// The number of elements in the jQuery object. + /// + }, + 'live': function() { + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// A plain object of one or more JavaScript event types and functions to execute for them. + /// + /// + }, + 'load': function() { + /// + /// Bind an event handler to the "load" JavaScript event. + /// A function to execute when the event is triggered. + /// + /// + /// + /// Bind an event handler to the "load" JavaScript event. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'lt': function() { + /// + /// Select all elements at an index less than index within the matched set. + /// Zero-based index. + /// + /// + /// Select all elements at an index less than index within the matched set. + /// Zero-based index, counting backwards from the last element. + /// + }, + 'map': function() { + /// + /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. + /// A function object that will be invoked for each element in the current set. + /// + /// + }, + 'mousedown': function() { + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseenter': function() { + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseleave': function() { + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mousemove': function() { + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseout': function() { + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseover': function() { + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'mouseup': function() { + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'multiple': function() { + /// + /// Selects the combined results of all the specified selectors. + /// Any valid selector. + /// Another valid selector. + /// As many more valid selectors as you like. + /// + }, + 'next': function() { + /// + /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'next adjacent': function() { + /// + /// Selects all next elements matching "next" that are immediately preceded by a sibling "prev". + /// Any valid selector. + /// A selector to match the element that is next to the first selector. + /// + }, + 'next siblings': function() { + /// + /// Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector. + /// Any valid selector. + /// A selector to filter elements that are the following siblings of the first selector. + /// + }, + 'nextAll': function() { + /// + /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'nextUntil': function() { + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// A string containing a selector expression to indicate where to stop matching following sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// A DOM node or jQuery object indicating where to stop matching following sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'not': function() { + /// + /// Remove elements from the set of matched elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Remove elements from the set of matched elements. + /// One or more DOM elements to remove from the matched set. + /// + /// + /// + /// Remove elements from the set of matched elements. + /// A function used as a test for each element in the set. this is the current DOM element. + /// + /// + /// + /// Remove elements from the set of matched elements. + /// An existing jQuery object to match the current set of elements against. + /// + /// + }, + 'nth-child': function() { + /// + /// Selects all elements that are the nth-child of their parent. + /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) ) + /// + }, + 'nth-last-child': function() { + /// + /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. + /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) ) + /// + }, + 'nth-last-of-type': function() { + /// + /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. + /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) ) + /// + }, + 'nth-of-type': function() { + /// + /// Selects all elements that are the nth child of their parent in relation to siblings with the same element name. + /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) ) + /// + }, + 'odd': function() { + /// Selects odd elements, zero-indexed. See also even. + }, + 'off': function() { + /// + /// Remove an event handler. + /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// A handler function previously attached for the event(s), or the special value false. + /// + /// + /// + /// Remove an event handler. + /// An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s). + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// + /// + }, + 'offset': function() { + /// + /// Set the current coordinates of every element in the set of matched elements, relative to the document. + /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. + /// + /// + /// + /// Set the current coordinates of every element in the set of matched elements, relative to the document. + /// A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties. + /// + /// + }, + 'offsetParent': function() { + /// Get the closest ancestor element that is positioned. + /// + }, + 'on': function() { + /// + /// Attach an event handler function for one or more events to the selected elements. + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event is triggered. + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + /// + /// Attach an event handler function for one or more events to the selected elements. + /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). + /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event occurs. + /// + /// + }, + 'one': function() { + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names. + /// An object containing data that will be passed to the event handler. + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event is triggered. + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). + /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. + /// Data to be passed to the handler in event.data when an event occurs. + /// + /// + }, + 'only-child': function() { + /// Selects all elements that are the only child of their parent. + }, + 'only-of-type': function() { + /// Selects all elements that have no siblings with the same element name. + }, + 'outerHeight': function() { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + }, + 'outerWidth': function() { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding and border. + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + }, + 'parent': function() { + /// + /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'parents': function() { + /// + /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'parentsUntil': function() { + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A string containing a selector expression to indicate where to stop matching ancestor elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A DOM node or jQuery object indicating where to stop matching ancestor elements. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'password': function() { + /// Selects all elements of type password. + }, + 'position': function() { + /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. + /// + }, + 'prepend': function() { + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. + /// + /// + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'prependTo': function() { + /// + /// Insert every element in the set of matched elements to the beginning of the target. + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. + /// + /// + }, + 'prev': function() { + /// + /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'prevAll': function() { + /// + /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'prevUntil': function() { + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// A DOM node or jQuery object indicating where to stop matching preceding sibling elements. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'promise': function() { + /// + /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. + /// The type of queue that needs to be observed. + /// Object onto which the promise methods have to be attached + /// + /// + }, + 'prop': function() { + /// + /// Set one or more properties for the set of matched elements. + /// The name of the property to set. + /// A value to set for the property. + /// + /// + /// + /// Set one or more properties for the set of matched elements. + /// An object of property-value pairs to set. + /// + /// + /// + /// Set one or more properties for the set of matched elements. + /// The name of the property to set. + /// A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element. + /// + /// + }, + 'pushStack': function() { + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// An array of elements to push onto the stack and make into a new jQuery object. + /// + /// + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// An array of elements to push onto the stack and make into a new jQuery object. + /// The name of a jQuery method that generated the array of elements. + /// The arguments that were passed in to the jQuery method (for serialization). + /// + /// + }, + 'queue': function() { + /// + /// Manipulate the queue of functions to be executed, once for each matched element. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// An array of functions to replace the current queue contents. + /// + /// + /// + /// Manipulate the queue of functions to be executed, once for each matched element. + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// The new function to add to the queue, with a function to call that will dequeue the next item. + /// + /// + }, + 'radio': function() { + /// Selects all elements of type radio. + }, + 'ready': function() { + /// + /// Specify a function to execute when the DOM is fully loaded. + /// A function to execute after the DOM is ready. + /// + /// + }, + 'remove': function() { + /// + /// Remove the set of matched elements from the DOM. + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + }, + 'removeAttr': function() { + /// + /// Remove an attribute from each element in the set of matched elements. + /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. + /// + /// + }, + 'removeClass': function() { + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// One or more space-separated classes to be removed from the class attribute of each matched element. + /// + /// + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments. + /// + /// + }, + 'removeData': function() { + /// + /// Remove a previously-stored piece of data. + /// A string naming the piece of data to delete. + /// + /// + /// + /// Remove a previously-stored piece of data. + /// An array or space-separated string naming the pieces of data to delete. + /// + /// + }, + 'removeProp': function() { + /// + /// Remove a property for the set of matched elements. + /// The name of the property to remove. + /// + /// + }, + 'replaceAll': function() { + /// + /// Replace each target element with the set of matched elements. + /// A selector string, jQuery object, or DOM element reference indicating which element(s) to replace. + /// + /// + }, + 'replaceWith': function() { + /// + /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. + /// The content to insert. May be an HTML string, DOM element, or jQuery object. + /// + /// + /// + /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. + /// A function that returns content with which to replace the set of matched elements. + /// + /// + }, + 'reset': function() { + /// Selects all elements of type reset. + }, + 'resize': function() { + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'root': function() { + /// Selects the element that is the root of the document. + }, + 'scroll': function() { + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'scrollLeft': function() { + /// + /// Set the current horizontal position of the scroll bar for each of the set of matched elements. + /// An integer indicating the new position to set the scroll bar to. + /// + /// + }, + 'scrollTop': function() { + /// + /// Set the current vertical position of the scroll bar for each of the set of matched elements. + /// An integer indicating the new position to set the scroll bar to. + /// + /// + }, + 'select': function() { + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'selected': function() { + /// Selects all elements that are selected. + }, + 'selector': function() { + /// A selector representing selector passed to jQuery(), if any, when creating the original set. + /// + }, + 'serialize': function() { + /// Encode a set of form elements as a string for submission. + /// + }, + 'serializeArray': function() { + /// Encode a set of form elements as an array of names and values. + /// + }, + 'show': function() { + /// + /// Display the matched elements. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display the matched elements. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display the matched elements. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'siblings': function() { + /// + /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. + /// A string containing a selector expression to match elements against. + /// + /// + }, + 'size': function() { + /// Return the number of elements in the jQuery object. + /// + }, + 'slice': function() { + /// + /// Reduce the set of matched elements to a subset specified by a range of indices. + /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. + /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. + /// + /// + }, + 'slideDown': function() { + /// + /// Display the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display the matched elements with a sliding motion. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'slideToggle': function() { + /// + /// Display or hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements with a sliding motion. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display or hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'slideUp': function() { + /// + /// Hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Hide the matched elements with a sliding motion. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Hide the matched elements with a sliding motion. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + }, + 'stop': function() { + /// + /// Stop the currently-running animation on the matched elements. + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + /// + /// Stop the currently-running animation on the matched elements. + /// The name of the queue in which to stop animations. + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + }, + 'submit': function() { + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// A function to execute each time the event is triggered. + /// + /// + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// An object containing data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'target': function() { + /// Selects the target element indicated by the fragment identifier of the document's URI. + }, + 'text': function() { + /// + /// Set the content of each element in the set of matched elements to the specified text. + /// A string of text to set as the content of each matched element. + /// + /// + /// + /// Set the content of each element in the set of matched elements to the specified text. + /// A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments. + /// + /// + }, + 'toArray': function() { + /// Retrieve all the DOM elements contained in the jQuery set, as an array. + /// + }, + 'toggle': function() { + /// + /// Display or hide the matched elements. + /// A string or number determining how long the animation will run. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements. + /// A map of additional options to pass to the method. + /// + /// + /// + /// Display or hide the matched elements. + /// A string or number determining how long the animation will run. + /// A string indicating which easing function to use for the transition. + /// A function to call once the animation is complete. + /// + /// + /// + /// Display or hide the matched elements. + /// A Boolean indicating whether to show or hide the elements. + /// + /// + }, + 'toggleClass': function() { + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// + /// + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. + /// + /// + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// A boolean value to determine whether the class should be added or removed. + /// + /// + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments. + /// A boolean value to determine whether the class should be added or removed. + /// + /// + }, + 'trigger': function() { + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// A string containing a JavaScript event type, such as click or submit. + /// Additional parameters to pass along to the event handler. + /// + /// + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// A jQuery.Event object. + /// Additional parameters to pass along to the event handler. + /// + /// + }, + 'triggerHandler': function() { + /// + /// Execute all handlers attached to an element for an event. + /// A string containing a JavaScript event type, such as click or submit. + /// An array of additional parameters to pass along to the event handler. + /// + /// + }, + 'unbind': function() { + /// + /// Remove a previously-attached event handler from the elements. + /// A string containing a JavaScript event type, such as click or submit. + /// The function that is to be no longer executed. + /// + /// + /// + /// Remove a previously-attached event handler from the elements. + /// A string containing a JavaScript event type, such as click or submit. + /// Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ). + /// + /// + /// + /// Remove a previously-attached event handler from the elements. + /// A JavaScript event object as passed to an event handler. + /// + /// + }, + 'undelegate': function() { + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A selector which will be used to filter the event results. + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// + /// + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A selector which will be used to filter the event results. + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// A function to execute at the time the event is triggered. + /// + /// + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A selector which will be used to filter the event results. + /// An object of one or more event types and previously bound functions to unbind from them. + /// + /// + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// A string containing a namespace to unbind all events from. + /// + /// + }, + 'unload': function() { + /// + /// Bind an event handler to the "unload" JavaScript event. + /// A function to execute when the event is triggered. + /// + /// + /// + /// Bind an event handler to the "unload" JavaScript event. + /// A plain object of data that will be passed to the event handler. + /// A function to execute each time the event is triggered. + /// + /// + }, + 'unwrap': function() { + /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. + /// + }, + 'val': function() { + /// + /// Set the value of each element in the set of matched elements. + /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. + /// + /// + /// + /// Set the value of each element in the set of matched elements. + /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. + /// + /// + }, + 'visible': function() { + /// Selects all elements that are visible. + }, + 'width': function() { + /// + /// Set the CSS width of each element in the set of matched elements. + /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). + /// + /// + /// + /// Set the CSS width of each element in the set of matched elements. + /// A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set. + /// + /// + }, + 'wrap': function() { + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. + /// + /// + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, + 'wrapAll': function() { + /// + /// Wrap an HTML structure around all elements in the set of matched elements. + /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. + /// + /// + }, + 'wrapInner': function() { + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. + /// + /// + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. + /// + /// + }, +}); + +intellisense.annotate(window, { + '$': function() { + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A string containing a selector expression + /// A DOM Element, Document, or jQuery to use as context + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A DOM element to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An array containing a set of DOM elements to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// A plain object to wrap in a jQuery object. + /// + /// + /// + /// Accepts a string containing a CSS selector which is then used to match a set of elements. + /// An existing jQuery object to clone. + /// + /// + }, +}); + diff --git a/Scripts/jquery-3.7.1.js b/Scripts/jquery-3.7.1.js new file mode 100644 index 000000000..1a86433c2 --- /dev/null +++ b/Scripts/jquery-3.7.1.js @@ -0,0 +1,10716 @@ +/*! + * jQuery JavaScript Library v3.7.1 + * https://jquery.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2023-08-28T13:37Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket trac-14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +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. + // 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 ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var version = "3.7.1", + + rhtmlSuffix = /HTML$/i, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + + // Retrieve the text value of an array of DOM nodes + text: function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += jQuery.text( node ); + } + } + if ( nodeType === 1 || nodeType === 11 ) { + return elem.textContent; + } + if ( nodeType === 9 ) { + return elem.documentElement.textContent; + } + if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + isXMLDoc: function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Assume HTML when documentElement doesn't yet exist, such as inside + // document fragments. + return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// 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 isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var pop = arr.pop; + + +var sort = arr.sort; + + +var splice = arr.splice; + + +var whitespace = "[\\x20\\t\\r\\n\\f]"; + + +var rtrimCSS = new RegExp( + "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", + "g" +); + + + + +// Note: an element does not contain itself +jQuery.contains = function( a, b ) { + var bup = b && b.parentNode; + + return a === bup || !!( bup && bup.nodeType === 1 && ( + + // Support: IE 9 - 11+ + // IE doesn't have `contains` on SVG. + a.contains ? + a.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); +}; + + + + +// CSS string/identifier serialization +// https://drafts.csswg.org/cssom/#common-serializing-idioms +var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + +function fcssescape( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; +} + +jQuery.escapeSelector = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + + + + +var preferredDoc = document, + pushNative = push; + +( function() { + +var i, + Expr, + outermostContext, + sortInput, + hasDuplicate, + push = pushNative, + + // Local document vars + document, + documentElement, + documentIsHTML, + rbuggyQSA, + matches, + + // Instance-specific data + expando = jQuery.expando, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + + "loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + + whitespace + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + ID: new RegExp( "^#(" + identifier + ")" ), + CLASS: new RegExp( "^\\.(" + identifier + ")" ), + TAG: new RegExp( "^(" + identifier + "|[*])" ), + ATTR: new RegExp( "^" + attributes ), + PSEUDO: new RegExp( "^" + pseudos ), + CHILD: new RegExp( + "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + bool: new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + needsContext: new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + if ( nonHex ) { + + // Strip the backslash prefix from a non-hex escape sequence + return nonHex; + } + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + return high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes; see `setDocument`. + // Support: IE 9 - 11+, Edge 12 - 18+ + // Removing the function wrapper causes a "Permission Denied" + // error in IE/Edge. + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && nodeName( elem, "fieldset" ); + }, + { dir: "parentNode", next: "legend" } + ); + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android <=4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { + apply: function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + }, + call: function( target ) { + pushNative.apply( target, slice.call( arguments, 1 ) ); + } + }; +} + +function find( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE 9 only + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + push.call( results, elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE 9 only + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + find.contains( context, elem ) && + elem.id === m ) { + + push.call( results, elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when + // strict-comparing two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( newContext != context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = jQuery.escapeSelector( nid ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties + // (see https://github.com/jquery/sizzle/issues/157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by jQuery selector module + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + return nodeName( elem, "input" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && + elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11+ + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a jQuery selector context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [node] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +function setDocument( node ) { + var subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + documentElement = document.documentElement; + documentIsHTML = !jQuery.isXMLDoc( document ); + + // Support: iOS 7 only, IE 9 - 11+ + // Older browsers didn't support unprefixed `matches`. + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.msMatchesSelector; + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors + // (see trac-13936). + // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, + // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. + if ( documentElement.msMatchesSelector && + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 9 - 11+, Edge 12 - 18+ + subWindow.addEventListener( "unload", unloadHandler ); + } + + // Support: IE <10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + documentElement.appendChild( el ).id = jQuery.expando; + return !document.getElementsByName || + !document.getElementsByName( jQuery.expando ).length; + } ); + + // Support: IE 9 only + // Check to see if it's possible to do matchesSelector + // on a disconnected node. + support.disconnectedMatch = assert( function( el ) { + return matches.call( el, "*" ); + } ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // IE/Edge don't support the :scope pseudo-class. + support.scope = assert( function() { + return document.querySelectorAll( ":scope" ); + } ); + + // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only + // Make sure the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; + } + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter.ID = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find.ID = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter.ID = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find.ID = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find.TAG = function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else { + return context.querySelectorAll( tag ); + } + }; + + // Class + Expr.find.CLASS = function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + rbuggyQSA = []; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + documentElement.appendChild( el ).innerHTML = + "" + + ""; + + // Support: iOS <=7 - 8 only + // Boolean attributes and "value" are not treated correctly in some XML documents + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: iOS <=7 - 8 only + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: iOS 8 only + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE 9 - 11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + documentElement.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + } ); + + if ( !support.cssHas ) { + + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a === document || a.ownerDocument == preferredDoc && + find.contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b === document || b.ownerDocument == preferredDoc && + find.contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + }; + + return document; +} + +find.matches = function( expr, elements ) { + return find( expr, null, null, elements ); +}; + +find.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return find( expr, document, null, [ elem ] ).length > 0; +}; + +find.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return jQuery.contains( context, elem ); +}; + + +find.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (see trac-13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + if ( val !== undefined ) { + return val; + } + + return elem.getAttribute( name ); +}; + +find.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +jQuery.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + // + // Support: Android <=4.0+ + // Testing for detecting duplicates is unpredictable so instead assume we can't + // depend on duplicate detection in all browsers without a stable sort. + hasDuplicate = !support.sortStable; + sortInput = !support.sortStable && slice.call( results, 0 ); + sort.call( results, sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + splice.call( results, duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +jQuery.fn.uniqueSort = function() { + return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); +}; + +Expr = jQuery.expr = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + ATTR: function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) + .replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + CHILD: function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + find.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) + ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + find.error( match[ 0 ] ); + } + + return match; + }, + + PSEUDO: function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr.CHILD.test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + TAG: function( nodeNameSelector ) { + var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return nodeName( elem, expectedNodeName ); + }; + }, + + CLASS: function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + ")" + className + + "(" + whitespace + "|$)" ) ) && + classCache( className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + ATTR: function( name, operator, check ) { + return function( elem ) { + var result = find.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + if ( operator === "=" ) { + return result === check; + } + if ( operator === "!=" ) { + return result !== check; + } + if ( operator === "^=" ) { + return check && result.indexOf( check ) === 0; + } + if ( operator === "*=" ) { + return check && result.indexOf( check ) > -1; + } + if ( operator === "$=" ) { + return check && result.slice( -check.length ) === check; + } + if ( operator === "~=" ) { + return ( " " + result.replace( rwhitespace, " " ) + " " ) + .indexOf( check ) > -1; + } + if ( operator === "|=" ) { + return result === check || result.slice( 0, check.length + 1 ) === check + "-"; + } + + return false; + }; + }, + + CHILD: function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + nodeName( node, name ) : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || ( parent[ expando ] = {} ); + cache = outerCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + cache = outerCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + nodeName( node, name ) : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + outerCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + PSEUDO: function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // https://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + find.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as jQuery does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + not: markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrimCSS, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element + // (see https://github.com/jquery/sizzle/issues/299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + has: markFunction( function( selector ) { + return function( elem ) { + return find( selector, elem ).length > 0; + }; + } ), + + contains: markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // https://www.w3.org/TR/selectors/#lang-pseudo + lang: markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + find.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + target: function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + root: function( elem ) { + return elem === documentElement; + }, + + focus: function( elem ) { + return elem === safeActiveElement() && + document.hasFocus() && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + enabled: createDisabledPseudo( false ), + disabled: createDisabledPseudo( true ), + + checked: function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + return ( nodeName( elem, "input" ) && !!elem.checked ) || + ( nodeName( elem, "option" ) && !!elem.selected ); + }, + + selected: function( elem ) { + + // Support: IE <=11+ + // Accessing the selectedIndex property + // forces the browser to treat the default option as + // selected when in an optgroup. + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + empty: function( elem ) { + + // https://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + parent: function( elem ) { + return !Expr.pseudos.empty( elem ); + }, + + // Element/input types + header: function( elem ) { + return rheader.test( elem.nodeName ); + }, + + input: function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + button: function( elem ) { + return nodeName( elem, "input" ) && elem.type === "button" || + nodeName( elem, "button" ); + }, + + text: function( elem ) { + var attr; + return nodeName( elem, "input" ) && elem.type === "text" && + + // Support: IE <10 only + // New HTML5 attribute values (e.g., "search") appear + // with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + first: createPositionalPseudo( function() { + return [ 0 ]; + } ), + + last: createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + even: createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + odd: createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + lt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i; + + if ( argument < 0 ) { + i = argument + length; + } else if ( argument > length ) { + i = length; + } else { + i = argument; + } + + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + gt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos.nth = Expr.pseudos.eq; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rleadingCombinator.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrimCSS, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + if ( parseOnly ) { + return soFar.length; + } + + return soFar ? + find.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + if ( skip && nodeName( elem, skip ) ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = outerCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + outerCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + find( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, matcherOut, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || + multipleContexts( selector || "*", + context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems; + + if ( matcher ) { + + // If we have a postFinder, or filtered seed, or non-seed postFilter + // or preexisting results, + matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results; + + // Find primary matches + matcher( matcherIn, matcherOut, context, xml ); + } else { + matcherOut = matcherIn; + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element + // (see https://github.com/jquery/sizzle/issues/299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrimCSS, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find.TAG( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: iOS <=7 - 9 only + // Tolerate NodeList properties (IE: "length"; Safari: ) matching + // elements by id. (see trac-14142) + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + push.call( results, elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + jQuery.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +function compile( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +} + +/** + * A low-level selection function that works with jQuery's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with jQuery selector compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find.ID( + token.matches[ 0 ].replace( runescape, funescape ), + context + ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && + testContext( context.parentNode ) || context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +} + +// One-time assignments + +// Support: Android <=4.0 - 4.1+ +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Initialize against the default document +setDocument(); + +// Support: Android <=4.0 - 4.1+ +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +jQuery.find = find; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.unique = jQuery.uniqueSort; + +// These have always been private, but they used to be documented as part of +// Sizzle so let's maintain them for now for backwards compatibility purposes. +find.compile = compile; +find.select = select; +find.setDocument = setDocument; +find.tokenize = tokenize; + +find.escape = jQuery.escapeSelector; +find.getText = jQuery.text; +find.isXML = jQuery.isXMLDoc; +find.selectors = jQuery.expr; +find.support = jQuery.support; +find.uniqueSort = jQuery.uniqueSort; + + /* eslint-enable */ + +} )(); + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (trac-9521) + // Strict HTML recognition (trac-11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to jQuery#find + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.error ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the error, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getErrorHook ) { + process.error = jQuery.Deferred.getErrorHook(); + + // The deprecated alias of the above. While the name suggests + // returning the stack, not an error instance, jQuery just passes + // it directly to `console.warn` so both will work; an instance + // just better cooperates with source maps. + } else if ( jQuery.Deferred.getStackHook ) { + process.error = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error +// captured before the async barrier to get the original error cause +// which may otherwise be hidden. +jQuery.Deferred.exceptionHook = function( error, asyncError ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, + error.stack, asyncError ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See trac-6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (trac-9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see trac-8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (trac-14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (trac-11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (trac-14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (trac-13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (trac-12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + 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 + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (trac-13208) + // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (trac-13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", true ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, isSetup ) { + + // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add + if ( !isSetup ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + if ( !saved ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + this[ type ](); + result = dataPriv.get( this, type ); + dataPriv.set( this, type, false ); + + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + return result; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering + // the native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved ) { + + // ...and capture the result + dataPriv.set( this, type, jQuery.event.trigger( + saved[ 0 ], + saved.slice( 1 ), + this + ) ); + + // Abort handling of the native event by all jQuery handlers while allowing + // native handlers on the same element to run. On target, this is achieved + // by stopping immediate propagation just on the jQuery event. However, + // the native event is re-wrapped by a jQuery one on each level of the + // propagation so the only way to stop it for jQuery is to stop it for + // everyone via native `stopPropagation()`. This is not a problem for + // focus/blur which don't bubble, but it does also stop click on checkboxes + // and radios. We accept this limitation. + event.stopPropagation(); + event.isImmediatePropagationStopped = returnTrue; + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (trac-504, trac-13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + + function focusMappedHandler( nativeEvent ) { + if ( document.documentMode ) { + + // Support: IE 11+ + // Attach a single focusin/focusout handler on the document while someone wants + // focus/blur. This is because the former are synchronous in IE while the latter + // are async. In other browsers, all those handlers are invoked synchronously. + + // `handle` from private data would already wrap the event, but we need + // to change the `type` here. + var handle = dataPriv.get( this, "handle" ), + event = jQuery.event.fix( nativeEvent ); + event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; + event.isSimulated = true; + + // First, handle focusin/focusout + handle( nativeEvent ); + + // ...then, handle focus/blur + // + // focus/blur don't bubble while focusin/focusout do; simulate the former by only + // invoking the handler at the lower level. + if ( event.target === event.currentTarget ) { + + // The setup part calls `leverageNative`, which, in turn, calls + // `jQuery.event.add`, so event handle will already have been set + // by this point. + handle( event ); + } + } else { + + // For non-IE browsers, attach a single capturing handler on the document + // while someone wants focusin/focusout. + jQuery.event.simulate( delegateType, nativeEvent.target, + jQuery.event.fix( nativeEvent ) ); + } + } + + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + var attaches; + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, true ); + + if ( document.documentMode ) { + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + attaches = dataPriv.get( this, delegateType ); + if ( !attaches ) { + this.addEventListener( delegateType, focusMappedHandler ); + } + dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); + } else { + + // Return false to allow normal processing in the caller + return false; + } + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + teardown: function() { + var attaches; + + if ( document.documentMode ) { + attaches = dataPriv.get( this, delegateType ) - 1; + if ( !attaches ) { + this.removeEventListener( delegateType, focusMappedHandler ); + dataPriv.remove( this, delegateType ); + } else { + dataPriv.set( this, delegateType, attaches ); + } + } else { + + // Return false to indicate standard teardown should be applied + return false; + } + }, + + // Suppress native focus or blur if we're currently inside + // a leveraged native-event stack + _default: function( event ) { + return dataPriv.get( event.target, type ); + }, + + delegateType: delegateType + }; + + // Support: Firefox <=44 + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 + // + // Support: IE 9 - 11+ + // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, + // attach a single handler for both events in IE. + jQuery.event.special[ delegateType ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ); + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + if ( !attaches ) { + if ( document.documentMode ) { + this.addEventListener( delegateType, focusMappedHandler ); + } else { + doc.addEventListener( type, focusMappedHandler, true ); + } + } + dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ) - 1; + + if ( !attaches ) { + if ( document.documentMode ) { + this.removeEventListener( delegateType, focusMappedHandler ); + } else { + doc.removeEventListener( type, focusMappedHandler, true ); + } + dataPriv.remove( dataHolder, delegateType ); + } else { + dataPriv.set( dataHolder, delegateType, attaches ); + } + } + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (trac-8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Re-enable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + + // Unwrap a CDATA section containing script contents. This shouldn't be + // needed as in XML documents they're already not visible when + // inspecting element contents and in HTML documents they have no + // meaning but we're preserving that logic for backwards compatibility. + // This will be removed completely in 4.0. See gh-4904. + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew jQuery#find here for performance reasons: + // https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var rcustomProp = /^--/; + + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (trac-8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // 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 ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "box-sizing:content-box;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, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + isCustomProp = rcustomProp.test( name ), + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, trac-12537) + // .css('--customProperty) (gh-3144) + if ( computed ) { + + // Support: IE <=9 - 11+ + // IE only supports `"float"` in `getPropertyValue`; in computed styles + // it's only available as `"cssFloat"`. We no longer modify properties + // sent to `.css()` apart from camelCasing, so we need to check both. + // Normally, this would create difference in behavior: if + // `getPropertyValue` returns an empty string, the value returned + // by `.css()` would be `undefined`. This is usually the case for + // disconnected elements. However, in IE even disconnected elements + // with no styles return `"none"` for `getPropertyValue( "float" )` + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( isCustomProp && ret ) { + + // Support: Firefox 105+, Chrome <=105+ + // Spec requires trimming whitespace for custom properties (gh-4926). + // Firefox only trims leading whitespace. Chrome just collapses + // both leading & trailing whitespace to a single space. + // + // Fall back to `undefined` if empty string returned. + // This collapses a missing definition with property defined + // and set to an empty string but there's no standard API + // allowing us to differentiate them without a performance penalty + // and returning `undefined` aligns with older jQuery. + // + // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED + // as whitespace while CSS does not, but this is not a problem + // because CSS preprocessing replaces them with U+000A LINE FEED + // (which *is* CSS whitespace) + // https://www.w3.org/TR/css-syntax-3/#input-preprocessing + ret = ret.replace( rtrimCSS, "$1" ) || undefined; + } + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0, + marginDelta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + // Count margin delta separately to only add it after scroll gutter adjustment. + // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). + if ( box === "margin" ) { + marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta + marginDelta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + animationIterationCount: true, + aspectRatio: true, + borderImageSlice: true, + columnCount: true, + flexGrow: true, + flexShrink: true, + fontWeight: true, + gridArea: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnStart: true, + gridRow: true, + gridRowEnd: true, + gridRowStart: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + scale: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeMiterlimit: true, + strokeOpacity: true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (trac-7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug trac-9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (trac-7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // 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 ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // Use proper attribute retrieval (trac-12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + if ( cur.indexOf( " " + className + " " ) < 0 ) { + cur += className + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + removeClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + + // This expression is here for better compressibility (see addClass) + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Remove *all* instances + while ( cur.indexOf( " " + className + " " ) > -1 ) { + cur = cur.replace( " " + className + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var classNames, className, i, self, + type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + classNames = classesToArray( value ); + + return this.each( function() { + if ( isValidValue ) { + + // Toggle individual class names + self = jQuery( this ); + + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (trac-14686, trac-14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (trac-2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + 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; +}; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (trac-9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (trac-6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // 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() { + 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 ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // trac-7653, trac-8125, trac-8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes trac-9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // 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, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (trac-10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket trac-12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // trac-9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // 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() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (trac-11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // trac-1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see trac-8605, trac-14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // trac-14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "--%> + + diff --git a/Contabilidad2/RepBalanceGeneral.aspx.vb.exclude b/Contabilidad2/RepBalanceGeneral.aspx.vb.exclude new file mode 100644 index 000000000..45a0fcf15 --- /dev/null +++ b/Contabilidad2/RepBalanceGeneral.aspx.vb.exclude @@ -0,0 +1,982 @@ +Option Explicit On +Option Strict On + +Imports System.Data +Imports Extensiones +Imports Microsoft.Reporting.WebForms +Partial Class Contabilidad2_RepBalanceGeneral + Inherits ClsPaginas + + + +#Region " P R O P I E D A D E S - B A L A N C E - G E N E R A L" + Private Property DtDatos As DataTable + Get + DtDatos = DirectCast(ViewState("DtDatos"), DataTable) + End Get + + Set(ByVal value As DataTable) + ViewState("DtDatos") = value + End Set + End Property + Private Property TotalActivoActual As Double + Get + TotalActivoActual = ViewState("TotalActivoActual").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalActivoActual") = value + End Set + End Property + Private Property TotalActivoAnterior As Double + Get + TotalActivoAnterior = ViewState("TotalActivoAnterior").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalActivoAnterior") = value + End Set + End Property + Private Property TotalPasivoActual As Double + Get + TotalPasivoActual = ViewState("TotalPasivoActual").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalPasivoActual") = value + End Set + End Property + Private Property TotalPasivoAnterior As Double + Get + TotalPasivoAnterior = ViewState("TotalPasivoAnterior").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalPasivoAnterior") = value + End Set + End Property + Private Property TotalPatrimonioActual As Double + Get + TotalPatrimonioActual = ViewState("TotalPatrimonioActual").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalPatrimonioActual") = value + End Set + End Property + Private Property TotalPatrimonioAnterior As Double + Get + TotalPatrimonioAnterior = ViewState("TotalPatrimonioAnterior").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalPatrimonioAnterior") = value + End Set + End Property + Private Property TotalPasivoPatrimonioActual As Double + Get + TotalPasivoPatrimonioActual = ViewState("TotalPasivoPatrimonioActual").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalPasivoPatrimonioActual") = value + End Set + End Property + Private Property TotalPasivoPatrimonioAnterior As Double + Get + TotalPasivoPatrimonioAnterior = ViewState("TotalPasivoPatrimonioAnterior").ToString.ToDouble + End Get + Set(value As Double) + ViewState("TotalPasivoPatrimonioAnterior") = value + End Set + End Property + + Private Property FechaInicioActual As Date + Get + FechaInicioActual = ViewState("FechaInicioActual").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaInicioActual") = value + End Set + End Property + Private Property FechaFinActual As Date + Get + FechaFinActual = ViewState("FechaFinActual").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaFinActual") = value + End Set + End Property + Private Property FechaInicioAnterior As Date + Get + FechaInicioAnterior = ViewState("FechaInicioAnterior").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaInicioAnterior") = value + End Set + End Property + Private Property FechaFinAnterior As Date + Get + FechaFinAnterior = ViewState("FechaFinAnterior").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaFinAnterior") = value + End Set + End Property +#End Region + +#Region " PROPIEDADES MENSUAL " + Private Property DtDatosMensual As DataTable + Get + DtDatosMensual = DirectCast(ViewState("DtDatosMensual"), DataTable) + End Get + + Set(ByVal value As DataTable) + ViewState("DtDatosMensual") = value + End Set + End Property +#End Region + +#Region " PROPIEDADES - ANUAL " + Private Property DtDatosAnual As DataTable + Get + DtDatosAnual = DirectCast(ViewState("DtDatosAnual"), DataTable) + End Get + + Set(ByVal value As DataTable) + ViewState("DtDatosAnual") = value + End Set + End Property + Private Property Anos As Integer + Get + Anos = ViewState("Anos").ToString.ToEntero + End Get + Set(value As Integer) + ViewState("Anos") = value + End Set + End Property +#End Region + +#Region " PROPIEDADES" + Private Property TipoReporte As Integer + Get + TipoReporte = ViewState("TipoReporte").ToString.ToEntero + End Get + Set(value As Integer) + ViewState("TipoReporte") = value + End Set + End Property +#End Region + + Dim CuentaResultados As Integer + + Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load + If Not Page.IsPostBack Then + + If UsuarioActual.Empresa.TipoContabilidad = 2 Then + Response.Redirect($"/Contabilidad/RepBalanceGeneral.aspx") + End If + + 'If UsuarioActual.Empresa.UsaAC Then + ' TipoReporte = -1 + 'Else + tdTipoReporte.Visible = True + TipoReporte = 1 + ' End If + + 'SI NO USA AC + If TipoReporte > 0 Then + LtlTituloHacienda.Text = "CAPITAL" + LtlTotalHacienda.Text = "Total Capital:" + LtlTotalPasivoPatrimonio.Text = "Total del Pasivo y Capital:" + + GvActivo.Columns(2).Visible = False + GvActivoNoCirculante.Columns(2).Visible = False + GvActivoDiferido.Columns(2).Visible = False + GvPasivo.Columns(2).Visible = False + GvPasivoNoCirculante.Columns(2).Visible = False + GvPasivoDiferido.Columns(2).Visible = False + GvPatrimonio.Columns(2).Visible = False + GvUtilidad.Columns(2).Visible = False + + GvPatrimonioGenerado.Visible = False + GvPatrimonioActualizacion.Visible = False + + TdTotalActivoAnterior.Visible = False + TdTotalPasivoAnterior.Visible = False + TdTotalPasivo.Visible = False + TdTotalPatrimonio.Visible = False + + Else + GvUtilidad.Visible = False + GvActivoDiferido.Visible = False + GvPasivoDiferido.Visible = False + End If + + CargaDatosGenerales() + + DdlEjercicio.SelectedValue = NowADS().Year.ToString + + 'Anual + Anos = 0 + + 'Normal + InicializaValores() + + 'TabContainer_ActiveTabChanged(Tabs, EventArgs.Empty) + + End If + End Sub + + Private Sub CargaDatosGenerales() + Dim ClsConta As New ClsContabilidad + If ClsConta.GetEjercicios(UsuarioActual.CveEmpresa) Then + DdlEjercicio.DataSource = ClsConta.DtResultados + Else + DdlEjercicio.DataSource = Nothing + End If + + DdlSubproyecto.DataSource = GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, -1) + DdlSubproyecto.DataBind() + + ClsConta.Dispose() + + DdlEjercicio.DataBind() + + End Sub + + +#Region " REPORTE NORMAL " + + Private Sub InicializaValores() + TotalActivoActual = 0 + TotalActivoAnterior = 0 + TotalPasivoActual = 0 + TotalPasivoAnterior = 0 + TotalPatrimonioActual = 0 + TotalPatrimonioAnterior = 0 + TotalPasivoPatrimonioActual = 0 + TotalPasivoPatrimonioAnterior = 0 + End Sub + + Private Sub CargaDatos() + 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) + Dim Anio As String = If(DdlEjercicio.SelectedValue <> "", DdlEjercicio.SelectedValue, NowADS().Year.ToString) + Dim ObjConta As New ClsContabilidad + Dim FechaI = String.Format("01/{0}/{1}", DdlPeriodo.SelectedValue.PadLeft(2, "0"c), Anio) + Dim FechaF = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaI))).ToString("dd/MM/yyyy") + + TipoReporte = If(TipoReporte = -1, -1, DdlTipoReporte.SelectedValue.ToEntero) + + + If ObjConta.GetCuentas(-1, "00321", -1, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then + DtDatos = ObjConta.DtResultados + CuentaResultados = DtDatos.Rows(0)("CveCuenta").ToString.ToEntero + End If + Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString + + If ObjConta.GetSituacionFinanciera("01/01/1000".ToDate, FechaF.ToDate, UsuarioActual.CveEmpresa, CveSubProyecto, TipoReporte) Then + DtDatos = ObjConta.DtResultados + + CargaGrids() + SumaTotales() + Else + DtDatos = Nothing + Alert("Ocurrio un error al cargar los datos del estado de situación financiera", TipoMensaje.MsgError) + End If + + ObjConta.Dispose() + End Sub + Private Sub CargaGrids() + + 'ACTIVO + Dim DtActivoCirculante = DtDatos.FiltraParametros("Tipo in ('A','B','C') AND (Sup = 'ACTIVO CIRCULANTE' OR Nombre = 'ACTIVO CIRCULANTE' OR Sup = 'CIRCULANTE' OR Nombre ='CIRCULANTE')") + Dim DtActivoNoCirculante = DtDatos.FiltraParametros("Tipo in ('A','B','C') AND (Sup = 'ACTIVO NO CIRCULANTE' OR Nombre = 'ACTIVO NO CIRCULANTE' OR Sup = 'FIJO' OR Nombre ='FIJO')") + Dim DtActivoDiferido = DtDatos.FiltraParametros("Tipo in ('A','B','C') AND (Sup = 'DIFERIDO' OR Nombre = 'DIFERIDO')") + Dim Row As DataRow = DtActivoCirculante.NewRow + + If DtActivoCirculante.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL ACTIVO CIRCULANTE" + Row.Item("ImporteActual") = DtActivoCirculante.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtActivoCirculante.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtActivoCirculante.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL ACTIVO CIRCULANTE" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtActivoCirculante.Rows.Add(Row) + + + Row = DtActivoNoCirculante.NewRow + If DtActivoNoCirculante.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL ACTIVO NO CIRCULANTE" + Row.Item("ImporteActual") = DtActivoNoCirculante.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtActivoNoCirculante.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtActivoNoCirculante.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL ACTIVO NO CIRCULANTE" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtActivoNoCirculante.Rows.Add(Row) + + Row = DtActivoDiferido.NewRow + If DtActivoDiferido.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL ACTIVO DIFERIDO" + Row.Item("ImporteActual") = DtActivoDiferido.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtActivoDiferido.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtActivoDiferido.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL ACTIVO DIFERIDO" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtActivoDiferido.Rows.Add(Row) + + GvActivo.DataSource = DtActivoCirculante + GvActivo.DataBind() + GvActivoNoCirculante.DataSource = DtActivoNoCirculante + GvActivoNoCirculante.DataBind() + GvActivoDiferido.DataSource = DtActivoDiferido + GvActivoDiferido.DataBind() + UpActivo.Update() + + + 'PASIVO + Dim DtPasivoCirculante = DtDatos.FiltraParametros("Tipo in ('D') AND (Sup = 'PASIVO CIRCULANTE' OR Sup = 'PASIVO' OR Sup = 'CIRCULANTE' OR Nombre = 'PASIVO CIRCULANTE' OR Sup = 'CORTO PLAZO' OR Nombre = 'CORTO PLAZO')") + Dim DtPasivoNoCirculante = DtDatos.FiltraParametros("Tipo in ('D') AND (Sup = 'PASIVO NO CIRCULANTE' OR Nombre = 'PASIVO NO CIRCULANTE' OR Sup = 'LARGO PLAZO' OR Nombre = 'LARGO PLAZO')") + Dim DtPasivoDiferido = DtDatos.FiltraParametros("Tipo in ('D') AND (Sup = 'DIFERIDO' OR Nombre = 'DIFERIDO')") + + Row = DtPasivoCirculante.NewRow + If DtPasivoCirculante.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL PASIVO CIRCULANTE" + Row.Item("ImporteActual") = DtPasivoCirculante.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtPasivoCirculante.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtPasivoCirculante.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL PASIVO CIRCULANTE" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtPasivoCirculante.Rows.Add(Row) + + Row = DtPasivoNoCirculante.NewRow + If DtPasivoNoCirculante.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL PASIVO NO CIRCULANTE" + Row.Item("ImporteActual") = DtPasivoNoCirculante.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtPasivoNoCirculante.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtPasivoNoCirculante.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL PASIVO NO CIRCULANTE" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtPasivoNoCirculante.Rows.Add(Row) + + Row = DtPasivoDiferido.NewRow + If DtPasivoDiferido.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL PASIVO DIFERIDO" + Row.Item("ImporteActual") = DtPasivoDiferido.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtPasivoDiferido.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtPasivoDiferido.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL PASIVO DIFERIDO" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtPasivoDiferido.Rows.Add(Row) + + GvPasivo.DataSource = DtPasivoCirculante + GvPasivo.DataBind() + GvPasivoNoCirculante.DataSource = DtPasivoNoCirculante + GvPasivoNoCirculante.DataBind() + GvPasivoDiferido.DataSource = DtPasivoDiferido + GvPasivoDiferido.DataBind() + UpPasivo.Update() + + + 'PATRIMONIO + Dim DtPatrimonioContribuido = DtDatos.FiltraParametros("Tipo in ('F') AND (Sup = 'PATRIMONIO CONTRIBUIDO' OR Nombre = 'PATRIMONIO CONTRIBUIDO' OR Sup = 'CAPITAL CONTABLE' OR Sup = 'CAPITAL' OR Nombre = 'CAPITAL CONTABLE' OR Nombre = 'CAPITAL')") + Dim DtUtilidad = DtDatos.FiltraParametros("Tipo in ('F') AND (Codigo = '_UTILIDAD')") + Dim DtPatrimonioGenerado = DtDatos.FiltraParametros("Tipo in ('F') AND (Sup = 'PATRIMONIO GENERADO' OR Nombre = 'PATRIMONIO GENERADO')") + Dim DtPatrimonioActualizacion = DtDatos.FiltraParametros("Tipo in ('F') AND (Sup = 'EXCESO O INSUFICIENCIA EN LA ACTUALIZACION D/PATRI' OR Nombre = 'EXCESO O INSUFICIENCIA EN LA ACTUALIZACION D/PATRI')") + + Row = DtPatrimonioContribuido.NewRow + If DtPatrimonioContribuido.Rows.Count > 0 Then + Row.Item("Nombre") = String.Format("   {0}", If(TipoReporte < 0, "TOTAL PATRIMONIO CONTRIBUIDO", "TOTAL CAPITAL")) + Row.Item("ImporteActual") = DtPatrimonioContribuido.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtPatrimonioContribuido.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtPatrimonioContribuido.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = String.Format("   {0}", If(TipoReporte < 0, "TOTAL PATRIMONIO CONTRIBUIDO", "TOTAL CAPITAL")) + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtPatrimonioContribuido.Rows.Add(Row) + + Row = DtPatrimonioGenerado.NewRow + If DtPatrimonioGenerado.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL PATRIMONIO GENERADO" + 'El id = 87 es el id de la cuenta "RESULTADOS DEL EJERCICIO:(AHORRO/DESAHORRO)" + If DtPatrimonioGenerado.FiltraParametros("CveCuenta = " & CuentaResultados).Rows.Count > 0 Then + Row.Item("ImporteActual") = (DtPatrimonioGenerado.Rows(0)("ImporteActual").ToString.ToDouble + DtPatrimonioGenerado.FiltroPrimero("CveCuenta = " & CuentaResultados)("ImporteActual").ToString.ToDouble).ToString + Row.Item("ImporteAnterior") = (DtPatrimonioGenerado.Rows(0)("ImporteAnterior").ToString.ToDouble + DtPatrimonioGenerado.FiltroPrimero("CveCuenta = " & CuentaResultados)("ImporteAnterior").ToString.ToDouble).ToString + Else + Row.Item("ImporteActual") = DtPatrimonioGenerado.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtPatrimonioGenerado.Rows(0)("ImporteAnterior").ToString + End If + Row.Item("CtaMayor") = -1 + DtPatrimonioGenerado.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL PATRIMONIO GENERADO" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtPatrimonioGenerado.Rows.Add(Row) + + Row = DtPatrimonioActualizacion.NewRow + If DtPatrimonioActualizacion.Rows.Count > 0 Then + Row.Item("Nombre") = "   TOTAL EXCESO O INSUFICIENCIA EN LA ACTUALIZACION" + Row.Item("ImporteActual") = DtPatrimonioActualizacion.Rows(0)("ImporteActual").ToString + Row.Item("ImporteAnterior") = DtPatrimonioActualizacion.Rows(0)("ImporteAnterior").ToString + Row.Item("CtaMayor") = -1 + DtPatrimonioActualizacion.Rows.RemoveAt(0) + Else + Row.Item("Nombre") = "   TOTAL EXCESO O INSUFICIENCIA EN LA ACTUALIZACION" + Row.Item("ImporteActual") = "0.00" + Row.Item("ImporteAnterior") = "0.00" + Row.Item("CtaMayor") = -1 + End If + DtPatrimonioActualizacion.Rows.Add(Row) + + + GvPatrimonio.DataSource = DtPatrimonioContribuido + GvPatrimonio.DataBind() + GvUtilidad.DataSource = DtUtilidad + GvUtilidad.DataBind() + GvPatrimonioGenerado.DataSource = DtPatrimonioGenerado + GvPatrimonioGenerado.DataBind() + GvPatrimonioActualizacion.DataSource = DtPatrimonioActualizacion + GvPatrimonioActualizacion.DataBind() + UpPatrimonio.Update() + End Sub + Private Sub SumaTotales() + TotalPasivoPatrimonioActual = TotalPasivoActual + TotalPatrimonioActual + TotalPasivoPatrimonioAnterior = TotalPasivoAnterior + TotalPatrimonioAnterior + + 'Llena Lb´s Totales + LbTotalActivoActual.Text = TotalActivoActual.ToString.FormatoNumero + LbTotalActivoAnterior.Text = TotalActivoAnterior.ToString.FormatoNumero + + LbTotalPasivoActual.Text = TotalPasivoActual.ToString.FormatoNumero + LbTotalPasivoAnterior.Text = TotalPasivoAnterior.ToString.FormatoNumero + + LbTotalPatrimonioActual.Text = TotalPatrimonioActual.ToString.FormatoNumero + LbTotalPatrimonioAnterior.Text = TotalPatrimonioAnterior.ToString.FormatoNumero + + LbTotalPasivoPatrimonioActual.Text = TotalPasivoPatrimonioActual.ToString.FormatoNumero + LbTotalPasivoPatrimonioAnterior.Text = TotalPasivoPatrimonioAnterior.ToString.FormatoNumero + + + Dim Descuadre = False + 'COLOREA ROJO SI NO CUADRAN TOTALES + If TotalActivoActual <> TotalPasivoPatrimonioActual Then + LbTotalActivoActual.ForeColor = Drawing.Color.Red + LbTotalPasivoPatrimonioActual.ForeColor = Drawing.Color.Red + Descuadre = True + Else + LbTotalActivoActual.ForeColor = Drawing.Color.Black + LbTotalPasivoPatrimonioActual.ForeColor = Drawing.Color.Black + End If + + If TotalActivoAnterior <> TotalPasivoPatrimonioAnterior Then + LbTotalActivoAnterior.ForeColor = Drawing.Color.Red + LbTotalPasivoPatrimonioAnterior.ForeColor = Drawing.Color.Red + Descuadre = True + Else + LbTotalActivoAnterior.ForeColor = Drawing.Color.Black + LbTotalPasivoPatrimonioAnterior.ForeColor = Drawing.Color.Black + End If + + If Descuadre Then + LbDescuadre.Text = "Las sumas de los totales están descuadradas." + Else + LbDescuadre.Text = "" + End If + + + End Sub + + + +#Region "GV´S ROW DATA BOUND" + + Protected Sub GvActivo_RowDataBound(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.DataRow Then + If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then + TotalActivoActual += e.Row.DBCampo("ImporteActual").ToString.ToDouble + TotalActivoAnterior += e.Row.DBCampo("ImporteAnterior").ToString.ToDouble + e.Row.FCLabel("LbNombre").Font.Italic = True + Else + e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + End If + + If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red + End If + If e.Row.DBCampo("ImporteAnterior").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red + End If + End If + End Sub + + Protected Sub GvPasivo_RowDataBound(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.DataRow Then + + 'Totales + If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then + TotalPasivoActual += e.Row.DBCampo("ImporteActual").ToString.ToDouble + TotalPasivoAnterior += e.Row.DBCampo("ImporteAnterior").ToString.ToDouble + e.Row.FCLabel("LbNombre").Font.Italic = True + + 'Cuentas + Else + e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + + 'e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString) + 'e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString) + End If + + + 'Colorea NEGATIVOS + If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red + End If + If e.Row.DBCampo("ImporteAnterior").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red + End If + End If + End Sub + + Protected Sub GvPatrimonio_RowDataBound(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.Header Then + If e.Row.FCLabel("LbTitulo") IsNot Nothing Then e.Row.FCLabel("LbTitulo").Text = "CAPITAL CONTABLE" + End If + + If e.Row.RowType = DataControlRowType.DataRow Then + If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Or e.Row.DBCampo("CtaMayor").ToString.ToEntero = 2 Then + TotalPatrimonioActual += e.Row.DBCampo("ImporteActual").ToString.ToDouble + TotalPatrimonioAnterior += e.Row.DBCampo("ImporteAnterior").ToString.ToDouble + e.Row.FCLabel("LbNombre").Font.Italic = True + 'e.Row.ControlStyle.BackColor = Drawing.Color.LightGray + 'e.Row.ControlStyle.ForeColor = Drawing.Color.White + 'e.Row.ControlStyle.Font.Bold = True + Else + e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + + 'e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString) + 'e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFAnterior").ToDate.ToShortDateString) + End If + + If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red + End If + If e.Row.DBCampo("ImporteAnterior").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red + End If + End If + End Sub + +#End Region + + +#End Region + + + +#Region " REPORTE MENSUAL " + Private Sub CargaDatosMensual() + 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) + Dim ObjConta As New ClsContabilidad + TipoReporte = If(TipoReporte = -1, -1, DdlTipoReporte.SelectedValue.ToEntero) + + Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString + + If ObjConta.GetBalanceGeneralMensual(DdlEjercicio.SelectedValue.ToEntero, TipoReporte, DdlSubtotales.SelectedValue.ToEntero, CveSubProyecto, UsuarioActual.CveEmpresa) Then + DtDatosMensual = ObjConta.DtResultados + Else + DtDatosMensual = Nothing + Alert("Ocurrió un error al cargar los datos del balance general mensual", TipoMensaje.MsgError) + End If + ObjConta.Dispose() + + EscondeSubtotales() + + If DtDatosMensual IsNot Nothing Then + CargaGridMensual() + End If + End Sub + Private Sub EscondeSubtotales() + + 'Esconde Trimestral + 'GvDatosMensual.Columns(4).Visible = False + 'GvDatosMensual.Columns(9).Visible = False + 'GvDatosMensual.Columns(14).Visible = False + 'GvDatosMensual.Columns(18).Visible = False + + ''Esconde Cuatrimestral + 'GvDatosMensual.Columns(6).Visible = False + 'GvDatosMensual.Columns(12).Visible = False + 'GvDatosMensual.Columns(19).Visible = False + + 'If DdlSubtotales.SelectedValue = "2" Then + ' GvDatosMensual.Columns(4).Visible = True + ' GvDatosMensual.Columns(9).Visible = True + ' GvDatosMensual.Columns(14).Visible = True + ' GvDatosMensual.Columns(18).Visible = True + 'ElseIf DdlSubtotales.SelectedValue = "3" Then + ' GvDatosMensual.Columns(6).Visible = True + ' GvDatosMensual.Columns(12).Visible = True + ' GvDatosMensual.Columns(19).Visible = True + 'End If + + End Sub + Private Sub CargaGridMensual() + 'GvDatosMensual.DataSource = DtDatosMensual + 'GvDatosMensual.DataBind() + 'UpDatosMensual.Update() + End Sub + + 'Protected Sub GvDatosMensual_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosMensual.RowDataBound + ' If e.Row.RowType = DataControlRowType.DataRow Then + + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Or e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then + ' e.Row.FCHyperLink("HLEnero").Text = "" + ' e.Row.FCHyperLink("HLFebrero").Text = "" + ' e.Row.FCHyperLink("HLMarzo").Text = "" + ' e.Row.FCHyperLink("HLAbril").Text = "" + ' e.Row.FCHyperLink("HLMayo").Text = "" + ' e.Row.FCHyperLink("HLJunio").Text = "" + ' e.Row.FCHyperLink("HLJulio").Text = "" + ' e.Row.FCHyperLink("HLAgosto").Text = "" + ' e.Row.FCHyperLink("HLSeptiembre").Text = "" + ' e.Row.FCHyperLink("HLOctubre").Text = "" + ' e.Row.FCHyperLink("HLNoviembre").Text = "" + ' e.Row.FCHyperLink("HLDiciembre").Text = "" + ' End If + + ' 'AGRUPADOR DE CUENTAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then + ' e.Row.FCLabel("LbNombre").Font.Bold = True + ' End If + + ' 'TITULO DE CUENTAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Then + ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") + ' End If + + ' 'CUENTAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 1 Then + ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 20px;") + + ' e.Row.FCHyperLink("HLEnero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLFebrero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/02/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLMarzo").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/03/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLAbril").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/04/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLMayo").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/05/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLJunio").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/06/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLJulio").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/07/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLAgosto").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/08/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLSeptiembre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("09/01/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLOctubre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/10/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLNoviembre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/11/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLDiciembre").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&TP={2}&CveSubProyecto={3}", e.Row.DBCampo("CveCuenta"), String.Format("01/12/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + + ' e.Row.FCHyperLink("HLTrimestral1").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/03/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLTrimestral2").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/04/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/06/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLTrimestral3").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/07/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/09/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLTrimestral4").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/10/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/12/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + + ' e.Row.FCHyperLink("HLCuatrimestral1").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/04/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLCuatrimestral2").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/05/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/08/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + ' e.Row.FCHyperLink("HLCuatrimestral3").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/09/{0}", DdlEjercicio.SelectedValue.ToString), String.Format("01/12/{0}", DdlEjercicio.SelectedValue.ToString).ToDate.LastDayOfMonth.ToShortDateString, TipoReporte, DdlSubproyecto.SelectedValue) + + ' End If + + ' 'TOTALES + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then + ' e.Row.Attributes.Add("style", "border-top: 1px solid;") + ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") + ' e.Row.FCLabel("LbNombre").Font.Italic = True + ' End If + + ' 'SUMAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 6 Then + ' e.Row.FCLabel("LbNombre").Font.Bold = True + ' End If + + ' End If + 'End Sub +#End Region + + + +#Region " REPORTE ANUAL " + Private Sub CargaDatosAnual() + 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) + Dim ObjConta As New ClsContabilidad + TipoReporte = If(TipoReporte = -1, -1, DdlTipoReporte.SelectedValue.ToEntero) + + Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString + + If ObjConta.GetBalanceGeneralAnual(DdlEjercicio.SelectedValue.ToEntero, TipoReporte, UsuarioActual.CveEmpresa, CveSubProyecto) Then + DtDatos = ObjConta.DtResultados + Else + DtDatos = Nothing + Alert("Ocurrio un error al cargar los datos del balance general anual", TipoMensaje.MsgError) + End If + ObjConta.Dispose() + + Anos = (Year(NowADS()) - DdlEjercicio.SelectedValue.ToEntero) + 1 + + 'Esconde todo + 'For index = 1 To 20 + ' GvDatosAnual.Columns(index).Visible = False + 'Next + + 'For index = 1 To Anos + ' GvDatosAnual.Columns(index).Visible = True + ' GvDatosAnual.Columns(index).HeaderText = (DdlEjercicio.SelectedValue.ToEntero + index - 1).ToString + 'Next + + If DtDatos IsNot Nothing Then + 'CargaGridAnual() + End If + End Sub + + 'Private Sub CargaGridAnual() + ' GvDatosAnual.DataSource = DtDatos + ' GvDatosAnual.DataBind() + ' UpDatosAnual.Update() + 'End Sub + + 'Protected Sub GvDatosAnual_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosAnual.RowDataBound + ' If e.Row.RowType = DataControlRowType.DataRow Then + + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Or e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then + ' For index = 1 To Anos + ' e.Row.FCHyperLink("HLAno" + index.ToString).Text = "" + ' Next + ' End If + + ' 'AGRUPADOR DE CUENTAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 4 Then + ' e.Row.FCLabel("LbNombre").Font.Bold = True + ' End If + + ' 'TITULO DE CUENTAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 5 Then + ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") + ' e.Row.FCLabel("LbNombre").Font.Italic = True + ' End If + + ' 'CUENTAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 1 Then + ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 20px;") + + ' For index = 1 To Anos + ' e.Row.FCHyperLink("HLAno" + index.ToString).NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&TP={3}&CveSubProyecto={4}", e.Row.DBCampo("CveCuenta"), String.Format("01/01/{0}", (DdlEjercicio.SelectedValue.ToEntero + index - 1).ToString), String.Format("31/12/{0}", (DdlEjercicio.SelectedValue.ToEntero + index - 1).ToString), TipoReporte, DdlSubproyecto.SelectedValue) + ' Next + + ' End If + + ' 'TOTALES + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then + ' e.Row.Attributes.Add("style", "border-top: 1px solid;") + ' e.Row.FCLabel("LbNombre").Attributes.Add("style", "padding-left: 10px;") + ' e.Row.FCLabel("LbNombre").Font.Italic = True + ' End If + + ' 'SUMAS + ' If e.Row.DBCampo("CtaMayor").ToString.ToEntero = 6 Then + ' e.Row.FCLabel("LbNombre").Font.Bold = True + ' End If + + ' End If + 'End Sub +#End Region + + + + Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) + + 'Nota: + ' 0 = Normal + ' 1 = Mensual + ' 2 = Anual + + 'If Tabs.ActiveTabIndex = 0 Then + + ' TotalActivoActual = 0 + ' TotalActivoAnterior = 0 + ' TotalPasivoActual = 0 + ' TotalPasivoAnterior = 0 + ' TotalPatrimonioActual = 0 + ' TotalPatrimonioAnterior = 0 + ' TotalPasivoPatrimonioActual = 0 + ' TotalPasivoPatrimonioAnterior = 0 + + ' CargaDatos() + + 'ElseIf Tabs.ActiveTabIndex = 1 Then + + ' CargaDatosMensual() + + 'ElseIf Tabs.ActiveTabIndex = 2 Then + + CargaDatosAnual() + + 'End If + + End Sub + + + + Protected Sub TabContainer_ActiveTabChanged(sender As Object, e As EventArgs) + + 'Nota: + ' 0 = Normal + ' 1 = Mensual + ' 2 = Anual + + 'Esconde Todo de lo variable de Filtros + TdSubTotales.Visible = False + TdPeriodo.Visible = False + + 'If Tabs.ActiveTabIndex = 0 Then + ' TdPeriodo.Visible = True + 'ElseIf Tabs.ActiveTabIndex = 1 Then + ' TdSubTotales.Visible = True + 'ElseIf Tabs.ActiveTabIndex = 2 Then + + 'End If + + UpFiltros.Update() + + BtnConsultar_Click(BtnConsultar, EventArgs.Empty) + + End Sub + + Protected Sub ImgExcel_Click(sender As Object, e As EventArgs) Handles ImgExcel.Click + ImprimirReporte("Excel") + End Sub + + Protected Sub Imprimir_click(sender As Object, e As EventArgs) Handles Imprimir.Click + 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) + Dim ObjConta As New ClsContabilidad + Dim FechaI = String.Format("01/{0}/{1}", DdlPeriodo.SelectedValue.PadLeft(2, CChar("0")), DdlEjercicio.SelectedValue) + Dim FechaF = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaI))).ToString("dd/MM/yyyy") + + 'If ChkFirma.Checked = True Then + + ' Dim Row As DataRow = DtDatos.NewRow + ' Row.Item("Nombre") = String.Format("C.P. Izelda Angulo Peraza{0} Subdirector de contabilidad", "") + ' Row.Item("Sup") = String.Format("Lic. Juan Fortino Leon Robinson{0} Director General", "") + ' Row.Item("ImporteActual") = "0" + ' Row.Item("ImporteAnterior") = "0" + ' Row.Item("Tipo") = "Firma" + ' DtDatos.Rows.Add(Row) + 'End If + Dim CveSubProyecto As String = DdlSubproyecto.SelectedValue.ToString + If ObjConta.GetSituacionFinanciera("01/01/1000".ToDate, FechaF.ToDate, UsuarioActual.CveEmpresa, CveSubProyecto, TipoReporte) Then + DtDatos = ObjConta.DtResultados + For Each row As DataRow In DtDatos.Rows + If row("Level").ToString = "0" Then + row("Sup") = "" + Else + If row("Tipo").ToString = "A" OrElse row("Tipo").ToString = "B" OrElse row("Tipo").ToString = "C" Then + If row("Sup").ToString = "ACTIVO CIRCULANTE" OrElse row("Nombre").ToString = "ACTIVO CIRCULANTE" OrElse row("Sup").ToString = "CIRCULANTE" OrElse row("Nombre").ToString = "CIRCULANTE" Then + row("Sup") = "ACTIVO CIRCULANTE" + Else + If row("Sup").ToString = "ACTIVO NO CIRCULANTE" OrElse row("Nombre").ToString = "ACTIVO NO CIRCULANTE" OrElse row("Sup").ToString = "FIJO" OrElse row("Nombre").ToString = "FIJO" Then + row("Sup") = "ACTIVO NO CIRCULANTE" + Else + If row("Sup").ToString = "DIFERIDO" OrElse row("Nombre").ToString = "DIFERIDO" Then + row("Sup") = "DIFERIDO" + Else + row("Sup") = "" + End If + End If + End If + Else + If row("Tipo").ToString = "D" Then + If row("Sup").ToString = "PASIVO CIRCULANTE" OrElse row("Nombre").ToString = "PASIVO CIRCULANTE" OrElse row("Sup").ToString = "CIRCULANTE" OrElse row("Nombre").ToString = "CIRCULANTE" OrElse row("Sup").ToString = "PASIVO" OrElse row("Nombre").ToString = "PASIVO" OrElse row("Sup").ToString = "CORTO PLAZO" OrElse row("Nombre").ToString = "CORTO PLAZO" Then + row("Sup") = "PASIVO CIRCULANTE" + Else + If row("Sup").ToString = "PASIVO NO CIRCULANTE" OrElse row("Nombre").ToString = "PASIVO NO CIRCULANTE" OrElse row("Sup").ToString = "LARGO PLAZO" OrElse row("Nombre").ToString = "LARGO PLAZO" Then + row("Sup") = "PASIVO NO CIRCULANTE" + Else + If row("Sup").ToString = "DIFERIDO" OrElse row("Nombre").ToString = "DIFERIDO" Then + row("Sup") = "DIFERIDO" + Else + row("Sup") = "" + End If + End If + End If + Else + If row("Tipo").ToString = "F" Then ' + If row("Sup").ToString = "CAPITAL" OrElse row("Nombre").ToString = "CAPITAL" OrElse row("Sup").ToString = "CAPITAL CONTABLEE" OrElse row("Nombre").ToString = "CAPITAL CONTABLE" OrElse row("Sup").ToString = "PATRIMONIO CONTRIBUIDO" OrElse row("Nombre").ToString = "PATRIMONIO CONTRIBUIDO" Then + row("Sup") = "CAPITAL" + Else + row("Sup") = "" + End If + Else + row("Sup") = "" + End If + End If + End If + End If + Next + DtDatos.AcceptChanges() + + ImprimirReporte() + Else + DtDatos = Nothing + Alert("Ocurrio un error al cargar los datos del estado de situación financiera", TipoMensaje.MsgError) + End If + ObjConta.Dispose() + End Sub + + + Private Sub ImprimirReporte(Optional Formato As String = "PDF") + Dim FechaI = String.Format("01/{0}/{1}", DdlPeriodo.SelectedValue.PadLeft(2, CChar("0")), DdlEjercicio.SelectedValue) + Dim FechaF = DateAdd(DateInterval.Day, -1, DateAdd(DateInterval.Month, 1, CDate(FechaI))).ToString("dd/MM/yyyy") + 'nombre del archivo a generar + Dim fileName As String = "BalanceGeneral" + 'ubicacion del rdlc + Dim reportpath As String = "Contabilidad/Reportes/RepBalanceGeneral.rdlc" + + 'parametros a enviar al reporte + Dim params As New List(Of ReportParameter) + params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) + Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") + params.Add(New ReportParameter("pImg", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) + params.Add(New ReportParameter("pFirma1", "")) + params.Add(New ReportParameter("pFirma2", "")) + params.Add(New ReportParameter("pFechaFin", FechaF)) + ImprimirPDF(reportpath, DtDatos, params, fileName, Formato) + End Sub + +End Class \ No newline at end of file diff --git a/RH/CatChecadores.aspx.cs b/RH/CatChecadores.aspx.cs index 0f7a964db..7575f4543 100644 --- a/RH/CatChecadores.aspx.cs +++ b/RH/CatChecadores.aspx.cs @@ -38,13 +38,11 @@ public partial class RH_CatChecadores : ClsPaginas if (ObjRH.GetChecadores(-1, UsuarioActual.CveEmpresa)) { GvDatos.DataSource = ObjRH.DtResultados; - //if (ObjRH.DtResultados.Rows.Count > 0 && GvDatos.HeaderRow.Cells != null) - //{ GvDatos.HeaderRow.Cells[1].Text = LblSubProyecto.Text; } } ObjRH.Dispose(); GvDatos.DataBind(); - // if ( GvDatos.DataSource != null) { GvDatos.HeaderRow.Cells[1].Text = LblSubProyecto.Text; } + GvDatos.HeaderRow.Cells[1].Text = LblSubProyecto.Text; } private void CargaSubProyectos() diff --git a/Scripts/Notificaciones.js b/Scripts/Notificaciones.js index b18f8a54e..ea40c5c57 100644 --- a/Scripts/Notificaciones.js +++ b/Scripts/Notificaciones.js @@ -1,25 +1,39 @@  var NotificacionesADS = function () { var VentanaConConexion = false; - const valueok = "1"; - function initherramientas() { + + let nointentos = 0; + const maxintentos = 4; + var wNum; + const valueok = "1"; + const AdsNotificacionesReconected = "AdsNotificacionesReconected"; + const Windownumber = "ADSWindownumber"; + const AdsNotificacionesIsConnected = "AdsNotificacionesIsConnected"; + function initherramientas() { if (("Notification" in window)) { if (Notification.permission !== 'denied') { Notification.requestPermission(function (permission) { // If the user accepts, let's create a notification - if (permission === "granted") { - } + //if (permission === "granted") { + //} }); } } } //-------------------------------------------------------------------- Eventos ---------------------------------------------------------------------- - var AlertaVentana = function (Titulo, Mensaje, Tipo, timeoutseconds,Opciones) { + var AlertaVentana = function (Titulo, Mensaje, Tipo, timeoutseconds, Opciones) { console.log(Mensaje); - let obj = { metodo: "AlertaVentana", titulo: Titulo, mensaje: Mensaje, timeout: timeoutseconds, tipo: Tipo, opciones: Opciones, tick: (new Date()).getTime() } + let obj = { metodo: "AlertaVentana", titulo: Titulo, mensaje: Mensaje, timeout: timeoutseconds, tipo: Tipo, opciones: Opciones, tick: (new Date()).getTime() }; let myjson = JSON.stringify(obj); localStorage.setItem("ADSNotificaciones", myjson); - execAlertaVentana(obj); + execAlertaVentana(obj); + }; + function Execstring(script) { + try { + eval(script); + } catch (e) { + console.error('(SignalR) ErrorScript \'' + script + '\''); + } } var execAlertaVentana = function (obj) { console.log(obj); @@ -42,7 +56,7 @@ var NotificacionesADS = function () { //}); let Mensaje = obj.mensaje; let titulo = obj.titulo; - let timeout = obj.timeout; + let timeout = obj.timeout; if (timeout) { timeout = timeout * 1000;//convierto a milisegundos } else { timeout = 0; } @@ -60,7 +74,7 @@ var NotificacionesADS = function () { "showMethod": "fadeIn", "hideMethod": "fadeOut" - } + }; switch (obj.tipo) { case 5: @@ -79,70 +93,95 @@ var NotificacionesADS = function () { toastr.warning(Mensaje, titulo, opciones); } } - } + }; //-------------------------------------------------------------------- EndEventos ---------------------------------------------------------------------- function closeopenConexion() { - let varreconected = localStorage.getItem("AdsNotificacionesReconected"); - localStorage.removeItem("AdsNotificacionesIsConnected"); - if (varreconected == "1") { - localStorage.removeItem("AdsNotificacionesReconected"); - } else { localStorage.setItem("AdsNotificacionesReconected", "1"); } + if (VentanaConConexion) { + localStorage.removeItem(AdsNotificacionesIsConnected); + + let varreconected = localStorage.getItem(AdsNotificacionesReconected);//obtengo la variable para cambiarla y dispara el evento local change + if (varreconected === "1") { + localStorage.removeItem(AdsNotificacionesReconected); + } else { localStorage.setItem(AdsNotificacionesReconected, "1"); } + } + nointentos = maxintentos; } function beforeunloadcloseopenConexion(e) { - closeopenConexion() + closeopenConexion(); } - function loadConection() { - // VentanaConConexion = true; - //localStorage.setItem("AdsNotificacionesIsConnected", valueok); - //if ($.connection) { - // let nointentos =0 - // var proxy = $.connection.notificaciones; - // /*$.connection.hub.url = '/signalr';*/ - // $.connection.hub.disconnected(function () { - // setTimeout(function () { nointentos = nointentos + 1; if (nointentos < 4) { $.connection.hub.start().done(function () { nointentos = 0 }); console.log('Reconected'); } }, 120000); - // }); + function loadConection() { + VentanaConConexion = true; + localStorage.setItem(AdsNotificacionesIsConnected, valueok); + if ($.connection) { + var proxy = $.connection.notificaciones; + /*$.connection.hub.url = '/signalr';*/ + $.connection.hub.disconnected(function () { + console.log(' (SignalR) diconnected'); + signalrconectionStar(1200); + }); - // proxy.client.AlertaVentana = AlertaVentana; + proxy.client.AlertaVentana = AlertaVentana; - // $.connection.hub.start().done(function () { - // console.log('Bienvenido'); - // }); - //} else { - // console.error('Signal Error (no se encontro $.connection)'); + proxy.client.Execstring = Execstring; + + signalrconectionStar(1200); - //} - //window.addEventListener("beforeunload", beforeunloadcloseopenConexion); - } - function initConnection() { - let isconnected = localStorage.getItem("AdsNotificacionesIsConnected"); - if (isconnected == valueok) { } else { - loadConection() + console.error('(SignalR) Error :\'no se encontro $.connection\''); + + } + window.addEventListener("beforeunload", beforeunloadcloseopenConexion); + } + function signalrconectionStar(TimeOut) { + + setTimeout(function () { + nointentos = nointentos + 1; + if (nointentos < maxintentos) { + $.connection.hub.start().done(function () { console.log('(SignalR)Bienvenido'); nointentos = 0; }) + .fail(function () { console.log(' (SignalR) no conectado (Intento:' + nointentos + ')'); signalrconectionStar(12000); }); + } + }, TimeOut); + } + function initConnection() { + let isconnected = localStorage.getItem(AdsNotificacionesIsConnected); + + + if (isconnected !== valueok) { + loadConection(); + } else { + console.log('is some there conected (' + wNum+')'); } } - - function handlelocalstorage() { + function handlelocalstorage() { window.addEventListener('storage', function (evt) { - if (evt.key == "ADSNotificaciones") { + if (evt.key === "ADSNotificaciones") { + /// + x = 1; } switch (evt.key + "") { + case 'ADSCloseConection': + closeopenConexion(); + $.connection.hub.stop().done(function () { + console.log('stopped'); + }); + break; case 'AdsNotificacionesReconected': if (!VentanaConConexion) { - setTimeout(function () { initConnection() }, 5000) + setTimeout(function () { initConnection(); }, (wNum * 200)); } else { - window.removeEventListener("beforeunload", beforeunloadcloseopenConexion) + window.removeEventListener("beforeunload", beforeunloadcloseopenConexion); } break; case 'ADSNotificaciones': try { let obj = JSON.parse(evt.newValue); - if (obj && obj.metodo == "AlertaVentana") { + if (obj && obj.metodo === "AlertaVentana") { execAlertaVentana(obj); } } catch (e) { - console.error(e) + console.error(e); } break; } @@ -152,6 +191,11 @@ var NotificacionesADS = function () { return { init: function () { + + wNum = parseInt(localStorage.getItem(Windownumber)); + if (isNaN(wNum) || (wNum > 50)) { wNum = 12; } + wNum = wNum + 1; + localStorage.setItem(Windownumber, wNum); initherramientas(); handlelocalstorage(); initConnection(); diff --git a/Scripts/jquery-3.7.1.intellisense.js b/Scripts/jquery-3.7.1.intellisense.js deleted file mode 100644 index a88b6c6e3..000000000 --- a/Scripts/jquery-3.7.1.intellisense.js +++ /dev/null @@ -1,2670 +0,0 @@ -intellisense.annotate(jQuery, { - 'ajax': function() { - /// - /// Perform an asynchronous HTTP (Ajax) request. - /// A string containing the URL to which the request is sent. - /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. - /// - /// - /// - /// Perform an asynchronous HTTP (Ajax) request. - /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). - /// - /// - }, - 'ajaxPrefilter': function() { - /// - /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). - /// An optional string containing one or more space-separated dataTypes - /// A handler to set default values for future Ajax requests. - /// - }, - 'ajaxSetup': function() { - /// - /// Set default values for future Ajax requests. Its use is not recommended. - /// A set of key/value pairs that configure the default Ajax request. All options are optional. - /// - }, - 'ajaxTransport': function() { - /// - /// Creates an object that handles the actual transmission of Ajax data. - /// A string identifying the data type to use - /// A handler to return the new transport object to use with the data type provided in the first argument. - /// - }, - 'boxModel': function() { - /// Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model. - /// - }, - 'browser': function() { - /// Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead. - /// - }, - 'browser.version': function() { - /// The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. - /// - }, - 'Callbacks': function() { - /// - /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. - /// An optional list of space-separated flags that change how the callback list behaves. - /// - /// - }, - 'contains': function() { - /// - /// Check to see if a DOM element is a descendant of another DOM element. - /// The DOM element that may contain the other element. - /// The DOM element that may be contained by (a descendant of) the other element. - /// - /// - }, - 'cssHooks': function() { - /// Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties. - /// - }, - 'data': function() { - /// - /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. - /// The DOM element to query for the data. - /// Name of the data stored. - /// - /// - /// - /// Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. - /// The DOM element to query for the data. - /// - /// - }, - 'Deferred': function() { - /// - /// A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function. - /// A function that is called just before the constructor returns. - /// - /// - }, - 'dequeue': function() { - /// - /// Execute the next function on the queue for the matched element. - /// A DOM element from which to remove and execute a queued function. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - }, - 'each': function() { - /// - /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. - /// The object or array to iterate over. - /// The function that will be executed on every object. - /// - /// - }, - 'error': function() { - /// - /// Takes a string and throws an exception containing it. - /// The message to send out. - /// - }, - 'extend': function() { - /// - /// Merge the contents of two or more objects together into the first object. - /// An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument. - /// An object containing additional properties to merge in. - /// Additional objects containing properties to merge in. - /// - /// - /// - /// Merge the contents of two or more objects together into the first object. - /// If true, the merge becomes recursive (aka. deep copy). - /// The object to extend. It will receive the new properties. - /// An object containing additional properties to merge in. - /// Additional objects containing properties to merge in. - /// - /// - }, - 'fn.extend': function() { - /// - /// Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods. - /// An object to merge onto the jQuery prototype. - /// - /// - }, - 'get': function() { - /// - /// Load data from the server using a HTTP GET request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. - /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). - /// - /// - }, - 'getJSON': function() { - /// - /// Load JSON-encoded data from the server using a GET HTTP request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. - /// - /// - }, - 'getScript': function() { - /// - /// Load a JavaScript file from the server using a GET HTTP request, then execute it. - /// A string containing the URL to which the request is sent. - /// A callback function that is executed if the request succeeds. - /// - /// - }, - 'globalEval': function() { - /// - /// Execute some JavaScript code globally. - /// The JavaScript code to execute. - /// - }, - 'grep': function() { - /// - /// Finds the elements of an array which satisfy a filter function. The original array is not affected. - /// The array to search through. - /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. - /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. - /// - /// - }, - 'hasData': function() { - /// - /// Determine whether an element has any jQuery data associated with it. - /// A DOM element to be checked for data. - /// - /// - }, - 'holdReady': function() { - /// - /// Holds or releases the execution of jQuery's ready event. - /// Indicates whether the ready hold is being requested or released - /// - }, - 'inArray': function() { - /// - /// Search for a specified value within an array and return its index (or -1 if not found). - /// The value to search for. - /// An array through which to search. - /// The index of the array at which to begin the search. The default is 0, which will search the whole array. - /// - /// - }, - 'isArray': function() { - /// - /// Determine whether the argument is an array. - /// Object to test whether or not it is an array. - /// - /// - }, - 'isEmptyObject': function() { - /// - /// Check to see if an object is empty (contains no enumerable properties). - /// The object that will be checked to see if it's empty. - /// - /// - }, - 'isFunction': function() { - /// - /// Determine if the argument passed is a Javascript function object. - /// Object to test whether or not it is a function. - /// - /// - }, - 'isNumeric': function() { - /// - /// Determines whether its argument is a number. - /// The value to be tested. - /// - /// - }, - 'isPlainObject': function() { - /// - /// Check to see if an object is a plain object (created using "{}" or "new Object"). - /// The object that will be checked to see if it's a plain object. - /// - /// - }, - 'isWindow': function() { - /// - /// Determine whether the argument is a window. - /// Object to test whether or not it is a window. - /// - /// - }, - 'isXMLDoc': function() { - /// - /// Check to see if a DOM node is within an XML document (or is an XML document). - /// The DOM node that will be checked to see if it's in an XML document. - /// - /// - }, - 'makeArray': function() { - /// - /// Convert an array-like object into a true JavaScript array. - /// Any object to turn into a native Array. - /// - /// - }, - 'map': function() { - /// - /// Translate all items in an array or object to new array of items. - /// The Array to translate. - /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. - /// - /// - /// - /// Translate all items in an array or object to new array of items. - /// The Array or Object to translate. - /// The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object. - /// - /// - }, - 'merge': function() { - /// - /// Merge the contents of two arrays together into the first array. - /// The first array to merge, the elements of second added. - /// The second array to merge into the first, unaltered. - /// - /// - }, - 'noConflict': function() { - /// - /// Relinquish jQuery's control of the $ variable. - /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). - /// - /// - }, - 'noop': function() { - /// An empty function. - }, - 'now': function() { - /// Return a number representing the current time. - /// - }, - 'param': function() { - /// - /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. - /// An array or object to serialize. - /// - /// - /// - /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. - /// An array or object to serialize. - /// A Boolean indicating whether to perform a traditional "shallow" serialization. - /// - /// - }, - 'parseHTML': function() { - /// - /// Parses a string into an array of DOM nodes. - /// HTML string to be parsed - /// Document element to serve as the context in which the HTML fragment will be created - /// A Boolean indicating whether to include scripts passed in the HTML string - /// - /// - }, - 'parseJSON': function() { - /// - /// Takes a well-formed JSON string and returns the resulting JavaScript object. - /// The JSON string to parse. - /// - /// - }, - 'parseXML': function() { - /// - /// Parses a string into an XML document. - /// a well-formed XML string to be parsed - /// - /// - }, - 'post': function() { - /// - /// Load data from the server using a HTTP POST request. - /// A string containing the URL to which the request is sent. - /// A plain object or string that is sent to the server with the request. - /// A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case. - /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). - /// - /// - }, - 'proxy': function() { - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The function whose context will be changed. - /// The object to which the context (this) of the function should be set. - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The object to which the context of the function should be set. - /// The name of the function whose context will be changed (should be a property of the context object). - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The function whose context will be changed. - /// The object to which the context (this) of the function should be set. - /// Any number of arguments to be passed to the function referenced in the function argument. - /// - /// - /// - /// Takes a function and returns a new one that will always have a particular context. - /// The object to which the context of the function should be set. - /// The name of the function whose context will be changed (should be a property of the context object). - /// Any number of arguments to be passed to the function named in the name argument. - /// - /// - }, - 'queue': function() { - /// - /// Manipulate the queue of functions to be executed on the matched element. - /// A DOM element where the array of queued functions is attached. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// An array of functions to replace the current queue contents. - /// - /// - /// - /// Manipulate the queue of functions to be executed on the matched element. - /// A DOM element on which to add a queued function. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// The new function to add to the queue. - /// - /// - }, - 'removeData': function() { - /// - /// Remove a previously-stored piece of data. - /// A DOM element from which to remove data. - /// A string naming the piece of data to remove. - /// - /// - }, - 'sub': function() { - /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. - /// - }, - 'support': function() { - /// A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance. - /// - }, - 'trim': function() { - /// - /// Remove the whitespace from the beginning and end of a string. - /// The string to trim. - /// - /// - }, - 'type': function() { - /// - /// Determine the internal JavaScript [[Class]] of an object. - /// Object to get the internal JavaScript [[Class]] of. - /// - /// - }, - 'unique': function() { - /// - /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. - /// The Array of DOM elements. - /// - /// - }, - 'when': function() { - /// - /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. - /// One or more Deferred objects, or plain JavaScript objects. - /// - /// - }, -}); - -var _1228819969 = jQuery.Callbacks; -jQuery.Callbacks = function(flags) { -var _object = _1228819969(flags); -intellisense.annotate(_object, { - 'add': function() { - /// - /// Add a callback or a collection of callbacks to a callback list. - /// A function, or array of functions, that are to be added to the callback list. - /// - /// - }, - 'disable': function() { - /// Disable a callback list from doing anything more. - /// - }, - 'disabled': function() { - /// Determine if the callbacks list has been disabled. - /// - }, - 'empty': function() { - /// Remove all of the callbacks from a list. - /// - }, - 'fire': function() { - /// - /// Call all of the callbacks with the given arguments - /// The argument or list of arguments to pass back to the callback list. - /// - /// - }, - 'fired': function() { - /// Determine if the callbacks have already been called at least once. - /// - }, - 'fireWith': function() { - /// - /// Call all callbacks in a list with the given context and arguments. - /// A reference to the context in which the callbacks in the list should be fired. - /// An argument, or array of arguments, to pass to the callbacks in the list. - /// - /// - }, - 'has': function() { - /// - /// Determine whether a supplied callback is in a list - /// The callback to search for. - /// - /// - }, - 'lock': function() { - /// Lock a callback list in its current state. - /// - }, - 'locked': function() { - /// Determine if the callbacks list has been locked. - /// - }, - 'remove': function() { - /// - /// Remove a callback or a collection of callbacks from a callback list. - /// A function, or array of functions, that are to be removed from the callback list. - /// - /// - }, -}); - -return _object; -}; -intellisense.redirectDefinition(jQuery.Callbacks, _1228819969); - -var _731531622 = jQuery.Deferred; -jQuery.Deferred = function(func) { -var _object = _731531622(func); -intellisense.annotate(_object, { - 'always': function() { - /// - /// Add handlers to be called when the Deferred object is either resolved or rejected. - /// A function, or array of functions, that is called when the Deferred is resolved or rejected. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected. - /// - /// - }, - 'done': function() { - /// - /// Add handlers to be called when the Deferred object is resolved. - /// A function, or array of functions, that are called when the Deferred is resolved. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is resolved. - /// - /// - }, - 'fail': function() { - /// - /// Add handlers to be called when the Deferred object is rejected. - /// A function, or array of functions, that are called when the Deferred is rejected. - /// Optional additional functions, or arrays of functions, that are called when the Deferred is rejected. - /// - /// - }, - 'isRejected': function() { - /// Determine whether a Deferred object has been rejected. - /// - }, - 'isResolved': function() { - /// Determine whether a Deferred object has been resolved. - /// - }, - 'notify': function() { - /// - /// Call the progressCallbacks on a Deferred object with the given args. - /// Optional arguments that are passed to the progressCallbacks. - /// - /// - }, - 'notifyWith': function() { - /// - /// Call the progressCallbacks on a Deferred object with the given context and args. - /// Context passed to the progressCallbacks as the this object. - /// Optional arguments that are passed to the progressCallbacks. - /// - /// - }, - 'pipe': function() { - /// - /// Utility method to filter and/or chain Deferreds. - /// An optional function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// - /// - /// - /// Utility method to filter and/or chain Deferreds. - /// An optional function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// An optional function that is called when progress notifications are sent to the Deferred. - /// - /// - }, - 'progress': function() { - /// - /// Add handlers to be called when the Deferred object generates progress notifications. - /// A function, or array of functions, to be called when the Deferred generates progress notifications. - /// - /// - }, - 'promise': function() { - /// - /// Return a Deferred's Promise object. - /// Object onto which the promise methods have to be attached - /// - /// - }, - 'reject': function() { - /// - /// Reject a Deferred object and call any failCallbacks with the given args. - /// Optional arguments that are passed to the failCallbacks. - /// - /// - }, - 'rejectWith': function() { - /// - /// Reject a Deferred object and call any failCallbacks with the given context and args. - /// Context passed to the failCallbacks as the this object. - /// An optional array of arguments that are passed to the failCallbacks. - /// - /// - }, - 'resolve': function() { - /// - /// Resolve a Deferred object and call any doneCallbacks with the given args. - /// Optional arguments that are passed to the doneCallbacks. - /// - /// - }, - 'resolveWith': function() { - /// - /// Resolve a Deferred object and call any doneCallbacks with the given context and args. - /// Context passed to the doneCallbacks as the this object. - /// An optional array of arguments that are passed to the doneCallbacks. - /// - /// - }, - 'state': function() { - /// Determine the current state of a Deferred object. - /// - }, - 'then': function() { - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function that is called when the Deferred is resolved. - /// An optional function that is called when the Deferred is rejected. - /// An optional function that is called when progress notifications are sent to the Deferred. - /// - /// - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function, or array of functions, called when the Deferred is resolved. - /// A function, or array of functions, called when the Deferred is rejected. - /// - /// - /// - /// Add handlers to be called when the Deferred object is resolved, rejected, or still in progress. - /// A function, or array of functions, called when the Deferred is resolved. - /// A function, or array of functions, called when the Deferred is rejected. - /// A function, or array of functions, called when the Deferred notifies progress. - /// - /// - }, -}); - -return _object; -}; -intellisense.redirectDefinition(jQuery.Callbacks, _731531622); - -intellisense.annotate(jQuery.Event.prototype, { - 'currentTarget': function() { - /// The current DOM element within the event bubbling phase. - /// - }, - 'data': function() { - /// An optional object of data passed to an event method when the current executing handler is bound. - /// - }, - 'delegateTarget': function() { - /// The element where the currently-called jQuery event handler was attached. - /// - }, - 'isDefaultPrevented': function() { - /// Returns whether event.preventDefault() was ever called on this event object. - /// - }, - 'isImmediatePropagationStopped': function() { - /// Returns whether event.stopImmediatePropagation() was ever called on this event object. - /// - }, - 'isPropagationStopped': function() { - /// Returns whether event.stopPropagation() was ever called on this event object. - /// - }, - 'metaKey': function() { - /// Indicates whether the META key was pressed when the event fired. - /// - }, - 'namespace': function() { - /// The namespace specified when the event was triggered. - /// - }, - 'pageX': function() { - /// The mouse position relative to the left edge of the document. - /// - }, - 'pageY': function() { - /// The mouse position relative to the top edge of the document. - /// - }, - 'preventDefault': function() { - /// If this method is called, the default action of the event will not be triggered. - }, - 'relatedTarget': function() { - /// The other DOM element involved in the event, if any. - /// - }, - 'result': function() { - /// The last value returned by an event handler that was triggered by this event, unless the value was undefined. - /// - }, - 'stopImmediatePropagation': function() { - /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. - }, - 'stopPropagation': function() { - /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. - }, - 'target': function() { - /// The DOM element that initiated the event. - /// - }, - 'timeStamp': function() { - /// The difference in milliseconds between the time the browser created the event and January 1, 1970. - /// - }, - 'type': function() { - /// Describes the nature of the event. - /// - }, - 'which': function() { - /// For key or mouse events, this property indicates the specific key or button that was pressed. - /// - }, -}); - -intellisense.annotate(jQuery.fn, { - 'add': function() { - /// - /// Add elements to the set of matched elements. - /// A string representing a selector expression to find additional elements to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// One or more elements to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// An HTML fragment to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// An existing jQuery object to add to the set of matched elements. - /// - /// - /// - /// Add elements to the set of matched elements. - /// A string representing a selector expression to find additional elements to add to the set of matched elements. - /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. - /// - /// - }, - 'addBack': function() { - /// - /// Add the previous set of elements on the stack to the current set, optionally filtered by a selector. - /// A string containing a selector expression to match the current set of elements against. - /// - /// - }, - 'addClass': function() { - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// One or more space-separated classes to be added to the class attribute of each matched element. - /// - /// - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'after': function() { - /// - /// Insert content, specified by the parameter, after each element in the set of matched elements. - /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, after each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'ajaxComplete': function() { - /// - /// Register a handler to be called when Ajax requests complete. This is an AjaxEvent. - /// The function to be invoked. - /// - /// - }, - 'ajaxError': function() { - /// - /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxSend': function() { - /// - /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxStart': function() { - /// - /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxStop': function() { - /// - /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'ajaxSuccess': function() { - /// - /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. - /// The function to be invoked. - /// - /// - }, - 'all': function() { - /// Selects all elements. - }, - 'andSelf': function() { - /// Add the previous set of elements on the stack to the current set. - /// - }, - 'animate': function() { - /// - /// Perform a custom animation of a set of CSS properties. - /// An object of CSS properties and values that the animation will move toward. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Perform a custom animation of a set of CSS properties. - /// An object of CSS properties and values that the animation will move toward. - /// A map of additional options to pass to the method. - /// - /// - }, - 'animated': function() { - /// Select all elements that are in the progress of an animation at the time the selector is run. - }, - 'append': function() { - /// - /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. - /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'appendTo': function() { - /// - /// Insert every element in the set of matched elements to the end of the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. - /// - /// - }, - 'attr': function() { - /// - /// Set one or more attributes for the set of matched elements. - /// The name of the attribute to set. - /// A value to set for the attribute. - /// - /// - /// - /// Set one or more attributes for the set of matched elements. - /// An object of attribute-value pairs to set. - /// - /// - /// - /// Set one or more attributes for the set of matched elements. - /// The name of the attribute to set. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments. - /// - /// - }, - 'attributeContains': function() { - /// - /// Selects elements that have the specified attribute with a value containing the a given substring. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeContainsPrefix': function() { - /// - /// Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-). - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeContainsWord': function() { - /// - /// Selects elements that have the specified attribute with a value containing a given word, delimited by spaces. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeEndsWith': function() { - /// - /// Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeEquals': function() { - /// - /// Selects elements that have the specified attribute with a value exactly equal to a certain value. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeHas': function() { - /// - /// Selects elements that have the specified attribute, with any value. - /// An attribute name. - /// - }, - 'attributeMultiple': function() { - /// - /// Matches elements that match all of the specified attribute filters. - /// An attribute filter. - /// Another attribute filter, reducing the selection even more - /// As many more attribute filters as necessary - /// - }, - 'attributeNotEqual': function() { - /// - /// Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'attributeStartsWith': function() { - /// - /// Selects elements that have the specified attribute with a value beginning exactly with a given string. - /// An attribute name. - /// An attribute value. Can be either an unquoted single word or a quoted string. - /// - }, - 'before': function() { - /// - /// Insert content, specified by the parameter, before each element in the set of matched elements. - /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, before each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'bind': function() { - /// - /// Attach a handler to an event for the elements. - /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Attach a handler to an event for the elements. - /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true. - /// - /// - /// - /// Attach a handler to an event for the elements. - /// An object containing one or more DOM event types and functions to execute for them. - /// - /// - }, - 'blur': function() { - /// - /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'button': function() { - /// Selects all button elements and elements of type button. - }, - 'change': function() { - /// - /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'checkbox': function() { - /// Selects all elements of type checkbox. - }, - 'checked': function() { - /// Matches all elements that are checked or selected. - }, - 'child': function() { - /// - /// Selects all direct child elements specified by "child" of elements specified by "parent". - /// Any valid selector. - /// A selector to filter the child elements. - /// - }, - 'children': function() { - /// - /// Get the children of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'class': function() { - /// - /// Selects all elements with the given class. - /// A class to search for. An element can have multiple classes; only one of them must match. - /// - }, - 'clearQueue': function() { - /// - /// Remove from the queue all items that have not yet been run. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'click': function() { - /// - /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'clone': function() { - /// - /// Create a deep copy of the set of matched elements. - /// A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well. - /// - /// - /// - /// Create a deep copy of the set of matched elements. - /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. - /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). - /// - /// - }, - 'closest': function() { - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A string containing a selector expression to match elements against. - /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// A jQuery object to match elements against. - /// - /// - /// - /// For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. - /// An element to match elements against. - /// - /// - }, - 'contains': function() { - /// - /// Select all elements that contain the specified text. - /// A string of text to look for. It's case sensitive. - /// - }, - 'contents': function() { - /// Get the children of each element in the set of matched elements, including text and comment nodes. - /// - }, - 'context': function() { - /// The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. - /// - }, - 'css': function() { - /// - /// Set one or more CSS properties for the set of matched elements. - /// A CSS property name. - /// A value to set for the property. - /// - /// - /// - /// Set one or more CSS properties for the set of matched elements. - /// A CSS property name. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. - /// - /// - /// - /// Set one or more CSS properties for the set of matched elements. - /// An object of property-value pairs to set. - /// - /// - }, - 'data': function() { - /// - /// Store arbitrary data associated with the matched elements. - /// A string naming the piece of data to set. - /// The new data value; it can be any Javascript type including Array or Object. - /// - /// - /// - /// Store arbitrary data associated with the matched elements. - /// An object of key-value pairs of data to update. - /// - /// - }, - 'dblclick': function() { - /// - /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'delay': function() { - /// - /// Set a timer to delay execution of subsequent items in the queue. - /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'delegate': function() { - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. - /// A selector to filter the elements that trigger the event. - /// A plain object of one or more event types and functions to execute for them. - /// - /// - }, - 'dequeue': function() { - /// - /// Execute the next function on the queue for the matched elements. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// - /// - }, - 'descendant': function() { - /// - /// Selects all elements that are descendants of a given ancestor. - /// Any valid selector. - /// A selector to filter the descendant elements. - /// - }, - 'detach': function() { - /// - /// Remove the set of matched elements from the DOM. - /// A selector expression that filters the set of matched elements to be removed. - /// - /// - }, - 'die': function() { - /// - /// Remove event handlers previously attached using .live() from the elements. - /// A string containing a JavaScript event type, such as click or keydown. - /// The function that is no longer to be executed. - /// - /// - /// - /// Remove event handlers previously attached using .live() from the elements. - /// A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed. - /// - /// - }, - 'disabled': function() { - /// Selects all elements that are disabled. - }, - 'each': function() { - /// - /// Iterate over a jQuery object, executing a function for each matched element. - /// A function to execute for each matched element. - /// - /// - }, - 'element': function() { - /// - /// Selects all elements with the given tag name. - /// An element to search for. Refers to the tagName of DOM nodes. - /// - }, - 'empty': function() { - /// Select all elements that have no children (including text nodes). - }, - 'enabled': function() { - /// Selects all elements that are enabled. - }, - 'end': function() { - /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. - /// - }, - 'eq': function() { - /// - /// Select the element at index n within the matched set. - /// Zero-based index of the element to match. - /// - /// - /// Select the element at index n within the matched set. - /// Zero-based index of the element to match, counting backwards from the last element. - /// - }, - 'error': function() { - /// - /// Bind an event handler to the "error" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "error" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'even': function() { - /// Selects even elements, zero-indexed. See also odd. - }, - 'fadeIn': function() { - /// - /// Display the matched elements by fading them to opaque. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements by fading them to opaque. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements by fading them to opaque. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeOut': function() { - /// - /// Hide the matched elements by fading them to transparent. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements by fading them to transparent. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements by fading them to transparent. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeTo': function() { - /// - /// Adjust the opacity of the matched elements. - /// A string or number determining how long the animation will run. - /// A number between 0 and 1 denoting the target opacity. - /// A function to call once the animation is complete. - /// - /// - /// - /// Adjust the opacity of the matched elements. - /// A string or number determining how long the animation will run. - /// A number between 0 and 1 denoting the target opacity. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'fadeToggle': function() { - /// - /// Display or hide the matched elements by animating their opacity. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements by animating their opacity. - /// A map of additional options to pass to the method. - /// - /// - }, - 'file': function() { - /// Selects all elements of type file. - }, - 'filter': function() { - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// A string containing a selector expression to match the current set of elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// A function used as a test for each element in the set. this is the current DOM element. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// An element to match the current set of elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that match the selector or pass the function's test. - /// An existing jQuery object to match the current set of elements against. - /// - /// - }, - 'find': function() { - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// A jQuery object to match elements against. - /// - /// - /// - /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. - /// An element to match elements against. - /// - /// - }, - 'finish': function() { - /// - /// Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements. - /// The name of the queue in which to stop animations. - /// - /// - }, - 'first': function() { - /// Selects the first matched element. - }, - 'first-child': function() { - /// Selects all elements that are the first child of their parent. - }, - 'first-of-type': function() { - /// Selects all elements that are the first among siblings of the same element name. - }, - 'focus': function() { - /// - /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'focusin': function() { - /// - /// Bind an event handler to the "focusin" event. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focusin" event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'focusout': function() { - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'get': function() { - /// - /// Retrieve one of the DOM elements matched by the jQuery object. - /// A zero-based integer indicating which element to retrieve. - /// - /// - }, - 'gt': function() { - /// - /// Select all elements at an index greater than index within the matched set. - /// Zero-based index. - /// - /// - /// Select all elements at an index greater than index within the matched set. - /// Zero-based index, counting backwards from the last element. - /// - }, - 'has': function() { - /// - /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. - /// A DOM element to match elements against. - /// - /// - }, - 'hasClass': function() { - /// - /// Determine whether any of the matched elements are assigned the given class. - /// The class name to search for. - /// - /// - }, - 'header': function() { - /// Selects all elements that are headers, like h1, h2, h3 and so on. - }, - 'height': function() { - /// - /// Set the CSS height of every matched element. - /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). - /// - /// - /// - /// Set the CSS height of every matched element. - /// A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'hidden': function() { - /// Selects all elements that are hidden. - }, - 'hide': function() { - /// - /// Hide the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'hover': function() { - /// - /// Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. - /// A function to execute when the mouse pointer enters the element. - /// A function to execute when the mouse pointer leaves the element. - /// - /// - }, - 'html': function() { - /// - /// Set the HTML contents of each element in the set of matched elements. - /// A string of HTML to set as the content of each matched element. - /// - /// - /// - /// Set the HTML contents of each element in the set of matched elements. - /// A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set. - /// - /// - }, - 'id': function() { - /// - /// Selects a single element with the given id attribute. - /// An ID to search for, specified via the id attribute of an element. - /// - }, - 'image': function() { - /// Selects all elements of type image. - }, - 'index': function() { - /// - /// Search for a given element from among the matched elements. - /// A selector representing a jQuery collection in which to look for an element. - /// - /// - /// - /// Search for a given element from among the matched elements. - /// The DOM element or first element within the jQuery object to look for. - /// - /// - }, - 'init': function() { - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A string containing a selector expression - /// A DOM Element, Document, or jQuery to use as context - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A DOM element to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An array containing a set of DOM elements to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A plain object to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An existing jQuery object to clone. - /// - /// - }, - 'innerHeight': function() { - /// Get the current computed height for the first element in the set of matched elements, including padding but not border. - /// - }, - 'innerWidth': function() { - /// Get the current computed width for the first element in the set of matched elements, including padding but not border. - /// - }, - 'input': function() { - /// Selects all input, textarea, select and button elements. - }, - 'insertAfter': function() { - /// - /// Insert every element in the set of matched elements after the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. - /// - /// - }, - 'insertBefore': function() { - /// - /// Insert every element in the set of matched elements before the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. - /// - /// - }, - 'is': function() { - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// An existing jQuery object to match the current set of elements against. - /// - /// - /// - /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. - /// An element to match the current set of elements against. - /// - /// - }, - 'jquery': function() { - /// A string containing the jQuery version number. - /// - }, - 'keydown': function() { - /// - /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'keypress': function() { - /// - /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'keyup': function() { - /// - /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'lang': function() { - /// - /// Selects all elements of the specified language. - /// A language code. - /// - }, - 'last': function() { - /// Selects the last matched element. - }, - 'last-child': function() { - /// Selects all elements that are the last child of their parent. - }, - 'last-of-type': function() { - /// Selects all elements that are the last among siblings of the same element name. - }, - 'length': function() { - /// The number of elements in the jQuery object. - /// - }, - 'live': function() { - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach an event handler for all elements which match the current selector, now and in the future. - /// A plain object of one or more JavaScript event types and functions to execute for them. - /// - /// - }, - 'load': function() { - /// - /// Bind an event handler to the "load" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "load" JavaScript event. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'lt': function() { - /// - /// Select all elements at an index less than index within the matched set. - /// Zero-based index. - /// - /// - /// Select all elements at an index less than index within the matched set. - /// Zero-based index, counting backwards from the last element. - /// - }, - 'map': function() { - /// - /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. - /// A function object that will be invoked for each element in the current set. - /// - /// - }, - 'mousedown': function() { - /// - /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseenter': function() { - /// - /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseleave': function() { - /// - /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mousemove': function() { - /// - /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseout': function() { - /// - /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseover': function() { - /// - /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'mouseup': function() { - /// - /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'multiple': function() { - /// - /// Selects the combined results of all the specified selectors. - /// Any valid selector. - /// Another valid selector. - /// As many more valid selectors as you like. - /// - }, - 'next': function() { - /// - /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'next adjacent': function() { - /// - /// Selects all next elements matching "next" that are immediately preceded by a sibling "prev". - /// Any valid selector. - /// A selector to match the element that is next to the first selector. - /// - }, - 'next siblings': function() { - /// - /// Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector. - /// Any valid selector. - /// A selector to filter elements that are the following siblings of the first selector. - /// - }, - 'nextAll': function() { - /// - /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'nextUntil': function() { - /// - /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. - /// A string containing a selector expression to indicate where to stop matching following sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. - /// A DOM node or jQuery object indicating where to stop matching following sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'not': function() { - /// - /// Remove elements from the set of matched elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// One or more DOM elements to remove from the matched set. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// A function used as a test for each element in the set. this is the current DOM element. - /// - /// - /// - /// Remove elements from the set of matched elements. - /// An existing jQuery object to match the current set of elements against. - /// - /// - }, - 'nth-child': function() { - /// - /// Selects all elements that are the nth-child of their parent. - /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) ) - /// - }, - 'nth-last-child': function() { - /// - /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. - /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) ) - /// - }, - 'nth-last-of-type': function() { - /// - /// Selects all elements that are the nth-child of their parent, counting from the last element to the first. - /// The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) ) - /// - }, - 'nth-of-type': function() { - /// - /// Selects all elements that are the nth child of their parent in relation to siblings with the same element name. - /// The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) ) - /// - }, - 'odd': function() { - /// Selects odd elements, zero-indexed. See also even. - }, - 'off': function() { - /// - /// Remove an event handler. - /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". - /// A selector which should match the one originally passed to .on() when attaching event handlers. - /// A handler function previously attached for the event(s), or the special value false. - /// - /// - /// - /// Remove an event handler. - /// An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s). - /// A selector which should match the one originally passed to .on() when attaching event handlers. - /// - /// - }, - 'offset': function() { - /// - /// Set the current coordinates of every element in the set of matched elements, relative to the document. - /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. - /// - /// - /// - /// Set the current coordinates of every element in the set of matched elements, relative to the document. - /// A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties. - /// - /// - }, - 'offsetParent': function() { - /// Get the closest ancestor element that is positioned. - /// - }, - 'on': function() { - /// - /// Attach an event handler function for one or more events to the selected elements. - /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". - /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event is triggered. - /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. - /// - /// - /// - /// Attach an event handler function for one or more events to the selected elements. - /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). - /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event occurs. - /// - /// - }, - 'one': function() { - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names. - /// An object containing data that will be passed to the event handler. - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". - /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event is triggered. - /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. - /// - /// - /// - /// Attach a handler to an event for the elements. The handler is executed at most once per element. - /// An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). - /// A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element. - /// Data to be passed to the handler in event.data when an event occurs. - /// - /// - }, - 'only-child': function() { - /// Selects all elements that are the only child of their parent. - }, - 'only-of-type': function() { - /// Selects all elements that have no siblings with the same element name. - }, - 'outerHeight': function() { - /// - /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. - /// A Boolean indicating whether to include the element's margin in the calculation. - /// - /// - }, - 'outerWidth': function() { - /// - /// Get the current computed width for the first element in the set of matched elements, including padding and border. - /// A Boolean indicating whether to include the element's margin in the calculation. - /// - /// - }, - 'parent': function() { - /// - /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'parents': function() { - /// - /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'parentsUntil': function() { - /// - /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A string containing a selector expression to indicate where to stop matching ancestor elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A DOM node or jQuery object indicating where to stop matching ancestor elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'password': function() { - /// Selects all elements of type password. - }, - 'position': function() { - /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. - /// - }, - 'prepend': function() { - /// - /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. - /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. - /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. - /// - /// - /// - /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. - /// A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'prependTo': function() { - /// - /// Insert every element in the set of matched elements to the beginning of the target. - /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. - /// - /// - }, - 'prev': function() { - /// - /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'prevAll': function() { - /// - /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'prevUntil': function() { - /// - /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - /// - /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. - /// A DOM node or jQuery object indicating where to stop matching preceding sibling elements. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'promise': function() { - /// - /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. - /// The type of queue that needs to be observed. - /// Object onto which the promise methods have to be attached - /// - /// - }, - 'prop': function() { - /// - /// Set one or more properties for the set of matched elements. - /// The name of the property to set. - /// A value to set for the property. - /// - /// - /// - /// Set one or more properties for the set of matched elements. - /// An object of property-value pairs to set. - /// - /// - /// - /// Set one or more properties for the set of matched elements. - /// The name of the property to set. - /// A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element. - /// - /// - }, - 'pushStack': function() { - /// - /// Add a collection of DOM elements onto the jQuery stack. - /// An array of elements to push onto the stack and make into a new jQuery object. - /// - /// - /// - /// Add a collection of DOM elements onto the jQuery stack. - /// An array of elements to push onto the stack and make into a new jQuery object. - /// The name of a jQuery method that generated the array of elements. - /// The arguments that were passed in to the jQuery method (for serialization). - /// - /// - }, - 'queue': function() { - /// - /// Manipulate the queue of functions to be executed, once for each matched element. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// An array of functions to replace the current queue contents. - /// - /// - /// - /// Manipulate the queue of functions to be executed, once for each matched element. - /// A string containing the name of the queue. Defaults to fx, the standard effects queue. - /// The new function to add to the queue, with a function to call that will dequeue the next item. - /// - /// - }, - 'radio': function() { - /// Selects all elements of type radio. - }, - 'ready': function() { - /// - /// Specify a function to execute when the DOM is fully loaded. - /// A function to execute after the DOM is ready. - /// - /// - }, - 'remove': function() { - /// - /// Remove the set of matched elements from the DOM. - /// A selector expression that filters the set of matched elements to be removed. - /// - /// - }, - 'removeAttr': function() { - /// - /// Remove an attribute from each element in the set of matched elements. - /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. - /// - /// - }, - 'removeClass': function() { - /// - /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. - /// One or more space-separated classes to be removed from the class attribute of each matched element. - /// - /// - /// - /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. - /// A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments. - /// - /// - }, - 'removeData': function() { - /// - /// Remove a previously-stored piece of data. - /// A string naming the piece of data to delete. - /// - /// - /// - /// Remove a previously-stored piece of data. - /// An array or space-separated string naming the pieces of data to delete. - /// - /// - }, - 'removeProp': function() { - /// - /// Remove a property for the set of matched elements. - /// The name of the property to remove. - /// - /// - }, - 'replaceAll': function() { - /// - /// Replace each target element with the set of matched elements. - /// A selector string, jQuery object, or DOM element reference indicating which element(s) to replace. - /// - /// - }, - 'replaceWith': function() { - /// - /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. - /// The content to insert. May be an HTML string, DOM element, or jQuery object. - /// - /// - /// - /// Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed. - /// A function that returns content with which to replace the set of matched elements. - /// - /// - }, - 'reset': function() { - /// Selects all elements of type reset. - }, - 'resize': function() { - /// - /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'root': function() { - /// Selects the element that is the root of the document. - }, - 'scroll': function() { - /// - /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'scrollLeft': function() { - /// - /// Set the current horizontal position of the scroll bar for each of the set of matched elements. - /// An integer indicating the new position to set the scroll bar to. - /// - /// - }, - 'scrollTop': function() { - /// - /// Set the current vertical position of the scroll bar for each of the set of matched elements. - /// An integer indicating the new position to set the scroll bar to. - /// - /// - }, - 'select': function() { - /// - /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'selected': function() { - /// Selects all elements that are selected. - }, - 'selector': function() { - /// A selector representing selector passed to jQuery(), if any, when creating the original set. - /// - }, - 'serialize': function() { - /// Encode a set of form elements as a string for submission. - /// - }, - 'serializeArray': function() { - /// Encode a set of form elements as an array of names and values. - /// - }, - 'show': function() { - /// - /// Display the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'siblings': function() { - /// - /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. - /// A string containing a selector expression to match elements against. - /// - /// - }, - 'size': function() { - /// Return the number of elements in the jQuery object. - /// - }, - 'slice': function() { - /// - /// Reduce the set of matched elements to a subset specified by a range of indices. - /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. - /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. - /// - /// - }, - 'slideDown': function() { - /// - /// Display the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'slideToggle': function() { - /// - /// Display or hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display or hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'slideUp': function() { - /// - /// Hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Hide the matched elements with a sliding motion. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Hide the matched elements with a sliding motion. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - }, - 'stop': function() { - /// - /// Stop the currently-running animation on the matched elements. - /// A Boolean indicating whether to remove queued animation as well. Defaults to false. - /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. - /// - /// - /// - /// Stop the currently-running animation on the matched elements. - /// The name of the queue in which to stop animations. - /// A Boolean indicating whether to remove queued animation as well. Defaults to false. - /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. - /// - /// - }, - 'submit': function() { - /// - /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. - /// A function to execute each time the event is triggered. - /// - /// - /// - /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. - /// An object containing data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'target': function() { - /// Selects the target element indicated by the fragment identifier of the document's URI. - }, - 'text': function() { - /// - /// Set the content of each element in the set of matched elements to the specified text. - /// A string of text to set as the content of each matched element. - /// - /// - /// - /// Set the content of each element in the set of matched elements to the specified text. - /// A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments. - /// - /// - }, - 'toArray': function() { - /// Retrieve all the DOM elements contained in the jQuery set, as an array. - /// - }, - 'toggle': function() { - /// - /// Display or hide the matched elements. - /// A string or number determining how long the animation will run. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements. - /// A map of additional options to pass to the method. - /// - /// - /// - /// Display or hide the matched elements. - /// A string or number determining how long the animation will run. - /// A string indicating which easing function to use for the transition. - /// A function to call once the animation is complete. - /// - /// - /// - /// Display or hide the matched elements. - /// A Boolean indicating whether to show or hide the elements. - /// - /// - }, - 'toggleClass': function() { - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// One or more class names (separated by spaces) to be toggled for each element in the matched set. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// One or more class names (separated by spaces) to be toggled for each element in the matched set. - /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// A boolean value to determine whether the class should be added or removed. - /// - /// - /// - /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. - /// A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments. - /// A boolean value to determine whether the class should be added or removed. - /// - /// - }, - 'trigger': function() { - /// - /// Execute all handlers and behaviors attached to the matched elements for the given event type. - /// A string containing a JavaScript event type, such as click or submit. - /// Additional parameters to pass along to the event handler. - /// - /// - /// - /// Execute all handlers and behaviors attached to the matched elements for the given event type. - /// A jQuery.Event object. - /// Additional parameters to pass along to the event handler. - /// - /// - }, - 'triggerHandler': function() { - /// - /// Execute all handlers attached to an element for an event. - /// A string containing a JavaScript event type, such as click or submit. - /// An array of additional parameters to pass along to the event handler. - /// - /// - }, - 'unbind': function() { - /// - /// Remove a previously-attached event handler from the elements. - /// A string containing a JavaScript event type, such as click or submit. - /// The function that is to be no longer executed. - /// - /// - /// - /// Remove a previously-attached event handler from the elements. - /// A string containing a JavaScript event type, such as click or submit. - /// Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ). - /// - /// - /// - /// Remove a previously-attached event handler from the elements. - /// A JavaScript event object as passed to an event handler. - /// - /// - }, - 'undelegate': function() { - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// A string containing a JavaScript event type, such as "click" or "keydown" - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// A string containing a JavaScript event type, such as "click" or "keydown" - /// A function to execute at the time the event is triggered. - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A selector which will be used to filter the event results. - /// An object of one or more event types and previously bound functions to unbind from them. - /// - /// - /// - /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. - /// A string containing a namespace to unbind all events from. - /// - /// - }, - 'unload': function() { - /// - /// Bind an event handler to the "unload" JavaScript event. - /// A function to execute when the event is triggered. - /// - /// - /// - /// Bind an event handler to the "unload" JavaScript event. - /// A plain object of data that will be passed to the event handler. - /// A function to execute each time the event is triggered. - /// - /// - }, - 'unwrap': function() { - /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. - /// - }, - 'val': function() { - /// - /// Set the value of each element in the set of matched elements. - /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. - /// - /// - /// - /// Set the value of each element in the set of matched elements. - /// A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments. - /// - /// - }, - 'visible': function() { - /// Selects all elements that are visible. - }, - 'width': function() { - /// - /// Set the CSS width of each element in the set of matched elements. - /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). - /// - /// - /// - /// Set the CSS width of each element in the set of matched elements. - /// A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set. - /// - /// - }, - 'wrap': function() { - /// - /// Wrap an HTML structure around each element in the set of matched elements. - /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. - /// - /// - /// - /// Wrap an HTML structure around each element in the set of matched elements. - /// A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, - 'wrapAll': function() { - /// - /// Wrap an HTML structure around all elements in the set of matched elements. - /// A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements. - /// - /// - }, - 'wrapInner': function() { - /// - /// Wrap an HTML structure around the content of each element in the set of matched elements. - /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. - /// - /// - /// - /// Wrap an HTML structure around the content of each element in the set of matched elements. - /// A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set. - /// - /// - }, -}); - -intellisense.annotate(window, { - '$': function() { - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A string containing a selector expression - /// A DOM Element, Document, or jQuery to use as context - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A DOM element to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An array containing a set of DOM elements to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// A plain object to wrap in a jQuery object. - /// - /// - /// - /// Accepts a string containing a CSS selector which is then used to match a set of elements. - /// An existing jQuery object to clone. - /// - /// - }, -}); - diff --git a/Scripts/jquery-3.7.1.js b/Scripts/jquery-3.7.1.js deleted file mode 100644 index 1a86433c2..000000000 --- a/Scripts/jquery-3.7.1.js +++ /dev/null @@ -1,10716 +0,0 @@ -/*! - * jQuery JavaScript Library v3.7.1 - * https://jquery.com/ - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2023-08-28T13:37Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket trac-14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -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. - // 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 ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var version = "3.7.1", - - rhtmlSuffix = /HTML$/i, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - - // Retrieve the text value of an array of DOM nodes - text: function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += jQuery.text( node ); - } - } - if ( nodeType === 1 || nodeType === 11 ) { - return elem.textContent; - } - if ( nodeType === 9 ) { - return elem.documentElement.textContent; - } - if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - isXMLDoc: function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Assume HTML when documentElement doesn't yet exist, such as inside - // document fragments. - return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// 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 isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} -var pop = arr.pop; - - -var sort = arr.sort; - - -var splice = arr.splice; - - -var whitespace = "[\\x20\\t\\r\\n\\f]"; - - -var rtrimCSS = new RegExp( - "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", - "g" -); - - - - -// Note: an element does not contain itself -jQuery.contains = function( a, b ) { - var bup = b && b.parentNode; - - return a === bup || !!( bup && bup.nodeType === 1 && ( - - // Support: IE 9 - 11+ - // IE doesn't have `contains` on SVG. - a.contains ? - a.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); -}; - - - - -// CSS string/identifier serialization -// https://drafts.csswg.org/cssom/#common-serializing-idioms -var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; - -function fcssescape( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; -} - -jQuery.escapeSelector = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - - - - -var preferredDoc = document, - pushNative = push; - -( function() { - -var i, - Expr, - outermostContext, - sortInput, - hasDuplicate, - push = pushNative, - - // Local document vars - document, - documentElement, - documentIsHTML, - rbuggyQSA, - matches, - - // Instance-specific data - expando = jQuery.expando, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + - "loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + - whitespace + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - ID: new RegExp( "^#(" + identifier + ")" ), - CLASS: new RegExp( "^\\.(" + identifier + ")" ), - TAG: new RegExp( "^(" + identifier + "|[*])" ), - ATTR: new RegExp( "^" + attributes ), - PSEUDO: new RegExp( "^" + pseudos ), - CHILD: new RegExp( - "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - bool: new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - needsContext: new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - if ( nonHex ) { - - // Strip the backslash prefix from a non-hex escape sequence - return nonHex; - } - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - return high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // Used for iframes; see `setDocument`. - // Support: IE 9 - 11+, Edge 12 - 18+ - // Removing the function wrapper causes a "Permission Denied" - // error in IE/Edge. - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && nodeName( elem, "fieldset" ); - }, - { dir: "parentNode", next: "legend" } - ); - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android <=4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { - apply: function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - }, - call: function( target ) { - pushNative.apply( target, slice.call( arguments, 1 ) ); - } - }; -} - -function find( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE 9 only - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - push.call( results, elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE 9 only - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - find.contains( context, elem ) && - elem.id === m ) { - - push.call( results, elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when - // strict-comparing two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( newContext != context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = jQuery.escapeSelector( nid ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties - // (see https://github.com/jquery/sizzle/issues/157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by jQuery selector module - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - return nodeName( elem, "input" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && - elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11+ - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a jQuery selector context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [node] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -function setDocument( node ) { - var subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - documentElement = document.documentElement; - documentIsHTML = !jQuery.isXMLDoc( document ); - - // Support: iOS 7 only, IE 9 - 11+ - // Older browsers didn't support unprefixed `matches`. - matches = documentElement.matches || - documentElement.webkitMatchesSelector || - documentElement.msMatchesSelector; - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors - // (see trac-13936). - // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, - // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. - if ( documentElement.msMatchesSelector && - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 9 - 11+, Edge 12 - 18+ - subWindow.addEventListener( "unload", unloadHandler ); - } - - // Support: IE <10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - documentElement.appendChild( el ).id = jQuery.expando; - return !document.getElementsByName || - !document.getElementsByName( jQuery.expando ).length; - } ); - - // Support: IE 9 only - // Check to see if it's possible to do matchesSelector - // on a disconnected node. - support.disconnectedMatch = assert( function( el ) { - return matches.call( el, "*" ); - } ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // IE/Edge don't support the :scope pseudo-class. - support.scope = assert( function() { - return document.querySelectorAll( ":scope" ); - } ); - - // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only - // Make sure the `:has()` argument is parsed unforgivingly. - // We include `*` in the test to detect buggy implementations that are - // _selectively_ forgiving (specifically when the list includes at least - // one valid selector). - // Note that we treat complete lack of support for `:has()` as if it were - // spec-compliant support, which is fine because use of `:has()` in such - // environments will fail in the qSA path and fall back to jQuery traversal - // anyway. - support.cssHas = assert( function() { - try { - document.querySelector( ":has(*,:jqfake)" ); - return false; - } catch ( e ) { - return true; - } - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter.ID = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find.ID = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter.ID = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find.ID = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find.TAG = function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else { - return context.querySelectorAll( tag ); - } - }; - - // Class - Expr.find.CLASS = function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - rbuggyQSA = []; - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - documentElement.appendChild( el ).innerHTML = - "" + - ""; - - // Support: iOS <=7 - 8 only - // Boolean attributes and "value" are not treated correctly in some XML documents - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: iOS <=7 - 8 only - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: iOS 8 only - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ - // In some of the document kinds, these selectors wouldn't work natively. - // This is probably OK but for backwards compatibility we want to maintain - // handling them through jQuery traversal in jQuery 3.x. - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE 9 - 11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ - // In some of the document kinds, these selectors wouldn't work natively. - // This is probably OK but for backwards compatibility we want to maintain - // handling them through jQuery traversal in jQuery 3.x. - documentElement.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - } ); - - if ( !support.cssHas ) { - - // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ - // Our regular `try-catch` mechanism fails to detect natively-unsupported - // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) - // in browsers that parse the `:has()` argument as a forgiving selector list. - // https://drafts.csswg.org/selectors/#relational now requires the argument - // to be parsed unforgivingly, but browsers have not yet fully adjusted. - rbuggyQSA.push( ":has" ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a === document || a.ownerDocument == preferredDoc && - find.contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b === document || b.ownerDocument == preferredDoc && - find.contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - }; - - return document; -} - -find.matches = function( expr, elements ) { - return find( expr, null, null, elements ); -}; - -find.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return find( expr, document, null, [ elem ] ).length > 0; -}; - -find.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return jQuery.contains( context, elem ); -}; - - -find.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (see trac-13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - if ( val !== undefined ) { - return val; - } - - return elem.getAttribute( name ); -}; - -find.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -jQuery.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - // - // Support: Android <=4.0+ - // Testing for detecting duplicates is unpredictable so instead assume we can't - // depend on duplicate detection in all browsers without a stable sort. - hasDuplicate = !support.sortStable; - sortInput = !support.sortStable && slice.call( results, 0 ); - sort.call( results, sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - splice.call( results, duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -jQuery.fn.uniqueSort = function() { - return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); -}; - -Expr = jQuery.expr = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - ATTR: function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) - .replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - CHILD: function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - find.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) - ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - find.error( match[ 0 ] ); - } - - return match; - }, - - PSEUDO: function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr.CHILD.test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - TAG: function( nodeNameSelector ) { - var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return nodeName( elem, expectedNodeName ); - }; - }, - - CLASS: function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + ")" + className + - "(" + whitespace + "|$)" ) ) && - classCache( className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - ATTR: function( name, operator, check ) { - return function( elem ) { - var result = find.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - if ( operator === "=" ) { - return result === check; - } - if ( operator === "!=" ) { - return result !== check; - } - if ( operator === "^=" ) { - return check && result.indexOf( check ) === 0; - } - if ( operator === "*=" ) { - return check && result.indexOf( check ) > -1; - } - if ( operator === "$=" ) { - return check && result.slice( -check.length ) === check; - } - if ( operator === "~=" ) { - return ( " " + result.replace( rwhitespace, " " ) + " " ) - .indexOf( check ) > -1; - } - if ( operator === "|=" ) { - return result === check || result.slice( 0, check.length + 1 ) === check + "-"; - } - - return false; - }; - }, - - CHILD: function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - nodeName( node, name ) : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || ( parent[ expando ] = {} ); - cache = outerCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - cache = outerCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - nodeName( node, name ) : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - outerCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - PSEUDO: function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // https://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - find.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as jQuery does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - not: markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrimCSS, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element - // (see https://github.com/jquery/sizzle/issues/299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - has: markFunction( function( selector ) { - return function( elem ) { - return find( selector, elem ).length > 0; - }; - } ), - - contains: markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // https://www.w3.org/TR/selectors/#lang-pseudo - lang: markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - find.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - target: function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - root: function( elem ) { - return elem === documentElement; - }, - - focus: function( elem ) { - return elem === safeActiveElement() && - document.hasFocus() && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - enabled: createDisabledPseudo( false ), - disabled: createDisabledPseudo( true ), - - checked: function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - return ( nodeName( elem, "input" ) && !!elem.checked ) || - ( nodeName( elem, "option" ) && !!elem.selected ); - }, - - selected: function( elem ) { - - // Support: IE <=11+ - // Accessing the selectedIndex property - // forces the browser to treat the default option as - // selected when in an optgroup. - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - empty: function( elem ) { - - // https://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - parent: function( elem ) { - return !Expr.pseudos.empty( elem ); - }, - - // Element/input types - header: function( elem ) { - return rheader.test( elem.nodeName ); - }, - - input: function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - button: function( elem ) { - return nodeName( elem, "input" ) && elem.type === "button" || - nodeName( elem, "button" ); - }, - - text: function( elem ) { - var attr; - return nodeName( elem, "input" ) && elem.type === "text" && - - // Support: IE <10 only - // New HTML5 attribute values (e.g., "search") appear - // with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - first: createPositionalPseudo( function() { - return [ 0 ]; - } ), - - last: createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - even: createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - odd: createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - lt: createPositionalPseudo( function( matchIndexes, length, argument ) { - var i; - - if ( argument < 0 ) { - i = argument + length; - } else if ( argument > length ) { - i = length; - } else { - i = argument; - } - - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - gt: createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos.nth = Expr.pseudos.eq; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rleadingCombinator.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrimCSS, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - if ( parseOnly ) { - return soFar.length; - } - - return soFar ? - find.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - if ( skip && nodeName( elem, skip ) ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = outerCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - outerCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - find( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, matcherOut, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || - multipleContexts( selector || "*", - context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems; - - if ( matcher ) { - - // If we have a postFinder, or filtered seed, or non-seed postFilter - // or preexisting results, - matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results; - - // Find primary matches - matcher( matcherIn, matcherOut, context, xml ); - } else { - matcherOut = matcherIn; - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element - // (see https://github.com/jquery/sizzle/issues/299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrimCSS, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find.TAG( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: iOS <=7 - 9 only - // Tolerate NodeList properties (IE: "length"; Safari: ) matching - // elements by id. (see trac-14142) - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - push.call( results, elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - jQuery.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -function compile( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -} - -/** - * A low-level selection function that works with jQuery's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with jQuery selector compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find.ID( - token.matches[ 0 ].replace( runescape, funescape ), - context - ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && - testContext( context.parentNode ) || context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -} - -// One-time assignments - -// Support: Android <=4.0 - 4.1+ -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Initialize against the default document -setDocument(); - -// Support: Android <=4.0 - 4.1+ -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -jQuery.find = find; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.unique = jQuery.uniqueSort; - -// These have always been private, but they used to be documented as part of -// Sizzle so let's maintain them for now for backwards compatibility purposes. -find.compile = compile; -find.select = select; -find.setDocument = setDocument; -find.tokenize = tokenize; - -find.escape = jQuery.escapeSelector; -find.getText = jQuery.text; -find.isXML = jQuery.isXMLDoc; -find.selectors = jQuery.expr; -find.support = jQuery.support; -find.uniqueSort = jQuery.uniqueSort; - - /* eslint-enable */ - -} )(); - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (trac-9521) - // Strict HTML recognition (trac-11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to jQuery#find - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.error ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the error, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getErrorHook ) { - process.error = jQuery.Deferred.getErrorHook(); - - // The deprecated alias of the above. While the name suggests - // returning the stack, not an error instance, jQuery just passes - // it directly to `console.warn` so both will work; an instance - // just better cooperates with source maps. - } else if ( jQuery.Deferred.getStackHook ) { - process.error = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the primary Deferred - primary = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error -// captured before the async barrier to get the original error cause -// which may otherwise be hidden. -jQuery.Deferred.exceptionHook = function( error, asyncError ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, - error.stack, asyncError ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See trac-6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (trac-9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see trac-8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (trac-14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (trac-11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (trac-14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (trac-13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (trac-12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - 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 - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (trac-13208) - // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (trac-13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", true ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, isSetup ) { - - // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add - if ( !isSetup ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - if ( !saved ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - this[ type ](); - result = dataPriv.get( this, type ); - dataPriv.set( this, type, false ); - - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - - return result; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering - // the native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved ) { - - // ...and capture the result - dataPriv.set( this, type, jQuery.event.trigger( - saved[ 0 ], - saved.slice( 1 ), - this - ) ); - - // Abort handling of the native event by all jQuery handlers while allowing - // native handlers on the same element to run. On target, this is achieved - // by stopping immediate propagation just on the jQuery event. However, - // the native event is re-wrapped by a jQuery one on each level of the - // propagation so the only way to stop it for jQuery is to stop it for - // everyone via native `stopPropagation()`. This is not a problem for - // focus/blur which don't bubble, but it does also stop click on checkboxes - // and radios. We accept this limitation. - event.stopPropagation(); - event.isImmediatePropagationStopped = returnTrue; - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (trac-504, trac-13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - which: true -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - - function focusMappedHandler( nativeEvent ) { - if ( document.documentMode ) { - - // Support: IE 11+ - // Attach a single focusin/focusout handler on the document while someone wants - // focus/blur. This is because the former are synchronous in IE while the latter - // are async. In other browsers, all those handlers are invoked synchronously. - - // `handle` from private data would already wrap the event, but we need - // to change the `type` here. - var handle = dataPriv.get( this, "handle" ), - event = jQuery.event.fix( nativeEvent ); - event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; - event.isSimulated = true; - - // First, handle focusin/focusout - handle( nativeEvent ); - - // ...then, handle focus/blur - // - // focus/blur don't bubble while focusin/focusout do; simulate the former by only - // invoking the handler at the lower level. - if ( event.target === event.currentTarget ) { - - // The setup part calls `leverageNative`, which, in turn, calls - // `jQuery.event.add`, so event handle will already have been set - // by this point. - handle( event ); - } - } else { - - // For non-IE browsers, attach a single capturing handler on the document - // while someone wants focusin/focusout. - jQuery.event.simulate( delegateType, nativeEvent.target, - jQuery.event.fix( nativeEvent ) ); - } - } - - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - var attaches; - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, true ); - - if ( document.documentMode ) { - - // Support: IE 9 - 11+ - // We use the same native handler for focusin & focus (and focusout & blur) - // so we need to coordinate setup & teardown parts between those events. - // Use `delegateType` as the key as `type` is already used by `leverageNative`. - attaches = dataPriv.get( this, delegateType ); - if ( !attaches ) { - this.addEventListener( delegateType, focusMappedHandler ); - } - dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); - } else { - - // Return false to allow normal processing in the caller - return false; - } - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - teardown: function() { - var attaches; - - if ( document.documentMode ) { - attaches = dataPriv.get( this, delegateType ) - 1; - if ( !attaches ) { - this.removeEventListener( delegateType, focusMappedHandler ); - dataPriv.remove( this, delegateType ); - } else { - dataPriv.set( this, delegateType, attaches ); - } - } else { - - // Return false to indicate standard teardown should be applied - return false; - } - }, - - // Suppress native focus or blur if we're currently inside - // a leveraged native-event stack - _default: function( event ) { - return dataPriv.get( event.target, type ); - }, - - delegateType: delegateType - }; - - // Support: Firefox <=44 - // Firefox doesn't have focus(in | out) events - // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 - // - // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 - // focus(in | out) events fire after focus & blur events, - // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order - // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 - // - // Support: IE 9 - 11+ - // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, - // attach a single handler for both events in IE. - jQuery.event.special[ delegateType ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - dataHolder = document.documentMode ? this : doc, - attaches = dataPriv.get( dataHolder, delegateType ); - - // Support: IE 9 - 11+ - // We use the same native handler for focusin & focus (and focusout & blur) - // so we need to coordinate setup & teardown parts between those events. - // Use `delegateType` as the key as `type` is already used by `leverageNative`. - if ( !attaches ) { - if ( document.documentMode ) { - this.addEventListener( delegateType, focusMappedHandler ); - } else { - doc.addEventListener( type, focusMappedHandler, true ); - } - } - dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - dataHolder = document.documentMode ? this : doc, - attaches = dataPriv.get( dataHolder, delegateType ) - 1; - - if ( !attaches ) { - if ( document.documentMode ) { - this.removeEventListener( delegateType, focusMappedHandler ); - } else { - doc.removeEventListener( type, focusMappedHandler, true ); - } - dataPriv.remove( dataHolder, delegateType ); - } else { - dataPriv.set( dataHolder, delegateType, attaches ); - } - } - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (trac-8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Re-enable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - - // Unwrap a CDATA section containing script contents. This shouldn't be - // needed as in XML documents they're already not visible when - // inspecting element contents and in HTML documents they have no - // meaning but we're preserving that logic for backwards compatibility. - // This will be removed completely in 4.0. See gh-4904. - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew jQuery#find here for performance reasons: - // https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var rcustomProp = /^--/; - - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (trac-8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // 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 ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "box-sizing:content-box;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, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - isCustomProp = rcustomProp.test( name ), - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, trac-12537) - // .css('--customProperty) (gh-3144) - if ( computed ) { - - // Support: IE <=9 - 11+ - // IE only supports `"float"` in `getPropertyValue`; in computed styles - // it's only available as `"cssFloat"`. We no longer modify properties - // sent to `.css()` apart from camelCasing, so we need to check both. - // Normally, this would create difference in behavior: if - // `getPropertyValue` returns an empty string, the value returned - // by `.css()` would be `undefined`. This is usually the case for - // disconnected elements. However, in IE even disconnected elements - // with no styles return `"none"` for `getPropertyValue( "float" )` - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( isCustomProp && ret ) { - - // Support: Firefox 105+, Chrome <=105+ - // Spec requires trimming whitespace for custom properties (gh-4926). - // Firefox only trims leading whitespace. Chrome just collapses - // both leading & trailing whitespace to a single space. - // - // Fall back to `undefined` if empty string returned. - // This collapses a missing definition with property defined - // and set to an empty string but there's no standard API - // allowing us to differentiate them without a performance penalty - // and returning `undefined` aligns with older jQuery. - // - // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED - // as whitespace while CSS does not, but this is not a problem - // because CSS preprocessing replaces them with U+000A LINE FEED - // (which *is* CSS whitespace) - // https://www.w3.org/TR/css-syntax-3/#input-preprocessing - ret = ret.replace( rtrimCSS, "$1" ) || undefined; - } - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0, - marginDelta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - // Count margin delta separately to only add it after scroll gutter adjustment. - // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). - if ( box === "margin" ) { - marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta + marginDelta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - animationIterationCount: true, - aspectRatio: true, - borderImageSlice: true, - columnCount: true, - flexGrow: true, - flexShrink: true, - fontWeight: true, - gridArea: true, - gridColumn: true, - gridColumnEnd: true, - gridColumnStart: true, - gridRow: true, - gridRowEnd: true, - gridRowStart: true, - lineHeight: true, - opacity: true, - order: true, - orphans: true, - scale: true, - widows: true, - zIndex: true, - zoom: true, - - // SVG-related - fillOpacity: true, - floodOpacity: true, - stopOpacity: true, - strokeMiterlimit: true, - strokeOpacity: true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (trac-7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug trac-9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (trac-7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // 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 ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // Use proper attribute retrieval (trac-12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classNames, cur, curValue, className, i, finalValue; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classNames = classesToArray( value ); - - if ( classNames.length ) { - return this.each( function() { - curValue = getClass( this ); - cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - if ( cur.indexOf( " " + className + " " ) < 0 ) { - cur += className + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - this.setAttribute( "class", finalValue ); - } - } - } ); - } - - return this; - }, - - removeClass: function( value ) { - var classNames, cur, curValue, className, i, finalValue; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classNames = classesToArray( value ); - - if ( classNames.length ) { - return this.each( function() { - curValue = getClass( this ); - - // This expression is here for better compressibility (see addClass) - cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - - // Remove *all* instances - while ( cur.indexOf( " " + className + " " ) > -1 ) { - cur = cur.replace( " " + className + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - this.setAttribute( "class", finalValue ); - } - } - } ); - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var classNames, className, i, self, - type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - classNames = classesToArray( value ); - - return this.each( function() { - if ( isValidValue ) { - - // Toggle individual class names - self = jQuery( this ); - - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (trac-14686, trac-14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (trac-2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - 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; -}; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (trac-9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (trac-6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // 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() { - 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 ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // trac-7653, trac-8125, trac-8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - -originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes trac-9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // 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, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (trac-10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket trac-12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // trac-9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // 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() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (trac-11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // trac-1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see trac-8605, trac-14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // trac-14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( "