From 7ca68eab48fc712a1f3209d7119188ef3b502999 Mon Sep 17 00:00:00 2001 From: wieerwill Date: Wed, 17 Jan 2024 18:23:17 +0100 Subject: [PATCH] add PWA support --- README.md | 1 + build.js | 43 +++++++++++++++++++++++++++--- lighthouse-score.png | Bin 8520 -> 12109 bytes public/favicons/site.webmanifest | 1 - src/data.json | 5 +++- src/scripts/service-worker.js | 19 +++++++++++++ src/templates/footer-template.hbs | 15 ++++++++++- src/templates/head-template.hbs | 2 ++ 8 files changed, 79 insertions(+), 7 deletions(-) delete mode 100644 public/favicons/site.webmanifest create mode 100644 src/scripts/service-worker.js diff --git a/README.md b/README.md index 0023b37..e2eed8f 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ This is a sleek, lightweight single-page application designed to consolidate an - **Handlebars Templating**: Pre-compiled Handlebars templates for a JavaScript-free frontend. - **Optimized Performance**: Minimized CSS and HTML files, and optimized images for lightning-fast loading. - **Accessibility and SEO**: Adherence to web accessibility standards and SEO-friendly structure. +- **Full PWA Support**: use browser caching and offline support for quick loading. - **Development Server**: Develop and view the changes on your page in high speed. ## Organizing the Files diff --git a/build.js b/build.js index 8a08fc9..e168381 100644 --- a/build.js +++ b/build.js @@ -61,16 +61,38 @@ function compileTemplate(templatePath, data) { return template(data); } +function createManifest(data) { + return { + name: data.title || 'LinkMeUp', + short_name: data.short_title || 'LinkMeUp', + description: data.description || 'Get all weblinks of LinkMeUp', + start_url: '/', + display: 'standalone', + background_color: data.backgroundColor || '#ffffff', + theme_color: data.themeColor || '#0078D4', + icons: [ + { + src: data.logo || '/android-chrome-192x192.png', + sizes: '192x192', + type: 'image/png', + purpose: "maskable" + }, + { + src: data.logo2 || "/android-chrome-512x512.png", + sizes: "512x512", + type: "image/png", + purpose: "any" + } + ], + }; +} + // Main build function function build() { const distPath = path.join(__dirname, 'dist'); const baseHtmlPath = path.join(__dirname, 'public', 'index.html'); const dataPath = path.join(__dirname, 'src', 'data.json'); const cssPath = path.join(__dirname, 'public', 'styles', 'main.css'); - const imagesSrcPath = path.join(__dirname, 'public', 'images'); - const imagesDestPath = path.join(distPath, 'images'); - const faviconSrcPath = path.join(__dirname, 'public', 'favicons'); - const faviconDestPath = path.join(distPath); const headTemplatePath = path.join(__dirname, 'src', 'templates', 'head-template.hbs'); const headerTemplatePath = path.join(__dirname, 'src', 'templates', 'header-template.hbs'); const linksTemplatePath = path.join(__dirname, 'src', 'templates', 'social-links-template.hbs'); @@ -117,14 +139,27 @@ function build() { finalHtml = inlineCSS(finalHtml, css); finalHtml = minimizeHTML(finalHtml); + let manifest = createManifest(data.head) + // Ensure dist directory exists if (!fs.existsSync(distPath)) { fs.mkdirSync(distPath); } writeFile(path.join(distPath, 'index.html'), finalHtml); + writeFile(path.join(distPath, 'manifest.json'), JSON.stringify(manifest)); + + const imagesSrcPath = path.join(__dirname, 'public', 'images'); + const imagesDestPath = path.join(distPath, 'images'); copyImages(imagesSrcPath, imagesDestPath); + + const faviconSrcPath = path.join(__dirname, 'public', 'favicons'); + const faviconDestPath = path.join(distPath); copyImages(faviconSrcPath, faviconDestPath) + + const javascriptSrcPath = path.join(__dirname, 'src', 'scripts'); + const javascriptDestPath = path.join(distPath); + copyImages(javascriptSrcPath, javascriptDestPath) } // Run the build process diff --git a/lighthouse-score.png b/lighthouse-score.png index 5b400a3b5ecd5b26baef65b678c1b2fed4107045..08aff8893b1afab36e864818e2824dfb96803ae9 100644 GIT binary patch literal 12109 zcmch7by(D0+wB;HA}t|}N=SEylG37-#L(T{A)p8dCG!-i}7i($*BBWJ$xxPa|(=N5jRz#Y4j>AjBys#4A7}DXm5^j9m(W z&_Lv*o~d~xZ_jx8+*hwVxmID9bLT5_dEQF(u&}xLd&zBGg4>3lmD+nQ-&{f9J9l+W z4AgGl{~{a~=)4%vw-$iYZK{fnhmUsiPJOz;Q@l0;Jc8#8>%kwDbHD6TD`^X*h^DCJ z`p&{Mp>kHDBPvWPBZ9fg`9f}6Yfmw0gYo?2id=34<4Ir+dORM)Lj6LK01jTxcm02V zS?F?uOy{)?-e`@%PtnX084N?){98m?*j~-2de%Haw_F(RzW6GE%={EU!L3Dko3iKC z31*^r=$rk==-n}-j4FjA8N=(C_wGIB;J}NJSv-50uLcpIz_H;=+UzkZH7M0$WM%EJ zs$}xHeU!N|UYaSnF5#i`y3n8)$17vCB6huf5~ghf^VeY8=! z2pp>N{5hr#@*4??rN3l1W|eua*UWUtBAfBmi?Htmca&bG1y12N-&ksHw(Y4c<1NmgF`~<3l_+e+UA>0 zxD2@xeE8=1H>J|VO9|1CZr?`Av@;*f$PrG8luz*}6+h6aD3AC#EqJr=SqQ84t`&cw zTT-o=#4wwnN*RLjPZ(j+;lxrhG8r1o!(G#M)iG&lDu#w%AD+XM%M}kz9b1;fW-=%F z*oy`gzt2)YTKQ8855&Hqi)QP!ak@vQd%Uoz?6Gq0ZHK$O57w-?o>9Y7FQq@kkhn$Sr@!n2o_mtx9K7}8_oSG$bB1Mv znS?v^;r^@Zri{3MSHBP9_dYUGqmDGTySFzxFYo!f5u}%8a8+eP*YsS|I9V;Wlt+29G6@?Veji?8>rdIMHuG%FN##qcU7PFBxI`Z^}` zBU~^x)g;@`BM^j%;XjE|T3Q+$9L%WqK^yDdJ*nK`Cy86WVuPzn8;Xu}n*FriPVars z88--)Wtd)m(HbOEC=_Y=RwQ|60#P&KuJr8BQo}<-Ej8pCb)P;B$Z$UvOIgF(wNkjs z>Z2OQW>zL>%-?})l1rWv@iK`hb10m@uvpO?Cb)&#Ez~qx3@nI8j?|w}J5^_8W&J>I zmxnfHsqko;9qz|d9gN}!Hfc6GOG>M!7>vew-DKCbj*F^){$~Y-hK3-hqn4DC9s;(; zMjXK*#x-IA%5s*L**%jZj#?x9Uti|G5G=0iWgb54ERJj|j+9)q&? zH@v+ea947+jevt9LNuvn!1-|J*AL^%I!qj#mB~u$ahobH`^;jWecnnmLc9HV;xdL@ zXpj<5+aXzBsT<6vJ>EO0Adp)nV%6!QvSd`n}UEAApfIV*Q+ny}l z`y{J%^8Hb<@Y&04j<6&Do9R;g4^EDX;XDQcZm!AJb(5(Pld0GO))>v6=7@p%vwi+; zUNnTqojE&EVpK;h(Uab%|A@RT|) ztje6w$Zt4ypoje?B#?!=zUpB3ND6nL)^-a0ORo+IH}4?d8I@JOMZ9^^CzwduB;I^d zpX2E}H?hKJDuX3_!M5;pgM6m{RxPNVw{PEiZu{<^b8(#*?Lz0q3XuD^^-~9Wc2{oM z$TGtH@F9Kw>;g#3kFpGnY}=Eb709tz`Rs=*Ecasa9c9%H6NJygcAao0VuqL6+=8N!`H80p);w2CQfvo&919ZWozM$W4P`qTEJIntYcG?681-nV{T`u zqU5^1xU=G;-6v8R?iT7)+lFVa(9~IGE<8jQ2#Ru-+*R+!<~aQ=c_@s5gQG+hshZl{ zl5hxStUGMqfXTQUj2w((wbNg27<|GG-q4~#{HvXzU?=>Yhej;#>TyX}H!MrRK97$Z z$%W_g%l%#E=RZZzz#Dg&BkIjjVezK4WWX5uaoPA+WKY2AjPLtXCC#Xdu!H6a+TBd{ zrrUWgQ%Cp&1c4Ja$K6#-i-e)GYI5qYU2W#y#M?(^@q9(g=C4furp}S49=vn%Hcvfa zq}VzFvzY(@2c-zf^c$V9~UldMOSblY=H+{}%+*I$Fo;kqQl8^p78&`MljSEj@ zb?)oV`ZIF0@yO;Q;fn&E3fsnq*G-w4WAK8ljX42DkiU@8^&LE^@NW z2T8Q=GrrnBSvRIRKH447JrYsfsGp4x5o(p%d{%U`KC`cD-jyIoh&p6U?%swE1(bm^ z@4(R`Nu$vA(8^o?J|IAi!VW9jWPTc^)HM)0v7Xn%>J@eE@2<4O>W1lE#7SQAd}E~( zwYD?o5}U>bfpojGo_nj81SX^bLFaQ@|N|w>#Ec>SPoS!`wTa)fnH5YB>u_k4NgiKi$L)w(pkk z&w!{Wz&l-k>a~`(hkPv);_&gfdBnSlg~oH5O)BOTN#VL37pIjO)KCVM*3O)8X6)9! zkhHk_Ctqgmf7>>xpU+*@#Y7yCD#+Qd`W-T04a86D0A+C4Hfux$A|3$k%C3DB6F($&J z?^H`Z)VWUd`DW}9)2rX(-`;ilW@U{2!K|7b#lvcZpKuTcZjL4l+TK~$RKUl;5JK&D z@@A&qz1(`NnEr_hYO3l;qU&a!+6ZSS!HPaf^@%M39;Psi&Oq&sktrQP5=Lh?8^_yu zAkNMY|5b|1p4L9+8y`qH1BsY5IQ*}C-r-Pgd|J9;WNiFE$c6D>wcorWj0pTaW3Xo= zzN^?H1Lk3B8E%)%tPndgK|cCbHM2|*Q>kCZw2GkWl4SMfjWJkU4+Zo!j4R?OD)Z~V ztC&Ls1_s9S+f(_U4X0UnU-mk)>uL2WkZ275u4ho)rc~+LP0d=IXNXTcW$S@$LDFrf zsxH=5{EcQCJa40oWWH|4VAOX-Nd2PYvw1^CLE9%8d3M5(A$IkH7g0Q>tKYZrPw=Qi zU}|4@iT)LuYQ6IgJl!cpEe3P3n$WKbU)UfGE`F?7WurCxV*)(Mtd5a%CDRSz%M_ptB9WjcuD~)!hYe^$!shykWEgJgL#oT2PTK*1`%zb@CM6!(qHTv5` z$o*gL@Qpau-0L6w&^X#ZL7lLvl9|}KI6csl6FXg#AWqi9aN`}fJ1JN~mXCd45vY$` z%EY>{Hk6G80&M@8i*K|v2>0VLWtYZfjU$OVf zqSVs<z{7H07vG`ve8CeWv_VhL+;|VNI(mIia0vdx+QJTFc@3FdVAfqD*Pvg^D=+AnW+l+6Id8rlhx7Gw2ilukQHC^|^-$Aq=*W3Wb+LWL@ITqS zx@|I6?`|&>MTPxz-yIfXC9>`}1`UCgcgW;iow!55ACz`y;c#t@Yvse*oqlFM4GhxD z(3>~=^*X+)8~WrWZK@LKWZ^7cBZva#cAfP`jIs4#Ttrby$jp6Xg`oCklK;xN4x@a} zuR^5aej*UCnCHA#YOBJYTV!q*SDwV}2n;vu9{&kRtE)TJw%*~@QI|3Wk(9zrXWbdm zv*=~3vkQDhM+X=MzVAkcXg~K1d)NB8uT=7Yymc!nDQxA(f|Nh@OSO?+KUQ zTeRA0#N?AcSQ{9wxgq?)M;5B5{=s^XEl4rd{r2u@~SZtVH2H^OrlEZ-aG$I@Qa5p zkGb7779@sV>7nq{LCVpQSa>+RtSIdMt}Cp!afP$jYCzrFN$?lb7VVAH;YzEq z@|*x!U+JfAcN}39tvqG7R#H^~{PMgd4s7hF^BJyXLM-bdj_lM#z8}0+y2SP5Egrl7 zZ=Iz#3=It>k`!e7U7pqYDf6b@OP}AW^m%!p9DRQz z7QC_4aZv{Lc`T_5`e`9lj3)Q?<&T>``5UMwz~E=qQ5v<8JBs+*)P)EO>B$Ct#Nn^| zo3Y&PZq(3M{$&9H$vMH6_8I4`9UMS{pAIm#sd&{-Ncup}oqZm1a zKpr1qz16QS9rg&z$}4u+o*ZEgoi!@unPj$V!I)gTaVTCVJ~^mmYb;;jK}1=$87)DV zpZq5s&H21n?*wQRB|k#n`FS}})GPX=j2ufSs<=+cZ?63DgJOnL(cO<;bi>ZIo4Y)0 z2w6$b&G^Cv^3W>`WF!sPZ09eX>%R+vy9>GleXIG#e_j4{6bQ-}+SQhkZ!nUyx<7&hQ>C5xNxU%=lL8uh< zN4RCwfFo5lB7CH9x0y6=FPxALXJiTh!1((!?Lo?6aq>shYK%;tDz_z zNIYUYie*h`|I7tj7+r1kcaLeM>fSAx6kSXf$qD>_i2 zDkcjPbnO(NmwVKVTMP?6#%Go{umt3RQXR6_EbO zlM1eLIWIrSQx?=!k^ZPrU0p-@U$x%N%*151H@=&YkN}y+pILt=?1*h1uE-+p8~-KJ z7rXf)DdakF$(`j9@9KxC{T=uHzFl`Icc&>?UqK3-u&^+)iipX*1Swc=t;~se?o7^W z>@)eP&xzp+&q}E@2k^GH!bb z{LCY#-hU z``G^=YE!Op<|JIhlFI z2?BNX6<=R^4f}6e%-AuAi#I)+(rWS(g~)N<8JpT*{-Cd~^*wOc?W5Ok-J;I=DBLh3 z`BqlDsbbj0#RYwB5(c%xA>$6-(hrIhhwk1a?X+w{#d_ocQ*6=YHs!5#e zp_9s`I9R*)N`#Skn6ba_abqV>fn>I=C;s(Vi88s;AKRm`#lmJB%l+lcmnBo%;OP!# z7xxx|GW~p!KCDe$7_z0tCu-3P3#C)rpxI~iQgqD@{qR9|Aj|t3TJH!~U=#mKfsB+X zm!xM=qFUisxjB|&dCbmV_T;@+JK<+3n?y0aZ~rXCynLc$!sdu7xzmEjX=hpxNUisn zzqqS>`6EeT4pk+1FZBKCq1ZU;*-c#`GG&W980*IGZ_O=#(O=n{Z#xo81(hK$pXm18 zFir6glGw_{Lytx0t5cUV5mfovEfhi|<{n6d8%Bo=r2SP>iQL@0y!UUhNXopCJ6_bXhK96gXlT6bYo=jMIaTzYF+#><UzcPoBou2;P$B!SqVASN~J;qU@os{m=^NDU% z-4vrhjqQg+f6gICLtOj>-}>$jfG|`E+77wr@C%F?}Q)BdJ2-U8|>=G+DM zClPvJ&8JZd8TTQzUBd0o(jsQ>2kjA{Lf0iabLyN@{eKXk2!2{O%_&^_>S4CDt zo2=P8A?3%!pl-@5apXUZ@~OA1}${;m(?$ELfUv68+*;#{`&jsW>2%;?Vn4rgF}srxYKECtGB4* z4AJN{)OT_EP$)R|*faiLeA&x4*wxutW;Y{*Ln$P6e!Lya7HRR=dF7|!?}ZL3@iEhh z#8E;CO#d9)Ey`(Mi2_U3P+p>evb4S3lv zR&TZ8if8FJ`Jw(NS==AGzM!@~tRhZFLzDijM0If`k;l!+#3v1ZnJyaQ`KEol};PKo@f+lcaZ4& z4623vvXPRNjY&-0;44Z`56F~_Dzg}TsGKI&`|Wi(DTe_BiSTcla+<2LHNL*O6uG`Q zD7M7M$Ir^n{(Z6-RqlRle+_^eLLB|=J)U4 zBFJgyhKv24pYfcT%2PuYJmWTet!-_B{#PQWr>CxLDyMvYg#dE8cKwjTRrZKJIC8c} z|N2ZbJ6tXM+qZA%?B0uq>FG3A7pvmshHdCgiidN4jq5H#==VsQr)!;00qcyHnJNTT zfsWmNr|H^H?r=n_%H~0?O4>?k7u8~SEOUj`NEnb9`&Z|?++K$kTW-P-YM;Fuo1;Ys zT1^-JiSpS-KceXlcM)k#m)rI}*O$o8v9X`x|lm9w1%@cevf0-8E^CzmJGo$ z9mcXS?}G!93^r{U{KJH@84+z1ruVKHTRFk z^vlh9$%I@tmb9;rr|iw!-eFUS`NUURj}0~X`;RqjM8Y{gP>ZKlRPc<#^!wvEjRA+* z9TYNK`$lD|7izHR)qVCoKQ8sZ_5+iV(bd(BIAGGK7pA~5>rd^yx;&q#vQ5(YP*9M; zo<>DV`dnL^OuH!V*DtkH?;Sx@%|3tr-ug8h+W+PjM$LBB6xlvL^G4?ZD>HLAh~dYC z1UU(bKknvX6hX0nr~EZ-^m5XJp=><&*kLiSJV7EO}HEv+V7wqtMN_i z4HV|ingq_zG&JJ6G*wmcA&+D}&^&n(8bamu9#}dKOW*M$sm1#+sC}BT*c+NZKY6t_ z3$K3}vN62BzpuOcR7M8fd9{y@jV+Q&)XU*y&k#`bb45iLR&kF#1JFx?m~>|?Zbx|oyJJM2$?pJ5#tq>gdl5y+(E}CTT0Z|drj^{ z0n+LrJ9`wZUXgyMZj)_{t9sUp*{nQ4)cg3?=E0FP$mLvMf^AJ!Vx`ZPPFCAfhm)|c zw1*O+%5FGUh1pX}>kfbwyGh#8HvcsHrK*NTCrIL%EBnXv^iFF7v>;`d zj;}d5IX{7l7~5U!iZTbtKpG+AwmaKf`a7^Ca-F-6Fbfvz2>~*vuovWM@FXYMu1mt}Z zk^^MZb&6?E96klbmVA2>zx@h;&Eg|4@6Cc}L6F8@X5&J{rnm?sb^Z>V(B^N z+d-v)K)*OhyS{AzV(f#Qai8`(-!48buLErecz&pArp)it)wEk2Hsc(8_OsL9lH33Y zO@N()07U_5I9*9HF)@Ms@@O2PqiRhVv0Bd0O*NWteG353`EX4YhgwY0%8E%glEP8P z4F#L0OEFYa0Bsil^HkVQjS_Wro0ypm73&GZsDqmB;NX~ncP*{1*0UuJ4G(*6m3Bb} ztST?&as3^5gQmSUi+nDAcNHft93Hwr9zJ>`r>tzY&>jl0883MQfFzYpA@1bjbntPg zn1Db$z-CAvA5MyL*Un6R0x)VJfR1y4GAQaP3uST)oSB z^yVs%697QwYzSdmR}tj=qi5rA%ZroWHWOtXBVur1M*(Pirlxk^)6;V#4s1rL%R1;O zU!s8Xxr)kaA*|8qQb~;;mQilrUw7%ZK12r$>&@SC0!8{wsZU&TQ?`@U$6X4^w3}q{j-)B}W2Qq*I5N@5@wtSP{rI|z`i(j?XbfUP-`xQ&4klaTNOK$R}P z5x|FrlZEhUmtiF-DXAB_x{79I^f)0w54g?JN30(3SbQuLL^IeLFEueWbp(Y1aoZYi z0Sx|JS$QSNzEO4MsdfGjp~VPlaVm!@YG|z!5Vu>2_SI7pjlT7T1@&CS;n|bEY8OG8 z`D#?d%yyXzLh30zOtE3v3SY{s$JhWHMNHVx1KJzY_lIk2-cnC3sT6dx4~>X09Y}u$ zbd5{|*>Ykrn2V@aMPaVJ>$UENHwDT_L9r{q=4r<+O3da$)bQcj1dpEonZS(_E5xkYHCDoAGQPP0TZ22 z{)R1x6V&q5(((yPjDk~(i_?C8v)14{ynTgvM(Uw$mrp-XV2^??Fz~) zhv`vrIZG}E$g?@|t3`2-jr?3jluuYX7AK#LilgaFohudGNBne&5UlDcSU~|RP+O9j zgC%a;+CWaqgVq9EhMI+YJ6~O#f<&YTKF1wGdOV=7z*tS!m%E!Tyn23LM@x-m0o2|w zM??VG#0l`X$%F58_Dg&K12#4+V8Zl($jnnc-vL3!LaYEcM(gVboj)Ev{vabsX75Z# zILQN$Lf|we7euhVy?p@g?M}?5`yR-vO$7ofDrMl9i8S6rzcuGmeBQ&}^q7wBEtm-~ zU7muxN)Ykng29i;cHu}W@#~B7mm!l|+1c5SJ*?FO<>o5Yjd-AAGX_P!cI1UaC4woC zB;pQe6zHS5xpf_eZ1e`AL`fmFlLg z$oW=zacW1J&;A_-d!g$EA5k3dlDMGGBfDIeYHVPXqkEf_ok_%#DV>`f>y>9fW z-DIl-XP|&z9ru^y*mP@NT;op2g6^}_c8X6k!vn~-i6;N1!UGFmup$1DKt8bQRG}h9 zhdaz*YG%e|+I=6yyeE!z5kUS!5Od(rQ~B&Yt8RkHQh5f$8qc~HH#=`ct^7=A191KT z93B;F6fG=9iJN`@Nc%I1KMJ%mnxT@1e+b8=TDR_{T~4&J@?MVYh{ov;dI}l zotY#cdl5(8Kz{=dAA2$fua*CK21%=IY}0c_(EkA#0PVAat}cbB*CEa0$HCwisDnSC zFu~E*O@m)~ssKbj0Vpj6T9e9S?nbq(7--H={T%@45}OGwpx1hv-`sj#=kf%U{UZ4B z@#DuHYBQQu(ArQ!hBEMfI1~cSU;!wS*F6C3KtH&&DCn_AV`*uLqSTkKXru^Zq}Zjn zfm-{IYBemMfYhv}ddKrv5`bgyY%qa_<4J3j*#TMfKnudQ5;+Ioz5UE?RktIe3y40ex>q10)pK32>9KA5epXK=LC^``LyBKyEi2 z=3CL;-Fwgq+E9o9SdMvrYPM_?6_A1s2w!9=a0@`|bypx}FW|;4t8d3JJ2)yHUPo4d zXmOqbK?u4o6Ch(7kh9(ZKki~-l}^|!EiIv1sxj#>ybQ~KwyH?0^k)4GjsT%A;E&-P zrOcWd(iCM3fvKUMiETHqTfH;x2qnPG4gwSvHWNdYHuY}X(?X}qD=YiJZ26@XxiJc2 zNLfAOMy?`unl&XPlZl_y+Zj!#;Bk30=DGGYWE}3zPtIpE2NLt>Oe7fZ=n*iwsCmu% zD3nu#&;-0^NQjBOSezHhk)4s0J)qU}SO{eRO+CcnD1$v$V+>YVTyR8zgJIwB8=V?- zU)cvJ>_@c<(J?U(xJ)nsNiI&9rWt~c^x7tNA*)I(_ zNI_@03hI1uJvYs4q(B`gg<_2^_TW7nIZ$1p;C{d$zGTtUHj<5xbA&2Mv4y}E7db*k-( z+~DrBo*|wGEBKU@y#PNv!R`tAoNz!;y%Ol5DS&RD2jq-`sn4H3=Uf^DpG3TJ-5MYK t>H_X&gIn4HSsVZB2Il{h7kYdRx$!FHej~{d2Ds`Dk&{-IDwZ$^{682joQv`ci1Ldt$jWJ1KGHOY zKo}sfC(>FzpZ-qy!Ebq9V76_N2U+dP6SQRV)$t2-`5$1YIA?7+o0UL-nCYM zU(t0%|Bm;!UOKs;DUJkVBR4z|ocFILZ{r%EgJ0dr*9g`596GIJ_nWzY6X9H$wc4x# z9X@&asZF1+*5BG>IAFlvnm2R(SAHxZV+g5CIb?*GR0f|>iXaC3h>Q+q1~1;qVz|K= zGKkBr0Iu*$|8q&@|J|i;84XuB#)?^Ko%+X|-+v{uYjtxXUHNLpgR_Wn=&A`K3|3wK zEGs|gJzmvQ71S2GIzij+Fn9*Lw)W4F25*ViO`OQ=Goqu4EcTjZ@bORu;b-O&mmsI z7*%<6-H(N-nV&AEc3s>v)UCSdS9E(Pvi4c2^VqP*FQsr!h5C8y-855k1S}`;6}vm5 zEq1AL1}bJFxHj9WJ#Vy`-Dst@gCDMs*7b4GFutSg@eVU(@0OCl9vK$~%F-3J0Ch6#_~qpL=Ri@~BMTIjO1pYDo#I^$p7VAkM? zGzXd**0EcwEjAtP#01|J2|lzD9QPizdh-~}Xxt-cizH=$Oi}i7ZIQzpgc|50?vaCm zllx}{!dy?ep?*pqbAO^QCbcDxs)#xM8<|T&LV^ijd&>VS^tidsU)Qj7Hq4P`)7v{sc|eM5b)z#Y7YXq;sPjUVO3h)cio*RE0Wzc&?*-^mL0D`E2Xr!1X~|HvNV zT!NY6K&rci1m7&Z_qj?I-*#^$tAzRLKK6K>gDN7>a2rtIR%sb`@JSI;dk#%2&X5x* zbe4BDa$w$C=Ioyn?Cbe=_|+L(LA?BpS+mvp=y$h-9l*Gsm?>=42L&GsrK|; zQ!H%>8*Ti->8Srd-orKhM$1R73RRl+T4SfINcq{XFDHc4=`eN0w9dzdsK*4G?{vUR zABcX%Vh?|%Q*4R5z>84N*A3b3@aN1DjSF&dwjAC~6B4C>i{d>jxc+bPd|l=@jdt(! zJP?&|R+VSc<(wfCpFqFm*La+j`h{X7(lR3rd;IbH&8;AsipmrY*4XjCI3hMJSc8jT zuI$URj>P=?*fW`7ynNTU-sw3y=uMZ1p7lRvRE0*m52G)y%Yy4WjZZ*no}Ba0BA=f@ zXV$y2N;Xxtg)V0!$!{2KbS+gkuz34TlYNf!%cdyh`;oV2$Uo-^X#cY~u)Z_-O7NhJ zLpuu(bZK!>0n@FCehRtb{N&5YN?v1`F}QxL{pmjHJN4bSe>+?i%}YNooH&%pCoxLN zcO|rtmgg+d7m2jubkmQMO+?PdRXc}5TW$}d^h2CsOc{A6Zi%6$#`jPT!Q!5vX`@8jNad@>dHr`(bYG$hvAJF>WYnOPaXL@?~+-g&b zMs#LGMksxLPFu3VC>T3{q zOz3oRLHs#o7~D|S=24+1-30OHI4{S@AG57HXgiz|;VXm7@y~r*&Jy}`om(j6v+`j} zg?-UZyXeN^wy1TIfBQNp(5`~vBmA%_gCcG&Wr8!@Wj3IKpAlF)pmPhz^VzMPt^k-MB=6|UgvXm}pVq6Hymx%9_}UXUJB457L;FMl_fQVauMY9&#EiTpEqPTZ9`e{Zd0+=Cs$kP@8+)}&IA%ceV1ip9%!&-QwH zlB2OsyXf6gw|8ab6SqtZ@8CFX)%3p7F>djN-=3Mb0C?o~$jxcJ{~f*^Z-on>YTv2z zI`0@EsqbIxN|0fWXTl46B2F->%eFDc1scBBQOdfZ>6h_XOm3%+DHV*E)o?rBDHK`D zKQd`!893mFBa?HApP!k~kT}I%_8pj6x0<&BxeuBbl6}umR|Ls_ki4@x#4QA-;`T&q zEfbk{QAHh1R3&w}eCD=nMajW6^0nAao>Zei%{(Y1Ty2rrKrnN=c^`==OBys!S^ zy#WT3W7t(q1tT>vXWaii`;l?3YAXMhg0WhAtwER1tQW%U?}dL|#|$K{BgAz(DP=0% zSo#{crKmi019@(zJB}mf)X~M^zQ?Fj93IW!M^T=I__;DFH)=Rlh0~&1&%-Le08`oJ zLN2HADY|r~gw!wllr6tR(@SC3VuCCgsE@?1s!Utibk)rX^qJi#aAR}DTX{g}yeKhA z`Uj~?za`4%`0<(YL;@m4QvBM43K_7yedW25R#a!}Q}oDIWk0)0m+s>Qp< zuP;T&G+A60r*6yrk)v*NI@1Fd608*0D+vHTC+Ys6cn86dR38BR7qjI3{y3oTInpmKLLCy(JW{0M78 zjlu|X1lt(Sg7QW|o`A}xJN-cF*Tfk4Lc;0uk^g-CB6B?0vQAHVj7`#)$bns+wT4E9 zeRb_v@02vsQ}dN&2HrpQiLtF=xRR*4;4{@fL>{HQ^QO~>m@jouM@SCuvWX@6jiZT@ zbn(xR7OJ7!03sGdSv9L-i-s%yRXVRCgMWRB<4B35WRC+OSHp|n0VE1+W zmN=q-NM8_;)w5s84VV4oueOWV9qk)hrq+Z|25=Jog+jn+iD*+$o*Q%1DEW*%G37GS ze#ws%AUX3QRGQ*}gurx~Ihx|JQTBY{sNCJQ=NS)-3~@Qw@MLRit0m9*i4)FyS}L_g zw`^~ko<5APJRj9W35 z4y3w?&634M*&BuxM`ICYi5fuG`~Xr9SU!6 zgwczgr|(_D_wL##cW3s`x!kTQSiNLCl|lenukK&Zad9sY7cH+P`COMP2Qw}C8>S8z zC$lH_3XR$_+5Q(Vy8M|-*^(X}+Bl6~;{b@YgWl9z6qc=te0!+jkL1%b;wnO4cQ*r5 zM6O*=uaRc?w^A~;lLMr29?+7jjLr+`h(Q6)bM$U%*DMH+f`+q$y{kPJW&nkHGJ^NoT6Iz=A=U^PyrCj_aLa*orYm*sP} zr2TdlLFnO=SU^1T4_!QqeB4W+y{09-TkWQzMoO2+omUq=4K?gL(aaGQOO zt2%!TO`E-VfOEu7W;9W&q~puk(@Q~67kb#hVBAkkAf3^8=x_7;_1%0vMUSH?4ec$h3!|dl5x!bpI z^V`GRUOw?xWmL5|@9faJavTH(hepuxdHef2ktWD)OY@_x*&^e{nxDP)`M;|jI)~LH zRW_%a-@SdCk&*GL6nXMqXvRNwcX{AyncXm}sOOs2;u#?Y*B>y=t5T(?-K{nfKKow} zMByv1+GhW}p?~?jKUu*4VBF@yfF)gBBO3BPJe(TpFRYFX67$;V`Xu6!DC9ynoU2xf zs@QuWp_&^zIH*1}Jlx&iU+nG25x?y)f(-C;u3x0^`un>bMCgiDtQgT~jF3xF1 z;cu;aFgwSwvY=;~Pd}s9B|1>QM#D!t%1m$)4R(Us7AoM^2u*k!U*)4-c4<((Z|_o*w?!GPAaonHEU| z^yC4jZpp&;ceg%?dcMEIsk3#qJHY2Q_oTslv&3GTMnw}9t*EFtxC+O`#U&*p`zCp@ zO)?#DX#C<3-Ty0JlUm4`mPtMe_v@_dV6BU36s<_>`QgmKTzk0h;gq+C&lZE5n_E_P z_Vy34&FGYr-oekZ*iw8O6}2>?Yl`QZP7L}sAc9^p&2xQp7A{K7Yl&}I>ufbvX6Apg zn%kEynGSm5Y2@8@u&5+Kr@LlmW)N`t2D}I?{kvQ7J`XyH(I-T3JJbTv}Rs z(swx(y)95(&9lzqv83$o?oK7_%5e1>5d#y`>+wn(lxRr>GT_vGb%^B}@!jvHm=oO` zm6WG5$bj`KG)R&7*;X55Z*wLcWg3`zcIJ<+U#2_c_nz{k6ikUcKRpz(J+*&kWJHTH z_P*zLh{m&Z)wxbWXF1y%`Ux7444Ula*|z-0!fcp`h{(d?A`i#{;%e%~h9fA+-jAHR zYfVL;W#7ca#eJ`xdATm&+!=N6lZ0QqSzDL@tWjHi)JivL#D0+^@aXFGo3t5KRdJv^ z-PV4w*EmlRNZH$SIE)sV{mOd=3inDvZ|Ics@@o=kp1Ut-V!l){Z|k8f*zG%ao@r@) zm&6>a#d90KA9wVkjCg2RI8NP4Egd2j~DhRLMPG zU*EnIA(B^LzTAgEPdE5Xd}i?wUjBPO<d%x?K(_Zxv080QXdf=P3rF9F%=jMb-LN__+-5lo8fU#gUz*}!>g9NOa0)+!D`TB+*gdUVP&A-t*5db z1XHjz2?+`cf;4S+&@i*HUHx@(sFN-p!uF=^TO7M)qGTWx27`SP_l?0ezTcs<>L=k@ zp1*tp;%%C05{uOl7w4xQi#>Nr8quQOQQ9ySmF$4i0~O@Wi!VhCN&VJ0>7hhYQc@65 zP#Y7qhCWD$|paO2Oe(r*~x*9f&9& znZPmLFxU;RMr;XX_;_%Rg`E*@SzW{lIQ&h^{*3>cV^!2rUk zvUuR~yDI<3`gB}J1a%t-;3P^-(CPPgAOOI^7}(fyJ8A^2CE~gCWn^S<&QJE4*xBFx zov3X*e3#sz?RBuBj~D>m^3}dt@VQdlM48#uTWqS|?W<#AW7}L_?$RKfzb@s~)g@l1 z_a}wC{wC$<$Ta{xg(|Z?P&f@bG+~=CiH~ zKRw-SFGkQB|1|bosJUY z#z|u%ZT5!`i?_u%u4fLfHihY$JYDoHAk@trF1PF^KR{3Q7U@@(jXM%iJ${8U@heu{ zy*h%{^VC1gF|RhL-~A!xCYlN=p;cn?`Qyj#3krv+5(4LB{BQ|iXFq^euTIoHYB}zA zQBY98+I15!OM$4uHNTQ2_j>y&A^V+qgrqy@qL-%=Gcn1@JwVqBHtyT08gWy$ob804 z?t%=15BHyc3&!IzMK*yjG$_Gfj4UjnB+#Q*fL_uNk{5}fXexp9{|Q7z7kGenY5;Qn z_h@WP4_MAFt4nRmgXa9tbHTlRqAn}`67M;p1DOqv4otyN_y+o z>)}<$7(U{{5k=rPK)d0!&GHC3&os<(df*ahgF`AovsPSlbMw2+=zX3Sd$vPELv@&o zQ;>p)(-|P~lk&g*(Kxemy$9^2L}Teum(V){7JZ6b(f8e4eMAr zYUxqqjve;ZJKt}qm4Oy~Vf>^>)x?C3g@t8rZGH@^_z;o$*us|1YzmjKAM zK3Z%6bT3hvHR35#?eq&y;2R+OieQ>lVqRQ8CcbxedQ3RgZnsmK{_+*mqE&~l{kl;( zP84TqxB<*pHjK#bpyltYouXnLPMyM!0My9n=?8!_jyL-W0aGCULC{m1-fqsw#ns1l zU8R5Ocz41Hvf-&LQ1833cB&-}UKR?NrGAGfk%TN+3aj`s@4a)sx* z4mmkFb~feZOc{w*X01IF9rF_#~2vHR(z`b~d&*`I@=Bj$@B+(h7eq&@L1P zI)^zywX8Ko*rW%H2C)5H8z~eCIN^WPyr&UcHDF!I6L{gDqng?SYLoi$bBJb+@@#JU z%el${XyN{wl%%AjzC@nape8B+QFTP!>&4=*s;X*ik)JV$ibb`-c%7TYM<5_B^cEcv z`Q^pL#w5AJ-C*sj04=breu$o$^qG$Y>{Hm`_HlLp1@dT)P}CdU2PE5f@uRNKdU0(N zHwB9M;loH^T3ge8oArnj0I_3$+Su9I&j5@N&ve~2<4qc?_sBiP41#QT0u!7Rn&s!` ze9)qw3v3QRpWCpCP`;6hilT~&)!g@YdR!F1zj_Y-P5>PG>L|F|#f0$LFhxilP=VPV zo_Oz*qyRhX2Ly$sIbe*l!1GAJ6fDt`^-bpo6C66_-7A3bfBBcbx-l#3fGV*XDbR-2 zS3bj^RpF}*ApCr%*syl#gFM}AvO|g8==rt`zmP_BNF6Xu>wz?hPm+OYlIN>xkqw4w z_|GJVtk|$$h4K4oz9yAS5{d@qKyU&_*wxzT&`fGR#Ap|d-d zO~34UkeW$^4Q~<^)W7a@WP$$Wky$a~JNXx$1tQp6>xFK%bj!gEX`;LQZ`sm(a6n1` z|4fmDHXAIW22rTu+UXuy5{ZS2Px0|j?d|O|MK+{=D46i<^Tt5jFq>Y_Z$!a!nQ`07}G-i6S3S|Vl4K5 z0xGMZ;AmlQNx?Bk1dUMCJuxrWqb)NmX}7#QpPUD1eYBE^5O!a{2c*z+G#Bo^!~y{^ z;&d}$U^vhEx?9JZXya&O) z1L#7gS~@g>nlCKHxuJVrS^4Zmw*WI^GJEAX*r$lgIy-aEygV&F{rlap#&LGC-b3oR z_YT0WF0gzEb|Ij=vVkrGz}Wrsnxw*Q{;6u3_>DNqa8UZF-&4B7{_`D?^O*?f9OxIw z#&mNE!05;RN3QV?4a0ugW@ThRa))8o)~sNd2c_orIx8N?t>t3RN3?EDO20MO3t(|r zPEHP;FmHTLuu)OL`!tHS8@pu|KpDO6U7Y*vQ0l2R0d|mx6qbsLinTqN*5oAzpq0S- z=ks&Zb`sgd#ArZye31+H`CExH4{on!V!|>Z+(H{W(?zWLgLKeNp z@7%uaqvElDt7o$X^O9BdQ&+4S6z1;E`|7l$p5V$A;`RDcXJ|riJ21W<|M>mUNTF^e z5V31SRA0XaUBxmumKsc79$UTs&1i75K8*PZU(AOOvoHJowcGP5CR|!l0SY#TKXY|` z4CETUEr~hf1KNikAR{Bg=B#?!QhnIp&dv^~VY|f%KqDL+9I!(HT@MiP7;JBS!PY^) z(wdk=d`l{I)U?VGbf)b$ZlgLWph!1BK?A4IHSrDY>r*aiJ}`hlFODppMo>wE&HfD% z5*t7wfF>Y~Q&IiaZRX{qzs8<-9D;~Js?~~HU+@fp`FKydT?gxCp{AzB!lz!bj&*;soQ@6! zu<u6L^3LOyc$A=obi<{+o0?#6lv zNSv_O1{DMVuLbafCvQb)z@H&NlCXaZATN(4)q{<3Ss9t&K%t01W?$)a@YTFZG`AS| z!akV+4~EYe!m9AkM?N<|kVs{0gF(jsKVCWu6o`Me;%Fp;1e1io { + event.waitUntil( + caches.open('linkemeup').then((cache) => { + return cache.addAll([ + '/', + '/index.html', + /* Add other URLs of assets to cache */ + ]); + }) + ); +}); + +self.addEventListener('fetch', (event) => { + event.respondWith( + caches.match(event.request).then((response) => { + return response || fetch(event.request); + }) + ); +}); \ No newline at end of file diff --git a/src/templates/footer-template.hbs b/src/templates/footer-template.hbs index d816e91..155ec8c 100644 --- a/src/templates/footer-template.hbs +++ b/src/templates/footer-template.hbs @@ -1,3 +1,16 @@

© {{{footer.copyright}}} {{currentYear}}

-
\ No newline at end of file + +{{#if enablePWA}} + +{{/if}} \ No newline at end of file diff --git a/src/templates/head-template.hbs b/src/templates/head-template.hbs index 1100cee..ac40cf9 100644 --- a/src/templates/head-template.hbs +++ b/src/templates/head-template.hbs @@ -18,8 +18,10 @@ LinkMeUp WieErWill + + \ No newline at end of file