From c26498a8346cb87e3afeb3c20ebe0578de278dce Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 19:59:14 +0530 Subject: [PATCH 001/109] Create a template for project --- Source-Code/GithubProfileFinder/index.html | 11 +++++++++++ Source-Code/GithubProfileFinder/script.js | 0 Source-Code/GithubProfileFinder/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/GithubProfileFinder/index.html create mode 100644 Source-Code/GithubProfileFinder/script.js create mode 100644 Source-Code/GithubProfileFinder/style.css diff --git a/Source-Code/GithubProfileFinder/index.html b/Source-Code/GithubProfileFinder/index.html new file mode 100644 index 0000000..268cd5f --- /dev/null +++ b/Source-Code/GithubProfileFinder/index.html @@ -0,0 +1,11 @@ + + + + + + Github Profile Finder + + + + + \ No newline at end of file diff --git a/Source-Code/GithubProfileFinder/script.js b/Source-Code/GithubProfileFinder/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/GithubProfileFinder/style.css b/Source-Code/GithubProfileFinder/style.css new file mode 100644 index 0000000..e69de29 From 61e4bf13dd96a45acfc7bc4287e2c2ad531e0a2c Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 20:22:15 +0530 Subject: [PATCH 002/109] Add a assets --- .../GithubProfileFinder/assets/github-logo.png | Bin 0 -> 67629 bytes .../GithubProfileFinder/assets/github.avif | Bin 0 -> 10139 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Source-Code/GithubProfileFinder/assets/github-logo.png create mode 100644 Source-Code/GithubProfileFinder/assets/github.avif diff --git a/Source-Code/GithubProfileFinder/assets/github-logo.png b/Source-Code/GithubProfileFinder/assets/github-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e927dc126ae5f02be20070e85aec867eb232a815 GIT binary patch literal 67629 zcmX_o2RK*%`~KTUr6C%U%4i}IQpwh$5{gg>*()o1D@7q%sLYZiA!N^zT~BL@9*Drol6(z{XXZsUeCCn`?;TU|AK<-`nB8FQYe)5XV08cqEKk5IOzQ8%I1n)Lsee%oJf zHX!;f%;cS{kV*6(gEz)hpX+-&{^O#(_+{mq4J(*7-Ys-GwegDH+=5k#n6<_C3`&GG zLt<~&sH>jjo1SjkO>Hj1PyGEEXebnV<>SYXpK^B2?yPKUo5?cQ(HW~)l6iUIBi)J> zp#zJe6iW5BuX=P8%JuVW*RI`t_3G6F7HxTE4b9CrnsC(p`eoFFV|-l8Eab%t>U^k* zvhou%9QgS?%)NMa@=ue&w{PEq;^X6c`1tsG@YCSWpFeN#)92?;)$z$myVItoaj&AH z3P0xNYBX=7;;*mbz_CY3*HsBS&x%=Fg3dS1(__d`~miY0ZuuA$IEO zO-|0vbE4#@m{@j}r0ZpYc!G5?^6epPe{Q1+C9C(g*jP&$+L$s6; zUKT3FgFWWM2Z8yY@#+jxj26)fG0OEnfAW}`ng$*@awMTXLBl%7?#~NlGc&V@9m3|% z+OllrnsXeL4+{(XMpRku7#jIWXTK^xIy(A8O3LP=M~{B4tW0S6^y%f#PoFxnJUu-t z8yYfeaeS_+Nvg$>tQa9#XJ=<8YHB(tx=NA~8Ka#+OYtj@mJ2?yea8;7fq{W*CZ?t; zxca;D@^ZH=TeeVDR8;V5lkQa0`q^vQcHfc{5)_&HS|w!S$p@yv**vT zBs*$i6gfKD+p9bK`W!T3FR4!bX-dBotrW-;crHFACFLi%kJi?_#^T~Pl_e!ya&}@A zO4!{F28zJ3yLaz)*xK4E;Hj1CfBbmM%flm{dNtnu%9ZENj*gjG_@`)Q7XLOrehW-A zzjFHbj{ryiwD{0u<+Q#=arCS)c<+&!ltsBsZR*JQ~d6OqKJ-vQr zZqBgOd=;f#Q=plK;?!RoE%!;-qSXcl+^?>pQkVGt{nxmUAAh8O{PR98ZK1EDA=GO@!$U&{u4!n5%uW7@`#Um{(MhFh4&ivM6q~>uSgs@{CdOtsKtq|m zhbMYCfD7zOO-;p0p0kKo9dw0-xACeaOl#)3G^oebO~$@`yCL1YMJF^$?%9hMYq5MC z0|PvlcvQlIgVmB^VhnNgt`rtd-yL|)HX2*EWnpfr>S@bbN?#^19`lPzN}FsJW^L== zz2m8>tyOA!{P=M}MKJ#y^Oh|$K|w){YAP!C-@M_Z9`V)`5ER^qUwtkrI-QZ7T|YNH zeQk1VjAvqOtlZw-p8uw;ZEkb6{qS0T{zUPHcnYPf#FCC;leKQ^!8-#sqElmIH-|er zJ0sq*EOe-dm6M64M3<^ z#e`VE#Kd&xcW*CU(9@@vRn*jc5y2Ynd$bA&32m;dto&S25hu8F=gzjOD*mdrHmUF5 zzYA%_UJ4r9DNZS9(Sbj>1**pVMd(w}$h@iFj{BqQ?d|m@->8w}P!pSza}5?!s<49I z|M~Oh7h*4cuBsZI^`N1>`5!H9%Iwszdu3tao+>=^U{8f8_j)C=A$KYT{H}0x5cZ^akB-l(7>CJuM06jk+-}(dG+^fHp zmEA8bFJGH$*>O8wA*O51um`&k3W57DjPZevp5L1QQ` zEuQd<$YTCvC-4Gj%ZhYlT* z2^X_hP|?(^j2@O|G| z0akpzTK8)F&-7QXKF`h1jPE%lBvkSyCMKY~tSl)$F78R#ssibTrY7I^_V(F(_wG&L zD}K<>u6i9;H?X_1nAT$v*60zQY16M{X=P<~MpgCaFCoK9KMB`an+sM}Nk*ooJb=HHRp*y!d>6Ol zte6M2r@ejWiIXR7qhubOTeE(>{Cax&^NefPo(pbSNs(Z~uIzpL{{6%Oe*WPItU}M% z=R#fZ8d*a_L-nIaj+80T65B?8)Pa5Q?UD6AzeCiZO^)20oSQ78lxkZzV0GD|)%%#}=+o>HPKWV8=k1s&Hfs>F1P#7Eo3DwIHT_&z z=zjeRt#q$$2CXz#HEalu`f1y?ZI4O_V?XzlbZvOHsNq1c4!FJot8`t@-Mo3T6aYuxkj6vP(%O3SX3q1+giU_DEj;PX zu|-wLy86uEeXi_jpgxw5K~bI^I9~gfncrgp-Yq zgF}W)ysDO^o!!rJ>VK4z2!I~hmK~q(66YV~QV4w({`BeLeOz3!BXeAo<{g_iZ{Enn zw3kyc{QWkOn|hsaKL2Tw2k~K7M0gMPj)A&3H^d=b>}br=NFk%LLb$kbTW#%bv2_%` z+lX+m%(nr4e&UB+rboWOR4*wiR=G52P$C1cs3VL#yu2-P=gyr_2opWBPejDgOD1YG z7szYq07bxLa&l4!n^c4cKZEZ%GXdvNioMj#$VidGa(Qfcg{Z%K&z?PpjvTR-QBtbq zrmE9XL~?R-i+-0q`Cjs1NAL!A_HY&!7Kd|on<=HpAJw|XsaM+&SptsP4gGrm`t|E= z{r&xEz(~m{6v~O!z@V_4?J@EpY3?us@7uR;E44H?Pbctru;1@sh%6~9E8FHg_PcD` z{{8!fHf`SQ8Tam;9v2P8%~L6s>CvM{j=0%-9Fi{6pWx0hrRM*6P`}`^d!7ab&4!8D zn-3-FmKd@win#Gf=%cF;3m(fQSjxBw^o1Z*+VpvjAqF7Z`6&$vLQhgFv(LvC-&nPi*;o6xq_q@CtXar6nI} ziM|@gHEY(abDJNP)mK*!8QM$npn(x>=_(1R|MpC9j{z|1oEIL0J9`afk2|}WESBf>wttfH8Vd)L}5cpzI~Jb8YU*JU;Fy3ApBYah_KRigfg+V zkj94!@uRVtL1k#B;n!z^b1?B*ePNou z27K^!S!E@A#N)@wI}aYDCjI`c7ehe$Sqf$T#LEl!yxE=3OqK2lI3+bveNqs%A*+Ya zJ;&#=TAm9TzF`%)xpyFYI8Xg)c({4RbvjC)5D6h0H`W}pr#4Fv&$tgae%P`i(hyOr zk6AQKLFK{)fkXTE_ty|~+O=ksLOE&Odv?OQx3XmiVkaAXx4En=R>^MbGN`PMHZd{z z(OVV4@wbps>QvE}F9%A$eG7!86wt0)yLQt$<^%VhA2wDxf8oM~cc>Xu;rCrdaKL@< z;^OKMsk+>!JG@uIjmF2u$Mxa3)&27e3q`kAuIof3i9*?<{Pf&DT6XCeM3}xy_N$zA zbUJmNr>J4Jqn)S8QrL)SX=x=PY)Se7zyXeui77I zDNeg_?nZz%VaKuGeF%R{2Vc@vZ^MeQpOKe;Aj;2g@l+a4+0cZIrG{Yw78kE?&GSsQl)9!^RC8EN{nD z(`InsW~PRaWt9<~BJSP4?+D7G^IokL;kp zz$1d>)}K9l#-)fLzK?w3BzCVx+g5IQFWAy+qA-+^B=uI^-JcD5F5OgbN~H~%U*xmE(m%Ly(kgxZcnMN5kx7xZ8+ zM065gobKv}V=i(6OCCq5S#JJcBnQ^}4ytKDU4IG7_5$*;h>Iv!mOoYjj}@Q!{bUWJ z)ci==Em}Ix@wFlpdizN4x&D|4PIhsJk$#PAJHE=YvPWUG6pGtX%XaC}>8=2aFjV+y z)zuds46#$j1e$NLFV}cy&z@C0B`eD>ar5`RC-@6xWRUaxvq<%iMm54@n~G_NJi@UA z69NE(VtjmNnm29?)#f@+twME35&>n&3q|PV3`_0S=1l8+#J#VQsaG}jX0MT+f|p60 zB8Da==KOhaVJ_IbCCgR^g)p%+%K)b-DqpzMK2&Xzs2cGk zpzdB&lTTq?6zN_cKfm|>K0b|1+qPxaRaEdQ+A(@00DJgdP*Dk-1Bx?ro%@rX-;`#i z?f{;M+*Pt`tE(%b1u0X!wS<8p zUDeUk!x?l?Bg^9F`zt%V*YB{qfXh@C;xeZIe@8kBy(1bjt$VGpR+HquJXm#0{NtTF z?{ocBe11qjEMY2drG4n}YY>Z}N^ zqFse-%kqH)_2QBesky)PTCy6sPAX)Ls)fwW%{v1_?tl1rbhv`vb3-B3g<^+hMEDQ!Q1&RqkC>s@rkgxHE2?{vM1_-@rhjCEcPe z1r!cz69HCm7M9g0l18)J77m&%&d&^Cd8PHG) zJP)CI^JV5M5AgB1Dh!;<0zxFPWktId%){vbn7NxviwjjC$0XmOt|gBya3~=mL8l>E zUl1#!$+3NVdEp>M0s(m9g1&xqj7-#(9M`$YUPd<2*Fi1t4!@=!vC6y=E@Nd?h&nkc zU|}A$(6&ba^hi7j50~UUc+eaR>3TGZRJgc6-!9a+MI4JG-kw;&1(V;UkF2nr^Ne0% zkzAb-&GI0CX zuV1~Ojl_~tQ+8qDo+2)|YnOII5TE*@<@~gj zIxGebX!PaY#s_ji2WDJ=R0faDF_dEa_GVfKEu>UQhWsKS4#BitZ9mi6(a-DnUmv)Z zVcC*l)iqg4rE%KrC06~72YeL_TC4p4I4yy_sHNVK8n|9!taMLAc2?HdZ^y_Tg3Y(g zfg_I^f}g5#pQw>lK30Jxp?`4V<%XqEj-{8+rQ8>@P>T#dX`!89LQL9mNlh(|kzIUx z2zRV0`hOwDgHBNU^NNtIEi;s27S)B2@9}87_D>2YE5JnvJ@2`xXBJqe78+EWQ+umX{VreEqjQQZTX=7>W zg8dB=9!YTdFreO86bXMzL3e5a-`PJTvC@Oev}H?RzQbrIqc z*IyH5Y?ks8vy1@9*fR-2cWiDrf9bNTYc6?EO0J%n8K0)}pHvMb`gt308U0wylPDCZ zCsD=-g&Z}zT1nf7GpUtP0g^A$^~xSIzB&JV>;bt8qz>l`K%^4yu7CKSUD}tRFk^Uw6vqkYqE;45IK{L zrdDwD*#mp`{=PTFUa$eza6d_wJX~DF5Ide&{N>AZ85QdyunN@^|J5v;emWACyFS?# zSRfqazeJ+7hGFu@tEW@zLPJ@Xzg|WkB}nJpt(wygh*TW01Qk0|ToDi!?~X^TztGwPV(7NvqsJaK94+X|5D_;cjc}KP5cSCmq0|K7jSsk@LBK_O%d*k zGmHjR;R~6*zUvgj=-gn#ZmO3rv*el9Cv?ZD#`^$bJ|?NVde7g1I=T6oD)-j$zNi2< z7GSJ%c8rmX2n8ED`)Z;ts;Aw!l4tz=jb#HLHfw`U+2eiN6r~m>=uk+s?a5yG@Ii+^ zyFAtr*)Y7}gLdH<2##aR>sYY#OhEfKbt->pf$j;H;-Z&Y@k=h$-zFAQ`N%Y^wMrJ?HTbOK0-r->$U1P+ImFVTI2mABF;u=|>d~}Q+1qJok zFUc^0bj)vGW5z*$=36B6ut^Xw;>uJJHN z1p_^s6nd@aZFTGoD=}})*-xS-h4F1(o+g0iO9UWEWEVA!Yu6G`SZ8f2WRv+rb^-gQ zk!1I$(WU(R8;iKXjjRCMN8I}p1!`zgWcVMKs9|lzeo)Mt~1@i?lu4C zzkS=))6Lh{n50J3fm(L$d+BXw)h6b*G11erCN?2KwWO#h_oKnL7xm!4me)6O$BGpz z?veHN1gda*e~BkG+1aD=OZ1ok4+tfOMx>w+i=5G7-|p`2WNSP}wY-gJ*ck-{c90G6 zHum=Us0S|W!)+a)w`Y0q{{8#W9Y=3W&-rZO?E$S+L4vNdaJK7Q8a~5-f@Ku#2|jBa zLD-O0USfVH&Ye5=qcPQVDbHsrwXwN3F<}!y9;f4_tpKxlD8s5@6lKm< zfPNMzBroqHu0xsC2H@HSI1+)fnTLSq%pvyn;{wgvA8?;MB+GeoxJ|37ss^0^=BH35 zw+Bg<<-@WW>FCx5D2k}qz6n$t`Uo%uooq| z%P<0uql3fmriKQM;FcB5yk27Tm85ZW)S`8MGQ=V;^CLP#%hoY*4Pg>R8pm#A`WE2w zwQzTlaR$%NmfpuneVUKQ&Cf;92tdEBjI5K#Eh7tytzbOX1F?*%#ntWO34C|TZnI@N z3sryx9G`XGbf<5=JGNX`FC8~lAP^?*SeqRiyZ=j3QFJZ1G%Y(uOJSV78nIn-wu~!c z-j!H&vO3Pb{>u%yI1hcTsM(2r>k2UT@3B^G9kFB8rl?^9Lqq3(aRJ0An3%lFC3%U$ z;*EONSu@+t>@VWs5ZC!`l@@S8&7a-DGkfD`g$BtbB$3VTFanb^Pl2fQ4 zJ6ZyH)hhe@`W}*q>B0UcD(WOFDALl;pFcMh7IxiENwI!D#3{YnOKjp4DJX0Qe=hv# z3Xlpvuxy4B>WBpq8$N4+n6z3pZd!rnT`i>AeXo%{ISij**|mJ;h7NwXOf+(Qv{oL)q$&;{uLA9mZj5M8Ahv5c9=pc#<<}JJA^-ng@q+LIy;ZM>6|Ha zZr&x2f?g=Xb+RG5&3!31dx#k)x7U9`emipXXo88caZ;$L?Eq(k1YtHFb{5>Ct&p7U zi?Tnm{ehC*I-ESBzG>5@=8%vOHB?~FQ3Vzb>Q6-icSJRzMUy){TEdYZ^7wJB?DE-` z!iTp%NY2chSwI;XQuTb@3yBN=rv(t|wZ>(xuu%I{;oymGBcJHprECYDM*q7h&DU?< zG$Ixxn&YMr^*grXY!QcJY*}{!x&E}}FBNU!Redk&Joz5JOCH1RX<*=UG@E6BIkHs% zbdgru5WvxolMVik@C_>HfO?WnQCn4*nBhMsb=ZI)zzJ&P$t9jTd3*aQmtwK3?S*U_ z=a9GZ=BU}hi<9a33#lJITv)cH>ix)%WGh!}-5T74Oi`hq6U8goT%%9o1}A4vojn40 z6^i`ju;-y*izcHL94F~qbnTa>CNbYp|Af!DpK9C>g2vL!H{mvy)Z}EPe_y|EU~urX zlhZ7Bw32bp;NaZmE;fx@9sUY22;A9re`YJRmS*dhGSJ#y#!``T*ft;J+W@pVl19+z z)60p1Rn){%{U+VQo z=W@Dw_zFz|cz_K{7hBl<4u3kk-m&TY`ELHD;h%iwy(Fqv*%{^l(_ft&Zd*DqmD6=x zuz6H^aWs4~M0mzvH}-Mo7x#cEFsZ8p&lS-Qjufy^Gb|8iQc+h+<-@U;E~=?wX@d$6;VBC@fF0 zm`OLg%k4o@xpQT&^tvlV%`hcSkZ=usQ*-l#`^!F1umSn_p6^zE1jVK4_RP1Ov3r+wPjzsUW&VyM_MfA4J;qLb?a7)-jwtbR@Z_JJa@y3Bc`ga zqoW(j&B=QB9fvsJxoR9+lv1q80@{c;H~)DVgNK_KdKI++aQc>~PoGLIrvQrX;}Z(dGD_9TY zn>Ui^re~sot)J{1DaAsaK21mwoYzV!H?HN1hvM`K0d^`SEzNEUZgkVq^6g{XNP(sI zh7+qHK_DE*l390op!ISNrARa&O3#Bs`m+hZ_$SmOs&q_| zF?F3FzIe^t*|6k8?3clyQ2L^hlMf|1{T;A>{NxG8la~J+GcM(Mi=wWrMb9l!)OGgb zzbH&ux(b?#o1dSf4zBhNB${D4_4t%-#*{Px7Ls5PRlwmL{AVWf&cMM*IgaB7Mt~^? zodJ0&aQ2}mY#!9WurLWXG+iu)+Vb0!mkrhaUXZSD%5!xd0rAnA;WBgcA)a2+EBg^a^8}5GB)XDII|V69&g{L33L+7>Do#H= z(i#s#C=HU!Kk5|u6p`i`0q_)?D0D-RJbj8t>=}J=tn0I-@a|>Px{}h93T;@!esbR4 zw~2{cO@F?3PZ3U{-LAikIX zEU+(tPd)99d0XBBQtBbC20jM?dVAV8*mKm{70|;;oLn|N%0ddPe;fIw;?8$PRmSzORxj)tB?%qInwI?mN=SnPvFKmBcFuGOCW%TOl(|3oM$Rj(E z;_f}F?IRClQZC!AqcRq@P;hth^Rt7AT5@u7DS^u-DZRud<<>kon3(T|XlI%;#M~@~ zhrSNIn2Y_;uh9q;z6_6-Pc5(a}R4Ekr~4 zxW%)rc$>Wh^ithM{2qTbmB)ne73EYyrVJ)wC-^iFLV1Bo{@Du4OGvSj;5BLtY@#18*{xeV;*}j< zPRb#Wyxl+sNB*}O4kRDCfU~JcNlq@VF#nX;)nViGme4a*;S&6)DCqtr!0Yn}u(Y_B zrR2CcQ=qdf#GWNTA*z!Mf-8C~OT_uB9xX3&WUs?;?o`j0;^M`N_$w9&wankIVDEcf zP*(A$r=^uE5ErfXBq~T^=-r?-Zf?3*CD8nrs86O*g5Nym&*l5L~ta5z3Glo zj7USsEF{7n2sS??CvQUCiwfohk=B80*Tx^fDx8v&^M!6^GeY63*x0j&j~uy=CK6m| z7yhWXvSShNk5<}`M&%$eoli|o*&mQ6)j~rZD>&oluM*YDK%#mu}6g|{`D$R4YaA8w8Do2-%x6Z5^wx{qOb~=B91{~;7p>ILH!yG&02t~E9^TNfunIO-)^~q~hD;!I z8(h9Jw6#VC29p)_)8LS58XHX-aJ2sTq1RMhecc)rfIfN**{X4W)RdGuojX3SYy+tC zA&EQx8p|^@%vP>v5oqt;s_D=XprD`-nC$Gtvw2bAV3j|cSnKoxQq{ryTb-IBA|m$@ zuz!C;Sy~JkqMq$!ett&Av1y`$1(T%)^1&e(S__C6R|Y

Y$ZnQ#KBjN+;-AKSyv+ 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 literal 0 HcmV?d00001 diff --git a/Source-Code/GithubProfileFinder/assets/github.avif b/Source-Code/GithubProfileFinder/assets/github.avif new file mode 100644 index 0000000000000000000000000000000000000000..a8958f3a45dae7b7b15d2bef0fbd935350e1084d GIT binary patch literal 10139 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 Date: Mon, 29 Jul 2024 20:22:36 +0530 Subject: [PATCH 003/109] add input and used semantic tags --- Source-Code/GithubProfileFinder/index.html | 60 +++++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/Source-Code/GithubProfileFinder/index.html b/Source-Code/GithubProfileFinder/index.html index 268cd5f..36c0c4c 100644 --- a/Source-Code/GithubProfileFinder/index.html +++ b/Source-Code/GithubProfileFinder/index.html @@ -1,11 +1,55 @@ - - - + + + Github Profile Finder - - - - - \ No newline at end of file + + + + + + + + +

+
+ + +
+ +
+
+ avatar + Tajul Afreen + @tajulafreen +
+
+

A full stack developer

+

58 Repositories

