From 01e3ff5bba485bc88eaa5c498cc06d4ffc9649d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yusuf=20=C4=B0pek?= Date: Mon, 14 Jun 2021 08:31:36 +0300 Subject: [PATCH] finished project --- .gitignore | 17 ++ README.md | 58 +++++++ css/App.css | 319 +++++++++++++++++++++++++++++++++++++ package-lock.json | 12 ++ package.json | 12 ++ public/desktop-purple.png | Bin 0 -> 27526 bytes public/landscape-light.png | Bin 0 -> 23692 bytes public/mobile-blue.png | Bin 0 -> 16243 bytes src/app.js | 221 +++++++++++++++++++++++++ src/index.html | 67 ++++++++ 10 files changed, 706 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 css/App.css create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/desktop-purple.png create mode 100644 public/landscape-light.png create mode 100644 public/mobile-blue.png create mode 100644 src/app.js create mode 100644 src/index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e621eeb --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# dependencies +/node_modules + +# design +/design + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + diff --git a/README.md b/README.md new file mode 100644 index 0000000..f9110d5 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# Another Calculator + +I've taken Frontend-Mentor challenge [https://www.frontendmentor.io/challenges/calculator-app-9lteq5N29](challenge link) and created this calculator. + +## Table of contents + +- [Overview](#overview) + - [The challenge](#the-challenge) + - [Screenshot](#screenshot) + - [Links](#links) +- [My process](#my-process) + - [Built with](#built-with) + - [Useful resources](#useful-resources) +- [Author](#author) + +## Overview + +### The Challenge + +Users should be able to: + +- See the size of the elements adjust based on their device's screen size +- Perform mathmatical operations like addition, subtraction, multiplication, and division +- Adjust the color theme based on their preference +- Have their theme preference check and saved + +### Screenshot + +![desktop-purple](./public/desktop-purple.png) + +![landscape-light](./public/landscape-light.png) + +![mobile-blue](./public/mobile-blue.png) + +### Links + +- [Solution URL](https://github.com/yusufipk/another-calculator) +- [Live Site URL](https://yusufipk.github.io/another-calculator/) + +## My process + +### Built With + +- HTML5 +- CSS custom properties +- Grid +- Flexbox +- Desktop-first workflow + +### Useful Resources + +- [Saving theme with localstorage](https://dev.to/mritunjaysaha/theme-switching-using-local-storage-13i) - This article shows you how to save themes using localstorage. + +## Author + +- Website - [Yusuf İpek](https://yusufipek.me) +- Frontend Mentor - [@yusufipk](https://www.frontendmentor.io/profile/yusufipk) +- Youtube - [Youtube](https://www.youtube.com/channel/UCVBX2n_5egE9XuJL8NUS0Xg) diff --git a/css/App.css b/css/App.css new file mode 100644 index 0000000..370da6b --- /dev/null +++ b/css/App.css @@ -0,0 +1,319 @@ +:root { + --color-main: #3b4664; + --color-white: #ffffff; + + --bg-main: #181f32; + --bg-buttons: rgba(37, 45, 68, 0.6); + + --num: #eae3db; + --number-color: #484b5a; + --number-border: #b3a599; + --button-secondary: #647299; + --border-secondary: #404d70; + --button-tertiary: #d13f30; + --border-tertiary: #922417; + --radio-color: #cf3f34; +} + +body[data-theme="light"] { + --color-main: #e6e6e6; + --color-white: #3a3a32; + + --bg-main: #eeeeee; + --bg-buttons: #d3cdcd; + + --num: #e5e4e0; + --number-color: #3a3a32; + --number-border: #a69c93; + --button-secondary: #388187; + --border-secondary: #1a5d66; + --button-tertiary: #c85401; + --border-tertiary: #873a02; +} + +body[data-theme="purple"] { + --color-main: #17062a; + --color-white: #ffe43b; + + --bg-main: #1e0836; + --bg-buttons: #1e0836; + + --num: #331b4d; + --number-color: #ffe537; + --number-border: #85219b; + --button-secondary: #56077c; + --border-secondary: #bf15f4; + --button-tertiary: #00decf; + --border-tertiary: #6dfaf1; + --radio-color: #00e8d8; +} + +*, +*::after, +*::before { + margin: 0; + padding: 0; + box-sizing: inherit; +} + +html { + font-size: 62.5%; +} + +@media screen and (max-width: 550px) { + html { + font-size: 50%; + } +} + +body { + box-sizing: border-box; + background-color: var(--color-main); + color: var(--color-white); + + transition: background-color 0.5s; +} + +/* LAYOUT */ + +.container { + display: grid; + justify-content: center; + align-content: center; + min-height: 100vh; + + grid-template-columns: repeat(4, 12rem); + grid-template-rows: 7rem minmax(12rem, auto) auto; +} + +.theme { + grid-row: 2; + grid-column: 4; + + display: grid; + grid-template-rows: repeat(2, 1fr); + + justify-items: right; +} + +/* HEADER */ + +.header { + grid-column: 1/-1; + align-items: center; + + /* display: flex; */ + /* justify-content: space-between; */ + + display: grid; + grid-template-columns: repeat(4, 1fr); + grid-template-rows: repeat(2, 1fr); +} + +.header h4 { + grid-row: 2; + font-size: 3rem; + margin-bottom: -1.2rem; +} + +.header p { + font-size: 1.2rem; + font-weight: 800; + + margin-left: 1.5rem; + + grid-row: 2; + grid-column: 3; + + display: flex; + align-self: flex-end; + justify-self: right; + margin-bottom: 3px; + margin-right: -5rem; +} + +/* DISPLAY */ + +.display { + grid-column: 1/-1; + + background-color: var(--bg-main); + border-radius: 5px; + padding: 10px; + margin-top: 1.5rem; + + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: space-around; + + word-wrap: break-word; + word-break: break-all; + + margin-bottom: 1.3rem; +} + +.display .previousOperand { + font-size: 2rem; +} + +.display .currentOperand { + font-size: 3rem; +} + +/* BUTTONS */ + +.buttons { + background-color: var(--bg-buttons); + grid-column: 1 / -1; + + display: grid; + grid-gap: 1.5rem; + border-radius: 5px; + + justify-items: center; + justify-content: center; + + grid-template-columns: repeat(4, 100px); + + padding: 3rem; +} + +.span-2 { + width: 100%; + grid-column: span 2; +} + +button { + outline: none; + cursor: pointer; + + width: 100%; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + + background-color: var(--num); + color: var(--number-color); + font-size: 3.3rem; + font-weight: 900; + border: none; + border-radius: 10px; + + box-shadow: 0 4px var(--number-border); +} + +button:active { + box-shadow: 0 2px var(--number-border); +} + +@media screen and (max-width: 550px) { + .buttons { + grid-template-columns: repeat(4, 80px); + } + button { + padding: 0; + border-radius: 8px; + } +} + +@media screen and (max-width: 415px) { + .container { + grid-template-columns: repeat(4, 10rem); + } + .buttons { + grid-template-columns: repeat(4, 65px); + } + button { + padding: 0; + } + + .radio { + width: 55% !important; + } + + .header p { + margin-right: -4rem; + } +} +@media screen and (max-width: 370px) { + .container { + grid-template-columns: repeat(4, 9rem); + } + .buttons { + grid-template-columns: repeat(4, 55px); + } + .radio { + width: 60% !important; + } + .header p { + margin-right: -3rem; + } + button { + padding: 0; + border-radius: 8px; + } + .blue { + font-size: 1.8rem !important; + } +} + +.blue { + background-color: var(--button-secondary); + color: #ffffff; + font-size: 2.2rem; + padding: 1.3rem; + box-shadow: 0 4px var(--border-secondary); +} + +.blue:active { + box-shadow: 0 2px var(--border-secondary); +} + +.red { + background-color: var(--button-tertiary); + color: #ffffff; + font-size: 2.2rem; + box-shadow: 0 4px var(--border-tertiary); +} + +.red:active { + box-shadow: 0 2px var(--border-tertiary); +} + +/* radio */ + +.radio { + background-color: var(--bg-buttons); + padding: 0.4rem 0.4rem 0.3rem 0.3rem; + border-radius: 0.9rem; + + grid-row: 2; + grid-column: 1/-1; + width: 46%; +} + +input[type="radio"] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + opacity: 0; + cursor: pointer; + width: 1rem; + height: 1rem; + border-radius: 1rem; + margin-left: 0.4rem; +} +input[type="radio"]:checked { + display: inline-block; + + opacity: 1; + background-color: var(--radio-color); + border-color: var(--radio-color); +} + +.labels { + grid-column: 1/-1; + + letter-spacing: 0.35rem; + font-size: 1.4rem; +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..faae1ef --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12 @@ +{ + "name": "another-calculator-app", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3e9aeed --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "another-calculator-app", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/public/desktop-purple.png b/public/desktop-purple.png new file mode 100644 index 0000000000000000000000000000000000000000..f4be5ca9ecf74f4825fb1a5ed83f88966fb8ed2f GIT binary patch literal 27526 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 literal 0 HcmV?d00001 diff --git a/public/landscape-light.png b/public/landscape-light.png new file mode 100644 index 0000000000000000000000000000000000000000..a9269d10ec32cb266c95d91b0d397d778a66e24a GIT binary patch literal 23692 zcmeFZ1yq~e`Y)I&RInCl3zTBTtrQK?LMg?IJG8h5cc~yP+6FCJoCJ3#1qu`|4#72e z@Bo2iUcUa%J?A@X&b>2pXV$v2*6rG9lGpb8?(DsvpFEq-ua#wqZa%mP0)dF+UcFEQ zfv(ViK$j;8F9Tcfcrq05cEj|IkICS2=iz{GZschkv0LEK01Ynhmw_*BS>}q$|}9e)XIej7WPNg z$(KZk0!f{nmYd2&+%5eBmXNg2lJXv#@skGplYTK`Pa!6VoJA`JPZ; z+}0_Vp|`ZEY7?g%)cqFl{oo6eT%5Ts_%`rad`S!W7I-87_&Mv8WNX z?i%K9Iu--xnf1bDM;*oG$)Sw>y9>u6KF3z5*L@!~Ys7Z#^^;J<=!O`2VO8QHU9au2 zCr|1CoiZUPcfrbGJ|2t^p2@Qja+75<#LV<%*>3xt&ExAOmRHLys(R1xz>|Ada=>Q`biQaN);GOgn=yhozHJwn(kUjs!g-F`yI5GRl5sBMM+Eu z`+iafUwX^(qxw1sl#?@RXKefg1AbpDBG>1?81IWN0;4)M{g!K0l$}*$Z(Kc{0S043 zOsHWRrDDx;=zDMFonKnAn{&4uPMbBaL@twiR_K%YvuXmPy2sCTIx*)~Q4$SR&vW(d zBq;eL%j1Oj1)5g88R#91Rq7KcHS~A0i}Mf|i|tDyois2uHuiCzw4Cfe^SxR*e?0$z zJ&IH+&rLUk^A;7+SozN&7jk^`C6Gn>FeUAH4P(FhOogq7(dNn84dSiaT$MJcp#X2^ zMUuf<+oOgV*H2AVZUKFrfoK}$>(3X7{+jVqJQb#PIwebF{wKZvIGy$hE zF8Hrm>T-$e8c|zYNB?-$B@oEbqCl3xv1?c5;pudMN1RZlal{+BdfYt1SW@^0y8klh zQF5tT(2ve5+~-@S7z4^3X+2=JA|sCa-4V<8I3kt}1X7lUeNfi=rhE3?^P@y}V9TPfWvB!)b{f%}D3RkK2)E^ce)bO}mNxk^#OhAJ+>-ce?IEBKaayh4j| zb1YKb@Mt>2UbihP`vWEeE?z zSGPD97xF$KI0n9xOc5z|)opH3FX8sL{hf_E#OR6i_VTfdqkg&;w7k0+_u0xwrL2Wx zUGhqrPz=kAbF8ji4QU##GbYhn{T|V zd}K^WPox}eX~3$K3{N5F)zqZ6u`#)Gr-GW4TlgS|t1`RRe(M#XW+7|7#tZpsOP|=p z%}Pk)Ss(H|o9pZSFn>>czXb`a_iiqR&i1$RW@6FowYjPJ3G4w^6wRwNm*-PoNk$)1 zw61V==1tX9Ii86lzIo0C<;J0lD{rUzOm594FHGYGhj<{uML#2qy*C!#%g*?0PxEY~ zwDQ#YYe}le%p4s~7HUf#B{`iy5Ia44=ap5Z)e`#~*ZlM`WHV>l0bczZ*W_EWHUerq zpN)e1Q;%9Y@V;Kq$a6Ut^=MVg^B9sDtgvP3XLnTm4b7 zfnsK(3%4Hk=!gkuQmVCh#T!(5b`l9qA7azEUzNTpdaquTz{kwhHke%LZ|bzcoX`^O zGZ#}H#WeA3?}%GJL|%p_)i}ye zW~fn%IJGn1U0|j+lOvRaA~E-%Oo3klftQ&sAw3g)AZo5EB_eahFqxA6hFsY}iU7nQ zP{?CChoP8M>Z!k%&O?Eo(OvY~N|3i_xLyvjP8B>{6r%K=cO606NSe*=t1D~pRHzqO z1y%Dq;4?(fZ)C6Bge#Xx-a;wPDGfo|V~mpo#@H)cMkkYYXDc!-}*mz%}58kXOk z3OPc#ZLY-(PBBt+eR&~LGTT;9L@1=TInLpLbq|*DJd#AX=s%A|=Opkc`1@}yj2Vk9 z@UsRk-2;1A>>;D73k>5$^ZKt1Wvd~2GbXA0+p?OiZ5$%qHGsJLR9Fdom5?52*#1P{ zW)hs3?@A&@+aCGNP(yFS?dRhx3&qs(H}fr}or3g%B{_yC-Lt=n8|vKg1JLUVc8GaX zOD?@KtC#R@pE5p#^F&U=0}*cf1(`8l47_u(A$CMLO9|e*^1x&Z6-lsJ*ZKX)xrK^{s%#CHI4_pc2f6{bn z8Y{La1rf@YPjyOnCnS}64OeWAd+I(=Xi7B=r-iU|L^SU8m1^6B6tcN&pA990{X*0z z&rV_2ny%!E452SOI;b_kNn1921iob4Om|Q1R@0;pWY-vQ`k+7|r8C%1x5zbp+!NeI zotqcBu>2ce-jox|-X69J<`3U^Av!rn; zv%}6nk7?*@c}(%SnPC%auO4;{#lmuac4P{knQnM%Y&1(h)=TZ*JT+nd`7UEDoRM04 zi%nY-olZoz{YkNRdm#u>gRRIf@@9~Os#0-vDip=45!^rC>DNjTQe@ctH^78SghTHX zqqm+mMzxu&MaN{(wuv~b4N`}OMQxk{Xy;k6MWu)Di51TX7JrNEsXPVfk?(kl^44pf zp?}#xORUdhbhB(?%XioKUM7H#T0%J<=Xe<1=9YtUJbnod<&^@!av(*1FC_)l*razX zlbouPlNL3})-6kb6h5md1=H}|xY39b``+siCHHFXr}6lrh$euI%qk~-+C>|bvTi#pdZ@#htY+c-DRBB6%|%Oj0P7V zp|VKTTJ{pinC_@&K0=M6>bU;eJEKo2E+3CMcTrzu`@_Yaq}Y z5by(l-d+0t?T(%ouzth+iRQ;!ypBf&NB~H;e9&t=Qjt8{k9*J-pc7d;*Obe%N4GHt z>oLN#mqjHNdmi_73U0N#+ei8Zo<_U$ya@&}Pcnx1A!M3-{{LpGdo4DQMqQ zna}Ha`9;=RLBfqrZdRgYoAZcbv4=hrS0w92TbTjD<=_*uBzE=;>|eeBA!*0$7SHy) zY3ynMe!F)&nK1=Ewk}J{2*lc8xI_Pf+n2i?JdIvuGM{pKStRlMD2J^h;;vE(6-44z z)$Mv5a<{1OEt}1H?5&Uj9|3HkrDXDX{Dzut;S&yA{}oV+vci!p-BNg+bLVeUeus@D`3YBBhM*r|McrFl~}JJQYhCGH5bfx zQmI#czh3FykcYTnd2{nv;Of!A zIWlYbYDUfrCGT;%w-}eyuX8o^D?Y#LBo)?Izm}Gf&MYi4=kjQJg{j1_O8w%??8tR7 zZPdL`D<03Y^>7??oj+EQBUyh>aKuN|Cl?c>=E791Sg(*bKWTK*bn#0Vo-xjMtWrOokdYfbsiBKs4gPC=8-Wz$uS6`6~G zLI#;3Aer*rFO>A&`4;73O3*QJu4z^kBBJs-0Kx-spjVtZDq> z$rVPXkrc!!U6ikZ;2g9*z)w0@8hbh6b4;oPlZe-ky=911^&AZq8Cg2*<##)|qhS<+r-m$!*PC4Q88LJCqY8JO&EFx0}E(3%hmeZBSo7h;Im4#8%}=y>fOvE$|u& zW+6%N+)XCSo$kpMBzN$|r%+5r4(l**auLlW%$IZ5uOxo^c)2mRq_k8O9OyDNm@Pz3 zMVAW%9iU$xC<6p}NDp48GkFyVEJpupE3_?fa5$14^kXdIzryCfM9R0_KpYMMfsBRR z``(5F@wLH-C!h}WJHNz|7y>AVEw2<5!ZKJX!(=W3ctsKriEn5E|FTts#N{;;79qfl zQG7iY4`81EcSP%*psu$?om&nzR#q3X0SM$9WanPry6h~Rf+QkjjDb6jzE)o>Djtix z3~F-b>g@%}OdO@QVz@hX%e7p5i&pfcQYHWk+6;|nm)vb-$+!VLo)1fZ4!#OHt}AsR zHjROow7F@3e&71*%m2dSIsl*ENrnu)br~X*8*}CN^Yb~TBjE0)3DJR{TwZ3iwMTBm3-ebZ-1&b;ss%ZSBokX^ zDO4qRh^PZ-kYR!gXxr^@*V+y0+aj;YIGclCeflu%y!jJ5A z)y>k-f4=NWNJS>ExI9G#jWR(;?!y-~3^d9i?oUBiC;2}Ref|CsxW%gxaDt7!Th%n+ zblRX=RrvSia98V)Ii8wNAADkASE*DTi=V{KF?dU2Ke-d)J`p~MVLx^frnPA56M9xA zGm0HZdvoP^3H_ZHCHj#my!)|hm*9>_C_Ve&3r%T6XI%ouIaqZ!+Z6bF>o(@lXvqz=KSN-KL_<3^&EUBBlo=s1^>hG z^scF+`4WA`=tDh(V7`3+bZ1=F=UbLJYuI(7A@v8!zTay7`kSXRpj~w@i`yRFPZEA) ze>~1M#Bw{b%F2?_(Z+PQ*$VKl*0GR zt2uSIgc?payVI66eEgv2&X|?{nE(Ovy~=7od>5bJCkozc%J@r0o@ zkM*Dfh}2*BJY=T%tJr2ksj4_lQbX)XNT?0?@vq$>l#=6#@-vSZXaq-<#)$=oY))^D z-S)409=Mg*jq-faQ5_ABQ5FstRDjUOa?SUzyTL?$5V~&0nqNSpe^*FS zV#>pPlBTlOYJ$bb*?T-1l>P!HRs4v>&~vhwdpOcv&9+*?dn`R8GL7pT#VtI$#(!zr zwx>^YeOEUditRbuh4?=a*SjNS;GDXFBJuTXSY*wKF*A>4z0XE--ru8Nak}Vtn9?jC zw-gqDo5QfYkdxvx;GLJmNE|q+>Kkh&IcxcOuMVOks@!@6MLNEO58SHvOzO2SV)OJF z=?bvatO!tY^5CD$>m58*xjBeLu{xmFRWM6dmY0mbI?TeJ@nj?$V0I(xB306$eoG$| z26dHggsZ9Ru1&(2CO^q7W=u+)fS){$*jTKmex1+mHXUef)YUm{>{_Kt&or69tk5A- zd7Y#7rJ?^CYkt4HqOOGnx3*TwH*t#{q2k)LVt(xIw;L!1Ex04GmFPidS8`mWbR&&` z`FsJB1nJc-3k>2|u}a79CTwKAn(E7@dp){;H4^37?1XTE!%%>|;H%x`7figxK_@(6 zlohi#HRWv1gx2S(WJ7=RsG@^1oaRP0xUYYrCzgXI-{q;>3t=(#e%g7F{3{jnvk2eCeEaK!0N|zHRFUyw@uv$~z~b z;wF8dTB=Xhl*fGz2K!exZQosbO}(+G4z!5olXiX;ePy*`{UO9{3^!i=sOjRKgI%8lvcMIIz>GwDI5v-@$v!U9}};t_sM5Vs9=_;AkI2)+(d>7GdbwP{Iq_TJreTG{x` z-5Y$+RfCoNhhX2V=Ub?1y=7U=8kVi_2gKx>p8Th}L8Q*Jd~EKj1GP$JM=9cNUC+|U zN7|!pk7zm2G@vGn81@4j`I8(9eGXsc^EPEe-fmP2#npCEtATzz>HhlN{=y#E*4}QK z+6(;JY~A8$+x;Sk%-Orr|HuUZUpniwZVeI9it{LtfNiIs1HOo_B{8NzNu@lMx2FtW zgbgYb!qGZ$af=zrO#vIwLcHca7JHj8+r(!SXWE1+eqT%lJpMNp$Vdl)Zy!uYZH0@b z-|%^}6?->0*?3*69*ldco${-j!}=a2g6iG1uA8CsdK! z9GWyUb^Z#eXvTs-v(nvXLHz2X3J9j|hWk#D=^E)6KngC@@hI4zlw{IxXWkFlOC2e$ zoy!cN^R^C9iVxF}0(f0^`kU!}1P8nZ)l7|y({sG8He6v_bgycovNa_Nu07S^?ptCP zf-X>2B_HLFHXx&=QiKyl^ukxgXbT0Y8cUsL$*FNS-Na=w|PK(u|B~C(BGNE>CLkOp#L2K&)B^HeD-g>ufRGq%M)&u8REQ%wO zuF0Nr3{LR#$!ciYjMmN^qKX_lO)xGGWuhPM%YLq4;>>`a;V-?d915w&Y7}MRJn=UTasQ zuFq@M4SxO4oQWDaTSvTg)NJ+zvEqccg$YX3f@b6jCvfwpk+K{&=yk6fKE;cL^xwYP zuJ6iPzYo3}^d*`_@zvH@Yy4t|%00UYk6%Ma+;e$#alb;(*VhtYhH&*)aQ~)1pi3lnNq-nYL3Xjm}q%h zz-uQ<@#D?ZNV@vOOmaJ){m5R4ev<1_!Qw35ne9B1dTtf_;jv##bGU0BrACi5f1&Lo zlpA(4QZV#otyhynPo`Qde%+KpBn=lRQ(=S3(*>9Oj(S=lE3QTAonIG=3}T+c4WUf7 zu2~Sl)Ws0NDZKy6*Q2%};@ndQqwUlfIX;a;S z9?*oEE^V%z3*$C2l0DJ5G(6^2yhpZN+|sQ8UsMY&x$Y=44snJKF&>R{XD<1se>vfb z@3nESjA|$JiKm+?sudQvlw9Jdd=owVU2cHi;cO*K2Y*#FyR@nd-i%Pa(J6A!g*Jk| z7{C5C`6G7|7B^|>xblGa25xkqo;90V%MNxRen=&0I#3~zdr-5cakJ9M<5|IryoQKC==i6yKrk_o(UJt9%qZB!<{ z=fV9B90l)v-0DF7_!Eb-jtwCj*|%3aV@3VeqH=f|rwyIr6w)<(KoD!Pg@b7YcxJ(udK<0Sq zB-H*&5cs=byOVh;Sxq?oZ$Nvhmh{nw4}b=D#%k2$_Vm#|AbPe(ll2-A`{R~$S}AS9 zn@y~mJ455Y;vKHN_&W?gEJapGuikv#49w~NT?(O<(yO8Wfarf9zm1LEFmXD^AE@35 zPF_BAJ!vahT{`sKC$_Yf^?6b9{?Rz;4TkZQ30V`7Qn$yYWRbu}fVJ=ecQw8lxfpbU zR6Pb8B|yqIz%!(Fj|c@{d?2iXXk?U2BZ>a1>P1KU4f-Ps zhk4eKZ1~<@<2U^mKCj<1j;E5@eY#4!c|iX$h?E-h@VmAf8*u94%#{pr*6$R+V=pX3 z>#5w`?445cd>WsxDe5Uc(~?7)@Ni zN&iCA%X)r*Mz>1O-aX9jD6I z_W*|+f0M~bqwl;QMB35KE-&Bpl8O0oje%5LV(*wi_9!>SyeoUxc0nt!Q?DaH*kk4Q z&nBG9m4(pAQQ~OHBQekU<+ndgC+Ox%yCL z<|W4QZBn~W$>t@JsbJgA9d7jbqxeA6dcm=HO4N%{b5Pf_XVVe7T#Yoc$MV^1yFdt9j_2gq{Z!bpY_M27V%- zuye@U zA&N*nFh;0FnCv<(+Q!gY~#KD2WV&>LjR^f%o@rthygj|tr?lVsNUKtu-6e9~)SJJK+zF@u4xWJQEqd7nEe zMV>tFGN}|C9<{ArdtUP3Dm4R8US10;F`H3&xO%C6U>lGMfa8$^@5t;tfC_=q_e3X< z@pnFdLHhs9Q#yrHqz_2{E+|~g zR)3NGIaz4$p(5h@8j(EOcWCfmM1``ta{5&|!$Ki6W7M))8(HkY%z-efTG*5yg_j?unX7wZv7mQyi z57w%AcX0hQxPA4TWCOOWnR4qX=l+GiJrOsbt5e?+#G%r73dQxtbaO!o#21LWdUX*c*#nv9b&HD$9lR-Z`+l}J zx-0~L`j)tnf)^}L;mwonIii5J5E{7Nm$tJ$=q4=GoA6}ZKbVAmXoue+?g-GYk1&}DhawKXPcpJKeDdfh1PD9G?D=|$Er2$ zE(;MqeGThN)zjA6-WFTwK3|#MovRLZTB{&?K+<@K5i0k45X&T+-CsYSvw@0K4*#xr zU#hVGbZI%B#2e`!!@#}j!v|dJF7S%ht2|%UM&!-=hLXjU4L(V8X76Bj_DSPwxJK7- z4C`kOfC_kx(qizdEoMi6!cl4~1IZdi`=2B9;d&ggG-UI0VRQY#YN~qk%1A?T?VglBR;n>#riywTw7_!jIb$GEyO&FrS>>5Tf22T;+sSi>`P{@q2I~7z3F^GyJ?Rl zPp_1Y2NbiCrY$`pRFNB0^ZQRgZ^HnIDEH*o9+g&#op?5b?kP{rTG?W2Gq!_;h) zA8wohW>+9m&1toq%HQP?s&DqpN{gY9{gJ%2zfmDX*S<@yF=M}j*v7?ag(KiNX*u18 zipVU4nlM`wf}U4P8#Ff5+3;x%RdZr;3F&WEh?J-0ha;l~e#chE~KI}&i zM9nITx`99bva5{Sm@VBgef@Q%lz`5xW z4>_Noi9d1|vy_ANO*#J%H@BI*dhl#0j|uf_BfteOAgz~K?>KWnA8<0_;)9&&mm@2U5VO82n8&Xc|@|9yVTcz5i)3DPM zK~{*h(R0J^EVnNuhv~qi&~u$exUTlT5H{F0k8wTTviPKLb*a|}9fj~z(HTVS?l6ws zUi#QPQJPIG|5av^zd4Xp-dvYi7WYi25P6;(;4s?E7%Y-?Hw8sFvflMT^QZGx|NURq zw;%`?1C-l4o2}Gko&t2|o- zKpZwQLBtkb=mJ_578_S}BYw(9)-Tlr z5Vamhq7@3>f5G-8`^?x*_&k`@*KDgp;RTkq^-pdWp=xWJA~8DN;+Zzb8#NGkonQ@7_|4ib~R7fXQ!uQ z!!>?mYJoKT=AB|`{5q?jlXbMGjB+F?Q!Fis6-|IYn~Oo5R`hgRpnJ zvari7DO{#&BnYRSbaMi~RK;{}Y5=bJJ-$KDB;t?sfFyQKTfZ+Sso##ICYIRI)3U69 zj~N=Sfn^Elb)lB{evE~i(XZ>`Odao>sCtyGqIAll%(y5T0gO%<5J|5+>w;J`jzW|* z?$_B6b;gM;#-+{jCAG#%991x5a9w*p7mK$zcTdVhjmvCz+NyDTK0|k33BFQ0sLA$- z9E!Yr5zBb5bPAa5_CNgA;IkDfKwZ7vnQygTQ*8{T-EGY=s8~wuw#?c~sdx@#+H)gN zU!C-|Iq`3L`xu)#^$gBm_Ud?!jKoJOEZ_oukOOnox!usV-qDI7QgwCZRjT6}=COgd zi>aoQoVARXTcb%>sDd(W0*z^=QVK<OUzRNqXB;P`2Uw@5PM{FLGJm$QR2EsF|1h{P z_J1(Adey%(IKsb3T-c7q=diG_(9qiX;Ef7>$4Hm45$ll4rloqeaE?Gy&E@PMSr@Yj zo5~5UvJ0>G$rxrE0P&s_9@4EaQyJ`&YK_?Vsz{8Al7}ecIV$yjvpYb5fxF=o)S(aL z5Y@Xd$*Ca?hQ`L-RP53m+!CGBuZ@ko%MLq$7Mq$`;GpMYuIbPD%fb5x>|Q*etNSe} zAWqLG1HMUr=Z^YmZjP<&m6s*cz=eS#(*1_42$;vmfbC$zuWc-0dWlIDlZu@d9!$Bn z#jqqfSMvc64`@0QjS@nI70<|z~LtNwdn z>-C!F1C(2KSG)8*>}HR8#3y8(k~;Eo;qnbUxn!W-~{Hx>6p{I z1XYlkGVA@wD=h0je^bl$W@%iLg^3)jDeyFuvmr+FPwmGm-L?pd8;2naP<@D@DE)hj zZ1sKE7P{ehFH}4?@ywLMWHMM~)?Wl*d-+Ws`^%^fGR`-bfjBL1V>&T!s4obaYH(9A za#O$#gf6O;h_MKYo%|ls4;4pV381cA8!oEG>v*2Aken^GFqsg?AiwPQ8RO2pwF)z) z2VZKg->Txo8oKutBARTU!_Dvv9??%dIa@^EJ{b}UR?UC6^AaY-voNvS zpLS-iZrb1B4OaKv)U_j>sNt>f7HtEy6<%y&*J8`|qQdN7lGuM-it?i=%Agm|lb$ydKlrCPm zk}tWRuMwF(c7B>}8zLM?YSKJa5rW4|@T`lPU>^31Y82j%v@Bd#jOjY}x#i2F5*^KR zvP>7in_el%r6&g7dXJ5x-K_a7Z-3^De%rq(SD<-mJ{({+^3bhPSm)rbX>8&KJUvV( zU^YHhLQ^v`(Ye>W5Lh-tk4X`+-0ZHet^q&M;^^YgB%8%C*2N3E&u2WR9gy!Mi;vha z_*6!e42BF-6JR`%1mqrGx)BU_^75YnaznbuSH?RbDUwcufpT|QlG7fRqdU=fFX@l& z#I8FraWU8`HLo}AUkKCE><9Rizywrtr<3MU?o!5;Nb8;()qDe)y`nr|jjNOpVQBOj;UJ zYt)M`){L%Vl|{1l6C{r>5&kr86Tb?>qJ124(I2@$fh<~Zkc+DA5e}siRV+SpLgUs6 z6+S=mLGZ`r`lS(VjH4y@_j*HtMM^M^-s#G{2y>&a*7J`U|;+K5f6-GaAnNytXE3cCV2v25wL8g;aK)6&<|F^Q5B9NN zpc%9+|5&6@4ur((Uua7^Kbk}nSa)1XAh0|E+?Ri*@cC=RCZVtVM>&(#Xx8#srv87# z)25mF;J~8Q|D z>0%%$fVfNex70MfPG)+zGQ{(KklFSB0azc1|G<5xUAe;i3E(*LhrP=gp~OZ})jL)W z8xF%39sn%2wmkUsrXB#A05WxsYi4NpzvqrHZEcq1z~Kv;Q$$3$krZ3qQ)-$HU_{h04IZi6No`Ty;(r%3WXxqyMlv7UAEQi-9x%5C}^oI=Okj@ zTx$-#4I~({evmm%*Ot4<&t0Mu7PBf}kKtYnoGtA2guQ>DzWOs_JkS0ec^ z@?S)VT_=!v-+%8J$#{f2OAEz(XykC@_3(e~2L=~uijJb=5l4@J{f?p)nU@~@<`bx1GnY>=0?1@N(8Vz0J8HNM?QEo!LV^2DF2rY`Hyjdv-m&HT>Pie z&|$M2{QKR19G5`OqUGtef6H0?CvxYT{0RN`l*RvMar}1|*m(Z9{^qg#`R=)XHM&pK zJEI_HfI}n$o0AoF5A4?-*bG2zgXC-3Pi(i^TLpkfT9%`%E0!&Ja`_@lKOqq5=(>Ch zuU7>tQC9T}#%zz*>=oj36zf-xCX4P-bR#SIVnVkdIP6FPC7_aup03=Fw`Bnl%5F+s z;(xu-bcX&&g7cAnACPG?nOCD?=XXegk*qFP8*q^3jalb;66Fb``G4V*&Qad%PNn3% zh8uprldEO#hx?3)s#8I$rwp%{+NOFt+w)bfZ^8uXJiAr!5Ft4w{HL?T^O{ML!6H2%ObTj1Jx@1G*=?-qJHl5 zQa7t_U@R;Is@&k0qFFGx>X$4o;&HMN1cTE{GiO&oPF>41v@h(8bMO4HKhr-wJv<5r zG8R*%BV2Ms!6<1K433rn*;k==s+9cX%OvhVm3ptrL0D&gOIVjnCQGH>N>R#3=rDDv z(PC^j?x;{oSS{D!DfhR80qWQAcRM*66ie8&Q|c!b#wg@xa&bGWvWEH+KV}7c&R^iQ z6wyFwjglz>_if0AhVx)n=Nc0%nw)H?1lvpHA>>-YE|SiR8<=FN16I$fot$*5G?Zi( zEpli7B|kQ~%bX6~Pd*n8&CVM>WNZbB4U`3pMWtx!wGuGLRp7>+L#CXC_(#g_~pIyGR z#(I7(hi#6E!U~yY%*s2p78=G2?d;?1*!#RqP3$@_WOP@rylj7UIWUm)&P%E9)bF?N zfBv@S2V~V*Go?QiXY5Qw=Xy4uVFwzHwN?5dss44?8D{rsGfm3@mjD>M*Zgw20tish zmBx2|j~aM~TL-?r)?@c}DU%m>6-ce|6=>@qpelit?`iXV=CkXlf!+5IbCpeWDC^S3 zcJT!GJ@a7K|7_?zdnL$$TcgcYD(^B#NTR%z$Hzvy{53HGDif&F@Vt7U`k! zV`wtJp6NH#A4RqO+tB%vBEjZY(4!zkRaOO80*oA`l&>ox{@kXeki@>XG(wmnyKc-5 z5i%TV9ddD7p&6`<{#+6An!ORSUl2`Mu8w4t3p%yl%-?KUIDtPB;AlE{XsjN}h2{s3 zvXrEmAZz_0*LX9>?b11XF5|v*V6ERj`(-Orij?9e`FVWxL8t;X0l((v-iQ#foc)6R!)DRcSV1E27Y5NiJD$@$sVv4-$}T5P#`wDz$W>pG@>BfVx}u_m>v;n`3r z^w!63T}@fMY1fADTusEE_JEb@WI2fj8z^|hjor7lzyEN3o_E zM=AguvwA%jK763~5M*ccJ-Z^y!BITces}%s3v~elr=H513y&7jOv=oo-~MmV#=&V< zK#Ei}Vtj?x=i2MG?ES-)he631A8wT1id$LTRxUIwWY0gijW`&iEnfXC+4k6NfWaZh zO7DAN#gf6!;M2A`N2N>OY!-Y`Mgd1(9A-5%!W=5o+$)a`8)ax2A9KIya@_e@k?j^M zd461tIEj)xo+m*dY{xJG`_FG76k5}B$cqf~^qDDEMb8ebXH(i+s91Zt*fYg|__Hcl%56R=kN zc;;bgY5Z&7N@FaP$9F3lMnm2+Sf?DLVMtV^)@!8xy`Dt4WdX4>I)q-6*a|h@j@zP+ z)|hOupVZ#iCV+dXAP#)xND!60_B-<(PqX{FlF~BL_*JKCZ`A}iCk+2|i#nT|AAx1g za6DICjPu_vMbD(P1qI|-i<{G>J|y%n)nB13>N4X=xmTFEI-%W9lmkSe*NbEJvvIb- zvh^Dq)sWtyw4QC@v!0F0runfS!wW-EYh86a?-AI&^$HzLGO1GL!Wul-n0skda=yHO z@{B~~Y*Qaom@34JNRJxijoKZ4lZeDA(e!Y95{PCgX3VBpw~!I>(cvfWh_ zO>91VM8iL;E$%tYo-|G(mKuFao95MWJ95XT<58fJFI_4sDLG_SR|deto$48@)N5&^4vXj$Dg&>ih&k0YNq&RkfwEQ=aX zjl)v)z*y|FH)1iVShEO7)U|@9VS4d2e%n`^lJA%@IbWp1G+$A2jiH=5og=Cr3;6Kl zhY63G@cA?uW#zu5j51Wa|BP@jEifo3Hs>qFhGdtX905784O~;w$SLs>oXJ;>!H2I;c$#t$e&k*>xR!Bo7z*$p`d=4NzTtn@=kzP7To??>=!O5-64o44)q0XX~Dsh=?HuLe9|HqX%!2)m1s zKE-A`GPn%DB}#VY z_q?p5e-(v+1haU2hG&5BNjJ~HE!r^p7sY2sNWrs3{Kv;geyU=CM)tu{vJ29>gh4}c z^DoB@Z-V=Hr6esJoX~QFZ$krOg<B`z<8?(m?5%;U`tX5nM7 z(sIW2dwv^Ne-Q%$x02Xkh;RN3C~YJ*xDq9+1qk-*tEnZ_BT8qRN10sw%W6qs*P80N zIpIR^qjv62&X;mKo#Th-PKiakmR7ka!d<&AW2?W#1L^JDtPzR~gxREcnSt3#!7mzI_MdBJK0K&4E z^L~59G8J>qbFDQl!=)3;@~Ru+b$<9&-8?Vvb?hXGk}nasSDRw4|1)oYG9z@=J#*ns z6$m5=+L@CE?9V{+gIEgNl#@bjmJr`+7 zo_+nff3_-yVb`!cUU7SOi=tKpnRx&!Gfxc|GMvws;@XnO9cG0C$@<|vHg4*2zZtP) z(6g2mHF};-g=XEG+wBr$&MEfG5T+`#KE7D4-3e#V;_Lc83xe#Q*yr+^8!i@&@68{U z=Y*Rt`L0@N)vBS(B{6THwk6*Nr4*MI#T~LUg#XYIi>&kLGVz5r4TZFE-`;9_zMUK9 z8`xy0GhQrfA`p#xeTu4gY(tZT{W0obA_q=RhgC`3Ep&WAEl^yn1J$y~Di%DvH@Q zzkA&*2_io%?-(s*d~Wk6F?uP4@`LgSA&H|*kIel}--D`N8R{F?XR8RFlXnqDSq-CQ zybxupovwHncSDt=#}`b|T@4UI*c%|xbI1{5s;A}ev<=oajUHPcNZ0N^AxdyhWqNe? zTOUZ)A)agaNRA?(-+8z>K}5RalJmh5{g~3W!yY$wx4I@qz6geDKKM*>VQegBQXjxT zjqReqS`K1R5&^2w{Jl;A4a?nm#o}V-b2IjS+QT z>6(RU_j!LVwX6N6;=K^u(UYlJui-nDl$I3g8aQzv`6>|BR#MH(J|kd%>MKHPJD|3& zhC?7{OO!ugf!qQ*B>?zoSTnMljQ_$nLR59re$KGKK$JUvyJ)pk>hr31*E-rX=@+}u zx(pc?tJtfS7)UehlZO{^MRudVf&w0pm^cRlx}m6P?!i$yzG=97m~elD*B z=!3{{Fkq*>+F73YIvq|zkkfD>e8QYt2y+iF*$`ylwEGZ&GXW1MvkEI{!_4a~>J7iT zuW4`PDbAfa3y*BvVrFhnBh&WaV5Ife9fo$r=F}&s(7Cg}RSElKfFl;*WztX|+6lkc zL7Bd_cj`HAdA%Hp<2-NqDeJ}IiN!-1uMqRXV?hDC4;n0jNnNUsldl!rF!GW+zOD8v z{c9?@iRD&b$VvSW)p+!MX<^9z{zRiJ>%v12NU+gZ2%kP^y%*X>N>j@j#+cDBB5gDG z2Gi!XsyPhl#p0m>`<8ZB!2&B5`%cWMJDpx<&qY>%9a8O93cZ|@2P(?9+;8~$CLKO~ zo|H!>zZWm2hpY#TS~oL~NqW9os~DDPP_^PP0Q#TukWR{BJ!;>GE`qJmt0u{xff%Bsc=!LR( zw}!YueejO1E+eC~wPrpv_U4N6&_ut}Icy8;HhR>idDCXeCzVGbS#%{RNK|8I`-Y(q znKkU6Ou0}!5h{NnDXe35JMRc;LC@umlZeq~N)2oO1QdFR`T+uJo>^p&y%yB0I6&r) z*<6(WBi>`=Fd~c=O!!-+I&Qh+tx7onNVQCaK}sB#*pOw+2qzCyd6iND@f85Oek$y; zIdJ;;8ngB~D>BxY5IVfvQrsBemqKOHTvnMQi(rQTIz# zt9FY(!mUa~tfl?EN`#zgqF79%BjAF8f6a021`4k+@6(=4y8p34)II6!@>ZI%Rrs~O zBj?+nKLfBh8hCd&n%j2v5pc(os}$Ajr|;b&XIZMoyr-FH$T%sIh_Y)=M@3*Dfw>OZ ze4?z;+uN>VVX}IF+kSy-7zp<}xwn=n#upWanu>XqOS$8aBb``yq*P9O2O!RfeFTi! zdQXCXVqa&ixUIm)Q=+x0IQo8J;)Z2p>81_3dO+0JqQGal>z%Nee(YJdB{hA=YRI&~ z!q=qi;6ZDN>9MoWYg^7$YF4?C|_hyS~8UES-0L975(Yml%nP-{Bj4$X%L zxBbD7JM&Qe@%?5&IL7Cxzr8dLl8mX$R-APYe)gN3$choa)PwsUo}gE)MG7ysj{V*+ z-De^eJK%GZvPXG|JuC_cKf4Eew|#4mwba#eAt)8=!#r#faJ&87GNf@Wsz;b6uq(iQ zK7r}yR5*C?YZxK;mr|+ zjdiXIUFu*ZQ_BRW3O69Y)wO|w@rahwj>G?WK3wMQV8`Z(!$M{P} zeibZE&Lxc*ylfT$TULhKm#SEWFUX0IVl6?DnuGtj#{JjA=)V-jf8Bs^?47V6>Kq3s zSCo7HSge^UYB(LJ`antp>gqlA7+`wYTm6;-N(iLncU&QPd`ihm8DWDxNITViqvV|0 z%~0gzKsd*Y8bIt)+|~*ZbR8L>>E+|5==|K74gebq$9H0j|5nWZb-({=yYPQ?g;T~R zCMGScGwkfbWEB(?5D2cDGVJcDvD6-KTkO=~9l`FX?7O}3op0ZYC>&vTT*kd;m3!>hbWEU=&*SmMGhWt7{!ORr;oZ4-%5&Q8lO9oura2OqVkH^k> zsy0doyQu}$^BY;w`BotSFjx4*A+8Q%toVf=sjPQ2T%4P;$s-(=bn{_M*2epVEqfx@ z?XA?zFt~7X-uv`K4OW%;d$C}GF_ic=1l59E!TaF&^pjfLG@eLrQCoeh+0ugFK(y-v zR!>h}2-c-aPK%4q`lZEI>$6B@S}LzK8KTt;Ife$KG%oO>KRV~5Tx#hOZla7AuKIGi z8e5^s^-s@IsqzqL&#mSJk=LcJrbZY*MdR{Y$yug~RoT_I5|_I);sz4jHda|MWXS+$ z#WMbT{N|SmkuF`)@eCN&T|@7nmz8;v!hC$u0I=lx8xtRSlFansL8x5$vV+IvKxNSN z4vR;+PUu&n?CpC1eEWrxt05l!eS+R?hS0Bn4zmnh5yN}~20JapeWXEX_sw2`A?FtU ze&Akxz8oSzefO*IU}uMwP7~Ub#dM-U(6phj$6;5*!s|@TR#&?kXE`i9DMQfQ?Bh|1 z>+Uk9A9MJ*cjqDVKc7~2TsW804d>=u&HONC-_BR=gDwT$W+;M?Cez5aF6oTfr*R#Z zNnsaTBh4NMn4>qRrf`)iLaOzwuqi@mTJ!vJN@N$cYa#zlW+lfDI@v8?X2?4KH8CyhLUK>^Ll%$ge?S(j_ zRp8^)Wd9gbcu9lEsCZQN#L7J^bkox#Ia1T*?MHXRSQudo8x0q_&+vZp#BD7;8i9jm zJGr7DLY<;CO0*fm-R|XN?_#gln>%Q z__w?Lwl`y=cP;`u{fPDNMvHf?@L}E-r2|3Q+fnok?i+7g{hc59NK-X*4AZ_ve5vIdY*w|7aZlS_g(a7)=u$xc9smeZ zxTKZ3_`5PA5l%v02}VsS*F=B7(DFo5?35?pY@Dz9MTGDSIqU zxtF{3;LJ2`$hh`~K9RAy)~v&-nxT`gIgZ!P{>tszah~4SvS*8apJh$njAx|j`K_)V zykC#7=F(4TLC|T7Wl2oiIBgkvu&7Qa*MFZf>>PL>l%ipWs6FNEf0unx1J%?M1xQ>W z+|4EBZAi3MY`?gt(vR0Je){}MdNt|P*eaf3p2YI5?tMQ1bTM)GFLMV49c}y|Wij#f zT0249?!8gjTJAC8U5b{&zh0p!z7lha$&90$p9oB96gJZ&gYnKm{H)FJe;p*rKLRmV zLmaaywS+Ccw0-&zNC!7)p-ZbTMhFQfxptJ;W_&*{2`LL1G50f`YJ9K9~#!9iB(J&ZO!PNjTlrFAa{Whg@i$*HvQ96Q^wr$5Q0&mR0OssLW^| z^la>U5gpSu89*gZ?LMQPO@I;;)9;yxcZb`@mBkX`v^PSa2WeK8swT9;OAEkOk{Mx;;Zm zy!N~LhHVxtax_9_k{eW5S294In!CPuHa+N=TwYb_u0~VN(A5jQ&XZJN^OCjS&rW$C z4%7&Pp-7?qz-v1i6S|_Ia z&AV$0pWaILW#T|=yFD7KwPD~jsm=g{Li34wE9}9lEgRAL&d=k7q!!W7L+u+W`=G8K z7Ym3xxNa*|uyd!zETyogLw1Pno}B?(Y~a~0m7khNT!#2lV+*GaL$}R>YPRUhrK`&x zVvEW90G24T7mYjWfh#H zR_7#xh-YMvKp@@#1#E zJ-rNZP=))GJICT4D4qg14c9eG5L#`5V8y(7U+KhR$$cn-e(3t}2RiF|Hw;9Do@PMa zr}MVAgG-u`tf%b$k55&{nUaUD%g8TF^rpH}))7iEfW zEWtro^mZ!gHCivCxhSWw=pi)XdN=z$28S(p9oc{aMZ^foh$cVG-4?cO23k4bwA{{^9`l%W>}Cj!CkZF6`c@G2qmTe6ekIiY z5Vd5!!}=!z{h#{zCnxwQg)z>P$-B$vO zdsL{=0KhLMZr$sBujAdoBf22A_PZ1eCbo;Jt-MbA{DQ)mIK@frprhi>cCV_FD_^2+ z)F3H~!xJJlTSWEsOTod%M%NO*E2^BgUnrg+?#{jFuCKafXx<)CwgmbOF~KhDhpR_~ z&f4)zmSEjzS#6se+^`_O=?lR?X9K0>@u)G`0^atdv zqf&Q>35u-r zIZmrZbd$V>i@Yr7Yy)7K^3x+@hei*>ucTO)O!Y{ zyq$)%?(gi>Np603H^G)<1yOP==DL9wIoP2*nd!BfCo|688#!vR&Ua(;wXdQw?QSZ3 zjvjjO>j<7NfZWeKJg6;Ki-swvNvpW~a zoeya?0sn3@-09 zTsx3_`5g7tRbQypj8vvn%f zh@vcY>pTL3kr(wwS>R5$B?m@aW!>ZV^043Vo3*9eI|MFG_dM`9M(HEH6lle)`@Xw& zo&<8RXJjGwYQ=ms#Fp7rWZs5k3oe6l2}3h7xqbg z%q+2a_4^@bs4!e)eMEM5d?M+{2FB?d=;d*pn%Bm^ySCV?$KxoV6C6>P97_=Qm|{+= z##wT8U3!aA_MM70=-tMC+eZ08j{WTnzVYuMc@^_;XkRlEDrhrt2Ysli=p3kX|04{^ z)YW0mdBU(BrT^b%XaDo4Grm0b^xdHd7QN&{7Q+ug8s)fTr1YU*d9qzlv9V;^`(Lqf zO8&bH)sH_yYY(v_bpa~krha1fZd~p%U(@8D|A>mC5m13pGIEB{s#jPAQ(^M5Kk!+= zPo6`7&vBn9HakNJ5`QhDTZP6y{J#&7wPex|qesO(-`t&Ww1n{JnJCe^YuI9R$~El6 zCc>q)Ks27^6J}(o458t%_cnyy#tj#aK^h@gEAPf0(DAey{Tc1uMfRQ2Ug@&UqvE^B z4bn68m&zaaDxbEs`2SO|kMvD1UvjJGJ5C$U<$cP|N}p=^swQ(;sH3*!_U8M55#}gq znl>&=R5(q-CoP)DN%6hy5`bmeMQh!7Ad;Ad93Lt^4~5!M~viwR%Zw#1o-~Unb_Y477a|b=hKJ z1ne9{5h|mZPdWBRceV*hBML|`&D zdN`8E`N11|M(Qgu;l|#=#gXPI2)a%8hLC0C{ zS|{aiuK!g+Uzd_+TwX9}&cQ5U=%d4zpLX<2bzuzUVevmn`{EP{N&A&~44wsmtd;wT zNc*FIl76Znm1Zz_R;P~@>F@<+O7f2eNklhd=AS8h!%3NlS^ z-Zc^s%}FOrNh`d=edTuNsqlVITD|@uJ(J)c+6QY5ne?N_GrDc@Wx>TQUsw>KiH4=~x{l`y zTM&c3Q8DCqtT*1c;K}9%>FpDtt_Pn?PI>*Ys(#~VL|%ti+jqI^wy4_AE~Dq|{qDzk zSAE&a-#IQu<{1r;S94(y+72+wmTJzO-C%PoZM&CatT8K;TyeegH$GFkJo=3sC(F|9 z)>53{#bBjZV*SeL^xGwoB~K`cp4$upc^CwfG+AH)1Ar7XCnd`y2(gCK`uvKw?x%gZ zQg{A@Ch>#$T_SmF`>3!20ATVT@5QdD314h3k8>8WKIhzL60_}Y+b=ozq=bPdo{Ulz zI=oE{E+>NqQ)kp%#5;B-4YI0r{b|PftVc$8K`EqUU=dcpLjd8A{8d4A%u;e4^bjMx zEtSgSpe%0_2Nw-!?o;XXUBkr%03P*|G^@eDkA2`26UQ@nW75z5xBz6wWx{=5H<<6` z2Xq=Sl+IzKKiy}^GT_I#&L!$nH@w`W%$L)B73eUX3o~QNN|um7WxJt;s>+O*B5fPu z0(1EMEt^q=(6$SFW=?MB@LT|h{HZUo;O+gE3KN(#Hq?S=CNY+qgwcQxH}H}k-VZ*m zqBU?=IUD;x7HbS&xmJaQ&yO73RlD1AJEp%|UI5=54blv|AuW?@s+C0J4%#O-GLmFc z+Cf%jZD38*P~^vi!^GX}1iXAmgJAQP9ZkyQ(FtxyG#f9!;_7cQDcKIE{OP@Y7hE@! zu-Wn5L9jAG_>_&7K0mrsZX{21mcVU-^#N3f<B&lqqm6L_3x5*y9J2?x%U7w zyn4DeKiRhZYw7&e0zbhjLv7id3Bj;)aW_?;3`fwlyTOPvH-{_QSm8(>HP>|p*QdpT zL2&kh-Zs>hschX+N#ik(>Y=&0HS}y>+=8*%MB^hfAM!3H%KY&!GJ(KxnRaK^6_p=e zfi6YEeMhO`QFMq>i09Emvv(a#W4Tq#xES5NagoOYDKQ4uH%ZPNO-I8s0v$&a--U5z zarfjmapUUuyGq$RzPafhEPls+ZX$j4`Fv3H?yR-CETCBXO4UsV?u`%x-CkfmY-%g1 zOB)^*YnnM>e`7t-(TTK`By?~O*=~SH1Pzd21b6fVflK=*H|_z;oK|ymJS2%8AX~4a z5n|YyXxH`@=O{c#>&-~X+3LtlXW4o7?9<)Z7B8shLNC@r3SXYT>z9$2A@l5BfmcrR zd}_nz)V`_Q0zNB!n06+YHH+)Ql?N)EX5`X72(zF*a;V?U>)em3l5%RnZg4m$g6O*! ztuG=f@EX#NEWYoSyX1eHKuqS({z|~LZ@@t>C!m?tPT2i(3Doc917h&+gP6;tI=%_( zssuw+)=ioFP<@ISJBX54eu$GJ`wxJ4W@n0vsmm1|9 zUfWTl=SK0DwAL0zVwxmxMDuTQ_%c|J5oZr>E>D^1r?lT7jn5rBW}7oK*DN7~rshsQ zt0CVrKh9!3{*|j_5Jw09yxdZo7um8Ac}>>b{p+IRt zjZSiGC&!YB!Ft1R<6$ZqfHh%VTvpkbgg#m+?Qc+iLBbC_TQlG9(Dm>Z3U0SVN`k4+ z?nIcx{O;;rWH6IqmB&TmxSzhzF_iGEF*PZjgSP%6)^U!W_S;i;Pae27IOQxp5UErS zVrY>|v!Cs(F1t8xZT4}u9tcRQk!0o)&v*(W@R4G~M7p0FX3=Se$fu-a-IZ^JTdl=*DX6ZSAN9kN@xFu~yb zf`K{nbi+N5(kGN0qWxaXI!$`OVJT6L$PQ>dxw+`F$Ne&I& zSiGI(X3oAb-^$Q@%$$Yz{Mc-=Zz#L)lKmi^upExWmVHv;q`diC7T?%;F27 zZ0wk}HS}&^4~(nyI5H-uVf#oiiq<_nYXQP3PCXVb|AWG!heYrrz#O>Qhfrf$A#`;O z$67+8A(3{AKKS{n;i{KpsaDyNVSana^_w3%CS~%m4ibwVO9mvY8oO0}{m+G7RtJ|p zfpb3y+CYs_A2u!zE*!pih}H79^Pq>f0ktnlhe%)3K{NG(j0vcf|ArGfO5hp=D-<#8 z6xhR2K=!`?$#)0Re*j63?!kHngITFVwwNYK-=nKQ3}9cO<|E?cAl%N`o+x!d&d(re zQ2bZYNAy=$+nEptQ+rOXaw66EkkvZ2nnu)tZfx{#vG>2li*&a@X=rGmM$9YsDYg%u zdw@VLPD^JyAuIu)@?B-X)Tt_QA@dIPZSL-mf9nf9+gJFE*U0FUh7RcKXKpmX9i8p% zY;7Ny;C}ee!hU333joq8Z`?eh`iJVu4tZ!Mwz!%lth0 zuTD(Kk^vl2}SRIzdV5JisWn9H$oIr^asnder;h_zLXILFTmY|_ET4=bB_JGsAo~Sk<$ob`@uUCGI|o5 zKVb4-g|vT5)ig}=urji85;`5uqgnM7v1>V~-cQ~CaTGHQ-{RIe5b>Xr&wYWQSt z#pGfnh2NtbV%28WeTC)d<5=(C0eJ3G`PZoA!7ZzWwm-7A&*nC={%JS1AZkDx)E5$r z1Lfad<%BNoKh(psx<9?n{d0JPAobCGQ6lPs8pgzU3CQK36>ii!xp%mKy-Fl{oS}cg zG>#Q+VcY@gM!Fd?2>$`r|7!H-yONc>yhT|5`9GbeN=$Ni#qba6{}GO>?tnrPTpobV5p(RDdihi2yT5bgmM}!XLhKn@7{MCrcbIb~aAtS#jKW^!A z=|d&glG;mh6_AFTmB#5TNu~7Fue|d5wy$HWK9$weLcA>W8n)1QcTj1e&BYH4L0Xpq zYPj8nELnb0z+NGLi$mwmz{}PV$AEf4uuP7S`(@9?NET)FN5)6!1*vtTcTJU{=zwYT zNzhG{s9W;+-cLbDL$Tci3z>4hu@{&8t-E zb@f{(FFBk!xfvgy>vMERF^ulMqPU3pI?u4Mbj1GdHVwDDye!|OBN(LjvOMnNPw3nyzXt;RJR?@nXpC8h#$8bB&~P+Jjt0lYyZ)2J5$IPaivmpUX<^3x2<*S zeLJq3f&a9meY5)@$|!e=6<+GN2iI1+9ixdDXq&;asoxyUGS}+53x0^=Q(EYqWnt1i z0*~X}>fvZ~$)!yqjmdY%w4L_>>B%c^3zFKVCVd()3}C=ONg$|}(|T=Q%ZK}DeVGam z0O%|{#``_f*m#hi|P;pA_rE*?$bNoKN-u)}Q%WT1>WX-_{U_q=bQ>}r$B z#N-*7!)&@MaoXmVv-j~x%1$nEGm}`r-3;lE%SU^MIoge!$C6i`oGoRg;L3D!Q?y{2 zuhlIkg!^GV8{MRmp;vp28Lz0N0y&k50A)GFEWq4fjTD4y*>A@%(yWL*XVci1J>8t!r z*zE~Nv2(o1>2zM4mTNAyCLQwPyM?$TONE3ng$1S$=WVFvtUbHW(*kk4lwsH_2C4kS z3C*^*dvCxCULaB+_-6nweR#9Yz1(_8GFad5+3%4Zx9q+7_z>;Vb=YI=P+rdNYh*)# z{uVn+*`)D;Tu$RaD8?l0evc98Z=bprR-%a52q>n$}0G8g*xhMq=9irAhz zM$a{{>eafLXxFZ7sVRwgH|G`rllnD#beIgZ>5l7r-2R8vxa~7G<$Nr|i2-VI)9-#9vaO$4Y<%aGPgM2c^w-l$-_252`9}`( z23qrW7x&X^R!TLk7Mtvj#$5>q7FO#Z>Azv<+Mk#LK*F(Uzp=#~Rv~GD5LMk>$yj0! zF73ovn^hLrQB0&)g%>Cjq73!?CD+H&yFE4TkpF&;(3Fvd!{DUA(rZ@PaX81bY~lwc z-UDb&Cn@lLF+qxGj!;p74w~8&YbrrDiqGjt)14opFh{6EMI*^9Vyr8sOuvoAv(m?F z5z{?xh9fI~Px_ra6aB47MN!jBT_(Q2ktj+bd-JERRe9Gz!DI6`VGFhXelcx&bG02_ zyV%bs+pRGtb2aAC` zWr$FeTsCqa*xY1mseGcA%lcgKZAf+4hwj+>^Cj?)OkaaKtAU6$;fhEVh8 z^%ZPl%0GCIf0uI8q_f$~2L>{;RZtmvJ)DzX zyY)+WB{U25_(z^0K1M9f@L>LzCY!OBkWFqMJ)I|Hz>w{Nj(WgUjWjzOUZBDyMHI)y zPnpV@s@%Ot!JXNTR1M=dUK~*d?45$FPKPE`GV`Bi&PaOVQ;tN61kQh<-e2j`vvkg6 z3CQyx3Gt6k|0dV|0dC(MzMPKX^(!{f|8HThyURF{o?_Rbnxk`FK~GGW+51F}vaPUV zwRdhXZBGM!^H*Oi`R_o#e@Uaso%-79vB=UZM9RogqQ4SwoxCtBduEsc^vzH$}&ts7;+#|x4NG|hCA#$M)o z>@){tc}D5^U0@~l%$xi{@WI`LC|zp05jqDOPWQ~go!x}x(y{8Kg&VV4)Rx_+*K8tU zdkpgdN6S?MrT8&v7Yu5xkAecX^(8-Y2@A4_KAInR{V9_=H&%BL-$_L9cEP>JvXhij zeVxo`eq!E1+uI4v@a+Yy)9Km!$Wgy#>!oyZ#b9U2lU?p6!v>V>*iqkrlD^{7&bWea zcf($rNPcAA>WCR#A}YTJTxZ7_``8HFC=+K_zI3^l#5s0KtuA#ia2KCCF-z}&IOO)t$nX(K$)HAn=h7BgHcUH7#P$2? z!%I#@M(UBnC#(8i0d94%C!B{n?oRz0lQ&yzcSi;IkMyo-BA(c-wN)>5G8@4#7vvaZ zIYmCn!3$0NAv<+jB^(4E-Mg5Z?6;vfW(8Ifzhj&^qqWD)-*rOZ6YoV<7PcY-$5%18 zzO&j8eEsTE^{y(joet^hmE`=9LgLc?qLQYVP)mb)z=Ny}d0`?@b$t*(Y(Y|2t&{^# zQ_bdf!~K-ee3)@z0a6b-2=B>jYufoVmt`G&OLfYQv-Pd&Kwa23)I7*nH96|KIOval^HZRV zE?=Pc2PFWkYK)I3woH>rRC}QV9?3LpB}Q&a;S7Dq-R+|Zx5*j2biDqR0sS*m5c(&< z$NrZ{So`Fr@C(`W<`#S8S_k%njrCM;)`CA-6QLX#G1Woq!TU%xwTCQcP?R6e+0lMg zig4_yncjudLzq!x$cHgJ>Uj^>ALU4)rS*2KEE(12vljWHXM3RdweD%;jeI0atBmMT zq)A{vDXf0=%jR^fy&9*5wzs%kycq~RRDa;&<{VMH+lE;bY?DOB6>ZPWiny>bWM**J zcpV)rs55_>{G#X-M;pO*t+wVQ0iG=xxvq~Q-DTcH z)P%P!6!jxXO9XqL&+M&5MB0aOE6HZ1cV4la-CXdi|3I<)&rY6kBSGyoTIS!jKVnj)wBE!nZj|SwRy93}nv!i;QMXt<6Nx+@|1gsP z5dXm$l8pNEBB8R+8UK}3Gv6DNkz*+?R3%SK%zdWk^b+((D*qQHOiv16{paMqYHCRk z{Xxv%N^hw88p)qZ8BeOHPmzKy8x_kaNmysRuCAxvVt6qxB`-dcH z+98!wla|D)Vp^y6r_vS@XD;5d;8&-skRNmy&#vi71{2&J+;F_pi66WGbsKe+S+Rr(Y= z6-P9(GmqwEGIOLvpj4r(3lpML81Pp&e0T5yJIs`?D!G7UV@DOW=-8NZcMl>Vl+^U6 zdITf)WcnrNDDQjOK82?MLR%GwCtqLEip!J9Mb1ZF>?YPp>cLR^ zcv8Og#@A>SeoDL*`Z@X)AG_T;?Wv5Bl+swE6@0L^D{rP6{U*FRt zyau@Yy`9z|{Fk_>ig3NP0wkq6I z9h!CD&UWcmF_XV%o$S@ygRoCWCxUJXR3$A8ohhhB^ULk2Wpfg$Hlxt&GircNk3}Kl z2&Q!_>z{T!j5W+bFP%KYYd}wC6PC%tXc9tC$A(P=4E`H*wN_5J9#oS3_nPcKCnfXK z-#)z@|CwypnHJ*zRxtjHK+H_J`=x;8g9>pE$k$W5*3t;gupQ#(&#gyu#CYZA+;jEq zAJKKpe?!MsGH&qqH^idV1cdyYe!RuBg8D5bv1@dv zKzcO?!x&LsX{%x;|LFiQ2brqeOM*7|^>z=K_IiCPj_YiY6IJ#~+u3J9++MmE9Kzh_ zIqkUF+IBw!GC6$WO111yEPJ*e;53p1wYB6gP#F;A3YqnfQ%ofJJ0}!1MP+%>Ac%_e zDfUw^ELCx&US!m>toYTwLdP6JlNKGx5w|{KPKwOAh0|4L5Xp4~p4}pStgZR*frhQ) zy9pW}Fy&+L_QK!**BmRL9ygd#_SW!39xK`@Scv`g-eSi(WwF{IHX{H)PTTZc{hGio zfYfDq;Z&+Y^lO9PMo+_1ba13*kNEniNG81PMCxxV3o3Kz!feK8#G3rw$k9FgYk69*xZY9~2$e~@!qLljn{TR=gzisF*Rb*x%dj%HNSV7mXOxieSggl?Ww(!6yuL^~3b6w_O1OTBEC!^~lWz?A z*y+K+*N_ltc&bFT{iID*CBu|H-kt%hba*phG}*10ZICOS6)>Bqw|-_uzY{HbS(%y54b zEtrPSB2(Q*DUR!;N|f1qO|hlC)r&^pD3?`vvEn+lm#st|$Bqq0ysBxxEfNzDp!c(S zPeevb#OJ)>XxrY((f-|x@4zsz;BoRmCec<00|A4f$ODG5ME}FaunkUXl#_R&PBX;= zR7sW<-)W@}>cq$^87HmEDz9O@C5Hm)_LDQI_j4~|2Y}$?(|J0(6rGoYxJ$krB{Ap# zv+q>{Qy4QDu&8Q{7z^Sq?(u-XReuoeWXh9JJJ$Z?t5y9lxa3XL_h~;Mil4k{Dp9z{vcVZ5=Dz&V(o>!}8<9s5#S0p!BrSM$QjiN9aFzx7Jd?eKv_ zilyqvSYZ*dAK0)7!un>!*JlRy%JKC;mEB@@E3;2k;QfJ&*!Jr__objS7U$fmGecKQ z89@oeIrRn;xW4UkW--9zc2mLe{Y9%}l@+36&8VaPCGW&crM?TI>>=WoIJp&a(WSVt zNWieQ%|;z*eEw5hiAWnAK18IwpDa(8lUI>$#sY8C)n6$Bm>2}*^;pz>$6|5w;Lhi? zpBXZK3!9$Sz*dskYT>{qy+-$qCG3qyLF4^vxNWXiAz1k9!HIF(Y)IUW#+ z??i6V1%c+8c|{Q2Xi^`i865fv>HSN{SVzTZLK-X<89=jz}2iL#*@eQ{l z=P|R>^t>$ZeP9yhIQ|)Xcqit6GS+@=knCEacNIVyyH@BcjgLL3d)GbIv5_t^+i+ zyxjT7eDP%q7O0?$BbC2Z9Td<}GbzdNXO6irK25*lew5DhfnHfxh~uB4hX4nc@KaS? z5yO{zSkB?0KJ{BADkyPe<>GKHyyAbPe}rKExB5rG!TV0$zk~-Aer)SZWdL1^hEKtd*HJ18N(nh^ zbb0evevMk*5HpR!hVIP8_kd=HjkIzDWvf)}u!x;>m}b_?URQtj^3vvpy0)(}J$`h| z^&4*#)4szxR{@k|Dwu}w@cI_=m;X=l>t zpk_IFr(Id3(dk;Va8%`X!K1 ze9<9Uox^d-YWp{6(Fd~?{YR0{+cgYb|1g|m8R^QPOk(z$j@ldX-0qmcKc?X9vrcBL z$GGV63Wkvt_81H8c~QQD8(S%l192xa1x39cZ3;-O5>M2*Z(%86p1ktlL;bB&1C`Vg z#8pD)crr$l#Xm>DczJ?9#vh*Ej55uI6$+j=Lju^S+AxKpr8V^y)^hv!)A`X)#gSo#f$rfO_{5!!zQ_%v;9lUj1f(;+#TFea0Ar-MgQwD zIJdLyBiNw!Sc#yUz>82be##V`;o!jymk_S`baDF;%~6h=N`z$p%Jrzq%Pcn}*s0w@ z-=D;~!?$p%H=f7>Dsgea$O$)K108E-fkp} zHzme-6$M#)xUE)vmrUoat}NUA74kmdJ9Gr*+st7K?MLdYS#%W*B37|4`tFIDk?=>WB}mIyTA%Gmz_Ia>urQCq;7GglhEa* z+%~$dZPLzOE>z;dM2j$gW8si@G@Ym+caV%Hav6kVMlc<>3KYtBJGQ8YBDl)8-7Y*6 z5n`t>vH&kbkG^KD4>*Qr26uYrEh9pHXUEQ5pOg$loOepOJyFx)S#Y{*Eq4cj_~sRw z``e4XCFk#GYC()#kVzfSn?->v;hl)V;xOyQ7Kfo0PEJ7u+Q{76-czM0sd4$46)adQm7H)wJtSt; zC-e#SW<{z5L>M=Le(YkWL<0S4IqE0UAOGfIGi2oMnw;jnW5YD`B+Q8*PI>0iJ^Nl-YsvR$hW;k2qB z1lM}Z%C^61mnO?wv$+?1Fg+h&HpZK9MZ(`p2tF-`kA-5|6qNarfpmu);x6WBA47iM zHQrOW+C~|}<>Lg~xxlTcEer((uXM5TvI>4MxRozdjHlTVi|<(aiM0BO$kL?Ct)5Dx zv}$F|Rvbg=DZSD3PV|T2T*XGZpT4fS%~x*HFGl+?xf$k&$f1s)MpKwbSXGx&0WFdX zNEgkb5zh~Iw<$sSL)@+FYd}1r`OGPH#9@UBIEC}QH0nvAg=oyT!7XW1iw89Z4gci_ z0h+5tsgvDXp zOhIT}aJS#>**V>b@M%goV-P(#`J; zq7bOLIAwTYhxdmE{%ye&P85N(2Dxf8YTxSX$|;)<7p69$a@a9C#TwUiM(PXpm0a&F zwN)cNY%P+|*@XV$A$anzeB7q7r=RmjslAWcN+kLqS3{r^ih{~LeIpZ9Ww Z3?GVQ_mJS?NA02q6lGOqs-#Wd|9@5t){OuF literal 0 HcmV?d00001 diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..7fca7ee --- /dev/null +++ b/src/app.js @@ -0,0 +1,221 @@ +// Theme +const theme1 = document.getElementById("theme1"); +const theme2 = document.getElementById("theme2"); +const theme3 = document.getElementById("theme3"); + +if (localStorage.getItem("theme") === null) { + localStorage.setItem("theme", "theme1"); +} + +switch (localStorage.getItem("theme")) { + case "theme1": + theme1.checked = true; + break; + case "theme2": + theme2.checked = true; + break; + case "theme3": + theme3.checked = true; + break; +} + +theme1.addEventListener("click", () => { + theme2.checked = false; + theme3.checked = false; + localStorage.setItem("theme", "theme1"); +}); +theme1.addEventListener("click", changeTheme); + +theme2.addEventListener("click", () => { + theme1.checked = false; + theme3.checked = false; + localStorage.setItem("theme", "theme2"); +}); +theme2.addEventListener("click", changeTheme); + +theme3.addEventListener("click", () => { + theme1.checked = false; + theme2.checked = false; + localStorage.setItem("theme", "theme3"); +}); +theme3.addEventListener("click", changeTheme); + +function changeTheme() { + if (theme1.checked) { + document.body.setAttribute("data-theme", ""); + } else if (theme2.checked) { + document.body.setAttribute("data-theme", "light"); + } else if (theme3.checked) { + document.body.setAttribute("data-theme", "purple"); + } +} + +changeTheme(); + +// Functionality +class Calculator { + constructor(prevOperandTextElement, currentOperandElement) { + this.prevOperandTextElement = prevOperandTextElement; + this.currentOperandTextElement = currentOperandTextElement; + this.clear(); + } + + clear() { + this.currentOperand = ""; + this.prevOperand = ""; + this.operation = undefined; + } + + delete() { + this.currentOperand = this.currentOperand.toString().slice("0", -1); + } + + appendNumber(number) { + if (number === "." && this.currentOperand.includes(".")) return; + this.currentOperand = + this.currentOperand.toString() + number.toString("number"); + } + + chooseOperation(operation) { + if (this.currentOperand === "") return; + if (this.prevOperand !== "") { + this.compute(); + } + this.operation = operation; + this.prevOperand = this.currentOperand; + this.currentOperand = ""; + } + + compute() { + let computation; + + const prev = parseFloat(this.prevOperand); + const current = parseFloat(this.currentOperand); + if (isNaN(prev) || isNaN(current)) return; + + switch (this.operation) { + case "+": + computation = prev + current; + break; + case "-": + computation = prev - current; + break; + case "/": + computation = prev / current; + break; + case "x": + computation = prev * current; + break; + case "*": + computation = prev * current; + break; + default: + return; + } + this.currentOperand = computation; + this.operation = undefined; + this.prevOperand = ""; + } + + getDisplayNumber(number) { + const stringNumber = number.toString(); + const integerDigits = parseFloat(stringNumber.split(".")[0]); + const decimalDigits = stringNumber.split(".")[1]; + let integerDisplay; + if (isNaN(integerDigits)) { + integerDisplay = ""; + } else { + integerDisplay = integerDigits.toLocaleString("en", { + maximumFractionDigits: 0, + }); + } + + if (decimalDigits != null) { + return `${integerDisplay}.${decimalDigits}`; + } else { + return integerDisplay; + } + } + + updateDisplay() { + this.currentOperandTextElement.innerText = this.getDisplayNumber( + this.currentOperand + ); + this.prevOperandTextElement.innerText = this.getDisplayNumber( + this.prevOperand + ); + + if (this.operation != undefined) { + this.prevOperandTextElement.innerText = `${this.getDisplayNumber( + this.prevOperand + )} ${this.operation}`; + } + } +} + +const numberButtons = document.querySelectorAll("[data-number]"); +const operationButtons = document.querySelectorAll("[data-operation]"); +const equalsButton = document.querySelector("[data-equals]"); +const deleteButton = document.querySelector("[data-del]"); +const reset = document.querySelector("[data-reset]"); +const prevOperandTextElement = document.querySelector( + "[data-previous-operand]" +); +const currentOperandTextElement = document.querySelector( + "[data-current-operand]" +); + +const calculator = new Calculator( + prevOperandTextElement, + currentOperandTextElement +); + +numberButtons.forEach((button) => { + button.addEventListener("click", () => { + calculator.appendNumber(button.innerText); + calculator.updateDisplay(); + }); +}); + +operationButtons.forEach((button) => { + button.addEventListener("click", () => { + calculator.chooseOperation(button.innerText); + calculator.updateDisplay(); + }); +}); + +equalsButton.addEventListener("click", (button) => { + calculator.compute(); + calculator.updateDisplay(); +}); + +reset.addEventListener("click", (button) => { + calculator.clear(); + calculator.updateDisplay(); +}); + +deleteButton.addEventListener("click", (button) => { + calculator.delete(); + calculator.updateDisplay(); +}); + +document.body.addEventListener("keydown", (e) => { + if (isNaN(e.key) === false || e.key === ".") { + calculator.appendNumber(e.key); + calculator.updateDisplay(); + } else if (e.key === "+" || e.key === "/" || e.key === "*" || e.key === "-") { + calculator.chooseOperation(e.key); + calculator.updateDisplay(); + } else if (e.key === "Enter") { + calculator.compute(); + calculator.updateDisplay(); + } else if (e.key === "Backspace") { + calculator.delete(); + calculator.updateDisplay(); + } else if (e.key === "Delete") { + calculator.clear(); + calculator.updateDisplay(); + } else { + return; + } +}); diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..e6beb1b --- /dev/null +++ b/src/index.html @@ -0,0 +1,67 @@ + + + + + + Another Calculator App + + + + +
+
+

calc

+

THEME

+
+
+ + + +
+
+ + + +
+
+
+ +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +