From 6c5951cdfab5811f3b8178263a710d33cb1756db Mon Sep 17 00:00:00 2001 From: thomas fitz <tf00488@surrey.ac.uk> Date: Sun, 24 Nov 2024 21:13:57 +0000 Subject: [PATCH] one --- DOCUMENTATION.docx | Bin 14512 -> 16540 bytes backend/data.json | 41 +--------------------------- frontend/index.html | 19 +++++++++++++ frontend/script.js | 62 ++++++++++++++++++++++++++++++++++++++++++ frontend/style.css | 64 +++++++++++++++++++++++++++++++++++++++++++- ~$CUMENTATION.docx | Bin 0 -> 162 bytes 6 files changed, 145 insertions(+), 41 deletions(-) create mode 100644 ~$CUMENTATION.docx diff --git a/DOCUMENTATION.docx b/DOCUMENTATION.docx index f4b2d4aa3115cce445c6b658b1781b8a3edb7954..696ae9795f8a56845bfaa146287e1503b5493867 100644 GIT binary patch delta 7496 zcmZ8m1ymf%ww=M<AtAU1cNkm-hv2TkCBfYXC%6m{9D)T%unZwM4DRj(cXtT{__^=> zfA9ORYpt&Cbxy6-tEzg}K6}@==7a!Ws4F8P5dlyDXaE3!2Edc-tY-rR07`0KFd*>0 z>*B(by^VMZo2Z{xYGNws9w<z-CbPQ-#_*}iT!V{Rp4v7Axl8D|`38Ea$A0>cp>ac< z5u_o)y`;F{pjgtg2h-CK<x_%&)X$4y*r=T9(GiLZhgm@&dVH*JM~(JhVM>f(F2fiZ z&o++(HKjIXCWXdhcq5LFJa!z_n=;luM6V{?rmQkzD@**T=9=jqJ#m(*7Gr%)lFyDf zF839a1crgfB!wS?6}+8PCUn1!JB>k7yVz}yh-jHPaVHJE!DfpuJBA4P+Lq6g2+*s5 zHSQ-e`tYmEcSP;OB2p}axgW|yhAiu5bMc~Q0eq`Z3*<)GTFKKw3F6e1X?KaWxBf-C zyL>Le8CUyybBrn13zt%@DMV$63jxhmQ4&!6m&8yO0UTI0A^{@gg6i2;9s>Y)#|{AC z|Cvm0XE!TOD`!hjM{6e!4j)H{X+s0|rGES%HJzs}HmYxmX-pf`Xi2qO8^Du_chE8m z=WSm!EXA(?EFNCGp1{TY<ln824EvPiNVp5s)<ZEv40!GV%TrUJUnh@R1W<WKtL~}n z1YbuFG-X6exqZk%>E&gg@7y6?x!tSDjL%1<FzauZPdAAWpC6<VqWy&FEC_hz<c{Cg zN@2PzWY>N?`mpf9LwXFPj{)UXh<R6cZluUxf2`9U8ARIesb#JKp#*y>_V)_bpTjZp z7C%LVI+^hz-1x(@FnaR5UhXVVt2)nLCWL&&3|<RQ_r-!(=VSBl(dfxbKE?(If1#t_ z<tZkNA~TM(qM&R1NVCwVuwtzse~?PfDmbQ(0afN8s94ka>W5B@>pP3Q7FS`1-;=zE zP|96qW|t~%+<|{oflnYJN(Mh>5VfkM&}I5v3XS#9J~^FzNWRvnZ4a0h(f^simPB?l z4~;3QxQT%Xd}FO2Q|c=$nI&XH5xUT>D*AeZGf-m3)mSA-DZvojM_)DT$O9`W7u#L5 z>ES;DEY-YSF(G)719>&UXZVv5JT0<VQ=<mkpa){F;I}F8VXtSg=c*x_Q2?<JW_k3r zUz$cwV0z8Q3u-9CDqLcWq;l+D>%&TLMXgGKcsmeVDSfXVRB;!7MCC{p<9t-TWewb0 zP1!l^S-G$eM=glL{67Wk`$ddehs%QSM8~}BCWgjOyiPpBqDM*fOI!sgA_GWysb={Q ztFw`cnso+|O}abqGhPAT)7+z+aWYYeU&-GT_nlXrOJ@*X8Ri=GPmzfJ+~5t1eqt&L zT?v6?Em=YYV2}3liQrT%!Gny=a`Sjs4<sS;yRqy9^Z7i>1sgFwOXaLS4BLP{u0Ghi zoi^@b^cBp<yMlUdE>XW?Jn<kaBB(NKsyT4(%iNyC!Odr;gdbaUn6vgo;~8(}_!117 zEQ&8Sgo!$0=)=l7@TBa?H3}&5r@oVW^LRrTA9g*4ApW~QB~+T-ZxWcZ2<MIycUQ!F z;6F2sV7|{<M5jF^4t(A0G4jPiv8CUVV3dyi5A*|L4)O*NWBC;AOo%IKMGF>frjJ#M z`kk5?y%~}P`ocvHlWL~|N@J?k2*~e)O~DCK934Fdci2HiHJZu~`V<~iHseO5;v~rL zXvT%Nhs)$j>A{RxH{Z5m0Hi;=*Hx0@<jYgIq;+cZYcm{tD5I?4XvKs_$>5pL7Pucm zY{=;c#{x949F=BUBO{eLN;OWYVzC`LGJy|m@R-X4OCq>*q8a%~lS_<7AE5<K(m7S2 zUyD@2D5@6@ca>5ADjheIR4h^X-$15c6%Dqe94tc1B|s=$fidY4-mSIY!=48#n#Xh4 z>rPtrlO=E?Z_m7O<`9LySDv7rnjBi2Y<JqipK|3xBg!a~XQSS_l}j$YCj?;Y!vyJA zb@wP!N7bb|B7L<K?OqlRrZ;J7PDg4Tz8~ZwQm<`w`oz>bO{I#0Qqj%I90L)_^=}jU zj!WE=m7!&OW)YJgOF28R$IW4)^rei8YE-35C~4ls0mqgy?;!U4S!bDhhm0;WB&=oM zD%2kJXX7J&jul#?)YJ&2;KHqyE=O?pCXkWlqv1NO+}*|tZH22XGsHdJ+bwia%+Zf+ zl6f-%h=Z(BP~5V;h*D#6qcw<|HqjP0u^9yoq2u1Y{T;aCbYM9}AxKu>@K}|tF|_kh zuXGG|5iWzVkEW2Zi-2_*(@$=Nf%3(zM^?u2<s`S%ftfZEEmKiOp8qPCF1HcaAjUH( z@wzg4clh<DSbW`mug6~gWd9>+W%BkojO1F2en#vJ&^bIC!89exEDIr#=$#QR%4^2_ zQp*zk1(XU-Yu9CEb1WC+Nqew-9k&J!w>_3Tq%X$FRv@lujYDcUG=x`=tFXGf_R|E1 z0xjTvQD(Yf(m=tZRJQsxs7_6l?g4``obd7H!TDLrIlqPrqcC+~74pDIy1GjIs}BYG zNk4dQF@-qkji(pVFGz4bUnK*!zYzj#_tnxixH*D0{A}A-_on2u43AK4;reMnjclOc zw0UK`2QcNaH0mPk5tl2Q!<Ev>D(WnxesgDIvKgQ;G@*N;%f5Sq)B36iY`Y;EFBO5y zw_)tzV-Akrv`f<^<ary+E}N;l$mn?)Q72ygR-apPumt;#9}<t5i<Hi@4yvz?Q!0P| zb<$a?5fPoqV8=drm!yQ$s(NYX)v$f-p^M5%f%>2p5<n#4>cycbgI%2=YgvJSb~qZ4 zwIHDLG`dQCBSVSMC9m$Ps^&Z62M!JMdbkX0c2x0jP2eu^7wV~-`}AYWamRYOqv&Jb zo3@X>ty?!#%@D2$25<X8D(1FiT+va_U*q7^$6p<xMKpTxVGB>={0?Jx)9{rb+l{*W zu_4-a)c~^fn+nww=>*@rNucRr5FO#NT^ExPI++9cQ5I>Euth%5AK^Mk|3<9k6mNqa zm^}t><VXyeHIwIFoaDGH#`vO$%xwSdW87=%12kSDVhDqER^x`1R2b?N&stA2S;(w! zRbsRH%7{a2h1r<9=i947jV2)OLXf~StQ!ZPNZhZrt+67fulp&)@rx6_sgc6Qo>a9a zmS!C}&v)dp8Bfe19+kOs6lhr9>YRsW*i$!1^t8aVCNfeebL6Y@R`CgPR6()=PhXx1 zW+QgwD8xtL8pp&DV)w?uyZzu-`=!E<{OPuulMi_g-cGal{l-x`vQ#lli)?HB;2G>R z(I7U905_GV2(i)N*OI7qXMSH!5DQp=QQBTv^I9m#EM0Qe>tH_h31aq_2Vi_mMjCgG zD<0{*plYMf>K6g>Prs#JD7cNlLz&p%D|0-F)er#qmQb_mpmgEw;(Ri1wrXV8K!`3x zN95ITPOXT1ti5L4u@vN>g?c`_N-QJe#bPq9vfHwWGYzk$U~TTxRRPntfTiQ5oy^t- zJy^U=q7q2-`xmjenIyT+U0Q(ypAS;<2MwrcB3<*UQ-ulX&1fta+P6#GYv8ZbG*YO` z-ypuY>!wCXCKF6ELVnyjM0@CcIyJbKXz6G7*<m~?Xhquu>7^_y_4Wr>s8jHH;R-#q z^2;EgUm>5^>AO61t-v|{z7r{gyW=}<@*xUUMn|^?z4gzh*yP?P)R`c7B7e4_^ePy1 z#dzl$@Z&V|CcCj3{?jY4`Pt@ZC{qNM2{{~HjT0AHaj|K1Z2KKV@yvT0)h5)XdFgnz z887B7EOOU2RqN=@mB02;dh9~0yIJ>*fI)z{?NQ^#uFJ6^2d43FgBbE_zwD76zn=N9 z=>c-lYuq;Kq9c}-5r#vs`tcK(${ud22O4kUi*=#=*3RJ-<L4jFN@^+O^Y-#g2(rF! zWDwY4Glzm%PV=Pc#%tKM8)EBkJz9THHoHOB!y9MuSZELuae3kiPumzc5wjWUJ$iM) zj^bg07+W`y;y&YJvYny&Q+w47Nwinah}q7#D2gWVS!ylONp7C8HBpilMB!fmx~_0P zOzd%X@@uA2Tz$d?0G^)_0e?t5*?+KjSX(Rw@*fsoj|c#e1JHob4gqo)F)lg~0v-8_ z(}$l%w1v(4vx_)NqbIvFhZq~(0<HWXrLQfERSeq$Wt9k`P^Q8Xcr9$(B4+$9D~Ux4 zE?fB#zR@E`mVWbeHUv`j+^i#KytaQ={#6P{=QqD~>wO5)PU%cKy@$h+ELwsS?DSnv zzTkYnil!J3|JW<c&a5zZA*Bn+|0dg}FvZ|Kh1Flpvrt8{=5<Y1V?ll<u~2V+kMY*= z`<&gL9P+IKk-#O5RuhS0$ABW3<ZKBowhWDrB?p20+BlE|wsPbd&EXJ0BWUD~H<W=# zWOI(-lG<(~(04`-{Zt!?VNikIw~!U)6N7#pvHg$_&B=I;7j(UJK?Q&kyd;8A;iICW z7Z?}3vOxj>E}@(+=^<yA<d5})pH$5UT%ok4QNmq$%*pl9NrjS{u0PG69}-gSgyJ>2 z*)IsRZkGeSMJZ1+aH;Zz$VBnW%gRc-);g(h6m&4&d>Qe$yX~^@5F%%aXNk)w>-T7Q z{qFAk{&rRTNK>{Bg`Xb~qg2w8gY(01u6(!LO<7R$MIj?`@Ouc2(Bv62h*JKdwp_ks zjeoMPAnu^`#r>1d{KSX-nq-|tjW|K}5_OBpctw`k_l7AaeFptM?i^Ki3LON?>#p|{ zJE>7L%GoQ^EH@>FP}XLXMIY@5)pCSdP1f4Yn?-2O;T!Dhq+y0JDNM+y-I<t4x~-dc z#1rsa<hzr4yK+c}=-Kgs;Ki0`=ovA*fqrb))!2)iQlIitJ%DoTu0#5v8)Y*ebLRs9 zWUCRL9NYE#<s}_Q1pi8&{O)K!Z@oehyJl1jU))v;HX~}2*y&~Eyb()H#ECskvcsvj zUQo-MQ-QRkGBZ4!)O7%hy;%`2WL<JN(Imx|739l>*$)}z_sDeypTRjQquJIEq=qgY zKiLA9d}>YYi$j=n_|1oJYEtl#g1q<TXmOVN6u)9KzMtlL430@7;b#(~nO~tlVj5yk zDVvt5dZ&$G#KFRj?Cz)ko7n>=_f4nlA)CY7L%lEc@}aU3f)01Gt40`a-dM#KJ4=vS znzf=1)DA&TDbV-!Q!Fmb2wEro<w)>;#{|*AFd$B;r5$$7tDG`tMF0hBQAo(7&-|Q~ zRFV_5%IVf{UU%q(pJEBoMOCLd+38MP)tpQyBF6Xn@QY8HM-F+;=$%|js{_tO{SpOO zAYQ-VZvn&Mv!SaehwNMTbE=cG&ECdsXVe{o>}?Q?Pq-CNDjTRUU$Sy3fBFoW&96&c z%JgxMzYlhZ2qIj$8ik{c8O=RX*xSe-416$1U!Uvb<%4Y+A%r<rLp+dr!RX;G`b_K3 zN#dw0G<u@^YQgQrMwytPwMy9p9~$OYY$J4V-d7O;!*<(ep^~@sef<^8<btoh2XB0+ zMJ9)|A|BPA6KUy;4J=kI5Dch{E!p=&HTQz@ag9r}34STYlsZl1%6R%G=P2Rz<uX)W ziEXP^Wm#;0W!bxxSJztSRGZu>R~zG)QO~HSS*9~u)BUJjq-OF>nNhFQXMkYF(;qcP zg^PlxY2lzFwK9?u%USV3!=V!glbxhK<53b)vOsF*9cxM=ypU|VWu?Ixo6B}$9Svn@ zbvUxJq+0^dLAgRH*M*x(lB<y|E#%J}6Wa;CE2<l5Lw!X)6|~5(?#ZRU5-r&x-JybO zcM-OhW)#`-;&jz=pVpBs#>%yi^Ji#Oz2(V3m7WW3dC^<n-5%TXW;6vXRCUv`hq?ig zB@-;d$kM}xX<_cyNU)J~Gm~uRl3uui99|pbsr)XBAQW-`e(daW@^(O2I%W;Wy;Sl2 z{i&c@p_%xAoFW0I-1*E%K<YNkC3OqRr1m?2Qugw>N%`Q(sPT#FZ-o92fNt=_B?SIK zA7x?yfB*o1{97z=@^rMYcC&Y~{Yxzv{y5^aDS+2^ihPd~dJ^5{XrOPqzRc$sb5ht* zx|f-57yCg0gWkGtuI&xgr^Fe(d75i;kwp%AA*KLs2DhEQ^?dSozfT@9*}qbdq`1`A zwHnRUb1D1E&3oBDpI^BUE~RUKur6D};ygx7hul0gQ~l8i)bwTN^n*VkV=+PlGdYfp z%XwVMGj}p*eU%ki8n(zhv)vBPMk0&n7u=JD+726c%85jKG!b^`EJWy!Q9ia|6<H%3 z!wnFnUymfK-);Aw$w|}Nu6G9}NdS>puUf@fUdCq$30F`u<sgNY`4!u}+9!+6R-yY9 z2$>9c#k>dIurFS5Eqp{ARUS5T=|YypFzuQBq#&xdjUB99+@D1xLlL|`YKTR9<O`Nr zo58nBif0_A800lZGEiPuZYE%}|LrUcq43ju0IBST#F|fadSIfqmw_v0^{^(YyxMo| zWx2KF_~q9SJhtBK6dyUE3a6oj`C={vLezpO*bSQl_p#r6e{NblIdl|6hzeglqF_Jh zZ&$ne32ZLM&+SXX8{KuF`{WXuNT`;wBV+8mwmpULo6;<OBZMk89Up}CTFmChPEv^d zjN5_91i2g0ESV2#8_o_=l1>p`(0K1Bvg4r6l+3{k*9Nad^5a;d!Q`V9Il}V>WQZKa ziKN;U$B&N;Gh?B8+sSeqMPiiIbFEb#ay407qODw8*6@G<4fG!zD$qXmO@vC!4``Yr zp$@gfID2meJ({=^?|QBdTW4_%toMzE+QPutl_dmBI{B>ca$ChZ?W00*Gom}xx6zjk z<~+W{cW#7r>=|U+VL<)rt)kWl@gTk@ELf)|OA~Z;EJVMsPhHMEm|WjOsb)j1@~`wi z^}REa9V+~ORu}=HLWTJi&+h{fR4B9y2NBwS;0D#i1jQVrNe=vy)H!Ugib41?`heaB zIv!V<dw9QiL+ms4@?$&ZGG6J6;^vPxKSAz09~@Qo$%cnFaz^#}Mi6b4-jPDAmDai| zm3m5Ux)mzY==adQ$Zlc?=Ih_;QfI*rq6jy&D+pn@^j|8`!W4K~q^J#fn=@y*S$)}4 zyom<lmm?0FLhuJ1tUkN8ZooUwYdd|-1yvdoTL_Ra4|!Me6|O2kX@Om?EWgCkXr~a7 zf!f3(Um2S8zeAqy{l7Z3fwCc`OZjG%&v}_)(`8;OAk~6`*Xn^aEBXZxIZUFyDWrS1 zg7>C5W$u&Qs##}bq&GX0aifCc>lM6Jqt%B)4O|&MeeIsTBUOBxwB8#!PhO;;_QAN= z9m3OtXXecf){zDS!E=mu(ajtf_=iE6b&%)G7sAo$F-6_XgGG<X6<QMg?#pq|yIkVI zW51=l%*a_s6Ry=jWLP-)B0j`2Kd;sj0RYHA{})#L8!Bv^ojkP7EgY=>f{LGM%8A)r zL=m@X_f&Wf=#ec&G(}!Ew4PJ4wiQ(rmZ3ThbZ-e$Aa9o>!HlHDEZ<{k88R$SUgw8V z-QuF=`TJJ{E8;(_qy3^JmSKEzWbyoPxZ||$Ur?*y!hswQd89*rHh(<t3jD5AGQO7S z2V_;XkeF)HM+PRvxna>6sGAFGl?%@9XdELX%#3|&pi6n74`Uz76i2}a^R~mw#ECLX z<HlbrDyc?zU56Al(kKB*Sqn;Z0`1bY6+h8`0`&5Zy{GJZlf$*Xh0#r_L10xO-}{D_ zHi~DP#*IA>k`J6R58lJzqPyaXtF?O>Qhwy7&lATh;;KKn{(HepIJlTR{6p`t;L%9B zw|>$dJz3=Yb`7)lwY{W~UzLlyuvFC==zjRRf4l!isJZUwq+o;MYeV3J<M6DKezTKx zwdV02E)ZAi32SJ1$G`=;&c|Sf572jElpQZ@ir(N~KoD;QcGx89S+ubVPM9(n4ZfV# zT6jr%zNpFFXEKkqSRM8aFYNhQoi?7b%<q)CS6m=R`j(~J^`~XSPrkv-&0f;!`l_Q= z9#!~*66<O9mcC#SG6{j556?S^1+4f9B9&oIo=Qc>B0btc*C_f62Snc$!PlO&iE^2o zrTNta29PK5<g6))WO)M?xwMh3T)rK~kP_vdQf|^zl#l2-KQ<H=LKq)m8OCD??MXej zF!rU*GE;yvG^75*rKd>ro-RSdwA*;yURFgB8fRJ_rnPJNRoupQ{|_F>>!@-epQCkN z&|&vz%&%bb$m&E8<FhNClk`>IOCllhCwVf<Da7Dw&cB3ij7|>Pq3AzF#T^1HmWv7q z2~SZ`+vLKFJXLt0qFvPzv45eSiUOxqrLL60V|D7yt2f=iUC;vmx)xN-c2X~C_2o&V zQZsFCxgS@#z!7J9pH836of3?%%K|e^`FzjOO0OvCMDP4HgkeF7T5l#1rr7}2$8B%* zT+@(JC>#g}H!v(vH-%183l#Wf$aZ!^b_V@MxYL7FC|)=RVDs4?<-C*R5OP~Y*8;s7 zFlFv3^DtVyLSSa%D}b97EU*>HlfVyM+@x23MNMOP<ER!!?I=Ky_(L6+Mi+e(dw=oX z@2)@9KF?@pa<Br6SxT7H%@K7J6Nefwmgd^2UG79lT-ilk>e~Fa{4iDAmRouuL@9oj z-!W&e?tuH9kT8??tymg-<+O}6Xw~GstP}~E0UtcN5XHMiOqr8F%@~`cqV%j0`K?Dr z%}eX+CZ1}=S-0K#=?^VY6OxSFpDh%w$9?mjn<`Hg(qI9}Hf+|hStdjh2Jm@h(6ZID zM%gXm@41W;U(?-73s-S|N+fA|$*CWPfq&NHf9t>hU>ELDq>9IXBG-s8VctJ0rKRFb zMuXR?cL0(6Y3Y@VD@(#yk)tbA9M9mK!fS2os7->0$9htITJzr7bxG@%@6zVxJj3^_ z`F15qEW9k&WYSMp13|Y@cj-7q9Q2mMi8)$vQTLUtxgsv!e(v2}NOjmHUP`1wQfDv2 za>>?<IN9%EroE);?7G4){4%+)Ax1k*s;mv(2bHMV^DPxlFI!&Mu-Cl^qAjM|w8($@ zSm()d7|S^Vr^{c%zFO%=+Aw;W8aDjsH_Dg_;!vF0qwKzB*wE^obHmga79vA@IslXP zSO<<Qyu6rEMJXppP@n#xGhzTdQ(GacwCdcCsWwD@Ve+wmiaOH@VRVor0Wvoq?1w2# zA=6`!c_HtpAtmk`r*4$AME%GS^M%c2@J>z<ku@iHuQ<A6!8uqWczDS~IT!h4$^w_A zQL^wU`XN{A!bGm$-Dt8E%WzSqub!LKV$%|%aAJV^HWk-=LAUo_X<8Z)Wj9`$$FAef zc-aLUaB$|dPi1kac~oGY3Nh?wPRkv=3-jFe<2;rM5XcgJXNiM!teU`7b*Vpk`HY_* zxOoDzP6!i2#pG={s9W+W|K@+-XS!I(bdFs(zLED?MFjxq@JEK?c0i6v7PZD!BOK~J zo)gF3+vu)?1P{YMiIwg$1pU1kfC%h>e>^?(zfC>p1;3_n{vT1`t(&!jJ156qcXj3e zpZ(u9)*mP9f3J3EkN`dT|JN4&FZNf@j}L7VP(TPEgtFtmfKq|*$p0>~vHop|{gWN` z3aSjEWBV^2{7)S4@(*wRmxJ~<DTW$?I1m)+pfMm31PCv*55!3R-$&y=<8k?+=z{d* z|6taCe?TD!swhY&^UtpW0O0*I{LhnxFaYq!y;FB{c5&x4cX9dapjB5!M)@lV>rVsz LnZ^jQzux`_xwhXe delta 5463 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 Z_OHJKg}CL$w}I$3_F#cPGot^h{TGXP<!=B0 diff --git a/backend/data.json b/backend/data.json index 22866e9..a5a678d 100644 --- a/backend/data.json +++ b/backend/data.json @@ -1,40 +1 @@ -{ - "medicines": [ - { - "name": "Elixirium", - "price": 5.99 - }, - { - "name": "Cureallium", - "price": 7.49 - }, - { - "name": "Healix", - "price": 4.99 - }, - { - "name": "Restorix", - "price": 12.99 - }, - { - "name": "", - "price": 15.49 - }, - { - "name": "Tonicast", - "price": null - }, - { - "name": "Allevium", - "price": 19.99 - }, - { - "name": "Synthomaxi", - "price": 14.99 - }, - { - "name": "Magicure", - "price": 200.0 - } - ] -} \ No newline at end of file +{"medicines": [{"name": "Elixirium", "price": 5.99}, {"name": "Cureallium", "price": 7.49}, {"name": "Healix", "price": 4.99}, {"name": "Restorix", "price": 12.99}, {"name": "", "price": 15.49}, {"name": "Tonicast", "price": null}, {"name": "Allevium", "price": 19.99}, {"name": "Synthomaxi", "price": 14.99}, {"name": "Magicure", "price": 200.0}, {"name": "Paracetamol", "price": 2.0}, {"name": "Ibuprofen", "price": 3.99}, {"name": "Asprin", "price": 4.99}]} \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html index 22a13be..c8e84be 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -14,6 +14,25 @@ <h1>Medicine Tracker</h1> </header> <main> + <table> + <thead> + <tr> + <th>Name</th> + <th>Price</th> + </tr> + </thead> + <tbody id="medicine-body"> + + </tbody> + </table> + <form id="medicine-entry-form"> + <label for="medicine-name">Medicine Name:</label> + <input type="text" id = "medicine-name" name = "name" required /> + <label for="medicine-price">Medicine Price (USD):</label> + <input type="number" id = "medicine-price" name = "price" min = "0" step = 0.01 required /> + <button type="submit">Confirm Add Medicine</button> + </form> + <p id="feedback" style="display: none;"></p> </main> <script src="script.js"></script> diff --git a/frontend/script.js b/frontend/script.js index e69de29..79ab2a2 100644 --- a/frontend/script.js +++ b/frontend/script.js @@ -0,0 +1,62 @@ +async function fetchData() { + try{ + const response = await fetch("http://localhost:8000/medicines"); + if(!response.ok) { + throw new Error("Failed to fetch data") + } + const data = await response.json(); + displayData(data.medicines); + } catch (error){ + console.error("Error fetching data:", error); + + } + + function displayData(data) { + const tblBody = document.getElementById("medicine-body"); + tblBody.innerHTML = ""; + data.forEach((medicine) => { + const row = document.createElement("tr"); + const name = document.createElement("td"); + name.textContent = medicine.name || "N/A"; + row.appendChild(name); + const price = document.createElement("td"); + price.textContent = medicine.price !== null ? `$${medicine.price.toFixed(2)}` : "N/A"; + row.appendChild(price) + tblBody.appendChild(row); + + }); + } + +} + +fetchData(); + +document.getElementById("medicine-entry-form").addEventListener("submit", async (event) => { + event.preventDefault(); + + const form = new FormData(event.target); + const feedback = document.getElementById("feedback"); + + + try { + const response = await fetch("http://localhost:8000/create", { + method: "POST", + body: form, + }) + if (!response.ok) { + throw new Error(`Could not add medicine: ${response.statusText}` ) + } + + event.target.reset(); + feedback.textContent = "Success! Refresh the page"; + feedback.style.color = "green"; + + }catch (error) { + console.error("Error", error); + showFeedback("Error!", "error"); + } + + feedback.style.display = "block"; + +}); + diff --git a/frontend/style.css b/frontend/style.css index aba6d5b..5a8c32e 100644 --- a/frontend/style.css +++ b/frontend/style.css @@ -29,4 +29,66 @@ body { height: 30px; } -/* ---- Your custom styles below ---- */ \ No newline at end of file +/* ---- Your custom styles below ---- */ +h1{ + text-align: center; + color:blue +} + +table { + width: 100%; + border-collapse: collapse; +} + +th { + border: 1px solid #ddd; + padding: 8px; + text-align: left; + background-color: #ddd; + font-weight: bold; +} + +td { + border: 1px solid #ddd; + padding: 8px; + text-align: left; + +} + +form { + max-width: 400px; + margin: 20px auto; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + background: #f9f9f9; +} + +label { + display: block; + margin: 10px 0 5px; + } + + input { + width: 100%; + padding: 8px; + margin-bottom: 10px; + border: 1px solid #ccc; + border-radius: 3px; + } + + button { + background: #007bff; + color: white; + border: none; + padding: 10px 15px; + border-radius: 3px; + cursor: pointer; + } + + + + #feedback { + margin-top: 10px; + font-weight: bold; + } diff --git a/~$CUMENTATION.docx b/~$CUMENTATION.docx new file mode 100644 index 0000000000000000000000000000000000000000..71e0a4a5c88b9740472e6d94019c79b2a49b9469 GIT binary patch literal 162 zcmd-s$;i)5ELKR%EU9838gMg|Fk~>~GvqQPG88i?Fr+bL0!2Uue3#e(Bx@=l^c)9N tBblIFnE3XeS2kGK-ezoCd(LutDg%S-ovW3r>~1qMFgAcynoT*o4**z!9pwN3 literal 0 HcmV?d00001 -- GitLab