From b9252c864f074f38c47c17de0de6a63ae365eadb Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer <xmaierhofer@1drop.de> Date: Mon, 27 Mar 2017 21:34:02 +0200 Subject: [PATCH] [TASK] Add favicon generator (incl. app tiles) and logo --- assets/favicon/android-chrome-192x192.png | Bin 0 -> 3843 bytes assets/favicon/android-chrome-512x512.png | Bin 0 -> 9440 bytes assets/favicon/apple-touch-icon.png | Bin 0 -> 2825 bytes assets/favicon/browserconfig.xml | 12 ++ assets/favicon/favicon-16x16.png | Bin 0 -> 624 bytes assets/favicon/favicon-32x32.png | Bin 0 -> 1025 bytes assets/favicon/favicon.ico | Bin 0 -> 15086 bytes assets/favicon/manifest.json | 18 +++ assets/favicon/mstile-144x144.png | Bin 0 -> 3016 bytes assets/favicon/mstile-150x150.png | Bin 0 -> 2656 bytes assets/favicon/mstile-310x150.png | Bin 0 -> 2689 bytes assets/favicon/mstile-310x310.png | Bin 0 -> 4983 bytes assets/favicon/mstile-70x70.png | Bin 0 -> 2185 bytes assets/favicon/safari-pinned-tab.svg | 134 ++++++++++++++++++++ assets/faviconData.json | 1 + assets/logo.svg | 7 + gulp/config.js | 1 + gulp/tasks/copy.js | 2 + gulp/tasks/favicon.js | 65 ++++++++++ gulp/tasks/html.js | 2 + gulpfile.js | 4 + html/index.html | 3 +- package.json | 1 + scss/modules/_loader.scss | 16 +-- yarn.lock | 148 ++++++++++++++++++++-- 25 files changed, 395 insertions(+), 19 deletions(-) create mode 100644 assets/favicon/android-chrome-192x192.png create mode 100644 assets/favicon/android-chrome-512x512.png create mode 100644 assets/favicon/apple-touch-icon.png create mode 100644 assets/favicon/browserconfig.xml create mode 100644 assets/favicon/favicon-16x16.png create mode 100644 assets/favicon/favicon-32x32.png create mode 100644 assets/favicon/favicon.ico create mode 100644 assets/favicon/manifest.json create mode 100644 assets/favicon/mstile-144x144.png create mode 100644 assets/favicon/mstile-150x150.png create mode 100644 assets/favicon/mstile-310x150.png create mode 100644 assets/favicon/mstile-310x310.png create mode 100644 assets/favicon/mstile-70x70.png create mode 100644 assets/favicon/safari-pinned-tab.svg create mode 100644 assets/faviconData.json create mode 100644 assets/logo.svg create mode 100644 gulp/tasks/favicon.js diff --git a/assets/favicon/android-chrome-192x192.png b/assets/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c8aed28b7a53c4ed039761a59a4024fdcfcb9927 GIT binary patch literal 3843 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 literal 0 HcmV?d00001 diff --git a/assets/favicon/android-chrome-512x512.png b/assets/favicon/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..c046f0b8159297368bfb3db79a73828aac88bffd GIT binary patch literal 9440 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 Y!z*#Yl21;iQ$f!4boFyt=akR{0QYB^QUCw| literal 0 HcmV?d00001 diff --git a/assets/favicon/apple-touch-icon.png b/assets/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..90b6db1b7aa63168e14ac96600517a3013b6e23f GIT binary patch literal 2825 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 literal 0 HcmV?d00001 diff --git a/assets/favicon/browserconfig.xml b/assets/favicon/browserconfig.xml new file mode 100644 index 0000000..153c99b --- /dev/null +++ b/assets/favicon/browserconfig.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<browserconfig> + <msapplication> + <tile> + <square70x70logo src="./mstile-70x70.png"/> + <square150x150logo src="./mstile-150x150.png"/> + <square310x310logo src="./mstile-310x310.png"/> + <wide310x150logo src="./mstile-310x150.png"/> + <TileColor>#dc0067</TileColor> + </tile> + </msapplication> +</browserconfig> diff --git a/assets/favicon/favicon-16x16.png b/assets/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..62c4991721c848828b3aff24fb7ee1a9e4763320 GIT binary patch literal 624 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU<L*TmUKs7M+SzC{oH>NSs54@ z7>k44ofy`glX=O&z_2mEC&bk!vv9p!I2<h%iCZrlexu8Jy=?e8>4^1m;VXn<*2{%| zJFWHgl-36M@b$6?#c*BUPHTNTr}_DqHe6)AO!yY<kS`~+znswidP?idN$oGkwZC7` z+#nzR^`!Qzbw&u4a^YXkXdUqO{c=Kkopi+YX1m??{-2KMyxwT^^_2Gey?S3yY2Tk_ zak<LzNT}EAjYd<iZQx~KV6ZL;@(X5ISGv-Kbqb@LfGAJ5*Bt9J%Q&=i4(!(D*wnT; zxZX`#vA?ugaF*rO`SaBKh0KaJw(LmVbmZt{qfK*tsvmENVqjp{?CIhdB5}F4|F}?- zgMdqV;!Oq}g-MGW7A2i~_}~7_QXlctJ4<}8m+Y5ns9&7;=G!Ujx0w|jszF~WUpa;Z zJ;*vPlX)X+S=J#bMt+g=?}eAizeqGS^SK)H!0we%aglxe2^aQXtDaw<Y`RzS%i-=v zVp-l-p3aW<alIn*EmT9Cd9&ipoc_W+r^C(I6*NAG#+tmHB*?BRWuX(Ekh%7$q4(5A z#?6d}91id6OFJ^{$fDnuUiA0NKWE@RWB5R15(5K6cvVP5Nl;?BLP1e}T4qkFLP=#o zszPQ#NiqXN#hk~VcsL5fG&D~6pFZRHG>Cy&nOiTJTUc4xd$I_#u!2j2$>9`c<;@`q rr*B+2apcSqnIr6{8$1?x=`p+#7cBYYWIC0Bfq}u()z4*}Q$iB}RVxAe literal 0 HcmV?d00001 diff --git a/assets/favicon/favicon-32x32.png b/assets/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a4907a616ae55408133fba77bbb67f06ad6f2f2a GIT binary patch literal 1025 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^xl_H+M9WMyDr zU@Q)DcVbv~PUa;810zR(Pl&5eX5o6d@GaUQ>t(}1NDfBIg|C+jUnc`1*CPpjzo_x$ zxb}Lv@GmE{5Bm9lq>yC4oB&Bd1R-n)xn35e9$6g1{(Kaq{>usNFDJCWp40-7r?jBX zkPH8MQtRtUEr?2}IUqrZV(qUdK@5oA54-h09n|@HQu|nx2SokXliH8wnBVEMf+*Nw z5qP24X|J>2{i&8)v_tMr1c|@dY<MKh3u5w%qW_@`3=Cl<L4Lsu5gaRYc!mD`{w{K% zR`qc&%lU&F826;i{_tAh)Sc!a$)7Bn>z>6;FES6>q2RpN>#*!~y9IX^%6h06O)cfp zerJ)h>r2MVKkIY)U2TmdPJY&U_~%Ibb5o}D{oxD@jF&uJ978Nl9}T`<w%CD3_SKmH zU-sah-opOs&geHPerC6=|NXa*JdkSs`iZ5@8No|)wO@KMACRuIlAZne)9a6)c5Ah4 zJ3r^a(zYKmwwq&(!!{Q52s6iso~Re@nZw4gMP0To^W^7HpCw@rcg?8wXinc;T+cAW zfUWqpm%g6p+WEV6s%OO77zubN%#L7NaAWs=uA;W1bph*lFPHMtE0dkF?1J*sZ&sxS zMxShUl%I>epghlg)r_DgENfWrR_^w^P;aem{Dw&?cf%zsO+{ATk3mw$nx^uf{<!4# zRwnJY(~mq}(Y{-S=Wzc0m6uL`+PD9<>+A*7|2&Ah_+RtpvgcJc@0yb?XvQ4j-oAT{ zYpu|=ZIf5W6)-A9o68%|5%ZfjW&W*iN&l`*U$Tv9LG|a?<~K67{`>sn%Jc{6s#g}> z(yNg;lJYQy$yh~7CHvEb)y3JWo|8WAeehtS$MLg!W?tfOo^3QiIo)adG{^1hUptFd z3AwnbO>fosESR)v;;DO?n)CZ+{fsb5eX@Mn+oA-k6Wf$!L$17*5#GLfik{UJK87&K z1E2EDu1#I0IXgHtYwJFTn`Smi^%}~S-`6dExAWUf_Q2FxxlLRb5B~BO+i020e_Mo` z<@+>!kw1*A)&{?}pUFyRU|<NZ3W+EQN-S3>D9TUE%t=)!sVqoU$Sf#HW?-n8^Y{}F zM`4(T#wq{PXFQ(<F)%B0>m_pwD+_y17GV}vaA`0(oWiWUIYi;~jVmXPoH-(Mg#C1b e#{w@shF9W(C7+y3r!p`wFnGH9xvX<aXaWF*ThZ45 literal 0 HcmV?d00001 diff --git a/assets/favicon/favicon.ico b/assets/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fc79f4e7f678499e464a7417d10912b1a1dea57c GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/assets/favicon/manifest.json b/assets/favicon/manifest.json new file mode 100644 index 0000000..e7e10e0 --- /dev/null +++ b/assets/favicon/manifest.json @@ -0,0 +1,18 @@ +{ + "name": "Meshviewer", + "icons": [ + { + "src": "./android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "./android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#dc0067", + "background_color": "#dc0067", + "display": "standalone" +} diff --git a/assets/favicon/mstile-144x144.png b/assets/favicon/mstile-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..4be7a27f4a4c890813442f097f81c2255dd1db2a GIT binary patch literal 3016 zcmeAS@N?(olHy`uVBq!ia0y~yV3+{H9Lx+13>Rhybuln7u%tWsIx;Y9?C1WI$jZRL zz*rpQ?!>U}oXkrG28Lq+J|V6?nT6}+!Z#>{eL11MUM?Jhjz)Sx7zk1pDz#oN{L2Y# zWW^vhk}O0EL=8v^Y$k-eUKXks!iA9Q<-)(h41|clNr?E#1h>cY&F=JA9}e=~WfK5# zz}Hh+?{?_#whP#z8FHi9?zyf=9RmY{bxDw4FoUuB*AHKxvvB_Vy+MwD*Zpgc|MZC; z;mVFXJG<N`e7)$><~M1<*FEI_soB^RPj%X*zu@qh&e}i!9xsp3Iaevbz`*&<)5S5Q z;?~>f%<@GZB2#PGMFm*`?|e5^yKFow?%)6UQU|p(7C87Q%q%|kU30B&%)O%fLH$v0 zHT^431<(65Wx37M|H?A!KisKj?b&3Md(wc%bGygC-w#jpIdVUr-Lb|bY+s~xn(U&T zoQuo$UoL6Unm5_$_1gTym)FiWRPuOI{xI=;h2cJS!G&`-yZq%_z4giok2Mc(2DNtz zyu2^)pIIW#>A2$hH7B-iGm~Yzz2ik{#Xc1`UfyFbicVa=>-WOVwda`dvb9pHOe9Xv zXJ2|)!~A0QM7Ad$ukGe+WYG*=^ZJOo;z@-^uIhD)Oh%1W{hK`d9UnUs+a3Rye4r!f zQnhY@bk)@Q#$0v5nTyn?Cm2@E_EJ;$(c)+)$CK_cUx8chPMB}|cGf>mXSa$^d;GS4 zvMYCtz+yJ058J1Gw~?FXFZueh9j{4VTJqA*HU?kP!@k-m{|SG7*iAV<OTeIi2}8c< zd+9%CZm`5Zp0bYdjLwYE3=W2*P4#;h3CpN?Klhox=IXD@7jMNDwAOf>54kt<?7ywd z#&Xk3ip*lwx47$Hd3q@)N6dB6nE)fnRg?c_Ti1SP+)%8={>?nxqH&K7_XmN?zF*}H z8s4;9Fh?1_WPW@057X1skAlnE!q0IgvZ~ndKc3?E=>M+9x>;u#E;jC-e_FzLvDd0} zbtXBcN0;VJXSnh%w(v~(I}?LD1@Q{EHybYAY7?RQ(lU1Gl(e~e4;Hn=rSsko+59@+ zZ(o;N<yQfnV-dz%q}*2s@O#@lX^{C)tTs{l`(f>#>p$Wpv*cTN1(bWE!=DzP^6Fnz zXWMV4V;EW0pSfotH*-+Q7RBUOlWNzleEDLsU*3I3CVnx8qX&Bv-)$E@e{p_HqRj8> z`{UMMyjEiT@x~)d{~LM#G7j;bE}T5!WL`w~^2n6O$0PE0+5F_1b!Jn=E#ab%M@~n@ zyyM8#z91zX+NUYB@@?(<eF0O>yM5N_K6y#~<CPtZ-?&~Dtq+S1Ry2I~OH!`EB*o-d z$=8p6t70b>G#qiX+P*Em-Q41A99y6;+a=@tuPN5Pw_AT@L>>*x@cR|HBlG<8mnW^9 z?X{Qu2sx?!^~S7@EgSA_OOVt`e%y30vijlgi&ohO1Vo=JWLRF>#M`?xa_!@p{3YRg zLdCm&#yeb>RI%;TQMskKwy?`bsAY}Kjn^laonp%p+R7oFYs=8FS-_@>^RV?i3G3#@ zn^Pw`Bpz>NEKECc^vr@gKiM)<HfM<`-0PI+DLXZ9yFj4&>RfKdN9<>quY6~83H)&_ zoRwkW%PCt|&Df&U5~Ti)DXUUYZf*2g4xX3at&hk$Wc*r{uRVKF){UJnm3TQiPZg(! z-kl+^(6XT;ddKp4^W)WLf8EsY8}Bl;*}LV%m29~eyZ5>opZRv>bf&z;`&Gi;@u6Jl zt|96Z-x)d;Pk#99Rz=S16BFXrg=%yB{P)W-_R^(@|BD}93NP(Y_`C1#o`j`8udfff z9Pa3H==S+?n+2z>T|&x!oqD_B-mJ(9Czq$o*Za8alDO_ac~|I9!A1A4E?Ix3>vulO z`GW7S^rm0FnAnu?OF3lnKBFc3yC29*%Y6{N`K!vMo40p-Yu&{6@_B04tHk@=`(D&5 z&Wl{pc~{BOueoE^;`Jc{CDW2umFCGSTzh<d<%;^2B|VZ_=N?SI^5ryxuH&&8$<c=5 z&n5>q`KSM`-9PI<bhGuNblHOw^fyFG|Go0ox9#xB#9QkWO22&2;s|B=v#Zgf=0C$1 zx4Eav*M8&fSlsh6B*6aIT#cfyr)w^+(|WPlZQWbtl8r~#+|S>>^T(SVHR<hA8E4+j zm?CASrhh#4eZdF$##=sj8_cWkh%>MHx<R!ee^s6S`*L|RNd}XcI~N0dRy1sOEB+Ba zbC1Qz^nL%hzud3nnh?#pz|7~Xr1C0TiI0KV<y-7>`S#wM$fU+?v1+5n?bV4q?{BqM zOn%&yrCRiA(&IS8`X_0t4K6EQEa9$xCH5_E=hf_R(fWgB%)i$tYvl$$30NDG^n|1S zuhS3iE9*s;J&QaLrFm@j!;Q*YHH}LrBpmz0Hh=p>qgy=3{`~I0vCiZ6T~m!!8;iZK z_-n`f_{|$yGE+rB*NN}fPwy#7!TsNocE(KMXqT71$na{dr0KcZ5Z=Vx-~XO-%`4T) zj@h}k<=wkK|Ae=SAHVo^=k4x`dT+kouV-7kNF&swOEK5V&h~$GQ%Ps<-G?PsG81>6 z*~;B?_^8$t73+^zW!-KST|TDj{;Yn{PxqHzL2LZpv^c(r_~*R)aE{Gc`TZ9U9}1fK zMEIfQzMrgWc6rPCRtT?Ltfm*}8Lrf0&A-~6dDqjzzN42Vw*D=3Pz?5rX>@h*yBBrt zfZ_IyUmYq1>~oU$i2f@5-!gMS;9hCx(-o?POO|@CdS!Xr##$?O_c<2-BN_9qdI>7- zSYhaQruv)aYTjx^QT3@Qae@Wf{jBmvZ8J^ZKHjAzynFpo_09|PXIwpd#dz;8DNDb+ z#S1O3TI|yc)bi6@Df<7wjU?UcQWs7JJ4ZhYGgR7R_rT%U^tR*wa$c^BkH5Y+Q_E0g z%92tc_9mUYC9Spx&2r2N{kp9?d8`hV+O@tc`S-CR%Kp;Nbsbt^+Z{El*UR~8Xl}hQ z!G`tW+ua2%(t=58e0HXJ?>^V8n>2}gL)a5drL&u66u+3jAzXUC=vBDXVJ2CZAkQs| zD`z#_7o27tShtB|(i^oJb+?v`o5iyN&Q?Bbk`0}tkt^D#?%dYB{_jku9d8PL&xu~i zG|M&o#(_C)JO71D_^7N}>GkJKi`!+cJEqS4j}P^_@(4QF2+H$yZxblEyNAzIPVd2j z#%-(`kz1~*ER@Vu&0lm~Ca9k$`XN{JmW*wwmsY12u&V7l$bEhFrfFB)4lZloJ^!6v zrM3?z@5Pg$5j(!M=iT$XQEIYd)~Zi8dtVoDS<mw|bV!I4ym`81_X>>#e09<y5!>&b z%6l7sOW;;t^@)^=*A(w8a{F%GcxlNI(}UAisy%0Tb$I9LbrI>zUj=P#dJ0MmH}!2l zs}Syd@LJ@B&3b<`tVMWg^go_sit!e>s9eijo&Mu?-z4Ky*}OZ~Pd?2n@@?m`{qX)+ z`+9{VdG8X#-#@st>d14xPx)V8FL|+nJ?`r*l^4sDTd&A=7qBn*_UKEk`kU;_D;_TB zlHX`?V@-VjQneQ^OsclIKI)O){*psUYF)Q~Nc6G4+xaRq_r4X<JN$GH{{i3X!_W5I zw9t{C`C;9q{H~6Z(|0UbKG!thv&LhC|JFN;kL|72jg*(MDBmhFFXfI#))Y_n$LmZx z;%2M}-!O4Q*LU6>)5^N9*e}wU^2y6{p1kE(0U_OoT*>DS>VM=4-MdhoUAreIR(8#Y z@&~0dN(WcxxgLs7REfTMzB_MS?NcsKz9j9Ri$pdV|F?B|CH3gs8s97XqAe~>F`1Pp z5fv=^X#Yns8-3x`SGy+syajEnf!b~V-T$!`L@$tM@wTvFU|<NZ3W+EQN-S3>D9TUE z%t=)!sVqoU$Sf#HW?-n8^Y{}FM`4(T#wq{PXFQ(<F)%B0>m_pwD+_y17GV}vaA`0( yoWiWUIYi;~jVmXPoH-(Mg#C1b#{w@shF9W(C7+y3r!p`wFnGH9xvX<aXaWFoleygh literal 0 HcmV?d00001 diff --git a/assets/favicon/mstile-150x150.png b/assets/favicon/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea0c5f70deb25f11ab96618c536004ada7b771c GIT binary patch literal 2656 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 literal 0 HcmV?d00001 diff --git a/assets/favicon/mstile-310x150.png b/assets/favicon/mstile-310x150.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bcb75b1ab56206e143675c1ce3e2e21554a688 GIT binary patch literal 2689 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 literal 0 HcmV?d00001 diff --git a/assets/favicon/mstile-310x310.png b/assets/favicon/mstile-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a9f3917b3f7e438e3497a865cea0770aeaedb4 GIT binary patch literal 4983 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 literal 0 HcmV?d00001 diff --git a/assets/favicon/mstile-70x70.png b/assets/favicon/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..82ea8764334d79bc9b92fd380ff32034a5332049 GIT binary patch literal 2185 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 B2R#4) literal 0 HcmV?d00001 diff --git a/assets/favicon/safari-pinned-tab.svg b/assets/favicon/safari-pinned-tab.svg new file mode 100644 index 0000000..a732bc7 --- /dev/null +++ b/assets/favicon/safari-pinned-tab.svg @@ -0,0 +1,134 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.11, written by Peter Selinger 2001-2013 +</metadata> +<g transform="translate(0.000000,16.000000) scale(0.001600,-0.001600)" +fill="#000000" stroke="none"> +<path d="M8658 8875 c-2 -2 -27 -6 -55 -10 -29 -3 -66 -10 -83 -15 -16 -5 -30 +-7 -30 -5 0 3 -12 0 -27 -6 -16 -6 -37 -12 -48 -15 -41 -7 -255 -105 -255 +-116 0 -5 -5 -8 -11 -8 -22 0 -145 -96 -225 -175 -153 -151 -286 -382 -319 +-554 -2 -9 -7 -34 -13 -56 -5 -22 -10 -47 -10 -55 0 -8 -3 -31 -6 -50 -21 +-106 -5 -303 36 -460 20 -79 28 -100 72 -190 14 -30 26 -60 26 -66 0 -6 -43 +-51 -96 -100 -53 -49 -123 -114 -155 -144 -81 -76 -139 -129 -259 -240 -57 +-52 -115 -106 -130 -120 -15 -14 -68 -63 -119 -110 -51 -47 -114 -105 -141 +-130 -46 -44 -204 -190 -265 -245 -16 -16 -62 -58 -101 -94 -39 -36 -110 -102 +-158 -146 -48 -44 -119 -110 -158 -146 l-71 -66 -71 46 c-39 26 -107 64 -151 +85 -44 21 -88 42 -97 47 -10 5 -22 9 -27 9 -5 0 -22 5 -38 12 -38 15 -38 15 +-118 33 -114 27 -119 27 -147 28 -16 0 -29 3 -29 6 -4 19 -3 704 1 710 3 4 32 +20 65 36 118 56 235 206 274 350 14 50 14 168 1 215 -5 19 -10 38 -10 43 0 16 +-54 114 -84 152 -57 74 -170 157 -239 176 -23 7 -49 15 -57 17 -8 3 -55 7 +-104 8 -78 2 -101 -2 -170 -27 -44 -16 -82 -32 -85 -37 -3 -4 -24 -19 -46 -34 +-119 -81 -204 -232 -210 -374 -9 -198 112 -406 288 -492 l67 -33 -2 -356 -3 +-356 -25 -4 c-58 -8 -78 -12 -143 -27 -69 -16 -258 -83 -267 -95 -3 -3 -29 +-17 -57 -30 -29 -14 -53 -28 -53 -32 0 -3 -10 -9 -21 -12 -17 -5 -33 5 -68 42 +-47 50 -305 321 -376 396 -38 40 -200 212 -415 438 -52 55 -112 118 -132 139 +-21 21 -38 41 -38 44 0 3 18 35 40 71 123 205 166 485 108 708 -6 22 -11 45 +-13 50 -25 109 -132 290 -229 387 -56 58 -124 118 -131 118 -2 0 -32 17 -66 +38 -64 38 -167 84 -203 89 -11 2 -25 8 -31 13 -7 5 -14 8 -17 5 -2 -3 -19 0 +-37 5 -34 10 -155 23 -201 23 -39 -1 -152 -12 -178 -18 -12 -3 -30 -7 -40 -9 +-56 -13 -78 -19 -87 -25 -5 -3 -12 -6 -15 -7 -52 -10 -182 -84 -271 -155 -85 +-67 -219 -225 -219 -258 0 -6 -4 -11 -8 -11 -9 0 -81 -162 -84 -190 0 -3 -4 +-15 -9 -27 -5 -13 -11 -44 -15 -70 -3 -27 -8 -51 -11 -56 -9 -16 -4 -236 7 +-277 6 -23 12 -52 14 -64 10 -90 95 -269 174 -368 66 -83 160 -169 223 -204 +19 -10 36 -22 39 -25 3 -4 33 -20 67 -37 142 -69 286 -100 439 -97 107 3 157 +10 236 35 l59 18 47 -47 c26 -27 108 -112 182 -191 165 -175 256 -271 335 +-354 33 -34 123 -129 200 -211 77 -81 163 -172 190 -200 28 -28 63 -66 79 -83 +l29 -31 -39 -58 c-21 -32 -36 -58 -34 -58 3 0 -5 -13 -16 -30 -47 -66 -120 +-267 -143 -390 -30 -162 -32 -383 -4 -510 14 -65 9 -85 -22 -103 -16 -9 -32 +-20 -35 -23 -3 -3 -27 -16 -55 -29 -27 -13 -57 -29 -65 -35 -8 -7 -46 -29 -85 +-50 -38 -21 -132 -73 -208 -116 -75 -44 -142 -79 -147 -79 -6 0 -10 -4 -10 -9 +0 -5 -9 -13 -21 -16 -21 -7 -256 -140 -276 -157 -7 -6 -13 -7 -13 -3 0 4 -7 2 +-15 -5 -8 -6 -29 -20 -47 -29 -18 -10 -76 -42 -129 -73 -52 -30 -102 -58 -110 +-62 -8 -4 -23 -12 -34 -19 -18 -11 -104 -60 -195 -110 -132 -73 -519 -292 +-536 -303 -18 -11 -24 -10 -40 4 -139 124 -315 211 -505 250 -99 21 -304 27 +-363 11 -17 -4 -44 -10 -61 -13 -60 -10 -118 -27 -146 -42 -16 -8 -29 -12 -29 +-9 0 7 -182 -88 -221 -117 -178 -126 -321 -316 -392 -518 -58 -167 -66 -232 +-57 -495 1 -26 36 -172 54 -221 12 -35 68 -153 101 -212 7 -13 21 -33 31 -45 +11 -12 31 -38 45 -57 124 -165 362 -318 570 -366 13 -3 42 -10 64 -15 22 -5 +112 -8 200 -8 153 1 258 14 302 37 11 6 23 9 26 6 3 -3 22 3 44 14 21 11 41 +20 46 21 26 3 191 100 245 144 32 26 149 144 176 177 28 35 101 151 119 190 +35 78 56 130 51 130 -2 0 0 9 6 21 6 11 20 64 30 117 27 138 25 309 -5 437 +-18 77 -19 73 18 92 20 10 107 58 194 107 170 96 247 140 351 198 37 21 78 44 +92 50 14 7 27 15 30 19 3 4 32 21 65 38 33 17 67 35 75 41 39 24 191 110 196 +110 2 0 21 10 42 23 34 22 121 70 202 113 19 11 37 22 38 27 2 4 7 7 12 7 4 0 +50 24 101 53 101 57 129 73 344 193 77 43 142 80 145 84 3 3 18 11 34 18 28 +13 31 11 55 -20 60 -80 274 -278 300 -278 6 0 11 -3 11 -7 0 -5 22 -20 49 -35 +l49 -28 -70 -162 c-38 -90 -75 -176 -83 -193 -7 -16 -21 -49 -30 -72 -10 -26 +-24 -43 -34 -43 -104 -3 -177 -17 -226 -43 -11 -6 -22 -11 -25 -12 -16 -1 +-102 -60 -141 -97 -104 -98 -152 -211 -151 -353 0 -55 6 -106 16 -132 8 -24 +13 -43 11 -43 -3 0 11 -30 31 -67 33 -63 173 -216 192 -211 4 1 21 -6 39 -15 +81 -43 212 -56 316 -32 62 14 130 37 137 46 3 3 20 14 38 23 32 16 109 88 142 +131 24 31 66 124 76 170 13 54 10 187 -6 247 -18 68 -54 150 -82 183 -9 11 +-28 34 -42 50 -14 17 -26 33 -26 36 0 5 70 172 90 214 8 17 30 70 35 85 1 3 8 +19 15 35 7 17 14 32 15 35 3 14 44 100 48 100 2 0 26 -6 53 -14 27 -8 65 -17 +84 -21 19 -3 49 -8 65 -11 43 -8 368 -13 380 -6 10 6 15 7 80 16 40 5 80 13 +80 16 0 1 9 3 20 5 23 4 43 10 65 17 8 3 44 16 80 28 124 43 264 125 394 229 +97 79 94 77 111 66 230 -156 583 -391 593 -393 6 -2 12 -8 12 -13 0 -5 6 -9 +14 -9 8 0 16 -3 18 -7 4 -11 428 -293 439 -293 5 0 9 -4 9 -10 0 -5 6 -10 14 +-10 8 0 16 -3 18 -7 2 -5 40 -33 85 -63 66 -44 81 -59 77 -75 -35 -142 -11 +-350 59 -524 31 -77 104 -201 119 -201 4 0 8 -6 8 -13 0 -22 119 -130 203 +-185 74 -48 218 -112 252 -112 9 0 24 -4 34 -9 38 -21 229 -31 337 -19 107 13 +311 91 364 140 10 10 23 18 28 18 13 0 152 138 187 185 17 22 36 46 43 53 6 7 +12 20 12 28 0 8 4 14 8 14 5 0 21 28 37 62 39 88 43 97 56 148 18 67 21 82 23 +113 0 15 3 27 6 27 14 0 -1 226 -21 305 -23 89 -94 258 -120 286 -8 8 -23 27 +-33 43 -24 38 -63 82 -106 120 -19 17 -44 41 -57 53 -13 12 -23 20 -23 17 0 +-3 -15 6 -32 19 -75 57 -242 126 -347 143 -99 17 -270 12 -356 -10 -11 -3 -40 +-10 -64 -16 -65 -16 -166 -66 -254 -127 l-77 -53 -110 75 c-61 41 -115 75 +-119 75 -5 0 -11 3 -13 8 -1 4 -57 43 -123 87 -66 43 -124 83 -130 87 -5 5 +-80 54 -165 110 -85 56 -157 105 -160 108 -3 3 -17 11 -32 19 -16 8 -28 18 +-28 23 0 4 -4 8 -9 8 -12 0 -105 61 -109 72 -2 4 -9 8 -16 8 -7 0 -21 8 -32 +18 -10 10 -53 39 -94 65 -42 26 -88 58 -103 70 l-27 22 24 70 c33 96 58 194 +65 256 1 4 22 5 49 3 228 -14 552 -32 603 -33 21 -1 29 -10 47 -54 27 -66 87 +-159 95 -150 4 3 7 1 7 -6 0 -7 10 -22 23 -32 285 -250 712 -132 823 226 40 +127 16 291 -59 410 -35 55 -91 115 -107 115 -5 0 -10 4 -10 9 0 13 -141 81 +-177 86 -15 2 -28 5 -28 6 0 1 -37 3 -83 4 -75 3 -143 -6 -182 -22 -8 -3 -24 +-8 -34 -10 -11 -2 -26 -9 -34 -15 -15 -13 -47 -32 -72 -44 -35 -17 -102 -103 +-156 -199 -12 -22 -9 -21 -179 -10 -60 4 -141 8 -180 10 -284 14 -321 17 -329 +26 -2 2 -7 27 -10 54 -3 28 -8 61 -11 75 -3 14 -8 39 -11 55 -17 95 -71 247 +-125 351 l-37 71 77 70 c42 39 90 83 106 98 17 15 60 55 96 89 36 33 112 104 +169 156 57 52 119 110 139 129 20 18 78 72 130 120 52 47 110 101 130 120 20 +18 76 70 125 115 99 91 121 112 267 247 57 53 118 109 134 124 17 15 77 70 +134 123 130 121 123 115 142 129 13 11 23 8 58 -17 22 -17 41 -27 41 -24 0 4 +7 1 15 -6 29 -24 165 -85 235 -105 138 -40 236 -53 380 -50 127 3 170 6 230 +21 14 3 32 7 40 8 8 1 40 11 70 21 30 11 57 20 60 21 111 31 304 153 415 262 +68 66 135 140 135 148 0 2 15 25 34 51 88 125 170 339 193 508 10 75 8 277 -3 +345 -35 202 -111 382 -232 545 -38 51 -163 180 -216 223 -118 95 -318 197 +-448 228 -116 28 -172 35 -290 38 -75 2 -138 2 -140 1z m252 -530 c6 -3 23 -9 +38 -11 34 -6 178 -77 215 -107 65 -51 167 -159 167 -177 0 -6 5 -10 10 -10 6 +0 10 -5 10 -11 0 -6 9 -23 20 -38 21 -31 66 -159 76 -217 4 -22 6 -68 6 -104 +-1 -215 -80 -384 -249 -530 -65 -57 -207 -123 -289 -135 -16 -2 -40 -7 -54 +-10 -53 -12 -246 -5 -271 11 -5 3 -18 7 -29 9 -43 8 -148 61 -202 102 -61 46 +-137 128 -159 172 -8 14 -16 28 -19 31 -20 20 -71 150 -85 216 -4 16 -8 68 +-11 117 -4 76 0 119 20 213 14 68 97 205 165 274 99 102 252 185 375 204 22 4 +42 8 44 11 7 6 210 -3 222 -10z m-6085 -700 c81 -23 147 -73 225 -171 45 -56 +79 -182 74 -273 -10 -173 -154 -338 -336 -385 -133 -34 -294 12 -397 114 -94 +92 -145 267 -117 400 11 49 61 150 90 181 72 77 173 134 259 145 23 4 43 8 45 +9 7 7 110 -6 157 -20z m2460 -451 c121 -44 166 -200 88 -303 -27 -35 -113 -80 +-148 -76 -123 12 -187 76 -191 192 -3 56 0 67 29 110 18 26 47 55 65 65 17 10 +32 16 32 13 0 -2 10 0 23 5 23 9 68 7 102 -6z m101 -1942 c206 -43 423 -197 +543 -387 37 -58 78 -138 87 -170 40 -135 46 -174 46 -270 0 -99 -16 -213 -34 +-248 -5 -10 -11 -27 -13 -39 -6 -28 -64 -145 -99 -198 -44 -66 -152 -170 -231 +-220 -37 -25 -71 -45 -74 -45 -3 0 -11 -3 -17 -7 -21 -14 -120 -50 -148 -55 +-16 -3 -41 -9 -55 -15 -45 -17 -258 -19 -346 -2 -44 8 -89 19 -100 23 -11 5 +-39 16 -63 25 -23 9 -60 27 -82 41 -22 14 -42 25 -45 25 -20 0 -173 152 -219 +218 -77 110 -128 239 -150 380 -33 206 11 406 127 576 46 69 177 201 207 211 +11 4 20 10 20 14 0 5 45 31 100 60 55 28 100 48 100 46 0 -3 10 0 23 7 70 38 +301 54 423 30z m2468 -770 c136 -67 150 -259 26 -337 -157 -99 -340 41 -291 +222 12 44 70 105 116 121 41 15 114 12 149 -6z m621 -1765 c103 -32 206 -108 +221 -164 3 -13 10 -23 14 -23 4 0 15 -28 25 -62 17 -59 22 -142 12 -198 -4 +-24 -7 -33 -33 -96 -15 -40 -79 -110 -124 -139 -102 -63 -217 -77 -324 -40 +-155 54 -255 188 -258 345 -3 221 165 392 382 387 30 0 69 -5 85 -10z m-7234 +-36 c66 -21 163 -78 209 -123 39 -38 85 -92 93 -108 4 -8 16 -29 26 -47 11 +-17 29 -62 41 -100 25 -79 26 -208 3 -282 -8 -25 -16 -50 -17 -56 -14 -52 -74 +-142 -132 -198 -26 -26 -51 -47 -55 -47 -4 0 -14 -6 -21 -13 -13 -13 -114 -59 +-157 -72 -57 -17 -181 -24 -239 -14 -87 15 -182 54 -228 92 -99 81 -163 175 +-203 298 -22 68 -29 180 -15 256 18 104 100 236 191 307 45 36 151 98 173 102 +3 0 12 3 20 7 70 29 215 28 311 -2z m3111 -269 c15 -6 39 -21 53 -34 133 -115 +49 -343 -126 -341 -136 2 -226 130 -182 260 34 100 154 154 255 115z"/> +</g> +</svg> diff --git a/assets/faviconData.json b/assets/faviconData.json new file mode 100644 index 0000000..d4b60d2 --- /dev/null +++ b/assets/faviconData.json @@ -0,0 +1 @@ +{"result":{"status":"success"},"favicon":{"package_url":"https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/favicons.zip","files_urls":["https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/android-chrome-192x192.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/android-chrome-512x512.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/apple-touch-icon.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/browserconfig.xml","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/favicon-16x16.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/favicon-32x32.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/favicon.ico","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/manifest.json","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-144x144.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-150x150.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-310x150.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-310x310.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-70x70.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/safari-pinned-tab.svg"],"html_code":"<link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"./apple-touch-icon.png\">\n<link rel=\"icon\" type=\"image/png\" href=\"./favicon-32x32.png\" sizes=\"32x32\">\n<link rel=\"icon\" type=\"image/png\" href=\"./favicon-16x16.png\" sizes=\"16x16\">\n<link rel=\"manifest\" href=\"./manifest.json\">\n<link rel=\"mask-icon\" href=\"./safari-pinned-tab.svg\" color=\"#dc0067\">\n<link rel=\"shortcut icon\" href=\"./favicon.ico\">\n<meta name=\"apple-mobile-web-app-title\" content=\"Meshviewer\">\n<meta name=\"application-name\" content=\"Meshviewer\">\n<meta name=\"msapplication-TileColor\" content=\"#dc0067\">\n<meta name=\"msapplication-TileImage\" content=\"./mstile-144x144.png\">\n<meta name=\"msapplication-config\" content=\"./browserconfig.xml\">\n<meta name=\"theme-color\" content=\"#dc0067\">","compression":"true","overlapping_markups":["link[rel=\"apple-touch-icon\"]","meta[name=\"apple-mobile-web-app-title\"]","link[rel=\"shortcut\"]","link[rel=\"shortcut icon\"]","link[rel=\"icon\",sizes=\"16x16\"]","link[rel=\"icon\",sizes=\"32x32\"]","meta[name=\"msapplication-TileColor\"]","meta[name=\"msapplication-TileImage\"]","meta[name=\"msapplication-config\"]","meta[name=\"application-name\"]","link[rel=\"manifest\"]","meta[name=\"theme-color\"]","link[rel=\"mask-icon\"]"]},"files_location":{"type":"path","path":"."},"preview_picture_url":"https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/favicon_preview.png","version":"0.14"} diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 0000000..b8d9c32 --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" data-name="Ebene 1" viewBox="0 0 125 97.5" width="125" height="97.5"> + <title> + Meshviewer + </title> + <path d="m 41.426847,11.807177 a 11.89,11.89 0 1 0 -7.75,20.919993 12,12 0 0 0 4,-0.7 l 15.81,16.66 a 13.45,13.45 0 0 1 5.08,-4.82 l -15.25,-16.07 a 11.9,11.9 0 0 0 -1.89,-15.989993 z m -11.25,13.119993 a 5.41,5.41 0 1 1 3.5,1.29 5.35,5.35 0 0 1 -3.5,-1.29 z m 20.86,33.55 -28.39,16 c -0.24,-0.23 -0.49,-0.46 -0.75,-0.67 a 13.38,13.38 0 1 0 4.45,6.62 l 28.13,-15.85 a 14,14 0 0 1 -3.44,-6.1 z m -32.12,30.06 a 6.86,6.86 0 1 1 1.45,-5 6.85,6.85 0 0 1 -1.45,5 z M 119.4569,3.8671829 A 15.09,15.09 0 0 0 96.456847,22.64717 l -23.44,21.69 a 13.58,13.58 0 0 1 4.75,5.14 l 23.390033,-21.61 A 15.1,15.1 0 0 0 119.4569,3.8671829 Z m -3.3,17.0599871 a 8.62,8.62 0 1 1 2,-6.26 8.6,8.6 0 0 1 -2,6.31 z m -4.05,52.4 a 11.23,11.23 0 0 0 -14.690053,0.07 l -18.76,-12.53 a 13.56,13.56 0 0 1 -3.9,5.81 l 19.1,12.74 a 11.24,11.24 0 1 0 18.280053,-6.09 z m -3.72,11.62 a 4.74,4.74 0 0 1 -3.61,1.65 4.74,4.74 0 0 1 -3.59001,-7.82 4.74,4.74 0 0 1 3.61001,-1.65 4.67,4.67 0 0 1 3.06,1.14 4.75,4.75 0 0 1 0.53,6.68 z" fill="#ad2358"/> + <path fill="#f4c72f" d="m 101.52068,52.899268 a 6.2809967,6.2864323 0 0 0 -8.861411,0.190195 6.2109856,6.2163606 0 0 0 -1.310208,2.102151 L 82.787703,54.711122 A 17.502777,17.517924 0 0 0 67.185227,38.51455 v -8.939146 a 6.3810126,6.3865347 0 1 0 -3.820606,0 v 8.949156 a 17.552785,17.567976 0 0 0 -6.781076,32.753514 l -2.5204,5.896032 a 6.3810126,6.3865347 0 1 0 3.510557,1.521557 l 2.5204,-5.966104 A 17.512779,17.527935 0 0 0 82.637679,58.545045 l 8.491348,0.470482 A 6.2709951,6.276422 0 1 0 101.53068,52.899268 Z M 54.513216,85.602731 a 2.4403873,2.4424992 0 0 1 -2.000317,0 2.4103825,2.4124684 0 0 1 -1.230196,-1.161189 2.4403873,2.4424992 0 0 1 3.160502,-3.3234 2.4103825,2.4124684 0 0 1 1.230195,1.161188 2.4503888,2.4525094 0 0 1 -1.130179,3.323401 z M 63.384624,22.01767 a 2.4403873,2.4424992 0 0 1 1.860295,-0.85087 2.4103825,2.4124684 0 0 1 1.590252,0.590604 2.4403873,2.4424992 0 0 1 -1.590252,4.304404 2.4103825,2.4124684 0 0 1 -1.590252,-0.590604 2.4503888,2.4525094 0 0 1 -0.230037,-3.453534 z m 9.881568,40.86181 a 10.591681,10.600847 0 1 1 2.510398,-7.697876 10.571678,10.580826 0 0 1 -2.480393,7.697876 z m 25.654071,-3.753841 a 2.4403873,2.4424992 0 0 1 -4.200667,-1.831874 2.4103825,2.4124684 0 0 1 0.670107,-1.551588 2.4403873,2.4424992 0 0 1 4.200666,1.831875 2.4103825,2.4124684 0 0 1 -0.640101,1.551587 z"/> +</svg> diff --git a/gulp/config.js b/gulp/config.js index 15413cb..f34cd8e 100644 --- a/gulp/config.js +++ b/gulp/config.js @@ -3,6 +3,7 @@ module.exports = function () { return { build: build, + faviconData: 'assets/faviconData.json', src: { sass: 'scss/**/*.scss', javascript: ['app.js', 'lib/**/*.js'], diff --git a/gulp/tasks/copy.js b/gulp/tasks/copy.js index ee2fb4c..b01325a 100644 --- a/gulp/tasks/copy.js +++ b/gulp/tasks/copy.js @@ -2,6 +2,8 @@ module.exports = function (gulp, plugins, config) { return function copy() { gulp.src(['html/*.html', 'assets/favicon/*']) .pipe(gulp.dest(config.build)); + gulp.src(['assets/logo.svg']) + .pipe(gulp.dest(config.build)); gulp.src('node_modules/promise-polyfill/promise.js') .pipe(gulp.dest(config.build + '/vendor')); return gulp.src(['assets/fonts/*', 'assets/icons/fonts/*']) diff --git a/gulp/tasks/favicon.js b/gulp/tasks/favicon.js new file mode 100644 index 0000000..cabe0f6 --- /dev/null +++ b/gulp/tasks/favicon.js @@ -0,0 +1,65 @@ +module.exports = function (gulp, plugins, config) { + return function javascript(cb) { + plugins.realFavicon.generateFavicon({ + masterPicture: 'assets/logo.svg', + dest: 'assets/favicon', + iconsPath: '.', + design: { + ios: { + pictureAspect: 'backgroundAndMargin', + backgroundColor: '#000000', + margin: '14%', + assets: { + ios6AndPriorIcons: false, + ios7AndLaterIcons: false, + precomposedIcons: false, + declareOnlyDefaultIcon: true + }, + appName: 'Meshviewer' + }, + desktopBrowser: {}, + windows: { + pictureAspect: 'noChange', + backgroundColor: '#dc0067', + onConflict: 'override', + assets: { + windows80Ie10Tile: false, + windows10Ie11EdgeTiles: { + small: true, + medium: true, + big: true, + rectangle: false + } + }, + appName: 'Meshviewer' + }, + androidChrome: { + // pictureAspect: 'shadow', + themeColor: '#dc0067', + manifest: { + name: 'Meshviewer', + display: 'standalone', + orientation: 'notSet', + onConflict: 'override', + declared: true + }, + assets: { + legacyIcon: false, + lowResolutionIcons: false + } + }, + safariPinnedTab: { + pictureAspect: 'silhouette', + themeColor: '#dc0067' + } + }, + settings: { + compression: 2, + scalingAlgorithm: 'Mitchell', + errorOnImageTooSmall: false + }, + markupFile: config.faviconData + }); + return cb(); + }; +}; diff --git a/gulp/tasks/html.js b/gulp/tasks/html.js index e675513..4994e6d 100644 --- a/gulp/tasks/html.js +++ b/gulp/tasks/html.js @@ -1,3 +1,4 @@ +const fs = require('fs'); module.exports = function (gulp, plugins, config, env) { return function html() { return gulp.src(env.production() ? config.build + '/*.html' : 'html/*.html') @@ -13,6 +14,7 @@ module.exports = function (gulp, plugins, config, env) { } })) .pipe(env.production(plugins.kyhInlineSource({ compress: false }))) + .pipe(plugins.realFavicon.injectFaviconMarkups(JSON.parse(fs.readFileSync(config.faviconData)).favicon.html_code)) .pipe(plugins.cacheBust({ type: 'timestamp' })) diff --git a/gulpfile.js b/gulpfile.js index b8d0d8d..e217c8f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,6 +14,10 @@ function getTask(task) { return require('./gulp/tasks/' + task)(gulp, plugins, config, env); } +gulp.task('generate-favicon', + getTask('favicon') +); + require('./gulp/serve')(gulp, plugins, config, env); gulp.task('serve', gulp.series( diff --git a/html/index.html b/html/index.html index 57d4051..b44227d 100644 --- a/html/index.html +++ b/html/index.html @@ -15,7 +15,8 @@ <div class="loader"> <p> Lade<br /> - <span class="spinner"></span><br /> + <img inline src="logo.svg" class="spinner" /> + <br /> Karten & Knoten... </p> <noscript> diff --git a/package.json b/package.json index 962f110..3d23d94 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "gulp-jsonminify": "^1.0.0", "gulp-kyh-inline-source": "^3.0.2", "gulp-load-plugins": "^1.5.0", + "gulp-real-favicon": "^0.2.2", "gulp-requirejs-optimize": "^1.2.0", "gulp-sass": "^3.1.0", "gulp-sass-lint": "^1.3.2", diff --git a/scss/modules/_loader.scss b/scss/modules/_loader.scss index b628d49..a780a85 100644 --- a/scss/modules/_loader.scss +++ b/scss/modules/_loader.scss @@ -7,17 +7,17 @@ } .spinner { - animation: .6s spinner ease-in-out infinite alternate; - border-bottom: 2px solid $color-primary; - border-radius: 50%; - display: inline-block; - height: 64px; - margin-top: 10px; - width: 64px; + path { + &:first-of-type { + animation: 1s spinner ease-in-out infinite alternate; + opacity: 1; + } + } } @keyframes spinner { to { - transform: rotate(360deg); + filter: grayscale(.8); + opacity: .2; } } diff --git a/yarn.lock b/yarn.lock index afce416..430f766 100644 --- a/yarn.lock +++ b/yarn.lock @@ -239,7 +239,7 @@ async-settle@^1.0.0: dependencies: async-done "^1.2.2" -async@1.5.2: +async@*, async@1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -381,6 +381,13 @@ binary-extensions@^1.0.0: version "1.8.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + blob@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" @@ -503,6 +510,10 @@ buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + bufferstreams@^1.1.0, bufferstreams@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-1.1.1.tgz#0161373060ac5988eff99058731114f6e195d51e" @@ -583,6 +594,12 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + dependencies: + traverse ">=0.3.0 <0.4" + chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -597,7 +614,7 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -cheerio@^0.19.0: +cheerio@*, cheerio@^0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925" dependencies: @@ -1716,6 +1733,15 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" +fstream@~0.1.21: + version "0.1.31" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" + dependencies: + graceful-fs "~3.0.2" + inherits "~2.0.0" + mkdirp "0.5" + rimraf "2" + function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" @@ -1898,6 +1924,12 @@ graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, gra version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +graceful-fs@~3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -2036,6 +2068,14 @@ gulp-match@^1.0.3: dependencies: minimatch "^3.0.3" +gulp-real-favicon@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/gulp-real-favicon/-/gulp-real-favicon-0.2.2.tgz#050c9f68e55ef48a51e3e18eb86299a364391195" + dependencies: + gulp-util "^3.0.7" + rfg-api "^0.3.0" + through2 "^2.0.0" + gulp-requirejs-optimize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gulp-requirejs-optimize/-/gulp-requirejs-optimize-1.2.0.tgz#70c3f15ac17acbf22ce0c507e83d434365ca530b" @@ -3011,6 +3051,13 @@ map-stream@^0.1.0, map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" +match-stream@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" + dependencies: + buffers "~0.1.1" + readable-stream "~1.0.0" + matchdep@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-1.0.1.tgz#a57a33804491fbae208aba8f68380437abc2dca5" @@ -3053,6 +3100,15 @@ merge@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" +metaparser@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/metaparser/-/metaparser-1.0.7.tgz#c0699a6686a07a8bce1ac06b62e9462c2e66aaca" + dependencies: + async "*" + cheerio "*" + mkdirp "*" + underscore "*" + micromatch@2.3.11, micromatch@^2.1.5, micromatch@^2.3.7, micromatch@^2.3.8: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -3113,16 +3169,16 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@*, mkdirp@0.5, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + moment@^2.17.1: version "2.18.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" @@ -3153,6 +3209,10 @@ nan@^2.3.0, nan@^2.3.2: version "2.5.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" +natives@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -3222,6 +3282,13 @@ node-pre-gyp@^0.6.29: tar "^2.2.1" tar-pack "^3.4.0" +node-rest-client@^1.4.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/node-rest-client/-/node-rest-client-1.8.0.tgz#8d3c566b817e27394cb7273783a41caefe3e5955" + dependencies: + debug "~2.2.0" + xml2js ">=0.2.4" + node-sass@^4.2.0: version "4.5.1" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.1.tgz#e8e119fe3c8213ad7e56ca618dd231e9e8b30f5b" @@ -3442,6 +3509,10 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +"over@>= 0.0.5 < 1": + version "0.0.5" + resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" + param-case@2.1.x: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" @@ -3617,6 +3688,15 @@ pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +pullstream@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" + dependencies: + over ">= 0.0.5 < 1" + readable-stream "~1.0.31" + setimmediate ">= 1.0.2 < 2" + slice-stream ">= 1.0.0 < 2" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -3695,7 +3775,7 @@ readable-stream@1.1, readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -"readable-stream@>=1.0.33-1 <1.1.0-0": +"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.0, readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -3904,6 +3984,16 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" +rfg-api@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/rfg-api/-/rfg-api-0.3.0.tgz#42745648547f254f35d70edccf7cd3f465d9390a" + dependencies: + fstream "^1.0.2" + metaparser "^1.0.7" + mkdirp "^0.5.0" + node-rest-client "^1.4.1" + unzip2 "^0.2.5" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -3960,7 +4050,7 @@ sass-lint@^1.10.2: path-is-absolute "^1.0.0" util "^0.10.3" -sax@~1.2.1: +sax@>=0.6.0, sax@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" @@ -4043,6 +4133,10 @@ set-value@^0.4.3: is-plain-object "^2.0.1" to-object-path "^0.3.0" +"setimmediate@>= 1.0.2 < 2", setimmediate@~1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" @@ -4067,6 +4161,12 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +"slice-stream@>= 1.0.0 < 2": + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" + dependencies: + readable-stream "~1.0.31" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -4442,6 +4542,10 @@ tough-cookie@~2.3.0: dependencies: punycode "^1.4.1" +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -4507,7 +4611,7 @@ unc-path-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" -underscore@1.7.x: +underscore@*, underscore@1.7.x: version "1.7.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" @@ -4549,6 +4653,17 @@ unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +unzip2@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/unzip2/-/unzip2-0.2.5.tgz#4ef7a579a78c15c51f550f6a053db194149c8992" + dependencies: + binary "~0.3.0" + fstream "~0.1.21" + match-stream "~0.0.2" + pullstream "~0.4.0" + readable-stream "~1.0.0" + setimmediate "~1.0.1" + upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" @@ -4774,6 +4889,19 @@ xml-char-classes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" +xml2js@>=0.2.4: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + dependencies: + sax ">=0.6.0" + xmlbuilder "^4.1.0" + +xmlbuilder@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" + dependencies: + lodash "^4.0.0" + xmlhttprequest-ssl@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" -- GitLab