From 4b520be5f9daa2c7667189f3be7e98c5a428ab9a Mon Sep 17 00:00:00 2001 From: Cfp Date: Sat, 12 Jul 2025 10:54:22 +0200 Subject: [PATCH] feat!: improve saving locations Shows saved home and work locations with a marker on the map and provides a better API for saved locations opening room for more locations in the future BREAKING CHANGE: no longer uses saved.home, saved.work localStorage entries, locations need to be re-entered to use the saved entry instead --- public/img/saved/home.png | Bin 0 -> 10035 bytes public/img/saved/work.png | Bin 0 -> 8401 bytes src/lib/components/lnv/Map.svelte | 36 +++++++++++++++++- src/lib/components/lnv/map.svelte.ts | 1 + .../components/lnv/sidebar/InfoSidebar.svelte | 21 ++++++---- .../components/lnv/sidebar/MainSidebar.svelte | 11 +++--- src/lib/saved.svelte.ts | 7 ++++ 7 files changed, 61 insertions(+), 15 deletions(-) create mode 100644 public/img/saved/home.png create mode 100644 public/img/saved/work.png create mode 100644 src/lib/saved.svelte.ts diff --git a/public/img/saved/home.png b/public/img/saved/home.png new file mode 100644 index 0000000000000000000000000000000000000000..42cf8fbec951503975b47ced0aa1d4ddcf3636b5 GIT binary patch literal 10035 zcmZ`#KcbufKVYL7ZV z9Aq?P0H8Vr=hh1S-(Bx#O0uBELC!GL1%r+9GYtR;gaZH~3IMKALkJ`Q`0xP0fh7Ql zW&r?&XI_(zIO+z}T1`nFpaA@UV~G?QCDaI(r?QbZ0B|w?`-A*HO8KG&FzlI-qJ#h{@-lkg4vW{_$MJGg8h(ba_(t1j8ZCB0DUs*J$BD8jJ1Ur`}^X{R20~ zF7^`q-ecJ}H&>ST(xW3!$9*I&yrob-Tuig~>TL2PYFoM8EOq3xd%+a6I@O@pdGxd7x zSTpSSg5B|j`Q7KD$@5YAln5xn1QI8>M?GA|g=l~jW^0TV##fHZ=Zec$?z-VXm1tl9 zt(Y>btEnc`z|981fHdXFVLt73WPdMI>VRul|skSeFwg+HX9A$T&152UgLgZOf z`Er$G;$KJiQkM(l`Z@8%`%{Tf4YUUyKNLUct_@N?t3L71MuaP% zB{bz&lEe7W_<$qqhaDsOzcha~N6pM>ytMr*;jON?_V_&S%C)5%G|^xn7(ys&{qT*B zS68AIzW?bQmXyQ*gonAX`$>p8`=GEwJ~snu;&CdM4&2HMK0S$rg-0{$cAdQ0jhO2prws>@V) z=V_il2>~n59v6$O%fqFigv}=e&jYHh8ZfvY5~C{F_DuV2T*HW3gHnk;w1DK9Z->He zs+>|VxQ|P;EyhQ<$+XSk#T!)NNepCo49`yI&EHh{v}2^WU%U>)?J0f-PhuxaTP|QD zQAP*H>0OR$!o(hnU-rU<4;-h2Sr*Ywg1^He)q3I@2$G#4xbgH0ej|~)%Myl0ayOTs zJKl)nPsb!6P1rxRVDWtBysxETab4Q(Bnd0=lp+hTPsQ4`vz8ZxDDs2gWYOGLWQQWi z&SI_A(jt<8M;a=kkxELryqAHz#h+LedC}mrJz-xAx|;IchmJ`eI&YtWwlQ)h1%>O2 zL2&(^Uzy?D_>HG${q8j0Q{`H>!qEm$tu^PqR7rbJSLZCi=H(_hyrLCPY*nvKEvmN* zgw}^Ipj2m9`kdJ^iR->qNy4zHH#zx-9o3@zLel<#^_(*QHCcR&5U8(ot3k}pb@6B4 zp#~k*sQgTe0hhI{6#rCLIrT&?7LOw7!@ek%i=TFJigxVPM>IID5XziAL`W=?;P;Vl z%{f;OyPAx#udvQ33x}=e*m1sc^T386l<(u#xxs};-Zo3d6v+lm?wo~|omFj{N5sfZ z2qkk|`yiLiG?(z6`^R%hqOgo4LLJEt8iRi8id^8m-)Uhpso^i(3p1uPadYwkoSnLD zA2+ll^JoG<-yzuFBbQn&MW+^@>2&1r4zEumOhPnv-bFf5u>+}p8(Y@mA5x3sGNxUV zqD)63R_ky1hV^hv&X^x$M%7WkOxIF38O_b5tHPZY98+g?GC+wl6c}#{oRU9elDUgl z7aUw+x#>9Cos5X^yL0mXM5!VX|4@79K4SipZ=`-Ps(N4tF%LK7Dc6&NcOVsRO)i>v z-SCc1NtPV0qSVAL|%}6ZkxbDaQHhaxKCYE|9WuQKH{{k^vbJ<>wS$>5j zn}TB4g%YV>XUPu6^eg)nf9|e&N!0Xll0dwAEm=ZIJVy{@khmpfy4$NpZB{p{geA}Yu0i+E0l)2`DI4ON zsny1yH-bnVYXzM*@<+Hl#)Rz_Py;vbsepSCKFQ49WC{P5s8EZos}P9GjK?owMMyNh%da*>&iUm%iF>DQWG43&O9{ICydbEk}}*^xDvysB6`gC zi8(R5Tj8u}F3RBB!jw2_@pzSYww3Hg7i_A;RRqsHu8uzBrSu@NeEsNt+K0HnWVgsu zmleAL_jteGW{QWp+}_8cV)*?=_mO5x^{~=%?PIQCx?ESBMK_TGcn6Ext#3(^u(0T7 zp9WQ2w_(do77py@oUQAiSM&a-BhGC123qhU=pQxo5gHr3fM3!r>I_cMlTBYXv!!=v zaA;#0b?lYj!bB5UX6pK)XK#wdU2ph>=Jh5keO&hZkixBJ>8uEpQ1vz_C6LEAJAJJM zTYN61U(3CkX|<2_>|!ZDl=EgLy2MWxQUay^WFluSM@~RuN%G`=DUmqC-D{dUCG8u{ z$#SknmW1S!%`FUs07vXi|KiDzBaz$FK>F&MmxDZQ9hT640ZSct>+k8{)oFpY!*| zW-~?|+MegwNzjxyq3ZBd0rV<(w^z3;|1t>7if(Py`=Mi0F5VcMWu!rCR@ML72K&y& z$`wD6RqES2KZ2t;DISLKpH10Sm;FLXqwlmC$P4Zll6C9jIbxq5xuNIYv9?F}h<#4? z;Jp1H7W?DVqNj$EOl@Jc+BXD6Nr{!cBrAIHZWezL*=ix^sDDj8aljjj~f?bG>vHXzWTh&7(!<%E;j1?Btf?# zoI&uV)$lz4FMwA4%ED-9RYR9bdm#spED3d#Q3)?Sc({0xPG8p0e6l4KeCaOQHw557 zv9m;aB7|TEUpF}(OI+^8a^1d9gGVS|A^Q!^o{(;T!?oOIy|*t(+FkxUBm4~7U{&Sc zq~UW~*vhb3Ewy~QGxk6(1&EMs#JAs6S!UCg{G7@Es)jAkc~y-kTyKX&R~qk$`RRzjy(tcFG$$(8RHPHpal^&+V4jJvlYhe5Sdv?x)V30;{WT`3h!lA{L2YpPNeMtj3^vHkXTnz1E=uci?ZTa&1jq`Kg+xsGj zQd0e{5V?OiS&}u^e#3ug4jC9*R%ddbw01p4)3f@&vhN zwE9)9o`O~UPdGU2=1BG|y(=B)? zu%O3gv-X1RUjHaMhi%$>`H#PE4j#eT2YyKWoT0osk?Y@oY1O31^x--&9GYbTx4cG9 z+^sXoWQ30sG@hLG)6r;6Sd|6iM6wMj;Qn&KT3nVa-i=X1Iai*)SEkn6-9(+MGjr;M zKeO>@dO;zDhb4>ctfD6!#ha+92=@LueZ0^(9S?I^!6K0Y@;o0kI#f{8hwMi!mmTAG zO4zviZ`zB>rLtEElW^2fX})T`L{`)=2AUQLqt7yhe< zb{rtM*z|gE6I$RrfaR_e9Nv~td(Th6A~G(64X6V5dfS+bhD>f+BJ3Z2y$^#%3WwVE zRz36SwOD7cn#AxGZ)W@6@5YL5SZC4ohvTqurf6+Y@D&)EnRSYPMA&2IZ6&da`Yek$ z#MfNzpM-zY#(c9o`PmE}loV{f$ZKZV{7i=LDpFFR@H@+uyuD>OLGv-2@VI&E$seiZ z>f~d_OYXm;YDy*e)%qBHG@wJ#t&hT|w8tD9CkJ=?$k!DGmt^Rd4)qke=5BL&mmo`< z{G`FkB`;)@(kyL+Car(Vi!f1pvMGES@j8lhkbsz7OG_l~#xf`SE^nAB)zX*X4}TLQ z-A9a%d$90?4McZAbpGSY2&=ErDx3}-JVC%;Ik-FiF8 z#7>T>z5h(xtBd-ruYNor`Bb`A3V2D1ASf~B@ya5D%SfCyOJJLuyYxpqF*h^o+|@^1 znY0?#Ea8_Vd}2M}bf>rOjrB8`9F*VI#KYs89J^;5zve*_)Sb^uMRszt8EWTMx|bba zD@vK)mw_vP-X7kL1miyhHRByEmo9H_6wcD!zNkn%W&}N zx6RJt87}Hz?@S8!l;W=-2+l)F!SAg&W{=k#}{yZP5h5tt-E!AdmPuL=^lV3f1W%K-v{-4EZy zPqyMZl3SeZuTlHnpY5L3LtlF4&e(EDxX^Xy8&5ZVV-FlKkLfdGERxk%`5}|euj6L~ za}N2i3*1z{W8`rF?NknZ8X+^4`(Z)pB<+hoBl#6HJB*Ah$Iiv+C|x3F%eP=?u*;gR z6K?psmTJiA_nP!wP6pqP!IL`t-a8Lgoi0%!MpK8P1;j1 zLKi=e(f>F^jLY2M6c>bpdt}p>>u18tz<)kQ2${B5%XzgB>PN5j1WdV<(aCYKnD zay@SG`s9xvt-n~biEaD&D89^*f=^|~wTvH8<(P8!=+U!bNbw|`B;EvN$dzR? zY}V-!D_wCsXfN}(ArGsD{warQ(WeKtVddKgq9)OB*l_+r%QCuAFO6d^F1}Pdzh_Lx z8>UWap5)NNZ_LJMdU_>_mk(2zM790PmO8vLtSZ=&E5{uYWu_uZf_e`M6$DwWW6872 zG$$$t-w_J7UJoMFp~A-M@joa(D|XXu)}WP3+8(9_C1aMia%fL;=gg3_4_9pXxg1_D z+H;>b;Y7$m$!|v!d&_1d)jSd&`SzfY(LXehijI@d-XUDM zZYYWbB(jSA)oj7B5ks&!u3L-k6XWV9ccta9+v#MBa_?=3pqfs!yZy$Mm;H)ixjUml ztz4gn0X4tujk6WJ-2PLvGV-DSyH)b-v`=5|9sNP?X4>FE!umFj?KNA)%d|`Voe$KF zf4JStSC0`&z5I}UA#$l^W<2k&{A-{HPr>1s+WX3{f*GKdg5j-BuY+&LFHmbk?PR!8 z!?Vl}{--D8+~#HuvC|c6HAD7Rye{Qr4L_(j*a+2Y*XIHa*RMU3y>JFvHd0!OVW?RJq4+!0G9R$JEdeBpuK%GiOy`s ziM@n9T=EVTZu+U;zS-9z_0YTK{dLp$5E%?mCs3=6APcRM zR68w~TEASSPH(31_fhWhL$ewB{8>geU!TU-`-->px@6g<>8Nj{RhV-c*~NB~nXp?5 z@izLU@)jdJ>!@b{TbQ9y#Y0*F8=4f7+~ni>N2pZjc{nZiapp@O6{Rm5`iRWOXtWvD z5^@vGxd?Ia4*0pj4dXB`rF6*qb;4!i`Fg8Kc#KdUf~>`}MrUWLvjmf70B-Vi80_cC{E}`p(7;Vucyu^xY0z zl@20|V#MvBO9qKNx>6vF;Q<^-)e!Im0JDowK!F4#@RS{m0aK1rn(#@(0$%l?3K1e> z6Sjfjgln8A-86vE^4xD?0guw5xHGp-oU+k#7`)!rzc#I;MAa zvHlPY!p3yTD4mtM%dy}Z@&+zj58ZrTo*v~xv~{rRnw6!j7=#v5%Dd1>8qA77N`67 z&WQU~dEDjwt}bpQpWYKf^eGi- z_(0t^2fDYs*Y~solU12=a4I9Ccc!?v&q# zfz^WvK(LNHApcwTLCixyDJ04$(QpL!6RO7bMC;dcZ|Lfjg)KI&L_W)eRHBSZ+o0!q z8OwUqy^+AD*E0WMUZD`^IcRAuMFLs#m*vI64PBU*=N7?&OurZ=LMXfE;|?VxalF1) zumx1&fgW}yggOpPx)_$*&BUC{e=M#3!_!1bRgCrayU76XQs&1<&-@u1aRyeflB^hX z!rEM@Tb29qWSxdXr+oD(_b_6)j6pflLEnlJYEJ?dni|YQQ6h4lz+YP$yDtK+wm^KJ zvo(U9?q*(txZtJ(t5Av;%HWAh*F2rzTX7Ya+^zWiV-Gdr$rnt-oHG`is+)4?My;`w zbt67ElPG4#`}>|yC8i8aM6x)BG!Y;}DTU^^2u%Ig=8Q>+q&Za4h@%)WKka7VA((&& zo*0lk8E9ePpM63t6T1L;lF0B1Czv#0puMFFwD?g1D*&Jh?no@+s8?7YtunBl1 zaA%M~l2B7mc+NmOYC7H=lcEzw(PdBN;{@1>?cA=F@z=j##grg^i2cjg)Sfz;{!!Z5T|5f>8v7Y^@qp9QDzEx$67qgLhUpF019RrNW1sN3=tD( zC@cVl6%Zz8yiWi|m?E>m>SsGxvfvRK%Lt<+ciC4>Kf{a||9w@Qp5opjC?V%d)jJd}y@dq-(G57V^SlCg@LHqF77Oy}oE9?Fn zYO$ID_hGh|BPua1kF>#83v1GBi4G_cYOI(f4?V5Sbkr$ z=VFw;?l$Hlo?x?bov4NqVRPfck1aA=TJ-LzsFK5f!rU+QTI&}SLTyjODKqj5Ag|`L zLZ8!Q&K(78yyD_qYh6yT3VC8#JhCZddb({JDdY_}yCkKU65_sRUvF2LYL3PFqt@#0 z)vl#W;O3DY5muOq@`{ut$n_cNB>#96j)mGk_>3&J_}cJzr6AFH`SEC%<)EAW02Wm( zC&?;4)-Vu)18G?`UTwh!7rjlE(Ik(>ck6B^D`9m$U^#3rmH=m2JTCGhIJbW&8|QjK z^4xfhwc@scK+dAp<#>JdMF4> z-ex{QjLh;FN+9&h7w-BiZ{pKs!=dk1T8g-*vn$P;5B%)hBsNp#Q_KK^r|IS7B#OJx zU`IE7K$V^F6O3m>m0F#9W|||*8{y>RcjBT;G-r*K_Dl%RJjauBroBvO4~r8QDW0HK zjLKlgeljsus4hxp`pU|N?ap&L)42_oLW{?iC+DYycj4?DAQL9T=#9_DSQl+}{k$bY z4$HiYoO`SGGUMVPajj(Oq&Tf-+D6;m9+EGd_%<;B6jBmwQi%xhZfP}w0O=zIEUmAemfHa#hn?rcmY#0#$QDlWRk0Vyg_y|M5ouCN9;_3{ zEAUh~Cq#0hbZS>;;{`{Ki}4^2qIaZ&30jb-g?6Y3yN4h(bJtfk}x z!e;Rj;9BP)zliIY6H9*8pjTW@M}wkl(EeNL|MV#0G6rwD0{NT;u6HY)_YEW$G7+l4 zWX?gcUqJ#v%n$W`h?8=M65=!8WD9;5R3?nK4gHKryLeb@|r|;5WF(>+&XA5iRZY2$h{ormLjW zmev34pI#z2H+do7p0`Jq9M)I#MD2{MO{?f`8XDPw4Kly;q|LV7`3 zl#z^Xl;S)?5p?>x*}3fj)$yEa~92JlD=-R(p*Esn1ZtuUNs~){~nJzB>vKHQDsq;>5gl zetxSm4vPBI8~Zk=I+%$Jo9Np5O8zKOYM)4&B@N|CTX}~*z(-dS$$SIoyTHKCI z64IeBVUXPRg+K@9(bucz>T@ZVf;K=JC&pTydNVlcFFR^--Zhe4p`%YgOlJ6pPq#Wz zu-)Yr-}xW5*W;-|;T3H)=EYxoDos#{LASnnOWR_!paU|Ln<+s3aAYf7XY=S!I;hkY z?SCOo6#?S-DE=}Y?It?+=)$?4N+WPw4<-uMtMZMd9zQ;vjAJ40+qOeNviN4pmHL}M zyMQjiaCmc)M)OKm^Q;_mdYl*vf@7yAyw)q6>#f8AW6ncvUu^8Xb8`7?fQX|XW`npN zZ+0z6O*dWopmfX`k?xj>MZs z+|oT`w^JQ~QhH#m)_4m)C}BL-LO$QOLm!*J@F5(+$v?*5@HFO|aQ z!0fh32%((Z!40;c@!Z}|Srys)Ky1C${?8JA8}P@RVQ~*vI&4z+0ZhqI%~@5$hIHbn zo-n?4y^hOp`Bc>pm_Wty|y5PlXej^k-Yb zZ$R=kkbj*Eb^VcS_s6WP9~j1Q`QEjt%a`B>4`HoWK?y%&0Ud2Nbe!wQokLUyk~!Gw zgWEiArEzW1X=X|e0;kk-KrwGP3ZbDTqr0_Er}lY6$Me5E1o9tD7T-{`zr$lNW-e`I zxB3}MK)0$njK*B;Sc=80+8g)nZxZM28(xH?IsiO=IO;~>NJ~#9o}ysJH<|J5jqu+l z0Vp6JMPQh;;rW(=+BfLrcYEo6TtSvMZA$fBZ6LEk^+?f=N z-*CqJj%A(n)Rzvc5SM`qm1&_$z*Rr82t1BaRn*90G{Jp48y;^2mR&SjlMit*{RvAj zAHttH9EHjtA94HAo$EAgQ3kZAcXTj;P^l+RA})%Nw3H$M5hbTDJGHv-qBmbqvM0pH zxyDAW>q=V{5E}e2BbJ0A_L4W8+lmhAq7t0x4d{Pw0{QZg|Jy91Q~6Wn(iUjqK?73B ziuUpd-j=W)mSvm_rOkZd_AjMKXRQI?tEm64U#Tx(;@>Qvt>U&N_LprW$n}vmCvj+^Yxu%6@XPiDt6g1_(%34PJ58^qDy#N3J literal 0 HcmV?d00001 diff --git a/public/img/saved/work.png b/public/img/saved/work.png new file mode 100644 index 0000000000000000000000000000000000000000..80bd480d5fb23597a8d2f9c006da14d41d0eaab4 GIT binary patch literal 8401 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%0Dab;5_ivO#UwxeZ0f;{ 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 WC*rw0x8p$}psu2=T&-jk`Tqcn32V#% literal 0 HcmV?d00001 diff --git a/src/lib/components/lnv/Map.svelte b/src/lib/components/lnv/Map.svelte index 887c1f9..0491ff2 100644 --- a/src/lib/components/lnv/Map.svelte +++ b/src/lib/components/lnv/Map.svelte @@ -15,6 +15,7 @@ } from "$lib/services/navigation/routing.svelte"; import { location } from "./location.svelte"; import { protocol } from "$lib/services/OfflineTiles"; + import { saved } from "$lib/saved.svelte"; onMount(() => { window.addEventListener("resize", map.updateMapPadding); @@ -23,6 +24,8 @@ let locationDot: HTMLDivElement | undefined = $state(); let locationAccuracyCircle: HTMLDivElement | undefined = $state(); + let homeMarker: HTMLImageElement | undefined = $state(); + let workMarker: HTMLImageElement | undefined = $state(); const DEBUG_POINTS = false; // Set to true to show debug points on the map @@ -63,6 +66,7 @@ class="w-full h-full" style="/style.json" bind:map={map.value} + bind:zoom={map.zoom} padding={map.padding} onload={async () => { map.updateMapPadding(); @@ -119,7 +123,7 @@ enableHighAccuracy: true, }} trackUserLocation={true} - autoTrigger={true} + autoTrigger={true}"" ongeolocate={(e: GeolocationPosition) => { const speed = Math.round((e.coords.speed || 0) * 3.6); // In km/h const accuracy = Math.round(e.coords.accuracy); @@ -133,6 +137,36 @@ {#if pin.isDropped} {/if} + {#if saved.home && map.zoom > 9} + Home Marker + + {/if} + {#if saved.work && map.zoom > 9} + Work Marker + + {/if} {#if routing.geojson.routePast} diff --git a/src/lib/components/lnv/map.svelte.ts b/src/lib/components/lnv/map.svelte.ts index bacb900..b68eebb 100644 --- a/src/lib/components/lnv/map.svelte.ts +++ b/src/lib/components/lnv/map.svelte.ts @@ -7,6 +7,7 @@ import { view } from "./sidebar.svelte"; export const map = $state({ value: undefined as maplibregl.Map | undefined, + zoom: 0, updateMapPadding: () => { if (document.querySelector("#sidebar") == null) { map._setPadding({ diff --git a/src/lib/components/lnv/sidebar/InfoSidebar.svelte b/src/lib/components/lnv/sidebar/InfoSidebar.svelte index 3910851..ab8342e 100644 --- a/src/lib/components/lnv/sidebar/InfoSidebar.svelte +++ b/src/lib/components/lnv/sidebar/InfoSidebar.svelte @@ -21,6 +21,7 @@ import Reviews from "../info/Reviews.svelte"; import MapAi from "../info/MapAI.svelte"; import RequiresCapability from "../RequiresCapability.svelte"; + import { saved, saveLocations } from "$lib/saved.svelte"; // let { feature }: { feature: Feature } = $props(); @@ -170,10 +171,12 @@