1(()=>{"use strict";window.imx=window.imx||{},window.imx.jsonrequest=window.imx.jsonrequest||{};class e{request(e){return window.imx.jsonrequest[e]||(window.imx.jsonrequest[e]=fetch(e).then((e=>e.json()))),window.imx.jsonrequest[e]}}class t{getBaseUrl(){const e=document.querySelector("#pageHeader__logo")?.getAttribute("href")??"";return(""!==e?e:this._getBaseFromCurrentLocation()).replace(/\/+$/,"")}_getBaseFromCurrentLocation(){const e=window.location.pathname.split("/").filter(Boolean)[0],t=e&&/^[a-z]{2,3}$/.test(e);return new URL(""+(t?`/${e}`:"/"),window.location.origin).toString()}}const r=2*Math.PI,i="map__leg";class s{map;options={circleSpiralSwitchover:9,circleFootSeparation:25,spiralFootSeparation:28,spiralLengthStart:15,spiralLengthFactor:4};previousSpiderLegs=[];constructor(e,t={}){this.map=e,this.options={...this.options,...t},e.on("zoomstart",(()=>{this.unspiderfy()})),e.on("click",(e=>{e.originalEvent.target.closest(i)||this.unspiderfy()}))}spiderfy(e,t){this.unspiderfy();const r=this.generateSpiderLegParams(t.length),i=t.map(((t,i)=>{const s=r[i],a=this.createMarkerElements(s,t);return{data:t,elements:a,marker:new maplibregl.Marker({element:a.container}).setLngLat(e),param:s}}));i.forEach((e=>e.marker.addTo(this.map))),this.previousSpiderLegs=i,this.options.spiderfyCallback&&this.options.spiderfyCallback()}unspiderfy(){this.previousSpiderLegs.forEach((e=>e.marker.remove())),this.previousSpiderLegs=[],this.options.unspiderfyCallback&&this.options.unspiderfyCallback()}generateSpiderLegParams(e){return e>=this.options.circleSpiralSwitchover?this.generateSpiralParams(e):this.generateCircleParams(e)}generateSpiralParams(e){let t=this.options.spiralLengthStart,i=0;const s=[];for(let a=0;a<e;a++)i+=this.options.spiralFootSeparation/t+5e-4*a,s.push({x:t*Math.cos(i),y:t*Math.sin(i),angle:i,legLength:t,index:a}),t+=r*this.options.spiralLengthFactor/i;return s}generateCircleParams(e){const t=this.options.circleFootSeparation*(2+e)/r,i=r/e,s=[];for(let r=0;r<e;r++){const e=r*i;s.push({x:t*Math.cos(e),y:t*Math.sin(e),angle:e,legLength:t,index:r})}return s}createMarkerElements(e,t){const r=document.createElement("div"),s=document.createElement("div"),a=document.createElement("div");return r.classList.add(i),r.style.marginLeft=e.x+"px",r.style.marginTop=e.y+"px",s.classList.add("map__leg__line"),s.style.height=e.legLength+"px",s.style.transform="rotate("+(e.angle-Math.PI/2)+"rad)",a.classList.add("map__leg__pin"),this.options.markerBuilderCallback&&a.appendChild(this.options.markerBuilderCallback(t).getElement()),r.appendChild(s),r.appendChild(a),{container:r,line:s,pin:a}}}const a="imx-clustersource",n="imx-clusterlayer";class o{maptoolkit;util;maplibre;spiderifier;builtMarkers={};shownMarkers={};markerCallback=(e,t)=>t;layerIdent;sourceIdent;visible=!0;constructor(e,t,r){this.maptoolkit=e,this.util=t,this.maplibre=e.gl,this.layerIdent=r?n+"_"+r:n,this.sourceIdent=r?a+"_"+r:a,this.maplibre.addSource(this.sourceIdent,{type:"geojson",cluster:!0,clusterMaxZoom:17,data:{type:"FeatureCollection",features:[]}}),this.maplibre.addLayer({id:this.layerIdent,type:"symbol",source:this.sourceIdent}),this.maplibre.on("render",(()=>{if(!this.visible)return;if(!this.maplibre.isSourceLoaded(this.sourceIdent))return;const e=this.maplibre.querySourceFeatures(this.sourceIdent),t={};for(const r of e){const e=r.properties,i=e.cluster_id??e.ident;if(!this.builtMarkers[i])if(e.cluster)this.builtMarkers[i]=this.builtMarkers[i]??this.buildClusterMarker(r);else{const t=JSON.parse(e.marker),r=t.icon?this.util.createIconMarker(t):this.util.createDefaultMarker(t);this.builtMarkers[i]=this.markerCallback(t,r)}t[i]=this.builtMarkers[i],this.shownMarkers[i]||this.builtMarkers[i].addTo(this.maplibre)}for(const e in this.shownMarkers)t[e]||this.shownMarkers[e].remove();this.shownMarkers=t})),this.spiderifier=new s(this.maplibre,{spiralLengthStart:45,circleFootSeparation:75,spiderfyCallback:()=>Object.values(this.builtMarkers).forEach((e=>this.util.backgroundMarker(e))),unspiderfyCallback:()=>Object.values(this.builtMarkers).forEach((e=>this.util.foregroundMarker(e))),markerBuilderCallback:e=>this.markerCallback(e,e.icon?this.util.createIconMarker(e):this.util.createDefaultMarker(e))})}paint(e,t){this.markerCallback=t??((e,t)=>
1t),Object.keys(this.builtMarkers).forEach((e=>this.builtMarkers[e].remove())),Object.keys(this.shownMarkers).forEach((e=>this.shownMarkers[e].remove())),this.builtMarkers={},this.shownMarkers={};const r={type:"FeatureCollection",features:e.map((e=>({type:"Feature",geometry:{type:"Point",coordinates:e.lngLat},properties:{ident:e.ident,context:e.context,marker:e}})))};this.maplibre.getSource(this.sourceIdent).setData(r)}hide(){this.visible=!1,this.maplibre.getLayer(this.layerIdent)&&this.maplibre.setLayoutProperty(this.layerIdent,"visibility","none"),this.spiderifier.unspiderfy(),Object.keys(this.shownMarkers).forEach((e=>this.shownMarkers[e].remove())),this.shownMarkers={}}show(){this.visible=!0,this.maplibre.getLayer(this.layerIdent)&&this.maplibre.setLayoutProperty(this.layerIdent,"visibility","visible"),this.maplibre.triggerRepaint()}buildClusterMarker(e){const t=this.util.createClusterMarker(e.properties.point_count,e.geometry.coordinates);return t.getElement().addEventListener("click",(()=>{this.maplibre.getZoom()<16?this.zoomToCluster(e):this.spiderify(e)})),t}zoomToCluster(e){this.maplibre.getSource(this.sourceIdent).getClusterExpansionZoom(e.properties.cluster_id,((t,r)=>{t||(r>16&&this.spiderify(e),this.maplibre.easeTo({center:e.geometry.coordinates,zoom:Math.max(r,this.maplibre.getZoom()+2)}))}))}spiderify(e){this.maplibre.getSource(this.sourceIdent).getClusterLeaves(e.properties.cluster_id,100,0,((t,r)=>{if(t)return console.error("error while getting leaves of a cluster",t);this.spiderifier.spiderfy(e.geometry.coordinates,r.map((e=>e.properties.marker)))}))}}function l(e){return window.imx.styleloader[e]=window.imx.styleloader[e]||new Promise(((t,r)=>{if(document.querySelector(`link[href*="${e}"]`))return void t(e);const i=document.createElement("link");i.href=e,i.rel="stylesheet",i.onload=()=>t(e),i.onerror=()=>r(new Error(`Style load error for ${e}`)),document.head.appendChild(i)})),window.imx.styleloader[e]}function c(e){return window.imx.scriptloader[e]=window.imx.scriptloader[e]||new Promise(((t,r)=>{if(document.querySelector(`script[src*="${e}"]`))return void t(e);const i=document.createElement("script");i.setAttribute("src",e),i.onload=()=>t(e),i.onerror=()=>r(new Error(`Script load error for ${e}`)),document.body.appendChild(i)})),window.imx.scriptloader[e]}window.imx=window.imx||{},window.imx.styleloader=window.imx.styleloader||{},window.imx=window.imx||{},window.imx.scriptloader=window.imx.scriptloader||{};class d{constructor(){this.request=new e}load(e){const t=this.request.request(e).then((e=>Promise.all([new Promise((t=>t(e.content))),this.injectCss(e.assets.css),this.injectJavaScript(e.assets.js)])
1)).then((e=>e[0]));return Promise.all([t]).finally((()=>{!function(e){const t=new CustomEvent("ContentLoader.load",{detail:{}});e.dispatchEvent(t)}(document)})),t}injectCss(e){const t=[];return e.filter((e=>!document.querySelector(`link[href*="${e}"]`))).forEach((e=>{t.push(l(e))})),Promise.all(t)}injectJavaScript(e){const t=[];return e.filter((e=>!document.querySelector(`script[src*="${e}"]`))).forEach((e=>{t.push(c(e))})),Promise.all(t)}}class h{container;map;util;loader=new d;baseUrl=new t;sidebar;form;markedTeaser;clusterPainters=new Map;activeClusterPainterIdent;activeTourPoiMarker;activeTourPoiArticle;sidebarSelector=".map-fullscreen__infoBoard";formSelector=".map-fullscreen__controls";detailsSelector=".map-fullscreen__details";constructor(e,r,i){this.container=e,this.map=r,this.util=i,this.sidebar=e.querySelector(this.sidebarSelector),this.form=e.querySelector(this.formSelector),this.loader=new d,this.baseUrl=new t}update(e){if(e.assets?.css&&this.loader.injectCss(e.assets?.css),e.assets?.js&&this.loader.injectJavaScript(e.assets?.js),e.content?.html){const t=document.createElement("div");t.innerHTML=e.content.html,this.sidebar.innerHTML=t.querySelector(this.sidebarSelector).innerHTML,this.sidebar.dispatchEvent(new CustomEvent("imx-map-sidebar-update-markup"))}this.container.querySelectorAll('input[name="sidebarSowLayer[]"]').forEach((e=>{e.addEventListener("change",(t=>{const r=this.container.querySelector('input[name="mapLegend[]"][value="'+e.value+'"]');r&&(r.checked=e.checked,this.form.dispatchEvent(new CustomEvent("imx-submit",{bubbles:!0})))}))})),this.container.querySelectorAll(".map-fullscreen__list__item").forEach((e=>{const t=e.dataset.ident,r=e.querySelector("button"),i=e.querySelector(this.detailsSelector);r.addEventListener("click",(r=>{this.sendResetActiveMarkerEvent();const s=this.container.querySelector('.maplibregl-marker[data-ident="'+t+'"]');if(s&&s.dispatchEvent(new Event("imx-map-activate-marker")),t.endsWith("_100012000")){this.activeClusterPainterIdent&&this.activeClusterPainterIdent!==t&&this.clusterPainters.get(this.activeClusterPainterIdent)?.hide();const r=this.clusterPainters.get(t);if(r)r.show(),this.activeClusterPainterIdent=t;else{const r=t.split("_")[1],i=new URL(`${this.baseUrl.getBaseUrl()}/action/mapMarkers`,window.location.origin);i.searchParams.set("ident","poi_"+r),this.loader.load(i.toString()).then((r=>{const i=new o(this.map,this.util,t);i.paint(r.markers,((t,r)=>(r.getElement().addEventListener("click",(()=>{this.activeTourPoiMarker&&this.activeTourPoiMarker!==r&&this.activeTourPoiMarker.getElement().classList.remove("mapMarker--inverted"),r.getElement().classList.add("mapMarker--inverted"),this.activeTourPoiMarker=r,e.classList.add("isActive"),e.querySelector('button[data-group-number="4"]')?.dispatchEvent(new Event("click"));const i=e.querySelector('ul.map-fullscreen__list__wrap article[marker-ident-pid="'+t.ident+'"]');i&&(i.scrollIntoView({behavior:"smooth",block:"nearest"}),this.activeTourPoiArticle&&this.activeTourPoiArticle!==i&&this.activeTourPoiArticle.classList.remove("isActive"),i.classList.add("isActive"),this.activeTourPoiArticle=i)})),r))),this.clusterPainters.set(t,i),this.activeClusterPainterIdent=t}))}}this.showInfoboard(t,i).then((e=>{}))}))})),this.container.dispatchEvent(new CustomEvent("imx-map-sidebar-updated",{bubbles:!0}))}showInfoboard(e,t){t.setAttribute("data-loading","1"),t.setAttribute("aria-hidden","false"),t.removeAttribute("inert"),t.innerHTML="",t.appendChild(document.createElement("div")).classList.add("map-fullscreen__details__loader"),t.appendChild(document.createElement("div")).classList.add("map-fullscreen__details__spinner");const r=new URL(`${this.baseUrl.getBaseUrl()}/action/mapInfoboard`,window.location.origin);return r.searchParams.set("ident",e),this.loader.load(r.toString()).then((r=>{t.setAttribute("data-loading","0"),t.innerHTML="";const i=document.createElement("div");return i.innerHTML=r.html,i.querySelectorAll(this.detailsSelector+" > *").forEach((e=>{t.appendChild(e)})),this.renderElevationProfile(t),t.querySelector(".map-fullscreen__details__header button").addEventListener("click",(()=>{t.setAttribute("aria-hidden","true"),t.setAttribute("inert","inert"),this.sendResetActiveMarkerEvent(),this.activeClusterPainterIdent===e&&(this.clusterPainters.get(e)?.hide(),this.activeClusterPainterIdent=void 0)})),document.dispatchEvent(new CustomEvent("imx-init-mediaGallerySlider",{detail:{node:t}})),document.dispatchEvent(new CustomEvent("imx-init-baseArticle",{detail:{node:t}})),document.dispatchEvent(new CustomEvent("imx-init-details-tabs",{detail:{node:t}})),{polyline:r.polyline}}))}hideInfoboard(){this.sidebar.querySelectorAll(this.detailsSelector).forEach((e=>{e.setAttribute("aria-hidden","true"),e.setAttribute("inert","inert"),this.sendResetActiveMarkerEvent()}))}hideAllTourContactAddressbaseMarkerLayers(){this.clusterPainters.forEac
1h((e=>{e.hide()})),this.activeClusterPainterIdent=void 0,this.activeTourPoiMarker?.getElement().classList.remove("mapMarker--inverted"),this.activeTourPoiMarker=void 0}scrollTeaserIntoView(e){this.markedTeaser&&this.markedTeaser.classList.remove("isActive");const t=this.sidebar.querySelector('.map-fullscreen__list__item[data-ident="'+e+'"]');if(t){t.classList.add("isActive");const e=t.closest(".group"),r=e.dataset.groupNumber;this.container.querySelector('.map-fullscreen__infoBoard button[data-group-number="'+r+'"]').dispatchEvent(new Event("click")),setTimeout((()=>{e.scrollTo({behavior:"smooth",left:0,top:t.offsetTop-150})}),150),this.markedTeaser=t}}renderElevationProfile(e){return Promise.all([l("https://static.maptoolkit.net/mtk/v10.1.10/elevationprofile.css"),c("https://static.maptoolkit.net/mtk/v10.1.10/elevationprofile.js")]).then((()=>{const t=e.querySelector(".altitude-overlay"),r=JSON.parse(t?.dataset.tourGeometry||"[]");if(r?.geometry&&t){const e=new MTK.ElevationProfile({surface:!0});return e.setGeoJSON(r.geometry),e.setMap(this.map),e.addTo(t),!0}return!1}))}sendResetActiveMarkerEvent(){this.container.dispatchEvent(new CustomEvent("imx-map-reset-active-marker"))}}class u{map;util;markerPainter;mapSidebar;request=new e;baseUrl=new t;container;form;activeMarker;activePolyline;constructor(e,t,r){this.map=e,this.util=t,this.markerPainter=new o(e,t),this.mapSidebar=new h(r,e,t),this.container=r,this.form=r.querySelector(".map-fullscreen__controls")}submitForm(e){if(e?.preventDefault(),0===new URLSearchParams(new FormData(this.form)).size)return;this.container.setAttribute("data-loading","1"),new FormData(this.form).getAll("idents[]").length;const t=`${this.baseUrl.getBaseUrl()}/action/mapFilter?${new URLSearchParams(new FormData(this.form)).toString()}`;this.request.request(t).then((e=>{this.container.setAttribute("data-loading","0"),this.markerPainter.paint(e.markers,((e,t)=>(t.getElement().addEventListener("click",(()=>{this.resetActiveMarker(),this.resetActivePolyline(),this.mapSidebar.hideInfoboard(),this.mapSidebar.hideAllTourContactAddressbaseMarkerLayers(),this.mapSidebar.scrollTeaserIntoView(e.ident),this.util.highlightMarker(t),this.activeMarker=t,e.polyline&&(this.activePolyline=this.util.createPolyline(e.polyline).addTo(this.map))})),t.getElement().addEventListener("imx-map-activate-marker",(()=>{this.util.highlightMarker(t),this.activeMarker=t,e.polyline&&(this.activePolyline=this.util.createPolyline(e.polyline).addTo(this.map))})),t.getElement().addEventListener("imx-map-deactivate-marker",(()=>{this.resetActiveMarker(),this.resetActivePolyline()})),t))),this.mapSidebar.update(e.sidebar),this.container.dispatchEvent(new CustomEvent("imx-submit-map-filters"))}))}
1resetActiveMarker(){this.activeMarker&&(this.util.lowlightMarker(this.activeMarker),this.activeMarker=void 0)}resetActivePolyline(){this.activePolyline&&(this.activePolyline.remove(),this.activePolyline=void 0)}run(){this.container.addEventListener("imx-map-reset-active-marker",(()=>{this.resetActiveMarker(),this.resetActivePolyline()})),this.form.addEventListener("submit",this.submitForm.bind(this)),this.form.addEventListener("imx-submit",this.submitForm.bind(this)),this.submitForm()}}document.querySelectorAll(".map-fullscreen").forEach((e=>{const t=e.querySelector(".map-wrap"),r=e.querySelector(".map__container"),i=e.dataset.legendFieldName||"mapLegend",s=e.dataset.filterFieldName||"mapFilter",a=window.location.hash.split("#")[1],n=new URLSearchParams(a),o=n?.get("categories")?.split(",")??[],l=n?.get("filters")?.split(",")??[],c=n?.get("search")||"",d=JSON.parse(t.dataset.defaultFilter||'["100"]'),h=t.dataset.id;document.addEventListener(`map.${t.dataset.id}.ready`,(a=>{const{map:m,util:p}=a.detail;(e=>{const t=history.state?.maps?.[h];t&&e.gl.jumpTo({center:[t.lng,t.lat],zoom:t.zoom})})(m),(e=>{e.gl.on("moveend",(()=>{const t=e.gl.getCenter(),r={lat:t.lat,lng:t.lng,zoom:e.gl.getZoom()};history.replaceState({...history.state??{},maps:{...history.state?.maps??{},[h]:r}},"",window.location.href)}))})(m),0!==o.length||0!==l.length||c||(o.push(...d),n.set("categories",o.join(",")),d.forEach((t=>{e.querySelectorAll(`input[name="${i}[]"][value="${t}"]`).forEach((e=>{e.checked=!0}))}))),(()=>{e.querySelectorAll(`input[name="${i}[]"]`).forEach((e=>{e.checked=o.includes(e.value)})),e.querySelectorAll(`input[name="${s}[]"]`).forEach((e=>{e.checked=l.includes(e.value)}));const t=e.querySelector('input[name="search"]');t&&c&&(t.value=c),e.querySelectorAll(".map-fullscreen__navigation__subList").forEach((e=>{e.dispatchEvent(new CustomEvent("imx-change-map-categories"))}))})(),new u(m,p,e).run(),e.querySelector(".map-fullscreen__infoBoard")?.addEventListener("imx-map-sidebar-update-size",(e=>{m.gl.resize()})),((e,i)=>{JSON.parse(r?.dataset.polylines||"[]").forEach((r=>{const s=`polyline_${t?.dataset.id}_${r.id}`;i.renderPolylineWithPopup(e,s,r)}))})(m,p)}))}))})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.