From a90ce50c72a22d70a19bffbdd4e4f69d67525bad Mon Sep 17 00:00:00 2001 From: Jordan Date: Sat, 4 Jan 2025 19:12:33 -0500 Subject: [PATCH 1/2] feat: create app manifest for pwa detection --- src/html/index.html | 67 ++--- src/public/favicon.png | Bin 0 -> 15701 bytes src/public/manifest.json | 16 + webpack.config.js | 612 +++++++++++++++++++-------------------- 4 files changed, 348 insertions(+), 347 deletions(-) create mode 100644 src/public/favicon.png create mode 100644 src/public/manifest.json diff --git a/src/html/index.html b/src/html/index.html index c8901d44..c0bc060c 100644 --- a/src/html/index.html +++ b/src/html/index.html @@ -1,40 +1,41 @@ - - RuneScape 2 + + RuneScape 2 - - - - + + + + - + + - - - - - + touch-action: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + z-index: -1; + } + + + + + \ No newline at end of file diff --git a/src/public/favicon.png b/src/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb2f4d83ed836dd2a445dfe82faf50c103d0624 GIT binary patch literal 15701 zcmV-bJ*vWqP)PyA07*naRCr$Py=#nI=b0wU(dsV18(N=vB~Nom_rB=uz2)1=3iWb9yv zPKE{&crE`32D6wfkeNa9W3UMLV}k(#BnAdE$iT>tm1nWQijJ3y5wey&w%FVBs;!M7 zxnpVFvMyxv)|a}U`|bOp_d9*aW{VWNNlGHADxpwR_o?bSr=EJR&-=WDb53A*`&?cD zLI^KT{M+CDw(k4USBXUaamgw@J2iEna_HehaPZ&*uy0}l8jTUqGz~n@gN==K=ytl0 zBr%X7fIgSl0R+#96DR126DQd5<1a~-=Hf)^hervJbmb zuhl?RHSm28TCEoJdp$^!WC)k4h4XD+sV3%xA6a~UCgh77*p65cAW0A%sB)jBkO309?tqik}UG z==&c*+rfjD=LbJ{c}9}xe90=!HX0+-qhsS!V`F3WsRs_g{{0hBsgxm28T9)Oc&-mw z#(+`+gc3AA!UEyr&;s56*x8Y79hVx7$!3*! z-nQ+Tsi_C(zJ2>(WONitb_rBf5phl!#^5*}1b!sqAPKDx0Z5Ys;y4sRw1|&}F6{n9 z&^6iC@#7L>Y(^&Pyj>~JHYX;hCnxt$HJcOl{rmTcRJ~NP0DwXmB@hG=#1R4|fhby&V^fXBNWEIEfvy{% zYC0H(1-fAXm1Ge(yIvsTA4&+QiXyVFG>O6YeQ*Z@Xm?uB+T4KNu$6It!ROlE)^TaF zG1&|to1-Mpwk9Sfnh!nnAZ<4HaaC1GnqfA@L6TKa6dfc4La-Lw5( zZ#|0Ra0sA#96%o_68`HS%n(_bx9rmF_}KV#vpF#}GBR2p9UTGNE`zS?qRO0RTv#Av z^Kedq3tNMAW)2x+5XX_QJidoPwFA9g7h0`N7KP!PQ52pIJnzjUj(bA@-NOL7UT-T5 z-8leq%rcF+W^%Gp+amL-tj?O2HC?jpsYq0t)a8uZRz@7xbe}jmFq9lPNN%N*D=Yp=$?RH^(eGM*Oy2QdDTu#$$fo0iJ#G(~j zFRlLdU;jmW*bBQy!E=>Kh`p^wGfQBO5OPe_v^m=@H|zBVZ8S!BtyU)p9?P;omShnm z=T&7Y;vlp}agu-^h7d-P2%hmCh9TeF+$5JTUS#b~XDtkZMGE|suB(e*{_=0Fq2(#w z!_WfVLm=8&B#dKcO4qe%T{mWRO`SIkV`g-8jMnQ7sFbTBXf{ntFbP@4A&O%G5Lr>N&|MCq z?Uv`!M;~oaN~ao)vFYa6_-v(Cowx1sOmlpKj*gB(tyTluu7F{fpvbC-c@R8Eg!eoj zJhVVbB6!ZWjU;&)yucUjiH+6)L{G}~;BPw$)9KQ%TsUZ0qlfRT|=s8lMTX@(%b3-AbPMgTz&3Kxbk z4#q%|EQ6}5f*|Hc0rUqwXtg(46h+HX8ZSgix)jCH3P^1Adw>1cA8}jTFWC@4cPW5& z_O{yXb~6k^Q6w}?Yi@jOi%EE3ijR(rh-?c3X3Vy*IC$0a1frsxq^Tf)iA-$kzbs3+ z>w9G24wxT!YiW`!azai?8CksWTVGf^xh>ne5pQe=pt}%2*K=E@iM_4TtZA0!%eFnU zfARo5aNq!pkBtj=ghPL5d9cEqrC1zHg~dV36GbtwjEOoAf(Q$Rn2~vb2T>Gu!X#Xc zlXxY|k|hATFgN>Oe5~6VTA;fSG*@DZZIq1T$B#>Iz4g`%=VZQAD$S0Jj7*P@H>bwO z#_RhhCt=^jKB!i!qCIg1C=3bjd65vg%;>U^Adf_N1W(TE2{GP*UcblEG+E}r7nlS~ zoUxUXMppmgFY+Sc_H64$muzT(?jkVlbXylLw3|ud%@KfOhH1`?jg2*@4ouMl2d4PM z!~_`|8xw8|Elj7=6;024fX^Nj?%!7qP*L8Vovqjd{ z*I1|1T??adky1ESF4sQN+uDuW8V1p~`f1<9aJ`7%ioY zFKAkJOKxijpgRnNTY0&iZtJbL@*-iWWaZh`*tj6TBXH2tVEX|p$C#$)Y>XU8d5n_^ zu_v4sML^+jAjUnNP6sYsx(JsqUuIztEMtmJBzcK*vSL}V`n~Ucw70d_a~Z}!d%a?J z;P~shEpIRfk|f;LM6=mEc<@2GfB$}NSp}1j2&+=a8{|bnq+jGIIyOv^jw%9YLa@HW zFJ8Pz-hcmncKPz8Be} z#HJJ~O-r&gD&RRvpLLb&+s4r#b}CZm!ZDIOe)V!qA&z1dgeSJZGAvX0=+O)oP75 z8V!QrDV0hhra^0iAVQE}7KV=)2ch*r0O1Y6lcp*6JdgDIedc*cfKL|FI6BoEv=>jF zJh_IJ=X#Wk+c~`X2i;Y!8iwtPOk`m=MKKsSqPLaA>1vXtE0D1zSyLAN@-P4QWsG@>x4YL={o_t^ z2%uep;8qX2p4%b>=4Dx))l{UT>Qk0w)sfGG)nx<_W?Yz#7b$x_f`b<4YQT&@LQ8~h zOc3DL)?j^OL-e*3MOm;)_L8n^D-#nVtAGCIe||^Z)-a8~RW$7JdDri4g`&45E7F{y z8%^7`X|-DABO@aO0ffy_bW`Y(iU|s|LI|KDUB_-Zf(ro@$1z`9TO;Sron@CVudRhq zuqa8&sr~z>7GHYl#XFX5-RRVZ7HE&4*zMsra$Aa`%_@o_+?I%WDpjadD`NBp31R5E z5FBW2g#M1G_iT;e2zo|{Zt6-FhSldzr`@@Hd2MxlV|~RP^p}z_T6p)|yLU9(8Ukpy zpZpy-?s`l@&ZT^A%QU7<%M#fZ#yogO;Gm?gf=y5vi-m=|D#R^OVkK`&AYd@d5^5P@ zdZN#QFj)3oZ=u`oFZFu8l_2P^Uc7km6LVWb7j_3ga>H-rHU)T;Soxd3`J3iofJ{Pm zOp%p2%gVE@TCK+G^*r0M?UG2(i)?CJuzSUoq5Bd%9@oVh5AXGQM5O8i2gi*UIlw7h zr;Ck7*%WRhOvzp{Np)~Cr)A^w~JN>JMKu^xYFBloRu(&mpIQB9(m-!+wN`c^>PdW zwAU+kgX4FO8~@c`eOD9-Wr@xziaM=n`jlblbp#K}=pt}(@_Sy#K?|g5sMV8q+jCb& zgh~dwECi0Y4+hZd_gNGM%TW|9ctN-nhQW%a(bd;qfBjQ&TSFIihd@)j%=HNHj1fVA zmnC^l*Y&1lm1wC{;+0C7p!LDdI<_1T99TU@;9vlaDLh&v1Q1#vv^r>Udc7X+_xl8g z{(RpT1bEU(nx@WJmPHX5Xmv1P zMk|CM!I%blJV?7ht5Yu9f}*;;ErBr))_L&m`(DTQ{napxR+2Pc0w4>2@+bept_kpW z@U*YI)X;_9##Oy8C4-ZBRo7;1t2AwwZBZmN3|(YcxU>YpgT+E@k|J<&VE6)1=-Loy z=+=BcC<0~yvRqks-m}5uh$8>Dg+D8rgys?k%l8c(3KSx=VIWm zC?aBSYcS}OPFL`G*5Wu>1W_a`FHTPW(b~zASH+#~hA;onh3yhpA9Y*Nl%nXtBDS+1Aj7?E)y*J7l}tDtcR< z=glz&$7ETavrMa5E>~!&WOH5D309PgZhApE#n;83p*6xl8Lbn7tSBT727TV^^+~te zWv=V2CFr(9kx*ZpocwfqTYJ4sLksjVSM1u}*6%iwB$=X=P6N7r$TKCYM6vjX zm1WGNiphzqr1yO1Xb~hA1w~nw@`+JgUV`zF>vmk%UG;r`C5h4{%IU&`kNn9p#yrJa zyc=SkotJ9}pc??_qrI)an#r-Dyh zBoX7rm~EM+*~Ea^FibAX3aWSK^0~MwU<*JwaIS7U7TU~PKiis~xRPxR2K}`-ju$D1 zQ_5YMZ4G0f-F%($5BSQ;q^HH)Ry3vS`n0BLv#P4jtEx6rDxurL`EyNJ9+K9?mEUjSX9LJMDDhtt!yh^!uoi;fNw3A@r{5ZS56I zpL+o9%(lM!-S5sY#^#eGnMDv`3`8ldVmHq$hvlu}+U zmkBmV(E{a-(A)yya@wsWH`fHuMJ$x23HN+oFbQ)_LR5fH>~m{@c4`u$ z0=z8CqPHc>vT$39q9AyL#lfr#`&`A;C|+ElsIp~!@>D(_2E>hj3}YZ1I}Stafpt9J zT@3OcD3cJSbUA_s`8?AICRJ7I*mA)B7J>(@PBCg+ zOidJlGbO0c47m>TmKrK9EkVYi=XorNljS5$7X+Uti&rT9YzXjs1;=iV|J(uSdfC=s zFc3^a0I_!q-5Aw0jaMoaf`Kyv3BiNCt9)7%TN6mhkhVr}a)IxwI?NIGJeN3*BUCc7 zEZt%f>Yw`D)^0#>JICD90NQRzu6Gf3_KvRC+u910XOkqECxpzXs!FlZiLR=kpQ05) z&>%4k8>D#4RWgdyJ=f;J-xbrNzVCN@-&^&(oJq*}y`62{cR}>cz*C%X0ix^mwh%Oo zvDr9|r_(eQ*%nex3)fXV7LvKeM!#z>W?neVWmaNAh8NjZ5-%r7x)4RdQW)O*+17mp zpu!Ek^wLXmyWLijB$3MHGBN>?Z^J5;N>-^v+Ixvnd+E!5{h z0(_Be6?6*>m=QchwpBDl^Q`Nt*ntR|uk4=4MGvAV>V#pm8b!FcBo*1#HGfk0Pun=%gpFr*xT=B#e{GR4S4Q0)I2Uoy_O(et5Oh4x zTMfkARRFaOM=5=QQu@4M7zP3YKV;wc*E^lg zxxrwtuIsvwJ*-NlVgkT;k|YNKU<_09B3MS?6hwHjpk$lNDlS&xwzl@F7it+Sj^pJt zO&78(TgtNRzA6Yru1=`6HM3>}w-cfX6gpebus@hw_dfauLwB7C`zVBzcuCpx_ zFiI(rvW(%Jv5amDvo;hoKrVAJK~Xe7bN%I95w*y|@PZ~u!Uux^>2$hVb6YrWjM*0U zw(dN*?N{``#I+i1He-N{4gQp2}zPn{IJnN6hcf`_``rW zm(4A0X)G7h5f+q6sD@#RURPmx3YS#~d!uE_b$l>YM-guv!Erl-fwSs3gRQwOe%H=z z-3~Z*^W1yF0u=yy_St7K^Lhd^F9Z)E@GzxxKLFGT0i}?_%?I^x`3Mv31_V(N@8C*o zbXlmBft1voS(x{-3hPshtAAMIE4Gjn={8a=@P?D1XhG1DluDM^e1q{1f}^0I=F|(k=aO;= zpkf3WpT{}pgMmZZ?KbQ6kN_Vo0`SkR+q&aH^v&7|w>!^Ny#62l;UAjI%gfKFY5D@^ z>^Vu2v|J*tSObuAl&|uU^93acf_x&>65uKJX%$OMt|i0g^`0V-E^0lV7jy=L{_0>* zj2qv31o+#rG@n=ubTjZ2fB05GwEgu@oH(KXw6|e#0;xZZ^lBs#Ge6bzOTxR%87 zV2Cx4x$2z0nz3$3~Mav}sSoqSHzI0E` zZQYJ_+0Aor$pYda72hK0Go~-(M-0>!xKXc}9g5WpfK8xb86*<;HA`5F95~h4slt zk13F?z&aN}$OPDMM&0v0VU;j*>0NPp5 z`{`>hH<=d;YJ?=ohjm?_Fip|TzKlI7>McoJtSNl*~#}u2x~& zC5kbJs%nf9x}0UnLKp^1X&U{8oBDC!aLmd+)vH z0oV(YEIntMriQBlu!3BzqGT?{H&`T8F$BIsaxW$&u1rjD96QcuxCEfKg6KF&z;Opc zA!9HYBuNr=Ij{==@DAbZ=dw%}9(?eBzUx&ocJpC>635&UfRIWN1nW;^9DZAt>C>u0 zr&UckU>I5hKUCa2gBBr8v$p4Z=RL<=Nwe&A!pYB?&HAr?^rL0;6_^EG7eL!x4-nGWr@V@Ee2w8 z0w+f!p#+bMO9tS2o}VW1uQ*T7FqZyD#^9cx+xjFxbIWz0;)6YOs9tWhI!73R3Pq*kkA5Y3}7BHeC}4F=xjI89z9z)v@S+R>u2{S7M5!Q9``VTrE8JU=Q6Ve06+mPA zBM3Yv%hJ=F^OInZSEoitFJtU>r`JS&(jV%l`TDnHfsjg(rVkg`&;S4(14%?dRF|G- zguI|C(sNcx*D4iD2xT`KHK^AcplJq#VGNy47uu~}l*H*P4A_fdrToKR{M|47ohOOb z=-SNdTwPJ({iTxeaIMyO$}XFSHBEa$(^L~{J9y7YU^`YrGW1X~NLzP|cM7Y6${2Bc zRc;QAQqf({S15V?EX#f~iVhO2yu9mr8ZhGL;-ShHztrGFY)&R9GRgLLK`XdEA2mbY4-8 z!S@2>F9VfiQJu!XI%gFQkfPDgvh;@l@Z#_P{+U-!Tn9imi`_np5An17o4W$gN2wJ5 zVZsZYqX5})O;wJR%O$(s$N_}=uZkE5zwN!QgLfxM(^rAP_e~qi)4f^Dc9+5`sY<#I`k7^9^tNbgs-7*oLZS3a}O zMFy7l!*az8{CD6ZP>SUyns^O#bEux$>vh3#`c9IhuW}0Cw{+vxcKyPp|4UyALsM21 z=bHC9v_xCww3}Ust5k}|)VJQ+tTV>Lsb$@13~tgfI6)f8cbxQV;}boMxMfsjfaaK7QqW-t5|a zmX_hu`r9|PKm~wiW@fA)z4!!S+{AH=t?he8rTV@o_l*{AG>+98?9}^(Omcv!D`&McWM8q{ok^w{Y3_?XbgqA4(c?vAc zo3An|!!r(|4%BKPfRZ#zHz<|PbHXnx-5rm(7XMQQW>~a4Ip9W)Yw|oNZeo2C9@RU>FvtijJ8P_uM$`w4G#q zt&?56uqIzPzed}wZYzwUR{`K;b)<6o-FG`8JNwF4zEbJ+dS77-{yPBn70y{%2sKF* zs+BT~j*dXJhTDyEot~WRjuqxy+zI0y44BcC3EQ+)ffjMmmVjL$dWqQ>R-rdHH}R3D zS(ZwYlw^!&p6AGe!GL<6*GjVZRp8`g#oBke(|PxXS>&hn&A(gz&aMG;*!8%m-gZGl7-h@un*{Q$b10c@r#IZwaIIXo*#w4AGCNTNB4u1q&{(X*1S z%%^Y3%OR(kqdEq=D#5ZPg1P0jMKKYr50c3cY)BN_Y;8in*BAAnTtEs?dUtC@!GI@e z@(Km=qHT`vbEfk_wbCKnuiK3W_S{ zAF^SJ3NeC6RnZDjbY9{3?dmUcUeqy+p&kGYI!P;y|6qMy868=I6Zm2CxsN1!bDI_gfOONU>0Wz ztK|$FXti3<>-7cb5J31ia2)8gJJ81#N0Ph(Kwqrd+7ElUi|Jzup?8aQ_%zoKvH1@o?-CYU*I6SOMS^;+ToR zy5GYFCKm3pR~e_@H)Z|R#^lVU6DLlrG z!!#67H3<|M`%L&PM>jyh!WEC@N}h6S2FNnfLkUD-0*(`aGw}T+VarLz&Nzc;`P~mL zx88pHJ^UR`na)(omBY4e&omkhb98J}aC)$Mj4?|P_&HSriDCwdeItN!CSjT-f|`-U zv8Xho#lq*Ib`J++DN5owm?>gC2whbh0n{Ie3=XT;XsyC9ZhNkG-u3*IEKOerMt?Rw zUj9`P><H<3zZAUl&N7J~Q45ss_eIn2uvDCtsP3>R=g!VSrU-2tpqsA<2^K`k>oG7l;&SSy4gN zG|?i%(PZJO`VOQ?DpG$8qd4QsY04MEI9Uv4i?zq|6bC=nB?_I#)no=rB)oNL(*J^UT-XOJlLjVZ-Tm_5ps_+3;oO1_;s;CGa z?6Bi10kl9E|FA6MjAtnTPYB@|m1IUGiDZn6A;E5^C(`*e%5b`a5>8q`=oyKSQ<5Yt z{@(BX-k#_vpGN#~H~fv8#z4iJyp}`;(i?A>GZK(_RB$g>?CDC`o+?>pUDsv6vWucn zVUg?-s$F2~K^MU_)^ael&N6@`<`5?w!iYg{5W#(`m z6>$;(DuCr3bwcnF3xXKyP!W(9>hN3UM*s-j6k41#jRcT9&k>fz4?ISIzo{Gg=~}(? zreT;pPC1QZCga{xTruf7E&_;(d;kD5LZsrJ-FnP}^czr6K8+9SZu}d20?^E zUFx|`D@)Tek}98?+CO^co8SCu>(Zq*egFMSO1BGFcC!~Cp_DR3xwcO?1kXnyyk`LI zv_wL8=Z(`d9I|8WO@ulEkz> z=*pc=o4W3xhpHU_aQZ{~Ek0i1Xz%8mJp|A7uhK06XeWrCetLf+a^tBq<SLl`jbiM5CpZ)1SXqJgaFKqVbG zmmy8C-jjjrM9^uwu({C_kNE$gpP@TTJTGhyTz}OGa4~K2Isoc1C;y+QWZvX9v?@2d zLc9C@Z3E~!AZh@>R7ryAX487AR@Dw0ru2kiP*c|l=sE?%Qo*!zurOP*OJE_d8Jn)M zCfpeU2#5;66o?~$elHLfXk)z#>uWt&U+Y4*>-a$sFULu?kfdxW1O6KT=@LM{d$Us? zg6C#eX!pOrBLLdz&H#=}hxWfbK_M1ocv&GwEK{~^TY-|TfmPDLv~?)iCfF4l>`Da; zA?7VZDv0s8pv?qLEdggLcy0onwj+RZ;rs@iJ9`;xMNZ&_KjT>FBie#iCKn%g;DPX= zhaO_Z5aSRiy9dIp9(l(Aw9^v3^wM$ZfBNH-&+-gjP!xE+TvjUex(T(q36+`!<%$KR zvI&-Lfl)F+Mp1+edCLi;84=*I%o-@NC9IG$2!#u~e7OS`R@Y&Dt>e31@XIiW7JSct zJ&L1uV^G(gd~&+?i(mW#i%7$o&8?zh56}BV0raQ;{mEw;gBLUnp0C%9%6PL3W8)QQ zj3R%!45bQYXDSexLdF^Rg52(l+K;B$P_{?FG%5fb`9uJo7el}6Lu*q6)yd{&r?s}$ zI^Wu8zvITi|0@CfhtYkbZxy_vp#|Cl5^nL(I|iVg#QQgX^72HG21hBtaa~uAjEva! zzWr5bPSjv@tO~V81&~KgWeN#PAdDk$JQw-{R}>J@0#(W*U|BVhwsR&!k`jnR4xX1l zuj}&j=hw&w@2#@SYa5pXFMKs)aB^Q|{Pep+#^5c&Vee17BLLdoC$j+>62O$E!nCd{ zPieYx*tGN~Mn+2J#6(S4pjy2o;vdaWfD;B0wjJUSya4qF15qGU6$31*3Wi?J0R-3s z!*&KfD&TtwtX*!w2Ope=ix<}-&kJ5*jJ=p#Wo*} zCr^qrUQyv0+cqC5m#xWawNx8v*vjZ=1!^@Eds0AF2>|7g@dTnYhB%D{hX>;zBo4|F zY8V=zY*nfeJd~=SYe9|qwo31cswzht~}_U!fN&W0e`4J7t< z%xwW^r`vk%<(Hdb7SDayv^=J&@|r3#eony^rQ5JS7&!{J3INwQZ7h3}iT@hU)P^X%CT zDNSWL%TVMhO&)(dpF10ZXm0?y+0nNQpdHe74FzDzkfdotS7!}Pnb&n?rdlb{daVq# zD&9+gVS1eI+QN*2;u35pm%x7Wr_IRud}f@mTU zQBv&~d8N(80iz9T;~#RFdCJI{j|uhaO8=0#uP`xnfK8krBnTEIG|m;(M-e zZ73ooh6(Ff7rMGJ8RxxlL=a90kk`P76#FBB=)p>OR*RI1{D3m)GkG??z>O> z6F8w=186&Vu*&@B|KpEm(u~amkXc!x)3PK@>6%urR&1zMD`4Xsmy8TT+^sGYorK^) znj|7#Nz&+y8#~KM?6xvUAx!v47|UPGGI|6k{i12gv{aIzR92x@v!Pl?B{DJt%)HQ0E2DeKVLGTzFPH2Dt4UX5uQ4DbqLl{I3 z%EAsEyWwqI87_{E7c(rB{Y<*xC zA0QRk8=)NRa!JU^RH{`$*cUQ)L;}WfK`wUk1AggJi>#iz#Mak3mwi8c6$m?7s~z}Q zk*oXilm3KG>ZSnNF8Xxt+_@T$y-7`0A2v;OR#oMBRgq^*L!;=fOkD%ZGz1x5Rb(+< z9EJJ*^w5vM_d@Xf$Y&XQg#mfdQL$!|Por+9g6IIVc3GXSR*WgTs@IX#SgGn@**L<( zfly>NQovCn6mmeh7fsi<_Ff?G8o^`;Vj313-+Olz&Yry#`F{9g&iUU~Dy1KtI`!so zy7Uf!YS#b~x`>_56B*BbTa~4!4O5%8EKTSlVsNafNSs$d*L0x>FX5i`I04`Dz;m&} z9D?tLSi6Z*#$O>Be~|^XomFE&1yKQ}bxoetbZK7K<(XDZ;y9UsqdcE8Vy(1t*pQNLvsZW&47A=)@uBtM@Nz^=8R)pvQPV7aZIqHBj@VMuN z#P?$sh3VytaWN)5QmLGNcWX>|`&Q+jzWj32kK;Mu{FtJVxpG-)Hb!+?AJKWWY7o0@ zLb-x>RBO!_k`1vjPda+W5U}{2Z{P8w^|~G1heIuI$dw5Q`Nd&uhmgL#)b+8 z*42Dy5lQ+u;*;XA8Q?rx3G7l;@QYBy;oJw8VDHzj}zBac0H&6x1c>b77us?v0IRGziV%Dic*Gqt)+>y0wh>Q$)KDp0Lq zc7_9o^41P_2Amvdxo1AP(zDzdGYUV2Gxx7$jR zB$BS{scD+oWWyW{!tf{|{10SVIa(=~ZCq}m8JZ9;7&v{v0X^J1k*lF5-1U4i82HQ& z!nG{T774&9O)?h0{4ry~J7sW$Jv>8cO4r9U4ESV;b=Acj$&YugFQ`Z$4R}|q?sE}3Z1VOYKgvm;pu_Xy$ z;U6A5e$!9R83Vx=0osXAB#Pu*t^Q_I0P87G)b4!lr125SemU!I;=Vlw2Sxt zaT(Bd5aHaJ8+lW*B2OEtKC5WTyr!u$wrx>#UpQZe+jtbD#U`2P&|f&e2J7o>7RSl* zhf1#thORHks`?uRj0;m!Y**_R?$9;9uV3a$5WRi5N!ag;wURO=M=etyDVHr)E?cQ- znds6KMO9?nG>IZkIERk9%Rz`KdcZx;C$8tSAPm>CY|Cw##^RU1ymxhropg~47hY>7 zgv}8k$0RDvshZL>3TY>6eX007I|$C-!qpF4x1j{xY~{qJkK~sP*E4h zp`DP$ak?CZ@j?`MOKt!wkihDP(u=!toput)sV-I-#pve z>)XH9oxLRepa0kY@K7oqCm@o;AwX|xWb9|`hC*F0$mWSr3qUkz)qR!#}^52pZ!Z;7yB!H-AgJJK{zymz~cZW?Q?v zp0|1w`Qqc#T#;ocA)&om6}w2WIf;QY)_DTo7XsYfZ+^M1Je3FJa&;Htf`EHL-gF$zj-{KsqWe zV;l4bxRAsT{NPuP=bq{Jy8qE}-97cT?t^PJJca9A0rES){WQlk9XsndxQE+s3W69m zNy8u%#4ykEoh(gHXDmHA2%J}!m*2gN^~B*u&|LS*+{`ka+6IT}J4ujRtFNpqsVc(mmrH8-E00000NkvXX Hu0mjf`7i-1 literal 0 HcmV?d00001 diff --git a/src/public/manifest.json b/src/public/manifest.json new file mode 100644 index 00000000..21e53302 --- /dev/null +++ b/src/public/manifest.json @@ -0,0 +1,16 @@ +{ + "name": "2004Scape", + "icons": [ + { + "src": "/favicon.png", + "type": "image/png", + "sizes": "144x144" + } + ], + "id": "/", + "start_url": "/", + "background_color": "#212121", + "display": "minimal-ui", + "scope": "/", + "theme_color": "#212121" +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 78fd8638..be2950f4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,17 +9,13 @@ const TerserPlugin = require('terser-webpack-plugin'); const isProduction = process.env.NODE_ENV === 'production'; const stylesHandler = isProduction ? MiniCssExtractPlugin.loader : 'style-loader'; -const pages = [ - 'index', - 'playground', 'viewer', 'mesanim', 'items', 'sounds', - 'interface-editor', 'JagEd', 'mapview' -]; +const pages = ['index', 'playground', 'viewer', 'mesanim', 'items', 'sounds', 'interface-editor', 'JagEd', 'mapview']; const htmlPlugins = pages.map(name => { return new HtmlWebpackPlugin({ template: `src/html/${name}.html`, filename: `${name}.html`, chunks: [name] - }) + }); }); const config = { @@ -46,10 +42,7 @@ const config = { filename: '[name].css' }), new CopyPlugin({ - patterns: [ - { from: path.resolve(__dirname, 'src', 'public') }, - { from: path.resolve(__dirname, 'src', 'js', 'vendor', 'bz2.wasm') }, - ], + patterns: [{from: path.resolve(__dirname, 'src', 'public')}, {from: path.resolve(__dirname, 'src', 'js', 'vendor', 'bz2.wasm')}] }) ], @@ -80,34 +73,25 @@ const config = { }, { test: /\.s[ac]ss$/i, - use: [ - stylesHandler, - 'css-loader', - 'postcss-loader', - 'sass-loader' - ] + use: [stylesHandler, 'css-loader', 'postcss-loader', 'sass-loader'] }, { test: /\.(sf2|wasm)$/i, type: 'asset' - }, + } ] }, resolve: { extensions: ['.ts', '.js', '.scss', '...'], extensionAlias: { - '.js': ['.js', '.ts'], + '.js': ['.js', '.ts'] }, - modules: [ - path.resolve(__dirname, 'src'), - 'node_modules', - 'node_modules/foundation-sites/scss' - ], + modules: [path.resolve(__dirname, 'src'), 'node_modules', 'node_modules/foundation-sites/scss'], alias: { jagex2$: path.resolve(__dirname, 'src', 'js', 'jagex2'), vendor$: path.resolve(__dirname, 'src', 'js', 'vendor'), - style$: path.resolve(__dirname, 'src', 'style'), + style$: path.resolve(__dirname, 'src', 'style') } } }; @@ -117,296 +101,296 @@ module.exports = () => { config.mode = 'production'; config.plugins.push(new MiniCssExtractPlugin()); config.plugins.push( - new TerserPlugin({ - minify: TerserPlugin.terserMinify, - parallel: true, - terserOptions: { - mangle: { - properties: { - keep_quoted: true, // needed for tinymidipcm.mjs - reserved: [ - 'loadTinyMidiPCM', // needed for tinymidipcm.mjs - 'newBzip2State', // keeps renaming this to $S - 'portOffset', // idk why but has to - 'willReadFrequently', // terser removes this option from canvas - 'members', // terser messes this up - '__liftRecord5', // the rest is for vendor - '__lowerRecord5', - '__liftString', - '__liftArray', - '__lowerArray', - '__liftTypedArray', - '__lowerTypedArray', - '__liftStaticArray', - '__lowerStaticArray', - '__retain', - '__release', - '__notnull', - '__setU8', - '__setU32', - '__getU8', - '__getU32', - '__pin', - '__new', - '__unpin', - 'run', - 'UTF8ArrayToString', - 'UTF8ToString', - 'stringToUTF8Array', - 'stringToUTF8', - 'lengthBytesUTF8', - 'addOnPreRun', - 'addOnInit', - 'addOnPreMain', - 'addOnExit', - 'addOnPostRun', - 'addRunDependency', - 'removeRunDependency', - 'FS_createFolder', - 'FS_createPath', - 'FS_createDataFile', - 'FS_createPreloadedFile', - 'FS_createLazyFile', - 'FS_createLink', - 'FS_createDevice', - 'FS_unlink', - 'getLEB', - 'getFunctionTables', - 'alignFunctionTables', - 'registerFunctions', - 'prettyPrint', - 'getCompilerSetting', - 'print', - 'printErr', - 'callMain', - 'abort', - 'keepRuntimeAlive', - 'wasmMemory', - 'stackAlloc', - 'stackSave', - 'stackRestore', - 'getTempRet0', - 'setTempRet0', - 'writeStackCookie', - 'checkStackCookie', - 'ptrToString', - 'zeroMemory', - 'stringToNewUTF8', - 'exitJS', - 'getHeapMax', - 'emscripten_realloc_buffer', - 'ENV', - 'ERRNO_CODES', - 'ERRNO_MESSAGES', - 'setErrNo', - 'inetPton4', - 'inetNtop4', - 'inetPton6', - 'inetNtop6', - 'readSockaddr', - 'writeSockaddr', - 'DNS', - 'getHostByName', - 'Protocols', - 'Sockets', - 'getRandomDevice', - 'warnOnce', - 'traverseStack', - 'UNWIND_CACHE', - 'convertPCtoSourceLocation', - 'readAsmConstArgsArray', - 'readAsmConstArgs', - 'mainThreadEM_ASM', - 'jstoi_q', - 'jstoi_s', - 'getExecutableName', - 'listenOnce', - 'autoResumeAudioContext', - 'dynCallLegacy', - 'getDynCaller', - 'dynCall', - 'handleException', - 'runtimeKeepalivePush', - 'runtimeKeepalivePop', - 'callUserCallback', - 'maybeExit', - 'safeSetTimeout', - 'asmjsMangle', - 'asyncLoad', - 'alignMemory', - 'mmapAlloc', - 'writeI53ToI64', - 'writeI53ToI64Clamped', - 'writeI53ToI64Signaling', - 'writeI53ToU64Clamped', - 'writeI53ToU64Signaling', - 'readI53FromI64', - 'readI53FromU64', - 'convertI32PairToI53', - 'convertI32PairToI53Checked', - 'convertU32PairToI53', - 'getCFunc', - 'ccall', - 'cwrap', - 'uleb128Encode', - 'sigToWasmTypes', - 'generateFuncType', - 'convertJsFunctionToWasm', - 'freeTableIndexes', - 'functionsInTableMap', - 'getEmptyTableSlot', - 'updateTableMap', - 'addFunction', - 'removeFunction', - 'reallyNegative', - 'unSign', - 'strLen', - 'reSign', - 'formatString', - 'PATH', - 'PATH_FS', - 'intArrayFromString', - 'intArrayToString', - 'AsciiToString', - 'stringToAscii', - 'UTF16Decoder', - 'UTF16ToString', - 'stringToUTF16', - 'lengthBytesUTF16', - 'UTF32ToString', - 'stringToUTF32', - 'lengthBytesUTF32', - 'allocateUTF8', - 'allocateUTF8OnStack', - 'writeStringToMemory', - 'writeArrayToMemory', - 'writeAsciiToMemory', - 'SYSCALLS', - 'getSocketFromFD', - 'getSocketAddress', - 'JSEvents', - 'registerKeyEventCallback', - 'specialHTMLTargets', - 'maybeCStringToJsString', - 'findEventTarget', - 'findCanvasEventTarget', - 'getBoundingClientRect', - 'fillMouseEventData', - 'registerMouseEventCallback', - 'registerWheelEventCallback', - 'registerUiEventCallback', - 'registerFocusEventCallback', - 'fillDeviceOrientationEventData', - 'registerDeviceOrientationEventCallback', - 'fillDeviceMotionEventData', - 'registerDeviceMotionEventCallback', - 'screenOrientation', - 'fillOrientationChangeEventData', - 'registerOrientationChangeEventCallback', - 'fillFullscreenChangeEventData', - 'registerFullscreenChangeEventCallback', - 'JSEvents_requestFullscreen', - 'JSEvents_resizeCanvasForFullscreen', - 'registerRestoreOldStyle', - 'hideEverythingExceptGivenElement', - 'restoreHiddenElements', - 'setLetterbox', - 'currentFullscreenStrategy', - 'restoreOldWindowedStyle', - 'softFullscreenResizeWebGLRenderTarget', - 'doRequestFullscreen', - 'fillPointerlockChangeEventData', - 'registerPointerlockChangeEventCallback', - 'registerPointerlockErrorEventCallback', - 'requestPointerLock', - 'fillVisibilityChangeEventData', - 'registerVisibilityChangeEventCallback', - 'registerTouchEventCallback', - 'fillGamepadEventData', - 'registerGamepadEventCallback', - 'registerBeforeUnloadEventCallback', - 'fillBatteryEventData', - 'battery', - 'registerBatteryEventCallback', - 'setCanvasElementSize', - 'getCanvasElementSize', - 'demangle', - 'demangleAll', - 'jsStackTrace', - 'stackTrace', - 'ExitStatus', - 'getEnvStrings', - 'checkWasiClock', - 'flush_NO_FILESYSTEM', - 'dlopenMissingError', - 'createDyncallWrapper', - 'setImmediateWrapped', - 'clearImmediateWrapped', - 'polyfillSetImmediate', - 'uncaughtExceptionCount', - 'exceptionLast', - 'exceptionCaught', - 'ExceptionInfo', - 'exception_addRef', - 'exception_decRef', - 'Browser', - 'setMainLoop', - 'wget', - 'FS', - 'MEMFS', - 'TTY', - 'PIPEFS', - 'SOCKFS', - '_setNetworkCallback', - 'tempFixedLengthArray', - 'miniTempWebGLFloatBuffers', - 'heapObjectForWebGLType', - 'heapAccessShiftForWebGLHeap', - 'GL', - 'emscriptenWebGLGet', - 'computeUnpackAlignedImageSize', - 'emscriptenWebGLGetTexPixelData', - 'emscriptenWebGLGetUniform', - 'webglGetUniformLocation', - 'webglPrepareUniformLocationsBeforeFirstUse', - 'webglGetLeftBracePos', - 'emscriptenWebGLGetVertexAttrib', - 'writeGLArray', - 'AL', - 'SDL_unicode', - 'SDL_ttfContext', - 'SDL_audio', - 'SDL', - 'SDL_gfx', - 'GLUT', - 'EGL', - 'GLFW_Window', - 'GLFW', - 'GLEW', - 'IDBStore', - 'runAndAbortIfError', - 'ALLOC_NORMAL', - 'ALLOC_STACK', - 'allocate', - 'grow', - 'iceServers', - 'urls', - 'malloc_u8', - 'free_u8', - 'gzip_decompress', - 'gzip_compress', - 'error_message', - 'error_message_len', - 'deallocate_buffer', - ] - } - }, - format: { - quote_style: 3, // original - keep_quoted_props: true // needed for tinymidipcm.mjs - } - } - }) + new TerserPlugin({ + minify: TerserPlugin.terserMinify, + parallel: true, + terserOptions: { + mangle: { + properties: { + keep_quoted: true, // needed for tinymidipcm.mjs + reserved: [ + 'loadTinyMidiPCM', // needed for tinymidipcm.mjs + 'newBzip2State', // keeps renaming this to $S + 'portOffset', // idk why but has to + 'willReadFrequently', // terser removes this option from canvas + 'members', // terser messes this up + '__liftRecord5', // the rest is for vendor + '__lowerRecord5', + '__liftString', + '__liftArray', + '__lowerArray', + '__liftTypedArray', + '__lowerTypedArray', + '__liftStaticArray', + '__lowerStaticArray', + '__retain', + '__release', + '__notnull', + '__setU8', + '__setU32', + '__getU8', + '__getU32', + '__pin', + '__new', + '__unpin', + 'run', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'addOnPreRun', + 'addOnInit', + 'addOnPreMain', + 'addOnExit', + 'addOnPostRun', + 'addRunDependency', + 'removeRunDependency', + 'FS_createFolder', + 'FS_createPath', + 'FS_createDataFile', + 'FS_createPreloadedFile', + 'FS_createLazyFile', + 'FS_createLink', + 'FS_createDevice', + 'FS_unlink', + 'getLEB', + 'getFunctionTables', + 'alignFunctionTables', + 'registerFunctions', + 'prettyPrint', + 'getCompilerSetting', + 'print', + 'printErr', + 'callMain', + 'abort', + 'keepRuntimeAlive', + 'wasmMemory', + 'stackAlloc', + 'stackSave', + 'stackRestore', + 'getTempRet0', + 'setTempRet0', + 'writeStackCookie', + 'checkStackCookie', + 'ptrToString', + 'zeroMemory', + 'stringToNewUTF8', + 'exitJS', + 'getHeapMax', + 'emscripten_realloc_buffer', + 'ENV', + 'ERRNO_CODES', + 'ERRNO_MESSAGES', + 'setErrNo', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'DNS', + 'getHostByName', + 'Protocols', + 'Sockets', + 'getRandomDevice', + 'warnOnce', + 'traverseStack', + 'UNWIND_CACHE', + 'convertPCtoSourceLocation', + 'readAsmConstArgsArray', + 'readAsmConstArgs', + 'mainThreadEM_ASM', + 'jstoi_q', + 'jstoi_s', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'dynCallLegacy', + 'getDynCaller', + 'dynCall', + 'handleException', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'safeSetTimeout', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'freeTableIndexes', + 'functionsInTableMap', + 'getEmptyTableSlot', + 'updateTableMap', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'PATH', + 'PATH_FS', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16Decoder', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'writeStringToMemory', + 'writeArrayToMemory', + 'writeAsciiToMemory', + 'SYSCALLS', + 'getSocketFromFD', + 'getSocketAddress', + 'JSEvents', + 'registerKeyEventCallback', + 'specialHTMLTargets', + 'maybeCStringToJsString', + 'findEventTarget', + 'findCanvasEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'demangle', + 'demangleAll', + 'jsStackTrace', + 'stackTrace', + 'ExitStatus', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'dlopenMissingError', + 'createDyncallWrapper', + 'setImmediateWrapped', + 'clearImmediateWrapped', + 'polyfillSetImmediate', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'ExceptionInfo', + 'exception_addRef', + 'exception_decRef', + 'Browser', + 'setMainLoop', + 'wget', + 'FS', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + '_setNetworkCallback', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'heapObjectForWebGLType', + 'heapAccessShiftForWebGLHeap', + 'GL', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + 'writeGLArray', + 'AL', + 'SDL_unicode', + 'SDL_ttfContext', + 'SDL_audio', + 'SDL', + 'SDL_gfx', + 'GLUT', + 'EGL', + 'GLFW_Window', + 'GLFW', + 'GLEW', + 'IDBStore', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'grow', + 'iceServers', + 'urls', + 'malloc_u8', + 'free_u8', + 'gzip_decompress', + 'gzip_compress', + 'error_message', + 'error_message_len', + 'deallocate_buffer' + ] + } + }, + format: { + quote_style: 3, // original + keep_quoted_props: true // needed for tinymidipcm.mjs + } + } + }) ); } else { config.mode = 'development'; From ac47971f6fc9aeebefaa232d38e1a0869fe86be6 Mon Sep 17 00:00:00 2001 From: Jordan Date: Sat, 4 Jan 2025 19:23:24 -0500 Subject: [PATCH 2/2] fix: rename favicon.png to manifest.png --- src/public/manifest.json | 2 +- src/public/{favicon.png => manifest.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename src/public/{favicon.png => manifest.png} (100%) diff --git a/src/public/manifest.json b/src/public/manifest.json index 21e53302..b7a1b70d 100644 --- a/src/public/manifest.json +++ b/src/public/manifest.json @@ -2,7 +2,7 @@ "name": "2004Scape", "icons": [ { - "src": "/favicon.png", + "src": "/manifest.png", "type": "image/png", "sizes": "144x144" } diff --git a/src/public/favicon.png b/src/public/manifest.png similarity index 100% rename from src/public/favicon.png rename to src/public/manifest.png