From d29b4a89760a6cc656fdac87ffd82dfee1b9c974 Mon Sep 17 00:00:00 2001 From: Erol Date: Sun, 12 Apr 2026 15:19:39 +0200 Subject: [PATCH] =?UTF-8?q?Endringer=20gjort,=20inklusive=20=C3=A5pne=20fo?= =?UTF-8?q?r=20html=20i=20hovedbeskrivelsen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/public/icons/close-soon.png | Bin 0 -> 1152 bytes frontend/public/icons/close-soon24.png | Bin 0 -> 572 bytes frontend/public/icons/closed-open.png | Bin 0 -> 1993 bytes frontend/public/icons/closed-open24.png | Bin 0 -> 873 bytes frontend/public/icons/closed.png | Bin 0 -> 1204 bytes frontend/public/icons/closed24.png | Bin 0 -> 602 bytes frontend/public/icons/discontinued.png | Bin 0 -> 1507 bytes frontend/public/icons/discontinued24.png | Bin 0 -> 730 bytes frontend/public/icons/open-soon.png | Bin 0 -> 1114 bytes frontend/public/icons/open-soon24.png | Bin 0 -> 565 bytes frontend/public/icons/open-winter.png | Bin 0 -> 1489 bytes frontend/public/icons/open-winter24.png | Bin 0 -> 656 bytes frontend/public/icons/open.png | Bin 0 -> 1157 bytes frontend/public/icons/open24.png | Bin 0 -> 583 bytes frontend/public/icons/under-development.png | Bin 0 -> 1293 bytes frontend/public/icons/under-development24.png | Bin 0 -> 609 bytes frontend/public/icons/unknown.png | Bin 0 -> 1307 bytes frontend/public/icons/unknown24.png | Bin 0 -> 633 bytes frontend/src/app/FacilitySearch.tsx | 122 +++++++++++++----- .../rediger/[slug]/EditFacilityClient.tsx | 6 +- .../golfbaner/[slug]/FacilityDetailView.tsx | 58 ++++++++- 21 files changed, 151 insertions(+), 35 deletions(-) create mode 100755 frontend/public/icons/close-soon.png create mode 100755 frontend/public/icons/close-soon24.png create mode 100755 frontend/public/icons/closed-open.png create mode 100755 frontend/public/icons/closed-open24.png create mode 100755 frontend/public/icons/closed.png create mode 100755 frontend/public/icons/closed24.png create mode 100755 frontend/public/icons/discontinued.png create mode 100755 frontend/public/icons/discontinued24.png create mode 100755 frontend/public/icons/open-soon.png create mode 100755 frontend/public/icons/open-soon24.png create mode 100755 frontend/public/icons/open-winter.png create mode 100755 frontend/public/icons/open-winter24.png create mode 100755 frontend/public/icons/open.png create mode 100755 frontend/public/icons/open24.png create mode 100755 frontend/public/icons/under-development.png create mode 100755 frontend/public/icons/under-development24.png create mode 100755 frontend/public/icons/unknown.png create mode 100755 frontend/public/icons/unknown24.png diff --git a/frontend/public/icons/close-soon.png b/frontend/public/icons/close-soon.png new file mode 100755 index 0000000000000000000000000000000000000000..e8f32a7a1f9fdb17b0b47741ff47f0bf9729dd99 GIT binary patch literal 1152 zcmV-`1b_R9P)C)ux+}7pE-00A^(xJoIufW%>$=$fH&6l#ynZDMl$J?~r>Co5a%irqM=J4L`_U`)s z`v3p`|NsC0|NsC0|NsC0mb`S6yKuzXvCiPW%-_4v;=s?~!P)1`;Oy4n?AYV&+UfG+ z=(%7$+vDxp;p^Av z@ZaO?-0Jb-=`U@vN* zI{yFuZ=*q>!-M+#`T6_zz}Kw0)TXY?m3ymEbf-vdqCaY(JNy0n@AT^8?b_e!)zIO> zxYDDa!hwplWPPku_WAPW@7~+#(9Peyr^t+>#fF@~evr9rgRonGuUPZ<@app8*5t|m z%)QCox5U}9|HZQZ!L9$Yng6ATn!kE=r%7|BMsTG=@%HWi>f`6|-~Z>{-09K()5ibO z!qMTs%ig)G%aPi#hyR{{>7{?1zWQ8A}3~TjZ0+4sKS+EzSXOE4x~4fE4!#HQ_vQ zHr5%EGq`w$SCkPpJjZ1qZqf~`FN#VcHjaR`NqLBba8zg!5#=K@QF{XLd$h^?Tfo;& zqZ#0Z&?aIT$lN3|a2(Miksx5E0btFkN1Se8fa(FC&?CYJ)RPrh(I;5&+(xJU9PpHrJSeZWN`8co6VOep*N|N0^#Z1TYuChujjnE+>*A*JzdaKW7= z?*Ws2;a%DZf;+iPg&M+;lhV7NzkPVUn^u1By0#*@TMLaAhDp`c1r2hcQ%xS4D#g(_ zm2}%(EY~c71XQG^g*56kNyS%kjWlbiEw1S# z?V3{xscj*>3@4Dw7)iJGzT8WDMEXtmnb@YOTFq&6-=OLZrJCqJbzJJ8(*6SLsUcy_ SM{m~v0000k}@P);M1%p2B~n#)zWEg|^V1z1647-n!1i_D6vR|LU zf11C0p~Qru#Dt;3gs91lsmYJE(4E5AuDjEu!q}|C*s;gkwbS9l(cr=7=iC4P|7f2$ z|5qaaub1lbtpA#Nsj_pzr*4tB zZM3Ux|A}OktYH6rQvYo}SmE>30000YbW%=J0Q>m5pBWGY^6%);!IFJq7yb73^Xlr~ z+}qmOw639nb0}t7R$l-B0Od(UK~xyiRmM~ z13?Y%k7UksW>92XyPWYo%SKg$k^K3ZNn#BRog|3-Kkvzpf}~S!B=ZL$Jnu?~;XG4Y z0~QR07DWLYz@kX3L_}nvE$ka50`^Wa&_wD?}a zF3`+;HNL)GtM@+Hc7d}nRy6%q;>Xeg;I?Qnx%u@TZzl`l4phAnQTYCmhD7-($_{B+ z%hhtpDi~d$s+(!qz^daCw(PYy&Elp9qyDD8F**r%9Mn7NL-!A&!6#HeP1CRd0000< KMNUMnLSTZNOgz>A literal 0 HcmV?d00001 diff --git a/frontend/public/icons/closed-open.png b/frontend/public/icons/closed-open.png new file mode 100755 index 0000000000000000000000000000000000000000..d0fce16712bdd19421c11861f1663f4b1430006f GIT binary patch literal 1993 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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/closed24.png b/frontend/public/icons/closed24.png new file mode 100755 index 0000000000000000000000000000000000000000..11f0dbe0c994b5047ca197dad20aa7ce4f7ad286 GIT binary patch literal 602 zcmWkqT}YDw6#Y<#GMlTGq_vT57N$`713|-~PO0IX`_Ud|LnpWuq1Nmn6J-tjD;qj# z%^&!bF$#x+Tu&=15$40vilu0q3^5m*wg`newNBp-_nvbf?zxwH2c(kg4Eh;5K@bel zjS4xXC#cLwNu)UcU65kpmsDI^NhwSwR8>JHgF=C(CX9_iBtm^XfQAH$$mJc{%ue zaJfiNM>L8+04pn4UWVHZmkT{T=I+1V%bj_U*K_AUovn$`^lmY`TK?|^bA+KU(hg^(kvqx7yc&YA z3ImE%l6BX`jio&-xp~wDUB6$E>w8(vv6|{%_mcUq_}b^}xrV;;w;%BmpUqDv!?iSE iRNGlvE#c$%zj-bfl;oMO?M+yy9}uESNrj`l(eNLXg+O)y literal 0 HcmV?d00001 diff --git a/frontend/public/icons/discontinued.png b/frontend/public/icons/discontinued.png new file mode 100755 index 0000000000000000000000000000000000000000..06ceba567454c63fac9919cb15a59954ff80f251 GIT binary patch literal 1507 zcmZ8gdoPQhm{mG!DTy5SMbVfdn{d#q4%HaB zP01x=TTB=uhL#$m$TGQKbD3ei`B3PZp< zdLi>5a*l0BBi-SS4;6)yv+{I1=Y%|gMuYr(Xl;eKILOL^q9SN+hMpeq^Mlk>sHgxA z2in`AuMfmx7#jnr6#j?kXvoO{1_R23=YELBFxOd>gsn&5($VzaCZj+0q}T8N&+SmSS+ZohngChlFCY%m@i+TqXYQ- z@BPCE8NWy*tI0{2n*)hNMu@mWfJTFYf}WlpP^tR*`r6vsuy-%4uS+BnA)*11nx0Ol z({VVQjg1ZH=!}evKub$`d3j`HWO#UZU|=ALL~?d^216OJSgcI*}-rlaRt|v~M04#Q6V`FA!Ml2SOj*cRhdjx{6t}f{89TulZb59%F4{l%-Gl% z)YU;*8Hs*lWks^Iv^+fmpFfL4qUGU_-AGcctuK)T+3do?!Yss8L_~0Ka8OW?zrR0) zLLrmM78Vv54CZQlgc3sG65-`RLT#?k{=2?5!`s|gnjLEizhYy2Sap}e=DJj}wz9G` zF)kEzwzJEh7G=jdIh@kjx+%kkWNme2d2xRBt9Yod?l~*6+mpLdpQDrz6Kwrf8jCy;`I-&W8aX!&Ms7#j?Wc} zEG%lxtz(C=VM_ybCG+zob*~CkbRWL$Vf$Jd8J&zV-8%5pbH})Yr;+ks-TinyGlo^? zWd+hyra|siw6>-iO}l0woHnaTyJ1^RCm*FP@GQAWQ z;m85Bu>0;O_dxDFv3#y+Y~rm+;ZO4XI(!SiX2j~ja=UlS0q?D=UUWzjd{V^R5-ya(d{u0uE8(^bbdAnc;#wCsBPy^16sgYrLVigsn^4;gvp@g5s|HLsLQG|?(4tFokTkQ0Wx_Gv^HJBki_5KhzU zsuziZ?%{r${Z97=(IF)Hkt25w4_5?N*Po_!IO(|9HuER#-AyFpq&~61?pK9lMzTE)K4yYac;O?v%6 ze&N{h@l5wZv`}Mb$}5KT;RP7opZ` z!Y~!IJ`tB_ZuL#AK}BxbH!0!8$upV!gr~PvSV|#{7)bMx(|uC5XH-!Xy*-F<+fVGH za9h>RHdMWb^7c6WMF7=<(96pXUTGeTtfs4Rc8FDmGPWIU-sp-nP6oU!LveFcPE;1u UCjHIdANg-6f|G}1g*`R-KLW~BNB{r; literal 0 HcmV?d00001 diff --git a/frontend/public/icons/discontinued24.png b/frontend/public/icons/discontinued24.png new file mode 100755 index 0000000000000000000000000000000000000000..1bce19801d9fefe6d5947c84a97ae2d38d352505 GIT binary patch literal 730 zcmV<00ww*4P)$ z#lphEx3{;nw6wgZr=p^www#=rnwqJYn4yl2h=_=PX=!#%O?6C6az{s{Mn+CTLbN|W zLpeFhFff5GF2^k`uPrTnEG(iaDZ3>lup=Ya9v;pd9Lg6LyA%}v6BFVS6WbCJ(Gn8w z5D@b0000bbW%=J0Q$NZ`1kY#{O{`M(ZPLU68-bv z+}qmOw639{pq`zRkb!e34yyOpXaE2K6iGxuR2b7$&DD0oP!NUTiJ?X6?wxZYB#_|l zb$55y_rGh5QohT7&0Yf*jt%e(A7D9fO){i)R=a2sX4(lM`MIjEWmom;iyX4Tlzg*C z(Gn})$}<2Q^IFD^!Y9K4OAJL-Q!2(Zs-Zzx2>$FKl`3%*OO*s}wu8XeHB==jVdhc> zX@dvfxrmgC=1p8lAzt}Fs3*|kzH10D^u3MBMlrveFK&sr-X4VcCqt96Xvs+F!>>62 z&%-H2hj{!bcmXDwmwL<&O5vKY0O0kLyZzisdO3G+PlP2fg_DH5)s9X+2x*RkZJ2cU zy-rzV+>l%V*R1T6KKL_g2M^aRQIE9=!#|OJchfcYJ`jaoBN1@?0&HtC!<@hyqW}N^ M07*qoM6N<$f~-U1n)^t)4Nr@v8>{4Zxmial<8I|f;{0?V!En;q1 zaN0v^8QN=U5Wjzf%TXy-tyHSb=GP6Cl;pE~|JvQ2yXXDfbN4*&_v`a{o-!IWz!+_X zMxju~lt5CLcD2_|4+CAT`j=i|qEI>&wBQJ`b_-);Ff@ed?b}dN0(EszRR#C&LuV&Q zBrrDzN+m=`Lw!9oH^Y-BAQr>I0xU0sR0`YM@V~)g0hJ1YflyHaTrTkW(9;7V5%l%J z^fb)Q!qO7Fcmb=cu)YrO-ho^W2M35pem*ocL3cMyOn^)V!^6lGp%7ts{v1(l=;9)h zs|{7D{)^R?z_16k8kiW+(*rab%*=qvL~Qr>K_Ea5Z*3v8T9dXmq&h8ITpZZiA}JgW zWM@NG7BCnI+;NXv%?PoxjVMVwjzWEer;z+2E=(6o5~8g9%t~as1{`LY z&^m>$5YA4=8}dFaFEGp9u*$s!Yq;vskF)nR7j~m_*WE08Di`tlpEHExm*#@vFK^Cz zqvxoHSIDc~NnS>AGwZJIF^^Aqe0`|;JCPnPs_u`ErH305DlvSU4{8l&Zi*Ovj20E^ zbPIJ<8EmM)I64wJiU||8&F?YZ2?H4(!(ZP0O?W!;ygsUD$n9HOHjQ9mYHpx&BP5I) zqSNe0=k5rcc#E8$k_JseokMfX2NLq?P5X>+_F|KhvW@^!s*qsMY}7L$q+4TK*`Y%| zCk+YhWoOvE*K7Fg>_VTT&n8{&cn|s?uyNOFI5=Ko^dLXW%kUX}Wrl)1@sQd~z~Xf- zU3GkwKmN?Z|NAAE$o@fJjH;Jy+!0q8@YK#q{^0B`>2<@lDSh6uT9B7BG@0S~i7SVN zQ^*^73yOzVGC{?S(KBTqx_hP{Gf=chv!&&+MD}YQ|9vuH$;~^e)OPQBxX#ui+H7}t z+9Tb9&7G)!X7=8ny`kVeZOapkX7ww_CK)2>X;FPu#7?_)@QR_nZ)TTkfeeqm=@m@Y z_3Dz#H9xPlNbwcYib4 z_ovex>8oUXvY^Vvc-)A*P(%?$O-jDmu{dwa@D(&wiLs4;#g0vuyAQD1OWYp5`Jz_; y-o$d^8FpWB=ln0EgUsHSlDfh)iAK;6q}FdoTW<9@yiL`9N)&}mC3O;+1^)sh27ML) literal 0 HcmV?d00001 diff --git a/frontend/public/icons/open-soon24.png b/frontend/public/icons/open-soon24.png new file mode 100755 index 0000000000000000000000000000000000000000..7bb0c4b3a0ceac5b778f06c03a87ffaa1343a9c2 GIT binary patch literal 565 zcmWkpe@K%75FN=v7XDh(R8}y*NiEtTmIS(i*x!Z7i&RvZl6Vu#nX> zHk+7!fk`+mEzq<=4QX0RbD3CUnuCR+87x|h#p~N~_ug@L+}*Rtq~!^$OcsN|NDx<$ za+*`uSS=oJ7JHZK1~lVp6C`_tq_}G~UkVh&;qp>!kO_@{v7r_s37Xb^ug7 zsr%V%(=0rA=?>`zW|h_*$~9e)7u+XuUF;(s6-5&t&J?kG)Vw9$cj1+{k^I!AWv$Iz zRv>aEb*ta74|OJ#mnaS^5?yW8ZP{tg=gtq#XQhROlZ^_S%{P6%;23|d_en9cHf3u! z^j_aA(M6_4qDuwWm)S?>_pXm^YHx;9iv4#T^>rs#_LHm8e|bbl9cRbWqF-~T=6(xv z8?tBIymJRR>rIz4#xw0Diirw~RW{hIPm&qHek}N8&dErdJ#~kc%MgpCH(+vv~S=+NWt+vV=vl)G`_?bzz^;_mk8`v3a>|NsC0 z|NsC0|NsC0|NpVgmzceGvCWyf)TPnl!ph#d*5$|B=+DsL!O-Hs*XGOM?AG7v)ZgpX z;_TVx@80S1;^y$*=kVR>@Z#z8@JCp~Hh}p*#8e`2Y0r z|LNlY(#8MJ!2hL*|B!9}jcI$UQUCk-@AT^5>ec_<)7Z8XyWPvJ(8;6V#G=&1o&Twf@}Yk5nRWkv zR#f+eRR910KXg(~Qvmz<`|kYt_wDJ+$NtZ(c04R577q&k{{8&-_Vn}f^X=#5;nu>j zrJ|LCX=O!2IsN?n@b28Wt8iCMAs-S3Cf5>~0009tNklE zySvRMcTr-EJMOLpDoCN!-HTJV-`KfLnhPP&_sh-AywC2;EF@60H+!2hEls&Cdv6h> zq97}M0%J_1XB9v)M^%klOhD^W6)rXQDMTdhy6S#>t7|MrLR9QeG}hdvoZDGb$(UNh zjFmM`HzgW#WFse!61N|kS+`A6s=dto@ExV{;?BNC`n}e{7!&U3)tZX1p2Ci6lyt@J zDpXK+b`O&X45~FhO*}N)$w@oL6_rS5c>46b@P2gUEe`~nna&YaK%93`A06zAgIBBz z^Ije_^s!Fr=jI_&vb5;_t=6&7JzlDhs+JL^fBA+=SpdZw5S?v?u&MtQRrt^nw`~5f z!R$obPz?Fwh&6Qe(1*!(S?QS^eO19&4dQq{WYbP7dknRX+18N?uJGYon;g#!mP*=l zHf*Jqj6DJW<7%Jg;}fpv)F1nMt4;oZ#Ym%U1tsEh7DHD%YEx_aLJl2^@d8l^X^7WZ zoUU6fEklC*KS0|9J!)v#O<&rf|1VZ`rzx9))~vcp{;*fXM@4|-p&Z#&4t4Ch*i=s zO^e;~>THWm2KrRd6&C?E)6_;&*zhQr_yEIJN9d7`X5I(@`O_%=Y7p3mE?#?Sh`#t+ z)*gH#VkDQ8vJAwv9%icNCGUJo1rJ{LGLI8caS4drW<EpeD+Aoy(6eKT_I_`=1+5obGsl)*=8i_?lb1= zmnM2b`?+6-MEWs^abO)1Ym7%1nNT@YuB8zr=3Pwn5o+MkYTk)tS*l?x{^ z1?luC(vKu7mot_c6LPQeRW}n2ZDtuP z=S&1;)*glwlxAw>mF$L;99}P9Qwpicor)>P55Y>PqLYv3z={;}$=zG7!pamlNl_ey r)z~wJdFNntc1-Vt|4?$eBq{S3VGuz2=#^V100000NkvXXu0mjf-BfXg literal 0 HcmV?d00001 diff --git a/frontend/public/icons/open-winter24.png b/frontend/public/icons/open-winter24.png new file mode 100755 index 0000000000000000000000000000000000000000..9667ff0c8823879fb2b2bd7cd6ced1a34de22ae7 GIT binary patch literal 656 zcmV;B0&o3^P)-^}$*{`6(f&c&irN)S&!-S&7g{jGoxYD7$)u+zjz|-NtvUsUY z|NQ%Fp*;Wk_y6wb>hk3O>f`3`-T&X!|JKU?(!>A3t)9VvjkjuZrbhqw^#Anm?(X92 z@ZtaC+W*?l|Hrk9wr6{*QFNzCaHK+QqCWrS-T&0a|Ifk5$ejP1djFJi|B7dQtyBMd zQ1bQb^z!M++_}izxWL%0!Pl(I%c0H6ps>7y|Db}Uxp|SeZHKd9g|cA(g<$_^I@dUQ z6aWAKA9PYqQvmz;x)`7I1MlkS-rB)^ViNuG+R@OouA!5VfpaJhXL2O;0003SNkl$2m#_oJgK|9|D$vX^fdW?-g8GFB1<_+XikzLks?g* zzxQ=UQgKk^!^d_*X|$h)ytrxbPaCnP)Di73E?P1f+Fe9v-9hZy0g*vsGj&=;6qU|I zoiPdWddrzF5EayxZ%$j!1NDunX{wIWRZX+1^(hb!BkoTPBOU?zflbZm)s#uk(3+Z0 zp%Av*#ZnV{jPJSI3JY)eA%y+_BA=x6+}**{{IYtlsL=$lSKp<;l?D!Q1H1;_cc0|Nq+O&F1jl=kVU{_UZQc z^8f$;|NsC0|Np+#sk6|W#oM#a;J(b?yUO0W)8oV2=+D>X$l&bO;_cY!^5W_6;^^_= z@b~cT_U-%s`}hC%|NsC0|NqnD#qRXz(}V;-{b7u>F(g@@#E<7;_CI|@AvQe z`tC@ZZhg zzPr<=xzeMb!h!Vo@$>iZ@%HTF?b_k%*4ydO(c!|%-MGNltgg(Jp~HiQvR{F(SbeQj zd#h3S`}Owv^Xl^BC&9QeV4s;kGO1!v}1#@Ty3I1{Qms)`SS1e>fh?r+UU>N z=F7y|v!um`p~QufyKr}?Ol+b&?DFR6@!{d^*{sWwsKi&a;8Pp;>U}& zXO(s~JpcdzJ9JV`QvmMC{{8#==J@yX?amPE!=iRYEG7#5{rdU&_Vn}d=iafcsA*+A zJ0KSK?$*_~tCp08e{fe#K{yu%ef~AA0007rNkl4l&@1X8m-P^fa z?m!4o+@-V>ue-O~r{6gVKQwgz7lDK;ITEPJ$U?uh$7JfU_AiW(mLZ!lgPM%dHq;UP z(D_9)5mUO=)?&$A1tX<=@wm?~fpMA#n~PpQzcCqg3!L2@P4Y+j^-aY&fI`?M)Vab1 z0O$2)&=1Io9ic@aAp@z}SZiiLj5&lht{7`fYsBfCK!Oz=O#*Q0c=7cNCkEoj;G1>F*43t53PyH>GZ z%nSAuV5J^5oS6;=phrZsa1F$J?t0CZfeMoE~K(z+AEE z9vmIj7Vbn=&yulMfWg5hllK;i0cBe1b~}=Qd7T*j7UUSe$nn-5RQD+cI4#6&u*Xyn zYt4aM*b6C%JzoVThDq_h%R5v4n6H6ztFsyV2d{ts&bKa4r z6+>f~KGHVu7pjS6>PGhjuA--|MwOLc&itnChLQlx!}Oei5{e(_d2?k8{l~928`SC_ XGvy6;G_sG}00000NkvXXu0mjf?<<`e literal 0 HcmV?d00001 diff --git a/frontend/public/icons/open24.png b/frontend/public/icons/open24.png new file mode 100755 index 0000000000000000000000000000000000000000..827bb70661c09141172136b872b43eeb9c27420a GIT binary patch literal 583 zcmV-N0=WH&P);LQj|No`Nh^fhrw$Prv)u+SQug>7W)8WAE`Q_vP z|dwZ_`D(Bi+-;lt73!RP1O|NsC0|Nm&8IOgx( zc&Sb6^5yFC;&i7-!Pu^!!GUX`JoNbRZ=^!|{`$q*vW>WEhO=OMt5I^LMQx%!^7icR z^y%X5*x%~a$lbTH&YGmfhmpB%jkaitwP*SI_4fMp*5%33a$bdtcXIOkt;*3AL6=!Pegfq_(Qi<-&6j(e(uHmOprAW5v$6{54dC4ErS1A!y`b!=pe9E;p~&2}%ig-s;lbPJ&)n$H;_ca!yKvv?)aLNs>ha?4_UZ2S z?)v}w|NsC0|NsC0|NsC0|NsB6%$JwFcCyZyzSgP5+q2H#zS85v+UL&K=F8yh*5d8h z>GI;{@Zaa~-SPMF`1tbm`0@Au_p;BLu+5jW(4E)i$lmJH?)2#6?b_k%*XZ!yh2r z>Co8b%m32E&ELKMv6!dGjHAVd|DS=K!G4grZ2yjF|Au0Nuv>tySpR=k|8GI|`SSAi z?&|X6|HiZbxupNLpPs&Z|CV$5jAo0rWr?(6^@(2pgIxcCS@D2Tb*D-Haz}EeMRTA& z|5_*R^y&ZU;o|Pw;_TYo>Cykx#{bjA(%!$z-nqotv%}f4zsQ;Yr;N40iL}0j_J34% zs7qKTd`Y3#AuJh| zaYZ&w%)IMo|9Fn}UeHu_qG<}#P`<(vx(&vj?M|9B$M-6f)4470!%tzj5pudRq0 zP|=Z0jI(*t9he`870g6eQGt@S;|q^&`ec8AxePW&x)7C+hB(d@-8#MHyTR2#h2S&2 z9#m5zEj}>Y!TvCd8Aq&!OnO@J*{Jx)IP}1oP=`1v{yBQfbH(k4=$U5Vhyoin*5R}j|uYLvIY)wdu zAt&OM7KpjEL(O4STJ(=O5RY@XH zQJ|gu;vF0Fex0SEpsGkr9#moqy;;Dy(TmAyN`dnv9g|et0g3x&JjHnpPN}z|R7MM& z^7sNuEM`HHdsE0uFN0(ab`)JMfD}s8wc?Z9gp>*@#cfIh#KSYVV70#18i`lo~eD%9I@E;}DOF-%mmhCDF^LCHL00000NkvXXu0mjf DU+n() literal 0 HcmV?d00001 diff --git a/frontend/public/icons/under-development24.png b/frontend/public/icons/under-development24.png new file mode 100755 index 0000000000000000000000000000000000000000..b360ac8a462007c0d73cb094d66a6d04520c7398 GIT binary patch literal 609 zcmV-n0-pVeP)+9P8*UbOY#L3;c#oDsL*slM+sPL+Z^r(l~qjZO}Uw*7p|Mm0#_44!g z@bmcZ?DFRS-qiok!2iUs|GA{7$BqA%b&3g008+(L_t&-(^bpoc7i|8d%l5;uBe=GRnehPVdPql&7h0@1u3AqFR~0@1JfJ0DsT&P@4vR` zJ)p&bIeEChoqF~oqQiiH%h1M5w%JR1I1J0sOLpNr8n?qBL}?tK0aV5O>*Gy^mf!}! zN&GXP7Qu2A05CLKjh@o`d9)&a1F3q4C~`iXh$uOR+!mEILzZhsQs)8+r$Uy4GL(Ni v`hRIwv!6Pwx!fi?gbhcr)`U&_S0McXF-s`a_RFrg00000NkvXXu0mjf@iAKP literal 0 HcmV?d00001 diff --git a/frontend/public/icons/unknown.png b/frontend/public/icons/unknown.png new file mode 100755 index 0000000000000000000000000000000000000000..18297f560ece2754ef598b605ab4f02620f5940c GIT binary patch literal 1307 zcmV+$1?2jPP)e8{zn84Sp$K18I(xKJm$k5@z+vv~S=+NTr+2ifopTdEZyK%zVuf*E0&EUPu-n!T3 z%HQhL=I`F__UZQc^8f$;|NsC0|NsC0|NsC0zSXI-(44x|rPAZW-09HZ?AGG!+2-%v z>GI>~@8Ra~-{G0y|^yBUJ?fm@s_y6~nymrpuz1QZ;?)2#3>(%7$+vxD$cBZ`~3RA*Q}w$gl(cfYN0#-{rvy<_UG{5|K!`>>ebNU!n)I@ z|B7acwPgQtNB?Iy|6C~l_4D@l@$&cY|J>2f-@VG+xc|Vc|GcK7#fF{1e*c$ukhyGv zuv&kvS9YgK|NQ&^@$B#P>FV<1|LWu7?b`p;#s9~(#M!gB(WC#jq5rOy{;iY$sEwz{ zjQ^vDn!kGJk!1aRP;jL~|8GM7YCQi~B>MgO|Ly4F?%V(0)&JhqCxNi(AVb6 z|JTdZ;>Z8ZzSh&R|HQH7$EK*qjp?wAoWOkllyk4Ia{rKS*Pm^-sA}z!X#b38*_mdA zv0d?oS^srO{c1Z7*=ETA002RBQchCCVdj{`>m*_wMDwc10{E77q&j z{rvXw=hnxtt)-%sgJnKF{`~ds-`u#Xsc>p&S4}!NAs-S3_4%3b0007}Nkl7tUc>jmT*nR8pQIL_YFfu6^dlKZlXMAn_vy&gLFMOaVQ*xRzsN3Ba9Ms#c( z^3^^!&E^ri+H_=exrVuOfQc;e$h@nIoU9uVMPoyB+u1%JW)kCkgSp%^vj&LE9-5<% z-Qzv&va-l`8SCFh9KAw{Q9$2AN=IHWnR$Ld*9H2>2vAam=x{L=ojgoemjkh?1R5t1 zpE5PWJjjS=h(9lZNxXN0q@iV<5u6_cD>e=(pq|x|K%zZ~jp}RUqa<9^yNt@`@jH z$fr%jJSZ@uxt}Tjoi+K;Z^r3#Xw@PH6iS#smJb2M&Fc_t>bA(EM7Z2zp`EJ%pfQ9t zzm)cJCzJ5o&|FVSc@Co1&P3>*kPN#6QFjZ7dNbX0Qq|Uo)Y*k-%ZDhXxrp9??#w=&0wH$2kGh`AMkLj6q;X+DL7b;xgL zTbwU3yMM?UOU{8rjSr&;6U(oEeH&b!5FhV~Vp+MS#RN>Hfr2`70;Rf4soY5wP|bET z#BtK2HoO{8QEOEx`XaS*J16O^a@DBP5YCjtznoWYrEP%(lqt3{*Fi#Bv{FrK86>74 zBr26xAsL#Z%_q|#DJ8MZy)}0sIfV{VbVYC+1rwNg5ss%eln?)*^lYgr`3qjTD!OTJ R{q_I=002ovPDHLkV1jYF1q%QG literal 0 HcmV?d00001 diff --git a/frontend/public/icons/unknown24.png b/frontend/public/icons/unknown24.png new file mode 100755 index 0000000000000000000000000000000000000000..edfcf339f743ec1f1bfe934fb5b5de37bb50ba75 GIT binary patch literal 633 zcmV-<0*3vGP)7W)8WAC|LWua zO)@aygK=UoBy+#%fgqQ!GfQ`fWfD4k+^NPr)h_?VEKev`gcojq(T2%DF0a{ z;m!=b0000XbW%=J0Qma4>7V==1pe~z+R?FnViywj@88_o!NH-Ekb!e34skiiCjbBd z|4BqaR2b7$jn{I*Fc3vowy_N)wDcZH?luk(dMCa2^8bGlwT$6BTxrkjodu4i8^}b4 zZh<1Fkzn#Z35k}IVt4L6eWgkI`QXt#u|Yp>(jLZ9e{r3sY^$ox+mA!cN$%R7Rt25J zxOpMWu!m!!gAtx%#q1Wlp#jKI^Vv9I=^!wlm6(kh?0GQ(y-Cv_u@F1kK}&oW9iFXV z3y!>dVSXZ>@%JG>f%0R~m>`K*jXVaGEL{p-E42lCP&AJ@3-iDQ#T7h@UutX)VIvFLuSc6q|Dj@j-t+^>_ Ti+B((00000NkvXXu0mjf_NQIz literal 0 HcmV?d00001 diff --git a/frontend/src/app/FacilitySearch.tsx b/frontend/src/app/FacilitySearch.tsx index 26e4401..de64ba8 100755 --- a/frontend/src/app/FacilitySearch.tsx +++ b/frontend/src/app/FacilitySearch.tsx @@ -220,6 +220,59 @@ const toPlainText = (value: string | null | undefined) => .replace(/\s+/g, " ") .trim(); +const escapeHtml = (value: string) => + value + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + +const sanitizeHref = (value: string) => { + const href = value.trim(); + return /^(https?:|mailto:|tel:|\/|#)/i.test(href) ? href : "#"; +}; + +const sanitizeRichText = (value: string | null | undefined) => { + const source = String(value || "").replace(/\r\n?/g, "\n"); + if (!source.trim()) return ""; + + const placeholders = new Map(); + let index = 0; + const keep = (html: string) => { + const key = `__HTML_TOKEN_${index++}__`; + placeholders.set(key, html); + return key; + }; + + let safe = source + .replace(/<\s*br\s*\/?\s*>/gi, () => keep("
")) + .replace(/<\s*(strong|b)\s*>/gi, () => keep("")) + .replace(/<\s*\/\s*(strong|b)\s*>/gi, () => keep("")) + .replace(/<\s*(em|i)\s*>/gi, () => keep("")) + .replace(/<\s*\/\s*(em|i)\s*>/gi, () => keep("")) + .replace(/<\s*p\s*>/gi, () => keep("

")) + .replace(/<\s*\/\s*p\s*>/gi, () => keep("

")) + .replace(/<\s*(ul|ol)\s*>/gi, (_, tag: string) => keep(`<${tag.toLowerCase()}>`)) + .replace(/<\s*\/\s*(ul|ol)\s*>/gi, (_, tag: string) => keep(``)) + .replace(/<\s*li\s*>/gi, () => keep("
  • ")) + .replace(/<\s*\/\s*li\s*>/gi, () => keep("
  • ")) + .replace(/<\s*a\b([^>]*)>/gi, (_, attrs: string) => { + const hrefMatch = attrs.match(/href\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/i); + const href = sanitizeHref(hrefMatch?.[1] || hrefMatch?.[2] || hrefMatch?.[3] || "#"); + return keep(``); + }) + .replace(/<\s*\/\s*a\s*>/gi, () => keep("")); + + safe = escapeHtml(safe).replace(/\n/g, "
    "); + + for (const [token, html] of placeholders) { + safe = safe.replaceAll(token, html); + } + + return safe; +}; + const getAreaLabel = (value: string, countyOptions: Array<{ slug: string; label: string }>) => { if (!value) return "Hele Norge"; const builtIn = HIERARCHICAL_AREA_OPTIONS.find((option) => option.value === value); @@ -575,9 +628,9 @@ export default function FacilitySearch({ {processedFacilities.map((facility) => (
    - +
    -
    -
    -
    - - {facility.holeValue || "--"} hull - - - {facility.banetype || "Banetype ukjent"} - +
    +
    +
    +
    + + {facility.holeValue || "--"} hull + + + {facility.banetype || "Banetype ukjent"} + +
    + {Number.isFinite(facility.distance) && ( + + {Math.round(facility.distance)} km unna + + )}
    - {Number.isFinite(facility.distance) && ( - - {Math.round(facility.distance)} km unna - + + {facility.footnote && ( +
    +

    + {formatUpdatedDate(facility.footnote_updated_at || facility.status_updated_at)} +

    +

    + {facility.footnote} +

    +
    + )} + + {String(facility.description || "").trim() && ( +
    )}
    - {facility.footnote && ( -
    -

    - {formatUpdatedDate(facility.footnote_updated_at || facility.status_updated_at)} -

    -

    - {facility.footnote} -

    -
    - )} - - {toPlainText(facility.description) && ( -

    - {toPlainText(facility.description)} -

    - )} - -
    +
    {facility.phone ? facility.phone : facility.city || "Se detaljer"}
    {facility.website_url && ( diff --git a/frontend/src/app/admin/rediger/[slug]/EditFacilityClient.tsx b/frontend/src/app/admin/rediger/[slug]/EditFacilityClient.tsx index 59f7d31..1850be2 100644 --- a/frontend/src/app/admin/rediger/[slug]/EditFacilityClient.tsx +++ b/frontend/src/app/admin/rediger/[slug]/EditFacilityClient.tsx @@ -482,7 +482,11 @@ export default function EditFacilityClient({ initialData, allFacilities }: { ini
    -