From 42104f71a1978b381a5d499767ec958286489cd8 Mon Sep 17 00:00:00 2001 From: Berun Date: Fri, 17 Sep 2021 14:00:26 +0200 Subject: [PATCH 1/2] feat: add check for friendRequests to inviteuser componente --- src/components/InvitePlayers.vue | 8 ++- src/main.ts | 2 - src/util/parse.ts | 110 +++++++++++++++++++------------ 3 files changed, 74 insertions(+), 46 deletions(-) diff --git a/src/components/InvitePlayers.vue b/src/components/InvitePlayers.vue index 000727f..0947a21 100644 --- a/src/components/InvitePlayers.vue +++ b/src/components/InvitePlayers.vue @@ -67,6 +67,8 @@ import { getFriends, getFriendRequest, createGameWithCurrent, + checkFriendRequest, + FriendRequestStatus, } from "../util/parse" export default { @@ -86,6 +88,7 @@ export default { }, async mounted() { await this.updateFriends() + await checkFriendRequest() }, methods: { async addFriendClickHander(ev) { @@ -116,9 +119,8 @@ export default { const newFriends = await getFriends() if (newFriends && newFriends.length > 0) this.friends = newFriends - const friends_requests = await getFriendRequest(user) - // request Friends - const friendRequestIds = friends_requests.map(request => request.objectId) + const friends_requests = await getFriendRequest(user, FriendRequestStatus.pending) + // set friendsequests if (friends_requests) this.friendRequests = friends_requests } }, diff --git a/src/main.ts b/src/main.ts index e439382..9e0a233 100644 --- a/src/main.ts +++ b/src/main.ts @@ -151,8 +151,6 @@ const store = createStore({ }) const app = createApp(App) -console.log(process.env.NODE_ENV) - if (process.env.NODE_ENV === "production") { Sentry.init({ app, diff --git a/src/util/parse.ts b/src/util/parse.ts index dfa30de..1e20759 100644 --- a/src/util/parse.ts +++ b/src/util/parse.ts @@ -29,7 +29,6 @@ export interface SingeUpUserData { } // Parse interfaces - export interface ParseObject { id: string get?: (varName: string) => any | any[] @@ -37,6 +36,7 @@ export interface ParseObject { add?: (varName: string, varValue: any) => void relation?: (relationName: string) => any save?: () => Promise + destroy?: () => Promise new (): any [index: string]: string | number | undefined | ((index?: string, index2?: any) => any) } @@ -51,7 +51,9 @@ export interface ParseGame extends ParseObject { getUserColor?: (id: string) => ChessColor } -export interface ParseFriendRequest extends ParseObject {} +export interface ParseFriendRequest extends ParseObject { + getFriend: () => false | ParseUser +} /** * Initalises the Parse connection and adds default Object @@ -102,7 +104,7 @@ function createParseGameObject() { function createParseFriendRequestObject(): ParseFriendRequest { return Parse.Object.extend("FriendRequests", { - getFriend(): false | any { + getFriend(): false | ParseUser { const current = getCurrentUser() const from = this.get("fromUser") const to = this.get("toUser") @@ -380,13 +382,11 @@ export async function answerFriendRequest( "status", acceptRequest ? FriendRequestStatus.accepted : FriendRequestStatus.rejected ) - // update user - const userFriends = currentUser.relation("friends") - userFriends.add(friend) try { await friendRequest.save() - await currentUser.save() + // update user + await addFriend(friend) return true } catch (error) { @@ -406,21 +406,19 @@ export async function answerFriendRequest( */ export async function getFriendRequest( toUser: ParseUser, - fromUser?: ParseUser -): Promise { + filter?: FriendRequestStatus +): Promise { const friendRequest = createParseFriendRequestObject() const requestObject = new friendRequest() // query const toQuery = new Parse.Query(requestObject) toQuery.equalTo("toUser", toUser) - toQuery.equalTo("status", FriendRequestStatus.pending) - if (!_.isUndefined(fromUser)) toQuery.equalTo("fromUser", fromUser) + if (!_.isUndefined(filter)) toQuery.equalTo("status", filter) const fromQuery = new Parse.Query(requestObject) fromQuery.equalTo("fromUser", toUser) - fromQuery.equalTo("status", FriendRequestStatus.pending) - if (!_.isUndefined(fromUser)) toQuery.equalTo("toUser", fromUser) + if (!_.isUndefined(filter)) fromQuery.equalTo("status", filter) const query = Parse.Query.or(toQuery, fromQuery) query.include(["toUser", "fromUser"]) @@ -450,39 +448,69 @@ export async function getFriends(): Promise { return false } -export async function currentFriendRequests(): Promise { - const current = getCurrentUser() - const query = new Parse.Query(Parse.User) - const friendQuery = new Parse.Query(Parse.User) +export async function addFriend(friend: ParseUser): Promise { + const currentUser = getCurrentUser() - if (current) { - const currentFriends = await getFriends() + if (currentUser) { + const friendRel = currentUser.relation("friends") + friendRel.add(friend) - if (currentFriends) { - // applie filter to Querys - friendQuery.equalTo("objectId", current.id) - query.matchesQuery("friends", friendQuery) - try { - let friendRequests = await query.find() - // const friendIds = friendRequests. - const removedFriends = _.remove(friendRequests, value => { - const currUserId = value.id - var returnValue = false - - currentFriends.map(friend => { - if (friend.id === currUserId) returnValue = true - return false - }) - - return returnValue + try { + await currentUser.save() + return true + } catch (error) { + console.error(error) + return false + } + } + return false +} + +export async function destroyFriendRequest(request: ParseFriendRequest): Promise { + try { + await request.destroy() + return true + } catch (error) { + console.error(error) + return false + } +} + +export async function checkFriendRequest(): Promise { + const currentUser = getCurrentUser() + const friends = await getFriends() + + if (currentUser && friends) { + const friendRequests = await getFriendRequest(currentUser) + const newFriendRequest = friendRequests.filter(request => { + const requestFriend = request.getFriend() + let add = true + + if (requestFriend) { + let id = requestFriend.id + friends.map(friend => { + if (friend.id === id) add = false }) + } - return friendRequests - } catch (error) { - console.error("error: ", error) - return false + return add + }) + + // checking all friendrequest for accepts or rejects + newFriendRequest.map(async friendRequest => { + const status = friendRequest.get("status") + const friend = friendRequest.getFriend() + + if (friend) { + if (status === FriendRequestStatus.accepted) { + await addFriend(friend) + await destroyFriendRequest(friendRequest) + } else if (status === FriendRequestStatus.rejected) + await destroyFriendRequest(friendRequest) } - } + }) + + return true } return false } From 3dd06cc221b89d016b147021b07852f9237b0e14 Mon Sep 17 00:00:00 2001 From: Berun Date: Wed, 22 Sep 2021 09:32:57 +0200 Subject: [PATCH 2/2] feat: add icons, meta tags and service worker to become pwa --- index.html | 19 +++--- public/apple-touch-icon.png | Bin 0 -> 14412 bytes public/browserconfig.xml | 9 +++ public/favicon-16x16.png | Bin 0 -> 1491 bytes public/favicon-32x32.png | Bin 0 -> 2366 bytes public/favicon.ico | Bin 0 -> 15086 bytes public/mstile-150x150.png | Bin 0 -> 9812 bytes public/pwa-192x192.png | Bin 15230 -> 15230 bytes public/pwa-512x512.png | Bin 55738 -> 55738 bytes public/robots.txt | 2 + public/safari-pinned-tab.svg | 122 +++++++++++++++++++++++++++++++++++ public/site.webmanifest | 19 ++++++ src/registerSW.js | 1 + vite.config.ts | 12 ++-- 14 files changed, 172 insertions(+), 12 deletions(-) create mode 100644 public/apple-touch-icon.png create mode 100644 public/browserconfig.xml create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/mstile-150x150.png create mode 100644 public/robots.txt create mode 100644 public/safari-pinned-tab.svg create mode 100644 public/site.webmanifest create mode 100644 src/registerSW.js diff --git a/index.html b/index.html index 258288b..a1af88b 100644 --- a/index.html +++ b/index.html @@ -1,11 +1,16 @@ - - - - - + + + Open Chess + + + + + + + - - - Vite App
+ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..002fc2df6af3f20f70a8e9a82e5b577d2baccc51 GIT binary patch literal 14412 zcmZ`=bx<5lu)o9YaChg>;Oy9IX-?i}tA9D+k|f(MriBtUR?4esvt`2KwL>eWiu z&Q$MI_xxJ7Hd<9#4unFC0ssI&3i8tG@3iT^3kl)#j#-b)wA=rjNaEP@YhM zT2EY4oc#w(h&=@U3vgbCps%W`=Bc~;^suJ3HS5YnbCg=x&&Y~`;ZxN>e-cgSL<}?}c z`6Qe5dDC{p-gv6IB?%pl$NO$dM6&_)jR2fF(k2ejN-uyF#;OB)CJd6Ty?VRS!3T=S z6@AW+oFpmS!ZDpW1$954L$WF(KP0HX*XrG;QT~^hPaX)YWcXw015BoQMqy-Fj&=B@S`3H7im>Kl1yf^5+ z!DV~xxs_D0keUXYc^N42#En{AMqxWbqZgUbxB#Kh7fN(*9ayr0q|0DkaStT8=aIKP zOOq?Zmd`xzYvDzCegxZ`~kvf;>pvbJ9di^D1LhIEna8!eKA-@=?Uq^qv6l7%02Mj%tJtQZ$0FtZ|JJ2KYAYJvk{j@ z?5%zcn=PgXt4T&M!_u$ER@QnnQQI_dJ&cU>h<519-gA z;b+_lzWEblRy{cGf@S4MRA7UC(50~i$#eUb|1 zcB>)R6guPIHwRp%hZj0QsS7@>$be}*j0m23kaw+YfzNg+r>Ou?S1 z947LqjL>H4b7&H(^*2}GB#g9w>5pv@w-hn4vy_6DG`#ZW%h1}Ta!RUf+0+s+8B7X) zzeBJ3ragi67CY+1S&;T5A!W7HLnV|^T!@{1NZF(qoV&@N8+2p68ZyPqUWESztM%#g z74h~WB+uA^gu515STgr_d(gR-3<&iXlIb+UG24)Ss)v~yWgWUMa~+(e`bHvHEY76o zvhM?<@n3)ke!(ov#wb_}%Uj3p5zi97t`^JyK%!NZh4)o$j*%z>lPCvB8zXu~O<^b! zhTyequHhUJ?6+^8<6`Ouf9+B9z*tcC@dA#+3As2FJfPOOC1A&S^A3U&8diZjmtuB9A` zl8Oft*$UM$L9s+yh;C3w8!KDfsL#7y8(9VZwCMu zv|m4c9DaL|6Z#WL6|Al1i8xo;fNmLN5)}Ls`mx~i%&(%6ujK~$!t7#E&*#8A@{53#DRUb}Yb&b{~CwuOR~Pz*}OFv>eY2OqNWbZ|)0^yg9(<#**y&C_X%gF|qgOfi4^sU2yl2*5HZ zI3QRgcn3xa5_JSpGDQ|<*EuH7DL}8kEgj;7wPBD56=x>LV0&=A3mkJcRZ9mBtD<9i zQ^dqz!$!y~!aIoWiVCXn`ac`3hBauIU|JH_IlriaBx-n_MlXR~E@)6iB6w1-&*C0i zM`Eh!=*(7`Ul*ESnBnHk8pj|nGCrsqY%4_|I(3Wm@ecfsj7X8a7VVsS3H>REr!hZ* z1J=&h^^RcCDBQct!Jun-3%K<$LJ z)PsLi`YC6@LF4|Rr8CNksBjrAJ046j_U61A)u2>>Vd?O~H1gsHM2DqAQ(pq-5ER@D zG7niewE0}&WaM7_aN{RfK%7m3AuHbs%D{dxEH@r%s$!z+vfXgas=DD@Mn+wjZ?0lU|7>MktTPFx2NgHU->gE;J%eM=@su~3yWL(i45RXSmuG?3g;s&<3hJUx!vyW}rx z*}R|iRG9PuJNq4iqe5e2L zLCp|Deu(?^vKOk-7tEb9m~r23%DWv^6!C}noiYhjosmX~Q1nbBg(B=KZ0}vLbN#a! z7khVl@CBc_YL{sB_x$1GzLO$D#;>jWhrL|3lMl0Xi;P1%MZaU?<%Lny?3x~klLASE ztl94^DIw**qveYPH!7w(g(A`E()YzztZ{R@{J)BS4ZKySfx#hOp;TU2BWX0^I~A13 zA<}J=N?q6KEzP58SULDxMddb??($UfRwNr&N4p~22usb&zwzKeiQ!8hk&E{b~ zk;)HCPuitRJ<^=)=~>E-jAc6~U|+9@hS&dAATEf5veygG_IP=c$oAQhzkbY1|C#gjPJXmVf zBBY^^G=0rmwNW%Rna!or@iDR#oRpZ~D0Eu7yk2mPZ#N6=bxR)~7!xU4iS6C1WgYD) z(Ezmc=pfMn?<>ILS}>G7p@sC?u0RCrg2_zj9Jk~>Dx27-1+;{-(TV$Pj%Qf#2c-&8 z7G5xu`_m0<22dmass2OxBW%+$FCnjxDqD&opAlYZnZEwtKw&aaKkavb$hx=z_1W03 zz9_mSteN%dgT+V~CX-JWfo$S7JC(`MAK;*VIh^mm`3jt$AO=|XctfE(b+(Ik^5Mto zl@cWJ$X4B2>SYD2={+uHijC1^FLH&VK<;T}bnn^prm7Fv--^0QvTxHr*Z690R_nE6 z@Ws0Rggmt6-$&Tixe5HHs#n{<-XJSt`O8eHM>CR=YrTA;GxBqu@Ea3ao@)vDWz6XB z>(lG_)5Jo^c1wH;!F;HA%!hnM;44W5oz9G5@(x$!B1 z`lNfODbt?i#P5Q2wzTnH9g$>63}j51cm+J8Y&6az znp=Z$Cf;65H>*1|gOA{qH26nQ7ewi=MD^0&IKHg7_vzA^t&n5;BaLu_B1S!PX1$}6 z^UyJd=WA)Y@ng+ZkxZw){+)2c8m+Q5%JAUXh7dBob(u}BdchfZcW{Y;mk+BI!j8~Yx|k-r4`D)3}YtoV@3NNrDUngIS4HOB7IlU>{ucWGjwc6 zj$-;wP_0JmPy2bq2`YjEQEak($AWM_fKHM_X|3tB2J4@gm7xS`nv>P z5$DONb_LG)%;z2~tUp;I=BX4|LQ7c@7OMTFO?CNRJK#>5a)>#E;zIJ(evza#&9 zo6GQ>$6%d_mhQ<%dP6;!qn>#>o2#VV_?Ih+Xj~)lnXa1PR8K~$Hg-4Lz)6PPwT<1E zp7GbQ8fSs5%G91+A2Ls)o=M9+#c|nFt!cgIyF#3`K*EiX>`KJ_N)B%5O}-+*v4k1} zxp9n=$S*@jygqYZ2X6W==puKA^ThR*U5EcFxXtRT&cMxW$A*f3&Zox(0$Oo)P*SBU ze&k4$R6-D1Pgx|6{rQa2Po=wmX;+ld)G42ews3H7KC5DA_^)njRa@ZHTJ4YJMF@~X zS!?Lm2t#_1TwYmc!%b#^xiw+u1UbdOKOWZOh1W8Qm~c*ScenhqKd`A8A(5&yr-aK9Y|tiO_&3Yl`j=*W4fb4`Q{V&vr2T6!|oS>0A9Y)A4&=zC&FZ)4G-zF**Ib zs>G5+kUZyi+pU!gWM0htGp41=p{|3|Dm$U16=sk=12=IHx$J$VQas7x$Nod^$mNkZsjTcTCxh-XLLR*t6J2#tWkPe_| zz^4M1f`n3K z-)lmtEw}%Z-Pu~M-*+#@x__o;GXtCmlXJKJGu-_LBAU+gkMAqq<3%f~U%zmXRHTmW z{%VE4Ii)^61_&zu1~=gQiu$q*O_k+J*-o`{9gemdahX%`dYwATv|-C@bNxP{<3Z$x z;t_mb^%j%xsi#&!EI|xi=OM$2#!+_csbts~^)zDf^<5hqi^KDvvz89Bi$ZzkroBuC z?7f%;1BhEp(Xv@#bc$%JHV?qenaLblvT?SOvc1`b)0X+Dxy>PW2t!qwR$NDXdAU}5 zlA%3{Dg&`#v7e5!`c=e?Sv=y#uUXd&Y=KlmG!hG`EB#Dg`<>b8u8d|f>1h>OjP0SB zffhAc?Es-C6yuCMtP~iX5Vz8M2Zho2-eXxf*a%!U{2iOYFI#w~OCwdz^J?{e;xn1l z(hb~FeZ5>Ts|XyURz^p{+0vb>PdV{0w8@J#q~Vx$4*VSC(bC3!I&qz+`IS*rq=V(v%Dh=E}{tnn!}VIsj@ytcrIb0 znL$gyXIKl3FxCNjPCYZw_t^h+#tBc1TZBTdz1-S7B3Fiq-<`uFx9!egLlkc8W#<^i zSDT1<<6n>0iZ{x5jH`K@Y%WEMaXoi=qXFI7_G`o9RDjJYNpMY+lFC`VyGO3BztxD1 zeSU-wg>saizP~?i;S%Q&1mS*iFZ^pf>$!Pq2J@=$(cg1A1SzRqiM<^NBI;hOIeoJu zzubKK;h%O@C5I6U91`A~+&wS0W%hjACj(V-MEUDpD>GTEwUoUJaB3o2Fu& zIp*VorW9Iu#LU0f&IUXf`ASOOs9;+jjFUV_cY*?*fQ346Z>(Xr5%Ynnr zfyd&V3-I%Av7@>lMa1;B%^djap@q>e`$R%vYxSW--xd<17fxwMt!6|%`Rr{>Ht~2~ zlb3-TQ{80?O!%tmU~av0qPCLpGvD4|d~7`fsm zttO*B9pbwn%}iy_ucdcr*UO$^x~|AH)AsxM{E)SJseLlBsHBRYiUS$u`jc6<_?WnT zFI4He{pY_$J8d7#-C$ReAN~VCN!9RTyt;!dnoZ^#{C!r`NOWaVvH<*bP@vv@Bn2bV zUGcO225AqItdHH`$e5*;cgY@2^@(?kmg5KPPt9E1U3>vsh?88NNG~|frVhTKFO6iw z=%a+PL>r@L-c)9a({rs=$^pxV4OaqxUdAxxK@!oZhJ_P6UaFoJ%0SS>*D&c!+ni#} zb($eNBxvjD%haLV7%&tJn{w3pQo^ja)EcVW5PESx)b#k(%2-R%3HVWIxN?G&$V}mC zj!1kyr9=5YF+Tb6hAdJ0oCvv{nT83$@juIpa2(tKklIbj*2t>brCs_}td+k}JCz z!{|s;eRsg#`KUIM{3|v2xF~ReZb8}gJ!)6x;qyae?Mm>v*$ zD$_Q2>~#u0XjZK7c7X0_pn5$OD*H2O%WNvR(jI_4hfW$9+wf=E58G3y$))A?wV6q& zNmhDC2)+H^QTGAYTBu&Ry4UT;IUe2b5SQH4lV1#Oj1{_w7KG=T;gEv$-!nLnk-Uq! zBssUr5U)mg)j|UcvKE^}oe+loyuVkie-6hnr#Dz!c&KPPCDr`%wO71HB7AQT8zb<0 z4G_d1Zztp=tTxcVX1Ste@CVGx8jCVH@s7%N!PlJjqd}`ZGmndEufPCf>>a^A*`usn zQ*yv#e$NT6S~!EugFx!09INFF9!#~|lH{Y?Cn*X?rDfnnjXa&KNyRf)w4tY{bAO}S zceeYgT4Y0z19FkVXxfa(JD6U^5hC7mSYoxgCxdBV9+PZg!uM;Fb7FR~Q3IPebSppp z-H?($Mep6JgM*>h8WTFEG;m_HYZci4`SdaJ(@Vw#9#9gWM6CwjYQ=l!J|4E3epp57 z)=y1$tv$Go<76Dan&=a=6}5p^O~^-{=*9~(6VW=Z5gPHJBO!#tYTOQ@opC%w4cB0U zQe|@N*qxJFE0Qp``d2*`U$3s%yqc7$4#y#M@=?g6(OqKVDwkLRr`X3Vs`pgR6`7sr zeY0n#)fW1wxWfkYlI=0mlPh7@`W2flefP@b>GiM17r~|aKJ#AUsl(E%o_P$MwSbqN zw^@0mtM{E+wu`8JDJS%?#r;O&Yiqw0eFpi+3i!a=)v>0eGOysXCzPSdaZb9?0+R@Q zz7aOH&a{Rgl%=3q4tZ?dXjA2o3{EHc27U}On(EBzA5`s@&{cK7oYqotfL5+Rep~K= z_DUApEOI#yPt?{~!8*m6SI8sm7{C{mbvIr8P2}Kw9nvvYb9M_~#PpxF47lHJ!9QT| zqoSD<2RzH{=l=@dO^IDxU#%AgotOVhyZJMNE_COa&+j%S>%$~_SP3(Kg72ohn(wT> zUg(VRuzLsUegiGT)L`vML4i9FwS`cV^Y)AsS;$;J8)>PMM^Ccg`dBk@X3knl@Mhn^ zsUJZA>;OA&H^yHJX7KTGAO%Cum9vfWGLk-e3xD9A5}Q!j*dkbyKdDC#c41e{6GxKs9G2J$O0&u37bo9#m1~`{sT(DL4$^U^ zoTo|ph=F*}mKfUWmOU@OQzsYvnpTXK$XU|#;-6E??^q_&V_Zl?U$oC|3Ab?U7kONS zrD&Y#@Rvc$=xvm9&l)kBNRj5s;t0=2W47-uh$NfWpO|Y>|J?sSGm^iO+wg=WuJOGs z5bbglXi)P8AY~MhQce8x3n$%C8eY7^9d_h~t^*UiEk{6L!4V%DTBc9zo{-Xx3F~u4x`DG3nDM zhfKM$ zJ>BmnFH=9(8uZ#{`Z^D|9~kZ{!2EcKpthHSWLZT>UQk`CoFJ*O#ipO_1(_$d8|NW$ zbXYrYNw9`x6^&JG=x&DoWa{Ll2nB~*NC1d8muD*Hau}>m)M|M%6OJKLX2H(?LBhCUq`$ z|31!W|F*)8EP1*LK`EKR6owc?C>!Yp;TLUUEiDU9OT-r?uf723qSs)k}%Z0H4x3<4k{}rnX^93FXDV zp2l6}x*cM>;6D(ZXSAK>>HiIZzn0M<(M2eD??G9}Y#uRHP=UkZ;64c&6&6TjGN21N zE7doq-!l=UexowN+hHhLC=+R7?+7%VV=8uyP{J7V{J~fboyL*|F}@q$x}=nQ=Iw1f z?q}1CUt_kbdeDreR4yB?AyZZ%A!)-}bMu9MGvS#o8;0Uk1BZFY1s#_8;x(><>r(X zgT}P1?XawzF{&L9_;fzemFRHl;G7`6bDY4?X(SYEvMTKBFgN~o{c=pS?f0geA6jHp zB6#2fZyIgtW;c*^w$mM~ePKBnxli z&%ZNMSlMoY2mZpZm8cF79MwR^x?X#I`n#4K`$-eD-rv7*kBpZSY`^&^F(GuNsVRRERyJ4ZF|8&$w~ch94DluB?vMOkzprxc(lsIFlCc zE|JeCfm&_EiW`#`ynP1Viu*K@{fn+cetR5!g!LFDT*{^DgD$W194eTiWkMm~aaNL< z4$1VDm!rF7p?_+G+NzrzYEHmz-I4Q8B0c+ED^(##Xy^%(V(jWg=Ty~sq4kQPcR4N$ zWG7PaGZ=pq-Rs_!`3}G14?1cV5dgHX$pvl$gr}^i0qY6o26Yq5=w1;-wB6TxmA3(( zRul%3p@Ss2y$V(85dpr2ukQQo=%N0Yt%|7~I8>q(35^ylPNaO~hIB(mX<@Zp*N)3g zgruY%Q?a-Yp{fhtTY^+PPgf#mB9>UNvb#@Hh+ITSg5y-R+GS-kKhm;ut{b$!^nXF; zZsBJ5ISaH3LkLSO=tSfnv^UGL*OP~grD6_I6+LHw#iD8XUGy-dv8xGoh;cin&OPV{ z(ZVV!_>0Xo4j8*Lk%ru>!*6mUQ-Ywy@kGwnNA_HKAQc+!c>tW*Us|Dv$cYWa3bD`* z`p5K1^9H9@oIwecGr08FOW-iXIcNa=G2z>=B)t2_A{guU+J72Oj!zLdrbn(KiS+@Y z1el82u$lD5>>}(fx#C=ZuTW9tr^PxW9|p2Vte2o_Uq*c&`J+~IWn^D7&_91cTWZ#EgrC3 zRi#|}jS{XgZ5i1Ted!4~dp&!Uydi;~C?KU8y3=uQ%*NYgOI^p);_ye%fXmEF;Ns-n z)Qu38ktWL5?d?}uymd96|BL31D6}q6a*L*UZ~YiR>7&8<{qHYSRCO8s;xK}S9S2LD z`LNls6_Yt5H-NCRa_BaR>Yo*-2_qq*liaM6&0zP%&M+RAB;2NA0Y??MV#7`L8;P2FDBbaii@ymQZU4yE`CD!%aV1VY z;pbwSU@K&uynY^p+OuI^gwN|ouS_|q8J`vrccdY2Pos|<=to!+yzFq-d(R*kb8!=t zkI^XOjP4PNQ&ktzi`zPKtlI}sN(_YLxdl0dX;Gu+gQpH_zLcH~;f^G1@{MkoQd*k( z#3ZKFSQz>-sT}<29qHS#^W|G=xS~kaj9>X!T=Z!r%teyiUvhJ3uPa=Db@4>0NSHAC z5G|-F%o#j7Y!NW;)sMMX^Kctt6Q`35GDP*qP#XB)FSC_n62mUc`^#Ne4S_>2Sy5K6 z=YsuKe{#$OU1%>&=IRU?lP|@A;)|gN@Mez{8UWx++#w15i;zx?U*_kTc8MMqDt%;q zWAp+fPG)kDmtDN>`>^dbhS6=-==Ni!*|YH#X=fU|4wwGmeF{NIEI5Bl z#lu(^ki!0&b1k==KC2|LBs4qibC~P#B=wV3@seE0I?8n$QstLqyjF_i!d=lqbP*dW zm29d>;P58xHI=!nm41LkJPh{)jqZ|&Wj-MXoqkf)753Y;7vpZd|0GHK3lec(2wn&N zlgTfIoKv6cTczp&>aAD2B{EX`|0zTaY4WL?MNKXDL^v*^kBP1meI%)bSS~t{5&drZ zQBX^c7#MD{SF?P-;_d>PIRDwGQ@Z;)btIH zOa{eSo1JO25Hr@T!LJx|X7-}JJBg%v zw~7qoICbs1z8re}OzYm9bPXYdFA4I``EL90xjdh(?{<>P?AK=x-g9OXmX^uaQv@%% z$a7H>M}-2WA4NG!?9mr*-NJWk2|l3xo~QaGSJtj5u5f(Z@C-a7R`;`&<*EGE`xNMp zK+hjYn6V6o9>uO$U$h6~2h5QE*-r<973u#S6Oyp)rP-RFr;~a}f!Jx9s?M>VkJQUD z)ov>h)AQyb2of+N?&opG3trW%nfA2UFNM=_; zpzn{ZE*b`%BYobYiDSr-z*If$(|gLHGwv4DQdmPLJ-IV2I%Xb12K&E#avPqyqL@hV zzAf*~M8P1U&v}e|KFs^Mjl6f}X?pPWh12CndE?%1=FFnXYm7vJ4vk9M%8%>!{OOJa z+8mUq`^eK4NBfwb=UN_H{M~!P=Iq6z+SJ^L-d4IBO)km(^o@2(>ggjv;zFk-I~$9@ zqhJD5iPvhn#4>TWk#!ay*IBM&ktkQ1A+A3mj2GU?zc^GtWh1`)_8g`EE;?1c@`7U~ z_yopG92#CMzd(jBh!Z9#HQKvY=Xj80 zE65;-%z*kLY{U89;PT-DI65JZE= zHeU1jt1nQy4b_df6A{?*lC6LK|IFAk7;zL*Ue(?XWofY)NN*3caR@WNQKl>U`U+~M zotR50X8qE+1KtHYF{W=EUeWSIy`njw6&0eAG99jGR)^0p7l7_ebp@pW&?2BmD+v-dRdtMZmut?gi;r8K_#$UK)`iNMbq>MPA7sQ)5^uQHNo4t>{ zvkB>%i*dEPDv#=z4xB3?pLdm(@iCzNn_T;*8lSa=#*NEq%b}z#mrPpOtAG?qDUBlf zXEE*hDFaxefpGvkT0f zRO!ZUg%IL2t>i~@8_RI8n3lJA_!Hy_?o{fY%!R;3mny$^4 z0GzX0K>_9?Xs_OlTq#npeJFg^h00P9iLa^_2oPJ^y5o@*21JKR1|F%b&+sGj*&)4G zqIHVRaUe5$lUrs-G<XX>bBj7s4S~Sp#7M;{({T@)e5#f{pHP1!fj<#{vvIb$ z{<)_rO&C2u7^_lN904X|x>iw{FwU#0`OcB4gC3ra{3w&_Oz=1iC$5`1O|3w@YxYZB z1g70g&H85b%zV^_DneU4Z5Da~-%#d$FzY4qLh!rvQ|hp4{7quQgJ&8Mb+z3IB`rdH zA$vzl)58!VI?kPvk_Eh$!_P%dUg=&oX4fwi5$`>)62nJ5s#9J1p1$bc2uWMPu)~Zt zB@L87kb~Nn>pvG>JyJcF|SR47%IEE3#$ASLys{uPDq{fj?2|3POaCRR2eLjd*6rU4Z%ktXmHYdILaIJ7SHIqHjl1q~jVFrqI4-mHX=s!>dla{Y z&)G;l0p*y?q6N>cY$Hlz2N zeaG-|K$p{-Tsa(GriZ3xeGl@5fz9MjxnSLrvLdQ!Pvy|n&Uuw1KyC&W2~+at=iago znL^cyT($ z*2Z>#{h6oj2X9B|K%LeP$CN&izG&MZh8fFGCgydj;ka|f!Ft_VsT$b>8tEs;@*jxOj5Ud6y%e=l^!3KU0a2Jq0E(?wER!-TszL`!bz^Gq$tM}1=5jQtp)zavLU-JVXN88DC9zz_@T3-Ck`Ye zmp5h_jt6<0`fm!dd7QK%uKEkx1Wd#q&ai%c ze+7VGn_U7Ic0FQ_?ol$C%;-t#l?)zw)7Jj3E>Z;FVWLr*t{-UW&CN*4HF3n|a%l~& zX6xIc$UU>MVPELu8yKo14#w?KU&M(qmWH65X*P^iRYgZ_rHBH&3+K*49^sne*>i0y z9;e2&y<)H#{&}na!MOD8MyfJcLjD9ksU1W3Ifdn9p(n+q@i)meJ?Jq_={v^PzgBzR zNDiU$3nOB+HS|T*lJA+K_vYO6ac8UePfH0O0sld&8E{C6xHiMKOspzu2DA1GhfdAURn^oL1cCTiR_0PXbD)YVQ- z42LkYM>8~9mI_VLC6n|)YJD4*xMO>Ct(M1RdVIL@yme^&KeSI&>l_P|QZ)=BWt^T& z9Hlm$X~kQB9kYjILTPCHf*+UDRC9REA0xdz(^` zDP6~(TVCFTp-6$FH?6RRf z*fZweJ8?{dz9cwRMR%G40*3d$Fgg$9@>lJPs{gP?y&S5ks2|4AYZ$Oo6WwA?M5@YO zT4Z0+89R^*-&WYrE30`xO(J&<*@K0iG5h@W>UO-kwC$zxvJ;5C*NMIiT;BMzo@a5j z8Cg|J*-53DklK1wJP;iFMX*Kxa^kS`HZYYLx+h7hIJKY%JYWBZaLe=0p*GUNIpk?*te|V!Wsar~hYx z`T-{)j8xgs#V4Ix&Pl+(C4}*!PF()lM&8{){qVFkRY=5jf-X)g_I`CQjWL3e@&f+Y zd|)g2v!fp8@49q8?w$xZ;X<(Ssmyz_Nvy!#U)Q>M1DQhb_rCi)*fpS&U%KuB>8AQ) zGGq_c!WE$#$q+_EgB`n5BTd_KeI_j~>C9{T;SAHk`i*)NavlWXOy6CJ7e9a{!h_c_CYd3UqYFVAYRNaZ}qd52Yj>zR3~|dux!8~k(hOX zNyV4%ss=@%sL?YTHz{$Xhb_jDC`+;Eo=WYVoVmV9?^iKeBbK3}-& zYElmW>9`AbjIn6NoxwgNy{a3PK>F417(gA3d#Si#n{!YyFqF(e%^vEd6$>Tv?>K3pAHEJv@)<@61|1lv#% z%l|n?G#=gtVPyEhO%jgp|H9F^%jmjWn7UgEn!8%Q696YWCkHFL04pb_COe-X2d5yn z05dzgAUnHQz0JV?VsLb}u(k5}{~45zC;Z+SbbK{+-PKLKC|z8gt!y1EDcyZsEGcbW z+|2<1@0_hmG^8)uVDOO2@QA{WIsldimCYO#hX&_U3N9=Tr8I=Q&jOaFQIm3bVP^36 k$Zyi$h{F*1f{$!~Ljo-KOG%!z_ay)dGRo35k|rVl0||9(c>n+a literal 0 HcmV?d00001 diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100644 index 0000000..b3930d0 --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1aa73f930cbc882a0455bd1be5d8466a7d1a9c GIT binary patch literal 1491 zcmaJ=c{J5o9RDFBvSdkVeG*ZY$1oj)l$Rx2&nquWmS>&F_Flro>k*-`WIrCmvlP+l zSUNJ2rPrej71_?%t4Y*k7;(RI&6$7ZkC}VE_kQp9-tYRk-<#}cZz(0QU4kG8DQhbW zD(0Kl=SC5{s%yzOVYb2F+|HaJ?xk;9^%BK0iD5;xBZz1K0JAtAcXHY+R`Xk0j6AG)CeX{FO66L5Pm$!XCOu;6uG1Ciy$l;O6aK6 z8L`r#+zGKS11ApMv`5vpC@~7v*dR(burnYo9{m`G5-y=CdvuqA&U#G88_e7{M=#if1vx%Y;ElX* zfPV=TxKST#|0i8<(hoT zGMV?16?j^XT}pzqP=pO}4tf6IAt&%s=)SOP&_$N-UjCKMfm}a?k?+t#E;3KgNO$F^ zy-gyG)1|xUdwb3_LL3L-66#I<@sD2ztKr*X^|`Elvv`C3q@Q1ZraChOBZpv62L`m^ zwHAiX;}&?A!*Z_y^dEpeOlsrJZUt9|^5dp5&LiJ42;f3aWyjZUE$C5&Zk6Ru@*ktF=9>(mZ9B9np~p&{$%V1; zkjk0QiJg5`co|yc=BmxAy=IeHkP-TI_$Lq4Adeb03*z!Jf>B<;pLMMEk!;3%slk2c z8SYt>>#)+F!05Y>9=2~N>qv2f?F2*dd9YG{f%aUO(yJiFJ^+}MX;#NA%VkpS*W3Sp zhtOtCCr)D&X|I&<&id)4wX>4SB+f)9FN*bPF|W9NJVE32+8fQ_)wKwPHvTs1;cH~8=qWN&~&BZ z)kxIuwZTDiA9iiqS){1xHr0HQ-{&iEu5p{5c-A^I(-Pe?#QJR@WUw*tLDGI>k)*t( z+}h##`N5`$fsZDpEnG>rkysS7G-npN&^xXobop?zq~s6gk1f-8nT36xs_IuRT|E*b zy5ULN3$95dYU{XarRD<99qn$pCmbJYMUzSzU%C9ZOC$>cBrz21K%kX zoOu)ZaZJGP5o{HbP*70Zl9xRew{W+nnMai?=T$$ftiO$ZnM~}g^wS8;NXdO&|3}*M z+aHU^T4I&HxhF2apKo8R#~S*g6#lJ$Pp%kIVG}5Otg~DWgQm))(3w77OkX2LxG!de z9$8OUi)^T+r$-|nGSbyE(lWR{$&sx;uGi>_1^~eA9`c3fpavC&ZK%p zl0w5n`~rh~NzABFUs7NwlR*#{xs#tIH-?>7SAXUp=(e7w5+W*_v>BV^Rpd`(DTv6E yEZF)_d_+_p&`5&8mrvWf+jq8$3D{O8HrmAdt+LF|M-6gt2*R3TZ*lvmC+9E1^X13@ literal 0 HcmV?d00001 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..e177c36d8ce443c8e3cdc433e8994329710c869d GIT binary patch literal 2366 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 literal 0 HcmV?d00001 diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..b6793dc89890a568e136b247280363dff047de1d GIT binary patch literal 9812 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 MQA?rn4LJON0L3O7kpKVy literal 0 HcmV?d00001 diff --git a/public/pwa-192x192.png b/public/pwa-192x192.png index cd3ee45e5b7b6e74a9fcaa9b610caac5161be424..a5e395247c9f760d3eb64a6338beb2fc3b767d10 100644 GIT binary patch delta 76 zcmexY_OEP0B`2pCJCD(1A*WRvn_R8LEp?5ILJZ8U42`Tz4YUmmtPBj&nsvJ--?Ng! OCMSMxs@Y_I>wEx)GZqa1 delta 76 zcmexY_OEP0B_}JtfRvaMW3cbWCRZzQQ(Z&T5JNL7BOo%;HZZUYh)B+U~Xk-WMyigZD3$!V35|V+cjD0 RrW7_g@q1IvCVSt^2LQE07nA@1 delta 78 zcmdnBnR(Y{<_VRYto#B}Vor>~z8jkwZ-|@f8k&X}npqhEk&(86ft7(l>f?$flcjD- PVUrWtcR*sY_sx6&pvD)7 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..14267e9 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / \ No newline at end of file diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg new file mode 100644 index 0000000..b0d0491 --- /dev/null +++ b/public/safari-pinned-tab.svg @@ -0,0 +1,122 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..7983c08 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/pwa-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/pwa-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/src/registerSW.js b/src/registerSW.js new file mode 100644 index 0000000..d42ac9e --- /dev/null +++ b/src/registerSW.js @@ -0,0 +1 @@ +if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/sw.js', { scope: '/' })})} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index c10aaca..a9eddf7 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,12 @@ import { VitePWA } from "vite-plugin-pwa" import replace from "@rollup/plugin-replace" import fs from "fs" +/** + mode: "development", + base: "/", + registerType: process.env.CLAIMS === "true" ? "autoUpdate" : undefined, +*/ + const config: UserConfig = { // base: process.env.BASE_URL || 'https://github.com/', build: { @@ -12,13 +18,11 @@ const config: UserConfig = { plugins: [ Vue(), VitePWA({ - mode: "development", - base: "/", - registerType: process.env.CLAIMS === "true" ? "autoUpdate" : undefined, - includeAssets: ["favicon.svg"], // <== don't add slash, for testing + includeAssets: ["favicon.svg", "favicon.ico", "robots.txt", "apple-touch-icon.png"], // <== don't add slash, for testing manifest: { name: "Open-Chess", short_name: "Open-Chess", + description: "Open Source Chess app", theme_color: "#ffffff", icons: [ {