+
+ +
+
+ + + + From 431374613cebd5a7874c02580e5f49bc1f64c130 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 20:22:48 +0530 Subject: [PATCH 004/109] add styles --- Source-Code/GithubProfileFinder/style.css | 150 ++++++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/Source-Code/GithubProfileFinder/style.css b/Source-Code/GithubProfileFinder/style.css index e69de29..6f5aa3f 100644 --- a/Source-Code/GithubProfileFinder/style.css +++ b/Source-Code/GithubProfileFinder/style.css @@ -0,0 +1,150 @@ +*{ + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body{ + background: url(./assets/github.avif); + background-repeat: no-repeat; + background-size: cover; + background-position: center; + background-blend-mode: darken; +} +.container{ + width: 100%; +} + +.search-container{ + position: relative; + width: 550px; + height: 50px; + background-color: #fff; + border-radius: 15px; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + margin: 0 auto; + margin-top: 50px; + box-shadow: 0 3px 10px gray; +} + +#input{ + width: 100%; + height: 100%; + background-color: #fff; + border: none; + outline: none; + padding: 5px 160px 5px 15px; + box-sizing: border-box; +} + +#search{ + width: 160px; + height: 100%; + position: absolute; + top: 0; + right: 0; + display: flex; + justify-content: center; + align-items: center; + background-color: #000; + color : white; + cursor: pointer; + text-transform: uppercase; +} + +.profile-card{ + padding: auto; + width: 500px; + background-color: rgba(255,255,255,0.6); + margin: 0 auto; + margin-top: 30px; + border-radius: 15px; + overflow: hidden; + margin-bottom: 15px; + box-shadow: 0 3px 10px gray; + font-family: 'Lobster Two', cursive; +} + + +.main-info{ + display: flex; + flex-direction: column; + align-items: center; + border-bottom: 1px solid gray; +} + +#prof-img{ + height: 70px; + width: auto; + border-radius: 50%; + margin: 10px 0; + box-shadow: 0 3px 10px rgb(96, 93, 93); +} + +.name{ + margin-top: 15px; + font-size: 25px; +} + +#username{ + font-size: 20px; + text-decoration: none; + margin-top: 5px; + margin-bottom: 8px; +} + +a{ + text-decoration: none; +} + +.bio{ + width: 100%; + text-align: center; + padding: 20px 0; + font-size: 23px; +} + +#bio{ + font-weight: bold; + color: rgb(28, 99, 109); +} + +p{ + margin-top: 12px; +} + +.follow{ + width: 100%; + display: flex; + height: 60px; + border-top: 1px solid grey ; + font-size: 20px; +} + +.follow div{ + width: 50%; + text-align: center; + padding-top: 15px; +} + +.followers{ + border-right: 1px solid grey; +} + +@media screen and (max-width: 600px){ + .profile-card{ + width: 450px; + margin: 0 45px; + margin-top: 30px; + border-radius: 15px; + overflow: hidden; + margin-bottom: 15px; + box-shadow: 0 3px 10px gray; + font-family: 'Lobster Two', cursive; + } +} + From a375e570f0bd6d510852c6f90b482121db8ba371 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 20:23:29 +0530 Subject: [PATCH 005/109] add functionality --- Source-Code/GithubProfileFinder/script.js | 49 +++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Source-Code/GithubProfileFinder/script.js b/Source-Code/GithubProfileFinder/script.js index e69de29..8525543 100644 --- a/Source-Code/GithubProfileFinder/script.js +++ b/Source-Code/GithubProfileFinder/script.js @@ -0,0 +1,49 @@ +// API USED => https://api.github.com/user/user_name + +let input_user = document.querySelector("#input"); + +const userImg = document.querySelector(".main-info"); +// const name = document.querySelector("#name"); +// const userName =document.querySelector("#username"); +const bio = document.querySelector("#bio"); +const repos = document.querySelector("#repo"); +const followers = document.querySelector("#followers"); +const following = document.querySelector("#following"); + +const fetchUser = (user_name) => { + fetch(`https://api.github.com/users/${user_name}`) + .then((data) => data.json()) + .then((jsonData) => { + if (jsonData.message == "Not found") { + alert("User Not Found"); + return; + // console.log("Error" + jsonData.message); + } else { + userImg.innerHTML = ` + avatar + ${jsonData.name} + @${jsonData.login} + `; + bio.innerHTML = jsonData.bio; + repos.innerHTML = jsonData.public_repos; + followers.innerHTML = jsonData.followers; + following.innerHTML = jsonData.following; + } + }) + .catch((err) => { + console.log("Catch" + err.message); + }); +}; + +const getUser = () => { + let user_name = input_user.value.trim(); + // trim will replace before and after spaces + + if (user_name.length == 0) { + alert("Please enter a valid github username"); + } else { + fetchUser(user_name); + } + + input_user.value = " "; +}; From 42f9f101381895d19e3e635ecb6df3f92c3acd56 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 20:58:48 +0530 Subject: [PATCH 006/109] update the code --- Source-Code/GithubProfileFinder/index.html | 2 +- Source-Code/GithubProfileFinder/script.js | 32 ++++++++++------------ Source-Code/GithubProfileFinder/style.css | 32 +++++++--------------- 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/Source-Code/GithubProfileFinder/index.html b/Source-Code/GithubProfileFinder/index.html index 36c0c4c..4dfe7ab 100644 --- a/Source-Code/GithubProfileFinder/index.html +++ b/Source-Code/GithubProfileFinder/index.html @@ -24,7 +24,7 @@ placeholder="Enter Github UserName" class="" /> - +
diff --git a/Source-Code/GithubProfileFinder/script.js b/Source-Code/GithubProfileFinder/script.js index 8525543..ee44149 100644 --- a/Source-Code/GithubProfileFinder/script.js +++ b/Source-Code/GithubProfileFinder/script.js @@ -1,49 +1,47 @@ -// API USED => https://api.github.com/user/user_name - -let input_user = document.querySelector("#input"); +const inputUser = document.querySelector("#input"); const userImg = document.querySelector(".main-info"); -// const name = document.querySelector("#name"); -// const userName =document.querySelector("#username"); +const search = document.getElementById("search"); const bio = document.querySelector("#bio"); const repos = document.querySelector("#repo"); const followers = document.querySelector("#followers"); const following = document.querySelector("#following"); -const fetchUser = (user_name) => { - fetch(`https://api.github.com/users/${user_name}`) +const fetchUser = (username) => { + fetch(`https://api.github.com/users/${username}`) .then((data) => data.json()) .then((jsonData) => { - if (jsonData.message == "Not found") { + if (jsonData.message === "Not Found") { alert("User Not Found"); return; - // console.log("Error" + jsonData.message); } else { userImg.innerHTML = ` avatar ${jsonData.name} @${jsonData.login} `; - bio.innerHTML = jsonData.bio; + bio.innerHTML = jsonData.bio ? jsonData.bio : "No bio available."; repos.innerHTML = jsonData.public_repos; followers.innerHTML = jsonData.followers; following.innerHTML = jsonData.following; } }) .catch((err) => { - console.log("Catch" + err.message); + console.log("Catch: " + err.message); }); }; const getUser = () => { - let user_name = input_user.value.trim(); - // trim will replace before and after spaces + let username = inputUser.value.trim(); - if (user_name.length == 0) { - alert("Please enter a valid github username"); + if (username.length === 0) { + alert("Please enter a valid GitHub username"); } else { - fetchUser(user_name); + fetchUser(username); } - input_user.value = " "; + inputUser.value = ""; }; + +// Attach event listener to the search button +search.addEventListener("click", getUser); diff --git a/Source-Code/GithubProfileFinder/style.css b/Source-Code/GithubProfileFinder/style.css index 6f5aa3f..83223c4 100644 --- a/Source-Code/GithubProfileFinder/style.css +++ b/Source-Code/GithubProfileFinder/style.css @@ -11,28 +11,22 @@ body{ background-position: center; background-blend-mode: darken; } -.container{ - width: 100%; -} + .search-container{ - position: relative; + width: 550px; height: 50px; background-color: #fff; - border-radius: 15px; - overflow: hidden; display: flex; - justify-content: center; - align-items: center; - flex-direction: column; + justify-content: space-evenly; margin: 0 auto; - margin-top: 50px; + margin-top: 50px; box-shadow: 0 3px 10px gray; } #input{ - width: 100%; + width: 70%; height: 100%; background-color: #fff; border: none; @@ -42,14 +36,9 @@ body{ } #search{ - width: 160px; + height: 100%; - position: absolute; - top: 0; - right: 0; - display: flex; - justify-content: center; - align-items: center; + width: 30%; background-color: #000; color : white; cursor: pointer; @@ -60,8 +49,7 @@ body{ padding: auto; width: 500px; background-color: rgba(255,255,255,0.6); - margin: 0 auto; - margin-top: 30px; + margin: 25px auto; border-radius: 15px; overflow: hidden; margin-bottom: 15px; @@ -104,7 +92,7 @@ a{ .bio{ width: 100%; text-align: center; - padding: 20px 0; + padding: 20px 10px; font-size: 23px; } @@ -144,7 +132,7 @@ p{ overflow: hidden; margin-bottom: 15px; box-shadow: 0 3px 10px gray; - font-family: 'Lobster Two', cursive; + font-family: 'Lobster Two'; } } From bc25b3df25ad7fae0b60fff797d39c5d3667c49d Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:03:00 +0530 Subject: [PATCH 007/109] solve linter issues --- Source-Code/GithubProfileFinder/script.js | 31 ++-- Source-Code/GithubProfileFinder/style.css | 203 +++++++++++----------- 2 files changed, 113 insertions(+), 121 deletions(-) diff --git a/Source-Code/GithubProfileFinder/script.js b/Source-Code/GithubProfileFinder/script.js index ee44149..0468f0b 100644 --- a/Source-Code/GithubProfileFinder/script.js +++ b/Source-Code/GithubProfileFinder/script.js @@ -1,47 +1,46 @@ -const inputUser = document.querySelector("#input"); +const inputUser = document.querySelector('#input'); -const userImg = document.querySelector(".main-info"); -const search = document.getElementById("search"); -const bio = document.querySelector("#bio"); -const repos = document.querySelector("#repo"); -const followers = document.querySelector("#followers"); -const following = document.querySelector("#following"); +const userImg = document.querySelector('.main-info'); +const search = document.getElementById('search'); +const bio = document.querySelector('#bio'); +const repos = document.querySelector('#repo'); +const followers = document.querySelector('#followers'); +const following = document.querySelector('#following'); const fetchUser = (username) => { fetch(`https://api.github.com/users/${username}`) .then((data) => data.json()) .then((jsonData) => { - if (jsonData.message === "Not Found") { - alert("User Not Found"); - return; + if (jsonData.message === 'Not Found') { + alert('User Not Found'); } else { userImg.innerHTML = ` avatar ${jsonData.name} @${jsonData.login} `; - bio.innerHTML = jsonData.bio ? jsonData.bio : "No bio available."; + bio.innerHTML = jsonData.bio ? jsonData.bio : 'No bio available.'; repos.innerHTML = jsonData.public_repos; followers.innerHTML = jsonData.followers; following.innerHTML = jsonData.following; } }) .catch((err) => { - console.log("Catch: " + err.message); + console.log(`Catch: ${err.message}`); }); }; const getUser = () => { - let username = inputUser.value.trim(); + const username = inputUser.value.trim(); if (username.length === 0) { - alert("Please enter a valid GitHub username"); + alert('Please enter a valid GitHub username'); } else { fetchUser(username); } - inputUser.value = ""; + inputUser.value = ''; }; // Attach event listener to the search button -search.addEventListener("click", getUser); +search.addEventListener('click', getUser); diff --git a/Source-Code/GithubProfileFinder/style.css b/Source-Code/GithubProfileFinder/style.css index 83223c4..964856f 100644 --- a/Source-Code/GithubProfileFinder/style.css +++ b/Source-Code/GithubProfileFinder/style.css @@ -1,138 +1,131 @@ -*{ - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body{ - background: url(./assets/github.avif); - background-repeat: no-repeat; - background-size: cover; - background-position: center; - background-blend-mode: darken; -} - - -.search-container{ - - width: 550px; - height: 50px; - background-color: #fff; - display: flex; - justify-content: space-evenly; - margin: 0 auto; - margin-top: 50px; - box-shadow: 0 3px 10px gray; +* { + margin: 0; + padding: 0; + box-sizing: border-box; } -#input{ - width: 70%; - height: 100%; - background-color: #fff; - border: none; - outline: none; - padding: 5px 160px 5px 15px; - box-sizing: border-box; +body { + background: url(./assets/github.avif); + background-repeat: no-repeat; + background-size: cover; + background-position: center; + background-blend-mode: darken; } -#search{ - - height: 100%; - width: 30%; - background-color: #000; - color : white; - cursor: pointer; - text-transform: uppercase; +.search-container { + width: 550px; + height: 50px; + background-color: #fff; + display: flex; + justify-content: space-evenly; + margin: 0 auto; + margin-top: 50px; + box-shadow: 0 3px 10px gray; } -.profile-card{ - padding: auto; - width: 500px; - background-color: rgba(255,255,255,0.6); - margin: 25px auto; - border-radius: 15px; - overflow: hidden; - margin-bottom: 15px; - box-shadow: 0 3px 10px gray; - font-family: 'Lobster Two', cursive; +#input { + width: 70%; + height: 100%; + background-color: #fff; + border: none; + outline: none; + padding: 5px 160px 5px 15px; + box-sizing: border-box; } +#search { + height: 100%; + width: 30%; + background-color: #000; + color: white; + cursor: pointer; + text-transform: uppercase; +} -.main-info{ - display: flex; - flex-direction: column; - align-items: center; - border-bottom: 1px solid gray; +.profile-card { + width: 500px; + background-color: rgba(255, 255, 255, 0.6); + margin: 25px auto; + border-radius: 15px; + overflow: hidden; + margin-bottom: 15px; + box-shadow: 0 3px 10px gray; + font-family: 'Lobster Two', cursive; } -#prof-img{ - height: 70px; - width: auto; - border-radius: 50%; - margin: 10px 0; - box-shadow: 0 3px 10px rgb(96, 93, 93); +.main-info { + display: flex; + flex-direction: column; + align-items: center; + border-bottom: 1px solid gray; } -.name{ - margin-top: 15px; - font-size: 25px; +#prof-img { + height: 70px; + width: auto; + border-radius: 50%; + margin: 10px 0; + box-shadow: 0 3px 10px rgb(96, 93, 93); } -#username{ - font-size: 20px; - text-decoration: none; - margin-top: 5px; - margin-bottom: 8px; +.name { + margin-top: 15px; + font-size: 25px; } -a{ - text-decoration: none; +#username { + font-size: 20px; + text-decoration: none; + margin-top: 5px; + margin-bottom: 8px; } -.bio{ - width: 100%; - text-align: center; - padding: 20px 10px; - font-size: 23px; +a { + text-decoration: none; } -#bio{ - font-weight: bold; - color: rgb(28, 99, 109); +.bio { + width: 100%; + text-align: center; + padding: 20px 10px; + font-size: 23px; } -p{ - margin-top: 12px; +#bio { + font-weight: bold; + color: rgb(28, 99, 109); } -.follow{ - width: 100%; - display: flex; - height: 60px; - border-top: 1px solid grey ; - font-size: 20px; +p { + margin-top: 12px; } -.follow div{ - width: 50%; - text-align: center; - padding-top: 15px; +.follow { + width: 100%; + display: flex; + height: 60px; + border-top: 1px solid grey; + font-size: 20px; } -.followers{ - border-right: 1px solid grey; +.follow div { + width: 50%; + text-align: center; + padding-top: 15px; } -@media screen and (max-width: 600px){ - .profile-card{ - width: 450px; - margin: 0 45px; - margin-top: 30px; - border-radius: 15px; - overflow: hidden; - margin-bottom: 15px; - box-shadow: 0 3px 10px gray; - font-family: 'Lobster Two'; - } +.followers { + border-right: 1px solid grey; } +@media screen and (max-width: 600px) { + .profile-card { + width: 450px; + margin: 0 45px; + margin-top: 30px; + border-radius: 15px; + overflow: hidden; + margin-bottom: 15px; + box-shadow: 0 3px 10px gray; + } +} From fb581095b9f19fbb583fb16f4a583571a22f4b4d Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:09:58 +0530 Subject: [PATCH 008/109] update code --- Source-Code/GithubProfileFinder/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source-Code/GithubProfileFinder/index.html b/Source-Code/GithubProfileFinder/index.html index 4dfe7ab..497556a 100644 --- a/Source-Code/GithubProfileFinder/index.html +++ b/Source-Code/GithubProfileFinder/index.html @@ -31,7 +31,7 @@
avatar Tajul Afreen - @tajulafreen +

A full stack developer

From e1c2d502ff93f814794f78b50f2739658d4d9dd8 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:10:09 +0530 Subject: [PATCH 009/109] Update project --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 9e77327..6ac208e 100644 --- a/README.md +++ b/README.md @@ -309,6 +309,17 @@ In order to run this project you need: +
  • +
    +Github Profile Finder +

    The GitHub User Info Finder is a web application designed to fetch and display detailed information about GitHub users. By simply entering a GitHub username, users can retrieve profile information including the avatar, name, bio, number of public repositories, followers, and following count. This project leverages the GitHub API to provide real-time data, and it is built using HTML, CSS, and JavaScript for a seamless user experience.

    + +
    +
  • +

    (back to top)

    From 2906c020156fec3ccb94f092e3945392ffe50e1f Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:22:18 +0530 Subject: [PATCH 010/109] create a template for project --- Source-Code/BatteryIndicator/index.html | 11 +++++++++++ Source-Code/BatteryIndicator/script.js | 0 Source-Code/BatteryIndicator/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/BatteryIndicator/index.html create mode 100644 Source-Code/BatteryIndicator/script.js create mode 100644 Source-Code/BatteryIndicator/style.css diff --git a/Source-Code/BatteryIndicator/index.html b/Source-Code/BatteryIndicator/index.html new file mode 100644 index 0000000..d01f779 --- /dev/null +++ b/Source-Code/BatteryIndicator/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + + + + \ No newline at end of file diff --git a/Source-Code/BatteryIndicator/script.js b/Source-Code/BatteryIndicator/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/BatteryIndicator/style.css b/Source-Code/BatteryIndicator/style.css new file mode 100644 index 0000000..e69de29 From 0bdce0b105f0d4de59c35dbeacfc75fe7b346d15 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:28:45 +0530 Subject: [PATCH 011/109] Add Icons and toggler --- Source-Code/BatteryIndicator/index.html | 39 +++++++++++++++++++------ 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/Source-Code/BatteryIndicator/index.html b/Source-Code/BatteryIndicator/index.html index d01f779..d70a435 100644 --- a/Source-Code/BatteryIndicator/index.html +++ b/Source-Code/BatteryIndicator/index.html @@ -1,11 +1,32 @@ - - - - Document - - - - - \ No newline at end of file + + + + + Battery Indicator + + + +
    +
    +
    +
    +

    Battery Percentage

    +
    +
    +
    +
    +
    +
    50%
    +
    +
    +
    + + + From 20f0d66094ff422a2911b8c4470d1aa5391a5ab1 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:28:56 +0530 Subject: [PATCH 012/109] Add styles --- Source-Code/BatteryIndicator/style.css | 187 +++++++++++++++++++++++++ 1 file changed, 187 insertions(+) diff --git a/Source-Code/BatteryIndicator/style.css b/Source-Code/BatteryIndicator/style.css index e69de29..c704aa8 100644 --- a/Source-Code/BatteryIndicator/style.css +++ b/Source-Code/BatteryIndicator/style.css @@ -0,0 +1,187 @@ +@import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap"); + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Poppins", sans-serif; +} + +section { + position: relative; + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +section.dark { + background: #161623; +} + +section::before { + content: ""; + position: absolute; + width: 240px; + height: 240px; + background: linear-gradient(#6cff47, #3d1046); + border-radius: 50%; + transform: translate(-150px, -100px); +} + +section.dark::before { + background: linear-gradient(#ffc107, #e91e63); +} + + +section::after { + content: ""; + position: absolute; + width: 250px; + height: 250px; + background: linear-gradient(#f10050, rgb(8, 216, 253)); + border-radius: 50%; + transform: translate(150px, 100px); +} + +section.dark::after { + background: linear-gradient(#2196f3, #31ff38); +} + +.box { + position: relative; + width: 240px; + height: 300px; + background: rgba(255, 255, 255, 0.1); + z-index: 1; + box-shadow: 0 25px 45px rgba(0, 0, 0, 0.25); + border: 1px solid rgba(255, 255, 255, 0.25); + border-right: 1px solid rgba(255, 255, 255, 0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + backdrop-filter: blur(25px); + border-radius: 10px; + display: flex; + justify-content: center; + align-items: center; +} + +.content { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.box h3 { + color: #000000; + font-weight: 500; + font-size: 1.2rem; + letter-spacing: 1px; +} + +section.dark .box h3 { + color: #fff; +} + +.batteryShape { + position: relative; + width: 140px; + height: 65px; + margin: 20px 0; + border: 3px solid #333; + border-radius: 10px; +} + +section.dark .batteryShape { + border: 3px solid #fff; +} + +.batteryShape::before { + content: ""; + position: absolute; + top: 50%; + right: -12px; + transform: translateY(-50%); + width: 7px; + height: 16px; + background: #333; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +section.dark .batteryShape::before { + background: #fff; +} + +.batteryShape::after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 50%; + background: rgba(255, 255, 255, 0.1); +} + +.level { + position: absolute; + top: 4px; + left: 4px; + right: 4px; + bottom: 4px; + /* background: #333; */ + overflow: hidden; +} + +.percentage { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 50%; + background: linear-gradient(90deg, #ffeb3b, #27ff00); + border-radius: 4px; +} + +section.dark .percentage { + background: linear-gradient(90deg, #ffeb3b, #27ff00); +} + +.percent { + color: #000000; + font-size: 2em; + font-weight: 700; +} + +section.dark .percent { + color: #fff; +} + +.toggle { + position: absolute; + top: 20px; + right: 20px; + background: #070716; + width: 30px; + height: 30px; + cursor: pointer; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; +} + +.dark .toggle { + background: #fff; +} + +.toggle::before { + content: "\f186"; + font-family: fontAwesome; + color: #fff; +} + +.dark .toggle::before { + content: "\f185"; + color: #161623; +} \ No newline at end of file From 284707faa72514c2a07de4e0f31b594fc899daa1 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:29:42 +0530 Subject: [PATCH 013/109] Used getbattery function --- Source-Code/BatteryIndicator/script.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Source-Code/BatteryIndicator/script.js b/Source-Code/BatteryIndicator/script.js index e69de29..890ad22 100644 --- a/Source-Code/BatteryIndicator/script.js +++ b/Source-Code/BatteryIndicator/script.js @@ -0,0 +1,15 @@ +document.addEventListener("DOMContentLoaded", () => { + let percentage = document.querySelector(".percentage"); + let percent = document.querySelector(".percent"); + + navigator.getBattery().then(function (battery) { + percentage.style.width = battery.level * 100 + "%"; + percent.innerHTML = Math.floor(battery.level * 100) + "%"; + }); + + let sec = document.querySelector(".sec"); + let toggle = document.querySelector(".toggle"); + toggle.addEventListener("click", function () { + sec.classList.toggle("dark"); + }); +}); From 6392afc44826d60d1cfd04a54eeb212007c9de8b Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:35:42 +0530 Subject: [PATCH 014/109] soleve linter issue --- Source-Code/BatteryIndicator/script.js | 20 ++++++++++---------- Source-Code/BatteryIndicator/style.css | 9 +++++---- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Source-Code/BatteryIndicator/script.js b/Source-Code/BatteryIndicator/script.js index 890ad22..8b3d32a 100644 --- a/Source-Code/BatteryIndicator/script.js +++ b/Source-Code/BatteryIndicator/script.js @@ -1,15 +1,15 @@ -document.addEventListener("DOMContentLoaded", () => { - let percentage = document.querySelector(".percentage"); - let percent = document.querySelector(".percent"); +document.addEventListener('DOMContentLoaded', () => { + const percentage = document.querySelector('.percentage'); + const percent = document.querySelector('.percent'); - navigator.getBattery().then(function (battery) { - percentage.style.width = battery.level * 100 + "%"; - percent.innerHTML = Math.floor(battery.level * 100) + "%"; + navigator.getBattery().then((battery) => { + percentage.style.width = `${battery.level * 100}%`; + percent.innerHTML = `${Math.floor(battery.level * 100)}%`; }); - let sec = document.querySelector(".sec"); - let toggle = document.querySelector(".toggle"); - toggle.addEventListener("click", function () { - sec.classList.toggle("dark"); + const sec = document.querySelector('.sec'); + const toggle = document.querySelector('.toggle'); + toggle.addEventListener('click', () => { + sec.classList.toggle('dark'); }); }); diff --git a/Source-Code/BatteryIndicator/style.css b/Source-Code/BatteryIndicator/style.css index c704aa8..2259c77 100644 --- a/Source-Code/BatteryIndicator/style.css +++ b/Source-Code/BatteryIndicator/style.css @@ -1,3 +1,4 @@ +/* stylelint-disable */ @import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap"); * { @@ -33,7 +34,6 @@ section.dark::before { background: linear-gradient(#ffc107, #e91e63); } - section::after { content: ""; position: absolute; @@ -73,7 +73,7 @@ section.dark::after { } .box h3 { - color: #000000; + color: #000; font-weight: 500; font-size: 1.2rem; letter-spacing: 1px; @@ -129,6 +129,7 @@ section.dark .batteryShape::before { left: 4px; right: 4px; bottom: 4px; + /* background: #333; */ overflow: hidden; } @@ -148,7 +149,7 @@ section.dark .percentage { } .percent { - color: #000000; + color: #000; font-size: 2em; font-weight: 700; } @@ -184,4 +185,4 @@ section.dark .percent { .dark .toggle::before { content: "\f185"; color: #161623; -} \ No newline at end of file +} From eac4a804bbe26b374887d1cc47ca3f16a8699d48 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 21:39:18 +0530 Subject: [PATCH 015/109] Add project --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 6ac208e..88563cf 100644 --- a/README.md +++ b/README.md @@ -320,6 +320,17 @@ In order to run this project you need: +
  • +
    +Battery Indicator +

    This project is a simple web application that dynamically displays the battery level of the user's device and includes a dark mode toggle feature. The battery level is visually represented as a progress bar and also shown as a percentage. The application leverages the Battery Status API to fetch the battery information and updates the display in real-time. Additionally, the user can switch between light and dark modes by clicking a toggle button, enhancing the user interface's customization options.

    + +
    +
  • +

    (back to top)

    From 4eb60d82c62aa64d236689fff765ad73acc977ad Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 22:19:16 +0530 Subject: [PATCH 016/109] create the template for the project --- Source-Code/StopWatch/index.html | 11 +++++++++++ Source-Code/StopWatch/script.js | 0 Source-Code/StopWatch/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/StopWatch/index.html create mode 100644 Source-Code/StopWatch/script.js create mode 100644 Source-Code/StopWatch/style.css diff --git a/Source-Code/StopWatch/index.html b/Source-Code/StopWatch/index.html new file mode 100644 index 0000000..d01f779 --- /dev/null +++ b/Source-Code/StopWatch/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + + + + \ No newline at end of file diff --git a/Source-Code/StopWatch/script.js b/Source-Code/StopWatch/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/StopWatch/style.css b/Source-Code/StopWatch/style.css new file mode 100644 index 0000000..e69de29 From 9da8e0c33f2b6194ca0cef33288517fcbd0a0abc Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 22:25:40 +0530 Subject: [PATCH 017/109] Add buttons --- Source-Code/StopWatch/index.html | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Source-Code/StopWatch/index.html b/Source-Code/StopWatch/index.html index d01f779..c737af1 100644 --- a/Source-Code/StopWatch/index.html +++ b/Source-Code/StopWatch/index.html @@ -1,11 +1,23 @@ - - - Document + + + Stop watch + - +
    +

    Stopwatch

    +
    + 00:00:00 +
    +
    + + + +
    +
    + - \ No newline at end of file + From 1300d04b913b131fcc703840f795f1a1fc424327 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 22:26:18 +0530 Subject: [PATCH 018/109] add segmantic tags --- Source-Code/StopWatch/index.html | 41 +++++++++++++++++--------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/Source-Code/StopWatch/index.html b/Source-Code/StopWatch/index.html index c737af1..a53e825 100644 --- a/Source-Code/StopWatch/index.html +++ b/Source-Code/StopWatch/index.html @@ -1,23 +1,26 @@ - - - - Stop watch - - - -
    -

    Stopwatch

    -
    - 00:00:00 + + + + Stop watch + + + +
    +

    Stopwatch

    +
    + 00:00:00 +
    +
    + + + +
    -
    - - - -
    -
    - - + + From 2096c03c1636c1bd32f3943c99e1f0333ee44cb2 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 22:28:22 +0530 Subject: [PATCH 019/109] Add styles --- Source-Code/StopWatch/style.css | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Source-Code/StopWatch/style.css b/Source-Code/StopWatch/style.css index e69de29..75cfd81 100644 --- a/Source-Code/StopWatch/style.css +++ b/Source-Code/StopWatch/style.css @@ -0,0 +1,45 @@ +body { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #2e2a2a; + margin: 0; + font-family: Arial, sans-serif; + } + + .container { + display: flex; + flex-direction: column; + justify-items: center; + align-items: center; + } + + .stopwatch, h1, span{ + color: aliceblue; + } + .stopwatch { + font-size: 48px; + margin-bottom: 20px; + } + + .buttons { + display: flex; + justify-content: center; + gap: 10px; + } + + button { + padding: 10px 20px; + font-size: 16px; + cursor: pointer; + border: none; + border-radius: 5px; + background-color: #007BFF; + color: #fff; + } + + button:active { + background-color: #0056b3; + } + \ No newline at end of file From eb3cdafe3ca308822b78cabb7711262b9e5637d6 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 22:28:37 +0530 Subject: [PATCH 020/109] Add functionality --- Source-Code/StopWatch/script.js | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Source-Code/StopWatch/script.js b/Source-Code/StopWatch/script.js index e69de29..bc76c00 100644 --- a/Source-Code/StopWatch/script.js +++ b/Source-Code/StopWatch/script.js @@ -0,0 +1,49 @@ +let milliseconds = 0; +let seconds = 0; +let minutes = 0; +let timer; + +const startButton = document.getElementById("start"); +const stopButton = document.getElementById("stop"); +const resetButton = document.getElementById("reset"); + +const updateTime = () => { + milliseconds += 1; + if (milliseconds === 100) { + milliseconds = 0; + seconds += 1; + } + if (seconds === 60) { + seconds = 0; + minutes += 1; + } + document.getElementById("milliseconds").innerText = + milliseconds < 10 ? `0${milliseconds}` : milliseconds; + document.getElementById("seconds").innerText = + seconds < 10 ? `0${seconds}` : seconds; + document.getElementById("minutes").innerText = + minutes < 10 ? `0${minutes}` : minutes; +}; + +const startTimer = () => { + clearInterval(timer); + timer = setInterval(updateTime, 10); +}; + +const stopTimer = () => { + clearInterval(timer); +}; + +const resetTimer = () => { + clearInterval(timer); + milliseconds = 0; + seconds = 0; + minutes = 0; + document.getElementById("milliseconds").innerText = "00"; + document.getElementById("seconds").innerText = "00"; + document.getElementById("minutes").innerText = "00"; +}; + +startButton.addEventListener("click", startTimer); +stopButton.addEventListener("click", stopTimer); +resetButton.addEventListener("click", resetTimer); From ec3cd7b1ba467dd98fa455ecf9971f5841f99698 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 22:29:44 +0530 Subject: [PATCH 021/109] solve linter error --- Source-Code/StopWatch/script.js | 27 +++++----- Source-Code/StopWatch/style.css | 90 +++++++++++++++++---------------- 2 files changed, 58 insertions(+), 59 deletions(-) diff --git a/Source-Code/StopWatch/script.js b/Source-Code/StopWatch/script.js index bc76c00..c37cbe9 100644 --- a/Source-Code/StopWatch/script.js +++ b/Source-Code/StopWatch/script.js @@ -3,9 +3,9 @@ let seconds = 0; let minutes = 0; let timer; -const startButton = document.getElementById("start"); -const stopButton = document.getElementById("stop"); -const resetButton = document.getElementById("reset"); +const startButton = document.getElementById('start'); +const stopButton = document.getElementById('stop'); +const resetButton = document.getElementById('reset'); const updateTime = () => { milliseconds += 1; @@ -17,12 +17,9 @@ const updateTime = () => { seconds = 0; minutes += 1; } - document.getElementById("milliseconds").innerText = - milliseconds < 10 ? `0${milliseconds}` : milliseconds; - document.getElementById("seconds").innerText = - seconds < 10 ? `0${seconds}` : seconds; - document.getElementById("minutes").innerText = - minutes < 10 ? `0${minutes}` : minutes; + document.getElementById('milliseconds').innerText = milliseconds < 10 ? `0${milliseconds}` : milliseconds; + document.getElementById('seconds').innerText = seconds < 10 ? `0${seconds}` : seconds; + document.getElementById('minutes').innerText = minutes < 10 ? `0${minutes}` : minutes; }; const startTimer = () => { @@ -39,11 +36,11 @@ const resetTimer = () => { milliseconds = 0; seconds = 0; minutes = 0; - document.getElementById("milliseconds").innerText = "00"; - document.getElementById("seconds").innerText = "00"; - document.getElementById("minutes").innerText = "00"; + document.getElementById('milliseconds').innerText = '00'; + document.getElementById('seconds').innerText = '00'; + document.getElementById('minutes').innerText = '00'; }; -startButton.addEventListener("click", startTimer); -stopButton.addEventListener("click", stopTimer); -resetButton.addEventListener("click", resetTimer); +startButton.addEventListener('click', startTimer); +stopButton.addEventListener('click', stopTimer); +resetButton.addEventListener('click', resetTimer); diff --git a/Source-Code/StopWatch/style.css b/Source-Code/StopWatch/style.css index 75cfd81..1f6d343 100644 --- a/Source-Code/StopWatch/style.css +++ b/Source-Code/StopWatch/style.css @@ -1,45 +1,47 @@ body { - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - background-color: #2e2a2a; - margin: 0; - font-family: Arial, sans-serif; - } - - .container { - display: flex; - flex-direction: column; - justify-items: center; - align-items: center; - } - - .stopwatch, h1, span{ - color: aliceblue; - } - .stopwatch { - font-size: 48px; - margin-bottom: 20px; - } - - .buttons { - display: flex; - justify-content: center; - gap: 10px; - } - - button { - padding: 10px 20px; - font-size: 16px; - cursor: pointer; - border: none; - border-radius: 5px; - background-color: #007BFF; - color: #fff; - } - - button:active { - background-color: #0056b3; - } - \ No newline at end of file + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #2e2a2a; + margin: 0; + font-family: Arial, sans-serif; +} + +.container { + display: flex; + flex-direction: column; + justify-items: center; + align-items: center; +} + +.stopwatch, +h1, +span { + color: aliceblue; +} + +.stopwatch { + font-size: 48px; + margin-bottom: 20px; +} + +.buttons { + display: flex; + justify-content: center; + gap: 10px; +} + +button { + padding: 10px 20px; + font-size: 16px; + cursor: pointer; + border: none; + border-radius: 5px; + background-color: #007bff; + color: #fff; +} + +button:active { + background-color: #0056b3; +} From 2b97e095c50c0fca998b656b8cf7c1e82910214b Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 29 Jul 2024 22:32:20 +0530 Subject: [PATCH 022/109] Add project --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 88563cf..fac6b93 100644 --- a/README.md +++ b/README.md @@ -331,6 +331,17 @@ In order to run this project you need: +
  • +
    +Stop Watch +

    This project is a simple and interactive stopwatch application created using HTML, CSS, and JavaScript. The stopwatch can be started, stopped, and reset, allowing users to measure elapsed time accurately. It displays minutes, seconds, and milliseconds, providing a clear and precise time tracking interface. The application is styled with CSS for a clean and modern look, and it is fully responsive, ensuring usability across different devices.

    + +
    +
  • +

    (back to top)

    From a14993959a0c4ccdada54f032c2f6a6b25cdd02c Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 02:06:16 +0530 Subject: [PATCH 023/109] created a template for project --- Source-Code/DinosarGame/index.html | 11 +++++++++++ Source-Code/DinosarGame/script.js | 0 Source-Code/DinosarGame/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/DinosarGame/index.html create mode 100644 Source-Code/DinosarGame/script.js create mode 100644 Source-Code/DinosarGame/style.css diff --git a/Source-Code/DinosarGame/index.html b/Source-Code/DinosarGame/index.html new file mode 100644 index 0000000..d01f779 --- /dev/null +++ b/Source-Code/DinosarGame/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + + + + \ No newline at end of file diff --git a/Source-Code/DinosarGame/script.js b/Source-Code/DinosarGame/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/DinosarGame/style.css b/Source-Code/DinosarGame/style.css new file mode 100644 index 0000000..e69de29 From 95f53aefb529fdaef8df0f7c833f0a7326d6ea9d Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 02:33:49 +0530 Subject: [PATCH 024/109] update the folder name --- Source-Code/DinosarGame/index.html | 11 ----------- Source-Code/{DinosarGame => DinosaurGame}/script.js | 0 Source-Code/{DinosarGame => DinosaurGame}/style.css | 0 3 files changed, 11 deletions(-) delete mode 100644 Source-Code/DinosarGame/index.html rename Source-Code/{DinosarGame => DinosaurGame}/script.js (100%) rename Source-Code/{DinosarGame => DinosaurGame}/style.css (100%) diff --git a/Source-Code/DinosarGame/index.html b/Source-Code/DinosarGame/index.html deleted file mode 100644 index d01f779..0000000 --- a/Source-Code/DinosarGame/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Document - - - - - \ No newline at end of file diff --git a/Source-Code/DinosarGame/script.js b/Source-Code/DinosaurGame/script.js similarity index 100% rename from Source-Code/DinosarGame/script.js rename to Source-Code/DinosaurGame/script.js diff --git a/Source-Code/DinosarGame/style.css b/Source-Code/DinosaurGame/style.css similarity index 100% rename from Source-Code/DinosarGame/style.css rename to Source-Code/DinosaurGame/style.css From 9c731b68b2de100928055bc147548ed96c017f1c Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 02:34:29 +0530 Subject: [PATCH 025/109] Add semantic tags --- Source-Code/DinosaurGame/index.html | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Source-Code/DinosaurGame/index.html diff --git a/Source-Code/DinosaurGame/index.html b/Source-Code/DinosaurGame/index.html new file mode 100644 index 0000000..a907ec6 --- /dev/null +++ b/Source-Code/DinosaurGame/index.html @@ -0,0 +1,22 @@ + + + + + + + DINOSAUR GAME + + +

    DINOSAUR GAME 🦕

    +
    +
    + dino +
    +
    + cactus +
    +
    + + + + \ No newline at end of file From 785243ee953aae1ea983af97bcfe5e09b2128291 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 02:57:34 +0530 Subject: [PATCH 026/109] add assets --- Source-Code/DinosaurGame/assets/cactus.png | Bin 0 -> 20672 bytes Source-Code/DinosaurGame/assets/dinosaur.png | Bin 0 -> 2585 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Source-Code/DinosaurGame/assets/cactus.png create mode 100644 Source-Code/DinosaurGame/assets/dinosaur.png diff --git a/Source-Code/DinosaurGame/assets/cactus.png b/Source-Code/DinosaurGame/assets/cactus.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6dcbe172064bfea0d229be8044b9317d90f18b GIT binary patch literal 20672 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 Date: Wed, 31 Jul 2024 02:58:18 +0530 Subject: [PATCH 027/109] update the source for images --- Source-Code/DinosaurGame/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source-Code/DinosaurGame/index.html b/Source-Code/DinosaurGame/index.html index a907ec6..b654bd9 100644 --- a/Source-Code/DinosaurGame/index.html +++ b/Source-Code/DinosaurGame/index.html @@ -10,10 +10,10 @@

    DINOSAUR GAME 🦕

    - dino + dino
    - cactus + cactus
    From e49206f1477cf8a12caacea72aeb4cbc5f462480 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 02:58:32 +0530 Subject: [PATCH 028/109] add styles --- Source-Code/DinosaurGame/style.css | 74 ++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/Source-Code/DinosaurGame/style.css b/Source-Code/DinosaurGame/style.css index e69de29..bce3590 100644 --- a/Source-Code/DinosaurGame/style.css +++ b/Source-Code/DinosaurGame/style.css @@ -0,0 +1,74 @@ +* { + margin: 0; + padding: 0; + background-color: rgb(27, 75, 133); +} + +.game-heading { + text-align: center; + font-family: Arial, Helvetica, sans-serif; + color: rgb(0, 247, 255); + text-shadow: 3px 2px rgb(128, 0, 0); + font-size: 5em; + margin: 40px 0; +} + +.game { + width: 800px; + height: 300px; + margin: 60px auto; + display: flex; + border: 3px solid rgb(0, 247, 255); +} + +.cactus { + height: 40px; + object-fit: contain; + position: relative; + top: 261px; + left: 670px; + animation: block 3s infinite linear; +} + +.block { + height: 40px; +} + +.character { + height: 100px; +} + +.dino { + height: 100px; + object-fit: contain; + position: relative; + top: 200px; +} + +.animate { + animation: character 500ms; +} + +@keyframes block { + 0% { + left: 670px; + } + 100% { + left: -60px; + } +} + +@keyframes character { + 0% { + top: 203px; + } + 30% { + top: 140px; + } + 70% { + top: 140px; + } + 100% { + top: 203px; + } +} \ No newline at end of file From 1b22edfc2f1e3e41cf65ec95f89a9f539aad5076 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:01:31 +0530 Subject: [PATCH 029/109] add functionality --- Source-Code/DinosaurGame/script.js | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Source-Code/DinosaurGame/script.js b/Source-Code/DinosaurGame/script.js index e69de29..a565b9e 100644 --- a/Source-Code/DinosaurGame/script.js +++ b/Source-Code/DinosaurGame/script.js @@ -0,0 +1,37 @@ +const character = document.querySelector(".dino"); +const block = document.querySelector(".cactus"); + +const jump = () => { + // Add class to initiate jump + character.classList.add("animate"); + + // Remove class after animation duration (500ms) + setTimeout(() => { + character.classList.remove("animate"); + }, 500); +}; + +// Trigger jump on spacebar press +document.addEventListener("keydown", (event) => { + if (event.code === "Space") { + jump(); + } +}); + +// Check for collision +const checkDead = setInterval(() => { + const blockLeft = parseInt( + window.getComputedStyle(block).getPropertyValue("left") + ); + const characterTop = parseInt( + window.getComputedStyle(character).getPropertyValue("top") + ); + + // Check for collision + if (blockLeft < 20 && blockLeft > 0 && characterTop >= 178) { + block.style.animation = "none"; + block.style.display = "none"; + alert("Uh..Oh, you lose."); + clearInterval(checkDead); // Stop checking for collisions + } +}, 100); From d31d54fe065cd29400bd878eb4db05908000c39f Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:02:59 +0530 Subject: [PATCH 030/109] add event listener --- Source-Code/DinosaurGame/script.js | 66 +++++++++++++++--------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/Source-Code/DinosaurGame/script.js b/Source-Code/DinosaurGame/script.js index a565b9e..c898412 100644 --- a/Source-Code/DinosaurGame/script.js +++ b/Source-Code/DinosaurGame/script.js @@ -1,37 +1,39 @@ -const character = document.querySelector(".dino"); -const block = document.querySelector(".cactus"); +document.addEventListener("DOMContentLoaded", () => { + const character = document.querySelector(".dino"); + const block = document.querySelector(".cactus"); -const jump = () => { - // Add class to initiate jump - character.classList.add("animate"); + const jump = () => { + // Add class to initiate jump + character.classList.add("animate"); - // Remove class after animation duration (500ms) - setTimeout(() => { - character.classList.remove("animate"); - }, 500); -}; + // Remove class after animation duration (500ms) + setTimeout(() => { + character.classList.remove("animate"); + }, 500); + }; -// Trigger jump on spacebar press -document.addEventListener("keydown", (event) => { - if (event.code === "Space") { - jump(); - } -}); - -// Check for collision -const checkDead = setInterval(() => { - const blockLeft = parseInt( - window.getComputedStyle(block).getPropertyValue("left") - ); - const characterTop = parseInt( - window.getComputedStyle(character).getPropertyValue("top") - ); + // Trigger jump on spacebar press + document.addEventListener("keydown", (event) => { + if (event.code === "Space") { + jump(); + } + }); // Check for collision - if (blockLeft < 20 && blockLeft > 0 && characterTop >= 178) { - block.style.animation = "none"; - block.style.display = "none"; - alert("Uh..Oh, you lose."); - clearInterval(checkDead); // Stop checking for collisions - } -}, 100); + const checkDead = setInterval(() => { + const blockLeft = parseInt( + window.getComputedStyle(block).getPropertyValue("left") + ); + const characterTop = parseInt( + window.getComputedStyle(character).getPropertyValue("top") + ); + + // Check for collision + if (blockLeft < 20 && blockLeft > 0 && characterTop >= 178) { + block.style.animation = "none"; + block.style.display = "none"; + alert("Uh..Oh, you lose."); + clearInterval(checkDead); // Stop checking for collisions + } + }, 100); +}); From fdf6166e9c495815a3387903a61e623ae4546535 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:11:48 +0530 Subject: [PATCH 031/109] solve linter errors --- Source-Code/DinosaurGame/index.html | 29 +++++---- Source-Code/DinosaurGame/script.js | 26 ++++---- Source-Code/DinosaurGame/style.css | 96 +++++++++++++++-------------- 3 files changed, 78 insertions(+), 73 deletions(-) diff --git a/Source-Code/DinosaurGame/index.html b/Source-Code/DinosaurGame/index.html index b654bd9..f285bcd 100644 --- a/Source-Code/DinosaurGame/index.html +++ b/Source-Code/DinosaurGame/index.html @@ -1,22 +1,21 @@ - - - - + + + + DINOSAUR GAME - - + +

    DINOSAUR GAME 🦕

    -
    - dino -
    -
    - cactus -
    +
    + dino +
    +
    + cactus +
    - - - \ No newline at end of file + + diff --git a/Source-Code/DinosaurGame/script.js b/Source-Code/DinosaurGame/script.js index c898412..c249b6b 100644 --- a/Source-Code/DinosaurGame/script.js +++ b/Source-Code/DinosaurGame/script.js @@ -1,20 +1,20 @@ -document.addEventListener("DOMContentLoaded", () => { - const character = document.querySelector(".dino"); - const block = document.querySelector(".cactus"); +document.addEventListener('DOMContentLoaded', () => { + const character = document.querySelector('.dino'); + const block = document.querySelector('.cactus'); const jump = () => { // Add class to initiate jump - character.classList.add("animate"); + character.classList.add('animate'); // Remove class after animation duration (500ms) setTimeout(() => { - character.classList.remove("animate"); + character.classList.remove('animate'); }, 500); }; // Trigger jump on spacebar press - document.addEventListener("keydown", (event) => { - if (event.code === "Space") { + document.addEventListener('keydown', (event) => { + if (event.code === 'Space') { jump(); } }); @@ -22,17 +22,19 @@ document.addEventListener("DOMContentLoaded", () => { // Check for collision const checkDead = setInterval(() => { const blockLeft = parseInt( - window.getComputedStyle(block).getPropertyValue("left") + window.getComputedStyle(block).getPropertyValue('left'), + 10, ); const characterTop = parseInt( - window.getComputedStyle(character).getPropertyValue("top") + window.getComputedStyle(character).getPropertyValue('top'), + 10, ); // Check for collision if (blockLeft < 20 && blockLeft > 0 && characterTop >= 178) { - block.style.animation = "none"; - block.style.display = "none"; - alert("Uh..Oh, you lose."); + block.style.animation = 'none'; + block.style.display = 'none'; + alert('Uh..Oh, you lose.'); clearInterval(checkDead); // Stop checking for collisions } }, 100); diff --git a/Source-Code/DinosaurGame/style.css b/Source-Code/DinosaurGame/style.css index bce3590..46ceea6 100644 --- a/Source-Code/DinosaurGame/style.css +++ b/Source-Code/DinosaurGame/style.css @@ -1,74 +1,78 @@ * { - margin: 0; - padding: 0; - background-color: rgb(27, 75, 133); + margin: 0; + padding: 0; + background-color: rgb(27, 75, 133); } .game-heading { - text-align: center; - font-family: Arial, Helvetica, sans-serif; - color: rgb(0, 247, 255); - text-shadow: 3px 2px rgb(128, 0, 0); - font-size: 5em; - margin: 40px 0; + text-align: center; + font-family: Arial, Helvetica, sans-serif; + color: rgb(0, 247, 255); + text-shadow: 3px 2px rgb(128, 0, 0); + font-size: 5em; + margin: 40px 0; } .game { - width: 800px; - height: 300px; - margin: 60px auto; - display: flex; - border: 3px solid rgb(0, 247, 255); + width: 800px; + height: 300px; + margin: 60px auto; + display: flex; + border: 3px solid rgb(0, 247, 255); } .cactus { - height: 40px; - object-fit: contain; - position: relative; - top: 261px; - left: 670px; - animation: block 3s infinite linear; + height: 40px; + object-fit: contain; + position: relative; + top: 261px; + left: 670px; + animation: block 3s infinite linear; } .block { - height: 40px; + height: 40px; } .character { - height: 100px; + height: 100px; } .dino { - height: 100px; - object-fit: contain; - position: relative; - top: 200px; + height: 100px; + object-fit: contain; + position: relative; + top: 200px; } .animate { - animation: character 500ms; + animation: character 500ms; } @keyframes block { - 0% { - left: 670px; - } - 100% { - left: -60px; - } + 0% { + left: 670px; + } + + 100% { + left: -60px; + } } @keyframes character { - 0% { - top: 203px; - } - 30% { - top: 140px; - } - 70% { - top: 140px; - } - 100% { - top: 203px; - } -} \ No newline at end of file + 0% { + top: 203px; + } + + 30% { + top: 140px; + } + + 70% { + top: 140px; + } + + 100% { + top: 203px; + } +} From cec3ceb2664947cbfaf00766ec5acefa8c5dc2c2 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:14:28 +0530 Subject: [PATCH 032/109] update the project --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index fac6b93..db09128 100644 --- a/README.md +++ b/README.md @@ -342,6 +342,17 @@ In order to run this project you need: +
  • +
    +Dinosaur Game +

    This project is a simple, interactive "Dinosaur Game" built using HTML, CSS, and JavaScript. Inspired by the classic offline game in Google Chrome, the player controls a dinosaur character that must jump over moving obstacles (cacti) to avoid collision. The game features basic animations and a scoring system, providing an engaging experience. The project demonstrates fundamental concepts of web development, including DOM manipulation, event handling, and CSS animations.

    + +
    +
  • +

    (back to top)

    From d15c520e74e7693abc385b9c79b3cfe8d3696360 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:34:01 +0530 Subject: [PATCH 033/109] create a template for project --- Source-Code/JumpGame/index.html | 11 +++++++++++ Source-Code/JumpGame/script.js | 0 Source-Code/JumpGame/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/JumpGame/index.html create mode 100644 Source-Code/JumpGame/script.js create mode 100644 Source-Code/JumpGame/style.css diff --git a/Source-Code/JumpGame/index.html b/Source-Code/JumpGame/index.html new file mode 100644 index 0000000..d01f779 --- /dev/null +++ b/Source-Code/JumpGame/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + + + + \ No newline at end of file diff --git a/Source-Code/JumpGame/script.js b/Source-Code/JumpGame/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/JumpGame/style.css b/Source-Code/JumpGame/style.css new file mode 100644 index 0000000..e69de29 From eb4e7115b1f322dbb36d5f0eada3383faa9463bb Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:51:34 +0530 Subject: [PATCH 034/109] add div for blocks --- Source-Code/JumpGame/index.html | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Source-Code/JumpGame/index.html b/Source-Code/JumpGame/index.html index d01f779..e3373ea 100644 --- a/Source-Code/JumpGame/index.html +++ b/Source-Code/JumpGame/index.html @@ -1,11 +1,20 @@ - - - - Document - - - - - \ No newline at end of file + + + + Jump Game + + + +

    Jump Game

    +

    Press space to jump

    +
    +
    +
    +
    +
    +

    Score:

    + + + From 5b8e902299752e6ecddb7a8a75b56bf9208d510f Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:51:48 +0530 Subject: [PATCH 035/109] Ad styles and keyframes --- Source-Code/JumpGame/style.css | 111 +++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/Source-Code/JumpGame/style.css b/Source-Code/JumpGame/style.css index e69de29..fb6f638 100644 --- a/Source-Code/JumpGame/style.css +++ b/Source-Code/JumpGame/style.css @@ -0,0 +1,111 @@ +* { + padding: 0; + margin: 0; + overflow: hidden; + text-align: center; + background-color: blue; +} + +.game { + top: 40px; + width: 500px; + height: 200px; + border: 1px solid black; + margin: 10% auto; + background-color: aqua; +} + +h2 { + text-align: center; + font-family: Arial, Helvetica, sans-serif; + color: rgb(0, 247, 255); + text-shadow: 3px 2px rgb(128, 0, 0); + font-size: 5em; +} + +p { + color: white; + font-size: 20px; +} + +#character { + width: 30px; + height: 50px; + background-color: red; + position: relative; + top: 150px; + border-radius: 70%; +} + +.animate { + animation: jump 0.3s linear; +} + +@keyframes jump { + 0% { + top: 150px; + } + 30% { + top: 100px; + } + 70% { + top: 100px; + } + 100% { + top: 150px; + } +} + +#block { + background-color: blue; + width: 20px; + height: 20px; + position: relative; + top: 130px; + left: 500px; + animation: block 1s infinite linear; +} + +#block2 { + background-color: orange; + width: 20px; + height: 20px; + position: relative; + top: 30px; + left: 500px; +} + +.animate1 { + animation: blocke 1.5s infinite linear; +} + +@keyframes blocke { + 0% { + left: 500px; + } + 100% { + left: -20px; + } +} + +@keyframes block { + 0% { + left: 500px; + } + 100% { + left: -20px; + } +} +p { + text-align: center; +} +#co { + margin-bottom: 10px; + font-weight: bold; +} +.animate2 { + animation: pa 1s ease-in-out; +} +.show { + opacity: 0; +} From 9abe934f8883739848fa9554ebba80169156aa08 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 03:52:06 +0530 Subject: [PATCH 036/109] add functionality --- Source-Code/JumpGame/script.js | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/Source-Code/JumpGame/script.js b/Source-Code/JumpGame/script.js index e69de29..7e13d47 100644 --- a/Source-Code/JumpGame/script.js +++ b/Source-Code/JumpGame/script.js @@ -0,0 +1,66 @@ +const character = document.getElementById("character"); +const block = document.getElementById("block"); +const block2 = document.getElementById("block2"); +const co = document.getElementById("co"); +var counter = 0; + +var je = setInterval(() => { + co.classList.add("animate2"); + setTimeout(() => { + co.classList.add("show"); + }, 2000); +}, 1000); +function jump() { + if (character.classList === "animate") { + return; + } + character.classList.add("animate"); + setTimeout(function () { + character.classList.remove("animate"); + }, 300); +} +function myFunction(event) { + var x = event.keyCode; + if (x == 32) { + jump(); + } +} +var checkDead = setInterval(function () { + let characterTop = parseInt( + window.getComputedStyle(character).getPropertyValue("top") + ); + let blockLeft = parseInt( + window.getComputedStyle(block).getPropertyValue("left") + ); + if (blockLeft < 20 && blockLeft > -20 && characterTop >= 130) { + block.style.animation = "none"; + alert("Game Over. score: " + Math.floor(counter / 100)); + counter = 0; + block.style.animation = "block 1s infinite linear"; + } else if (ka()) { + } else { + counter++; + document.getElementById("scoreSpan").innerHTML = Math.floor(counter / 100); + } +}, 10); +var add = setInterval(() => { + block2.classList.add("animate1"); + setTimeout(() => { + block2.classList.remove("animate1"); + }, 9000); +}, 7000); + +function ka() { + let characterTop = parseInt( + window.getComputedStyle(character).getPropertyValue("top") + ); + let blockTop = parseInt( + window.getComputedStyle(block2).getPropertyValue("left") + ); + if (blockTop < 20 && characterTop == 100) { + block2.classList.remove("animate1"); + alert("Game Over. score: " + Math.floor(counter / 100)); + counter = 0; + } +} +window.addEventListener("keydown", myFunction); From 126870b7843122590db9f20d5141052d5bc9a018 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 04:20:16 +0530 Subject: [PATCH 037/109] solve linter error --- Source-Code/JumpGame/script.js | 98 +++++++++++++++++----------------- Source-Code/JumpGame/style.css | 12 +++-- 2 files changed, 58 insertions(+), 52 deletions(-) diff --git a/Source-Code/JumpGame/script.js b/Source-Code/JumpGame/script.js index 7e13d47..9b02e9b 100644 --- a/Source-Code/JumpGame/script.js +++ b/Source-Code/JumpGame/script.js @@ -1,66 +1,66 @@ -const character = document.getElementById("character"); -const block = document.getElementById("block"); -const block2 = document.getElementById("block2"); -const co = document.getElementById("co"); -var counter = 0; +const character = document.getElementById('character'); +const block = document.getElementById('block'); +const block2 = document.getElementById('block2'); +let counter = 0; -var je = setInterval(() => { - co.classList.add("animate2"); +const jump = () => { + if (character.classList.contains('animate')) return; + character.classList.add('animate'); setTimeout(() => { - co.classList.add("show"); - }, 2000); -}, 1000); -function jump() { - if (character.classList === "animate") { - return; - } - character.classList.add("animate"); - setTimeout(function () { - character.classList.remove("animate"); + character.classList.remove('animate'); }, 300); -} -function myFunction(event) { - var x = event.keyCode; - if (x == 32) { - jump(); - } -} -var checkDead = setInterval(function () { - let characterTop = parseInt( - window.getComputedStyle(character).getPropertyValue("top") +}; + +// eslint-disable-next-line no-unused-vars +const checkDead = setInterval(() => { + const characterTop = parseInt( + window.getComputedStyle(character).getPropertyValue('top'), + 10, ); - let blockLeft = parseInt( - window.getComputedStyle(block).getPropertyValue("left") + const blockLeft = parseInt( + window.getComputedStyle(block).getPropertyValue('left'), + 10, ); if (blockLeft < 20 && blockLeft > -20 && characterTop >= 130) { - block.style.animation = "none"; - alert("Game Over. score: " + Math.floor(counter / 100)); + block.style.animation = 'none'; + alert(`Game Over. Score: ${Math.floor(counter / 100)}`); counter = 0; - block.style.animation = "block 1s infinite linear"; - } else if (ka()) { + block.style.animation = 'block 1s infinite linear'; } else { - counter++; - document.getElementById("scoreSpan").innerHTML = Math.floor(counter / 100); + counter += 1; + document.getElementById('scoreSpan').innerText = Math.floor(counter / 100); } }, 10); -var add = setInterval(() => { - block2.classList.add("animate1"); + +const add = () => { + block2.classList.add('animate1'); setTimeout(() => { - block2.classList.remove("animate1"); + block2.classList.remove('animate1'); }, 9000); -}, 7000); +}; -function ka() { - let characterTop = parseInt( - window.getComputedStyle(character).getPropertyValue("top") +// Call the `add` function at regular intervals to animate block2 +setInterval(add, 7000); + +// eslint-disable-next-line no-unused-vars +const ka = () => { + const characterTop = parseInt( + window.getComputedStyle(character).getPropertyValue('top'), + 10, ); - let blockTop = parseInt( - window.getComputedStyle(block2).getPropertyValue("left") + const blockTop = parseInt( + window.getComputedStyle(block2).getPropertyValue('left'), + 10, ); - if (blockTop < 20 && characterTop == 100) { - block2.classList.remove("animate1"); - alert("Game Over. score: " + Math.floor(counter / 100)); + if (blockTop < 20 && characterTop === 100) { + block2.classList.remove('animate1'); + alert(`Game Over. Score: ${Math.floor(counter / 100)}`); counter = 0; } -} -window.addEventListener("keydown", myFunction); +}; + +window.addEventListener('keydown', (event) => { + if (event.keyCode === 32) { + jump(); + } +}); diff --git a/Source-Code/JumpGame/style.css b/Source-Code/JumpGame/style.css index fb6f638..fe3c090 100644 --- a/Source-Code/JumpGame/style.css +++ b/Source-Code/JumpGame/style.css @@ -26,6 +26,7 @@ h2 { p { color: white; font-size: 20px; + text-align: center; } #character { @@ -45,12 +46,15 @@ p { 0% { top: 150px; } + 30% { top: 100px; } + 70% { top: 100px; } + 100% { top: 150px; } @@ -83,6 +87,7 @@ p { 0% { left: 500px; } + 100% { left: -20px; } @@ -92,20 +97,21 @@ p { 0% { left: 500px; } + 100% { left: -20px; } } -p { - text-align: center; -} + #co { margin-bottom: 10px; font-weight: bold; } + .animate2 { animation: pa 1s ease-in-out; } + .show { opacity: 0; } From 472060928eccd71b2aeb0d965874ffaad0c67262 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 31 Jul 2024 04:22:40 +0530 Subject: [PATCH 038/109] update the project --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index db09128..5616387 100644 --- a/README.md +++ b/README.md @@ -353,6 +353,17 @@ In order to run this project you need: +
  • +
    +Dinosaur Game +

    This project is a simple browser-based "Jump Game" where players control a character that must jump over blocks to avoid collisions. It demonstrates the use of HTML, CSS, and JavaScript to create an interactive game with basic animations and collision detection. The player uses the spacebar to jump and scores points based on survival time. The game includes two types of moving obstacles, adding a layer of challenge.

    + +
    +
  • +

    (back to top)

    From 88ae6d450931d2efc2ac538323da603df2c9ab0b Mon Sep 17 00:00:00 2001 From: Tajul Afreen <119053190+tajulafreen@users.noreply.github.com> Date: Mon, 5 Aug 2024 10:12:38 +0530 Subject: [PATCH 039/109] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5616387..f4aba61 100644 --- a/README.md +++ b/README.md @@ -355,7 +355,7 @@ In order to run this project you need:
  • -Dinosaur Game +Jump Game

    This project is a simple browser-based "Jump Game" where players control a character that must jump over blocks to avoid collisions. It demonstrates the use of HTML, CSS, and JavaScript to create an interactive game with basic animations and collision detection. The player uses the spacebar to jump and scores points based on survival time. The game includes two types of moving obstacles, adding a layer of challenge.

    • Live Demo
    • From d7d24306046baacec68b7af07fa10a62bb09ba4b Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 8 Aug 2024 23:35:36 +0530 Subject: [PATCH 040/109] Add template for project --- Source-Code/MemoryCard/index.html | 11 +++++++++++ Source-Code/MemoryCard/script.js | 0 Source-Code/MemoryCard/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/MemoryCard/index.html create mode 100644 Source-Code/MemoryCard/script.js create mode 100644 Source-Code/MemoryCard/style.css diff --git a/Source-Code/MemoryCard/index.html b/Source-Code/MemoryCard/index.html new file mode 100644 index 0000000..9cecf52 --- /dev/null +++ b/Source-Code/MemoryCard/index.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Source-Code/MemoryCard/script.js b/Source-Code/MemoryCard/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/MemoryCard/style.css b/Source-Code/MemoryCard/style.css new file mode 100644 index 0000000..e69de29 From 8c8f0ae950bfc12beaad0e59185937c2dece593a Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 00:30:18 +0530 Subject: [PATCH 041/109] Add div and button for generating cards --- Source-Code/MemoryCard/index.html | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Source-Code/MemoryCard/index.html b/Source-Code/MemoryCard/index.html index 9cecf52..0037ab2 100644 --- a/Source-Code/MemoryCard/index.html +++ b/Source-Code/MemoryCard/index.html @@ -3,9 +3,17 @@ - + Memory Card Game + - +
      +

      Memory Card Game

      +
      + +
      + +
      + - \ No newline at end of file + From 9ab5fc9def27bc964f0d78ac8eda402180c996c3 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 00:31:06 +0530 Subject: [PATCH 042/109] Add functioanlities --- Source-Code/MemoryCard/script.js | 107 +++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/Source-Code/MemoryCard/script.js b/Source-Code/MemoryCard/script.js index e69de29..e493312 100644 --- a/Source-Code/MemoryCard/script.js +++ b/Source-Code/MemoryCard/script.js @@ -0,0 +1,107 @@ +const cardValues = [ + '🍎', + '🍎', + '🍌', + '🍌', + '🍮', + '🍮', + '🎂', + '🎂', + '🍟', + '🍟', + '🍫', + '🍫', + '🍇', + '🍇', + '🥝', + '🥝', +]; +let shuffledValues = []; +let cardElements = []; +let flippedCards = []; +let matchedCards = []; + +const shuffleArray = (array) => { + let currentIndex = array.length; + let temporaryValue; + let randomIndex; + + while (currentIndex !== 0) { + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + + temporaryValue = array[currentIndex]; + array[currentIndex] = array[randomIndex]; + array[randomIndex] = temporaryValue; + } + + return array; +}; + +const checkMatch = () => { + const [card1, card2] = flippedCards; + + if ( + card1.querySelector('.card-back').textContent + === card2.querySelector('.card-back').textContent + ) { + matchedCards.push(card1, card2); + } else { + card1.classList.remove('flipped'); + card2.classList.remove('flipped'); + } + flippedCards = []; + + if (matchedCards.length === cardElements.length) { + alert('Congratulations! You found all pairs!'); + } +}; + +const flipCard = (card) => { + if ( + flippedCards.length < 2 + && !card.classList.contains('flipped') + && !matchedCards.includes(card) + ) { + card.classList.add('flipped'); + flippedCards.push(card); + + if (flippedCards.length === 2) { + setTimeout(checkMatch, 1000); + } + } +}; +const startGame = () => { + shuffledValues = shuffleArray(cardValues); + const board = document.getElementById('game-board'); + board.innerHTML = ''; + matchedCards = []; + cardElements = []; + for (let i = 0; i < shuffledValues.length; i += 1) { + const card = document.createElement('div'); + card.classList.add('card'); + + const cardInner = document.createElement('div'); + cardInner.classList.add('card-inner'); + + const cardFront = document.createElement('div'); + cardFront.classList.add('card-front'); + + const cardBack = document.createElement('div'); + cardBack.classList.add('card-back'); + cardBack.textContent = shuffledValues[i]; + + cardInner.appendChild(cardFront); + cardInner.appendChild(cardBack); + card.appendChild(cardInner); + + card.addEventListener('click', () => flipCard(card)); + board.appendChild(card); + cardElements.push(card); + } +}; + +const btn = document.querySelector('.btn'); +btn.addEventListener('click', startGame); +// Initialize the game when the page loads +window.onload = startGame; From c3e45bfb8e7dd88e0f942ec0c0e6d7ccdbfbaf02 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 00:31:18 +0530 Subject: [PATCH 043/109] Add styles --- Source-Code/MemoryCard/style.css | 87 ++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/Source-Code/MemoryCard/style.css b/Source-Code/MemoryCard/style.css index e69de29..c787a6f 100644 --- a/Source-Code/MemoryCard/style.css +++ b/Source-Code/MemoryCard/style.css @@ -0,0 +1,87 @@ +body { + font-family: Arial, sans-serif; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + background-color: #eeddf0; +} + +h1 { + color: #d38692; + font-size: 2em; +} + +.container { + text-align: center; + background-color: #a7f1c5; + padding: 20px; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +.game-board { + display: grid; + grid-template-columns: repeat(4, 100px); + grid-template-rows: repeat(4, 100px); + gap: 10px; + margin-bottom: 20px; +} + +.card { + width: 100px; + height: 100px; + background-color: #eee; + display: flex; + align-items: center; + justify-content: center; + font-size: 2em; + cursor: pointer; + color: transparent; + perspective: 1000px; /* Added for 3D effect */ +} + +.card-inner { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + transition: transform 0.6s; + transform-style: preserve-3d; + position: relative; +} + +.card-front, +.card-back { + position: absolute; + width: 100%; + height: 100%; + backface-visibility: hidden; +} + +.card-front { + background-color: #e68ce0; +} + +.card-back { + background-color: #fff; + font-size: 60px; + color: #000; + transform: rotateY(180deg); +} + +.card.flipped .card-inner { + transform: rotateY(180deg); +} + +button { + padding: 15px 20px; + font-size: 18px; + font-weight: 600; + color: rgb(228, 240, 240); + border: none; + cursor: pointer; + background-color: #008cba; +} From 4282bf266cc0437c8daa3a75fcd56c9703acf439 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 00:31:27 +0530 Subject: [PATCH 044/109] update readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 5616387..f989460 100644 --- a/README.md +++ b/README.md @@ -364,6 +364,17 @@ In order to run this project you need:
  • +
  • +
    +Memory Card Game +

    The Memory Card Game is a classic card-matching game designed to enhance cognitive skills and memory. Players are presented with a grid of face-down cards. The goal is to find and match all pairs of cards. This project demonstrates fundamental web development skills using HTML, CSS, and JavaScript.

    + +
    +
  • +

    (back to top)

    From a4eb9c346cc21e4b3a92405064dfb27471864cbd Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 00:47:00 +0530 Subject: [PATCH 045/109] create a template for project --- Source-Code/ToDoList/index.html | 11 +++++++++++ Source-Code/ToDoList/script.js | 0 Source-Code/ToDoList/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/ToDoList/index.html create mode 100644 Source-Code/ToDoList/script.js create mode 100644 Source-Code/ToDoList/style.css diff --git a/Source-Code/ToDoList/index.html b/Source-Code/ToDoList/index.html new file mode 100644 index 0000000..d01f779 --- /dev/null +++ b/Source-Code/ToDoList/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + + + + \ No newline at end of file diff --git a/Source-Code/ToDoList/script.js b/Source-Code/ToDoList/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/ToDoList/style.css b/Source-Code/ToDoList/style.css new file mode 100644 index 0000000..e69de29 From 031ec3ad56f74000ecb39fb3fc8a169157110cd8 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 01:28:15 +0530 Subject: [PATCH 046/109] Add buton and options --- Source-Code/ToDoList/index.html | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/Source-Code/ToDoList/index.html b/Source-Code/ToDoList/index.html index d01f779..0f73d2a 100644 --- a/Source-Code/ToDoList/index.html +++ b/Source-Code/ToDoList/index.html @@ -3,9 +3,35 @@ - Document + To-Do List with Categories + - +
    +

    To-Do List

    +
    + + + +
    +
    + + +
    +
      + +
    +
    + - \ No newline at end of file + From 18472feee46150fdf9484599a3c1bc0ca4a9122d Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 01:28:58 +0530 Subject: [PATCH 047/109] Add event listner and import the task --- Source-Code/ToDoList/index.js | 23 +++++++++++++++++++++++ Source-Code/ToDoList/script.js | 0 2 files changed, 23 insertions(+) create mode 100644 Source-Code/ToDoList/index.js delete mode 100644 Source-Code/ToDoList/script.js diff --git a/Source-Code/ToDoList/index.js b/Source-Code/ToDoList/index.js new file mode 100644 index 0000000..7010274 --- /dev/null +++ b/Source-Code/ToDoList/index.js @@ -0,0 +1,23 @@ +import { addTask, deleteTask } from './module/main.js'; +import filterTasks from './module/filters.js'; + +document.addEventListener('DOMContentLoaded', () => { + const taskInput = document.getElementById('task-input'); + const categorySelect = document.getElementById('category-select'); + const taskList = document.getElementById('task-list'); + const filterSelect = document.getElementById('filter-select'); + + document.querySelector('.add-btn').addEventListener('click', () => { + addTask(taskInput, categorySelect, taskList); + }); + + filterSelect.addEventListener('change', () => { + filterTasks(filterSelect, taskList); + }); + + taskList.addEventListener('click', (event) => { + if (event.target.classList.contains('delete-btn')) { + deleteTask(event.target); + } + }); +}); diff --git a/Source-Code/ToDoList/script.js b/Source-Code/ToDoList/script.js deleted file mode 100644 index e69de29..0000000 From 5313503cc034ad3c3a56e5e1a5d6ee22830ae5f7 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 01:29:13 +0530 Subject: [PATCH 048/109] give the styles --- Source-Code/ToDoList/style.css | 82 ++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/Source-Code/ToDoList/style.css b/Source-Code/ToDoList/style.css index e69de29..3d58179 100644 --- a/Source-Code/ToDoList/style.css +++ b/Source-Code/ToDoList/style.css @@ -0,0 +1,82 @@ +body { + font-family: Arial, sans-serif; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + background-color: #f4f4f4; +} + +.container { + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + +} + +h1 { + text-align: center; +} + +.form-container { + margin-bottom: 20px; +} + +#task-input, #category-select, button { + margin: 5px; + padding: 10px; + border: 1px solid #ccc; + border-radius: 4px; +} + +button { + background-color: #007bff; + color: #fff; + border: none; + cursor: pointer; +} + +button:hover { + background-color: #0056b3; +} + +.filter-container { + margin-bottom: 20px; + display: flex; + justify-content: space-between; + align-items: center; +} + +ul { + list-style-type: none; + padding: 0; +} + +li { + background-color: #f9f9f9; + margin: 5px 0; + padding: 10px; + border-radius: 4px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.task-text { + flex: 1; +} + +.delete-btn { + background-color: #dc3545; + color: #fff; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; +} + +.delete-btn:hover { + background-color: #c82333; +} From c6be96b08865b7a1895c6d68a6d42da7ef5aac3a Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 01:29:33 +0530 Subject: [PATCH 049/109] dd filter funtionality --- Source-Code/ToDoList/module/filters.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Source-Code/ToDoList/module/filters.js diff --git a/Source-Code/ToDoList/module/filters.js b/Source-Code/ToDoList/module/filters.js new file mode 100644 index 0000000..ec9d708 --- /dev/null +++ b/Source-Code/ToDoList/module/filters.js @@ -0,0 +1,13 @@ +export default function filterTasks(filterSelect, taskList) { + const filterValue = filterSelect.value; + const tasks = taskList.getElementsByClassName('task-item'); + + for (let i = 0; i < tasks.length; i += 1) { + const taskCategory = tasks[i].innerText.split(' (')[1].split(')')[0]; + if (filterValue === '' || filterValue === taskCategory) { + tasks[i].style.display = ''; + } else { + tasks[i].style.display = 'none'; + } + } +} From d748447ea04a687f5dd720b8300675a4d9fade1f Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 01:30:08 +0530 Subject: [PATCH 050/109] create the add task and delete task functionality --- Source-Code/ToDoList/module/main.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Source-Code/ToDoList/module/main.js diff --git a/Source-Code/ToDoList/module/main.js b/Source-Code/ToDoList/module/main.js new file mode 100644 index 0000000..606a8a9 --- /dev/null +++ b/Source-Code/ToDoList/module/main.js @@ -0,0 +1,27 @@ +export function addTask(taskInput, categorySelect, taskList) { + const taskText = taskInput.value.trim(); + const category = categorySelect.value; + + if (taskText === '' || category === '') { + alert('Please enter a task and select a category.'); + return; + } + + const li = document.createElement('li'); + li.classList.add('task-item'); + li.innerHTML = ` + ${taskText} (${category}) + + `; + + taskList.appendChild(li); + + // Clear input fields + taskInput.value = ''; + categorySelect.value = ''; +} + +export function deleteTask(button) { + const taskList = document.getElementById('task-list'); + taskList.removeChild(button.parentElement); +} From 9ecad5619187f7e25bc710e57a6bc661f3200775 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 01:30:17 +0530 Subject: [PATCH 051/109] update readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 2770c73..aa0be88 100644 --- a/README.md +++ b/README.md @@ -375,6 +375,17 @@ In order to run this project you need: +
  • +
    +TO DO LIST +

    This project is a simple web-based To-Do List application that allows users to add tasks, categorize them, and filter tasks by category. The application is built using HTML, CSS, and JavaScript, with JavaScript modules to separate concerns and improve maintainability.

    + +
    +
  • +

    (back to top)

    From f0003dc55e2ac081cda88180e5557ba0d9fdff31 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 9 Aug 2024 01:37:28 +0530 Subject: [PATCH 052/109] solve linter issue --- Source-Code/ToDoList/style.css | 91 +++++++++++++++++----------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/Source-Code/ToDoList/style.css b/Source-Code/ToDoList/style.css index 3d58179..083349e 100644 --- a/Source-Code/ToDoList/style.css +++ b/Source-Code/ToDoList/style.css @@ -1,82 +1,83 @@ body { - font-family: Arial, sans-serif; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - margin: 0; - background-color: #f4f4f4; + font-family: Arial, sans-serif; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + background-color: #f4f4f4; } .container { - background-color: #fff; - padding: 20px; - border-radius: 8px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { - text-align: center; + text-align: center; } .form-container { - margin-bottom: 20px; + margin-bottom: 20px; } -#task-input, #category-select, button { - margin: 5px; - padding: 10px; - border: 1px solid #ccc; - border-radius: 4px; +#task-input, +#category-select, +button { + margin: 5px; + padding: 10px; + border: 1px solid #ccc; + border-radius: 4px; } button { - background-color: #007bff; - color: #fff; - border: none; - cursor: pointer; + background-color: #007bff; + color: #fff; + border: none; + cursor: pointer; } button:hover { - background-color: #0056b3; + background-color: #0056b3; } .filter-container { - margin-bottom: 20px; - display: flex; - justify-content: space-between; - align-items: center; + margin-bottom: 20px; + display: flex; + justify-content: space-between; + align-items: center; } ul { - list-style-type: none; - padding: 0; + list-style-type: none; + padding: 0; } li { - background-color: #f9f9f9; - margin: 5px 0; - padding: 10px; - border-radius: 4px; - display: flex; - justify-content: space-between; - align-items: center; + background-color: #f9f9f9; + margin: 5px 0; + padding: 10px; + border-radius: 4px; + display: flex; + justify-content: space-between; + align-items: center; } .task-text { - flex: 1; + flex: 1; } .delete-btn { - background-color: #dc3545; - color: #fff; - border: none; - padding: 5px 10px; - border-radius: 4px; - cursor: pointer; + background-color: #dc3545; + color: #fff; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; } .delete-btn:hover { - background-color: #c82333; + background-color: #c82333; } From cbcedc22f9aa773d4e15fea5078961a9e0903e45 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 30 Aug 2024 15:43:10 +0530 Subject: [PATCH 053/109] create a template for project --- Source-Code/PasswordGenerator/index.html | 19 +++++++++++++++++++ Source-Code/PasswordGenerator/script.js | 0 Source-Code/PasswordGenerator/style.css | 0 3 files changed, 19 insertions(+) create mode 100644 Source-Code/PasswordGenerator/index.html create mode 100644 Source-Code/PasswordGenerator/script.js create mode 100644 Source-Code/PasswordGenerator/style.css diff --git a/Source-Code/PasswordGenerator/index.html b/Source-Code/PasswordGenerator/index.html new file mode 100644 index 0000000..509e61b --- /dev/null +++ b/Source-Code/PasswordGenerator/index.html @@ -0,0 +1,19 @@ + + + + + + + + + Password Generator + + + + + + + + \ No newline at end of file diff --git a/Source-Code/PasswordGenerator/script.js b/Source-Code/PasswordGenerator/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/PasswordGenerator/style.css b/Source-Code/PasswordGenerator/style.css new file mode 100644 index 0000000..e69de29 From 9dde1662b7bfcd373646014c0e28b1805392f1f1 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 30 Aug 2024 16:04:21 +0530 Subject: [PATCH 054/109] Add containers and input and button --- Source-Code/PasswordGenerator/index.html | 38 +++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Source-Code/PasswordGenerator/index.html b/Source-Code/PasswordGenerator/index.html index 509e61b..a3efb62 100644 --- a/Source-Code/PasswordGenerator/index.html +++ b/Source-Code/PasswordGenerator/index.html @@ -11,7 +11,43 @@ Password Generator - +
    +
    +

    Password Generator

    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    From 3212bdc2aff982e757ea0470ff080e112e723862 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 30 Aug 2024 16:04:36 +0530 Subject: [PATCH 055/109] Add styles --- Source-Code/PasswordGenerator/style.css | 83 +++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/Source-Code/PasswordGenerator/style.css b/Source-Code/PasswordGenerator/style.css index e69de29..e888c47 100644 --- a/Source-Code/PasswordGenerator/style.css +++ b/Source-Code/PasswordGenerator/style.css @@ -0,0 +1,83 @@ +@import url('https://fonts.googleapis.com/css?family=Muli&display=swap'); + +* { + box-sizing: border-box; +} + +body { + background: linear-gradient(to right, #e762ea, #b3f4f0); + color: rgb(255, 255, 255); + font-family: 'Muli'; + font-weight: 500; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + overflow: hidden; + padding: 10px; + margin: 0; +} + +h2 { + margin: 10px 0 20px; + text-align: center; + font-weight: 1000; +} + +.container { + background-color: #2bd3df; + box-shadow: 0px 2px 10px rgba(255, 255, 255, 0.2); + padding: 20px; + width: 350px; + max-width: 100%; +} + +.result-container { + background-color: rgba(0, 0, 0, 0.247); + display: flex; + justify-content: flex-start; + align-items: center; + position: relative; + font-size: 18px; + font-weight: bold; + letter-spacing: 1px; + padding: 12px 10px; + height: 50px; + width: 100%; +} + +.result-container #result { + word-wrap: break-word; + max-width: calc(100% - 40px); +} + +.result-container .btn { + position: absolute; + top: 5px; + right: 5px; + width: 40px; + height: 40px; + font-size: 20px; +} + +.btn { + border: none; + background-color: #2c085c; + color: #fff; + font-size: 16px; + padding: 8px 12px; + cursor: pointer; +} + +.btn-large { + display: block; + width: 100%; +} + +.setting { + display: flex; + justify-content: space-between; + align-items: center; + margin: 15px 0; +} \ No newline at end of file From 4a7685d473777b13bab813d08ec1ad4b62bed45a Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 30 Aug 2024 16:05:01 +0530 Subject: [PATCH 056/109] Add functionality for buttons --- Source-Code/PasswordGenerator/script.js | 87 +++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/Source-Code/PasswordGenerator/script.js b/Source-Code/PasswordGenerator/script.js index e69de29..dad899d 100644 --- a/Source-Code/PasswordGenerator/script.js +++ b/Source-Code/PasswordGenerator/script.js @@ -0,0 +1,87 @@ +const resultEl = document.getElementById("result"); +const lengthEl = document.getElementById("length"); +const uppercaseEl = document.getElementById("uppercase"); +const lowercaseEl = document.getElementById("lowercase"); +const numbersEl = document.getElementById("numbers"); +const symbolsEl = document.getElementById("symbols"); +const generateEl = document.getElementById("generate"); +const clipboardEl = document.getElementById("clipboard"); + +const randomFunc = { + lower: getRandomLower, + upper: getRandomUpper, + number: getRandomNumber, + symbol: getRandomSymbol, +}; + +clipboardEl.addEventListener("click", () => { + const textarea = document.createElement("textarea"); + const password = resultEl.innerText; + + if (!password) { + return; + } + + textarea.value = password; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand("copy"); + textarea.remove(); + alert("Password copied to clipboard!"); +}); + +generateEl.addEventListener("click", () => { + const length = +lengthEl.value; + const hasLower = lowercaseEl.checked; + const hasUpper = uppercaseEl.checked; + const hasNumber = numbersEl.checked; + const hasSymbol = symbolsEl.checked; + + resultEl.innerText = generatePassword( + hasLower, + hasUpper, + hasNumber, + hasSymbol, + length + ); +}); + +function generatePassword(lower, upper, number, symbol, length) { + let generatedPassword = ""; + const typesCount = lower + upper + number + symbol; + const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter( + (item) => Object.values(item)[0] + ); + + if (typesCount === 0) { + return ""; + } + + for (let i = 0; i < length; i += typesCount) { + typesArr.forEach((type) => { + const funcName = Object.keys(type)[0]; + generatedPassword += randomFunc[funcName](); + }); + } + + const finalPassword = generatedPassword.slice(0, length); + + return finalPassword; +} + +function getRandomLower() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 97); +} + +function getRandomUpper() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 65); +} + +function getRandomNumber() { + return String.fromCharCode(Math.floor(Math.random() * 10) + 48); +} + +function getRandomSymbol() { + const symbols = "!@#$%^&*(){}[]=<>/,."; + return symbols[Math.floor(Math.random() * symbols.length)]; +} From 42fa2b2122302c5ab5ccc8b9e75abcb45a2218ef Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 30 Aug 2024 16:23:45 +0530 Subject: [PATCH 057/109] solve linter issues --- Source-Code/PasswordGenerator/index.html | 92 ++++++++++---------- Source-Code/PasswordGenerator/script.js | 103 +++++++++++------------ Source-Code/PasswordGenerator/style.css | 24 +++--- 3 files changed, 109 insertions(+), 110 deletions(-) diff --git a/Source-Code/PasswordGenerator/index.html b/Source-Code/PasswordGenerator/index.html index a3efb62..67d0781 100644 --- a/Source-Code/PasswordGenerator/index.html +++ b/Source-Code/PasswordGenerator/index.html @@ -1,55 +1,55 @@ - - - - + + + + - + Password Generator - - + +
    -
    -

    Password Generator

    -
    - - -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    +
    +

    Password Generator

    +
    + +
    - - +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    - + - - \ No newline at end of file + + diff --git a/Source-Code/PasswordGenerator/script.js b/Source-Code/PasswordGenerator/script.js index dad899d..846ae96 100644 --- a/Source-Code/PasswordGenerator/script.js +++ b/Source-Code/PasswordGenerator/script.js @@ -1,21 +1,15 @@ -const resultEl = document.getElementById("result"); -const lengthEl = document.getElementById("length"); -const uppercaseEl = document.getElementById("uppercase"); -const lowercaseEl = document.getElementById("lowercase"); -const numbersEl = document.getElementById("numbers"); -const symbolsEl = document.getElementById("symbols"); -const generateEl = document.getElementById("generate"); -const clipboardEl = document.getElementById("clipboard"); +/* eslint-disable no-loop-func */ +const resultEl = document.getElementById('result'); +const lengthEl = document.getElementById('length'); +const uppercaseEl = document.getElementById('uppercase'); +const lowercaseEl = document.getElementById('lowercase'); +const numbersEl = document.getElementById('numbers'); +const symbolsEl = document.getElementById('symbols'); +const generateEl = document.getElementById('generate'); +const clipboardEl = document.getElementById('clipboard'); -const randomFunc = { - lower: getRandomLower, - upper: getRandomUpper, - number: getRandomNumber, - symbol: getRandomSymbol, -}; - -clipboardEl.addEventListener("click", () => { - const textarea = document.createElement("textarea"); +clipboardEl.addEventListener('click', () => { + const textarea = document.createElement('textarea'); const password = resultEl.innerText; if (!password) { @@ -25,36 +19,43 @@ clipboardEl.addEventListener("click", () => { textarea.value = password; document.body.appendChild(textarea); textarea.select(); - document.execCommand("copy"); + document.execCommand('copy'); textarea.remove(); - alert("Password copied to clipboard!"); + alert('Password copied to clipboard!'); }); -generateEl.addEventListener("click", () => { - const length = +lengthEl.value; - const hasLower = lowercaseEl.checked; - const hasUpper = uppercaseEl.checked; - const hasNumber = numbersEl.checked; - const hasSymbol = symbolsEl.checked; +function getRandomLower() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 97); +} - resultEl.innerText = generatePassword( - hasLower, - hasUpper, - hasNumber, - hasSymbol, - length - ); -}); +function getRandomUpper() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 65); +} + +function getRandomNumber() { + return String.fromCharCode(Math.floor(Math.random() * 10) + 48); +} + +function getRandomSymbol() { + const symbols = '!@#$%^&*(){}[]=<>/,.'; + return symbols[Math.floor(Math.random() * symbols.length)]; +} +const randomFunc = { + lower: getRandomLower, + upper: getRandomUpper, + number: getRandomNumber, + symbol: getRandomSymbol, +}; function generatePassword(lower, upper, number, symbol, length) { - let generatedPassword = ""; + let generatedPassword = ''; const typesCount = lower + upper + number + symbol; const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter( - (item) => Object.values(item)[0] + (item) => Object.values(item)[0], ); if (typesCount === 0) { - return ""; + return ''; } for (let i = 0; i < length; i += typesCount) { @@ -68,20 +69,18 @@ function generatePassword(lower, upper, number, symbol, length) { return finalPassword; } +generateEl.addEventListener('click', () => { + const length = +lengthEl.value; + const hasLower = lowercaseEl.checked; + const hasUpper = uppercaseEl.checked; + const hasNumber = numbersEl.checked; + const hasSymbol = symbolsEl.checked; -function getRandomLower() { - return String.fromCharCode(Math.floor(Math.random() * 26) + 97); -} - -function getRandomUpper() { - return String.fromCharCode(Math.floor(Math.random() * 26) + 65); -} - -function getRandomNumber() { - return String.fromCharCode(Math.floor(Math.random() * 10) + 48); -} - -function getRandomSymbol() { - const symbols = "!@#$%^&*(){}[]=<>/,."; - return symbols[Math.floor(Math.random() * symbols.length)]; -} + resultEl.innerText = generatePassword( + hasLower, + hasUpper, + hasNumber, + hasSymbol, + length, + ); +}); diff --git a/Source-Code/PasswordGenerator/style.css b/Source-Code/PasswordGenerator/style.css index e888c47..304d22d 100644 --- a/Source-Code/PasswordGenerator/style.css +++ b/Source-Code/PasswordGenerator/style.css @@ -7,7 +7,7 @@ body { background: linear-gradient(to right, #e762ea, #b3f4f0); color: rgb(255, 255, 255); - font-family: 'Muli'; + font-family: 'Courier New', Courier, monospace; font-weight: 500; display: flex; flex-direction: column; @@ -27,7 +27,7 @@ h2 { .container { background-color: #2bd3df; - box-shadow: 0px 2px 10px rgba(255, 255, 255, 0.2); + box-shadow: 0 2px 10px rgba(255, 255, 255, 0.2); padding: 20px; width: 350px; max-width: 100%; @@ -52,15 +52,6 @@ h2 { max-width: calc(100% - 40px); } -.result-container .btn { - position: absolute; - top: 5px; - right: 5px; - width: 40px; - height: 40px; - font-size: 20px; -} - .btn { border: none; background-color: #2c085c; @@ -70,6 +61,15 @@ h2 { cursor: pointer; } +.result-container .btn { + position: absolute; + top: 5px; + right: 5px; + width: 40px; + height: 40px; + font-size: 20px; +} + .btn-large { display: block; width: 100%; @@ -80,4 +80,4 @@ h2 { justify-content: space-between; align-items: center; margin: 15px 0; -} \ No newline at end of file +} From 0b3f72a362134460faa1a61cd2acaa747f904e20 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 30 Aug 2024 16:29:12 +0530 Subject: [PATCH 058/109] used Es6 format --- Source-Code/PasswordGenerator/script.js | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Source-Code/PasswordGenerator/script.js b/Source-Code/PasswordGenerator/script.js index 846ae96..3af8d1c 100644 --- a/Source-Code/PasswordGenerator/script.js +++ b/Source-Code/PasswordGenerator/script.js @@ -24,22 +24,16 @@ clipboardEl.addEventListener('click', () => { alert('Password copied to clipboard!'); }); -function getRandomLower() { - return String.fromCharCode(Math.floor(Math.random() * 26) + 97); -} +const getRandomLower = () => String.fromCharCode(Math.floor(Math.random() * 26) + 97); -function getRandomUpper() { - return String.fromCharCode(Math.floor(Math.random() * 26) + 65); -} +const getRandomUpper = () => String.fromCharCode(Math.floor(Math.random() * 26) + 65); -function getRandomNumber() { - return String.fromCharCode(Math.floor(Math.random() * 10) + 48); -} +const getRandomNumber = () => String.fromCharCode(Math.floor(Math.random() * 10) + 48); -function getRandomSymbol() { +const getRandomSymbol = () => { const symbols = '!@#$%^&*(){}[]=<>/,.'; return symbols[Math.floor(Math.random() * symbols.length)]; -} +}; const randomFunc = { lower: getRandomLower, @@ -47,7 +41,7 @@ const randomFunc = { number: getRandomNumber, symbol: getRandomSymbol, }; -function generatePassword(lower, upper, number, symbol, length) { +const generatePassword = (lower, upper, number, symbol, length) => { let generatedPassword = ''; const typesCount = lower + upper + number + symbol; const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter( @@ -68,7 +62,7 @@ function generatePassword(lower, upper, number, symbol, length) { const finalPassword = generatedPassword.slice(0, length); return finalPassword; -} +}; generateEl.addEventListener('click', () => { const length = +lengthEl.value; const hasLower = lowercaseEl.checked; From ef8f6c1abb5596c191e3cb5604e42e15f4351ad8 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 30 Aug 2024 16:38:56 +0530 Subject: [PATCH 059/109] update readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index aa0be88..aec14bb 100644 --- a/README.md +++ b/README.md @@ -386,6 +386,17 @@ In order to run this project you need: +
  • +
    +Password Generator +

    The Password Generator App is a web application that allows users to create secure, customizable passwords based on user-defined criteria such as length and character types. It offers a simple interface for generating and copying passwords to the clipboard. This tool enhances online security by providing strong, random passwords.

    + +
    +
  • +

    (back to top)

    From 3f1e832f5678c18c1ec3128b5e998f87263f7326 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Tue, 17 Dec 2024 00:37:24 +0530 Subject: [PATCH 060/109] create a templete for project --- Source-Code/NotesKeeper/index.html | 12 ++++++++++++ Source-Code/NotesKeeper/script.js | 0 Source-Code/NotesKeeper/style.css | 0 3 files changed, 12 insertions(+) create mode 100644 Source-Code/NotesKeeper/index.html create mode 100644 Source-Code/NotesKeeper/script.js create mode 100644 Source-Code/NotesKeeper/style.css diff --git a/Source-Code/NotesKeeper/index.html b/Source-Code/NotesKeeper/index.html new file mode 100644 index 0000000..5914054 --- /dev/null +++ b/Source-Code/NotesKeeper/index.html @@ -0,0 +1,12 @@ + + + + + + Notes Keeper + + + + + + \ No newline at end of file diff --git a/Source-Code/NotesKeeper/script.js b/Source-Code/NotesKeeper/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/NotesKeeper/style.css b/Source-Code/NotesKeeper/style.css new file mode 100644 index 0000000..e69de29 From 51bed6bc08d5eca8ff04c85a469a6d701da8a4c9 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Tue, 17 Dec 2024 00:53:44 +0530 Subject: [PATCH 061/109] Add the project --- Source-Code/NotesKeeper/index.html | 23 ++++++ Source-Code/NotesKeeper/script.js | 65 +++++++++++++++++ Source-Code/NotesKeeper/style.css | 109 +++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+) diff --git a/Source-Code/NotesKeeper/index.html b/Source-Code/NotesKeeper/index.html index 5914054..3e6a629 100644 --- a/Source-Code/NotesKeeper/index.html +++ b/Source-Code/NotesKeeper/index.html @@ -7,6 +7,29 @@ + + +
    +

    Welcome to Notes App

    +
    +
    +
    + +
    +
    +

    Your Notes

    +
    +
    No notes added yet.
    +
    \ No newline at end of file diff --git a/Source-Code/NotesKeeper/script.js b/Source-Code/NotesKeeper/script.js index e69de29..77bc42a 100644 --- a/Source-Code/NotesKeeper/script.js +++ b/Source-Code/NotesKeeper/script.js @@ -0,0 +1,65 @@ +console.log('Welcome to Magic Notes App!'); + +// Function Declaration Before Use +function showNotes() { + const notesObj = JSON.parse(localStorage.getItem('notes')) || []; + const notesElem = document.getElementById('notes'); + + if (notesObj.length === 0) { + notesElem.innerHTML = 'No notes added yet.'; + return; + } + + notesElem.innerHTML = notesObj + .map( + (note, index) => ` +
    +

    Note ${index + 1}

    +

    ${note}

    + +
    + `, + ) + .join(''); +} + +// Event Listener for Add Note Button +document.getElementById('myBtn').addEventListener('click', () => { + const textArea = document.getElementById('textarea'); + const noteContent = textArea.value.trim(); + if (!noteContent) { + alert('Please enter a note!'); + return; + } + + const notesObj = JSON.parse(localStorage.getItem('notes')) || []; + notesObj.push(noteContent); + localStorage.setItem('notes', JSON.stringify(notesObj)); + textArea.value = ''; + showNotes(); +}); + +// Delete Note Function +// eslint-disable-next-line no-unused-vars +function deleteNote(index) { + const notesObj = JSON.parse(localStorage.getItem('notes')) || []; + notesObj.splice(index, 1); + localStorage.setItem('notes', JSON.stringify(notesObj)); + showNotes(); +} + +// Search Notes +document.getElementById('search').addEventListener('input', function () { + const inputVal = this.value.toLowerCase().trim(); + const noteBoxes = document.getElementsByClassName('noteBox'); + + Array.from(noteBoxes).forEach((element) => { + const boxTxt = element + .querySelector('.paraHeading') + .innerText.toLowerCase(); + element.style.display = boxTxt.includes(inputVal) ? 'block' : 'none'; + }); +}); + +// Initial Call +showNotes(); diff --git a/Source-Code/NotesKeeper/style.css b/Source-Code/NotesKeeper/style.css index e69de29..b6f5f85 100644 --- a/Source-Code/NotesKeeper/style.css +++ b/Source-Code/NotesKeeper/style.css @@ -0,0 +1,109 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + background-color: #f4f4f9; + padding: 20px; +} + +.navbar { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #333; + padding: 10px 20px; + color: white; +} + +.navbar #logo { + font-size: 24px; + font-weight: bold; +} + +.navbar ul { + list-style: none; + display: flex; +} + +.navbar ul li { + margin-left: 20px; +} + +.navbar ul li a { + color: white; + text-decoration: none; + font-size: 18px; +} + +.form-group input { + padding: 5px; + margin-right: 10px; +} + +.form-group button { + padding: 5px 10px; + background-color: #ff6700; + border: none; + color: white; + cursor: pointer; +} + +.container { + margin-top: 30px; +} + +.note-input { + background: white; + padding: 20px; + border-radius: 5px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +.note-input label { + font-size: 18px; + font-weight: bold; +} + +.note-input textarea { + width: 100%; + padding: 10px; + margin-top: 10px; + border: 1px solid #ccc; + border-radius: 5px; + resize: none; +} + +.note-input button { + margin-top: 10px; + padding: 10px 20px; + background-color: #007bff; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; +} + +.hrStyle { + margin: 20px 0; +} + +.notesBox { + background: white; + display: flex; + gap: 30px; + padding: 20px; + border-radius: 5px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + min-height: 100px; + text-align: center; + font-size: 18px; + color: #555; +} + +.buttonHeading { + padding: 5px 20px; +} From ccee6d68dda4145d0fbde50f300803d28b32bb59 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Tue, 17 Dec 2024 00:56:41 +0530 Subject: [PATCH 062/109] update the readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index aec14bb..ad3dbb5 100644 --- a/README.md +++ b/README.md @@ -397,6 +397,17 @@ In order to run this project you need: +
  • +
    +Notes Keeper +

    The Notes Keeper App is a web-based application designed for creating, storing, and managing personal notes. It offers a simple and intuitive interface for adding, searching, and deleting notes using local storage, ensuring data persistence across sessions.

    + +
    +
  • +

    (back to top)

    From d9ab3e87b5198fa69c416d2b339c936bbc4441b0 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Tue, 17 Dec 2024 01:26:13 +0530 Subject: [PATCH 063/109] add the project --- Source-Code/CurrencyConverter/index.html | 33 +++++++++++++++++ Source-Code/CurrencyConverter/script.js | 27 ++++++++++++++ Source-Code/CurrencyConverter/style.css | 46 ++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 Source-Code/CurrencyConverter/index.html create mode 100644 Source-Code/CurrencyConverter/script.js create mode 100644 Source-Code/CurrencyConverter/style.css diff --git a/Source-Code/CurrencyConverter/index.html b/Source-Code/CurrencyConverter/index.html new file mode 100644 index 0000000..52d77f6 --- /dev/null +++ b/Source-Code/CurrencyConverter/index.html @@ -0,0 +1,33 @@ + + + + + + Currency Converter + + + +
    +

    Currency Converter

    +
    + + + to + + +
    +
    +
    + + + \ No newline at end of file diff --git a/Source-Code/CurrencyConverter/script.js b/Source-Code/CurrencyConverter/script.js new file mode 100644 index 0000000..afb6869 --- /dev/null +++ b/Source-Code/CurrencyConverter/script.js @@ -0,0 +1,27 @@ +document.getElementById('convert').addEventListener('click', () => { + const amount = document.getElementById('amount').value; + const fromCurrency = document.getElementById('from-currency').value; + const toCurrency = document.getElementById('to-currency').value; + + if (amount === '' || Number.isNaN(Number(amount))) { + alert('Please enter a valid amount'); + return; + } + + const apiUrl = `https://api.exchangerate-api.com/v4/latest/${fromCurrency}`; + + fetch(apiUrl) + .then((response) => response.json()) + .then((data) => { + const exchangeRate = data.rates[toCurrency]; + const convertedAmount = (amount * exchangeRate).toFixed(2); + document.getElementById( + 'result', + ).innerText = `${amount} ${fromCurrency} = ${convertedAmount} ${toCurrency}`; + }) + .catch((error) => { + document.getElementById( + 'result', + ).innerText = `Error fetching exchange rates. ${error}Try again later.`; + }); +}); diff --git a/Source-Code/CurrencyConverter/style.css b/Source-Code/CurrencyConverter/style.css new file mode 100644 index 0000000..e5cf912 --- /dev/null +++ b/Source-Code/CurrencyConverter/style.css @@ -0,0 +1,46 @@ +body { + font-family: Arial, sans-serif; + background-color: #f4f4f4; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} + +.container { + background-color: white; + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + width: 400px; + text-align: center; +} + +h1 { + margin-bottom: 20px; +} + +input, select, button { + margin: 10px 0; + padding: 10px; + font-size: 16px; +} + +button { + background-color: #4CAF50; + color: white; + border: none; + cursor: pointer; +} + +button:hover { + background-color: #45a049; +} + +#result { + margin-top: 20px; + font-size: 18px; + font-weight: bold; +} From 7bcce3db035d0c619bd2b639e0722b174720b96b Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Tue, 17 Dec 2024 01:26:54 +0530 Subject: [PATCH 064/109] correct the css --- Source-Code/CurrencyConverter/style.css | 56 +++++++++++++------------ 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/Source-Code/CurrencyConverter/style.css b/Source-Code/CurrencyConverter/style.css index e5cf912..e318503 100644 --- a/Source-Code/CurrencyConverter/style.css +++ b/Source-Code/CurrencyConverter/style.css @@ -1,46 +1,48 @@ body { - font-family: Arial, sans-serif; - background-color: #f4f4f4; - margin: 0; - padding: 0; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; + font-family: Arial, sans-serif; + background-color: #f4f4f4; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; } .container { - background-color: white; - padding: 20px; - border-radius: 10px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - width: 400px; - text-align: center; + background-color: white; + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + width: 400px; + text-align: center; } h1 { - margin-bottom: 20px; + margin-bottom: 20px; } -input, select, button { - margin: 10px 0; - padding: 10px; - font-size: 16px; +input, +select, +button { + margin: 10px 0; + padding: 10px; + font-size: 16px; } button { - background-color: #4CAF50; - color: white; - border: none; - cursor: pointer; + background-color: #4caf50; + color: white; + border: none; + cursor: pointer; } button:hover { - background-color: #45a049; + background-color: #45a049; } #result { - margin-top: 20px; - font-size: 18px; - font-weight: bold; + margin-top: 20px; + font-size: 18px; + font-weight: bold; } From a94bc17434916dcd11c4248efdcc50dcedc1839f Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Tue, 17 Dec 2024 01:29:31 +0530 Subject: [PATCH 065/109] updat eteh readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index ad3dbb5..7d52ee5 100644 --- a/README.md +++ b/README.md @@ -408,6 +408,17 @@ In order to run this project you need: +
  • +
    +Currency Converter +

    This project is a Currency Converter application built using HTML, CSS, and JavaScript. It allows users to convert one currency into another by inputting an amount and selecting the currencies they want to convert from and to.

    + +
    +
  • +

    (back to top)

    From 9f278323e1155d61cb3375f690d7b7b091d89a06 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 19 Dec 2024 21:53:52 +0530 Subject: [PATCH 066/109] Add the project --- Source-Code/JustRelax/index.html | 24 +++++++ Source-Code/JustRelax/script.js | 32 +++++++++ Source-Code/JustRelax/style.css | 116 +++++++++++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 Source-Code/JustRelax/index.html create mode 100644 Source-Code/JustRelax/script.js create mode 100644 Source-Code/JustRelax/style.css diff --git a/Source-Code/JustRelax/index.html b/Source-Code/JustRelax/index.html new file mode 100644 index 0000000..796e484 --- /dev/null +++ b/Source-Code/JustRelax/index.html @@ -0,0 +1,24 @@ + + + + + + + Just Relax App + + + + +

    Just Relax !!

    +
    +
    +

    +
    + +
    +
    +
    + + + + \ No newline at end of file diff --git a/Source-Code/JustRelax/script.js b/Source-Code/JustRelax/script.js new file mode 100644 index 0000000..e7098fe --- /dev/null +++ b/Source-Code/JustRelax/script.js @@ -0,0 +1,32 @@ +/* eslint-disable no-use-before-define */ +const container = document.querySelector('.container'); +const text = document.querySelector('#text'); + +const TOTAL_TIME = 7500; +const BREATHE_TIME = (TOTAL_TIME / 5) * 2; +const HOLD_TIME = TOTAL_TIME / 7; + +// Start the animation +const startBreathingAnimation = () => { + animateBreathing(); + setInterval(animateBreathing, TOTAL_TIME); +}; + +const animateBreathing = () => { + text.textContent = 'Breathe In!'; + container.classList.add('grow'); + container.classList.remove('shrink'); + + setTimeout(() => { + text.textContent = 'Hold...'; + + setTimeout(() => { + text.textContent = 'Breathe Out!'; + container.classList.add('shrink'); + container.classList.remove('grow'); + }, HOLD_TIME); + }, BREATHE_TIME); +}; + +// Initialize the animation +startBreathingAnimation(); diff --git a/Source-Code/JustRelax/style.css b/Source-Code/JustRelax/style.css new file mode 100644 index 0000000..447fe0c --- /dev/null +++ b/Source-Code/JustRelax/style.css @@ -0,0 +1,116 @@ +@import url('https://fonts.googleapis.com/css2?family=Dancing+Script:wght@550;700&display=swap'); + +* { + box-sizing: border-box; +} + +body { + background: linear-gradient(90deg, #5567b7, #53a0ad); + color: rgb(243, 250, 235); + font-family: 'Dancing Script', sans-serif; + font-size: large; + font-weight: 500; + min-height: 100vh; + overflow: hidden; + display: flex; + align-items: center; + flex-direction: column; + margin: 0; +} + +.container { + display: flex; + align-items: center; + justify-content: center; + height: 300px; + width: 300px; + margin: auto; + position: relative; + transform: scale(1); +} + +.gradient-circle { + background: + conic-gradient( + #5567b7 0%, + #954ca4 40%, + #fff 40%, + #fff 60%, + #53afb3 60%, + #53a0ad 100% + ); + height: 320px; + width: 320px; + position: absolute; + top: -10px; + left: -10px; + z-index: -2; + border-radius: 50%; +} + +.circle { + background-color: rgb(2, 16, 43); + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -1; + border-radius: 50%; +} + +.pointer-container { + position: absolute; + top: -40px; + left: 140px; + width: 20px; + height: 190px; + animation: rotate 7.5s linear forwards infinite; + transform-origin: bottom center; +} + +.pointer { + background-color: lavender; + border-radius: 50%; + height: 20px; + width: 20px; + display: block; +} + +.container.grow { + animation: grow 3s linear forwards; +} + +.container.shrink { + animation: shrink 3s linear forwards; +} + +@keyframes rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +@keyframes grow { + from { + transform: scale(1); + } + + to { + transform: scale(1.2); + } +} + +@keyframes shrink { + from { + transform: scale(1.2); + } + + to { + transform: scale(1); + } +} From 825e5b1132407155eadd4c70bb0116d57465262a Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 19 Dec 2024 21:57:56 +0530 Subject: [PATCH 067/109] update the with the project --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 7d52ee5..a57a985 100644 --- a/README.md +++ b/README.md @@ -419,6 +419,17 @@ In order to run this project you need: +
  • +
    +Just Relax +

    The Just Relax App is a breathing exercise web application built with HTML, CSS, and JavaScript (ES6+). It guides users through a breathing exercise by animating visual cues and displaying text prompts such as "Breathe In," "Hold," and "Breathe Out." This helps users relax and practice mindfulness.

    + +
    +
  • +

    (back to top)

    From 6edc85f7d721634cec80211b8d0c352dd5d53119 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 19 Dec 2024 22:32:07 +0530 Subject: [PATCH 068/109] add the recipe app --- Source-Code/RecipeApp/index.html | 19 ++++++++++ Source-Code/RecipeApp/script.js | 38 ++++++++++++++++++++ Source-Code/RecipeApp/style.css | 61 ++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 Source-Code/RecipeApp/index.html create mode 100644 Source-Code/RecipeApp/script.js create mode 100644 Source-Code/RecipeApp/style.css diff --git a/Source-Code/RecipeApp/index.html b/Source-Code/RecipeApp/index.html new file mode 100644 index 0000000..51ba5bf --- /dev/null +++ b/Source-Code/RecipeApp/index.html @@ -0,0 +1,19 @@ + + + + + + Recipe App + + + +

    Recipe App

    + +
    +
    + + + \ No newline at end of file diff --git a/Source-Code/RecipeApp/script.js b/Source-Code/RecipeApp/script.js new file mode 100644 index 0000000..de13836 --- /dev/null +++ b/Source-Code/RecipeApp/script.js @@ -0,0 +1,38 @@ +/* eslint-disable no-use-before-define */ + +const searchRecipes = async () => { + const query = document.getElementById('search-input').value; + if (!query) return; + + try { + const response = await fetch( + `https://www.themealdb.com/api/json/v1/1/search.php?s=${query}`, + ); + const data = await response.json(); + displayRecipes(data.meals); + } catch (error) { + console.error('Error fetching recipes:', error); + } +}; + +const displayRecipes = (meals) => { + const recipesContainer = document.getElementById('recipes'); + recipesContainer.innerHTML = ''; + + if (!meals) { + recipesContainer.innerHTML = '

    No recipes found!

    '; + return; + } + + meals.forEach((meal) => { + const recipe = document.createElement('div'); + recipe.className = 'recipe'; + recipe.innerHTML = ` + ${meal.strMeal} +

    ${meal.strMeal}

    + View Recipe + `; + recipesContainer.appendChild(recipe); + }); +}; +document.getElementById('search').addEventListener('click', searchRecipes); diff --git a/Source-Code/RecipeApp/style.css b/Source-Code/RecipeApp/style.css new file mode 100644 index 0000000..3cea222 --- /dev/null +++ b/Source-Code/RecipeApp/style.css @@ -0,0 +1,61 @@ +body { + font-family: Arial, sans-serif; + background-color: #f8f8f8; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +h1 { + text-align: center; + color: #333; +} + +.search-box { + display: flex; + gap: 20px; +} + +input[type="text"] { + min-width: 300px; + max-width: 400px; + padding: 10px; + font-size: 16px; + border: 1px solid #ccc; + border-radius: 4px; +} + +button { + padding: 10px 20px; + font-size: 16px; + background: #28a745; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; +} + +button:hover { + background: #218838; +} + +.recipes { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 20px; +} + +.recipe { + background: #f4f4f4; + padding: 15px; + border-radius: 8px; + text-align: center; +} + +.recipe img { + width: 100%; + border-radius: 8px; +} From c2a2ce0de73b14a5b597ba37126d7a8d0ad3280b Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 19 Dec 2024 23:16:45 +0530 Subject: [PATCH 069/109] update the readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index a57a985..f34710e 100644 --- a/README.md +++ b/README.md @@ -430,6 +430,17 @@ In order to run this project you need: +
  • +
    +Recipe App +

    The Recipe App is designed to make cooking enjoyable and easy for everyone, from beginners to seasoned chefs. Discover a wide range of recipes, create your own, and share them with the community. With an intuitive interface and smart features, it helps you explore new dishes, organize your favorite recipes, and plan meals for any occasion.

    + +
    +
  • +

    (back to top)

    From 14fa618b4c2daff4de6845871395ac19614267c1 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 01:30:42 +0530 Subject: [PATCH 070/109] Add the features for music --- Source-Code/MusicPlayer/index.html | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Source-Code/MusicPlayer/index.html diff --git a/Source-Code/MusicPlayer/index.html b/Source-Code/MusicPlayer/index.html new file mode 100644 index 0000000..1c3f58f --- /dev/null +++ b/Source-Code/MusicPlayer/index.html @@ -0,0 +1,35 @@ + + + + + + Music Player + + + +
    +

    Music Player

    +
    +

    No song playing

    + +
    + + + +
    + +
    +
    +

    Your Playlist

    +
      +
      +
      +

      Add Your Songs

      + + +
      +
      + + + + \ No newline at end of file From 5d00a75af34331d8f36fb64a83645d9fe1c74a01 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 01:31:16 +0530 Subject: [PATCH 071/109] Add the styles for music player --- Source-Code/MusicPlayer/style.css | 86 +++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Source-Code/MusicPlayer/style.css diff --git a/Source-Code/MusicPlayer/style.css b/Source-Code/MusicPlayer/style.css new file mode 100644 index 0000000..9cc2090 --- /dev/null +++ b/Source-Code/MusicPlayer/style.css @@ -0,0 +1,86 @@ +/* styles.css */ +body { + font-family: Arial, sans-serif; + background-color: #1e1e2f; + color: #fff; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.music-player { + text-align: center; + background: #29293d; + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5); + width: 300px; +} + +.player h2 { + font-size: 18px; + margin-bottom: 20px; +} + +.controls { + display: flex; + justify-content: center; + gap: 15px; + margin-bottom: 15px; +} + +.controls button { + background: #3b3b57; + color: white; + border: none; + padding: 10px 15px; + border-radius: 5px; + cursor: pointer; + font-size: 16px; +} + +.add-song button { + background: #3b3b57; + color: white; + border: none; + padding: 10px; + margin-top: 10px; + border-radius: 5px; + cursor: pointer; +} + +.controls button:hover { + background: #50506b; +} + +#volume { + width: 100%; +} + +.song-list ul { + list-style: none; + padding: 0; + margin: 0; +} + +.song-list li { + background: #3b3b57; + padding: 10px; + margin: 5px 0; + border-radius: 5px; + cursor: pointer; +} + +.song-list li:hover { + background: #50506b; +} + +.add-song input { + margin-top: 10px; +} + +.add-song button:hover { + background: #50506b; +} From 295698abfff913511c40a60765ce095a3d89a66c Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 01:31:43 +0530 Subject: [PATCH 072/109] Add the functiaonality of the feature --- Source-Code/MusicPlayer/script.js | 95 +++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Source-Code/MusicPlayer/script.js diff --git a/Source-Code/MusicPlayer/script.js b/Source-Code/MusicPlayer/script.js new file mode 100644 index 0000000..980df0e --- /dev/null +++ b/Source-Code/MusicPlayer/script.js @@ -0,0 +1,95 @@ +// script.js + +const audio = document.getElementById('audio'); +const songTitle = document.getElementById('song-title'); +const playButton = document.getElementById('play'); +const nextButton = document.getElementById('next'); +const prevButton = document.getElementById('prev'); +const volumeControl = document.getElementById('volume'); +const playlist = document.getElementById('playlist'); +const fileInput = document.getElementById('file-input'); +const addSongButton = document.getElementById('add-song-btn'); + +const songs = []; +let currentSongIndex = 0; + +// Load song by index +const loadSong = (index) => { + const song = songs[index]; + audio.src = song.src; + songTitle.textContent = song.title; +}; + +// Play/Pause functionality +const togglePlay = () => { + if (audio.paused) { + audio.play(); + playButton.textContent = '⏸️'; + } else { + audio.pause(); + playButton.textContent = '▶️'; + } +}; + +// Next song +const nextSong = () => { + currentSongIndex = (currentSongIndex + 1) % songs.length; + loadSong(currentSongIndex); + audio.play(); + playButton.textContent = '⏸️'; +}; + +// Previous song +const prevSong = () => { + currentSongIndex = (currentSongIndex - 1 + songs.length) % songs.length; + loadSong(currentSongIndex); + audio.play(); + playButton.textContent = '⏸️'; +}; + +// Volume control +const changeVolume = () => { + audio.volume = volumeControl.value; +}; + +// Update playlist display +const updatePlaylist = () => { + playlist.innerHTML = ''; + songs.forEach((song, index) => { + const li = document.createElement('li'); + li.textContent = song.title; + li.addEventListener('click', () => { + currentSongIndex = index; + loadSong(currentSongIndex); + audio.play(); + playButton.textContent = '⏸️'; + }); + playlist.appendChild(li); + }); +}; +// Add a song to the playlist +function addSong(file) { + const song = { + title: file.name, + src: URL.createObjectURL(file), + }; + songs.push(song); + updatePlaylist(); +} + +// Event listeners +playButton.addEventListener('click', togglePlay); +nextButton.addEventListener('click', nextSong); +prevButton.addEventListener('click', prevSong); +volumeControl.addEventListener('input', changeVolume); + +addSongButton.addEventListener('click', () => { + const file = fileInput.files[0]; + if (file) { + addSong(file); + fileInput.value = ''; // Reset file input + } +}); + +// Initialize player with no songs +songTitle.textContent = 'No song playing'; From cf5d744c0fa82dfc2c593cf12c43c247fbcfe2ac Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 01:31:58 +0530 Subject: [PATCH 073/109] Update the readme file --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index f34710e..72f2cb3 100644 --- a/README.md +++ b/README.md @@ -441,6 +441,17 @@ In order to run this project you need: +
    • +
      +Music Player +

      A simple, user-friendly Music Player built using HTML, CSS, and JavaScript. This app allows users to upload and manage their favorite songs dynamically, creating a personalized playlist.

      + +
      +
    • +

      (back to top)

      From d9cb1e261e690f0c95b0982d47c4b424f55c28aa Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:09:06 +0530 Subject: [PATCH 074/109] Add the project --- Source-Code/QuizApp/index.html | 35 +++++++++++ Source-Code/QuizApp/script.js | 107 +++++++++++++++++++++++++++++++++ Source-Code/QuizApp/style.css | 85 ++++++++++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 Source-Code/QuizApp/index.html create mode 100644 Source-Code/QuizApp/script.js create mode 100644 Source-Code/QuizApp/style.css diff --git a/Source-Code/QuizApp/index.html b/Source-Code/QuizApp/index.html new file mode 100644 index 0000000..437eb41 --- /dev/null +++ b/Source-Code/QuizApp/index.html @@ -0,0 +1,35 @@ + + + + + + Quiz App + + + +
      +

      Quiz App

      +
      +
      +

      Loading question...

      +
      +
      + + + + +
      +
      + +
      +
      + +
      + + + + diff --git a/Source-Code/QuizApp/script.js b/Source-Code/QuizApp/script.js new file mode 100644 index 0000000..6a5b71a --- /dev/null +++ b/Source-Code/QuizApp/script.js @@ -0,0 +1,107 @@ +const questions = [ + { + question: 'What is the capital of France?', + answers: ['Berlin', 'Madrid', 'Paris', 'Rome'], + correct: 2, + }, + { + question: 'Which planet is known as the Red Planet?', + answers: ['Earth', 'Mars', 'Jupiter', 'Saturn'], + correct: 1, + }, + { + question: 'What is the largest ocean on Earth?', + answers: ['Atlantic', 'Indian', 'Arctic', 'Pacific'], + correct: 3, + }, + { + question: "Who wrote 'Romeo and Juliet'?", + answers: ['Shakespeare', 'Dickens', 'Hemingway', 'Austen'], + correct: 0, + }, +]; + +let currentQuestionIndex = 0; +let score = 0; + +const questionElement = document.getElementById('question'); +const answerButtons = document.querySelectorAll('.answer-btn'); +const nextButton = document.getElementById('next-btn'); +const resultContainer = document.getElementById('result-container'); +const restartButton = document.getElementById('restart-btn'); +const scoreElement = document.getElementById('score'); + +// Load question and answers +const loadQuestion = () => { + const currentQuestion = questions[currentQuestionIndex]; + questionElement.textContent = currentQuestion.question; + + answerButtons.forEach((button, index) => { + button.textContent = currentQuestion.answers[index]; + button.disabled = false; + button.style.backgroundColor = '#4CAF50'; // Reset button color + }); + + nextButton.disabled = true; // Disable next button until an answer is selected +}; + +// Handle answer selection +const handleAnswerClick = (index) => { + const currentQuestion = questions[currentQuestionIndex]; + + if (index === currentQuestion.correct) { + score += 1; + } + + // Disable all buttons after an answer is selected + answerButtons.forEach((button, i) => { + button.disabled = true; + if (i === currentQuestion.correct) { + button.style.backgroundColor = '#4CAF50'; // Correct answer + } else { + button.style.backgroundColor = '#f44336'; // Incorrect answers + } + }); + + nextButton.disabled = false; // Enable next button +}; + +// Show quiz result +const showResult = () => { + document.getElementById('quiz-box').classList.add('hidden'); + resultContainer.classList.remove('hidden'); + scoreElement.textContent = `You scored ${score} out of ${questions.length}`; +}; + +// Move to next question +const nextQuestion = () => { + currentQuestionIndex += 1; + if (currentQuestionIndex < questions.length) { + loadQuestion(); + } else { + showResult(); + } +}; + +// Restart the quiz +const restartQuiz = () => { + currentQuestionIndex = 0; + score = 0; + resultContainer.classList.add('hidden'); + document.getElementById('quiz-box').classList.remove('hidden'); + loadQuestion(); +}; + +// Add event listeners to answer buttons +answerButtons.forEach((button, index) => { + button.addEventListener('click', () => handleAnswerClick(index)); +}); + +// Add event listener to next button +nextButton.addEventListener('click', nextQuestion); + +// Add event listener to restart button +restartButton.addEventListener('click', restartQuiz); + +// Start the quiz +loadQuestion(); diff --git a/Source-Code/QuizApp/style.css b/Source-Code/QuizApp/style.css new file mode 100644 index 0000000..e492d30 --- /dev/null +++ b/Source-Code/QuizApp/style.css @@ -0,0 +1,85 @@ +/* styles.css */ +body { + font-family: Arial, sans-serif; + background-color: #f4f4f9; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + } + + .quiz-container { + background: #fff; + border-radius: 8px; + padding: 20px; + width: 300px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); + } + + h1 { + text-align: center; + color: #333; + } + + #question-container { + margin-bottom: 20px; + } + + #answer-container { + margin-bottom: 20px; + } + + .answer-btn { + background-color: #4CAF50; + color: white; + padding: 10px; + width: 100%; + margin: 5px 0; + border: none; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s; + } + + .answer-btn:hover { + background-color: #45a049; + } + + #next-btn { + background-color: #008CBA; + color: white; + padding: 10px; + width: 100%; + border: none; + border-radius: 5px; + cursor: pointer; + font-size: 16px; + } + + #next-btn:disabled { + background-color: #ccc; + } + + .hidden { + display: none; + } + + #result-container { + text-align: center; + } + + #restart-btn { + background-color: #f44336; + color: white; + padding: 10px; + border: none; + border-radius: 5px; + cursor: pointer; + width: 100%; + } + + #restart-btn:hover { + background-color: #d32f2f; + } + \ No newline at end of file From 9ade7a4bf0d8265bc5d45388ad51781c1a519df1 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:11:39 +0530 Subject: [PATCH 075/109] update the readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 72f2cb3..76da17e 100644 --- a/README.md +++ b/README.md @@ -452,6 +452,17 @@ In order to run this project you need: +
    • +
      +Quiz App +

      A simple quiz app built using HTML, CSS, and JavaScript. The app presents multiple-choice questions, and the user can select answers to test their knowledge. At the end of the quiz, the user's score is displayed along with an option to restart the quiz.

      + +
      +
    • +

      (back to top)

      From 17e6d58018ce3dbe4fdf150c36a02e37af95b108 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:15:15 +0530 Subject: [PATCH 076/109] solve linter errors --- Source-Code/QuizApp/style.css | 165 +++++++++++++++++----------------- 1 file changed, 82 insertions(+), 83 deletions(-) diff --git a/Source-Code/QuizApp/style.css b/Source-Code/QuizApp/style.css index e492d30..391b56c 100644 --- a/Source-Code/QuizApp/style.css +++ b/Source-Code/QuizApp/style.css @@ -1,85 +1,84 @@ /* styles.css */ body { - font-family: Arial, sans-serif; - background-color: #f4f4f9; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - margin: 0; - } - - .quiz-container { - background: #fff; - border-radius: 8px; - padding: 20px; - width: 300px; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); - } - - h1 { - text-align: center; - color: #333; - } - - #question-container { - margin-bottom: 20px; - } - - #answer-container { - margin-bottom: 20px; - } - - .answer-btn { - background-color: #4CAF50; - color: white; - padding: 10px; - width: 100%; - margin: 5px 0; - border: none; - border-radius: 5px; - cursor: pointer; - transition: background-color 0.3s; - } - - .answer-btn:hover { - background-color: #45a049; - } - - #next-btn { - background-color: #008CBA; - color: white; - padding: 10px; - width: 100%; - border: none; - border-radius: 5px; - cursor: pointer; - font-size: 16px; - } - - #next-btn:disabled { - background-color: #ccc; - } - - .hidden { - display: none; - } - - #result-container { - text-align: center; - } - - #restart-btn { - background-color: #f44336; - color: white; - padding: 10px; - border: none; - border-radius: 5px; - cursor: pointer; - width: 100%; - } - - #restart-btn:hover { - background-color: #d32f2f; - } - \ No newline at end of file + font-family: Arial, sans-serif; + background-color: #f4f4f9; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.quiz-container { + background: #fff; + border-radius: 8px; + padding: 20px; + width: 300px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); +} + +h1 { + text-align: center; + color: #333; +} + +#question-container { + margin-bottom: 20px; +} + +#answer-container { + margin-bottom: 20px; +} + +.answer-btn { + background-color: #4caf50; + color: white; + padding: 10px; + width: 100%; + margin: 5px 0; + border: none; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s; +} + +.answer-btn:hover { + background-color: #45a049; +} + +#next-btn { + background-color: #008cba; + color: white; + padding: 10px; + width: 100%; + border: none; + border-radius: 5px; + cursor: pointer; + font-size: 16px; +} + +#next-btn:disabled { + background-color: #ccc; +} + +.hidden { + display: none; +} + +#result-container { + text-align: center; +} + +#restart-btn { + background-color: #f44336; + color: white; + padding: 10px; + border: none; + border-radius: 5px; + cursor: pointer; + width: 100%; +} + +#restart-btn:hover { + background-color: #d32f2f; +} From 4c14e71e61f78a808aee1261badff779aa690e93 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:27:59 +0530 Subject: [PATCH 077/109] Add the project --- Source-Code/MemeGenerator/index.html | 24 +++++++++++++ Source-Code/MemeGenerator/script.js | 47 +++++++++++++++++++++++++ Source-Code/MemeGenerator/style.css | 52 ++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 Source-Code/MemeGenerator/index.html create mode 100644 Source-Code/MemeGenerator/script.js create mode 100644 Source-Code/MemeGenerator/style.css diff --git a/Source-Code/MemeGenerator/index.html b/Source-Code/MemeGenerator/index.html new file mode 100644 index 0000000..241acb9 --- /dev/null +++ b/Source-Code/MemeGenerator/index.html @@ -0,0 +1,24 @@ + + + + + + Meme Generator + + + +
      +

      Random Meme Generator

      +
      + Random Meme +
      +
      + + + +
      +
      + + + + diff --git a/Source-Code/MemeGenerator/script.js b/Source-Code/MemeGenerator/script.js new file mode 100644 index 0000000..b505ede --- /dev/null +++ b/Source-Code/MemeGenerator/script.js @@ -0,0 +1,47 @@ +const memeImage = document.getElementById('meme-image'); +const newMemeButton = document.getElementById('new-meme'); +const downloadMemeButton = document.getElementById('download-meme'); +const shareMemeButton = document.getElementById('share-meme'); + +// Fetch random meme from the API +async function fetchMeme() { + try { + const response = await fetch('https://api.imgflip.com/get_memes'); + const data = await response.json(); + const { memes } = data.data; + const randomMeme = memes[Math.floor(Math.random() * memes.length)]; + memeImage.src = randomMeme.url; + } catch (error) { + console.error('Error fetching meme:', error); + } +} + +// Download the meme +const downloadMeme = () => { + const memeUrl = memeImage.src; + if (memeUrl) { + const a = document.createElement('a'); + a.href = memeUrl; + a.download = 'meme.jpg'; + a.click(); + } +}; + +// Share the meme +const shareMeme = () => { + const memeUrl = memeImage.src; + if (memeUrl) { + const shareUrl = `https://twitter.com/intent/tweet?url=${encodeURIComponent( + memeUrl, + )}`; + window.open(shareUrl, '_blank'); + } +}; + +// Event listeners +newMemeButton.addEventListener('click', fetchMeme); +downloadMemeButton.addEventListener('click', downloadMeme); +shareMemeButton.addEventListener('click', shareMeme); + +// Load an initial meme on page load +fetchMeme(); diff --git a/Source-Code/MemeGenerator/style.css b/Source-Code/MemeGenerator/style.css new file mode 100644 index 0000000..99a578d --- /dev/null +++ b/Source-Code/MemeGenerator/style.css @@ -0,0 +1,52 @@ +/* styles.css */ +body { + font-family: Arial, sans-serif; + background-color: #f1f1f1; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + } + + .meme-container { + text-align: center; + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + width: 80%; + max-width: 500px; + } + + h1 { + color: #333; + } + + #meme-box img { + width: 100%; + height: auto; + border-radius: 8px; + margin: 20px 0; + } + + #meme-buttons button { + background-color: #4CAF50; + color: white; + padding: 10px 20px; + margin: 10px; + border: none; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s; + } + + #meme-buttons button:hover { + background-color: #45a049; + } + + #meme-buttons button:disabled { + background-color: #ccc; + cursor: not-allowed; + } + \ No newline at end of file From 2c21a8317b3b6e285d30cf615882b6b2089d6a19 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:28:25 +0530 Subject: [PATCH 078/109] solve linter error --- Source-Code/MemeGenerator/style.css | 99 ++++++++++++++--------------- 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/Source-Code/MemeGenerator/style.css b/Source-Code/MemeGenerator/style.css index 99a578d..921ae3a 100644 --- a/Source-Code/MemeGenerator/style.css +++ b/Source-Code/MemeGenerator/style.css @@ -1,52 +1,51 @@ /* styles.css */ body { - font-family: Arial, sans-serif; - background-color: #f1f1f1; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - margin: 0; - } - - .meme-container { - text-align: center; - background-color: #fff; - padding: 20px; - border-radius: 8px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - width: 80%; - max-width: 500px; - } - - h1 { - color: #333; - } - - #meme-box img { - width: 100%; - height: auto; - border-radius: 8px; - margin: 20px 0; - } - - #meme-buttons button { - background-color: #4CAF50; - color: white; - padding: 10px 20px; - margin: 10px; - border: none; - border-radius: 5px; - cursor: pointer; - transition: background-color 0.3s; - } - - #meme-buttons button:hover { - background-color: #45a049; - } - - #meme-buttons button:disabled { - background-color: #ccc; - cursor: not-allowed; - } - \ No newline at end of file + font-family: Arial, sans-serif; + background-color: #f1f1f1; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.meme-container { + text-align: center; + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + width: 80%; + max-width: 500px; +} + +h1 { + color: #333; +} + +#meme-box img { + width: 100%; + height: auto; + border-radius: 8px; + margin: 20px 0; +} + +#meme-buttons button { + background-color: #4caf50; + color: white; + padding: 10px 20px; + margin: 10px; + border: none; + border-radius: 5px; + cursor: pointer; + transition: background-color 0.3s; +} + +#meme-buttons button:hover { + background-color: #45a049; +} + +#meme-buttons button:disabled { + background-color: #ccc; + cursor: not-allowed; +} From 71fd4e7b25d4b797611c56252f3b857907afb3b4 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:31:18 +0530 Subject: [PATCH 079/109] update with description and demo link --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 76da17e..cda8db1 100644 --- a/README.md +++ b/README.md @@ -463,6 +463,17 @@ In order to run this project you need: +
    • +
      +Meme Generator +

      A fun and interactive Meme Generator app built using HTML, CSS, and JavaScript. This app fetches random memes from an API and displays them for the user to enjoy. It also provides options for users to download the meme or share it on social media.

      + +
      +
    • +

      (back to top)

      From 5d8ea78805b50c488c7101a1fdd9651fdb5b8207 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:44:37 +0530 Subject: [PATCH 080/109] Add the project --- Source-Code/TypingSpeedTest/index.html | 25 +++++++++ Source-Code/TypingSpeedTest/script.js | 63 ++++++++++++++++++++++ Source-Code/TypingSpeedTest/style.css | 75 ++++++++++++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 Source-Code/TypingSpeedTest/index.html create mode 100644 Source-Code/TypingSpeedTest/script.js create mode 100644 Source-Code/TypingSpeedTest/style.css diff --git a/Source-Code/TypingSpeedTest/index.html b/Source-Code/TypingSpeedTest/index.html new file mode 100644 index 0000000..ba0081c --- /dev/null +++ b/Source-Code/TypingSpeedTest/index.html @@ -0,0 +1,25 @@ + + + + + + Typing Speed Test + + + +
      +

      Typing Speed Test

      +
      +

      Click "Start" to begin!

      +
      + +
      +
      WPM: 0
      +
      Accuracy: 100%
      +
      + +
      + + + + diff --git a/Source-Code/TypingSpeedTest/script.js b/Source-Code/TypingSpeedTest/script.js new file mode 100644 index 0000000..4ff26f2 --- /dev/null +++ b/Source-Code/TypingSpeedTest/script.js @@ -0,0 +1,63 @@ +// Get the necessary elements +const startButton = document.getElementById('start-btn'); +const typedText = document.getElementById('typed-text'); +const randomText = document.getElementById('random-text'); +const wpmDisplay = document.getElementById('wpm'); +const accuracyDisplay = document.getElementById('accuracy'); + +const sampleTexts = [ + 'The quick brown fox jumps over the lazy dog.', + 'JavaScript is a versatile programming language.', + 'A journey of a thousand miles begins with a single step.', + 'To be or not to be, that is the question.', + 'Typing tests help improve typing speed and accuracy.', +]; + +let startTime; + +// Start the typing test +function startTest() { + const randomIndex = Math.floor(Math.random() * sampleTexts.length); + randomText.textContent = sampleTexts[randomIndex]; + typedText.disabled = false; + typedText.value = ''; + typedText.focus(); + startButton.disabled = true; + startTime = new Date().getTime(); + wpmDisplay.textContent = 'WPM: 0'; + accuracyDisplay.textContent = 'Accuracy: 100%'; +} + +// Calculate typing speed (WPM) and accuracy +function calculateResults() { + const typedValue = typedText.value; + const randomTextValue = randomText.textContent; + + // Calculate WPM + const timeTaken = (new Date().getTime() - startTime) / 1000; // in seconds + const wordsTyped = typedValue.split(' ').length; + const wpm = Math.round((wordsTyped / timeTaken) * 60); + + // Calculate accuracy + let correctChars = 0; + for (let i = 0; i < typedValue.length; i += 1) { + if (typedValue[i] === randomTextValue[i]) { + correctChars += 1; + } + } + const accuracy = Math.round((correctChars / typedValue.length) * 100); + + wpmDisplay.textContent = `WPM: ${wpm}`; + accuracyDisplay.textContent = `Accuracy: ${accuracy}%`; + + if (typedValue === randomTextValue) { + setTimeout(() => { + alert('Test Complete! Well done!'); + startButton.disabled = false; + }, 100); + } +} + +// Event listeners +startButton.addEventListener('click', startTest); +typedText.addEventListener('input', calculateResults); diff --git a/Source-Code/TypingSpeedTest/style.css b/Source-Code/TypingSpeedTest/style.css new file mode 100644 index 0000000..cff373b --- /dev/null +++ b/Source-Code/TypingSpeedTest/style.css @@ -0,0 +1,75 @@ +body { + font-family: Arial, sans-serif; + background-color: #f4f4f9; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.container { + text-align: center; + background-color: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + width: 60%; + max-width: 600px; +} + +h1 { + color: #333; +} + +.text-display { + margin: 20px 0; + font-size: 1.2em; + line-height: 1.5em; +} + +textarea { + width: 80%; + height: 100px; + padding: 10px; + font-size: 1.2em; + margin-bottom: 20px; + border-radius: 8px; + border: 1px solid #ccc; + resize: none; + outline: none; +} + +textarea:disabled { + background-color: #f0f0f0; +} + +.results { + margin-top: 20px; +} + +#start-btn { + background-color: #4caf50; + color: white; + padding: 10px 20px; + border: none; + border-radius: 5px; + cursor: pointer; + font-size: 1.1em; + transition: background-color 0.3s; +} + +#start-btn:hover { + background-color: #45a049; +} + +#start-btn:disabled { + background-color: #ccc; + cursor: not-allowed; +} + +#wpm, +#accuracy { + font-size: 1.2em; + margin: 5px 0; +} From d37c389f8dd735cc3184f9cadaee0871a62cadd3 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sun, 22 Dec 2024 02:49:08 +0530 Subject: [PATCH 081/109] update readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index cda8db1..ec6af70 100644 --- a/README.md +++ b/README.md @@ -474,6 +474,17 @@ In order to run this project you need: +
    • +
      +Typing Speed Test +

      The Typing Speed Test app is a simple web-based tool that allows users to test and improve their typing speed. The app displays a random sentence, and the user is asked to type it as quickly and accurately as possible. It calculates the typing speed in words per minute (WPM) and measures the accuracy based on the user's input.

      + +
      +
    • +

      (back to top)

      From 20d31cc7836d0536e8b57e07ccb247501eb2adfe Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 00:44:14 +0530 Subject: [PATCH 082/109] Add the project --- Source-Code/MovieSearchApp/index.html | 20 +++++++ Source-Code/MovieSearchApp/script.js | 59 ++++++++++++++++++++ Source-Code/MovieSearchApp/style.css | 78 +++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 Source-Code/MovieSearchApp/index.html create mode 100644 Source-Code/MovieSearchApp/script.js create mode 100644 Source-Code/MovieSearchApp/style.css diff --git a/Source-Code/MovieSearchApp/index.html b/Source-Code/MovieSearchApp/index.html new file mode 100644 index 0000000..6434f2c --- /dev/null +++ b/Source-Code/MovieSearchApp/index.html @@ -0,0 +1,20 @@ + + + + + + Movie Search App + + + +
      +

      Movie Search App

      +
      + + +
      +
      +
      + + + diff --git a/Source-Code/MovieSearchApp/script.js b/Source-Code/MovieSearchApp/script.js new file mode 100644 index 0000000..860da01 --- /dev/null +++ b/Source-Code/MovieSearchApp/script.js @@ -0,0 +1,59 @@ +const searchBtn = document.getElementById('search-btn'); +const searchInput = document.getElementById('search'); +const movieContainer = document.getElementById('movie-container'); + +// API Details +const API_KEY = '40bbd9b4'; // Replace with your OMDB or TMDB API key +const API_URL = `https://www.omdbapi.com/?apikey=${API_KEY}&s=`; + +// Display Movies +const displayMovies = (movies) => { + movieContainer.innerHTML = ''; // Clear previous results + + movies.forEach((movie) => { + const movieCard = document.createElement('div'); + movieCard.classList.add('movie-card'); + + movieCard.innerHTML = ` + ${movie.Title} +

      ${movie.Title}

      +

      Year: ${movie.Year}

      + `; + + movieContainer.appendChild(movieCard); + }); +}; + +// Show Error Message +const showError = (message) => { + movieContainer.innerHTML = `

      ${message}

      `; +}; + +// Fetch Movies +async function fetchMovies(query) { + try { + const response = await fetch(`${API_URL}${query}`); + const data = await response.json(); + + if (data.Response === 'True') { + displayMovies(data.Search); + } else { + showError(data.Error); + } + } catch (error) { + console.error('Error fetching data:', error); + showError('Unable to fetch data. Please try again later.'); + } +} + +// Event Listener +searchBtn.addEventListener('click', () => { + const query = searchInput.value.trim(); + if (query) { + fetchMovies(query); + } else { + showError('Please enter a movie name.'); + } +}); diff --git a/Source-Code/MovieSearchApp/style.css b/Source-Code/MovieSearchApp/style.css new file mode 100644 index 0000000..2c8a42c --- /dev/null +++ b/Source-Code/MovieSearchApp/style.css @@ -0,0 +1,78 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f4f4f4; + text-align: center; +} + +.container { + padding: 20px; +} + +h1 { + color: #333; +} + +.search-container { + margin: 20px 0; +} + +#search { + padding: 10px; + width: 300px; + border: 1px solid #ccc; + border-radius: 4px; +} + +#search-btn { + padding: 10px 20px; + background-color: #007bff; + color: #fff; + border: none; + border-radius: 4px; + cursor: pointer; +} + +#search-btn:hover { + background-color: #0056b3; +} + +.movie-container { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 20px; + margin-top: 20px; +} + +.movie-card { + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + width: 250px; + text-align: left; + overflow: hidden; +} + +.movie-card img { + width: 100%; + height: auto; +} + +.movie-card h3 { + padding: 10px; + font-size: 18px; +} + +.movie-card p { + padding: 0 10px 10px; + font-size: 14px; + color: #555; +} + +.error { + color: red; + margin-top: 20px; +} From f608698e570b217f4f679474a298474d865af7b0 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 00:46:56 +0530 Subject: [PATCH 083/109] update the readme with the project description --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index ec6af70..ef4e7c2 100644 --- a/README.md +++ b/README.md @@ -485,6 +485,17 @@ In order to run this project you need: +
    • +
      +Movie Search App +

      The Movie Search App is a simple and responsive web application that allows users to search for movies and view their details. It utilizes a public API like OMDB to fetch and display movie information, including the title, year of release, and poster.

      + +
      +
    • +

      (back to top)

      From 7a112318132228cc8dfd290359cc2e9f84b21394 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 01:22:16 +0530 Subject: [PATCH 084/109] Add a project --- Source-Code/PomodoroTimer/index.html | 23 ++++++++++++ Source-Code/PomodoroTimer/script.js | 54 ++++++++++++++++++++++++++++ Source-Code/PomodoroTimer/style.css | 51 ++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 Source-Code/PomodoroTimer/index.html create mode 100644 Source-Code/PomodoroTimer/script.js create mode 100644 Source-Code/PomodoroTimer/style.css diff --git a/Source-Code/PomodoroTimer/index.html b/Source-Code/PomodoroTimer/index.html new file mode 100644 index 0000000..e228a97 --- /dev/null +++ b/Source-Code/PomodoroTimer/index.html @@ -0,0 +1,23 @@ + + + + + + Productivity Timer + + + +
      +

      Productivity Timer

      +
      + 25:00 +
      +
      + + +
      +

      Focus Session

      +
      + + + diff --git a/Source-Code/PomodoroTimer/script.js b/Source-Code/PomodoroTimer/script.js new file mode 100644 index 0000000..cf456e9 --- /dev/null +++ b/Source-Code/PomodoroTimer/script.js @@ -0,0 +1,54 @@ +const startBtn = document.getElementById('start-btn'); +const resetBtn = document.getElementById('reset-btn'); +const minutesDisplay = document.getElementById('minutes'); +const secondsDisplay = document.getElementById('seconds'); +const statusDisplay = document.getElementById('status'); + +let timerInterval; +let isFocusSession = true; // Start with a focus session +const focusTime = 5 * 60; // 5 minutes in seconds +const breakTime = 5 * 60; // 5 minutes in seconds +let timeRemaining = focusTime; + +function updateDisplay() { + const minutes = Math.floor(timeRemaining / 60); + const seconds = timeRemaining % 60; + minutesDisplay.textContent = String(minutes).padStart(2, '0'); + secondsDisplay.textContent = String(seconds).padStart(2, '0'); +} + +function toggleSession() { + isFocusSession = !isFocusSession; + timeRemaining = isFocusSession ? focusTime : breakTime; + statusDisplay.textContent = isFocusSession + ? 'Focus Session' + : 'Break Session'; + updateDisplay(); +} + +function startTimer() { + if (timerInterval) return; // Prevent multiple intervals + timerInterval = setInterval(() => { + if (timeRemaining > 0) { + timeRemaining -= 1; + updateDisplay(); + } else { + clearInterval(timerInterval); + timerInterval = null; + toggleSession(); + } + }, 1000); +} + +function resetTimer() { + clearInterval(timerInterval); + timerInterval = null; + timeRemaining = isFocusSession ? focusTime : breakTime; + updateDisplay(); +} + +startBtn.addEventListener('click', startTimer); +resetBtn.addEventListener('click', resetTimer); + +// Initialize display +updateDisplay(); diff --git a/Source-Code/PomodoroTimer/style.css b/Source-Code/PomodoroTimer/style.css new file mode 100644 index 0000000..0d2d44d --- /dev/null +++ b/Source-Code/PomodoroTimer/style.css @@ -0,0 +1,51 @@ +body { + font-family: Arial, sans-serif; + background-color: #f0f4f8; + color: #333; + text-align: center; + margin: 0; + padding: 0; +} + +.container { + max-width: 400px; + margin: 100px auto; + padding: 20px; + background: #fff; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); +} + +h1 { + margin-bottom: 20px; +} + +.timer-display { + font-size: 3rem; + margin: 20px 0; +} + +.controls button { + font-size: 1rem; + padding: 10px 20px; + margin: 5px; + border: none; + border-radius: 5px; + cursor: pointer; +} + +#start-btn { + background-color: #28a745; + color: white; +} + +#reset-btn { + background-color: #dc3545; + color: white; +} + +#status { + font-size: 1.2rem; + margin-top: 20px; + color: #555; +} From 2cbdfd162f3d08d735aaef9d2c57567cb18eeafa Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 01:25:44 +0530 Subject: [PATCH 085/109] Update the raedme with the description --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index ef4e7c2..2f103ce 100644 --- a/README.md +++ b/README.md @@ -496,6 +496,19 @@ In order to run this project you need: +
    • +
      +Pomodoro Timer +

      The Productivity Timer (Pomodoro Timer) is a simple yet effective timer application based on the Pomodoro technique. It helps users stay productive by alternating between focus intervals (e.g., 5 minutes) and short breaks (e.g., 2 minutes). The app provides visual cues through animations and sound alerts to signal transitions between focus and break periods. + +

      + +
      +
    • +

      (back to top)

      From 58eb81c2bc5646d93fdf7fec1eefa922eebe093b Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 01:29:15 +0530 Subject: [PATCH 086/109] followed es6 --- Source-Code/PomodoroTimer/script.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Source-Code/PomodoroTimer/script.js b/Source-Code/PomodoroTimer/script.js index cf456e9..c7295e1 100644 --- a/Source-Code/PomodoroTimer/script.js +++ b/Source-Code/PomodoroTimer/script.js @@ -10,23 +10,23 @@ const focusTime = 5 * 60; // 5 minutes in seconds const breakTime = 5 * 60; // 5 minutes in seconds let timeRemaining = focusTime; -function updateDisplay() { +const updateDisplay = () => { const minutes = Math.floor(timeRemaining / 60); const seconds = timeRemaining % 60; minutesDisplay.textContent = String(minutes).padStart(2, '0'); secondsDisplay.textContent = String(seconds).padStart(2, '0'); -} +}; -function toggleSession() { +const toggleSession = () => { isFocusSession = !isFocusSession; timeRemaining = isFocusSession ? focusTime : breakTime; statusDisplay.textContent = isFocusSession ? 'Focus Session' : 'Break Session'; updateDisplay(); -} +}; -function startTimer() { +const startTimer = () => { if (timerInterval) return; // Prevent multiple intervals timerInterval = setInterval(() => { if (timeRemaining > 0) { @@ -38,14 +38,14 @@ function startTimer() { toggleSession(); } }, 1000); -} +}; -function resetTimer() { +const resetTimer = () => { clearInterval(timerInterval); timerInterval = null; timeRemaining = isFocusSession ? focusTime : breakTime; updateDisplay(); -} +}; startBtn.addEventListener('click', startTimer); resetBtn.addEventListener('click', resetTimer); From 29df4477e67b52ee8825b40f63d299199a7efaf4 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 01:54:15 +0530 Subject: [PATCH 087/109] create a template for the project --- Source-Code/E-CommerceWebsite/index.html | 0 Source-Code/E-CommerceWebsite/script.js | 0 Source-Code/E-CommerceWebsite/style.css | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Source-Code/E-CommerceWebsite/index.html create mode 100644 Source-Code/E-CommerceWebsite/script.js create mode 100644 Source-Code/E-CommerceWebsite/style.css diff --git a/Source-Code/E-CommerceWebsite/index.html b/Source-Code/E-CommerceWebsite/index.html new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/E-CommerceWebsite/script.js b/Source-Code/E-CommerceWebsite/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/E-CommerceWebsite/style.css b/Source-Code/E-CommerceWebsite/style.css new file mode 100644 index 0000000..e69de29 From dbe377437a1c435383017490df1aa1b9fa74b1c2 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 02:29:58 +0530 Subject: [PATCH 088/109] Add the project --- Source-Code/E-CommerceWebsite/index.html | 33 ++++++ Source-Code/E-CommerceWebsite/script.js | 93 +++++++++++++++ Source-Code/E-CommerceWebsite/style.css | 145 +++++++++++++++++++++++ 3 files changed, 271 insertions(+) diff --git a/Source-Code/E-CommerceWebsite/index.html b/Source-Code/E-CommerceWebsite/index.html index e69de29..2f8fbc7 100644 --- a/Source-Code/E-CommerceWebsite/index.html +++ b/Source-Code/E-CommerceWebsite/index.html @@ -0,0 +1,33 @@ + + + + + + E-Commerce Product Page + + + +
      + +
      + +
      +

      Products

      +
      +
      + + +
      +
      +

      Your Cart

      +
        + +
        +
        + + + + diff --git a/Source-Code/E-CommerceWebsite/script.js b/Source-Code/E-CommerceWebsite/script.js index e69de29..7d34ddb 100644 --- a/Source-Code/E-CommerceWebsite/script.js +++ b/Source-Code/E-CommerceWebsite/script.js @@ -0,0 +1,93 @@ +/* eslint-disable no-unused-vars */ +// Fake API URL (you can replace this with a real API if needed) +const apiUrl = 'https://fakestoreapi.com/products'; + +// Elements +const productsContainer = document.getElementById('products-container'); +const cartBtn = document.getElementById('cart-btn'); +const cartModal = document.getElementById('cart-modal'); +const closeCartBtn = document.getElementById('close-cart'); +const cartItemsList = document.getElementById('cart-items'); + +// Cart array to store added products +const cart = []; + +// Display fetched products +const displayProducts = (products) => { + productsContainer.innerHTML = ''; // Clear previous products + + products.forEach((product) => { + const productElement = document.createElement('div'); + productElement.classList.add('product'); + productElement.innerHTML = ` + ${product.title} +

        ${product.title}

        +

        $${product.price}

        + + `; + productsContainer.appendChild(productElement); + }); +}; + +// Fetch products from API +async function fetchProducts() { + try { + const response = await fetch(apiUrl); + const products = await response.json(); + displayProducts(products); + } catch (error) { + console.error('Error fetching products:', error); + } +} + +// Add product to cart +const addToCart = (id, title, image, price) => { + const existingProductIndex = cart.findIndex((item) => item.id === id); + + if (existingProductIndex === -1) { + cart.push({ + id, + title, + image, + price, + quantity: 1, + }); + } else { + cart[existingProductIndex].quantity += 1; + } + + console.log(cart); // You can replace this with a cart UI or alert + alert(`${title} added to cart!`); +}; + +// Close cart modal +closeCartBtn.addEventListener('click', () => { + cartModal.style.display = 'none'; +}); + +// Display cart contents +const displayCart = () => { + cartItemsList.innerHTML = ''; // Clear previous cart items + + cart.forEach((item) => { + const cartItem = document.createElement('li'); + cartItem.innerHTML = ` + ${item.title} (x${item.quantity}) + $${item.price * item.quantity} + `; + cartItemsList.appendChild(cartItem); + }); +}; + +// Open cart modal +cartBtn.addEventListener('click', () => { + if (cart.length === 0) { + alert('Your cart is empty.'); + } else { + displayCart(); + cartModal.style.display = 'flex'; + } +}); + +// Initialize +fetchProducts(); diff --git a/Source-Code/E-CommerceWebsite/style.css b/Source-Code/E-CommerceWebsite/style.css index e69de29..ae2d61b 100644 --- a/Source-Code/E-CommerceWebsite/style.css +++ b/Source-Code/E-CommerceWebsite/style.css @@ -0,0 +1,145 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f9f9f9; + } + + header { + background-color: #333; + color: #fff; + padding: 10px 20px; + text-align: center; + } + + .navbar { + display: flex; + justify-content: space-between; + align-items: center; + } + + #cart-btn { + background-color: #28a745; + color: white; + border: none; + padding: 10px 20px; + font-size: 1rem; + cursor: pointer; + border-radius: 5px; + } + + #cart-btn:hover { + background-color: #218838; + } + + .container { + margin: 50px auto; + padding: 20px; + background: #fff; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + max-width: 1000px; + } + + h1 { + margin-bottom: 30px; + } + + .products-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 20px; + } + + .product { + border: 1px solid #ddd; + border-radius: 10px; + padding: 10px; + text-align: center; + background-color: #fff; + } + + .product img { + max-width: 100%; + height: 300px; + border-radius: 10px; + } + + .product .title { + font-size: 1.1rem; + font-weight: bold; + margin: 10px 0; + height: 60px; + overflow: hidden; + } + + .product .price { + font-size: 1rem; + color: #333; + margin: 10px 0; + } + + .product button { + background-color: #007bff; + color: white; + border: none; + padding: 10px; + font-size: 1rem; + cursor: pointer; + border-radius: 5px; + width: 100%; + } + + .product button:hover { + background-color: #0056b3; + } + + /* Cart Modal Styles */ + .cart-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.7); + display: none; + justify-content: center; + align-items: center; + z-index: 1000; + } + + .cart-content { + background-color: white; + padding: 20px; + border-radius: 10px; + max-width: 500px; + width: 100%; + text-align: left; + } + + #cart-items { + list-style-type: none; + padding: 0; + } + + #cart-items li { + display: flex; + justify-content: space-between; + padding: 5px 0; + } + + #close-cart { + margin-top: 20px; + background-color: #dc3545; + color: white; + border: none; + padding: 10px; + font-size: 1rem; + cursor: pointer; + border-radius: 5px; + } + + #close-cart:hover { + background-color: #c82333; + } + \ No newline at end of file From 1d4bde72a1525cdccc56e2114d2058f3294e3394 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 02:33:10 +0530 Subject: [PATCH 089/109] update the readme with the description --- README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2f103ce..3ed6348 100644 --- a/README.md +++ b/README.md @@ -499,9 +499,7 @@ In order to run this project you need:
      • Pomodoro Timer -

        The Productivity Timer (Pomodoro Timer) is a simple yet effective timer application based on the Pomodoro technique. It helps users stay productive by alternating between focus intervals (e.g., 5 minutes) and short breaks (e.g., 2 minutes). The app provides visual cues through animations and sound alerts to signal transitions between focus and break periods. - -

        +

        The Productivity Timer (Pomodoro Timer) is a simple yet effective timer application based on the Pomodoro technique. It helps users stay productive by alternating between focus intervals (e.g., 5 minutes) and short breaks (e.g., 2 minutes). The app provides visual cues through animations and sound alerts to signal transitions between focus and break periods.

        • Live Demo
        • Source
        • @@ -509,6 +507,17 @@ In order to run this project you need:
      • +
      • +
        +E-Commerce Website +

        This is a simple e-commerce product page built using **HTML**, **CSS**, and **JavaScript**. It displays a list of products fetched from a public API and allows users to add products to their cart. The page features a cart modal where users can view the products they have added, including quantity and total price.

        + +
        +
      • +

        (back to top)

        From cde2b3ba223661114cd691c7b2c2adfec471d55f Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Mon, 23 Dec 2024 02:36:56 +0530 Subject: [PATCH 090/109] solve the linter --- Source-Code/E-CommerceWebsite/style.css | 287 ++++++++++++------------ 1 file changed, 143 insertions(+), 144 deletions(-) diff --git a/Source-Code/E-CommerceWebsite/style.css b/Source-Code/E-CommerceWebsite/style.css index ae2d61b..c7c8624 100644 --- a/Source-Code/E-CommerceWebsite/style.css +++ b/Source-Code/E-CommerceWebsite/style.css @@ -1,145 +1,144 @@ body { - font-family: Arial, sans-serif; - margin: 0; - padding: 0; - background-color: #f9f9f9; - } - - header { - background-color: #333; - color: #fff; - padding: 10px 20px; - text-align: center; - } - - .navbar { - display: flex; - justify-content: space-between; - align-items: center; - } - - #cart-btn { - background-color: #28a745; - color: white; - border: none; - padding: 10px 20px; - font-size: 1rem; - cursor: pointer; - border-radius: 5px; - } - - #cart-btn:hover { - background-color: #218838; - } - - .container { - margin: 50px auto; - padding: 20px; - background: #fff; - border-radius: 10px; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - max-width: 1000px; - } - - h1 { - margin-bottom: 30px; - } - - .products-container { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 20px; - } - - .product { - border: 1px solid #ddd; - border-radius: 10px; - padding: 10px; - text-align: center; - background-color: #fff; - } - - .product img { - max-width: 100%; - height: 300px; - border-radius: 10px; - } - - .product .title { - font-size: 1.1rem; - font-weight: bold; - margin: 10px 0; - height: 60px; - overflow: hidden; - } - - .product .price { - font-size: 1rem; - color: #333; - margin: 10px 0; - } - - .product button { - background-color: #007bff; - color: white; - border: none; - padding: 10px; - font-size: 1rem; - cursor: pointer; - border-radius: 5px; - width: 100%; - } - - .product button:hover { - background-color: #0056b3; - } - - /* Cart Modal Styles */ - .cart-modal { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.7); - display: none; - justify-content: center; - align-items: center; - z-index: 1000; - } - - .cart-content { - background-color: white; - padding: 20px; - border-radius: 10px; - max-width: 500px; - width: 100%; - text-align: left; - } - - #cart-items { - list-style-type: none; - padding: 0; - } - - #cart-items li { - display: flex; - justify-content: space-between; - padding: 5px 0; - } - - #close-cart { - margin-top: 20px; - background-color: #dc3545; - color: white; - border: none; - padding: 10px; - font-size: 1rem; - cursor: pointer; - border-radius: 5px; - } - - #close-cart:hover { - background-color: #c82333; - } - \ No newline at end of file + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f9f9f9; +} + +header { + background-color: #333; + color: #fff; + padding: 10px 20px; + text-align: center; +} + +.navbar { + display: flex; + justify-content: space-between; + align-items: center; +} + +#cart-btn { + background-color: #28a745; + color: white; + border: none; + padding: 10px 20px; + font-size: 1rem; + cursor: pointer; + border-radius: 5px; +} + +#cart-btn:hover { + background-color: #218838; +} + +.container { + margin: 50px auto; + padding: 20px; + background: #fff; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + max-width: 1000px; +} + +h1 { + margin-bottom: 30px; +} + +.products-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 20px; +} + +.product { + border: 1px solid #ddd; + border-radius: 10px; + padding: 10px; + text-align: center; + background-color: #fff; +} + +.product img { + max-width: 100%; + height: 300px; + border-radius: 10px; +} + +.product .title { + font-size: 1.1rem; + font-weight: bold; + margin: 10px 0; + height: 60px; + overflow: hidden; +} + +.product .price { + font-size: 1rem; + color: #333; + margin: 10px 0; +} + +.product button { + background-color: #007bff; + color: white; + border: none; + padding: 10px; + font-size: 1rem; + cursor: pointer; + border-radius: 5px; + width: 100%; +} + +.product button:hover { + background-color: #0056b3; +} + +/* Cart Modal Styles */ +.cart-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.7); + display: none; + justify-content: center; + align-items: center; + z-index: 1000; +} + +.cart-content { + background-color: white; + padding: 20px; + border-radius: 10px; + max-width: 500px; + width: 100%; + text-align: left; +} + +#cart-items { + list-style-type: none; + padding: 0; +} + +#cart-items li { + display: flex; + justify-content: space-between; + padding: 5px 0; +} + +#close-cart { + margin-top: 20px; + background-color: #dc3545; + color: white; + border: none; + padding: 10px; + font-size: 1rem; + cursor: pointer; + border-radius: 5px; +} + +#close-cart:hover { + background-color: #c82333; +} From efec664b91af8818aac78fe6b498195d0dc3c14a Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 01:17:41 +0530 Subject: [PATCH 091/109] createde teh template for project --- Source-Code/LanguageTranslator/index.html | 11 +++++++++++ Source-Code/LanguageTranslator/script.js | 0 Source-Code/LanguageTranslator/style.css | 0 3 files changed, 11 insertions(+) create mode 100644 Source-Code/LanguageTranslator/index.html create mode 100644 Source-Code/LanguageTranslator/script.js create mode 100644 Source-Code/LanguageTranslator/style.css diff --git a/Source-Code/LanguageTranslator/index.html b/Source-Code/LanguageTranslator/index.html new file mode 100644 index 0000000..d01f779 --- /dev/null +++ b/Source-Code/LanguageTranslator/index.html @@ -0,0 +1,11 @@ + + + + + + Document + + + + + \ No newline at end of file diff --git a/Source-Code/LanguageTranslator/script.js b/Source-Code/LanguageTranslator/script.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/LanguageTranslator/style.css b/Source-Code/LanguageTranslator/style.css new file mode 100644 index 0000000..e69de29 From 0c86bbb434f584214b6f489a0d4fb9224c55d652 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 01:31:58 +0530 Subject: [PATCH 092/109] Add a project --- Source-Code/LanguageTranslator/index.html | 81 +++++++++++++++++++++-- Source-Code/LanguageTranslator/script.js | 32 +++++++++ Source-Code/LanguageTranslator/style.css | 65 ++++++++++++++++++ 3 files changed, 173 insertions(+), 5 deletions(-) diff --git a/Source-Code/LanguageTranslator/index.html b/Source-Code/LanguageTranslator/index.html index d01f779..2359393 100644 --- a/Source-Code/LanguageTranslator/index.html +++ b/Source-Code/LanguageTranslator/index.html @@ -1,11 +1,82 @@ - - - Document + + + Language Translator App + - +
        +

        Language Translator

        +
        + +
        + + + +
        + +
        +
        + - \ No newline at end of file + diff --git a/Source-Code/LanguageTranslator/script.js b/Source-Code/LanguageTranslator/script.js index e69de29..ee14549 100644 --- a/Source-Code/LanguageTranslator/script.js +++ b/Source-Code/LanguageTranslator/script.js @@ -0,0 +1,32 @@ +const translateButton = document.getElementById('translateButton'); +const sourceText = document.getElementById('sourceText'); +const translatedText = document.getElementById('translatedText'); +const sourceLang = document.getElementById('sourceLang'); +const targetLang = document.getElementById('targetLang'); + +// Replace with your own API key +const API_URL = 'https://api.mymemory.translated.net/get'; + +translateButton.addEventListener('click', async () => { + const text = sourceText.value.trim(); + const fromLang = sourceLang.value; + const toLang = targetLang.value; + + if (!text) { + alert('Please enter text to translate.'); + return; + } + + try { + const response = await fetch( + `${API_URL}?q=${encodeURIComponent(text)}&langpair=${fromLang}|${toLang}`, + ); + const data = await response.json(); + const translated = data.responseData.translatedText; + + translatedText.value = translated; + } catch (error) { + console.error('Error fetching translation:', error); + alert('Failed to translate. Please try again later.'); + } +}); diff --git a/Source-Code/LanguageTranslator/style.css b/Source-Code/LanguageTranslator/style.css index e69de29..772a271 100644 --- a/Source-Code/LanguageTranslator/style.css +++ b/Source-Code/LanguageTranslator/style.css @@ -0,0 +1,65 @@ +body { + font-family: Arial, sans-serif; + background-color: #a4bef2; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + } + + .container { + text-align: center; + background: white; + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + min-width: 500px; + } + + h1 { + font-size: 24px; + margin-bottom: 20px; + } + + .translator { + display: flex; + flex-direction: column; + } + + textarea { + width: 90%; + height: 100px; + margin: 10px ; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + resize: none; + } + + .controls { + display: flex; + justify-content: space-around; + align-items: center; + } + + select { + padding: 10px; + border-radius: 5px; + border: 1px solid #ccc; + } + + button { + padding: 10px 15px; + background-color: #007bff; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; + } + + button:hover { + background-color: #0056b3; + } + \ No newline at end of file From c4dc76d7e585ef27017e8bb248c25e1604cc7712 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 01:35:12 +0530 Subject: [PATCH 093/109] update the readme with the description --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 3ed6348..cd4db08 100644 --- a/README.md +++ b/README.md @@ -518,6 +518,17 @@ In order to run this project you need: +
      • +
        +Language Translator +

        The Language Translator App is a simple and user-friendly web application that allows users to translate text between various languages. It uses the MyMemory Translation API to fetch translations.

        + +
        +
      • +

        (back to top)

        From 511b689bef7974bf195b31941204ccc2162ba39a Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 01:38:16 +0530 Subject: [PATCH 094/109] solve linter errors --- Source-Code/LanguageTranslator/style.css | 127 +++++++++++------------ 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/Source-Code/LanguageTranslator/style.css b/Source-Code/LanguageTranslator/style.css index 772a271..1d9b219 100644 --- a/Source-Code/LanguageTranslator/style.css +++ b/Source-Code/LanguageTranslator/style.css @@ -1,65 +1,64 @@ body { - font-family: Arial, sans-serif; - background-color: #a4bef2; - margin: 0; - padding: 0; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - } - - .container { - text-align: center; - background: white; - padding: 20px; - border-radius: 10px; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - min-width: 500px; - } - - h1 { - font-size: 24px; - margin-bottom: 20px; - } - - .translator { - display: flex; - flex-direction: column; - } - - textarea { - width: 90%; - height: 100px; - margin: 10px ; - padding: 10px; - border: 1px solid #ccc; - border-radius: 5px; - resize: none; - } - - .controls { - display: flex; - justify-content: space-around; - align-items: center; - } - - select { - padding: 10px; - border-radius: 5px; - border: 1px solid #ccc; - } - - button { - padding: 10px 15px; - background-color: #007bff; - color: white; - border: none; - border-radius: 5px; - cursor: pointer; - } - - button:hover { - background-color: #0056b3; - } - \ No newline at end of file + font-family: Arial, sans-serif; + background-color: #a4bef2; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} + +.container { + text-align: center; + background: white; + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + min-width: 500px; +} + +h1 { + font-size: 24px; + margin-bottom: 20px; +} + +.translator { + display: flex; + flex-direction: column; +} + +textarea { + width: 90%; + height: 100px; + margin: 10px; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + resize: none; +} + +.controls { + display: flex; + justify-content: space-around; + align-items: center; +} + +select { + padding: 10px; + border-radius: 5px; + border: 1px solid #ccc; +} + +button { + padding: 10px 15px; + background-color: #007bff; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; +} + +button:hover { + background-color: #0056b3; +} From f4026e82eaad31f464e54511322ae21a1fc7acb1 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 01:51:47 +0530 Subject: [PATCH 095/109] Add the project --- Source-Code/FoodOrdering/index.html | 51 +++++++++++++++++ Source-Code/FoodOrdering/script.js | 50 ++++++++++++++++ Source-Code/FoodOrdering/style.css | 88 +++++++++++++++++++++++++++++ 3 files changed, 189 insertions(+) create mode 100644 Source-Code/FoodOrdering/index.html create mode 100644 Source-Code/FoodOrdering/script.js create mode 100644 Source-Code/FoodOrdering/style.css diff --git a/Source-Code/FoodOrdering/index.html b/Source-Code/FoodOrdering/index.html new file mode 100644 index 0000000..07813f6 --- /dev/null +++ b/Source-Code/FoodOrdering/index.html @@ -0,0 +1,51 @@ + + + + + + Food Order App + + + +
        +

        Food Order App

        + + +
        +

        Your Cart

        +
          + +
        +

        Total: $0.00

        + +
        +
        + + + + diff --git a/Source-Code/FoodOrdering/script.js b/Source-Code/FoodOrdering/script.js new file mode 100644 index 0000000..0d0ffe8 --- /dev/null +++ b/Source-Code/FoodOrdering/script.js @@ -0,0 +1,50 @@ +const addToCartButtons = document.querySelectorAll('.add-to-cart'); +const cartItemsList = document.getElementById('cart-items'); +const totalPriceElement = document.getElementById('total-price'); +const placeOrderButton = document.getElementById('place-order'); + +let cart = []; +let totalPrice = 0; + +const addToCart = (event) => { + const itemName = event.target.dataset.name; + const itemPrice = parseFloat(event.target.dataset.price); + + // Add item to cart + cart.push({ name: itemName, price: itemPrice }); + + // Update total price + totalPrice += itemPrice; + + // Add item to the cart UI + const cartItem = document.createElement('li'); + cartItem.textContent = `${itemName} - $${itemPrice.toFixed(2)}`; + cartItemsList.appendChild(cartItem); + + // Update the total price displayed + totalPriceElement.textContent = totalPrice.toFixed(2); + + // Enable the "Place Order" button + placeOrderButton.disabled = false; +}; + +addToCartButtons.forEach((button) => { + button.addEventListener('click', addToCart); +}); + +const placeOrder = () => { + if (cart.length === 0) return; + + alert('Order placed successfully!'); + cart = []; + totalPrice = 0; + + // Clear cart UI + cartItemsList.innerHTML = ''; + totalPriceElement.textContent = '0.00'; + + // Disable the "Place Order" button again + placeOrderButton.disabled = true; +}; + +placeOrderButton.addEventListener('click', placeOrder); diff --git a/Source-Code/FoodOrdering/style.css b/Source-Code/FoodOrdering/style.css new file mode 100644 index 0000000..8e1defe --- /dev/null +++ b/Source-Code/FoodOrdering/style.css @@ -0,0 +1,88 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + background-color: #a5ef9d; + height: 100vh; +} + +.container { + background-color: #fff; + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); + width: 70%; + max-width: 1000px; +} + +h1 { + text-align: center; + font-size: 32px; +} + +.menu { + display: flex; + justify-content: space-around; + margin-bottom: 20px; +} + +.menu-item { + text-align: center; + width: 30%; + background-color: #f9f9f9; + padding: 10px; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); +} + +.menu-item img { + width: 100%; + max-height: 200px; + object-fit: cover; + border-radius: 10px; +} + +.add-to-cart { + margin-top: 10px; + padding: 10px 20px; + background-color: #28a745; + color: #fff; + border: none; + border-radius: 5px; + cursor: pointer; +} + +.add-to-cart:hover { + background-color: #218838; +} + +.cart { + margin-top: 30px; + text-align: center; +} + +.cart ul { + list-style-type: none; + padding: 0; +} + +.cart li { + margin: 10px 0; +} + +#place-order { + padding: 10px 20px; + background-color: #007bff; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; +} + +#place-order:disabled { + background-color: #aaa; + cursor: not-allowed; +} From f9153725a2fafcf152441725dd3e7e7828d4030b Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 01:54:24 +0530 Subject: [PATCH 096/109] update the readme with the description --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index cd4db08..8e353ca 100644 --- a/README.md +++ b/README.md @@ -529,6 +529,17 @@ In order to run this project you need: +
      • +
        +Food Ordering App +

        The Food Order App is a simple web application that allows users to order food items from a menu. Users can view the available items, add them to their cart, and see the total price. The app also enables users to place an order, and upon successful placement, the cart is cleared.

        + +
        +
      • +

        (back to top)

        From cd7c06f608e15e99c8e2a565c0d589f1904de454 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 02:16:21 +0530 Subject: [PATCH 097/109] Add the project --- Source-Code/TicTacToe/index.html | 20 +++++++++ Source-Code/TicTacToe/script.js | 72 ++++++++++++++++++++++++++++++++ Source-Code/TicTacToe/style.css | 61 +++++++++++++++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 Source-Code/TicTacToe/index.html create mode 100644 Source-Code/TicTacToe/script.js create mode 100644 Source-Code/TicTacToe/style.css diff --git a/Source-Code/TicTacToe/index.html b/Source-Code/TicTacToe/index.html new file mode 100644 index 0000000..37fccff --- /dev/null +++ b/Source-Code/TicTacToe/index.html @@ -0,0 +1,20 @@ + + + + + + Tic Tac Toe + + + +
        +

        Tic Tac Toe

        +
        + +
        + +
        +
        + + + diff --git a/Source-Code/TicTacToe/script.js b/Source-Code/TicTacToe/script.js new file mode 100644 index 0000000..6f297ce --- /dev/null +++ b/Source-Code/TicTacToe/script.js @@ -0,0 +1,72 @@ +/* eslint-disable no-use-before-define */ +// Get elements +const board = document.getElementById('board'); +const restartBtn = document.getElementById('restartBtn'); +const message = document.getElementById('message'); + +let currentPlayer = 'X'; +let gameBoard = Array(9).fill(null); // 3x3 grid, initialized to null (empty) + +const winPatterns = [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8], // Rows + [0, 3, 6], + [1, 4, 7], + [2, 5, 8], // Columns + [0, 4, 8], + [2, 4, 6], // Diagonals +]; + +// Check for a winner or draw +const checkWinner = () => { + const winner = winPatterns.some(([a, b, c]) => { + if ( + gameBoard[a] + && gameBoard[a] === gameBoard[b] + && gameBoard[a] === gameBoard[c] + ) { + message.textContent = `${gameBoard[a]} wins!`; + board.style.pointerEvents = 'none'; // Disable clicks after game ends + return true; + } + return false; + }); + + if (!winner && !gameBoard.includes(null)) { + message.textContent = "It's a draw!"; + } +}; + +// Create the board cells +const createBoard = () => { + board.innerHTML = ''; // Clear any existing cells + gameBoard.forEach((cell, index) => { + const cellElement = document.createElement('div'); + cellElement.classList.add('cell'); + cellElement.textContent = cell; + cellElement.addEventListener('click', () => handleCellClick(index)); + board.appendChild(cellElement); + }); +}; + +// Handle cell click +const handleCellClick = (index) => { + if (gameBoard[index] !== null) return; // If cell is already filled, return + gameBoard[index] = currentPlayer; + currentPlayer = currentPlayer === 'X' ? 'O' : 'X'; // Switch player + createBoard(); + checkWinner(); +}; + +// Restart the game +restartBtn.addEventListener('click', () => { + gameBoard = Array(9).fill(null); // Reset the game board + currentPlayer = 'X'; // Reset to Player X + createBoard(); + message.textContent = ''; // Clear the message + board.style.pointerEvents = 'auto'; // Enable clicks again +}); + +// Initialize the game +createBoard(); diff --git a/Source-Code/TicTacToe/style.css b/Source-Code/TicTacToe/style.css new file mode 100644 index 0000000..ec93f6a --- /dev/null +++ b/Source-Code/TicTacToe/style.css @@ -0,0 +1,61 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; + background-color: #f4f4f9; +} + +.container { + text-align: center; +} + +h1 { + margin-bottom: 20px; +} + +.board { + display: grid; + grid-template-columns: repeat(3, 100px); + grid-template-rows: repeat(3, 100px); + gap: 5px; + justify-content: center; + margin-bottom: 20px; +} + +.cell { + width: 100px; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + font-size: 32px; + background-color: #fff; + border: 2px solid #333; + cursor: pointer; + transition: background-color 0.2s ease; +} + +.cell:hover { + background-color: #f0f0f0; +} + +button { + padding: 10px 20px; + font-size: 16px; + cursor: pointer; + margin-top: 10px; +} + +#message { + margin-top: 20px; + font-size: 18px; + font-weight: bold; +} From 803a7159ba11ff4d9d3be3d0a9f4afacadd5d066 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Wed, 25 Dec 2024 02:16:56 +0530 Subject: [PATCH 098/109] Update the readme file with the description --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 8e353ca..e0484ab 100644 --- a/README.md +++ b/README.md @@ -540,6 +540,17 @@ In order to run this project you need: +
      • +
        +Tic Tac Toe App +

        This is a simple Tic Tac Toe game built using HTML, CSS, and JavaScript. The game allows two players to alternate turns and try to win by getting three of their symbols (X or O) in a row, either horizontally, vertically, or diagonally. The game will automatically check for a winner or draw after each move, and players can restart the game at any time.

        + +
        +
      • +

        (back to top)

        From f43140a7b23dc8006460d7146640f0bd3c820a8a Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 26 Dec 2024 01:33:03 +0530 Subject: [PATCH 099/109] Add a project --- Source-Code/ChatApp/index.html | 20 +++++++++ Source-Code/ChatApp/script.js | 45 +++++++++++++++++++ Source-Code/ChatApp/style.css | 82 ++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 Source-Code/ChatApp/index.html create mode 100644 Source-Code/ChatApp/script.js create mode 100644 Source-Code/ChatApp/style.css diff --git a/Source-Code/ChatApp/index.html b/Source-Code/ChatApp/index.html new file mode 100644 index 0000000..11bd23d --- /dev/null +++ b/Source-Code/ChatApp/index.html @@ -0,0 +1,20 @@ + + + + + + Chat App + + + +
        +

        Simple Chat App

        +
        +
        + + +
        +
        + + + diff --git a/Source-Code/ChatApp/script.js b/Source-Code/ChatApp/script.js new file mode 100644 index 0000000..38bc0da --- /dev/null +++ b/Source-Code/ChatApp/script.js @@ -0,0 +1,45 @@ +const chatBox = document.getElementById('chatBox'); +const chatForm = document.getElementById('chatForm'); +const messageInput = document.getElementById('messageInput'); + +// Display a message in the chat box +const displayMessage = (message, sender) => { + const messageElement = document.createElement('div'); + messageElement.classList.add('message', sender); + messageElement.textContent = message; + chatBox.appendChild(messageElement); + chatBox.scrollTop = chatBox.scrollHeight; // Auto-scroll to the bottom +}; + +// Load messages from local storage +const loadMessages = () => { + const messages = JSON.parse(localStorage.getItem('chatMessages')) || []; + chatBox.innerHTML = ''; + messages.forEach(({ user, bot }) => { + displayMessage(user, 'user'); + displayMessage(bot, 'bot'); + }); +}; + +// Add messages to local storage +const addMessagesToStorage = (userMessage, botReply) => { + const messages = JSON.parse(localStorage.getItem('chatMessages')) || []; + messages.push({ user: userMessage, bot: botReply }); + localStorage.setItem('chatMessages', JSON.stringify(messages)); +}; + +// Handle form submission +chatForm.addEventListener('submit', (e) => { + e.preventDefault(); + const userMessage = messageInput.value.trim(); + if (userMessage) { + const botReply = userMessage; // Echo the user message + displayMessage(userMessage, 'user'); + displayMessage(botReply, 'bot'); + addMessagesToStorage(userMessage, botReply); + messageInput.value = ''; + } +}); + +// Initialize the app +loadMessages(); diff --git a/Source-Code/ChatApp/style.css b/Source-Code/ChatApp/style.css new file mode 100644 index 0000000..f05b489 --- /dev/null +++ b/Source-Code/ChatApp/style.css @@ -0,0 +1,82 @@ +body { + font-family: Arial, sans-serif; + background-color: #cbdc30; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} + +.chat-container { + background-color: #fff; + border-radius: 8px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + width: 400px; + padding: 20px; +} + +h1 { + text-align: center; + color: #333; +} + +.chat-box { + background-color: #f9f9f9; + border: 1px solid #ddd; + border-radius: 8px; + padding: 10px; + height: 300px; + overflow-y: auto; + margin-bottom: 10px; +} + +.chat-box .message { + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 10px; + border-radius: 12px 2px; + font-size: 14px; +} + +.message.user { + background-color: #cdf2f7; + color: #025f54; + float: right; + width: 50%; +} + +.message.bot { + background-color: #fbcfdd; + color: #d81b60; + float: left; + width: 50%; +} + +form { + display: flex; +} + +input[type="text"] { + flex: 1; + padding: 10px; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 14px; +} + +button { + padding: 10px 20px; + border: none; + background-color: #049786; + color: white; + font-size: 14px; + border-radius: 4px; + cursor: pointer; +} + +button:hover { + background-color: #005f4b; +} From 57330869d02b0216ab0fe6c380db1c412493e715 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 26 Dec 2024 01:35:44 +0530 Subject: [PATCH 100/109] Update the raedme with description --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index e0484ab..53b244e 100644 --- a/README.md +++ b/README.md @@ -551,6 +551,17 @@ In order to run this project you need: +
      • +
        +Simple Chat App +

        This is a simple chat application that simulates a conversation where the app echoes the user's messages as a response. Messages are stored in the browser's local storage, so they persist even after the page is refreshed.

        + +
        +
      • +

        (back to top)

        From 353f0bc6ac29d67ebec371835462763e443d873d Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 26 Dec 2024 02:11:35 +0530 Subject: [PATCH 101/109] Add the project --- Source-Code/InteractivePolling/index.html | 29 ++++++++++ Source-Code/InteractivePolling/script.js | 48 ++++++++++++++++ Source-Code/InteractivePolling/style.css | 67 +++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 Source-Code/InteractivePolling/index.html create mode 100644 Source-Code/InteractivePolling/script.js create mode 100644 Source-Code/InteractivePolling/style.css diff --git a/Source-Code/InteractivePolling/index.html b/Source-Code/InteractivePolling/index.html new file mode 100644 index 0000000..2d67c99 --- /dev/null +++ b/Source-Code/InteractivePolling/index.html @@ -0,0 +1,29 @@ + + + + + + Interactive Polling App + + + +
        +

        Vote for Your Favorite Programming Language

        +
        + + + + +
        +
        +

        Results

        +
          + +
        +
        +
        + + + + + diff --git a/Source-Code/InteractivePolling/script.js b/Source-Code/InteractivePolling/script.js new file mode 100644 index 0000000..e0b4d0b --- /dev/null +++ b/Source-Code/InteractivePolling/script.js @@ -0,0 +1,48 @@ +document.addEventListener('DOMContentLoaded', () => { + const pollOptions = document.querySelectorAll('.poll-option'); + const resultsList = document.getElementById('results-list'); + + const votes = JSON.parse(localStorage.getItem('votes')) || { + Ruby: 0, + Python: 0, + Java: 0, + Javascript: 0, + }; + + // Update the results on the page + function updateResults() { + resultsList.innerHTML = ''; // Clear previous results + + const totalVotes = Object.values(votes).reduce( + (total, count) => total + count, + 0, + ); + + // Display the updated results + Object.entries(votes).forEach(([option, count]) => { + const percentage = totalVotes + ? ((count / totalVotes) * 100).toFixed(1) + : 0; + + const resultItem = document.createElement('li'); + resultItem.innerHTML = ` + ${option}: ${count} votes (${percentage}%) +
        + `; + resultsList.appendChild(resultItem); + }); + } + + // Display initial poll results + updateResults(); + + // Event listener for voting + pollOptions.forEach((option) => { + option.addEventListener('click', () => { + const selectedVote = option.getAttribute('data-vote'); + votes[selectedVote] += 1; + localStorage.setItem('votes', JSON.stringify(votes)); + updateResults(); + }); + }); +}); diff --git a/Source-Code/InteractivePolling/style.css b/Source-Code/InteractivePolling/style.css new file mode 100644 index 0000000..f85b2e4 --- /dev/null +++ b/Source-Code/InteractivePolling/style.css @@ -0,0 +1,67 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; + background-color: #f9f9f9; +} + +.poll-container { + background: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + width: 100%; + max-width: 400px; + text-align: center; +} + +.poll-question { + font-size: 1.2rem; + margin-bottom: 20px; +} + +label { + display: block; + margin: 10px 0; + font-size: 1rem; +} + +button { + margin-top: 20px; + padding: 10px 20px; + background-color: #007bff; + color: #fff; + border: none; + border-radius: 4px; + cursor: pointer; +} + +button:hover { + background-color: #0056b3; +} + +.poll-results { + margin-top: 20px; + text-align: left; +} + +.poll-results ul { + list-style: none; + padding: 0; +} + +.poll-results li { + padding: 5px 0; + font-size: 1rem; +} + +.poll-results .bar { + background-color: #007bff; + height: 10px; + border-radius: 4px; + margin-top: 5px; +} From 4fb1b8e4d6ca36c843ee9a509b429148a4ef72e1 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 26 Dec 2024 02:14:31 +0530 Subject: [PATCH 102/109] Update the Readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 53b244e..b5ac8c7 100644 --- a/README.md +++ b/README.md @@ -562,6 +562,17 @@ In order to run this project you need: +
      • +
        +Simple Chat App +

        This is an interactive polling app that allows users to vote on a specific question. Users can vote for their preferred options and view the results in real-time. The app tracks the votes for each option and stores them in the local storage so the votes persist even after the page is refreshed.

        + +
        +
      • +

        (back to top)

        From 01c0b8a8c18a56e866df2d68e5df94d17afaf51f Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 26 Dec 2024 02:28:52 +0530 Subject: [PATCH 103/109] Add a project --- Source-Code/DragAndDrop/index.html | 32 ++++++++++++++++ Source-Code/DragAndDrop/script.js | 54 +++++++++++++++++++++++++++ Source-Code/DragAndDrop/style.css | 60 ++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 Source-Code/DragAndDrop/index.html create mode 100644 Source-Code/DragAndDrop/script.js create mode 100644 Source-Code/DragAndDrop/style.css diff --git a/Source-Code/DragAndDrop/index.html b/Source-Code/DragAndDrop/index.html new file mode 100644 index 0000000..c49e5d6 --- /dev/null +++ b/Source-Code/DragAndDrop/index.html @@ -0,0 +1,32 @@ + + + + + + Drag and Drop App + + + +
        +
        +

        Task List 1

        +
          +
        • Task 1
        • +
        • Task 2
        • +
        • Task 3
        • +
        +
        + +
        +

        Task List 2

        +
          +
        • Task 4
        • +
        • Task 5
        • +
        • Task 6
        • +
        +
        +
        + + + + diff --git a/Source-Code/DragAndDrop/script.js b/Source-Code/DragAndDrop/script.js new file mode 100644 index 0000000..0cee99d --- /dev/null +++ b/Source-Code/DragAndDrop/script.js @@ -0,0 +1,54 @@ +// Get all the lists and list items +const lists = document.querySelectorAll('.list'); +const items = document.querySelectorAll('li'); + +// Drag start function to add the dragging class +function dragStart(e) { + e.target.classList.add('dragging'); +} + +// Drag end function to remove the dragging class +function dragEnd(e) { + e.target.classList.remove('dragging'); +} + +// Drag over function to allow dropping on the list +function dragOver(e) { + e.preventDefault(); +} + +// Drag enter function to style the list when an item is dragged over +function dragEnter(e) { + e.target.classList.add('over'); +} + +// Drag leave function to remove the styling when the item leaves the list +function dragLeave(e) { + e.target.classList.remove('over'); +} + +// Drop function to move the dragged item into the list +function drop(e) { + e.preventDefault(); + const draggedItem = document.querySelector('.dragging'); + e.target.classList.remove('over'); + + // If the target is a list, append the dragged item to it + if (e.target.classList.contains('list')) { + e.target.querySelector('ul').appendChild(draggedItem); + } +} + +// Add event listeners for dragging items +items.forEach((item) => { + item.addEventListener('dragstart', dragStart); + item.addEventListener('dragend', dragEnd); +}); + +// Add event listeners for the lists to accept dropped items +lists.forEach((list) => { + list.addEventListener('dragover', dragOver); + list.addEventListener('dragenter', dragEnter); + list.addEventListener('dragleave', dragLeave); + list.addEventListener('drop', drop); +}); diff --git a/Source-Code/DragAndDrop/style.css b/Source-Code/DragAndDrop/style.css new file mode 100644 index 0000000..b862af5 --- /dev/null +++ b/Source-Code/DragAndDrop/style.css @@ -0,0 +1,60 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #f0f0f0; +} + +.container { + display: flex; + gap: 20px; +} + +.list { + background-color: #fff; + border-radius: 8px; + padding: 20px; + width: 200px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); +} + +h2 { + text-align: center; + margin-bottom: 20px; +} + +ul { + list-style-type: none; +} + +li { + padding: 10px; + margin: 5px 0; + background-color: #4caf50; + color: white; + border-radius: 4px; + cursor: grab; + transition: background-color 0.3s ease; +} + +li:hover { + background-color: #45a049; +} + +/* When dragging an item */ +li.dragging { + opacity: 0.5; +} + +.list.over { + border: 2px dashed #4caf50; + background-color: #f9f9f9; +} From 9287753e6d38fe7a97e8cc80869037540cfa079d Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Thu, 26 Dec 2024 02:30:44 +0530 Subject: [PATCH 104/109] Update readme with the description --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index b5ac8c7..b0eaa79 100644 --- a/README.md +++ b/README.md @@ -573,6 +573,17 @@ In order to run this project you need: +
      • +
        +Drag and Drop App +

        This is a simple drag-and-drop app where users can move items from one list to another. It's a basic implementation of a task manager or an image gallery where users can organize their items by dragging and dropping.

        + +
        +
      • +

        (back to top)

        From b1b3925bcbe1a9bdd4627bfae52278b455be2136 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Fri, 27 Dec 2024 01:50:17 +0530 Subject: [PATCH 105/109] create a empty file for the project --- Source-Code/AdsBlockerExtension/background.js | 0 Source-Code/AdsBlockerExtension/manifest.json | 0 Source-Code/AdsBlockerExtension/popup.html | 0 Source-Code/AdsBlockerExtension/style.css | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Source-Code/AdsBlockerExtension/background.js create mode 100644 Source-Code/AdsBlockerExtension/manifest.json create mode 100644 Source-Code/AdsBlockerExtension/popup.html create mode 100644 Source-Code/AdsBlockerExtension/style.css diff --git a/Source-Code/AdsBlockerExtension/background.js b/Source-Code/AdsBlockerExtension/background.js new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/AdsBlockerExtension/manifest.json b/Source-Code/AdsBlockerExtension/manifest.json new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/AdsBlockerExtension/popup.html b/Source-Code/AdsBlockerExtension/popup.html new file mode 100644 index 0000000..e69de29 diff --git a/Source-Code/AdsBlockerExtension/style.css b/Source-Code/AdsBlockerExtension/style.css new file mode 100644 index 0000000..e69de29 From 8bf1afcade09ec382e68631d824fa4c10b557f18 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sat, 28 Dec 2024 02:17:55 +0530 Subject: [PATCH 106/109] add the feature block the ads --- Source-Code/AdsBlockerExtension/background.js | 0 Source-Code/AdsBlockerExtension/content.js | 41 ++++++++++++++++++ .../AdsBlockerExtension/icons/icon128.png | Bin 0 -> 2101 bytes .../AdsBlockerExtension/icons/icon16.png | Bin 0 -> 1066 bytes .../AdsBlockerExtension/icons/icon48.png | Bin 0 -> 1560 bytes Source-Code/AdsBlockerExtension/manifest.json | 27 ++++++++++++ Source-Code/AdsBlockerExtension/popup.css | 35 +++++++++++++++ Source-Code/AdsBlockerExtension/popup.html | 24 ++++++++++ Source-Code/AdsBlockerExtension/popup.js | 34 +++++++++++++++ Source-Code/AdsBlockerExtension/style.css | 0 10 files changed, 161 insertions(+) delete mode 100644 Source-Code/AdsBlockerExtension/background.js create mode 100644 Source-Code/AdsBlockerExtension/content.js create mode 100644 Source-Code/AdsBlockerExtension/icons/icon128.png create mode 100644 Source-Code/AdsBlockerExtension/icons/icon16.png create mode 100644 Source-Code/AdsBlockerExtension/icons/icon48.png create mode 100644 Source-Code/AdsBlockerExtension/popup.css create mode 100644 Source-Code/AdsBlockerExtension/popup.js delete mode 100644 Source-Code/AdsBlockerExtension/style.css diff --git a/Source-Code/AdsBlockerExtension/background.js b/Source-Code/AdsBlockerExtension/background.js deleted file mode 100644 index e69de29..0000000 diff --git a/Source-Code/AdsBlockerExtension/content.js b/Source-Code/AdsBlockerExtension/content.js new file mode 100644 index 0000000..a40a9fd --- /dev/null +++ b/Source-Code/AdsBlockerExtension/content.js @@ -0,0 +1,41 @@ +const adSelectors = [ + 'iframe[src*="ads"]', + 'div[class*="ad"]', + 'div[id*="ad"]', + "ins.adsbygoogle", + "[data-ad]", + ".ad-banner", +]; + +// Normalize domain +const normalizeDomain = (domain) => domain.replace(/^www\./, ""); + +chrome.storage.local.get( + { adBlockerEnabled: true, whitelist: [] }, + ({ adBlockerEnabled, whitelist }) => { + if (!adBlockerEnabled) return; + + const currentSite = normalizeDomain(window.location.hostname); + const normalizedWhitelist = whitelist.map(normalizeDomain); + + if (normalizedWhitelist.includes(currentSite)) { + console.log(`Whitelist active: Ads are allowed on ${currentSite}`); + return; // Skip ad blocking + } + + // Ad blocking logic + const blockAds = () => { + adSelectors.forEach((selector) => { + const ads = document.querySelectorAll(selector); + console.log(`Found ${ads.length} ads for selector: ${selector}`); + ads.forEach((ad) => ad.remove()); + }); + }; + + blockAds(); // Initial blocking + + // Observe dynamically loaded ads + const observer = new MutationObserver(blockAds); + observer.observe(document.body, { childList: true, subtree: true }); + } +); diff --git a/Source-Code/AdsBlockerExtension/icons/icon128.png b/Source-Code/AdsBlockerExtension/icons/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..fbebcc8680e6b55762cf502443435ec007b64311 GIT binary patch literal 2101 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 literal 0 HcmV?d00001 diff --git a/Source-Code/AdsBlockerExtension/manifest.json b/Source-Code/AdsBlockerExtension/manifest.json index e69de29..3982ced 100644 --- a/Source-Code/AdsBlockerExtension/manifest.json +++ b/Source-Code/AdsBlockerExtension/manifest.json @@ -0,0 +1,27 @@ +{ + "manifest_version": 2, + "name": "Ad Blocker", + "version": "1.0", + "description": "A simple ad blocker to remove advertisements from websites.", + "permissions": ["activeTab", "storage"], + "content_scripts": [ + { + "matches": [""], + "js": ["content.js"] + } + ], + "browser_action": { + "default_popup": "popup.html", + "default_icon": { + "16": "./icons/icon16.png", + "48": "./icons/icon48.png", + "128": "./icons/icon128.png" + } + }, + "icons": { + "16": "./icons/icon16.png", + "48": "./icons/icon48.png", + "128": "./icons/icon128.png" + } + } + \ No newline at end of file diff --git a/Source-Code/AdsBlockerExtension/popup.css b/Source-Code/AdsBlockerExtension/popup.css new file mode 100644 index 0000000..fb2d8d6 --- /dev/null +++ b/Source-Code/AdsBlockerExtension/popup.css @@ -0,0 +1,35 @@ +body { + font-family: Arial, sans-serif; + margin: 10px; + width: 250px; + } + + h1 { + font-size: 1.5em; + margin-bottom: 10px; + } + + label { + display: block; + margin-bottom: 20px; + } + + input { + margin-right: 10px; + } + + ul { + list-style-type: none; + padding: 0; + } + + li { + margin: 5px 0; + display: flex; + justify-content: space-between; + } + + button { + cursor: pointer; + } + \ No newline at end of file diff --git a/Source-Code/AdsBlockerExtension/popup.html b/Source-Code/AdsBlockerExtension/popup.html index e69de29..de88f92 100644 --- a/Source-Code/AdsBlockerExtension/popup.html +++ b/Source-Code/AdsBlockerExtension/popup.html @@ -0,0 +1,24 @@ + + + + + + Ad Blocker + + + +

        Ad Blocker

        + +
        +

        Whitelist

        + + +
          +
          +

          + + + diff --git a/Source-Code/AdsBlockerExtension/popup.js b/Source-Code/AdsBlockerExtension/popup.js new file mode 100644 index 0000000..ce29ed3 --- /dev/null +++ b/Source-Code/AdsBlockerExtension/popup.js @@ -0,0 +1,34 @@ +const whitelistInput = document.getElementById("whitelist-input"); +const addToWhitelist = document.getElementById("add-to-whitelist"); +const whitelist = document.getElementById("whitelist"); +let whitelistData = JSON.parse(localStorage.getItem("whitelist")) || []; + +// Load whitelist +function loadWhitelist() { + whitelist.innerHTML = ""; + whitelistData.forEach((site) => { + const li = document.createElement("li"); + li.textContent = site; + const removeBtn = document.createElement("button"); + removeBtn.textContent = "Remove"; + removeBtn.addEventListener("click", () => { + whitelistData = whitelistData.filter((item) => item !== site); + localStorage.setItem("whitelist", JSON.stringify(whitelistData)); + loadWhitelist(); + }); + li.appendChild(removeBtn); + whitelist.appendChild(li); + }); +} + +addToWhitelist.addEventListener("click", () => { + const site = whitelistInput.value.trim(); + if (site && !whitelistData.includes(site)) { + whitelistData.push(site); + localStorage.setItem("whitelist", JSON.stringify(whitelistData)); + whitelistInput.value = ""; + loadWhitelist(); + } +}); + +loadWhitelist(); diff --git a/Source-Code/AdsBlockerExtension/style.css b/Source-Code/AdsBlockerExtension/style.css deleted file mode 100644 index e69de29..0000000 From 351e3a2289eef7f5287977e12750488dac1bca85 Mon Sep 17 00:00:00 2001 From: afreen shaik Date: Sat, 28 Dec 2024 15:36:13 +0530 Subject: [PATCH 107/109] Add and updat ethe projec with description --- README.md | 11 ++++ Source-Code/AdsBlockerExtension/content.js | 11 ++-- Source-Code/AdsBlockerExtension/popup.css | 67 +++++++++++----------- Source-Code/AdsBlockerExtension/popup.js | 26 ++++----- 4 files changed, 63 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index b0eaa79..8927f99 100644 --- a/README.md +++ b/README.md @@ -584,6 +584,17 @@ In order to run this project you need: +
        • +
          +Ads Blocker Extension +

          This is a simple Ad Blocker Extension. AdBlocker is a lightweight browser extension designed to block intrusive advertisements and enhance your browsing experience.

          + +
          +
        • +

          (back to top)

          diff --git a/Source-Code/AdsBlockerExtension/content.js b/Source-Code/AdsBlockerExtension/content.js index a40a9fd..7e719d8 100644 --- a/Source-Code/AdsBlockerExtension/content.js +++ b/Source-Code/AdsBlockerExtension/content.js @@ -1,14 +1,15 @@ +/* eslint-disable no-undef */ const adSelectors = [ 'iframe[src*="ads"]', 'div[class*="ad"]', 'div[id*="ad"]', - "ins.adsbygoogle", - "[data-ad]", - ".ad-banner", + 'ins.adsbygoogle', + '[data-ad]', + '.ad-banner', ]; // Normalize domain -const normalizeDomain = (domain) => domain.replace(/^www\./, ""); +const normalizeDomain = (domain) => domain.replace(/^www\./, ''); chrome.storage.local.get( { adBlockerEnabled: true, whitelist: [] }, @@ -37,5 +38,5 @@ chrome.storage.local.get( // Observe dynamically loaded ads const observer = new MutationObserver(blockAds); observer.observe(document.body, { childList: true, subtree: true }); - } + }, ); diff --git a/Source-Code/AdsBlockerExtension/popup.css b/Source-Code/AdsBlockerExtension/popup.css index fb2d8d6..5ba01a8 100644 --- a/Source-Code/AdsBlockerExtension/popup.css +++ b/Source-Code/AdsBlockerExtension/popup.css @@ -1,35 +1,34 @@ body { - font-family: Arial, sans-serif; - margin: 10px; - width: 250px; - } - - h1 { - font-size: 1.5em; - margin-bottom: 10px; - } - - label { - display: block; - margin-bottom: 20px; - } - - input { - margin-right: 10px; - } - - ul { - list-style-type: none; - padding: 0; - } - - li { - margin: 5px 0; - display: flex; - justify-content: space-between; - } - - button { - cursor: pointer; - } - \ No newline at end of file + font-family: Arial, sans-serif; + margin: 10px; + width: 250px; +} + +h1 { + font-size: 1.5em; + margin-bottom: 10px; +} + +label { + display: block; + margin-bottom: 20px; +} + +input { + margin-right: 10px; +} + +ul { + list-style-type: none; + padding: 0; +} + +li { + margin: 5px 0; + display: flex; + justify-content: space-between; +} + +button { + cursor: pointer; +} diff --git a/Source-Code/AdsBlockerExtension/popup.js b/Source-Code/AdsBlockerExtension/popup.js index ce29ed3..2a544a6 100644 --- a/Source-Code/AdsBlockerExtension/popup.js +++ b/Source-Code/AdsBlockerExtension/popup.js @@ -1,19 +1,19 @@ -const whitelistInput = document.getElementById("whitelist-input"); -const addToWhitelist = document.getElementById("add-to-whitelist"); -const whitelist = document.getElementById("whitelist"); -let whitelistData = JSON.parse(localStorage.getItem("whitelist")) || []; +const whitelistInput = document.getElementById('whitelist-input'); +const addToWhitelist = document.getElementById('add-to-whitelist'); +const whitelist = document.getElementById('whitelist'); +let whitelistData = JSON.parse(localStorage.getItem('whitelist')) || []; // Load whitelist function loadWhitelist() { - whitelist.innerHTML = ""; + whitelist.innerHTML = ''; whitelistData.forEach((site) => { - const li = document.createElement("li"); + const li = document.createElement('li'); li.textContent = site; - const removeBtn = document.createElement("button"); - removeBtn.textContent = "Remove"; - removeBtn.addEventListener("click", () => { + const removeBtn = document.createElement('button'); + removeBtn.textContent = 'Remove'; + removeBtn.addEventListener('click', () => { whitelistData = whitelistData.filter((item) => item !== site); - localStorage.setItem("whitelist", JSON.stringify(whitelistData)); + localStorage.setItem('whitelist', JSON.stringify(whitelistData)); loadWhitelist(); }); li.appendChild(removeBtn); @@ -21,12 +21,12 @@ function loadWhitelist() { }); } -addToWhitelist.addEventListener("click", () => { +addToWhitelist.addEventListener('click', () => { const site = whitelistInput.value.trim(); if (site && !whitelistData.includes(site)) { whitelistData.push(site); - localStorage.setItem("whitelist", JSON.stringify(whitelistData)); - whitelistInput.value = ""; + localStorage.setItem('whitelist', JSON.stringify(whitelistData)); + whitelistInput.value = ''; loadWhitelist(); } }); From f7d378a61b5d29add0c2f22888156f8034a10c2c Mon Sep 17 00:00:00 2001 From: Tajul Afreen <119053190+tajulafreen@users.noreply.github.com> Date: Sat, 28 Dec 2024 15:58:12 +0530 Subject: [PATCH 108/109] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8927f99..6f6364f 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ In order to run this project you need:
        • Open the index.html file in your preferred web browser.
        • -

          Feel free to explore, modify, and experiment with the code to better understand how these animations and transitions are achieved.

          +

          Feel free to explore, modify, and experiment with the code to better understand.

          (back to top)

          From 84b49f65ba8fc962adc6d0fb0c33af8ab85823aa Mon Sep 17 00:00:00 2001 From: Tajul Afreen <119053190+tajulafreen@users.noreply.github.com> Date: Fri, 28 Mar 2025 16:54:56 +0530 Subject: [PATCH 109/109] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f6364f..c15f7cc 100644 --- a/README.md +++ b/README.md @@ -564,7 +564,7 @@ In order to run this project you need:
        • -Simple Chat App +Interactive Polling App

          This is an interactive polling app that allows users to vote on a specific question. Users can vote for their preferred options and view the results in real-time. The app tracks the votes for each option and stores them in the local storage so the votes persist even after the page is refreshed.