From 3dc051aba1174bed61b5d0912586c9aed6c4fdb5 Mon Sep 17 00:00:00 2001 From: Jonas Weinz Date: Sun, 16 Oct 2022 10:23:01 +0200 Subject: [PATCH] initial pwa support --- MANIFEST.IN | 1 + build.sh | 2 +- ...bootstrap_templates-0.1.0-py3-none-any.whl | Bin 34569 -> 35648 bytes examples/01_hello_world/config.json | 4 +- examples/01_hello_world/index.html | 3 + examples/01_hello_world/manifest.json | 1 + .../01_hello_world/resources/icon-256x256.png | Bin 0 -> 18356 bytes .../01_hello_world/resources/icon-512x512.png | Bin 0 -> 18356 bytes examples/01_hello_world/resources/pwa.js | 10 ++ ...bootstrap_templates-0.1.0-py3-none-any.whl | Bin 34569 -> 35648 bytes .../01_hello_world/resources/serviceWorker.js | 32 +++++ examples/01_hello_world/resources/site.js | 2 + examples/01_hello_world/serviceWorker.js | 32 +++++ examples/01_hello_world/site.js | 2 + examples/02_image_filter/config.json | 4 +- examples/02_image_filter/index.html | 3 + examples/02_image_filter/manifest.json | 1 + .../resources/icon-256x256.png | Bin 0 -> 18356 bytes .../resources/icon-512x512.png | Bin 0 -> 18356 bytes examples/02_image_filter/resources/pwa.js | 10 ++ ...bootstrap_templates-0.1.0-py3-none-any.whl | Bin 34569 -> 35648 bytes .../resources/serviceWorker.js | 32 +++++ examples/02_image_filter/resources/site.js | 2 + examples/02_image_filter/serviceWorker.js | 32 +++++ examples/02_image_filter/site.js | 2 + pyscript_bootstrap_templates/cli_interface.py | 136 ++++++++++++++++-- pyscript_bootstrap_templates/data/icon.png | Bin 0 -> 18356 bytes 27 files changed, 297 insertions(+), 14 deletions(-) create mode 100644 MANIFEST.IN create mode 100644 examples/01_hello_world/manifest.json create mode 100644 examples/01_hello_world/resources/icon-256x256.png create mode 100644 examples/01_hello_world/resources/icon-512x512.png create mode 100644 examples/01_hello_world/resources/pwa.js create mode 100644 examples/01_hello_world/resources/serviceWorker.js create mode 100644 examples/01_hello_world/resources/site.js create mode 100644 examples/01_hello_world/serviceWorker.js create mode 100644 examples/01_hello_world/site.js create mode 100644 examples/02_image_filter/manifest.json create mode 100644 examples/02_image_filter/resources/icon-256x256.png create mode 100644 examples/02_image_filter/resources/icon-512x512.png create mode 100644 examples/02_image_filter/resources/pwa.js create mode 100644 examples/02_image_filter/resources/serviceWorker.js create mode 100644 examples/02_image_filter/resources/site.js create mode 100644 examples/02_image_filter/serviceWorker.js create mode 100644 examples/02_image_filter/site.js create mode 100644 pyscript_bootstrap_templates/data/icon.png diff --git a/MANIFEST.IN b/MANIFEST.IN new file mode 100644 index 0000000..1fc1a38 --- /dev/null +++ b/MANIFEST.IN @@ -0,0 +1 @@ +include pyscript_bootstrap_templates/data/*.png \ No newline at end of file diff --git a/build.sh b/build.sh index 0399851..f761f8c 100755 --- a/build.sh +++ b/build.sh @@ -9,5 +9,5 @@ wheel_files=( dist/*whl ) cd ./examples/ for example in *; - do pyscript_bootstrap_app update $example $example --pyscript_bootstrap_templates_wheel_url ../${wheel_files[0]} + do pyscript_bootstrap_app update $example $example --pyscript-bootstrap-templates-wheel-url ../${wheel_files[0]} done diff --git a/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl b/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl index f28ee83b7c55f05d52b497c8ab8f2cb96424e976..af6f65232f74244d3c94fe729abcb19c2c38e3d8 100644 GIT binary patch delta 6446 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 delta 5371 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 diff --git a/examples/01_hello_world/config.json b/examples/01_hello_world/config.json index 4382486..a7c4145 100644 --- a/examples/01_hello_world/config.json +++ b/examples/01_hello_world/config.json @@ -8,5 +8,7 @@ "pyscript_py_url": "https://pyscript.net/alpha/pyscript.py", "bootstrap_css_url": "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css", "bootstrap_js_url": "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js", - "pyscript_bootstrap_templates_wheel_url": "../dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl" + "pyscript_bootstrap_templates_wheel_url": "../dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl", + "pwa_bg_color": "#000000", + "pwa_theme_color": "#ffffff" } \ No newline at end of file diff --git a/examples/01_hello_world/index.html b/examples/01_hello_world/index.html index 4911d12..3b36b11 100644 --- a/examples/01_hello_world/index.html +++ b/examples/01_hello_world/index.html @@ -5,6 +5,8 @@ + + @@ -24,6 +26,7 @@ + \ No newline at end of file diff --git a/examples/01_hello_world/manifest.json b/examples/01_hello_world/manifest.json new file mode 100644 index 0000000..0160d8e --- /dev/null +++ b/examples/01_hello_world/manifest.json @@ -0,0 +1 @@ +{"name": "01_hello_world", "short_name": "01_hello_world", "start_url": "./index.html", "scope": ".", "display": "standalone", "background_color": "#000000", "theme_color": "#ffffff", "icons": [{"src": "resources/icon-512x512.png", "type": "image/png", "sizes": "512x512"}]} \ No newline at end of file diff --git a/examples/01_hello_world/resources/icon-256x256.png b/examples/01_hello_world/resources/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..c450626ae75f6faab410adbb509eaf4aa53397c0 GIT binary patch literal 18356 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 V-TBS?;Vlron?^UvuitzAe*oO8;|u@* literal 0 HcmV?d00001 diff --git a/examples/01_hello_world/resources/icon-512x512.png b/examples/01_hello_world/resources/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..c450626ae75f6faab410adbb509eaf4aa53397c0 GIT binary patch literal 18356 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 V-TBS?;Vlron?^UvuitzAe*oO8;|u@* literal 0 HcmV?d00001 diff --git a/examples/01_hello_world/resources/pwa.js b/examples/01_hello_world/resources/pwa.js new file mode 100644 index 0000000..e8ec724 --- /dev/null +++ b/examples/01_hello_world/resources/pwa.js @@ -0,0 +1,10 @@ + +if ("serviceWorker" in navigator) { + window.addEventListener("load", function () { + navigator.serviceWorker + .register("./serviceWorker.js") + .then(res => console.log("service worker registered", res)) + .catch(err => console.log("service worker not registered", err)) + }) +} + \ No newline at end of file diff --git a/examples/01_hello_world/resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl b/examples/01_hello_world/resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl index f28ee83b7c55f05d52b497c8ab8f2cb96424e976..af6f65232f74244d3c94fe729abcb19c2c38e3d8 100644 GIT binary patch delta 6446 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 delta 5371 zcmZWt1yq&I);@4(5Rf`_Nq2WBC7mMOA#i|mD5VdLgw&x^LQ+b)q@_!`1d;Aefgim8 zz4vq7cdc17Yvy_O?3uORz4ttAiHKoQh}h~%KqLYH0DuN)w?Waa#D;>NJ`QpZ*B6K% zrimUJ6a3Jh3SI`{07|(ERV{(6$dMi)Rq}k%lt5)y)~Y$pT}iutVj6{)sjb zQ8HUHEXIPp?+&2y3i0fssvPXwp#nMGc1-nGDK0(BY2f}Xu@_C zewf1omK_{NvW;NSX)YcJQt0bui6JS~OD%Nhwp6-TOBJ*?hf%Qt^XjR9+>(FJ%qc9tnw@2;5T+%r%N@K)5xb5pz^}t*Y)=RuPgFVxG?yCstij5ltKyF(U^;{s{0+fF zuVb1=O;4Q9;YS!$BD^G>1QN-v!`D#2%D@Tra`fNb2W0dc(pDToKAHZiHb|Lh)^wt^ zTG&VCa!=7rXh!Qyq{dYa<}2r!Yel3y5Zb<8`-lu`hg}OV*xi^f*oj6p_^~4r>r=SC zh_m~knRpUP8Y`3UtDUIeqK{J>W-__7Z%BXsrYC} zJQQuak_AJh3UFziyZZscZIK|HH-)cJTK?|RZSMkZ)}4Ce1;r#;X-RKkQmOHB#%K>u zp0bIhEnZXYXNn;iCAy_q2SrHyx(@KuY@IZ}r#CFPULDf}#v9arJXfSu3>FqbtPZvK zKE1>AL6wCUW2>e;pK_vbT+ymju}uAjMN2ly_!QRMx7MTvyLUesI8(bkw{s4Q5GE|? zwde@+n^|W&77&|ExbD2VI`Hi!HnHj#bJuzAp2D4qmnoNdXKu10)lNXKkdK2;=y6|v zwR`Ub(HljS5rfu_F^0ahMNjTb)*y1L{-jfQsH?hgb7nB#H)rhly&E=W6!Ji{SO zs(_sVk|*s+JRG~Qwn@+_J`8#xB4CWJKQP(b ztSeW|8YmnoLns4?ag|XXEsa~*P-dLj?R18iJXu+L8n|4&65}&0{3MNeP(Mq}uU5M(GiUy~w z&IGpvb6D+_bwu3M)&wzjMy@*dfS!MY;LM2dn48!KmHfHo6KnjItJpE2O+QJg>ke3L zrRVmdB{`UeKCZz21sLLpEDIo;NqUdZ=Fgt^d#O?M#+OHrX-ryBF=3@~9l5kl>%d|d z?xk4)G;JfX_X9~`wI!LrfP)}|3+U0`_dlf#_C7YTRx`jDhu}=PfTZ4}M1ly)yW zDlDmzoZ^5e^gD&9Q3ApidrRC6oOT(_qn%TIa)cn}8`Al==7P#j+@ldwq=PWZ&*e>d z4hc(vH7?2KCX=rurJ)gd$_@Lfq%}dtIS~h%s|In;9a-|{xfXrQXaNp_n%haQBVx_I z7&%$Kp4SNTyynfBn}u8t30{yTr&`SyQ>G)fdrNzGt&gTJ(&&^F8ql8;mNJKu5N%v% zZ8v@{P~yy%B73t}r--~-<#Ytg%?w}EKb5h;&Vx>nxi(3c7pYI(mTsuLv*u(*Y{q>a zu94ObYDy*9euDZkfe^nbc4b-0R$@MV=ybMj*C$sepqjb3C{~DZKp2G}{_uc;6$k5J zQ6N>tvG{aPa290+d@-{*v0s^qdtN6sqX+i6Zza)VLl30KIHN_qwqi; z`{oCKm)SKZ@o_`Y7SU=w4RZB$H6!a?+vq`=th-7vwfsOb)ZHF_;)qwlXX8t@;kBHeq z%+u;2ajv4V47*5B!u3>6OEs2nwbFDw&z@!8Ah}yJLF^k$BIPXmaf$#3uG*gds2IO| z+l8-bp69+qSc+fpgz)GQ#Q}{)BQxkr);-`%YZgMNuo9|mJP1(HSN`+NV5>U zoi%5LQ&zr$sug7O$|4Bz%AP$Z>a=ea(h`JI2gN){HL~|+%7wl*UM2w-Md3%DyXXnV z71L|0P|K*r#3zz+%x$Y8&eS?5JpQedudUR>xxhc<1~TsEwJ%?>*I1f5)D=g7{bW=S z@Oi=ngq7V3j4!^z)NjtxSX+HF_Rl3wgSXR;R;;!q!3eG`<&_`Fj5Ei5A?Y4ux1uw- zM<)gc{U&xRV8mSy%xI+9G{b>bF05!(3kZ2e3;y*yeZ1S~vwO}~OxJ>HzK#2~x=S@L z&^3Eq3c~lEVQ}ELb;NAM4ef&;ykbBDJZ~t`{I6o8gD6gz&C*-r(+`w)A_|TNC_+%p zGwMsN4(CJHbe|2ht(dpvZ{>8Sev$74V&!Y@bI;tQWSW%=)v(t+ zt|>psofaru>|lSH`x-6t)b>XFP2o%n$Y$QQ1&!Vksk1g*{M(Ni;VvlbyRVw%>xaY3 zV}%gLjbSwEKyqS1T(#;6mRMgMo7OLHf3^>TyIPn815SNPON#Gi$*QA|@Pwi?PK3TG z!DqG|NnLZ-bjtEKs`_An{}xESa;)0BjzOl zR+WyD;spYhEx~6c(cSEML^?8c*Wl+$)v}=s{Bcn`$hQYgbZ1+=Q5oxIzLhe^nO^Q5 z9v+2$>`FygEMd$-X(+t(Nxk-p4C{s4o;}s*#cy)f=`~WP4#MxMa^^Ov(VRu38w@cy z6f%d23vv@y3gpT7onV^j63SY>03a%%RcYs(o^%m*Oje(|ftx7LKdtQ&r^OnNKMdD5UFf9~)NPEuw zQV=VMeHb{sxL3f4OnxfV6=6=PNY~$)+jx-{;*!@*{l&nK64i z?AxkxPgu1k;u}><@;lfXB51$0&sGV-3=Laby?69S0(qzV!jc)2F|g1pfAY116X&IF zj#pPpbdar1Ixa!p`?w<*iq2ifNb{k^V{U9kG)%1awu0z)C)Y`bJzk3eZ0+6bxnP59 z?qUq+8h;;bi+#Xm)0hGGsWtJ>>|r$AKv#r%qG(5A@s(=-ZZq5O9MnHDt%|29e$EV;-+f(J ztJK1qZaS-@Ye&L6dPe-qq#WiI`d&`!1}gO2Vf`~An#3U$F{P1X8To5?I^;b^eq5pV zt1TL2m>0*VbdJRzJEa>)vm%)Vz6G!QLVNs;es}RkkuGD-e66s5_2JO1-H@G5zA9Zc ztOMS!fmoq2xe3i7N&b|23#OmHc)`V=6KqWKtoxI>QjWkg?{>Ynfr+lD#JY0eieLhl z5lzcsYX2{_>FY?J3JCYXstFDHRx#XjFA-XkSYfLnuQ zMp7Reuf9#^fH>#NWqwvIn+*4iGZGIs4@wgc=m``U-W2xKLU*)8e&_c4RQ9qqGW}yl z<}S>jd?o7QCwo+YftcUA)vs(Db-R$!ee`ea%?N!pYuP40FK&dG04*4Gf{0%HV=?** z8y8HUf-QFAUngkK7xl`hO3K!vNpoD6Bxh$0_SP!n5~d8MOwzFO0w=lBhtCkkfJ}nY z>vy%*PvmMo1{rMhCpJwiikF_29%PU06z{;kpGBr}txcf%Da0mK| zp0NypPMe71k)ZQ%{wi5uK7Q%mW438|5;Fqo6wJFDfg>tggHruy6F&-?g{ja4mxsaB zI-N`2zeT6&|L%!0?wOs+ha}%az(sS^7v5RqyGeL2e;&ce*y>Jxv5oCb=L3@?e|g_d z;uq&Vh?R=JNppTNoLBI3scnBKi}O~(d6$3+Zi+JkRf`kvD@cAe4n2sy?wXxN$!^gQ zG7)`t47(zlNMD$vnr@kClq55XS@P9io|@L1Cv+R03zH6C(9jW|?omI%KvlT)Ry#RQ z0|l1WAi0$SHJwX*h%F(`ZH7Ow;~H=DQgi5D2&pVO(03a*dCmT!{26B^$M|bm^1lgZ z{ozUd&20u9_&CUh#UVTn-~#?dPab-0h~BP}!o&025Wedlj_ZW*k4*Il3l4C7`Us;Z z#qX*?1OQ@?0RY~IjKu}hl$BP~lt~y@a7k0d1uT2{VlwRx{G_Ppvc^RVdcMhn+$nF~ z!)1ScHUeTS&g+j-Gnx#&E3R{-FwJ^LoaYdMy1+=$R=8h`l>4*b>F%CN9bTunnfp&k z6dQc!ao6y-M;brjl_bd$I2UK7W05;FrZ{d3NXtaX810xmL%%m+5+&Hrf2+Uzh9?Yo0| zxmPYKT1c5-qHDKT5?>XxRtrg{l;82nb<|bar_7SeYm3+-7Yt2%B%j1JAga-S)gLj@ zwJa>YrP-=Bg<^nnrb@`_qNN>WK#L+o7tNxa-+_ulOkhv`JwmCw-|Ke)>VY?eu6s8Q zSY*x1CJ~}WS4EMvEACs^wxvnkc`Z>F`N+ecf?Nr}Z*EqU8!FRAmIR#U{V`MuJyAx^ z=_Z5USmiiP)Qw^}^lkTPx0*NccYi`QO@YKX$Bg4e{uUqAsVi%J_MYkn*5gT#e}^H1Xs zau>WJgaj$i|NFlHrJ*(D?|$6p~!s*9sGY;GWGfcT!Nwf zb=pVLmJO+&;RE=w@%%+P^L`|8>&VN>D*yA29$EhhWDgASzgXEm4=l<5aTpr@=&-Es fA3vJIN&YzeSDgEYm1>0Me*x(th)_EGA6Nblb79%& diff --git a/examples/01_hello_world/resources/serviceWorker.js b/examples/01_hello_world/resources/serviceWorker.js new file mode 100644 index 0000000..d99a1c3 --- /dev/null +++ b/examples/01_hello_world/resources/serviceWorker.js @@ -0,0 +1,32 @@ + +const pwa_version = "202210160801" +const assets = ["/index.html", + "/main.py", + "/resources/bootstrap.css", + "/resources/bootstrap.js", + "/resources/pyscript.css", + "/resources/pyscript.js", + "/resources/pyscript.py", + "/resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl", + "/resources/pwa.js", + "/resourced/site.js", +] +self.addEventListener("install", installEvent => { + installEvent.waitUntil( + caches.open(pwa_version).then(cache => { + cache.addAll(assets).then(r => { + console.log("Cache assets downloaded"); + }).catch(err => console.log("Error caching item", err)) + console.log(`Cache ${pwa_version} opened.`); + }).catch(err => console.log("Error opening cache", err)) + ) +}) + +self.addEventListener("fetch", fetchEvent => { + fetchEvent.respondWith( + caches.match(fetchEvent.request).then(res => { + return res || fetch(fetchEvent.request) + }).catch(err => console.log("Cache fetch error: ", err)) + ) +}) + \ No newline at end of file diff --git a/examples/01_hello_world/resources/site.js b/examples/01_hello_world/resources/site.js new file mode 100644 index 0000000..b0dac65 --- /dev/null +++ b/examples/01_hello_world/resources/site.js @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/examples/01_hello_world/serviceWorker.js b/examples/01_hello_world/serviceWorker.js new file mode 100644 index 0000000..e87fec0 --- /dev/null +++ b/examples/01_hello_world/serviceWorker.js @@ -0,0 +1,32 @@ + +const pwa_version = "202210160804" +const assets = ["./index.html", + "./main.py", + "./resources/bootstrap.css", + "./resources/bootstrap.js", + "./resources/pyscript.css", + "./resources/pyscript.js", + "./resources/pyscript.py", + "./resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl", + "./resources/pwa.js", + "./site.js", +] +self.addEventListener("install", installEvent => { + installEvent.waitUntil( + caches.open(pwa_version).then(cache => { + cache.addAll(assets).then(r => { + console.log("Cache assets downloaded"); + }).catch(err => console.log("Error caching item", err)) + console.log(`Cache ${pwa_version} opened.`); + }).catch(err => console.log("Error opening cache", err)) + ) +}) + +self.addEventListener("fetch", fetchEvent => { + fetchEvent.respondWith( + caches.match(fetchEvent.request).then(res => { + return res || fetch(fetchEvent.request) + }).catch(err => console.log("Cache fetch error: ", err)) + ) +}) + \ No newline at end of file diff --git a/examples/01_hello_world/site.js b/examples/01_hello_world/site.js new file mode 100644 index 0000000..b0dac65 --- /dev/null +++ b/examples/01_hello_world/site.js @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/examples/02_image_filter/config.json b/examples/02_image_filter/config.json index a5d9a28..5e08479 100644 --- a/examples/02_image_filter/config.json +++ b/examples/02_image_filter/config.json @@ -11,5 +11,7 @@ "pyscript_py_url": "https://pyscript.net/alpha/pyscript.py", "bootstrap_css_url": "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css", "bootstrap_js_url": "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js", - "pyscript_bootstrap_templates_wheel_url": "../dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl" + "pyscript_bootstrap_templates_wheel_url": "../dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl", + "pwa_bg_color": "#000000", + "pwa_theme_color": "#ffffff" } \ No newline at end of file diff --git a/examples/02_image_filter/index.html b/examples/02_image_filter/index.html index 9a66b9d..5d365af 100644 --- a/examples/02_image_filter/index.html +++ b/examples/02_image_filter/index.html @@ -5,6 +5,8 @@ + + @@ -25,6 +27,7 @@ + \ No newline at end of file diff --git a/examples/02_image_filter/manifest.json b/examples/02_image_filter/manifest.json new file mode 100644 index 0000000..ae6249a --- /dev/null +++ b/examples/02_image_filter/manifest.json @@ -0,0 +1 @@ +{"name": "02_image_filter", "short_name": "02_image_filter", "start_url": "./index.html", "scope": ".", "display": "standalone", "background_color": "#000000", "theme_color": "#ffffff", "icons": [{"src": "resources/icon-512x512.png", "type": "image/png", "sizes": "512x512"}]} \ No newline at end of file diff --git a/examples/02_image_filter/resources/icon-256x256.png b/examples/02_image_filter/resources/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..c450626ae75f6faab410adbb509eaf4aa53397c0 GIT binary patch literal 18356 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 V-TBS?;Vlron?^UvuitzAe*oO8;|u@* literal 0 HcmV?d00001 diff --git a/examples/02_image_filter/resources/icon-512x512.png b/examples/02_image_filter/resources/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..c450626ae75f6faab410adbb509eaf4aa53397c0 GIT binary patch literal 18356 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 V-TBS?;Vlron?^UvuitzAe*oO8;|u@* literal 0 HcmV?d00001 diff --git a/examples/02_image_filter/resources/pwa.js b/examples/02_image_filter/resources/pwa.js new file mode 100644 index 0000000..e8ec724 --- /dev/null +++ b/examples/02_image_filter/resources/pwa.js @@ -0,0 +1,10 @@ + +if ("serviceWorker" in navigator) { + window.addEventListener("load", function () { + navigator.serviceWorker + .register("./serviceWorker.js") + .then(res => console.log("service worker registered", res)) + .catch(err => console.log("service worker not registered", err)) + }) +} + \ No newline at end of file diff --git a/examples/02_image_filter/resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl b/examples/02_image_filter/resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl index f28ee83b7c55f05d52b497c8ab8f2cb96424e976..af6f65232f74244d3c94fe729abcb19c2c38e3d8 100644 GIT binary patch delta 6446 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 delta 5371 zcmZWt1yq&I);@4(5Rf`_Nq2WBC7mMOA#i|mD5VdLgw&x^LQ+b)q@_!`1d;Aefgim8 zz4vq7cdc17Yvy_O?3uORz4ttAiHKoQh}h~%KqLYH0DuN)w?Waa#D;>NJ`QpZ*B6K% zrimUJ6a3Jh3SI`{07|(ERV{(6$dMi)Rq}k%lt5)y)~Y$pT}iutVj6{)sjb zQ8HUHEXIPp?+&2y3i0fssvPXwp#nMGc1-nGDK0(BY2f}Xu@_C zewf1omK_{NvW;NSX)YcJQt0bui6JS~OD%Nhwp6-TOBJ*?hf%Qt^XjR9+>(FJ%qc9tnw@2;5T+%r%N@K)5xb5pz^}t*Y)=RuPgFVxG?yCstij5ltKyF(U^;{s{0+fF zuVb1=O;4Q9;YS!$BD^G>1QN-v!`D#2%D@Tra`fNb2W0dc(pDToKAHZiHb|Lh)^wt^ zTG&VCa!=7rXh!Qyq{dYa<}2r!Yel3y5Zb<8`-lu`hg}OV*xi^f*oj6p_^~4r>r=SC zh_m~knRpUP8Y`3UtDUIeqK{J>W-__7Z%BXsrYC} zJQQuak_AJh3UFziyZZscZIK|HH-)cJTK?|RZSMkZ)}4Ce1;r#;X-RKkQmOHB#%K>u zp0bIhEnZXYXNn;iCAy_q2SrHyx(@KuY@IZ}r#CFPULDf}#v9arJXfSu3>FqbtPZvK zKE1>AL6wCUW2>e;pK_vbT+ymju}uAjMN2ly_!QRMx7MTvyLUesI8(bkw{s4Q5GE|? zwde@+n^|W&77&|ExbD2VI`Hi!HnHj#bJuzAp2D4qmnoNdXKu10)lNXKkdK2;=y6|v zwR`Ub(HljS5rfu_F^0ahMNjTb)*y1L{-jfQsH?hgb7nB#H)rhly&E=W6!Ji{SO zs(_sVk|*s+JRG~Qwn@+_J`8#xB4CWJKQP(b ztSeW|8YmnoLns4?ag|XXEsa~*P-dLj?R18iJXu+L8n|4&65}&0{3MNeP(Mq}uU5M(GiUy~w z&IGpvb6D+_bwu3M)&wzjMy@*dfS!MY;LM2dn48!KmHfHo6KnjItJpE2O+QJg>ke3L zrRVmdB{`UeKCZz21sLLpEDIo;NqUdZ=Fgt^d#O?M#+OHrX-ryBF=3@~9l5kl>%d|d z?xk4)G;JfX_X9~`wI!LrfP)}|3+U0`_dlf#_C7YTRx`jDhu}=PfTZ4}M1ly)yW zDlDmzoZ^5e^gD&9Q3ApidrRC6oOT(_qn%TIa)cn}8`Al==7P#j+@ldwq=PWZ&*e>d z4hc(vH7?2KCX=rurJ)gd$_@Lfq%}dtIS~h%s|In;9a-|{xfXrQXaNp_n%haQBVx_I z7&%$Kp4SNTyynfBn}u8t30{yTr&`SyQ>G)fdrNzGt&gTJ(&&^F8ql8;mNJKu5N%v% zZ8v@{P~yy%B73t}r--~-<#Ytg%?w}EKb5h;&Vx>nxi(3c7pYI(mTsuLv*u(*Y{q>a zu94ObYDy*9euDZkfe^nbc4b-0R$@MV=ybMj*C$sepqjb3C{~DZKp2G}{_uc;6$k5J zQ6N>tvG{aPa290+d@-{*v0s^qdtN6sqX+i6Zza)VLl30KIHN_qwqi; z`{oCKm)SKZ@o_`Y7SU=w4RZB$H6!a?+vq`=th-7vwfsOb)ZHF_;)qwlXX8t@;kBHeq z%+u;2ajv4V47*5B!u3>6OEs2nwbFDw&z@!8Ah}yJLF^k$BIPXmaf$#3uG*gds2IO| z+l8-bp69+qSc+fpgz)GQ#Q}{)BQxkr);-`%YZgMNuo9|mJP1(HSN`+NV5>U zoi%5LQ&zr$sug7O$|4Bz%AP$Z>a=ea(h`JI2gN){HL~|+%7wl*UM2w-Md3%DyXXnV z71L|0P|K*r#3zz+%x$Y8&eS?5JpQedudUR>xxhc<1~TsEwJ%?>*I1f5)D=g7{bW=S z@Oi=ngq7V3j4!^z)NjtxSX+HF_Rl3wgSXR;R;;!q!3eG`<&_`Fj5Ei5A?Y4ux1uw- zM<)gc{U&xRV8mSy%xI+9G{b>bF05!(3kZ2e3;y*yeZ1S~vwO}~OxJ>HzK#2~x=S@L z&^3Eq3c~lEVQ}ELb;NAM4ef&;ykbBDJZ~t`{I6o8gD6gz&C*-r(+`w)A_|TNC_+%p zGwMsN4(CJHbe|2ht(dpvZ{>8Sev$74V&!Y@bI;tQWSW%=)v(t+ zt|>psofaru>|lSH`x-6t)b>XFP2o%n$Y$QQ1&!Vksk1g*{M(Ni;VvlbyRVw%>xaY3 zV}%gLjbSwEKyqS1T(#;6mRMgMo7OLHf3^>TyIPn815SNPON#Gi$*QA|@Pwi?PK3TG z!DqG|NnLZ-bjtEKs`_An{}xESa;)0BjzOl zR+WyD;spYhEx~6c(cSEML^?8c*Wl+$)v}=s{Bcn`$hQYgbZ1+=Q5oxIzLhe^nO^Q5 z9v+2$>`FygEMd$-X(+t(Nxk-p4C{s4o;}s*#cy)f=`~WP4#MxMa^^Ov(VRu38w@cy z6f%d23vv@y3gpT7onV^j63SY>03a%%RcYs(o^%m*Oje(|ftx7LKdtQ&r^OnNKMdD5UFf9~)NPEuw zQV=VMeHb{sxL3f4OnxfV6=6=PNY~$)+jx-{;*!@*{l&nK64i z?AxkxPgu1k;u}><@;lfXB51$0&sGV-3=Laby?69S0(qzV!jc)2F|g1pfAY116X&IF zj#pPpbdar1Ixa!p`?w<*iq2ifNb{k^V{U9kG)%1awu0z)C)Y`bJzk3eZ0+6bxnP59 z?qUq+8h;;bi+#Xm)0hGGsWtJ>>|r$AKv#r%qG(5A@s(=-ZZq5O9MnHDt%|29e$EV;-+f(J ztJK1qZaS-@Ye&L6dPe-qq#WiI`d&`!1}gO2Vf`~An#3U$F{P1X8To5?I^;b^eq5pV zt1TL2m>0*VbdJRzJEa>)vm%)Vz6G!QLVNs;es}RkkuGD-e66s5_2JO1-H@G5zA9Zc ztOMS!fmoq2xe3i7N&b|23#OmHc)`V=6KqWKtoxI>QjWkg?{>Ynfr+lD#JY0eieLhl z5lzcsYX2{_>FY?J3JCYXstFDHRx#XjFA-XkSYfLnuQ zMp7Reuf9#^fH>#NWqwvIn+*4iGZGIs4@wgc=m``U-W2xKLU*)8e&_c4RQ9qqGW}yl z<}S>jd?o7QCwo+YftcUA)vs(Db-R$!ee`ea%?N!pYuP40FK&dG04*4Gf{0%HV=?** z8y8HUf-QFAUngkK7xl`hO3K!vNpoD6Bxh$0_SP!n5~d8MOwzFO0w=lBhtCkkfJ}nY z>vy%*PvmMo1{rMhCpJwiikF_29%PU06z{;kpGBr}txcf%Da0mK| zp0NypPMe71k)ZQ%{wi5uK7Q%mW438|5;Fqo6wJFDfg>tggHruy6F&-?g{ja4mxsaB zI-N`2zeT6&|L%!0?wOs+ha}%az(sS^7v5RqyGeL2e;&ce*y>Jxv5oCb=L3@?e|g_d z;uq&Vh?R=JNppTNoLBI3scnBKi}O~(d6$3+Zi+JkRf`kvD@cAe4n2sy?wXxN$!^gQ zG7)`t47(zlNMD$vnr@kClq55XS@P9io|@L1Cv+R03zH6C(9jW|?omI%KvlT)Ry#RQ z0|l1WAi0$SHJwX*h%F(`ZH7Ow;~H=DQgi5D2&pVO(03a*dCmT!{26B^$M|bm^1lgZ z{ozUd&20u9_&CUh#UVTn-~#?dPab-0h~BP}!o&025Wedlj_ZW*k4*Il3l4C7`Us;Z z#qX*?1OQ@?0RY~IjKu}hl$BP~lt~y@a7k0d1uT2{VlwRx{G_Ppvc^RVdcMhn+$nF~ z!)1ScHUeTS&g+j-Gnx#&E3R{-FwJ^LoaYdMy1+=$R=8h`l>4*b>F%CN9bTunnfp&k z6dQc!ao6y-M;brjl_bd$I2UK7W05;FrZ{d3NXtaX810xmL%%m+5+&Hrf2+Uzh9?Yo0| zxmPYKT1c5-qHDKT5?>XxRtrg{l;82nb<|bar_7SeYm3+-7Yt2%B%j1JAga-S)gLj@ zwJa>YrP-=Bg<^nnrb@`_qNN>WK#L+o7tNxa-+_ulOkhv`JwmCw-|Ke)>VY?eu6s8Q zSY*x1CJ~}WS4EMvEACs^wxvnkc`Z>F`N+ecf?Nr}Z*EqU8!FRAmIR#U{V`MuJyAx^ z=_Z5USmiiP)Qw^}^lkTPx0*NccYi`QO@YKX$Bg4e{uUqAsVi%J_MYkn*5gT#e}^H1Xs zau>WJgaj$i|NFlHrJ*(D?|$6p~!s*9sGY;GWGfcT!Nwf zb=pVLmJO+&;RE=w@%%+P^L`|8>&VN>D*yA29$EhhWDgASzgXEm4=l<5aTpr@=&-Es fA3vJIN&YzeSDgEYm1>0Me*x(th)_EGA6Nblb79%& diff --git a/examples/02_image_filter/resources/serviceWorker.js b/examples/02_image_filter/resources/serviceWorker.js new file mode 100644 index 0000000..d99a1c3 --- /dev/null +++ b/examples/02_image_filter/resources/serviceWorker.js @@ -0,0 +1,32 @@ + +const pwa_version = "202210160801" +const assets = ["/index.html", + "/main.py", + "/resources/bootstrap.css", + "/resources/bootstrap.js", + "/resources/pyscript.css", + "/resources/pyscript.js", + "/resources/pyscript.py", + "/resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl", + "/resources/pwa.js", + "/resourced/site.js", +] +self.addEventListener("install", installEvent => { + installEvent.waitUntil( + caches.open(pwa_version).then(cache => { + cache.addAll(assets).then(r => { + console.log("Cache assets downloaded"); + }).catch(err => console.log("Error caching item", err)) + console.log(`Cache ${pwa_version} opened.`); + }).catch(err => console.log("Error opening cache", err)) + ) +}) + +self.addEventListener("fetch", fetchEvent => { + fetchEvent.respondWith( + caches.match(fetchEvent.request).then(res => { + return res || fetch(fetchEvent.request) + }).catch(err => console.log("Cache fetch error: ", err)) + ) +}) + \ No newline at end of file diff --git a/examples/02_image_filter/resources/site.js b/examples/02_image_filter/resources/site.js new file mode 100644 index 0000000..b0dac65 --- /dev/null +++ b/examples/02_image_filter/resources/site.js @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/examples/02_image_filter/serviceWorker.js b/examples/02_image_filter/serviceWorker.js new file mode 100644 index 0000000..e87fec0 --- /dev/null +++ b/examples/02_image_filter/serviceWorker.js @@ -0,0 +1,32 @@ + +const pwa_version = "202210160804" +const assets = ["./index.html", + "./main.py", + "./resources/bootstrap.css", + "./resources/bootstrap.js", + "./resources/pyscript.css", + "./resources/pyscript.js", + "./resources/pyscript.py", + "./resources/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl", + "./resources/pwa.js", + "./site.js", +] +self.addEventListener("install", installEvent => { + installEvent.waitUntil( + caches.open(pwa_version).then(cache => { + cache.addAll(assets).then(r => { + console.log("Cache assets downloaded"); + }).catch(err => console.log("Error caching item", err)) + console.log(`Cache ${pwa_version} opened.`); + }).catch(err => console.log("Error opening cache", err)) + ) +}) + +self.addEventListener("fetch", fetchEvent => { + fetchEvent.respondWith( + caches.match(fetchEvent.request).then(res => { + return res || fetch(fetchEvent.request) + }).catch(err => console.log("Cache fetch error: ", err)) + ) +}) + \ No newline at end of file diff --git a/examples/02_image_filter/site.js b/examples/02_image_filter/site.js new file mode 100644 index 0000000..b0dac65 --- /dev/null +++ b/examples/02_image_filter/site.js @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/pyscript_bootstrap_templates/cli_interface.py b/pyscript_bootstrap_templates/cli_interface.py index 9a9b743..4218925 100644 --- a/pyscript_bootstrap_templates/cli_interface.py +++ b/pyscript_bootstrap_templates/cli_interface.py @@ -8,7 +8,8 @@ from numpy import isin import requests import json import shutil - +import datetime as dt +import pkg_resources def download_file(url: str, path: pathlib.Path): if pathlib.Path(url).exists(): @@ -18,6 +19,100 @@ def download_file(url: str, path: pathlib.Path): path.write_bytes(response.content) +def create_pwa_manifest(root_folder: pathlib.Path, **kwargs): + """ + creating the PWA's manifest file + """ + + #TODO: make icon configurable + + manifest_dict = { + "name": kwargs['title'], + "short_name": kwargs['title'], + "start_url": "./index.html", + "scope": ".", + "display": "standalone", + "background_color": kwargs['pwa_bg_color'], + "theme_color": kwargs['pwa_theme_color'], + "icons": [ + { + "src": "resources/icon-512x512.png", + "type": "image/png", + "sizes": "512x512" + } + ] + } + + with open(root_folder / "manifest.json", "w") as f: + json.dump(manifest_dict, f) + + # create dummy icon TODO: making this configurable + + default_icon_path = pkg_resources.resource_filename('pyscript_bootstrap_templates', 'data/icon.png') + download_file(str(default_icon_path), root_folder / "resources" / "icon-512x512.png") + +def create_pwa_service_worker(root_folder: pathlib.Path, **kwargs): + version = dt.datetime.utcnow().strftime("%Y%m%d%H%M") + assets = [ + *[f'"./{p}",' for p in kwargs['paths']], + '"./index.html",', + '"./main.py",', + '"./resources/bootstrap.css",', + '"./resources/bootstrap.js",', + '"./resources/pyscript.css",', + '"./resources/pyscript.js",', + '"./resources/pyscript.py",', + f'"./resources/{kwargs["pyscript_bootstrap_templates_wheel_url"].split("/")[-1]}",', # FIXME: not completely os independent + '"./resources/pwa.js",', + '"./site.js",' + ] + + assets_str = "[" + "\n ".join(assets) + "\n]" + + service_worker_js = f""" +const pwa_version = "{version}" +const assets = {assets_str} +self.addEventListener("install", installEvent => {{ + installEvent.waitUntil( + caches.open(pwa_version).then(cache => {{ + cache.addAll(assets).then(r => {{ + console.log("Cache assets downloaded"); + }}).catch(err => console.log("Error caching item", err)) + console.log(`Cache ${{pwa_version}} opened.`); + }}).catch(err => console.log("Error opening cache", err)) + ) +}}) + +self.addEventListener("fetch", fetchEvent => {{ + fetchEvent.respondWith( + caches.match(fetchEvent.request).then(res => {{ + return res || fetch(fetchEvent.request) + }}).catch(err => console.log("Cache fetch error: ", err)) + ) +}}) + """ + + pwa_js = """ +if ("serviceWorker" in navigator) { + window.addEventListener("load", function () { + navigator.serviceWorker + .register("./serviceWorker.js") + .then(res => console.log("service worker registered", res)) + .catch(err => console.log("service worker not registered", err)) + }) +} + """ + + site_js = """ + """ + + # write js files: + (root_folder / "serviceWorker.js").write_text(service_worker_js, encoding="utf-8") + (root_folder / "resources" / "pwa.js").write_text(pwa_js, encoding="utf-8") + (root_folder / "site.js").write_text(site_js, encoding="utf-8") + + + def generate_project_files(root_folder: pathlib.Path, title: str, packages: List[str], @@ -27,7 +122,8 @@ def generate_project_files(root_folder: pathlib.Path, pyscript_py_url: str = "https://pyscript.net/alpha/pyscript.py", bootstrap_css_url: str = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css", bootstrap_js_url: str = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js", - pyscript_bootstrap_templates_wheel_url: str = "https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates/raw/branch/main/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl"): + pyscript_bootstrap_templates_wheel_url: str = "https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates/raw/branch/main/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl", + **_): pyenv = f"- ./resources/{pyscript_bootstrap_templates_wheel_url.split('/')[-1]}" for package in packages: @@ -47,6 +143,8 @@ def generate_project_files(root_folder: pathlib.Path, + + @@ -64,6 +162,7 @@ def generate_project_files(root_folder: pathlib.Path, + """ @@ -107,6 +206,8 @@ btn.onclick = lambda _: bHTML.AlertSuccess( # only create if not existing: if not main_py.exists(): main_py.write_text(py, encoding="utf-8") + + def create_project(**kwargs): @@ -118,13 +219,16 @@ def create_project(**kwargs): root_folder.mkdir(parents=True, exist_ok=True) # create initial config.json + + generate_project_files(**kwargs) + create_pwa_manifest(**kwargs) + create_pwa_service_worker(**kwargs) kwargs['root_folder'] = str(root_folder) with open(root_folder / "config.json", 'w') as f: json.dump(kwargs, f, indent=4) - - generate_project_files(**kwargs) + def update_project(**kwargs): @@ -147,6 +251,8 @@ def update_project(**kwargs): config[arg] = val generate_project_files(**config) + create_pwa_manifest(**kwargs) + create_pwa_service_worker(**kwargs) config['root_folder'] = str(root_folder) @@ -168,18 +274,22 @@ def main(): "--packages", type=str, nargs="+", help="the packages to include in the new project") argument_parser.add_argument("--paths", type=str, nargs="+", help="additional local python files to include in the new project") - argument_parser.add_argument("--pyscript_css_url", type=str, + argument_parser.add_argument("--pyscript-css-url", type=str, help="the url of the pyscript css file", default="https://pyscript.net/alpha/pyscript.css") - argument_parser.add_argument("--pyscript_js_url", type=str, + argument_parser.add_argument("--pyscript-js-url", type=str, help="the url of the pyscript js file", default="https://pyscript.net/alpha/pyscript.min.js") - argument_parser.add_argument("--pyscript_py_url", type=str, + argument_parser.add_argument("--pyscript-py-url", type=str, help="the url of the pyscript py file", default="https://pyscript.net/alpha/pyscript.py") - argument_parser.add_argument("--bootstrap_css_url", type=str, + argument_parser.add_argument("--bootstrap-css-url", type=str, help="the url of the bootstrap css file", default="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css") - argument_parser.add_argument("--bootstrap_js_url", type=str, + argument_parser.add_argument("--bootstrap-js-url", type=str, help="the url of the bootstrap js file", default="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js") - argument_parser.add_argument("--pyscript_bootstrap_templates_wheel_url", type=str, + argument_parser.add_argument("--pyscript-bootstrap-templates-wheel-url", type=str, help="the url of the pyscript bootstrap templates wheel file", default="https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates/raw/branch/main/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl") + argument_parser.add_argument("--pwa-bg-color", type=str, help="background color for pwa configuration", default="#000000") + argument_parser.add_argument("--pwa-theme-color", type=str, help="theme color for pwa configuration", default="#ffffff") + + args = argument_parser.parse_args() @@ -193,10 +303,14 @@ def main(): 'pyscript_py_url': args.pyscript_py_url, 'bootstrap_css_url': args.bootstrap_css_url, 'bootstrap_js_url': args.bootstrap_js_url, - 'pyscript_bootstrap_templates_wheel_url': args.pyscript_bootstrap_templates_wheel_url + 'pyscript_bootstrap_templates_wheel_url': args.pyscript_bootstrap_templates_wheel_url, + 'pwa_bg_color': args.pwa_bg_color, + 'pwa_theme_color': args.pwa_theme_color } + + if args.command == "create": create_project(**config) elif args.command == "update": diff --git a/pyscript_bootstrap_templates/data/icon.png b/pyscript_bootstrap_templates/data/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c450626ae75f6faab410adbb509eaf4aa53397c0 GIT binary patch literal 18356 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 V-TBS?;Vlron?^UvuitzAe*oO8;|u@* literal 0 HcmV?d00001