From b573262b59e01251e9f67e8e75ce25b7e231e65d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 17 Nov 2022 10:00:23 +0100 Subject: [PATCH] add @angular/pwa refs #445 --- angular.json | 12 ++++-- ngsw-config.json | 30 +++++++++++++++ package-lock.json | 29 ++++++++++++++- package.json | 3 +- src/app/app.module.ts | 10 ++++- src/assets/icons/icon-128x128.png | Bin 0 -> 1253 bytes src/assets/icons/icon-144x144.png | Bin 0 -> 1394 bytes src/assets/icons/icon-152x152.png | Bin 0 -> 1427 bytes src/assets/icons/icon-192x192.png | Bin 0 -> 1790 bytes src/assets/icons/icon-384x384.png | Bin 0 -> 3557 bytes src/assets/icons/icon-512x512.png | Bin 0 -> 5008 bytes src/assets/icons/icon-72x72.png | Bin 0 -> 792 bytes src/assets/icons/icon-96x96.png | Bin 0 -> 958 bytes src/index.html | 60 ++++++++++-------------------- src/manifest.webmanifest | 59 +++++++++++++++++++++++++++++ 15 files changed, 155 insertions(+), 48 deletions(-) create mode 100644 ngsw-config.json create mode 100644 src/assets/icons/icon-128x128.png create mode 100644 src/assets/icons/icon-144x144.png create mode 100644 src/assets/icons/icon-152x152.png create mode 100644 src/assets/icons/icon-192x192.png create mode 100644 src/assets/icons/icon-384x384.png create mode 100644 src/assets/icons/icon-512x512.png create mode 100644 src/assets/icons/icon-72x72.png create mode 100644 src/assets/icons/icon-96x96.png create mode 100644 src/manifest.webmanifest diff --git a/angular.json b/angular.json index 234f2a317..a5fea2de6 100644 --- a/angular.json +++ b/angular.json @@ -35,7 +35,8 @@ "glob": "**/*.png", "input": "src/", "output": "/" - } + }, + "src/manifest.webmanifest" ], "styles": [ "src/styles.scss", @@ -75,7 +76,9 @@ "buildOptimizer": false, "sourceMap": true, "optimization": false, - "namedChunks": true + "namedChunks": true, + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json" }, "configurations": { "production": { @@ -105,7 +108,7 @@ "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { - "browserTarget": "ngHyd:build", + "browserTarget": "ngHyd:build" }, "configurations": { "production": { @@ -136,7 +139,8 @@ "src/favicon.ico", "src/**/*.json", "src/**/*.md", - "src/**/*.png" + "src/**/*.png", + "src/manifest.webmanifest" ] } } diff --git a/ngsw-config.json b/ngsw-config.json new file mode 100644 index 000000000..f8bf2102e --- /dev/null +++ b/ngsw-config.json @@ -0,0 +1,30 @@ +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": [ + "/favicon.ico", + "/index.html", + "/manifest.webmanifest", + "/*.css", + "/*.js" + ] + } + }, + { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/assets/**", + "/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)" + ] + } + } + ] +} diff --git a/package-lock.json b/package-lock.json index 8d29777e1..597641a64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@angular/platform-browser": "^14.0.4", "@angular/platform-browser-dynamic": "^14.0.4", "@angular/router": "^14.0.4", + "@angular/service-worker": "^14.0.4", "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", @@ -59,7 +60,7 @@ }, "devDependencies": { "@angular-devkit/core": "^14.0.4", - "@angular-eslint/eslint-plugin": "^14.0.0", + "@angular-eslint/eslint-plugin": "^14.0.4", "@angular/cli": "^14.0.4", "@angular/compiler-cli": "^14.0.4", "@angular/language-service": "^14.0.4", @@ -927,6 +928,24 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/service-worker": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-14.2.11.tgz", + "integrity": "sha512-RIRhkSxjah2f4sFDduPFGS/9rXZADYPYLVO9zkOHiX9IlCzFwqOZnL9UkMrlKC1AoGr6seXkGHHtC+7gOiszoQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "bin": { + "ngsw-config": "ngsw-config.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.2.11", + "@angular/core": "14.2.11" + } + }, "node_modules/@assemblyscript/loader": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", @@ -23295,6 +23314,14 @@ "tslib": "^2.3.0" } }, + "@angular/service-worker": { + "version": "14.2.11", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-14.2.11.tgz", + "integrity": "sha512-RIRhkSxjah2f4sFDduPFGS/9rXZADYPYLVO9zkOHiX9IlCzFwqOZnL9UkMrlKC1AoGr6seXkGHHtC+7gOiszoQ==", + "requires": { + "tslib": "^2.3.0" + } + }, "@assemblyscript/loader": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", diff --git a/package.json b/package.json index bf035e0b3..5abbd69ae 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@angular/platform-browser": "^14.0.4", "@angular/platform-browser-dynamic": "^14.0.4", "@angular/router": "^14.0.4", + "@angular/service-worker": "^14.0.4", "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", @@ -85,7 +86,7 @@ }, "devDependencies": { "@angular-devkit/core": "^14.0.4", - "@angular-eslint/eslint-plugin": "^14.0.0", + "@angular-eslint/eslint-plugin": "^14.0.4", "@angular/cli": "^14.0.4", "@angular/compiler-cli": "^14.0.4", "@angular/language-service": "^14.0.4", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c39a646e4..6a0be9102 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -123,6 +123,8 @@ import { DialogConfirmLoadSessionURLComponent } from "./components/dialog-confir import { StructureFieldsetContainerComponent } from "./components/structure-fieldset-container/structure-fieldset-container.component"; import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-container/basin-fieldset-container.component"; import { PrebarrageService } from "./services/prebarrage.service"; +import { ServiceWorkerModule } from '@angular/service-worker'; +import { environment } from '../environments/environment'; const appRoutes: Routes = [ { path: "list/search", component: CalculatorListComponent }, @@ -187,7 +189,13 @@ const appRoutes: Routes = [ enableTracing: false, relativeLinkResolution: 'legacy' }), - TableModule + TableModule, + ServiceWorkerModule.register('ngsw-worker.js', { + enabled: environment.production, + // Register the ServiceWorker as soon as the application is stable + // or after 30 seconds (whichever comes first). + registrationStrategy: 'registerWhenStable:30000' + }) ], declarations: [ AppComponent, diff --git a/src/assets/icons/icon-128x128.png b/src/assets/icons/icon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9241f0be40661db1eed29384231e76d33b6e7c GIT binary patch literal 1253 zcmV<B1RDE^P)<h;3K|Lk000e1NJLTq004jh004jp0{{R3^x%>C00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#R8UM*MNDaN$N(?b05IDCG1mYv%m6RW1~u3KGtmGr z)c`Qj05H@5G1vex-2gG&05Sjn|HA+;>W7}%C{ggJx%=nr_R-qsQgh#Rj_Gxf@wLO% zPH*a#s-Rh6fB*mh4s=pZQvmBRsYJy17_o~a(q!H`#xchL000SaNLh0L00)l%00)l& zd2k#i000C4Nkl<Zc-rlo3zDKR6h%cO1W-O91i}69bK0?0pn1uC66l&K?gluOzB%UC zhr^ydd-m+vv*+JVe3t1ie*Pr$yetD5|H{{op~&+)z*mA~Ylbwr<d2l!iINTf@JW`x zQoa+Nwy9l|4^xgJj~mo3w*ahL$?w|P0amNzyLL{16)HKZ9RlFBlGECO0KO{uvvxSZ zR~^E5VeN89j42)Yypri$>8EL$(w!{vTD#Ez6h&Vm;Z@RJyJ5Pb=t?kfC0(@}L=|6A zC;?{4bI!=^4sa_Okxqbw@%_I8P!z%|z=;8HeE_r!fY3el836hLpcw$}37N77pePIu z0L(@lpm_o`H~=sW1p0kbywbw}fCf+p-6ix)=MzBk=HMf!i~;~4<VfflR7TOkn+it* z0Lw@sKLr>-H3n#XX#h5n9s__fIwQZuJPGk+1pOlOB*c>uv^u-+B*c;tv>=H%64II_ zBM3lp=3rHEWE4OEz>=hXe^qg06hQ!I#sGAA*)e1!u|+9ELMAVJhK#WNL5fRA-?wHB zE+cGn5aSZM-T_)%M&OYiE}_4hQ-R9}+?iZZ3Du9?aSh7|1c=a;ka_?pbY&EP03kRB zo9FpJ1Ij1^0TNI`<_Tax8A)_^iVc8%osbBP$tVN?j+lh1_YqBn$p}5CNU@cWdIKnI zWdt8mKoaVPhg2OTBlxgLAQCb|fF6<&d_<E064K*iI*rH(29Ur2T*m+{Afo^V2!Y** z8UqMmn-;+UiCaST^rW<Q%SgfiC-(p}^(2jZn}#1(9<l8hm3G0l$i5`e7=T`~EwY*D zT7WSNJwz=@Gz!ox)Bv$0F$J7{DS(9bqjb7u9-0?{Di~3VJT$*KsyP6+MIM?p(O>}T zib!ph5$D<@wH=CS^3qCJWyHBNiEVSRqHoP^HW{&AI@lznXaHrKiL5)T3q1gx?cT7l z$cP0H(GoH?fR-MDfCUhe64KV2Q$fopV*yM|^j>pLD){5-_D0G`vH(t`gp?gXkunNd z07ptfo$K<NTp97MZ&T`I-nal-N=Cfr1TirOwe$L3P%9(m9lDs8Q00C<a3f|S^Y%QO zUkNEUfFf2#OaM76p$>UL(aa7(zyuhW$Xs7h2tePy(toxbVclW-yS1Lo!^|@P|54BB z;t@a|K1m`x0Ysm^qlrTw0NIk~Olh<fAXxgM>liHp@bRe4-o_QW$7|yn-D9<p?w;QV z$EoB21pXhm5^Y?sdte*a?B2|-SpWd5zV!at#+AD_gCK1H!4{9J$8Fr8d-gVN(mh)n zx9Q&8o6|8swEaI?d{2n&x<|Be%kIszG0VBzUhi%ErT=i*vuDqq|0sU|6H~89F!@8? P00000NkvXXu0mjfX0IV2 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-144x144.png b/src/assets/icons/icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5f8c16389c261b3291ef34a9ef8b2222f76d69 GIT binary patch literal 1394 zcmV-&1&#WNP)<h;3K|Lk000e1NJLTq0058x0058(0{{R3(3ld600004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#S5Qn;MNDaN$N(_Y04&%5Fw_7r%m6RZ1vJ?JG1&ky z)c`Qm05I49G1LGt-2gGe059DDG5`Pn?3%64E>-4njObBw`{(S}RdwSpSM|!&_}=8- zBu@0X#@b+gK;5I&0000EbW%=J0PQ0&M8x(NsEw~<(cU)swx9q2010qNS#tmY2!Q|q z2!R10?Pm-C00fFjL_t(|+U=W*a;q>5M1f%57z`milK=nC8``FU7Ta25pmT@)f-{=c zA}fmHoH}*t)TvXaPM!K6<;BeZJ2YX+ih^^VT>b=(pA@6`C^rfZrny8xQM`dhrZ_y% zIC=3c{uYZ5F;1KnQ}LPhw)lsQ3kA@=7XPxb252vfziq4q+QH(UghmSVR2FY%<GhfI zE3}2h7i>%ivTyN48$&>&#l4MfJX2e7y=++AqtHBc7o4PZ7FXMNs-Y|^PL!#|!!#?% z5@jhkT?Q8SS%Ii2%O>E6AdCA^fvGN^syQa|m&FeXRQ(9lb661xD1~{h<%e!CP(rH^ z4AgxBbubVu11=~}TYjlRfl^w(qd@l;kU)Wm-4F5%WocR>Vw>d{kaz>3B_hTUmWjoi z2MtFmP=tr#OISF%M4%Y`YP^MoBO?N(2BG-U&3;gW$=J<-I{Uf!9LmfKgmpf3FbYjV z(WLXq6NphL8kC4U59KDIXiy?D5L;0oARJvXP-GN}a5!dUpcoIuroqE8q0iJrp2x&F z0uRTC40ORmaj5Wcq`w(GI27*%zr&qRe=vq{C|(PGgF7F1=m%iW_v7}XM@s~}6f-as z>k+6%O9TKVU?>hFPymLb3jjq}D2mU8mB7N00YEV}DYl<L6*f600FVzAsC%vSIw%~G z)zt+G#rg$QL*bYLKp_%}&G*tXXpqi_mR3k8iuV>4dNV=`P~C{u&U^j^R3Vciw9#Yq zP`pp~)OVmn5Ku%9#p@L4Mh{090*c86YUZ2#h8&Iz0!qoDSkHlKayUj1kWU_^hdEF{ zepX{EeNVr1o%a0X#}`2jM{J)TQlHQ5PatyVgTD<CL$Uw;^HfLdeDJ4*oED1pZ=jl3 zA`pl{&u5v0tr$`z<3Q(8g<}Q+#Wo703daNl@@YFooq9{Ts2I`e64K31E-I3-$ACIJ zxhPM@YYD2dF`g+NuN?{`?8K1l@!FQ9r4qqF$@-pGmB@vGB3&rnuQT0d>U81AV4zr6 zpsVWk<Dm=31P1aoq1Y>rQKm1n-bM^9Cu6<%onO3;5t?vJVW3bGih~-c(uAYIIgvUP zh3<Z+Q+K|>-A=9y#j6hJq3(Qx>lmgA#a?@1HMR9Zi41@uRnOP@lP{qvk!t`Ht0u)k z4^*ipM`i$&DhebhM{%7Z93ulDUok1R6rhJ<ax}R_^W>q}lg<Wbw!W<!&lZxgS6X`U zj#0?N(deX6J}C|~ph`X#8J+3nvQQM%OV3W)`9?rYHYv7LpogqPt`X2Q8HaWv`YmiV zQLy6KYI2jZ!7<#gzGs^Onci3X`6fV-W3Du?4wS4rVGd)vKy3Y$cNp0Na_t=FUzjDJ z)UhQ$vj7x1Hl=m<#$H}>cd!D8d5(Rl-MxdCvFujhq|SDdyL%@u)7@?LGYU=t0U2l$ zFB9FpWS;&0gSX)B{aQ=%Imt9Y`~Q>k$FQ_-YZ2T%^YT&uy`8%I5HG9TeUO*s?mo=R zGIt;7<z;st>E%Ut^X%gMC3(Jc>eQ)Ir%oNBf5;sefixnja{vGU07*qoM6N<$f>q^o A1ONa4 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-152x152.png b/src/assets/icons/icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..34a1a8d645872c776c9425de45c3fcfba12c271e GIT binary patch literal 1427 zcmV;E1#J3>P)<h;3K|Lk000e1NJLTq005W(005W>0{{R3FC5Sl00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#S5Qn;MNDaN)BrNc058)3FxCJt%K$IW1~u3KFxCJt z*8nrs05IMFFxCJu+yF7w05QV=FWmq!|NsBlCs6RIx%%hq)l6;YNo@Dg+Uk;~=yZ<p zx5esUf81+^h4qx%0000FbW%=J03+<sjKuj?q8G8=GeU66B6IQp000SaNLh0L00{a3 z00{a4jl()K000E4Nkl<Zc-rlpi*lnd3`G;bV3KrsnP>X{-?>fGCXfYNSFwSa_5FdK zVWbmbiyjU>K0ZD^K0ZD^KL2TsQY8DMN~18(vn<;gTO#sXvhT>_UZ`aLlk6vfOgE>x z$T-hm!ES8PrsW=;^Kr6C!eqm8&oyA1v_kq*?gp^0oQ|86yBTb~R+yAK1#Fd8crAA# znB!KMDR(-UvsRcdcL>ZyD=d{e3TC$zlI3!r<a*6W38K__xlhuz88u<#xZKBSilWZw z;kN>%+{YP;V#uJdT7g#Xqm;#0N{kF{1!}pE)7`+j3=Yr=A6bs)`+*fjoG~J)&x^s8 z_jj;<cVOxcrZ`|!cU%};pT$qE3^1xVQU+N23)V8g$kxEQn&Ocf2P50!41*0%u)!gi zV7lU-5;hqb43&Ofjlp2ahGeklod<?XR?vTuIKM{E^p5<BgQ+Q)a^%;q;gBg;rex`Z zS;~|vQ?kHR7Bl6_lPoZgg-p5fBnyBEzAJFa1^}4k%9SHo0f0qsJ}^kKCuHVl$yF(q zWThLh5lq*yB#XRXrs$}DulSNBS?I-=BiA9%299K*H_MnI*Cx+uj%1-XUV+P1-HxFY zL$VN<#9h(fz<OM=feWy)T+16+j7wHPU<v%ds{4sz1xr>s0P7~D{|#2dlPq?GcR}Ua z{+_|MsARG8yA+k{=P%eNDp~OG4wS2UoLa{Ulq`6lc*f+~J&)5nP_iJHz$Vx7307j0 zYyg5u$Q8r*0%Cw98-idFB-dsPRzs2%AXtJtFg3lhQHW%vZLn_oGdTw95XqufBuC^} zpqzrm$Z^33dMyITwR*jMs{qNumm@L#fi<sSHE>)2U)kti#;?W8&*b#JvZYHF1{36S zl>T3^PqJhK7)+ASQD$y<V?~v$fWacFTvas_MV0Ic221c`fu+P2{i+A+FtFa*m}oMr z!oZYOumer5q+Bh%hMNqlP_Wjb#xx?k7I12tV3K@DZO&lNughRf!ANP%ugkuuIAEPM zjV*$e1uL<gF;Vj}K9+0SOjA#z%#!7-(JYLL#q3-$yQbBdCCgeTGt1SmKUSJ0%UU`* zo8(%V7TX4+WLaRsB-h3SR+}Unu)w52uB~|$P#Gi}vcMvPTzfNEXOOI5fhC3;K*I85 zX^^b61UC6Q6=kb)&`XxLsd&^+t_=mO)=#n@EU;87*Os;itF)43uIt7+x%M=$PAggF zT4$)6T#1{*rFN2Kf(eaWE9y$~ppk6A1e2P{wWNa8nn^Zff<?=6ZRtzkYFV-;CRnm8 z*Pag6ElXC~0Gm#(z}kGdJjwpyE~caVZLYRC-(I3b!Psm4QS20qTl=?PCFu?<eDCv- z<H-$J@ctJ!7vTWR&IeS<*)o_s*h&&x1UuRM6fU*)T~cWKlPL<?DmBmPf|Y6>?}F88 z9_@nlYJR5FA|6=i{)<^n7pz<JKo_iC^E0Iu0$}p6W@fu!gPNyx!6r3N>4J@Fer8w` zTCgqu^~JOcHmrGl7ucESt>yX3@;t&!4|~X?3%0KL#V*(z)}ssdQ1i3H+8(jKyI?0Z h@8jd+<Ky#R<S!p2d&`MM9Af|g002ovPDHLkV1o49sNVnp literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-192x192.png b/src/assets/icons/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..9172e5dd29e4b2c35cbf4da874e778934fa27e77 GIT binary patch literal 1790 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 UWvqof`P%?Q?*Ol6kC^=b0uRVBUjP6A literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-384x384.png b/src/assets/icons/icon-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..e54e8d3eafe56a617b9de13c361ed68657371e84 GIT binary patch literal 3557 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-512x512.png b/src/assets/icons/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..51ee297df1cbeb0354814ffe95afa6e4bc86ea23 GIT binary patch literal 5008 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 FzW_h><Ej7v literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-72x72.png b/src/assets/icons/icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..2814a3f30caf3abf4de2ac85082ef83888b4b479 GIT binary patch literal 792 zcmV+z1LypSP)<h;3K|Lk000e1NJLTq002k;002k`0{{R3VlzW^00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#R8UM*MNDaN)&Mcn05H@5Fxdbx(FQfk05I49FVg@p z+yF7i059JFFxUVv-2gG&05QV=FaQ7l>y@eERCUfVSLAPs`{wKQ$<y8=P2(+9`QGI2 zq_y<7#IBC9F#rGn4s=pZQvgJ-(lPhI7mKIsAY$I07o6z;000SaNLh0L00cn*00cn+ zG(|n;0006rNkl<ZSi|j@*=~a{5Jk&o)_7wL`Tzec;F84V4w$5>`jGn?>BzbqhH<{W zKKbNtQU<?4Nh`*M2;(;~LCB|wDMg;XOo{V^^A$9+vR7DfcHwKpJyCYDm@MK?5zk@4 znR@LACtlT?daVq#OFFFnUaysL6d-i<n8JB4WiMcG^&uysq*Q`P0YEtgYNc!w0u%vI zMsONAr6E8JfGPrXok3Rul%uXON6RG|gHYQg26YD1VGy!Bg`7eDq=q1<613>Hf}oTF z3K?M;*Yw_?5X(3{vgN@kPam<7%UPO5B_t(-pp1}F_K75<4DkSgZ^u+K7b78Mj^BPl z#(|5Pkg~#)5zE-k6SBin5|a`isF^_xmXa847bIi5%<QCvQW7JQAsLk!{t8M-fI=Xn z><!4&t$ciRjWh?kt)HVCkdhIg3dpEekOoqQ)F*8#qnqpDSlbw>C5%2AYa1gw46>vw zsSoY(fov(sFZKmYMmM7mh&iLW8%%1G&XKYpLAfKNw%3}*kuoAdnJr`M>__H>dq~Mh zP-V-g+(k>-Qs(q}WXssQpxTy_-X}}zK)3Dc*I821%VcWFsJ9?(Nx8HAB~LQ8U>P-a zuTt*pkmh5n)f|ns+Q$5J2qLyN|84E@+#+w#(H$VTc!5HXl|4%iLCo)Vlji%N$p7+I zG8$BzyHCc90G+&N*{z@Jc&GJ~9n-C!?ijTGxE#NGXP;Ytsbkdo&MZ9H)#u-s|CMj0 W+lM#8Z~|xm0000<MNUMnLSTZ`s$=&6 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-96x96.png b/src/assets/icons/icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..d271025c4f22c7ba3c5f43ccfcab0e52ebbe80ca GIT binary patch literal 958 zcmV;v13~<WP)<h;3K|Lk000e1NJLTq003YB003YJ0{{R3)kcR300004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#QBX`&MNDaN(FHWq05Hh_FW3Mv%K$LW05R48FxUVw z)c`Tx05I18Fx3Ds+5j=b059DDG5`Pn`|0h?DNx=~ap{et=5mep%+~Lyx#A^H+#^l% zx5S%GFfafB01k9gPE!E&((4(;BUht~-7>L58O~@#00009a7bBm000H6000H60f4@L z=Kuf#+(|@1RA}DqnQ3~1AQVNNP|ScL4oUXE&?Z$Ahc^JBfBJbB;3>Hreb6X6a^%R7 z;3>+#e0pA<Dy5R*Z=Rl&N%f3+MFeMLg{a1;DVIFt4=<~C)H|unf;{~!<EnxHFGd-n z)^*e--&8);N&~zr|J2F?d@5hoy2`DA2~L$4>snVC28G71@_nt#-0QkgM3T~@)@9nd zZWSG>a#?ZFb**E?A^ZVd{Y>W%C@dE6TmlD>DB#LG-_*Y`3;-|s%mDfk&@%wM<;-dU z%uZG6jBg_vFwB5~1`r-lj=dzaTLJ+PjAV02+0w|<H2ndPvLytd<RqKZd3i>grk4Qi z<rxW>_NdmZY}5-iXC>=8R<<kkx@IN2H|$O&zn&=IF)3E5fs>8=;$WuTroY=%%5X~{ z0fLsSe@zuVEn7+gB>k4?UVx64Eg=CVDVhGAi(*a6cA+O0QnGd&yjoH==>eE~y^Vl* zry6I^Fw^>X#pCEme%Y8om0EzA0pw0)Cde3<On-)7O~}Sfjslmg{Qz2G2@F8uU$XlL z(BNOT)EO{KHZ0Ev11g)~MtAy4woT`#0W{oc3ZNY|0ERnq0f21Wc`ZXE!_qs9b)adc zX41Ir(%mQL!2t$WfB+?XP7~X}OGsIO1m|6|KPMYdwuA+gkYqh{5Z91wf&~=NTcU#i zEhL+C1L)OjXai^<+4!?~4oEh@cNGsnwkv-L0!U_HfB|H)xD?q-)?>FVdcRXGE-Owu z$vO<s?q#z8h@E724AAUkODzC$E7^cwNIkZ)B^H2kd#E%xz--TK7n|#-_fIs1x>9SV z*n9RAfjlf%zPAXgA1U?(2-|DBO!@#4mz&4@;tEKwkz3Bf3E*?bd_7qMWaO73wgO!I zZ{dNqzw6clvF-Nz|AlPY{=QqFiW35mQK&514$>`EMWAkRM6hnLwgYwxw;i-wsO_-b g0#)SEkt6>uKVW<A{lK0~3jhEB07*qoM6N<$f)e<r7ytkO literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index 24fc414e2..4bef67938 100644 --- a/src/index.html +++ b/src/index.html @@ -14,6 +14,8 @@ <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#ffffff"> <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="manifest" href="manifest.webmanifest"> + <meta name="theme-color" content="#1976d2"> </head> <body> @@ -41,57 +43,32 @@ </style> <div class="app-loading"> <div class="logo"> - <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg3406" version="1.1" - inkscape:version="0.92.3 (2405546, 2018-03-11)" width="167.55714" height="167.55714" - viewBox="0 0 167.55714 167.55714" sodipodi:docname="cassiopee_logo.svg"> + <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg3406" version="1.1" inkscape:version="0.92.3 (2405546, 2018-03-11)" width="167.55714" height="167.55714" viewBox="0 0 167.55714 167.55714" sodipodi:docname="cassiopee_logo.svg"> <metadata id="metadata3412"> - <rdf:RDF> - <cc:Work rdf:about=""> + <rdf:rdf> + <cc:work rdf:about=""> <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" ></dc:type> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"></dc:type> <dc:title></dc:title> - </cc:Work> - </rdf:RDF> + </cc:work> + </rdf:rdf> </metadata> <defs id="defs3410"></defs> <g inkscape:groupmode="layer" id="layer1" inkscape:label="background"> - <rect - style="fill:#003a80;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1;stroke-opacity:1;stroke-linejoin:round" - id="fond" width="165.55714" height="165.55714" x="1" y="1"></rect> + <rect style="fill:#003a80;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1;stroke-opacity:1;stroke-linejoin:round" id="fond" width="165.55714" height="165.55714" x="1" y="1"></rect> </g> <g inkscape:groupmode="layer" id="calque_traits" inkscape:label="traits"> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 16.234557,39.786389 36.297745,77.631687" id="trait_1" inkscape:connector-curvature="0"></path> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 47.234816,83.975938 27.27422,0.39174" id="trait_2" inkscape:connector-curvature="0"></path> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 85.615846,92.002058 101.01379,128.05358" id="trait_3" inkscape:connector-curvature="0"></path> - <path - style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 145.82968,107.86632 -35.62153,23.78874" id="trait_4" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 16.234557,39.786389 36.297745,77.631687" id="trait_1" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 47.234816,83.975938 27.27422,0.39174" id="trait_2" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 85.615846,92.002058 101.01379,128.05358" id="trait_3" inkscape:connector-curvature="0"></path> + <path style="fill:#80b3ff;fill-rule:evenodd;stroke:#4dbbe9;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 145.82968,107.86632 -35.62153,23.78874" id="trait_4" inkscape:connector-curvature="0"></path> </g> <g inkscape:groupmode="layer" id="calque_points" inkscape:label="points"> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_1" cx="12.879179" cy="34.64555" r="6"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_2" cx="39.734871" cy="83.581924" r="10"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_3" cx="82.500542" cy="84.860001" r="10"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_4" cx="104.12913" cy="135.35852" r="10"></circle> - <circle - style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" - id="point_5" cx="151.57199" cy="103.73587" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_1" cx="12.879179" cy="34.64555" r="6"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_2" cx="39.734871" cy="83.581924" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-linejoin:round;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_3" cx="82.500542" cy="84.860001" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_4" cx="104.12913" cy="135.35852" r="10"></circle> + <circle style="fill:#ffffff;stroke:#003a80;stroke-width:10;stroke-miterlimit:66;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill" id="point_5" cx="151.57199" cy="103.73587" r="10"></circle> </g> </svg> </div> @@ -282,6 +259,7 @@ } </script> + <noscript>Please enable JavaScript to continue using this application.</noscript> </body> </html> \ No newline at end of file diff --git a/src/manifest.webmanifest b/src/manifest.webmanifest new file mode 100644 index 000000000..24609d088 --- /dev/null +++ b/src/manifest.webmanifest @@ -0,0 +1,59 @@ +{ + "name": "ngHyd", + "short_name": "ngHyd", + "theme_color": "#1976d2", + "background_color": "#fafafa", + "display": "standalone", + "scope": "./", + "start_url": "./", + "icons": [ + { + "src": "assets/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable any" + } + ] +} -- GitLab