From 2979a64ce3c0983f2aee7c7a49141bb5c092e1b1 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 12:11:02 -0700 Subject: [PATCH 01/15] add file, skeleton from "select all" --- netbox/project-static/src/buttons/selectMultiple.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 netbox/project-static/src/buttons/selectMultiple.ts diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts new file mode 100644 index 000000000..465edc2f3 --- /dev/null +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -0,0 +1,5 @@ +import { getElement, getElements, findFirstAdjacent } from '../util'; + +export function initSelectMultiple(): void { +} + From 2e38e621017e8d6de0057c8c767b60aee9423063 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 12:13:02 -0700 Subject: [PATCH 02/15] create store to store previously checked element --- netbox/project-static/src/stores/previousPkCheck.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 netbox/project-static/src/stores/previousPkCheck.ts diff --git a/netbox/project-static/src/stores/previousPkCheck.ts b/netbox/project-static/src/stores/previousPkCheck.ts new file mode 100644 index 000000000..7fba2faba --- /dev/null +++ b/netbox/project-static/src/stores/previousPkCheck.ts @@ -0,0 +1,7 @@ +import { createState } from '../state'; + +export const previousPKCheckState = createState<{ hidden: boolean }>( + { hidden: false }, + { persist: false }, +); + From ae7ddecaa65f7ccff69352fb9d75bf775b6c0b6c Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 12:14:15 -0700 Subject: [PATCH 03/15] now exports previousPkCheck.ts --- netbox/project-static/src/stores/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/netbox/project-static/src/stores/index.ts b/netbox/project-static/src/stores/index.ts index 42d4aa0b5..5e53410ad 100644 --- a/netbox/project-static/src/stores/index.ts +++ b/netbox/project-static/src/stores/index.ts @@ -1,2 +1,3 @@ export * from './objectDepth'; export * from './rackImages'; +export * from './previousPkCheck'; \ No newline at end of file From c536944a101d87bd38f1c33d1c14a0788e453251 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 12:36:17 -0700 Subject: [PATCH 04/15] now exports multiselect function --- netbox/project-static/src/buttons/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netbox/project-static/src/buttons/index.ts b/netbox/project-static/src/buttons/index.ts index 6a9001cd1..e677ff599 100644 --- a/netbox/project-static/src/buttons/index.ts +++ b/netbox/project-static/src/buttons/index.ts @@ -3,6 +3,7 @@ import { initDepthToggle } from './depthToggle'; import { initMoveButtons } from './moveOptions'; import { initReslug } from './reslug'; import { initSelectAll } from './selectAll'; +import { initSelectMultiple } from './selectMultiple'; export function initButtons(): void { for (const func of [ @@ -10,6 +11,7 @@ export function initButtons(): void { initConnectionToggle, initReslug, initSelectAll, + initSelectMultiple, initMoveButtons, ]) { func(); From db142061ffc77cd16bcc89df199f070697873694 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 12:37:28 -0700 Subject: [PATCH 05/15] clicking a PkCheckbox updates state --- netbox/project-static/dist/netbox.js | Bin 375393 -> 375642 bytes netbox/project-static/dist/netbox.js.map | Bin 344719 -> 345022 bytes .../src/buttons/selectMultiple.ts | 20 ++++++++++++++++-- .../src/stores/previousPkCheck.ts | 6 +++--- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index acd1abbf28c867420280fb8364a550d7f54c9ec4..3d6bb9d1a610d4977fd9c887d49450d097f78f7d 100644 GIT binary patch delta 27130 zcma)l349yH+4pZ|r5q&Wbeub}6~~d{wIh>+1Unle%d#z7vSeGfW1Apk9k#5~x_yKY zTAx~J2 zDxHXyrK0=9v`5mXqM|>Fc}Lv*XT+^X$sneDQYtF#_9pcycF_siRdSrRka76|T7kii z(2c|*3xb0T%iY2z)JzI`5|?ijs!J^x#;51+Ma!jVIvj5Bx%HVt?+N}4amx0I6|R>7{pg*b|=$%jHuJmXQwmz(Emz?>tx`ba?dg;jdQD zGE7bJpBH?!US4*wg@ok6i@SBsQL(i+!njK^CG>{+){z>2E*?vyl2ZA&OfFq2KlbJv zS^B|3`Lm0+;Kj{y|9Xo{Y96VqEN>jC@p{5x{bX(3ar?wtLw&_aO+d29H^|L%x;&CO zs@HePAIp;qMn}cI;!JLN{E}+omVbE3x?Q29(rau~>@Bu;tB{CUm(&;28^oMT(&=iF z@o+Fz-#Y_cH-PI{l63)R21(L&rxL;Fu&yB|doHaZt@1^e#@9EFiv7i5T`nn<#BdIm zG>&2G`$y#3Yu0L9F1#}nn%TUrE|N|An&`Zae2k4*isz8>6J3TkZ5voT$jqH zUN%qu^s+X)$)$IC2UF3#hC20GS*bn;{n5Sq_8Am5Y#UJ)Ix#BlDGq3MNlrjizh`Dq zX88iPan6{EyFU40HnMWmQy+~t=siIx8dtHP*VX6@;;6jq@@V6zNAd&*Yxf!qhWbRj zNV-u^Wo6Z@wp>0%*7sn2{RJ=REb@HFCS~I@`lynV_#P?23IpsxHml!%+ zg@sP2uXm1$!^PLTTv8)nXe2IG$o8wVq)YzU)jg#HqhhAmXSBc*8QFBzGP&&9IkNql zIpV0oTZU;8?nx+E^w)|*#TUn1l7;hVt9;-Z%eGdRDi32Wt`Ed$wD@kH3RtRE9524x z=#q?Lv;5gL1DZxxRkOV3+I9P*wPJU%Lq%cX6E10jufP(Q_HYL5gJAHoJFZYj>{XF2 zb|j?)#;iiO185KL~qY7t-leto$muJ1^Skgchya=kk~HI*8V`(uH!jwEMw2wYMXID?_G677|h zc%e&qp`p;FOX*oxDD?m`6`C4d6^1ncTt3n?b{%mAyNO!S6*p8BG#aB8DgfJJtY4l2+t{Pv=n~wOSDRDsl?hU)i zfc)eQ`kl#Iv8ni;-yu~5F;&W;=vFc6kea!4G|fmyx!(arnsUg8FE)^zrfpljH4Z(Ta5UKCb%Au$n+nFF z;7HDplfeLfNl8b6LnV(xk805?m)*FrG|a1cH$%bR#T@$bpgeeEWofup3>6oab|`eI z4=K32^MzTn(hjbN<>&L2^6zh~(gg}@@D*Tl#-(0Pu#p1n9r1(ZrSasSGsuoR8d&WL&C1fU zh@&Q;@(TLtYn3JMlixgdt$fwZD@y~l;#hIqKCe{4(Vvl@yV*@La@7xyFZb1ojl~W_ z4pl#mgFc)Nt#N5cKK+Lc$B#Sot#N~)pqqMC6);jORuo^g09HkkflvNyj>CF>`oj~J zyA^a6`FK<{lX1D_mJQZOt=L~2q1z$#@JX`;AaW{YM3+M{b1d|GRVHaKtik~x`AjB< zG%6purDCPoA!QvkeSS~K?um;%9&s!w_IpH|Lq2%Pveo?_PS%Do?wJ_sdU#2k+-KM) zHaXZ6Ye<=V;;qLXn^Tx+Y6^@bjmZPI_K|M+-dpv=EWdthIq8uP-?mI%a$6@ElP|iY zRGzr4g!X&*=<-dsEnDtz=%GsBtwCp*9E0xIUa8zD@|W6|xHuL>cZ`cP{_PXh5#qPc zmF>6BpB^QC`~P}mMl#8GE0$X5tb%TeYm(6=Qnb#poFa7Zoj8jLP>El_?I=7ePyfAl1=${+to zx2~%oUeTIlEDeBwCGYfaP{4SHVTs*gnDj&&Qc>+)G|diuqx|T8uIio&g zE3bk&F&gUn`0t|?b0VVP-vY^tOnW4~1^w3Jka8Tq{qkdX?OfBVYAR1u>T&2}(VDP7 zI-DAT_KQmW^3uD1y~ABA28(0tnP&IGSS=1I5z!lJf>ED8=Lm>2u9{rqlRZ_dt5IFHbr#~$Zy@-ROhM{!$pw%M#ak$Q%0$UzY#S`oqU9ZQBjHY;YiVI^Bd(;4pl8q z8KImKMy~nLEh-+Jdr7>k7 zK8^?DiZLjEdFziilc0R^kE=^fwW6;$YS^gSDX)C}k4s3S+ zG-7NhH`YPkC7=B9k5?}aE0fffmvbpi8>L2h&3#)D;yCXs-5)?PS>yAhJksPo(WjI; zOfGA$MbdTX#1W;!>9F-TTWvN;=hW5vW>C_YEHHaGsBnzARvan9>rbniH?FQ8tBV*_ z*&Q}YSPQo_zRVh1sYF z{=|4xG8y$F_?3xD4h3oHsJIn$h)Oou_>+~S=}_BG?k3s}_rsogt5$TV{nl6^0}!YhD0+*>J0gaRQi22K1Yq(DkFG%E{O+UW)M{k+ zlxkM8*Go0)=fqTUj2*H*R!SE%!dWY>t5uFXaZ+omu|T+xs-c=|MQgE3V?jQe3s|i% zsxj1rQEE2AjK%$4)%C)qDo)`ysR8Qf%us%lEIhTb zbwFi|o?5ZD*gIuXeY~hi>f*fD8c|hb!ldY2F=&#;czw*Ic)?;4{pI*mMv|1Tf9gl2 z9+On`RSil$2f37(?EP5-RMiiDc4}#xN9^<*-6xe8pKOzN{Je^E%HE$Fm$rEt`Xc%^ zkD<*6au zlWGA*Ose?BflWSj1oa%tZ4oJM((9}ix3kOPa=^P9mOGzWM? zr>-70)$yFu^a6)e8EJ!U9#$mMno+?M2QVg=upyJGWycFJSPIK`n+lmopl}~(b%X+s7vE?vyYWcWH?}~|$G=2{ie&Ur2 zp0gb14=Y-<6Q+K6+Fi)1IEK>C6~J&6z(@>BE?N8hHj%F?Bih z4wE#5Wz<*;@HrE)RE&qWqNzYXGgz1-(`J(VVLY2mQV%yLb}V4XX)@^@CUG+A&!y_j zCN+B4$2$Y3u(Kjo%1uI(X)pnY&TfK1n8s~*SXqdFO!O2NVwDfRumSGkeJ}V*Q)8mH z*bpiRlvCdF%a7-TOmKgo-Q-O#Hff_{;*h$Uxg91c%-z*4`GOabuqr_8!$iDx%%mE^ z)&g!UY1rmxUKHz6VJSXb)7aC}((mpzHJiGuZmY}EWpX*Xy2Xm5)cQ>VMusI_$UmOc ziBWmWOM8(-IsYYzq~zybI*CTZ^5Egka`)l0Nrimm@J3V%FJD(yk=$D@>852`2lF|s z&qOh{m>Gs+Gb%s%^2VjnaAoB%OzUv8ChCd!%O!X_pT8_ER$i7yxX~Tf!(>#*)?Za1 zK#uo1kf7n3B>eaZ-!EbeCy(Y+j7ydDx^|9z~ zPqf}Jt=)Z5BuKWraz%YYm7wI9Xe;v9o&ry_L4H8(R7}mGx;(>>So1KvwR-dLV4Ezw zdP0L|Ol&H?*lCgyTr7fNHA6d47|3sy2L8uDDYFy|BfYUyzTnl>px|wa)idYKDiPvl-EI;-2Ocm3jAM)Wc;eV3tgrOtG+}8`M<=%vHL*I?-pAy8OeITwJd^SyvSc^Z#_4 zfyt3#!*pc@$8UN%fS#k3(q_F^{`_|vh)-UBWDOaScO7Y2H!>!U6=8^*RaZAsfMHm^ z{z%F8B!t*p6Za&Nek&4D8MCzIzcI`-jX8MeZ$Rh6>)muvs7BRN)C_b<+bwC?;_C?%hVjuNiYq%AZW}JWNCF@pZLE zq&Vu5;ey{}Q>{m2OspsZZvoPIZ0Rll-))|wVzhafBVoe|)!u`=ZnM5yoty_MmP60{ zeid1e854VpW0~bo-Z&nq1^pkY%7(_o_F{w0tft3$hLt!AGSMU_|B$41vmCj2#l>&7 zlP1~r<~p-o8NaS)SZ`Bjn%2#2s%{=16ZaGcwSv^hTh;HGVXbnj8Qi=|-uc;l`B!gl z+V4>%%Q7bVGt;&yWL9;u)2zBa9cI-nx2IL3-DOt%1Hjm+LMx7%rIul!Xbe5MwU_u1|K!cfGZ?y3t%!C1#P? zX+rE(H@OcB-6uAikM63dEeJt*hy3riCdxu-E`bi&M2IM`@e`1a~m>U-SIiG4?nZkJcXzEGFk|xp85`Y+Cl=>KO`CaekNo(%%T{K`#9(nWzfEU;kzKyosc~yw37P=#3t08AFk|A+f>;J*i?;Y$tV%K z=(DMw%!p0$aN`rVNgaHV5u4P-pJQoN##+;A5@XmV4fDlkY^o18B$s`ZBmw!7kD7?@ z(5oNS5(J3zKG}f3TRyoMI`^la1h6%0_}h8QA~yXHkNEMD zI&AQc+mvV?UhT9^0FOvW)HZnKsZYn3ql*`)D(H2D*2&?+bLFwmpjT~DC{uL#Y&N~FkQ>*bD<;A2jjgiM zj(_?-`GwCmZZ_L6g=Z-2$DHjk$!e>K7vqVFwA3D}@%h94lpktu&F5>0Nv`{R?aFkR zD_X=nKIMmM|KJG)ZLVx7auQv`28f(?^m{N|R&knVs)g~1^m`0ma z*k>FL$A(~9C0%StzV53U`06iyRX3-?CNj-8FE-C|1k8F|MkL>G!Frv65l`ll;X@<_;rWrb?r+){d;+~@%Bg5phKiedq_H`)< zu=#UHfV8pX9AYBg{C#u403@A%bS@czZD5<`k^HLvo%ZZs^GF}@G3R`;g^aM%<`Z41 zuSq3rxalaucCrWNgBM2FNAtYj zjGhWK6=<3oQk;hlc%wtp-e{aHT0nNJh&0VeadTl;7;-$!+zZHhu>Af7WCa;wmoFe? zWL%|(MWsi3Mj8h_Py#*Jz(R5iaWg-cnr?R4LJ}y+Ho@j1GCoT6<=CP{+c2;Rg4!^A?kHMO%~JFv-L28n>HoGPvDRf3l%JspmN@19y9iGTOwU{}ORMJ;c%z@KUP?BT5IbiXS-WUPqLf1q{VchZR1+J!ekm!HnwsiOv6&Tf zgD=^?Rfok&)^F7z(;$V|e=j9jFj=?+kaTbmR%v2Ghfy5rwP_>L~ zSvab2*fb|cSa2DrHO8SWClU6eWu)EZY^rZL8ZOoRNFCp*=HPaHtB!*^`mH(+?igz? z1-Py3$x^b3nA!WKWc|X%Z-6q)RxT&&N1DG`3G2oaB2Z2oJzO|us8R91b_E#U>^i}_ zDzQp|OvCKDU0GV<2|Bx_w}^tF9~fSPa=EEAQj9OHTgGv14^)g{H$UH8F#Z>;TXn9jRKJ3s0LI zQOA=6Id-*a4NXmj>^L)LukT{j8_0%vR)t(V(_&_W8_0FUmj7Y{ z=_DAlVqjohg8yk{b2*Bz`+0IR*jU?E2Hj&EmF}qSLHV&yM zZ^qiV8{TSH6VZ+NXE%{qgfz0ldh!xf)(r-7B?MU7Omrm3PT36FHnWM%qz;e!Hk0y| zu|~14i2sTLi%eh|_R(hY3aMbfsDk>QU}Yj%bDXD9>?w9`DRAc=yXqAL!m(IFY_s!o zqzQjK?144uWKj{SbAVka67S{#`?Lhaa00im{R0;tsA;h)d3S`ropx-iur<}>?_kD7 zHRP5RL)Lmn0P$HO=m`fW{L;8p;r$4EsfH{o8@6JL)f@Bqd%CRVSR@{c^3!4&tF)!Q zZ1Wb;#X#+m67Y#lvdBqd~+yHE1QUm zQ9Id`zodzLI9t=#D0Y3j&vQ1igIyRPn`YSp;I>eHi=F&ZgVDe0Bz_G}O*`3e7um1~ zzk`wNKjfiYpfDE$i_sFKX(A0&w9}AFsuuwJ@AxrVz841gZ$?b>ThPhyp$ZIsb=Q6jBH*J8keH}Y*`^sZN*N;a1gq}$$oGdcw!H`gpp?W zKCd&fYh`G>Xno*o&ahS+GhU8fPL{o#SndPyK-Wod!es2X7?XDR2MyW-=wvRER}yBh?gdUVR(L$h%x{2bm9K zgxFPgl4}eui{c`uJYrXXyU6-!`wwfyH+q$92u`}DnD;IcUVvjOJP1`7yCKDn+(isD zC*h_yUEhUSp1eJ$jw@Co8HP!J49;Ow($} zKPRj3xb1Ut0tw~c{v6&PabETTS(ab%C8-ri^3pb{TN(6-Nd%o?zb7H}Th!mNq+e>k z^bD#aEtlRxtG0G3^$EW(;mJzv0p5xGGk$mB7gDKyDW#NBvEkvcUy89=gnqVYzygf- zb7@Jq@h8d_QCbRMHc{F@NHRYx(5EN~=fzocAqA|v=FpQtZsS~9$)1=)qgXF~FD7$C zz!i@|D|nYR?EJZOem-#wy@3d!sKhQhjxJ;3e0st$=qFlu-Y3Lj^XXblb^d%hUx3!X zav@!f8SY<5ZM+v^7^Nji~$66ZZ&CPM7g74$KTuzMw4UcyHR zMQf1DK#vZnY!q2=CGDRdLW)|!6abO0eWH{-WS~pfKUdPzNgo?uMF&>&aGK<>{}HXp z`u(B4geQ*h2#bAx6>Y=>HLL045T=h-(;GFt=*t$arK|JzuA#5+1)N((gPKs3YtUP@ z%b0Veb~Y<1r!An`N#*nl&X{i2c{%7YrlZDUaVdL1M-PDFbsOk~WC4igj@E}@|8jV+ z-&W8nj4f=Wc@kw0Z=`!M1-z^~DnRRs{LZ82Ox89TF-y}Jp_6Jr0`M6ERDVQ=oEC9F?RYe|fqt*6JM>2W>Xz5S70!lWS*aebYvze~T$2Zd&XrKJGRdgPKt8lwW z?*zXMRMV62YFP)Se6E@{;rF5%ngGA{*OalI#$UvwOOh~W9$RzBkd`|UP*3+czpC$%+PX!zk7H8LzqMh8PU zi0}2Jyd#{92$_!>BgWQt&|Bujl6ueq9Qi^Ay?H0+bxRb^R2W*u=Tf%0k*P$dZ`T^? z%6aGV9RCx`-|hh8kYN5-PWm;T>{nfM6l}V?o4W9jyXoyfM1zZRUFmkwaXemiQ7axB zdT3l5iefl+c@I5(c_>=I5XPTjj~J`%r5Tu|TY70d-g>*29$BP>JD=rLQm2~De`RHk6 zc2Xgnfn5}%rTM4)P$%Hh*~9b|0_mx&%pL9ThS(<~5S)R0S&*K{b-yR12;}7<+Ktj* zLv#d>o-lQT5)HZ$_Hl@=%)cC_(K(pbl%}^hRF9(Hzxd(Q*!ec#^DkoR+hH=IEus%X#B4 zB4KvhIDA9sk#TCIUJv^kJ=S>wIMbsO!$~RZsqrS0UFontSvWH+B9NQ_Z-m(&CTPhV zucylEMo)H~mab(hC+X-cE zM@Ln)D($ClfSK2xM%NSuVGXCzi-72tP6G=7Hw~v#8}+-{`KQx8+moKbToi|6igAWo zF@2J8#v$Q?T2KQaw(2`{%{KJ39QA60TK<2$Ir<%X&dQ_4f+15f?%YLy%{=zI^t1m< zbJ-cR{r}SZ-81N=8;%-0#Lwj5L_ZSdaH9AWm6e@AOtb4uYJ$BMxrQk&>bx^)#W5+j zYAO)4R{QAk{NXccgpz2!;cRNqE&&7cz0nyyPvj>qpeFba`JWu5$g{`TCzsMI00V45 zPSIuD5bw%O9~OsAgT(Nb{2iBpb)aaTV^pF^H(SSbaoOdx8g(6)Ln4(&=`viX+a(!i zrsSM4$(*ZbN&ZKdgA>3ViV?x9OW7$`(WM}D>MCvlJozox&=U!`EPgG07}er+u%qa| z=X$yy#aFJUA0s}=KXWrA@tAIYCc1vyt?y>bZlNu!oH5apNW`*rdU&QI9?_Fd#gyM^ zmbryqiL~qDTdAeanLu*Lr!)kTIClVt!xl`Y{84`*snmAGu>Tc|E59=yaU|&TE5C=> zMYq!WrQ;q^iGum{CG~|7_WN6@6LH{{+vrJ)10FFG^k?}sP~|lryXrPLhiUe^+vvvi zfuy9v^g3|>2VlIICXSnzPQ~rP`7j?VyB(q%VAk7d1N!d8j{o3Z9D_+pgL`Ydu_)|} z-VziC(`aJ$+o{NYbvwi~ojSEzEo|Wj=~A&c z!oYhD(WOqcEy2~3^2$&wm5N0Quc!s(m9RgMD%A3yO5fbKE5%5PKLHS4Tql*ZNFW#?Mrg?d~gJhXGPtOB)yp*SL^f5ia&0~l?@*rKwPJfWrslRpT z_=g9n4=G;DLvUM$**Oo*AH_S8on7&AI`5S*i1ui|e zJOYE}WWRd^R>8qZa~l@>`lIytg(Ki+evYqBr?4?Iy-C;3a}_D&V6BhAEj6)=9-|Gc z?`gW2{oygXV^t)n$AA9lW)OyBdTPojj@R*8R{J=;9~tLAJr4iH$!>l^LCKp>&^0K1 z^#tYd_=!KI31Z40`YDVs5*vVLbAI7d@a-4d+#=r+;F|zSVkXWSo`!{O;(gZqF!eMg z^Wq+a9mq`Lpdlms$Qt(jU(jQ)oST0E+Qr%Dzra%CY|AsWYjM-JMzgbvpP^?hu)CFu zz6K@Ku(D0h;-Yti*`I|EV9lTPEPaO?(#Q++J9vEZ0?0hfhJH!Cc>MgA&=kY@*)P&c z5ItY>5~Z9$Y7f&A^ld(@=p+AO_zQ4r4^uY)`RXum?#y?+3`0i7^UwT>{+U454*i$n z?f>Ck1WwC-gQ)5)iadN98KvAD9yI~mR`RG*@>P6PCFn88I{J9dT8c=9{~)m zPC40Me+%ctnQwcA{*z$;%Jdptp$&NI0v>kJYX|}+UIXho+3eTpbJ=VgBcmYw-ce*`+Q&2`G#)WLSVhdAtsx9OX#_fPbA_R2emu1DDC??4F0*oJrM z^VkUc_+8qfX?5?bXJ3B^?4I~2ozFb)(N$=gdXHX>gyyP0(OpPdPQ!czFrD;gnmrb{ z^?3Cz6}QauF5;4}{>*_K&j0a!ya}ov_<$PLJEMEWNKo!7B+kI( zw|xl_BR%<>z5*ZU`rT5k|9G*TKemc-ucS*QJkey3Ux`(0SPT2)YdS&t?+Xi05X22N zRQQ~<=Qr~YHINoIp%D&}Y<|90SWiigiL-^Xk>t96w(ulr%TLS^;F<5qpEg&pkor!y zv}N$*n!TI#4bn+9HJc45)lAhO&pUv6Ufv@5yQM94btn07E<((B`E4kZPpTDD-IvW1 zjPQ4A=Lv68g!xMs2;=Z>&R-yW%CURKB4Imt<>5tw4V~sJ7Mx^Fr<)%FfOP|pMH_q>=3kfO?;yh>O=;nYUf2+wc#bW1u<7<;*JyYX`< zSyL#Dd!trCc%TU*L#FgA<}JNpIjs?W1;mz7xi^t_Ns6q`+B`_oo1vPu>GJ+*t8?V*OG=G5Y>r8 z{CBcux;PG~u&^Nxj0H_cEzHeGxv;sk`zW}(_fNkYCfQ!YWp#6RP3ybm)Y7wW^d|rxTVCOa72fa0=a76&kN65lbiiVVzi! zP~ge(NydENfG3B(*qM)IZSYrgqHDU?#eE%}=;)TV8;zog^;Qb)u(CH)3ODR`CncTY z3+Y5#w=_AJ>)u=EPKtvrJOeRY{l(&vVR)1klNAX}+2~Wtg`yqJxGCU^Wut`}D{3Mf zR(PBKM4>V?U5O-TW_l@6eMfbw#<9>ywW48q*|mCM#mb)l(Hg}C5*>~)yrdVFkF=w?u##%Uq1TBm zsH&Ns$K@#&u+gWIUYSHE?&1BuRoC`E>dJzVVI8);90su00NZB}R<7`8aU_I$NYz8h zYBfKC6CtTAyVHO#)I{^YF$gUL>40@r0(Ne)tX&j_NN4^|QFsu?3G*X0!l?vo^WGL= zH=MdkqtKysC&47_<4c6)>>{I3g)OC@7@@bUY;LW9Bv*c0t#B2E*LZlVumPI%A6qd| zD_gq_8g!IBw@uK&@}9X3UEA3`+k}MxCz3Kmn0!KAFF}m0&gbP;Lf{t3#%!TiSZMK546qQ z98W_gp>joIx5&e_Nv>m{Uwd&v3}-R*QFfh4_};PINkuyQICCY~_C~BX$o4i0TlUAY z5S)=%wqmk7iN<812(eMhNb8@%1GhpktQLL#>2@zF5Pfmwi2fCmi7W<*gEje>Ix(9B z%f`ZCPdo`Wb%1>eCH|Ql(d3aTrYrmi<$9qvl$Z(18BC$ZNx0#{wwQ(GG{+M#P*;Oy z;Zj(^Pt2f0j+Hb)L*??$CSebSuD!KcxBxt|vqgA}3GKofwzO3^NV7@y#sOg+b$Hk( zr$Obu-YWEJO&$Y=MzVT6>#;)fIN0@8VLe`c!Ya66SW4T352z>04%`WSxV~MG)gG(a zFWZIL==Pg-;Ra=pusX<9Ho-SDNVy%{5@x&YumnM-?Eq_~S$l`j0GQA15WXzM^mVvO z?hPYw;&F40$LG_V^4B_E=Da3g)^G%@vbbZd`N0Y0hwCS$s|DxK8XY z{8ltowop)Xq)yDC81-a^JjkfI3LJ2bODJ37LIbXA@s?^lz+LPoF5yI|fG=IbS}26o zJ$TsI2|bYUCbpM9aOkQBTw`T7@<)h0-6O;`&a5=aF1$u4&!5yQqzMgW**zD4&-UL4 z2g8|V7fcAN@{9K11#Kn^|AsTfQr6ZFtKIEkoehF6|9HPJ%Eh&6P&feDzGF~m6LKB{ zJMukfAouA|9xF}~&LBhiYfci(WbSwt5eH<|&&GU6-F*Bbt(MV~h2u35G_Y7bIJEO* zA*l@U;LXA&_TkCGPvEfM?iS|LW4p7(FQeGA>}rp&YJPU6%F6!Y5mF`YEI+8zV9wT= zvbZAO(3GvSvBZ$D6|!>kkPxEF9a&L5u!j6g8W)&@Vc0Kymg)T*ZTV)u&`C5S*{LaJ zAAt(|aRAk>{L2C1F}l!?bC zz-Ow1PKqb|IK{+IW1)7?xR-CWspCMunb{?yAfS!?*QhWBG^tZKgr?qp1` z53|CK#eFl3uTC(F*2ghjT&+>1XfegpC{9IoGPN`fy$& z1})e!Q#BOxjl+~O<2aDr#yZA@@6q-wTVExVvJc0F{j|x$d2?<4yb0kdzR_)%0v3An zG3+@LT2atdkG~_#V)8!WbavV$f`*-XP*}h&v%laZarPV7V;%RX@1Uk1g8d|_n#%~q7&-y`FqY1uE8!)R@{?iXI>_( zV~KNx1oYuM=L#p+bYd~kR!Fwvv~tFSRGdpySDhTYzL9UJs{uB4p0JeqbL`CXgj$-) zu?No+`u9h3(|X3m^-!Wvgq~5#L6lXZD8=CsrKp%BrNZiwP6^<%NXg*z8!^05FjDAI zG3gt@u*vDl8ecFO2_}<;;XUl&`NB%5?%U57bkv(uj86Wo^M$^)_R&R@&Q@+MTr&G z$BrO3sxN-R$;vLdL^w;6%!$~Gxm4IhJvnywcZ5nHC?CI6SWGmr9QF^+xJ=jwbPEiw z!T`I733gbP-!oxgSs;hg&K{ftsvbNkTfKKPKl$!s_RB%z5qAFN!dZ~fWmgC-CFvYL z0jr$mYmCL<`~nIVzd|TQKRim<_pgBHMcDEy1p^7>O;-x{QM~)#j!RGoF9>YT+pY5oXr{d+z){t`*{Bc_ar1f$uDv zW6?lxSiSZwcC)GLg}0%TJvRs?-46H-ss~{z{<6W=;d^0lDsteW!kpE?DDurZ(Tr{* z@Y3Gu5QTZKmnb$i$y4dF}u#|~E{5I;gwCL7qtcfhuM^nh@jaCAwVKk-2jiKO%FAz>xO4EOv5 zuC{}{@e^TLi79EAL|)phV5*yc@JKSTIgbe2sVT|sc~q!m{zn9U@b|VykZ~~QcReaR zi#%0+_T$16lw|VH{8V_AEN}p;prDFv6TAByw{>AMLF6=fd0btQbm-ow1kkwBTV6Jq=}bGQO_HYk@1GX_ zM6}kN7|OAId4$aKo)wlLPaYo)Bp|b6_Xw8jpv08>l$;?ref5BS-`K# zgu1<(#O54(^EK#%?Jo!m;i_9+5GpDs0M$`WT;I_}2oOIT0|%I0_yTl~jR)yV*=gg# zhWr~Z2s;SO*YX#IL(ufky(oM_VYwc88Hs|0eK{ms;6fsMf!h}oEc{!fWt!O|zZLdi z-qKfuAnYG>)Z=`}SA}aAx8~F+VLCi$WS_h$EZuKYjym(BFYO7vEvcR==mCf+&k%w` z6`{)SCN+@g=csH~*1!WdC7;p)JgIuQiANH9)S{x7m5MfwSS8X>ik*cblyr?!F@TDK zmPWZ^vYpT2$9FfUUEgZ%spv#IyXQ4w{h}0FjzVaZ{oyrXH%++IAYtq4!U@ZRM|UYA zImW*8y3k2`a_pm<;n;liI^1?UbNvon8D*FJPMBm}M}#Hp!z02%W;_D7uZ?T{N;ZB( z@FLV(bVMj)Umg)wkxoVZ=WBj1jF9DaV2#IKI4)U0t|RK#$JiZjK)~(nw{Hmjoaz4{ z{EqrvY~h>2vc)MEzEO#s|1>dzZ2OzShFKU18EG}9*!QOJ7tH{u%tCJoY;_U~0&AyY zxU&j}SGBB37x3g^YyT)L-ye1rvK(AED<&P>etL^_Y2+M~sx+#KCQ_*hOxHle7CQM* zrP5RBF`^a~dMXuhRH*b+iV+ld@-hgjR15>yf^0)C@R4wPt*FhNsN=nrKrqAJ|09C> zA=dG>@DG}CDNYU>dPiu4)fsyaVKjUiD@@NZ?+P{4Iif^!u&7Fq6=9io1xXVcF^KHN z1F*PG_U^kvSZhsU3x^#(9yGr39Ylf%;cz19U3huJ5=j&i9;?{b}885)%S&d_SE}O=4rP0uW*CTd0$uo zV~O7;GAA`5btUv&BP{kIDBXe2;qXiQric{8wZZxhcG?F*(`c7by-hf3lw$lgVKS{W zi(~2sq?FI&*dqMv5~D@~JY`Q>>M{=6B74Q=q~u9gR(jGiS3gi!S=pSN-i3!>o=h9~ z0h=+SzM0j0D6A@*X+@i|Q{+kGHPIGPc1Ij+COGi3iBgaAxYg1K9OW`vireVo}i{n8nF-H0cTW>&mA;ku+Yo<=!|f zwes%c?B5>=jb&N0WW%&I-Vsm2loE4=OaBwY>YY{>8~j*Uv)+L#@ak7LOv*2ubw?1? zj62AE`09p>UG}lCex<{F^anNihDG(e5Oq2B%a0M6nAqPwhWDRkEuRQG$}`G}owx&9 zIGRsrH(|wcwF!6b`2ocCw5T?Y zLsL*TsUW_>yhUuwU-lW2U)zSliie4$KTcd>W36!30@Z~pI6U&psP|5%+gR%t zaF*Ix?h6ELZS1BmAd`FYzxYD9l5aqGzk>R8vZud7A1C|tE8%w~7!5~y_^v}1`&(ID z{2vd?wI8j%k7|BON-Y0#T^aTY(R=}~>c6O_8vdOiXddAH=}$D8+o8@!w0N(RRn5{| zsdtBQe|ey31~t>W7v<&d@IKLRmyX+R6jS#62eULf9vLi}qq&{>?d*{`nv>v{ubQj* zBSrJqb2YCMd$)?ns9j9sTcguoL*-i{7_G8072R#Dtn9{ecw!hr<_=e3i$qi!mFgJ2 z7OQR_C+zsl5N%1a#d9>P%(!##K zOf%t17j9kz?2;RIK(HGZNQpkX`nj{*kopm_5!`Lz7ewNA$!FK=uzi>I@&l|9yHq}6 z$3d^5-8)X;k6k;r)~At<`9LV2RUXHMkO;d7-$o+=c6X_!tz_7)ev~GIODRyC_(p{< zz!oneC5whIa$x4F-Z(pMxu#;tFvc#|yN0-U_yXX$3>#Ul*}81Vj+`_ufAf@sp(dgn zE*xifFV~dM=~g5)6Hqkt34L~HoS#PSwX2^==&`F`HRukgw`Ka#u6*MGw>p%5xa)%_ zwBM!`nw_Mdow7ocLJHu&R%njQZs#|RAcGIC)L8cWt?I}rt9mCTYE@@QSk>>51g+{! zZ83GG82a;>l2&ylk5%gDC=FYc8AY#Ez0;BnNM0*Pv2ut8I8NhyJOAn?zh)em{v8zX z4FPuADorgyyL(q@!n5L5sXS%nSB=FV5T86+IsBN#)~JM_>BUC3rQZ_OxF9X`ZzX* zS!SJP0y|=#tkZaw#I5*V(g^;v52@PGl=rRI9Ol{k2HqYRKiI`iG*nrF2T zly&o?$xP>H9%K#YX}Z?!QN3>-;o%SmGK_m6 z`}J)~e2%+5qvvY2u-~I2)>C`FW(C&Mc0R7N*w~5Z0cmO_yX`#9HmvEWDz%@x#cTzi z4&i@B5UTfjkcLlrhKG@Due1Hf`f7-auCD1@ZMr&B{^RpCa|wIuLQN@Kc%fzh?$;yWlAUwN5^5_aM|ew7B7?%8`+Y0ko_=-Abo1Ei0A zay59ZhsoDyoTM@T_BERKwCMW$jhf?2nyueRmY=+#Vse0$-lW-BQt_W!95-q3Wi2*& zlV%e}_`yw3ntklZP2jFxR(rEXPkQnLH*2s<)z4o2q2?SU9DTQFq=oJL($%zCDeGr< z-=Zm5=vPjpOz)JpvtQk!**2>+%undC>rcSt=vG#Ft0uJoRWmn2TJyKus`)B#3}iAM zt#?It;c&_#ZRuQRbkG&ui?bT6{6%o_TZ^N`L)helzHsh5_VlwJ1@U0suggj#*;V2w4YFI zG6aOOv3s$)>n_wD!v+&td~hlM!-Vz=N|PaWQ(7AWsTXIoBSKY_OC8U{<5SYp=;rs5 z8o5(~di5xkGayBi?8b5JuDN(&k{?K{V~6k1E@fYgYZujWzbars7yTr@ufb0;7SdUh z$ZsXFt5a8Ai>P|q;+OeY>4f$|_U8%h3GDY1+Ia|X4qU4(y=+ojOFbdBbyDlx9LM?k zx)J;leHN};I4H#dBK+`uVUN$r?wHi>oP%Bpz--Y0?YiB_5AB}xg!Ik;6v^~e5tni{ z9%mr&4IN;xL79Soi-=D%Gk7?}KA6(huN9nh|#=@9Eb zpgolaLitw@XwN3phqLwvv}NqO-_c$uj9c`q^8z5-@LjD9eOUIp+8+MSFTbm8?D2(; zf_;S3p5tl~r#q9#Y1SaQ&X07VPVo|T1p;Af`Dlb%jzVZ_RKJN`d%AYRQpGLjX!b|T z_${oc!O!Jjzk*%hHHm|p{ObXpVUO}%dz^vcD5z1luf>1`xs(}XG~=eK@?|5Ha2Rng zViCO-amXT$TSSXR9JUm+AZMrqg5;<_H5AKLW4APxsK$N)V&`~BTC211GZSTYr6LlN zbWNT_s8DpX)6UQ?Ti1;*8b^G=>M-v)lnxK+X4r2y#15UI-9j_ClW>N%d`UvN6+Z*$ zP>3x*Q!C9*@B|J->G3lmX|Xf4wPle|9lscdWDF+6-AXVfzGscps|)7`q&Tk2oT>Gc zx-I-$(cjwB>}EU8(pIkM{!eXqL7n96v$W?UpT7Ki+D$7nA#o_Q*MKXA-=NfZh<*G$ z?RxaeeovdFmSSwWgnlT-B4)> zK{gTX&Ctb-iN9%%au&sqvHo+lu~LVH2edBm%uzyZQYGZS&(-Q--q)U|U9rgg%^tSA z;SBDOxA8$=sJ4+Rtx_K z%u05Wq&+78lB``Oz?{E(nKp-A3pdlY@zbJrU8^n6KX--pK5o-7jc$I33$>~jJ9zV1 zP^LSs)3zUrbgBZ!6?bSCF78l!6;;+~{=qx60ZJVqR(`j3cgZMkhjKb0Ol`=@kw4I&UisMM}wIdS(!Oo45CE1oOS+Xr}f{FTIfuvmzI3fG>G!7n4Lmb)pnNqAcn(yQ&JX!h;)qAO z;L_3q=N_REM+>iu4|K1VAH7F=AYVbE2VQC*LAjJzNJJhax6zz7!9PL5vSVuXyl_nF)raNq zR0RniJZI|mvZeMhacp#Umvc*#=(b^C zRIa;fgC^_N=j7urE?qP}Cblb;+m!-&-^ERSZa0T@nSAoai{yV^ z+~#n*^D<&hfcTT!i*aF=N9FZ&t+Q{ zjH$3|mLFuJYr4D*u|%WZ8+)7r zRd;y{gLnCq!7Inacw&}fLJ4Wii`AIqzh1I~nB?+HvlUZgVyald?3TKGm|beFSF?Qo zrMryd>g@W)L~pUOU0sT3aZ6*ok$0|jSFB&q zq$UPr@rolhkIx=v3F+1CNI0P#Ncul7Fww` zZy6JV#pYqR)XEncO-RkM~c$1PNQS;saIK#9&@Yw(BN`?ZRUN6?Y$!b%&!oHk>9jvNGgIkq=vELW zH(#-gFMq$j!kW;BQzCe4W~M^#NzBZoClmg7pgf%7qz;BlsSIZ@R8^t8stOG{lm?B3 zDjiDA`a-G?GgD_%tE)!0227XtGz(p4LV>QoPIM;>)dhi`O-Oxw#kqtu&R5*)mV603 zd)$(R=MT809yxzaHyMx@UHkAcy&Pd&Fwb_{suF&>PBayv+U}N|ypI;Q(r1H7!TIG6 zE+p;p#_P&Ri@ftXT}`Y`v=^K77Z71COsB~w^}B0F;=WAOA4`jE@^`P>L)zrWuhSo! ztP?H8cAY?62ty4PB%0qTHFNH;%yCCWryGKF@Nhv({IcVEYeU+pHjX(Z7aEC4r_{k= z5OPYroaEw8sg>uaoGMj#QJ<$BiGqSVy1|x!I8Hko9f|rtCgw|r;xP~=r_1S30B=&r zSs+v??$je&^vdNoY$;3eY+lV!P)4_!WuG#xrGx_FUMP;F!zqcfr_$*hAuu&pR=*!+w&BY>Quvt*?9)k zc_ITvVn&|1@!B2UI&rKxr;);tqfTjx!#<&ctzm2q<|EEVR<~NSrmTF_SsPGE2KDrH z%98iVZ=AJ3zT&1eWsy2@yx4D_Pip4ikIK*7K{jl+v38%g_VK5X#RG%sdGIe5QvFR}8%=@0iocXgk0VVp+A0D@AQUPa?oV!$Q z8IW6U-fSDG69q)tM z{4GZw*{u-M%nS%g8j}Za=_6M8o?G<9DZg?{1?iO!-C8QIxV4jv$>(2KCQsd3LVLWt zclpL!OIPKbdPo%5Y!F>;=a479SE?|Iyixm#EQf;ViF3}z-#$oN-b3QHg|g$e#k0L6 zZri>e^A7sc^_cspH&u`M`(uH4(&w)?Ie7tuU2{BHZ+6bghiqICI-_-Be-V`S0tnk7 zkT~cp1^#k4r6vwCTLHf<38|a&q01??Bx=#S7+#{h7RD4iWbsFj!_@ltN4kw+m27>n z+EhG)2?0vQcd0`*-fmc7cN(U>vBq?an+;MdR_~C*w_js%VezA(l%d$rR>%PORnuZz zrHVwI*j8Lbms4_h(=gBcp$Nd`yrXIRn6tjiY2XN)U42eneY8&OEH)f>O5@y0YLy?o zW4or+sUMgBc86XUtP=-|b(#uwnhS$Oy*aT`mhPvu$#-u){J|3%$_+!EJs6mXt zE|yo`_1j~I>%>s8kNyI=_Z0dXa7xLj-cTEgjreoUfY=VQ=ayF}3LCIQUUuJN(jzzC zy#*@3e|HPC$?bRR7YwMJIw`+)_Zgepl|(99P)sdOsg3hnzf&6EM9~H!k%>TLN}Ukn9I%5LR(L)xf_#D++;XuNeg<&zFpFCSEdlaWh4 zNdK7Rm#;Wjw>?`YW{RE0j4E3vjgk-R6GKL6igy~v6SUiqDXj0u%T^|pj(9(DV{Jf; zL-@-(e!PvuRFg8{g z>%s3*M*jH6>z1dKLFy|iIG09@QmefF-W|j%yY4O9??W~=}#(lw0CfuuE6AofT|p%{0aI9i;qKch^28~jH18Tx34FXUNqq77s2$3GX&kcX<(fhW-XM69yfxSVaJ`fW}z%W>N zZEDmTotYVlRaK3s2^c=3N(~(^(uoyDXd9zG5)*wf5e*eiD@;3`QKs#z6BEj`6MWn< z`L2sJ^8NV}SDEU>XmL5iMk$@a+@k8-%KyAT18qHg&~bkQSz@jegTH$A7 z5tH0T{V3ihVp2{4S|%p$fX0hSCfWGYHNNOV1H)w=3Lr&@2l#VECap=u%MtzO@#=rBr2J~5k7a>&m;yqehLcOI^w79+d6 zOtXf)Ql{CoAg-dL{Zu7mk|$KyM6l`yG_Lv$KdKXq)bt4^aVJh7#< zQzeY4IzRcdC)+l#7iejt{w6m`vEx-4RZaQd`r6&zNJPW3vBuNwT z&`7zlF&V4(n_zHq`*2oy4yd^3s}p;QOHY|pHuIXKPTohvq}re(87U<{_~cQD`F!|f z1?1tfU+#fHe( zssREfmHkElO+NG}@;Q{-qSA;-ud`V_t}dtB3F|5$cRsa|jLM0pwl4^nxJZW?{llkD zUY9V{^U%}m0*6%|X@_nODjaExs?!q(qf&x%SkR39-j`-4(NooJO`e|C+We>zR0Cb{C$mGbe=Y~M6#f{Pi1Os$wO>D_TLn!$Up@QNnq zK4U#D%Gzg-Cf#!Vvm1yHtBOFaXRMDrR$w0 z)qB{7fC`5x^sI=La+P2<4JBdF*-cOgv#^Z>6?M>7CwhwuvB(FW+YEE@-seWjI_pGV zvA|(cohF;S{Z}6^aF}5JK)T6WpSNfS>%?JoH49xPDZY^)jR=BJ()>-`Za5v*n{4i6Kt1{l!ZgViAS#lH;PiNMG#*nrJae?Z9?Au7*NH7h|D&Tpla!3ehb~wtpZn4}VB*%7c5C`g zjY;`0FZCYfH*-Tojom8}sncZOLES=(sS)1LAnHcAEnE*l426(<*-ql}BQLL6pEj%0 zh?ylP*LaRORHfzrewmxNn_gMF$~!K)ic?RS)!>gS$n7w0U!~-+SA0iA#>KEwDJ=i~ z6?w!rE_M{#c+E=SSd5sZ9?nxfvt;68Fcgt=L%M38xmveZCuYo2mp^FDCG@%zb=9E= z|EJpqNCt`pvze6~zL{AEdVyAonDt)y^H(>MjJ)Z!^&}wgeywF=W?URE&SAu?n!2Nf zIV9w3Un|)ek4Pit+JrZm^4k!PikhYECk|ED>}@m-_2>3(7lURg9?_2lt98a*Is=$% z*UU^@{>y6{_6N<4Md~d?h6>g|!mJfqc_ z89w;bAJ&p3iE**F*q2lOx@Pt`T{V_%DW;uGn z>I>dzCuZ6H#zwPU>A$`ws5hx2&C2FBRW=95#r|Ta7N8p8lZO5|(yFkSLCtIBU7szM zfAhxH{VA2RCdNho#H?;|m{pl<1M2z0U1rrRcVtwh9X2cW0p{4L&Q|O&OD#dv>_Q3G zIAdn1ji(0{#c2;oU1q&5>Q8$?I^$-3vw}KC#t&cvbF`^N?VLOaAwpQ{}Du=0O@BgHmSNWCrq^lYak{zrNYLufZlCc)QFvJT9h-0PZuZ z23IdAiYw+G02lx|%;Ff3fB$x4cdxltk<~Ei($E+K=Aj-lV%SI&?YXc@u#@9rve-8Jnfs1B0OCwzxdukl9bQ>b3dt+-~Kb#(2M>u05R(Si>)+m zhqr4mOmm%)iGj3&F)1cL{+9;S{rWGf7FDM76?KMvP$eO`;{CIbd;9yV$_lv!uJ2NT zn3Z3C|GYK1aWPt)bIPt_YGgu69X#!?qhyJDTpTVId*y$9kc43z{;&y5eaDAu1|oKq zcYJnL;#nsYk6p~zRZAvdmr`8$jM$|PzQ|F#)Wx6U8I{LcGinecVV8n@@lm^K!v*E? zk5a@ZU-*%QWDdUcQ5}I1v*?q}_}%`=1(3Nv`y_xJTEnMjmyX)?!`%Ppp1iV&XNn=D z`}C(3h!Xtu(}!Wr-}bk1#0{SP+fI#X9CGIF56kvvCnO7>hc}|kj|T>4DO#K;Ag-w} z$Kk@9Ckt!HO(?Fc=$=sJgL6U+Fd0o!mZ9L2+ z=IlUXB%*E%|LnheN%z4uf7cTD^qc;1bNR3x5lAo?XMNGCBvg9^Y9KUHpOfGH$3}z} z=KXUUEa$p^)@<}f^b>Z)n}=09s}n#Y5(2f25qajHldDk02T&E{Mxa=>_+R6^43U7@ zG7wmy-G%=O{jX&u|2}?Ljfj(?d1YdyTmvW6g2in!sMd${wzo5x3joW8tTIJMkP0Y-#2SSmG`jo1mY&6>@9&f zNiREELykcztRd}mz|J}slUmwtXQwVE6=ef<75kO;qV$&}8{4EM$CS1!WwZNltrHE< z&ZBHhOB&JJty*H+;j)W5#F)6b25RWQYPmJWMO88UJ~Pubm)$sqH62Mxv7FuW$c9Zl z_JYvvQ8~;3^QtJ1TkLH460(Y&H;>E@_x~rnw|xumo&O8o2fu}PzlGDmVR%nl=I|b4 zWIk!4NsIi#SH~?3S)`a{W(KLc3)Xduam)Y2bIKycEpvGGTITQ^nSBq%#Qwt!Bg1q7 zJ|T;I%GYJY#}+Rj0n)-!3y6t$^Y<{2Z;50p~7!NjBqr~aDe4JpOC1ewc zvi(cQY7%6ZEFtA!00kezDn8mFdVvq5fDbmflpH}OnV)lwm0i4)1WG&>=v;Wlhl##! zwrm->r>^@jBn@VymWf(y&^fa)#9R{oWO`D}T6kuWVRP(n%Lq#v$x2j zW@cVNBmyp6K{k>ecFhW4(85#e78Gcshpk&lwh;$Avy^ODHir}C>_ZPrtt2(X#I9XQ z$|SR;!4#icF<1DK{ablhtYrCC9wH5rgZ=kPk|j14DZxx!dG(IM5@l;vkxdn?-^_$|;{g!}Ck`IY92c)5 ztG7oF%g2~Je-2B{ybHxKDc~f^u31HDG5YhXNSSTi(qKM(d3+tM-^%0bX!=$jUq`d0 zp-2n~R=XOD>0!OAiFi__I&ba@4Nma+%*^yDSp`X4QKtx8sOSMDduGO}JR5VC`k-Z& zPW&;IZ+q3Ib8CvSH&>I*M@(6`N=H;&T8>>hu&_0h3kN(wLo-NA)`0>^LZw zM#0zonP7(XBvdukDq4$jBj!-{qr{{`4Kart>W)vG-M^k3y*cLK(^SBM-PxprFO6@@ zh8%h?-Vl+B=a+5(;>5mIvAfu7%Ap30ybi^lYv>*>T3ac!WTA~@GZ|p#Y$R*QF#F*~ zEOeMXyOI2K@ub>9v=2*@?7~gtcgME0ijHE(R)=c%dkWRM9g@dUtHxv+9CM>s9f&=b zuzSmiWlvZYm;J4xtJqJr&`++=kJ};Tiv76e`pNQsR)SUAE6528b7~l%t(DzXK~`Ix z4mDO}LTAIU3_FG;3xAp&>WL4#L)|H`I8-YYR4h6GUtY)Nkiz_#Wk>4BYK_YwnVCUH zjwM;<)sgDu*~qMR5p_HskY!iu$mFW9Ly87wW`g+Z8lIVPIB-hN(GX@eo5|)y76n;6 zsN!Tpo5?lAl>cHg>4a0jI<}D4AcDjyawY4z_D6X(N92 zovoy*q6+}w9$3?`3h-vEja%Gfm?)2rjpv`0l@ub+|;3r3u{zSwJ#nI1VBBW#+J5MCOZEcQO`j6wxZDFSe);vHn;7~&B z@O1kfI48!|*O0%FcDAgR+`KwyYj6hOiX}tdNNCD0P1qF5A7wAplG5^o4ZEqn_=vx! z%Vv&86Y&^79~QMq+Z)QaZ5Pc-cBwoAGYzpHdqP~f}({tCle-^=|b!h-ESl%&;ZXFVSSp}hC1NZ z%;I(AV?0j61{5*ppF4_7P%x8aC+r;yd&5M^*v4Bl^V$0ElPdQ5ab(e2i)wN6qtpo4 zTOzZp*=WgsxRYEjEV8L&KHelc{!<6+w>ycLFRLeCYe_g?c03WeC1o~|KDX zv}48_-Q**R^?A5Zi^Z9|@4V=b_zr zl&nO%??uUug=;XfaZcY@Vz5)fF@)s8`9l+A+j7lRlQ{NG5Dc;N0$7lBQd!Uq-zPJR zNI$E%kgPm%z&6*_KprSRi_o?v_N$A?0ovKbycd>6h^)%%3eUgrRNNs0fB2AHwYV zi$MqN>_SGGv5Hq1*}cX!S=2Xtd#b1wTbS_@)C#lgCB%j{k6i*K8P5Ot5}3-cm0g#S zQaad_4_=0aLLf|EPX5u*Z<8E+%565Oi$9wurE&i3v`J0;IcQUk$74TNIpaRJ5Wg$` zqbtZ}fu>#gLsygA1*~@e^{{{1*b~>2ztNa0|G*7oC*|cI-$Z5vI%s3DTS*N?%PVgM zu6UJmZzqch?X$}ja?^gXI00~g&)t9SG(`APps(wmjq1H2NqU^4aD)!g{ z8pC?=zML#{0ao0}tmIYJvvU^G#rfnB^g1HAViG(5C|b(I#q_u%P*1e-u#Stx7t;+G z>YT-Nu|SgSvZZt#M!0V&wewnVQD9$L*+Wa|T2{4;R?k;6t@5ePmGeC@F&7hEEV+zI z=;N+sbRJpC=TMM&zNFs8e!iS;UKPW-3Nm~jpCAU0#Pluf>*e%K(w={F1&#BCc9qag z0)|hnqQBqi!cL+-kksqqu>pYHJnD@F`H{mU!t*#L!%I0zGRY(aH?INJ;9@7QrjMY9 zJ!|Ny65fL=#y49~qXS|ZNfuf|2Nt^!fmR@eiO5$!R>po}pexuv*3i>PC7WDJ2UquT zoaADXCsv#F`@?-nZvx&A7W@8M+JpgW*U?8wjD56@-k_O6UAA-sU6;RSJ$;cc;H+{Q z(z;?|M~rozDwHtS8tr^mQbAjQwi7Do7o0LZtn(5eWL!s$#pFtMzmA?tLizg5^gOZz zSo6dhTu^#BJlO9mX*D_*w$MD3@`GFGUJb9oZm$HgcU94?K*C8?w3%#kh4j&oehg^F ziIiDxDo3srhcgRAg2jb!&t&}cGWO0^P>+lKYb&+Uke9u&kCw1LJ*^`l_5(dV21SqR z>CV+aZA03t$GXtRT(?c^NCUN_(x8F9v%(dtuB!oAM3NAtspM|pTrw4m0xxg{RzSInH_w@X7>A|>CL1vf67k!CAf*5 zyo;{Ua@0*TZwD=7=b7p9{NuZ5s}^%uyoYY%Q#p$2@&kKljx6GYU!ZGtszg`jKWe1k z6SSO8)DH6KU=>}cl4s1TXXU5R(&b_bdqal-t2h5&R(c76?H_BQ50Qbq*h(MQ)^e`l zhhtRFuRIkSa^bwa&zts*ax}svKCF)r+t5L8UJy#@fd`P}a~<@iU7XmhF<4L$h?x<$ zvW<;MBr1J7*HB-7H)t#zXF=w*e51ZpwwF z$4w{kc*#v|cx>*W2~at@W0&;M(^k1+1qh-4Ir0dxx?VZ~y>xRgZ9uEHdg*J+)M=@k z?QqD+6*;bjC4F=!iL;x1 z^kmYX-#S81A@k!3;tcHkI4#RR;fFi{mCg^+7YVqhsw#K5k?UfgjDm66^5r3VJQx1n zu)>g+glRWYe+|=7JbEJ3157mPM%l+@q>oLL5#Vz6B(#W^-8u;)3vy(V8fnDKzDA9W-T=<*=tQ{pUT>{0mFmhw{Hem3U=hCK z6llZC{y0TT7DT+&UJq)rYqWF&TQg0^=5g*3WBDIULy4hhai7AL6&|{hjqRgnLrjS5 zj|r@J#mRI9;c|3L6|2&I`Z|bt!zpxqp%d143Oyfye&H050ASO28nx3-D?8^j+P^dI z9m>UU_@(Gvs2Q^-73VCH!_=FLt^E#Ne>7@Z4{O?}rvD!;$G$_)Tyt1o&}2$Po!bad znn!+@e)fMUF8>~F|GyM}_j~lB&4+dF;%9DfVjlrt}I4^YI> zlkAg==%ttgbU;p#Wn2^Q&dnYMhfV{>@RI!P7lU*lXr5tIq9G64$YpW)CA0>49hZP3 zl}A}A?#=C%jB`VB%9v)ZwX`Jvqf0;upbkZepy^6>(iL4V4?uYn##{r+p|ek5PKmVOK`B>&V+;KU<5{LFL1ga`V$^k&+!HXIkd$z(iRuZL+m z;uXD_bXSxEP3p63Tnf zD~^Un{L1?TJO38iuyWWdDy}cTrKC0(VSl)Vx)8SAek(m;dB!VFg#1~4+f!*4U{~A< z>(Iwuy_Ig+lu1cC46hRhalplgVG_7t=~C<-oc{{2^4q|=8D_hUHlprc?C1~e#eQr` z8roayi^rg6^wy9#4>2>K^)FO*q7N&9kAA^yqee6=+luJN0U| zn%K?{%BAB8ID2;=q$^!&S(1wX`25>e0m>dVsEB zr#(RH)ps2#{_z1i0tepu6PPVgcIHp$4jN3c&c6#QH+WO2P%x&)>G>!(QN9r^onRmR zgtiFX9!b9Qs#VPOAaxsqh^VTU_WY3kx>zPU45``ZM?f*fy&!7{M#P*KmSw+vkUmek z^EdpI3Y>dxeh3OJ%wBy6S|P_#b1N46%ER=Sr6Ztceon7mr;sr-y+JoD$`&z|W37+C zEOoQ<9|1Wz*$YUmO{Dbr=Z|dzRydevW{l!wJdb6_&o}y?E!@r_FJbv*jh>2)^{`0ho z5J$fD1xh(})E%NF*j{Kp1Yu-j{zEVpVACF=9!%t`Ljbrf-}P%~F*2Ng>NoVy1dMj@ zzZ6sdkN3cBD*YXX3b0FmN2k}#p?TtPG*1A{Z2Rx&wd)ap=t<%z1MV{6FjYzqu^jNj zeZjq`F#GH8VVQ*UZ7XoFcg6UvEfH^s4DX#2ws1Bdrd!#`@6q}B4X@HZ z&JdZ`XglQ3W3SN^M!oAzTFTn~K(E33`+op9!+GcH^euwzsiWV3(hlc6Z*T{oL%}t> z^-b7Q;fwzSNQd)V{{)a?1M8%>sB=k&=P)|&Vh_DV-zHnZ!&{E4<9OetYf(P)F1-@L&9(2*-R!!z=`rl=_rN~z#r{mQM*`+v zpWdy)oO$1Yv+~uS`P8HNKfRB3SnH`DP{XEhY_Av%N&ZlE6pAap7iUG0s6oOO+6y!M zsSoJJ4QU*C4;kvyUR)iG4WWtT3W)=SH>UZJZiXDye+Z+nl>s6f*z||=9An4b6G<2QtgrMGb}Og8*+PWgf;OAl^ zF=-m7U-CzP3H~E}`5V6iiRgMgQl0-8v4=l)hzXyhODDatRES@ORkYgx`{ZjnMSAaz z2#*nX6tz_Nob=?k@h>%C17b=e9Dqz*tQ9s$ZePI1A3&Vu-%sGE*TYu5VL%!33DCM5w?R z;Szznx#yP%5K~DemkL9))5AV4748JOuPGBA;-1fmYlS5gj(l{z@a)cbx1{q%u#2k` zQ+ORt)fQ5dKIx>|%IQ@1zLP{RN|eiAHQq!>Cq`IogRs%=>y}RPMG*686jU-NmovLd0!)Q1CHV~;2rVv{p%Mu2*@C%f6#FA63wvFRmYEi2avHL!&`bV7rgRmQH-2`k8C{-929LC34J@p+T+ zOv)e8iIquZJ{~^E_{cZr(~Y{=laFWZuw-;%b~f3?tstG4>y~yJjiQ_NRtfD;!Piv@ z*X_5aB%NX<=|oevG(FVay|><)5{I&Q2I9E%i^ZiPur({EE0Y+qX+%vIl6Dm1j=)Gf z8!O~kkQ3!|g&pco7BU^PnTUT*%ywl%CVPCVuzbG@Z|Qi(HyVu>OT)8yVBA749mq<= zL%iR^2JD*4%_Isn$B>68Y7jn4GF`|UM_wfERXeMk9v{JKT9N0A*cFH8n0FwPP)<$vUrhoV7NZb0PlB!jRXvGsihVa@7J z)EnXkRLyXzMva}|G{|5#yTgEw)cEtiGYC)>ZTXGW0yc5FS-U6GC?`{|Nz~HMg3LRQ&3S`1QzED`j&Nm9x*iHPY5t7To7S;*d*n>u4alWxmI6z@k z9@-&nhB*EE4vaO%HXJQj*#}1p^Vy-Jh4pONPGJd?j}|r{uyyy*!WtM#&m1l2Af-O! zk1$)lQ|N;+7}_bMAh=)KDZGp>?>|O33fABI#|S6Wfo^u_Sa8($juqNyXLlZnReaWe z-X-+l$r|g03ztoG*H?D))2@M7V_$cDZ~jm9!r5FqCUy%R?v%VB3Ax2s6pR~Obd5J! z^X@&uI*NE>;&|Z$ZEH6N*RV;bT0Pz^a*uAB3mXX9UK|p`aZJ6RU1Jiyf21d+uxTHs zvNYS-gf++5-X>xD{$v&$G#bxVPJ2=)3>A{#A0-_}n)`NzWJ*nr_-D(pH2{)TC>HfA zr_)(!YZ2OF&fCNA+vB1)Zr&)AR^03ED%-Myvri=QwZH#nuT*gD!W>QM`$w3PQ3%j zENvCequnX?`l-T3>h`ivPJ#G+rB&!<*VqIN4HSafAKj`wg7w%SjNI&6o3IJpJZ2Nz z&^2Xk!Uyc1E$C`fyCAE@>)5Z_h54xSyLREac}_1sc%TNym42?U3nO#=R5(EODYnM} z{Saf?4yf!1Ywr*mv4FEWgfGj`z8+W0eGxcX+|RD{j*RG?`Kz45yF}y7irM@RI0yXhGNQ;(=|)Kg3rWz0lAb_Xp$qm=x3HsU7)c0b zE)h{&Ii2MyHy4^ElSwR#uPKwziPplqBELL^gd#aXPDsYQ6T@Ca;Bp0WIMXeZugIbR z*SB~{4IU_EKXnVo0|Q^W!Ng9st_KejJFW*zZ)SV>1BbABKtdLF1AjQ!lRZL0W6Mg@ z?7XXliu?(^LWWRBmfd|Wh;IK4Fgt8ncJ7q0HovSN4YbiLtR7BbD_PqBbh*dNIvWLD z{?P$pjPq{wkZ>ySd;5^kCS<(^_S*L$l{}|G#H>C+_#O%7uR1|6lZ6vmxF}#;KN}xG zsOQVQLW5=$c`V)lGVMH3NGYu!xJlT`K0HzQDM{pS^9YOSk=AVSBPn(q!0-xd7klQi zEbK2{Azd<=<;Qp$o!NSK7PsXa&DnYrOAZS=U|8NXEQIN*Tvk-it|3&D!CmH11PV>x z&Gddi%$#rb3!Ow0$j;0#$EdJ|{WyT^T>jSqFxXNPzV!sxsurk4tkKM_3GwfWv8O^p z+dPvOH+2e&632u++j1#GBOj?AvMG`Dg7*CB5#da}v#~r0W(u>uq%c+50V;^bN4$}mVXrUD2}&n+ z<=;sP+bA5hJ-S`kz;4b!Nrdyi%?M!vEpU8RD493Ld1;&tW-*6W zc6nAXFKYt%s#0)@TOG~p!>n-Z^2#}ySF$bam>lHA6gw*?>|EYA%K??sD1|O(hjKy* zj!eCi6Si#W;RLJBbp+=*;*f>|b6LajkxA%QW}F1DTUf`W@O|2oWt*ynGWOx5u%Ft! zoGdrw&z=&l;G5!x89-qwAIJVQp-qb1Tgx7OTbRe>eZpy=aR@Y3VzFH(3vVNGuyH@6 z7uHvG3Z&3LK5z=mLt2TJFM{fBIZd#YSRm6J@W*2M;^&4e`FY|Je&<$YRzHXH$mlm@ zRvQ~XTUbdu(a+gJ9UaWF2hJ7-_WN_Q!p6;oQM!6AxRFssG;qXc) z1@OtFRA{zE5-kd93pFaIM@G?YXg0HUB$SGVQmI1sadzMwm;fnu+c|=cdUJ{z%D;Jz zu$P}dIQ~50642vIIDAduKb`U-a0K|3vUvxDRvOE339*)q9T1kW(vyW1`LhoIrw~53 zULafysbi9b3}5H{vhYjx>1k+u@rA;r@a27956ozDaZG|C^CFj(r#;gqu%hlFZ|PRQ2m-NsMAXPDy>pgF+KxkNYv z3|e}r&{7h~@sqI1LBFPW9HwwgpJ9nhg)-E`ql8_4Dfn)bt-4Gw5MSPOnQ$*f+kajm z^dbP&aivgJmdF8YlRzOi;Lt}p1dfZcsVjvo2$WoNCH$a?{I9PRoLc0C>xD1qWKNOn%yEOT zfm(BOG9U9l_XfdBh&%uBjlyvPf@9lm5gsPg>Seb-09T6MCRCx&aGL=9XIagUg!=>= zq`l(fef}fiyEvP1%I(5-^uX@AL&#{L3JlD1r%(#?HQovD+Qc$<0>ZZZ)prV~6U1Sw z?iQ*wHm~T;_uMVqI1ixvJTE-GGMh6f)*Y@&z?+1aOf|BPZ--9#=zifS;qa6;fBXYL z5|GAzBCMep;qITpuXD54e=3xgI8%mc#IHRHq`LWsk8mPy!9&7M>P)e_9~P>Z{~^Hw zoq6j+h(DO}yB`*wM%*hu|54#FiXhTcKNDUeOLBlJFsMQsOM3$3;O6AuQOTiL=47uv zA#Bl@a*~f}e=fYIG4r=iehzxHv$|ghZ!NN*E7g;Bu<|DbFEy#ypt&4#-T-sgemFwR z`9C}pYbZw^d;M8q^TzR3J_w~pd6zEjU0<|ky@lX`PXJ$ulH zDW<){u*_9}D(`mHm+0l7>`~UhT{tDSG5|QKg4oWTiFP%q2x29pg#%V`Hk4$4AqlBm zt7Nnxqac=%uAJ`SV{~GSS%bHR8!6y!cK6G|re%Z5=tW!D&;Izbu!pAIs-Ljq72&v5 zF?_+Z2=gM4lk7XM2%WSKr#o+gP4m$!FxD;1{VHhE&n|owVsC&gdrfG9W`%gKVw0~4 zKDc?vDraB5Cafj>ik#2a{y`Wet1N&Pce`+cvH(M^8LpeV8Ay?+xKEnzkIAw(y$*TNlD|K-lRx z?ybUqQWa^)4JgIghCd0b_NUy1cn4?9%4sK8m)>Gt2GIv4D}t<|MpSZqvpJBig-RJ@ zsn}F%1k|L0O(kOl87elF7oS@4O>Kw2lmB2t>Q^EgXI#*%XyRxHE`TPp5n!SjNIe^(tY9QHt}cgsF^DEOx11 zk5aykV~_GrOLQ0wu#LSLDQq0FNB4?NICzk$s`6&$?tLJys;Vh9yG0L6Je4u<(>Gm4 zeG{wwP*__&SBf%aC&`;ZGtnMZ_DKGHJ}xY?&4!`}C>mQRFZD-z0z!?*yduGmqy zJ=`&&qPUk`{fS_z=uOp5cq18qO2P3+M8WX{$8mc`a@dEkP57zcs~?Hr#Qwz4NMx^i zE!r996?;>>qAxV$jPt`Cy(#{ppt?7MY|$Ai(CK0 z5xMT8b@x)u&q&GS|6Es)y+|})Ag29aR8vES^MatcpCI{DjpjB;^HD9@^|R`En#=Uo z2re(TS>`}9yMa+rVU6q)J1x>tJB{L?CI7)ZjgET&%NA&Eqn#G^&;rc~Fviy|)clE} z`0It5SBS%-0@CjgGl97-`K}0htEx)J_86$npgU3hDT%rlnc8I72nzizszg)!DFU4BBS=&;S zce9h1Y8Z&MY?+d3Tc&vyF@ROeHBa$vq&HS*a5lF+Us0kwnYUDP95mkLrJ5;sq;MC* zhwCi36@m@9Kw8W=)Nh^ThSe{S1sqbAUl|#3NEwG-haJ3(j~{Oxbx0Kf2Tp+v?>Y83 z{@A^1M?=JcEl8naUd0Hmh>WuH@nJN??(Qnnw3Q@qJ%tO*sAKj66(a$*d>JWO7Ia7> zfw_Bn6YQu}n#vUk^j)EM4|Dby34rFJY;=`oM`_SexT1m}gP}I6oIIRhcdgP?ESOX{ zbt0fh=;JCK(j-5tJmpY7ZP15HAN+$3-2wIfOfSln4?N(W2d~#VEP3#R^xL{xvkR{9 zNvkz!IQ{>%TJzfc9)9yk>|+nC(OCC)7J42mT<7uI3Lj6fsUIVW+0>ER;_66An>td+ zrj8W1Ndp|DDVs8)=(VZ0T(SYlYvUkRPS^m(5uASKpWNhkjD553At468@07KgI{0(< ztkp#3jo74$LFLL2J9eGMM>`$tigg+%_S*isPLn~veR#cQ9zRzU+Mwy1AF}aV`Z4z8 z2F>vN2oktD!i*a=<+zP3)iq$VHc>qO#4i;X+z9L7TCzT4(T=_+1RGj{Bbd!i?(a(a4D8a$7)`K zd$n$tCb${d-x<>UWGOtVJz>odZaK5dVwx9`OvN>MqH#tV-1*vZ&3Ac39#2kH@rV3ur&}Euy=$MV2dnv9A z4PB)=cipThSvsgt#O$7V5Btr{nxp59NBAi|cI|OwHOqdVEMYrt(FB(umw%l=y*V$J}v0SHHTYjs+hbg=^_t#VxXB5fIa_!{lH{69?E z8w8Z(udr(CE42WDH^#2LSy*}TC0cF%Zz1hz{5<4DRD0Dzl<_;C=@|1mv?c7Cn08Tq zcT6h~I+)6v;@VFr4Y}B>7>e~KwJt>FewfsLp=92e(S}KDe))uURH$y^76^~L<73jZ zz~)z%S_}E=d8=?hYKpKMCbhdMo^MWSw;eHSF_j0HG^ITc5wYdd+Fk6iDXoRsrnO6H z95)B1wXW@>I7(kXf*&zp<&pxn&>Vp$_&NK+UR^lAO(XW#o3v}#r_Q$b#tZAS28l3yWe9G9r_i0b1s4#P~_VSfp z7YEwmC%J=c+kWj?IHXi}HlX-mR#bK)$wH8=k`IrQp!!4N_lh4)OLp?6mavq*$D_cLI*~x=_=W9!7w=3UrzV<aXR7`TjZsf~(Y>&V}8hc-ZI7Dwps*6u0k;N|?L-yF)jSmbW)RlLUHd$j&CwFZ|6 zht(NV=XK>h+V9dFuA>~(ZiYTn=DPQwc2bkWqS?$n+Vw3%*-6o36}!PdlVWaCj95jJ zRcwxkZmVdwiZ-hlwu)U=am*@?&oWqXwrpeVI0GrzPrAlo@3H9327q}^n`;?$hf zKrzn@C!IvFUXXgQUa+M*@Y%`r49W$LEj&XE!bOsq53bM!; zsxjNi(HZOoBd~T~9e+nh6DJ*C=P*;3>2Kv(4W|bx5M$&>ABn@#N7P3#$gm }; + +function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: StateManager): void { + console.log(state) + state.set('element', eventTargetElement); } + +export function initSelectMultiple(): void { + const checkboxElements = getElements('input[type="checkbox"][name="pk"]'); + for (const element of checkboxElements) { + element.addEventListener('click', (event) => { + event.stopPropagation(); + updatePreviousPkCheckState(event.target as HTMLInputElement, previousPkCheckState); + }); + } +} diff --git a/netbox/project-static/src/stores/previousPkCheck.ts b/netbox/project-static/src/stores/previousPkCheck.ts index 7fba2faba..a5d06ceee 100644 --- a/netbox/project-static/src/stores/previousPkCheck.ts +++ b/netbox/project-static/src/stores/previousPkCheck.ts @@ -1,7 +1,7 @@ import { createState } from '../state'; -export const previousPKCheckState = createState<{ hidden: boolean }>( - { hidden: false }, - { persist: false }, +export const previousPkCheckState = createState<{ element: Nullable }>( + { element: null}, + { persist: false } ); From ea9258d36cabaf5de25c45f65fd92bfc5959bbe0 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 13:23:43 -0700 Subject: [PATCH 06/15] added main multi-select function --- .../src/buttons/selectMultiple.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index 08b5165e2..68cd57032 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -9,6 +9,43 @@ function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: state.set('element', eventTargetElement); } +function handlePkCheck(event: _MouseEvent, state: StateManager): void { + const eventTargetElement = event.target as HTMLInputElement; + const previousStateElement = state.get('element'); + updatePreviousPkCheckState(eventTargetElement, state); + //Stop if user is not holding shift key + if(event.shiftKey === false){ + return + } + //If no previous state, store event target element as previous state and return + if (previousStateElement === null) { + return updatePreviousPkCheckState(eventTargetElement, state); + } + const checkboxList = getElements('input[type="checkbox"][name="pk"]'); + let changePkCheckboxState = false; + for(const element of checkboxList){ + //The previously clicked checkbox was above the shift clicked checkbox + if(element === previousStateElement){ + if(changePkCheckboxState === true){ + changePkCheckboxState = false; + return + } + changePkCheckboxState = true; + } + //Change loop's current checkbox state to eventTargetElement checkbox state + if(changePkCheckboxState === true){ + element.checked = eventTargetElement.checked; + } + //The previously clicked checkbox was below the shift clicked checkbox + if(element === eventTargetElement){ + if(changePkCheckboxState === true){ + changePkCheckboxState = false + return + } + changePkCheckboxState = true; + } + } +} export function initSelectMultiple(): void { const checkboxElements = getElements('input[type="checkbox"][name="pk"]'); From 1493c920fd1a49f8aac53584abcb61c24a49078f Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 13:24:12 -0700 Subject: [PATCH 07/15] silly text highlight workaround... --- netbox/project-static/src/buttons/selectMultiple.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index 68cd57032..62e66ed0a 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -4,6 +4,10 @@ import { previousPkCheckState } from '../stores'; type PreviousPkCheckState = { element: Nullable }; +function preventTextHighlight(): void { + return +} + function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: StateManager): void { console.log(state) state.set('element', eventTargetElement); From 3effa37fa77a5123c65dd85e6f87599b99b3b133 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 13:24:50 -0700 Subject: [PATCH 08/15] click event calls multiselect function --- netbox/project-static/dist/netbox.js | Bin 375642 -> 376041 bytes netbox/project-static/dist/netbox.js.map | Bin 345022 -> 345446 bytes .../src/buttons/selectMultiple.ts | 9 +++++++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 3d6bb9d1a610d4977fd9c887d49450d097f78f7d..b7095fa78873efc9370ca09754b6e9cf3b8641cb 100644 GIT binary patch delta 22477 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 O55LBxFYi`+XZ=4EDc3Im delta 22089 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 delta 104 zcmaFXCAzO&w4sHug{g(Pg=GtCs>1X_1y%{AKu5r#5S9LpjwVhzzRqE$F5CAju`X8v05p^xJ^%m! diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index 62e66ed0a..dc33e4fc5 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -9,7 +9,6 @@ function preventTextHighlight(): void { } function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: StateManager): void { - console.log(state) state.set('element', eventTargetElement); } @@ -55,8 +54,14 @@ export function initSelectMultiple(): void { const checkboxElements = getElements('input[type="checkbox"][name="pk"]'); for (const element of checkboxElements) { element.addEventListener('click', (event) => { + //Prevents shift+click from selecting table text + document.addEventListener('selectstart', preventTextHighlight) + //Stop propogation to avoid event firing multiple times event.stopPropagation(); - updatePreviousPkCheckState(event.target as HTMLInputElement, previousPkCheckState); + //Main logic for multi select + handlePkCheck(event, previousPkCheckState); + //Re-enables user's ability to select table text + document.removeEventListener('selectstart', preventTextHighlight) }); } } From ef29bffb723c86b51f1ae00ae65b59786ae5298c Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 13:27:09 -0700 Subject: [PATCH 09/15] is this supposed to be ignored? --- netbox/project-static/dist/netbox.js.map | Bin 345446 -> 345447 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 8538f4c2a701fe35487ac56132d7e08be5a42f1f..61469e070456ceeedee6d1878b86d8a63390bc29 100644 GIT binary patch delta 92 zcmaFXCHlNew4sHug{g(Pg=Gutas}ReCmnZ3$4nO;XGdql?VA-?_cJoOPA^tsRZ@5L r14$)=2!9< Date: Thu, 5 May 2022 15:01:40 -0700 Subject: [PATCH 10/15] fixed text deselection and refactor --- netbox/project-static/dist/netbox.js | Bin 376041 -> 376078 bytes netbox/project-static/dist/netbox.js.map | Bin 345447 -> 345520 bytes .../src/buttons/selectMultiple.ts | 52 +++++++++--------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index b7095fa78873efc9370ca09754b6e9cf3b8641cb..ce2e0efd2ede7b7f41e1b1837cc1373283e0cee2 100644 GIT binary patch delta 1655 zcmaizdr(wW9LMLoyGLn!G?gw+BC*oQu5&YSv>By!1Vuy^L|9*#@p6}iyL&IY?5>ZM z)D%GxMGwnCAS^SbNRh63H7B3VsF{{&Qa&J`X}-&5vYDFBBG&jGg;(D}fF9oUo(4|O&LP)Kh!t%0n}+xR?CqLja% z1?18zANb&;GdEG>D|a>p0lV_<<_5q)BeyUV)7@KI;G%h3y(pmVTV?oZQgbx&6tP*< zVu8}$GDm|%I%>NQ*|cSQF*0dHYZ>M#n_3fr`Sj+FN3bfF+LD2I8l!B1g`QHrzyxLW z&KMw7*}1C|y^>>vVpnMU#V)>mJ>3!1(LL(h5S8#fZXlhm+?&Ix{<4>Zs6P074yT&7 z?^6wN#|l;#TNjD`wBP<^WKyg!r8{if&oEI*KA_id#5so+Uu?TcQT>q< zoaU7ysYp_Wf0?J{IO)-Sm`tY}i{>;-jx`}mdGWXj#O4;Hg02?Iw6Ds*xn4NYN+h=+ zKlw{Hf8EIeFFzSXq4M&nsUWgj$m^~s`=&}qO58$bcPyN}2a@X+tlja*a}65g({F!p z!l#&jT*~Rw1LqfV_+u_m4*%4JMz|F5;s9{^%P(E!+#MYOaNyTEWn?SXpWXl`UU}Ki ziEFNWq~*k$uh+p!<8Rbp3O#q@7{=3$KmUe!h2ET~<@C?rUd!nh-C4rv)7y6sBU#yg zFO%p*w-8U;?&+0*k5&*}x?2#tqJ57?>yV-R{+BllMQTwG)b)g0)%L~OzDQDO1U>;~ zvayj!LzY?#9+WSc+^${&JdKS%VKa*gIty~6n;3>_Mxx=KGiH>b|2l0 z1RLz{B|1)}v6(sRhwNR_*oZ$1g{DpaJ~R zsDTD;`_!<)h2{*8F~h;+d)of0d{=uIaH%8iYc2fjtBW6MGlqm&6G9rlJ*3f>-w)TR z_rpn+>p6d}C(0|u8NKY`IfM@~naz^V>0GqPD-HA5T(aL5?{sG5N(HtOqlqP#kui$} zNiqeTHgA+iG8g?1xPnazgbLxvb-X;{9)mM_}onz?27r%8}Q z0^2iUQ{aiA$L95Uq|#6@oa>&}JS~soR;9c}mxK3z9ZE|}?LH~rTgcZ}z!sH}HzN#u zAtjDNyEnzQ!1SbB95+l%G@1l)_iF1iYNfJB~?{8w;R*+&tS61SMUb#5kBNyiu zTGO>b;KsIZt zAghqaOe@JC_|>G9WHEXtibA$H$7GX?UWtj7EC&HL-UwDU)^3sqBXFx@79tucD9-fV&-bXFrFEz zNd$XX%{}AQ@7IxKTDBob!kHW-L)oPuw{H!SVO-Y{B$K!#rj{&;fQ2=GMjpbV)+w$Qbl&CibSz%yNCs;YV2;Zr^i2ocWmzf delta 1606 zcmZXTdr(wW9LMLoyGNPPXfj=xKmu`)b#4xrHlxlu0`+a}k-<;1m zck2`F?Z?`V`SnPU7u3HB#M4#VlaVC1Z(ju1=>zJ*o7B>fiAZ|3p&v_Vo!f@#6pbkp z$_j*-Je_`_D<+SIw@#(yjgeSRk2M}d8WmYAQsrLe2dtz6O~(*Jn|5SiDgA3l4_3&X zJJW!-s8>rc5~A7+517@+ zmIvBat58bk9x8%?wjHt|gZj5uAX(nsZUENN;f_Zrk*{<{15tE_yblrdocsl1<@dT~ z0E^|W?jcNw3m0sKp5xmJ`SG>1!>yq`${Iw=K0S88Ot&1#4fjqm+b zMGC@<NY?fGKqH(M`l2E-V`hJC8C%%F%sV6-S(TycA`0@c1Cd+1;OsRH{93hSR)$ zA`UTf*q7OAj+373#R|IYR4}LMJk^RsdD3YeNP4&+<~|)Er+!rd&h^rnb|TpY>u8ql z{d$N4-h9>#hy2R9M38*DkUiE>@lCCUSnWdcSS)-$0^+m_DP!@Ri_I!n=(j&wkR$7V z+Q{kCzQHmMfBq%P;h($I0-J2U>BsZ0Fm))+YX14*$ARRzGB*m$^7T2ay5g0D#g{T z9!T_ZlIk(M zr9g`qXf*{|MV*T)EF$l5jPALN_lN0Rqxw;sa!(Le&ZT4JkPzN9D<{vGV>YhUi_f+? z;i;GSKd(ui;m?_sv(PGHV?)vK3v(JR#vI8hWjUm2g2A8@xT90D+7cXATUKtCly4P7 zbwZ&zR1^ghFEj4~O@R0FUF=8|NqH&Pte+N}pPMHI##z@IrwPR@pqeZ~Hp{3cVJKyF z)nqmd>_jzr7sV`o3z>>s#j=I0hi|D_Fql{CjAE!H>dH+;Vvc8SUVX z4VljRYRC<4xaU36s#<4e;T>cOo3&9hj;*OB;mBZhwIuB2WV7xWYstfU)jH)uEeTe! zh+3j$6YI!4q_8J-#Ghr?5ylL4WGd6vbLS}KNj=%5MhWY4b7g~@%w*+m;=_J$lh@c$ zPtLcIyv}v8jbwvABG}o_$U{UZeKOGkvFu_O>EcUGH+dV2*>E>0#9}4wFzFfhFCOe! AJpcdz diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 61469e070456ceeedee6d1878b86d8a63390bc29..9814304071db1bcd00884cef28580bc2cee1a997 100644 GIT binary patch delta 312 zcmX9(yH3ME5EPI50E!eKglr4CZ7jqi6`EZ;Ckr{oK`2U1Lxdof!b_&1a78}gK7p1Z zh?XCr<~O*#G^5q*?9A-nd+&46d+XM^^=_lvT$-EcU?wCOHbNDuoW?*!QwA>R5_n{~ zW!RQo6Pfhvn8^ZjQG5>Q8G$?$$`n+1S|xJC-VHUCz*yOdSCuF3D>kWnjm_zvyacP7 zYT!zb@7Ry_DVSRK8ynv4GfhH;)!O4U)3nwtBa`n65Y(kFDkGm)47||*bdKC@#iqY= spQ-aKB&~4HzKv}&7bj-4FNdOHsH)UQWvJt|LPe#dS;OByiTOzW0i(87L;wH) delta 239 zcmdncE&9Amw4sHug{g(Pg=GtCh5|>ivyQ8yXNmLlUIkV|;Zi3ZcSpy3Fq!G1Jy?_A)d|b zf^;}Lx@LeCxKCGAWOZcnH=O<#Xxa2$MOI6uGN }; -function preventTextHighlight(): void { - return +function removeTextSelection(): void{ + window.getSelection()?.removeAllRanges(); } function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: StateManager): void { state.set('element', eventTargetElement); } -function handlePkCheck(event: _MouseEvent, state: StateManager): void { - const eventTargetElement = event.target as HTMLInputElement; - const previousStateElement = state.get('element'); - updatePreviousPkCheckState(eventTargetElement, state); - //Stop if user is not holding shift key - if(event.shiftKey === false){ - return - } - //If no previous state, store event target element as previous state and return - if (previousStateElement === null) { - return updatePreviousPkCheckState(eventTargetElement, state); - } - const checkboxList = getElements('input[type="checkbox"][name="pk"]'); - let changePkCheckboxState = false; - for(const element of checkboxList){ +function toggleCheckboxRange(eventTargetElement: HTMLInputElement, previousStateElement: HTMLInputElement, elementList: Generator): void{ + let changePkCheckboxState = false + for(let element of elementList){ + //Change loop's current checkbox state to eventTargetElement checkbox state + if(changePkCheckboxState === true){ + element.checked = eventTargetElement.checked; + } //The previously clicked checkbox was above the shift clicked checkbox if(element === previousStateElement){ if(changePkCheckboxState === true){ @@ -34,9 +26,6 @@ function handlePkCheck(event: _MouseEvent, state: StateManager): void { + const eventTargetElement = event.target as HTMLInputElement; + const previousStateElement = state.get('element'); + updatePreviousPkCheckState(eventTargetElement, state); + //Stop if user is not holding shift key + if(!event.shiftKey){ + return + } + removeTextSelection(); + //If no previous state, store event target element as previous state and return + if (previousStateElement === null) { + return updatePreviousPkCheckState(eventTargetElement, state); + } + const checkboxList = getElements('input[type="checkbox"][name="pk"]'); + toggleCheckboxRange(eventTargetElement, previousStateElement, checkboxList) +} + export function initSelectMultiple(): void { const checkboxElements = getElements('input[type="checkbox"][name="pk"]'); for (const element of checkboxElements) { element.addEventListener('click', (event) => { - //Prevents shift+click from selecting table text - document.addEventListener('selectstart', preventTextHighlight) + removeTextSelection() //Stop propogation to avoid event firing multiple times event.stopPropagation(); - //Main logic for multi select handlePkCheck(event, previousPkCheckState); - //Re-enables user's ability to select table text - document.removeEventListener('selectstart', preventTextHighlight) }); } } From 90d8395a2c9438b99be7ac0213e08f38cbc2225c Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 15:24:16 -0700 Subject: [PATCH 11/15] Fixed variable type issue...i think. --- netbox/project-static/src/buttons/selectMultiple.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index 0ec19672c..8d75fb866 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -14,10 +14,11 @@ function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: function toggleCheckboxRange(eventTargetElement: HTMLInputElement, previousStateElement: HTMLInputElement, elementList: Generator): void{ let changePkCheckboxState = false - for(let element of elementList){ + for(const element of elementList){ + const typedElement = element as HTMLInputElement //Change loop's current checkbox state to eventTargetElement checkbox state if(changePkCheckboxState === true){ - element.checked = eventTargetElement.checked; + typedElement.checked = eventTargetElement.checked; } //The previously clicked checkbox was above the shift clicked checkbox if(element === previousStateElement){ @@ -26,7 +27,7 @@ function toggleCheckboxRange(eventTargetElement: HTMLInputElement, previousState return } changePkCheckboxState = true; - element.checked = eventTargetElement.checked; + typedElement.checked = eventTargetElement.checked; } //The previously clicked checkbox was below the shift clicked checkbox if(element === eventTargetElement){ From 491a4e7d787a75c0560136d597d491a3c2266bf0 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Fri, 6 May 2022 11:33:00 -0700 Subject: [PATCH 12/15] various punctuation and spacing fixes --- .../src/buttons/selectMultiple.ts | 49 +++++++++++-------- netbox/project-static/src/stores/index.ts | 2 +- .../src/stores/previousPkCheck.ts | 5 +- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index 8d75fb866..8a5d2aabb 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -4,36 +4,43 @@ import { previousPkCheckState } from '../stores'; type PreviousPkCheckState = { element: Nullable }; -function removeTextSelection(): void{ +function removeTextSelection(): void { window.getSelection()?.removeAllRanges(); } -function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: StateManager): void { +function updatePreviousPkCheckState( + eventTargetElement: HTMLInputElement, + state: StateManager, +): void { state.set('element', eventTargetElement); } -function toggleCheckboxRange(eventTargetElement: HTMLInputElement, previousStateElement: HTMLInputElement, elementList: Generator): void{ - let changePkCheckboxState = false - for(const element of elementList){ - const typedElement = element as HTMLInputElement +function toggleCheckboxRange( + eventTargetElement: HTMLInputElement, + previousStateElement: HTMLInputElement, + elementList: Generator, +): void { + let changePkCheckboxState = false; + for (const element of elementList) { + const typedElement = element as HTMLInputElement; //Change loop's current checkbox state to eventTargetElement checkbox state - if(changePkCheckboxState === true){ + if (changePkCheckboxState === true) { typedElement.checked = eventTargetElement.checked; } - //The previously clicked checkbox was above the shift clicked checkbox - if(element === previousStateElement){ - if(changePkCheckboxState === true){ + //The previously clicked checkbox was above the shift clicked checkbox + if (element === previousStateElement) { + if (changePkCheckboxState === true) { changePkCheckboxState = false; - return + return; } changePkCheckboxState = true; typedElement.checked = eventTargetElement.checked; } - //The previously clicked checkbox was below the shift clicked checkbox - if(element === eventTargetElement){ - if(changePkCheckboxState === true){ - changePkCheckboxState = false - return + //The previously clicked checkbox was below the shift clicked checkbox + if (element === eventTargetElement) { + if (changePkCheckboxState === true) { + changePkCheckboxState = false; + return; } changePkCheckboxState = true; } @@ -45,8 +52,8 @@ function handlePkCheck(event: MouseEvent, state: StateManager('input[type="checkbox"][name="pk"]'); - toggleCheckboxRange(eventTargetElement, previousStateElement, checkboxList) + toggleCheckboxRange(eventTargetElement, previousStateElement, checkboxList); } export function initSelectMultiple(): void { const checkboxElements = getElements('input[type="checkbox"][name="pk"]'); for (const element of checkboxElements) { - element.addEventListener('click', (event) => { - removeTextSelection() + element.addEventListener('click', event => { + removeTextSelection(); //Stop propogation to avoid event firing multiple times event.stopPropagation(); handlePkCheck(event, previousPkCheckState); diff --git a/netbox/project-static/src/stores/index.ts b/netbox/project-static/src/stores/index.ts index 5e53410ad..d4644e619 100644 --- a/netbox/project-static/src/stores/index.ts +++ b/netbox/project-static/src/stores/index.ts @@ -1,3 +1,3 @@ export * from './objectDepth'; export * from './rackImages'; -export * from './previousPkCheck'; \ No newline at end of file +export * from './previousPkCheck'; diff --git a/netbox/project-static/src/stores/previousPkCheck.ts b/netbox/project-static/src/stores/previousPkCheck.ts index a5d06ceee..19b244ec7 100644 --- a/netbox/project-static/src/stores/previousPkCheck.ts +++ b/netbox/project-static/src/stores/previousPkCheck.ts @@ -1,7 +1,6 @@ import { createState } from '../state'; export const previousPkCheckState = createState<{ element: Nullable }>( - { element: null}, - { persist: false } + { element: null }, + { persist: false }, ); - From 9c5355a300e4a2139d12f3ff9a60e5415c00e38f Mon Sep 17 00:00:00 2001 From: CroogQT Date: Fri, 6 May 2022 11:43:18 -0700 Subject: [PATCH 13/15] added JSDoc comments --- .../src/buttons/selectMultiple.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index 8a5d2aabb..d05c21716 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -4,10 +4,20 @@ import { previousPkCheckState } from '../stores'; type PreviousPkCheckState = { element: Nullable }; +/** + * If there is a text selection, removes it. + */ function removeTextSelection(): void { window.getSelection()?.removeAllRanges(); } +/** + * Sets the state object passed in to the eventTargetElement object passed in. + * + * @param eventTargetElement HTML Input Element, retrieved from getting the target of the + * event passed in from handlePkCheck() + * @param state PreviousPkCheckState object. + */ function updatePreviousPkCheckState( eventTargetElement: HTMLInputElement, state: StateManager, @@ -15,6 +25,14 @@ function updatePreviousPkCheckState( state.set('element', eventTargetElement); } +/** + * For all checkboxes between eventTargetElement and previousStateElement in elementList, toggle + * "checked" value to eventTargetElement.checked + * + * @param eventTargetElement HTML Input Element, retrieved from getting the target of the + * event passed in from handlePkCheck() + * @param state PreviousPkCheckState object. + */ function toggleCheckboxRange( eventTargetElement: HTMLInputElement, previousStateElement: HTMLInputElement, @@ -47,6 +65,14 @@ function toggleCheckboxRange( } } + +/** + * IF the shift key is pressed and there is state is not null, toggleCheckboxRange between the + * event target element and the state element. + * + * @param event Mouse event. + * @param state PreviousPkCheckState object. + */ function handlePkCheck(event: MouseEvent, state: StateManager): void { const eventTargetElement = event.target as HTMLInputElement; const previousStateElement = state.get('element'); @@ -64,6 +90,9 @@ function handlePkCheck(event: MouseEvent, state: StateManager('input[type="checkbox"][name="pk"]'); for (const element of checkboxElements) { From fbd933b56a82c774853e347627909fe6788f2848 Mon Sep 17 00:00:00 2001 From: CroogQT Date: Fri, 6 May 2022 11:44:34 -0700 Subject: [PATCH 14/15] prettier fixes --- .../project-static/src/buttons/selectMultiple.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index d05c21716..d8bad3105 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -13,9 +13,9 @@ function removeTextSelection(): void { /** * Sets the state object passed in to the eventTargetElement object passed in. - * + * * @param eventTargetElement HTML Input Element, retrieved from getting the target of the - * event passed in from handlePkCheck() + * event passed in from handlePkCheck() * @param state PreviousPkCheckState object. */ function updatePreviousPkCheckState( @@ -27,10 +27,10 @@ function updatePreviousPkCheckState( /** * For all checkboxes between eventTargetElement and previousStateElement in elementList, toggle - * "checked" value to eventTargetElement.checked - * + * "checked" value to eventTargetElement.checked + * * @param eventTargetElement HTML Input Element, retrieved from getting the target of the - * event passed in from handlePkCheck() + * event passed in from handlePkCheck() * @param state PreviousPkCheckState object. */ function toggleCheckboxRange( @@ -65,11 +65,10 @@ function toggleCheckboxRange( } } - /** - * IF the shift key is pressed and there is state is not null, toggleCheckboxRange between the + * IF the shift key is pressed and there is state is not null, toggleCheckboxRange between the * event target element and the state element. - * + * * @param event Mouse event. * @param state PreviousPkCheckState object. */ From 124e93f73726d99a0383768e797d3ad774a2e6ef Mon Sep 17 00:00:00 2001 From: CroogQT Date: Fri, 6 May 2022 12:16:45 -0700 Subject: [PATCH 15/15] yarn bundle. --- netbox/project-static/dist/netbox.js | Bin 376078 -> 376088 bytes netbox/project-static/dist/netbox.js.map | Bin 345520 -> 345522 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index ce2e0efd2ede7b7f41e1b1837cc1373283e0cee2..ce02d4bbb227926941d2adc3ae38e721d48ce21b 100644 GIT binary patch delta 57 zcmeDCB{t)iSVIeA3sVbo3(FSPhpiGhsU-@DdA9j^)|qJX&Oa&wzjs425M>=`O|;4vf44`Z?|Y;eP9Lv DuRjqe diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 9814304071db1bcd00884cef28580bc2cee1a997..e21571e0c84f1680154cb438612199fef77a0f4e 100644 GIT binary patch delta 377 zcmY+AJxc>Y5QfReBG_3(un}_>HdBa_BB0>AOLCsaCWhoV4ne%aLXD^qja;L}bpgR@ zOKUq3!GGXi@ozYDeuOm3?#%N(Gwkc6_BN?K}r=eNR zA^Vd=D$uDB$_jPNH#-t^FQ5=u*Ibnp_fqNsk)Y?A7xM4cj39|ruC<6R3(;S&aB_9% z!n*RdXW~8hjVW9xE(*nPTIJa@ils`3#C_J)!NR8e6Mon3!wlSprw&WjJ$Y)^J#Q&h T<-wWz^3-y<+5VVYRWIH*)~sdF delta 390 zcmY+Ay-EW?6opB2iZlU>6e37=ZEv9j6$^_q6Pc{bx~{T>MF`p%qp0`?+r(nKJiz!0 zb}E8TVe32i7T!BSLYm=n?)lC=%*UklHfcRqwW?k%REwYLv^~DCrJ*z6+K|D)jiD6j z9`%8gh8j4eW8gv4NW+$z3U9Q)ogsdQU4~5AlR2RXh$sj8JlRKY-qNy~nx8zv3M2QC z=n+Nkr>&ZUjFKsag15=GQ2Ul*U|n;V>Bx(WG9VZ5N^>pCW!X`PaO+bq{e^#y