From 5059b763d7afb385b190354c36fba3ddbc24fe3d Mon Sep 17 00:00:00 2001
From: mpeltriaux <michel.peltriaux@sgdnord.rlp.de>
Date: Sat, 2 Nov 2024 13:06:32 +0100
Subject: [PATCH] # WIP: Integration netgis client

* adds adjustments for integration of newest netgis client version (https://github.com/sebastianpauli/netgis-client/commit/81fa3bef489b589c9e8252277923ce7012e07093)
---
 konova/forms/geometry_form.py            |   44 +-
 templates/map/client/config.json         |    8 +-
 templates/map/client/dist/netgis.min.css |    2 +-
 templates/map/client/dist/netgis.min.js  | 6178 ++--------------------
 templates/map/client/index.html          |    2 +-
 5 files changed, 482 insertions(+), 5752 deletions(-)

diff --git a/konova/forms/geometry_form.py b/konova/forms/geometry_form.py
index bc5bea62..de111b8d 100644
--- a/konova/forms/geometry_form.py
+++ b/konova/forms/geometry_form.py
@@ -27,13 +27,12 @@ class SimpleGeomForm(BaseForm):
     """
     read_only = True
     geometry_simplified = False
-    geom = JSONField(
+    output = JSONField(
         label=_("Geometry"),
         help_text=_(""),
         label_suffix="",
         required=False,
         disabled=False,
-        template_name="output"
     )
 
     def __init__(self, *args, **kwargs):
@@ -49,29 +48,32 @@ class SimpleGeomForm(BaseForm):
                 raise AttributeError
 
             geojson = self.instance.geometry.as_feature_collection(srid=DEFAULT_SRID_RLP)
+
+            geojson = self._set_editable_status(geojson)
+
             geom = json.dumps(geojson)
         except AttributeError:
             # If no geometry exists for this form, we simply set the value to None and zoom to the maximum level
             geom = ""
             self.empty = True
 
-        self.initialize_form_field("geom", geom)
+        self.initialize_form_field("output", geom)
 
     def is_valid(self):
         super().is_valid()
         is_valid = True
 
         # Get geojson from form
-        geom = self.data["geom"]
+        geom = self.data["output"]
         if geom is None or len(geom) == 0:
             # empty geometry is a valid geometry
-            self.cleaned_data["geom"] = MultiPolygon(srid=DEFAULT_SRID_RLP).ewkt
+            self.cleaned_data["output"] = MultiPolygon(srid=DEFAULT_SRID_RLP).ewkt
             return is_valid
         geom = json.loads(geom)
 
         # Write submitted data back into form field to make sure invalid geometry
         # will be rendered again on failed submit
-        self.initialize_form_field("geom", self.data["geom"])
+        self.initialize_form_field("output", self.data["output"])
 
         # Read geojson into gdal geometry
         # HINT: This can be simplified if the geojson format holds data in epsg:4326 (GDAL provides direct creation for
@@ -98,7 +100,7 @@ class SimpleGeomForm(BaseForm):
                 g = self.__flatten_geom_to_2D(g)
 
             if g.geom_type not in accepted_ogr_types:
-                self.add_error("geom", _("Only surfaces allowed. Points or lines must be buffered."))
+                self.add_error("output", _("Only surfaces allowed. Points or lines must be buffered."))
                 is_valid &= False
                 return is_valid
 
@@ -107,7 +109,7 @@ class SimpleGeomForm(BaseForm):
             polygon = Polygon.from_ewkt(g.ewkt)
             is_valid &= polygon.valid
             if not polygon.valid:
-                self.add_error("geom", polygon.valid_reason)
+                self.add_error("output", polygon.valid_reason)
                 return is_valid
 
             features.append(polygon)
@@ -124,7 +126,7 @@ class SimpleGeomForm(BaseForm):
         # Write unioned Multipolygon into cleaned data
         if self.cleaned_data is None:
             self.cleaned_data = {}
-        self.cleaned_data["geom"] = form_geom.ewkt
+        self.cleaned_data["output"] = form_geom.ewkt
 
         return is_valid
 
@@ -134,7 +136,7 @@ class SimpleGeomForm(BaseForm):
         Returns:
 
         """
-        geom = self.cleaned_data.get("geom")
+        geom = self.cleaned_data.get("output")
         g = gdal.OGRGeometry(geom, srs=DEFAULT_SRID_RLP)
         num_vertices = g.num_coords
 
@@ -150,7 +152,7 @@ class SimpleGeomForm(BaseForm):
 
         if not is_area_valid:
             self.add_error(
-                "geom",
+                "output",
                 _("Geometry must be greater than 1m². Currently is {}m²").format(
                     float(geom.area)
                 )
@@ -193,14 +195,14 @@ class SimpleGeomForm(BaseForm):
             if self.instance is None or self.instance.geometry is None:
                 raise LookupError
             geometry = self.instance.geometry
-            geometry.geom = self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID_RLP))
+            geometry.geom = self.cleaned_data.get("output", MultiPolygon(srid=DEFAULT_SRID_RLP))
             geometry.modified = action
 
             geometry.save()
         except LookupError:
             # No geometry or linked instance holding a geometry exist --> create a new one!
             geometry = Geometry.objects.create(
-                geom=self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID_RLP)),
+                geom=self.cleaned_data.get("output", MultiPolygon(srid=DEFAULT_SRID_RLP)),
                 created=action,
             )
 
@@ -224,3 +226,19 @@ class SimpleGeomForm(BaseForm):
         g_wkt = wkt_w.write(geom.geos).decode("utf-8")
         geom = gdal.OGRGeometry(g_wkt)
         return geom
+
+    def _set_editable_status(self, geojson: dict):
+        """ Toggles the editable property of the geojson for proper handling in map client
+
+        Args:
+            geojson (dict): The GeoJson
+
+        Returns:
+            geojson (dict): The altered GeoJson
+        """
+        features = geojson.get("features", [])
+        for feature in features:
+            feature["properties"] = {
+                "editable": not self.read_only
+            }
+        return geojson
diff --git a/templates/map/client/config.json b/templates/map/client/config.json
index e41ae5ce..18332bc6 100644
--- a/templates/map/client/config.json
+++ b/templates/map/client/config.json
@@ -15,7 +15,7 @@
 	},
 	"menu":
 	{
-		"header": "<a href='.' target='_self'>LANIS Demo</a>",
+		"header": "",
 		"items":
 		[
 			{ "id": "searchplace", "title": "<i class='fas fa-search'></i><span>Suche</span>" },
@@ -39,7 +39,7 @@
 	},
 	"folders":
 	[
-		{ "id": "bg", "title": "Hintergrund", "parent": null },
+		{ "id": "bg", "title": "Hintergrund", "parent": null , "radio":  true},
 		{ "id": "alkis", "title": "ALKIS Liegenschaften", "parent": null },
 		{ "id": "verwaltung", "title": "Verwaltungsgrenzen", "parent": null },
 		{ "id": "fachdaten", "title": "Geofachdaten", "parent": null },
@@ -123,7 +123,7 @@
 	"searchplace":
 	{
 		"title": "Adresse...",
-		"url": "/client/proxy?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={q}&name_startsWith={q}",
+		"url": "/client/proxy?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={query}&name_startsWith={query}",
 		"zoom": 17,
 		"marker_color": "darkgray",
 		"marker_title": "Such-Ergebnis"
@@ -219,7 +219,7 @@
 		"interactive_render": true,
 		"buffer":
 		{
-			"default_radius": 300,
+			"default_radius": 5,
 			"default_segments": 3
 		},
 		"snapping":
diff --git a/templates/map/client/dist/netgis.min.css b/templates/map/client/dist/netgis.min.css
index 496927f2..2bbd6455 100644
--- a/templates/map/client/dist/netgis.min.css
+++ b/templates/map/client/dist/netgis.min.css
@@ -1 +1 @@
-.netgis-attribution{position:absolute;right:0;bottom:0;padding:1mm;background:rgba(255,255,255,0.5);font-size:2.5mm;z-index:100}.netgis-client{position:relative;box-sizing:border-box;font-size:4mm;overflow:hidden}.netgis-client *{box-sizing:border-box}.netgis-client button{font-size:inherit}.netgis-contextmenu{position:absolute;width:64mm;z-index:90000}.netgis-contextmenu>*{display:block;position:relative;width:100%;height:12mm;line-height:12mm;padding:0 4mm;text-align:left;background:none}.netgis-contextmenu>label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm}.netgis-contextmenu>label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-contextmenu>label span:only-of-type{left:12mm;right:0;padding:0 4mm;padding-left:0;cursor:pointer}.netgis-contextmenu>label input[type=range]{width:100%;cursor:pointer}.netgis-controls{position:absolute;width:12mm;right:4mm;bottom:8mm;overflow:hidden;z-index:100}.netgis-client.netgis-footer>.netgis-controls{bottom:44mm}.netgis-controls button{font-size:5mm!important;color:inherit;width:100%;height:12mm;padding:0;border:none;background-color:inherit;cursor:pointer}.netgis-dropdown{display:inline-block;position:relative;padding:0}.netgis-dropdown>:first-child{z-index:10}.netgis-dropdown ul{display:none;position:absolute;margin:0;padding:0;list-style-type:none}.netgis-dropdown:hover>ul{display:block}.netgis-dropdown li{position:relative;height:12mm}.netgis-dropdown li>button,.netgis-dropdown li>a{display:inline-block;width:100%;height:100%;text-align:left}.netgis-dropdown li>ul{display:none;top:0;left:100%}.netgis-dropdown li:hover>ul{display:block}.netgis-dropdown li i{margin-right:4mm!important}.netgis-dropdown li>label{display:block;text-align:left}.netgis-dropdown li>label input{width:4mm;margin:0;margin-right:4mm}.netgis-compact .netgis-dropdown li{height:9mm;line-height:9mm}.netgis-compact .netgis-dropdown li button,.netgis-compact .netgis-dropdown li .netgis-button{padding:0 3mm}.netgis-compact .netgis-dropdown li i{margin-right:4mm}@media (max-width:599px){}.netgis-import .netgis-preview-map{position:absolute;width:100%;height:40mm;cursor:grab}.netgis-import .netgis-preview-map:active:hover{cursor:grabbing}.netgis-import .netgis-preview-tree{position:absolute;width:100%;top:52mm;bottom:12mm;overflow-y:auto}.netgis-import .netgis-import-submit{position:absolute;width:100%;height:12mm;bottom:0}.netgis-import .netgis-geoportal .netgis-tree{padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree li{padding-left:0}.netgis-import .netgis-geoportal .netgis-tree label{padding-left:0;margin-bottom:0;font-weight:normal}.netgis-import .netgis-geoportal .netgis-tree .netgis-item input{margin-right:0}.netgis-map{position:absolute;left:0;right:0;top:12mm;bottom:0;cursor:grab;background:#e0dfdf}.netgis-map:active:hover{cursor:grabbing!important}.netgis-map-overlay{width:1px;height:1px;background:none}.netgis-map.netgis-clickable{cursor:pointer}.netgis-map.netgis-mode-zoom-box,.netgis-map.netgis-mode-zoom-box:active:hover,.netgis-map.netgis-mode-measure-line,.netgis-map.netgis-mode-measure-area{cursor:crosshair}.netgis-map.netgis-mode-measure-line:active:hover,.netgis-map.netgis-mode-measure-area:active:hover{cursor:grabbing}.netgis-map.netgis-mode-draw-points,.netgis-map.netgis-mode-draw-lines,.netgis-map.netgis-mode-draw-polygons,.netgis-map.netgis-mode-cut-features-draw{cursor:crosshair}.netgis-map.netgis-mode-draw-points.netgis-not-allowed,.netgis-map.netgis-mode-draw-lines.netgis-not-allowed,.netgis-map.netgis-mode-draw-polygons.netgis-not-allowed{cursor:no-drop}.netgis-map .ol-scale-bar{right:24mm;bottom:10mm;left:auto}.netgis-client.netgis-footer>.netgis-map .ol-scale-bar{bottom:46mm}.netgis-menu{position:absolute;left:0;right:0;top:0;max-height:12mm;line-height:12mm;white-space:nowrap;text-align:right;font-size:0;z-index:10000}.netgis-menu.netgis-menu-large{max-height:100%}.netgis-menu .netgis-menu-toggle{z-index:1}.netgis-menu>*{display:inline-block;min-width:12mm;height:12mm;padding:0 4mm;margin:0;font-size:4mm!important}.netgis-menu>h1{position:absolute;left:0;top:0;bottom:0;font-weight:bold;cursor:default}.netgis-menu a{color:inherit;text-decoration:none}.netgis-menu button,.netgis-menu select{background:none;border:none;outline:none;cursor:pointer}.netgis-menu>*:hover{background:#eee}.netgis-menu button img,.netgis-menu a img{position:relative;top:.7mm;height:1em}.netgis-menu button i:not(:only-child),.netgis-menu a i:not(:only-child),.netgis-menu button img:not(:only-child),.netgis-menu a img:not(:only-child){width:4mm;margin-right:3mm;text-align:center}.netgis-menu>.netgis-wrapper{display:inline-block;position:relative;padding:0}.netgis-menu>.netgis-wrapper>.netgis-icon{position:absolute;left:0;top:0;padding-left:4mm;pointer-events:none}.netgis-menu>.netgis-wrapper select{width:100%;height:100%;padding-left:11mm}.netgis-menu>.netgis-wrapper select:last-child{padding-left:4mm}@media (max-width:599px){.netgis-menu>*:not(.netgis-menu-toggle){display:block;width:100%;text-align:left}.netgis-menu{overflow:hidden}.netgis-menu.netgis-menu-large{overflow-y:auto}.netgis-menu .netgis-dropdown{height:auto}.netgis-menu .netgis-dropdown ul{position:relative}.netgis-menu .netgis-dropdown li{height:auto}.netgis-menu .netgis-dropdown li>ul{top:auto;left:auto}}@media (min-width:600px){.netgis-menu-toggle{display:none!important}}.netgis-modal{display:none;position:absolute;width:100%;height:100%;top:0;left:0;padding:6mm;z-index:10000;background:rgba(0,0,0,0.6)}.netgis-modal.netgis-show{display:block}.netgis-modal>*{position:relative;width:100%;height:100%;max-width:150mm;margin:0 auto}.netgis-modal .netgis-content{position:absolute;width:100%;top:12mm;bottom:0;padding:12mm;overflow:auto}.netgis-modal .netgis-button{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel{position:absolute;left:0;width:80mm;top:12mm;bottom:0;z-index:1000;-webkit-transform:translateX(-110%);transform:translateX(-110%);transition:transform 150ms ease;will-change:transform}.netgis-panel.netgis-show{-webkit-transform:none;transform:none}.netgis-client.netgis-footer>.netgis-panel{bottom:36mm}.netgis-panel>div{position:absolute;left:0;right:0;top:12mm;bottom:0;overflow:auto}.netgis-panel h2{margin:0 4mm;font-size:1em}.netgis-panel .netgis-button,.netgis-panel label{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel input[type=text]{margin-top:3mm}.netgis-panel .netgis-half{display:inline-block;width:50%!important;padding-right:1mm}.netgis-panel .netgis-half+.netgis-half{padding-left:1mm;padding-right:0}.netgis-panel .netgis-anim-bottom{transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-panel .netgis-anim-bottom.netgis-hide{display:initial;-webkit-transform:translateY(110%);transform:translateY(110%)}.netgis-panel .netgis-resize-bottom{max-height:80%}.netgis-popup{display:none;position:absolute;width:80mm;max-width:100mm;height:20mm;left:0;top:0;transform:translate(-50%,-100%);z-index:1000}.netgis-popup.netgis-fade{opacity:.5;transition:opacity .5s ease}.netgis-popup.netgis-fade:hover{opacity:1}.netgis-popup.netgis-show{display:block}.netgis-popup .netgis-arrow-down{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:0;height:0;border-left:3mm solid transparent;border-right:3mm solid transparent;border-top:3mm solid white}.netgis-popup .netgis-content{position:absolute;width:100%;min-height:12mm;max-height:100mm;left:0;bottom:2.9mm;padding:4mm 0;overflow:auto;cursor:default;box-shadow:0 1mm 4mm 0 rgba(0,0,0,0.3)}.netgis-popup .netgis-closer{position:absolute;right:0;top:0;height:9mm;background:none;width:100%;text-align:left}.netgis-popup .netgis-closer i{position:absolute;right:3mm}.netgis-popup .netgis-loader{font-size:6mm;text-align:center}.netgis-popup .netgis-wrapper{max-height:80mm;margin-top:5mm;padding:0 3mm;overflow:auto}.netgis-popup table{width:100%;border:0;border-collapse:collapse;table-layout:fixed;word-wrap:break-word}.netgis-popup th,.netgis-popup td{padding:2mm;text-align:left;vertical-align:top}.netgis-popup th[colspan]{padding-top:4mm}.netgis-popup tr:first-of-type th[colspan]{padding-top:0}.netgis-popup .netgis-wrapper button{width:100%;height:12mm;text-align:left}.netgis-popup summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-popup details>div{padding:4mm}.netgis-search{width:100%;transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-search.netgis-hide{display:initial!important;-webkit-transform:translateY(-200%);transform:translateY(-200%)}.netgis-search>label{display:inline-block;position:relative;width:100%;min-height:12mm}@media (max-width:599px){.netgis-search.netgis-responsive{left:0;right:0}}.netgis-search>label>input{width:100%;min-width:60mm;height:12mm;padding:1mm 4mm;vertical-align:top;border:none}.netgis-search>label>button{position:absolute!important;width:12mm;height:12mm;top:0;right:0;background:none}.netgis-search>ul{max-height:60mm;overflow-y:auto;margin:0;padding:0;list-style-type:none}.netgis-search li .netgis-button{width:100%;height:12mm;padding:0 3mm;text-align:left}.netgis-search li .netgis-button span{opacity:.5}.netgis-search-parcel{position:absolute;top:0;bottom:0;width:100%;overflow:hidden;padding:4mm}.netgis-search-parcel section{position:absolute;left:0;right:0;overflow:auto}.netgis-search-parcel section:first-of-type{top:0;bottom:0;padding:6mm}.netgis-search-parcel section:last-of-type{top:50%;bottom:0}.netgis-search-parcel h3{margin:0;margin-bottom:4mm}.netgis-search-parcel label{display:block;margin:3mm 0;margin-bottom:0;cursor:pointer;font-weight:bold}.netgis-search-parcel label:first-child{margin-top:0}.netgis-search-parcel label span:first-child{display:block}.netgis-search-parcel input{width:100%;height:12mm;margin:3mm 0;padding:0 3mm}.netgis-search-parcel .netgis-loader{width:6mm;height:6mm;top:8mm;right:3mm;font-size:6mm}.netgis-search-parcel ul{margin:0;padding:0;list-style-type:none}.netgis-search-parcel li button{text-align:left}.netgis-search-parcel button{display:block;width:100%;height:12mm;padding:0 3mm;margin:0}.netgis-search-parcel .netgis-table-wrapper{width:100%;margin-top:4mm;overflow:auto}.netgis-search-parcel table{min-width:100%;border-collapse:collapse;white-space:nowrap}.netgis-search-parcel table thead{position:-webkit-sticky;position:sticky;top:0;z-index:10}.netgis-search-parcel tr{height:12mm}.netgis-search-parcel th{text-align:left;padding:0 3mm}.netgis-search-parcel td{text-align:left;padding:0 3mm;cursor:pointer}.netgis-search-parcel td:first-child{padding:0}.netgis-search-parcel table button{display:inline-block;width:12mm;height:12mm;background:none}.netgis-search-parcel p{margin:4mm 3mm;font-style:italic}.netgis-search-place{position:absolute;width:100%;max-width:100mm;right:4mm;top:16mm;z-index:900}.netgis-tabs{position:relative}.netgis-tabs>.netgis-header{position:absolute;width:100%;height:12mm;left:0;top:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.netgis-tabs>.netgis-content{position:absolute;width:100%;left:0;top:12mm;bottom:0}.netgis-tabs.netgis-scroll>.netgis-header{height:16mm}.netgis-tabs.netgis-scroll>.netgis-content{top:16mm}.netgis-tabs>.netgis-header .netgis-button{display:inline-block;width:auto}.netgis-tabs>.netgis-content section{position:absolute;width:100%;height:100%;left:0;top:0;padding:12mm;overflow:auto}.netgis-tabs>.netgis-content section.netgis-hide{display:none}.netgis-font{font-family:Arial,sans-serif}.netgis-color-a{background-color:#900;color:#fff}.netgis-color-b{background-color:#430433;color:#fff}.netgis-color-c{background-color:#470f1b;color:#fff}.netgis-color-d{background-color:#f6f5f5;color:#000}.netgis-color-e{background-color:#fff;color:#000}.netgis-hover-a:hover{background-color:#900;color:#fff}.netgis-hover-b:hover{background-color:#430433;color:#fff}.netgis-hover-c:hover{background-color:#470f1b;color:#fff}.netgis-hover-d:hover{background-color:#f6f5f5;color:#000}.netgis-hover-e:hover{background-color:#fff;color:#000}.netgis-text-a{color:#900}.netgis-text-b{color:#430433}.netgis-text-c{color:#470f1b}.netgis-text-d{color:#f6f5f5}.netgis-text-e{color:#fff}.netgis-hover-text-a:hover{color:#900}.netgis-hover-text-b:hover{color:#430433}.netgis-hover-text-c:hover{color:#470f1b}.netgis-hover-text-d:hover{color:#f6f5f5}.netgis-hover-text-e:hover{color:#fff}.netgis-timeslider{position:absolute;width:100%;height:36mm;bottom:0;box-shadow:0 0 4mm 0 rgba(0,0,0,0.3);z-index:1000}.netgis-timeslider:hover{z-index:1000}.netgis-timeslider.netgis-active{z-index:1000;cursor:grabbing}.netgis-timeslider>.netgis-header{position:absolute;width:100%;height:12mm;text-align:left;z-index:1}.netgis-timeslider>.netgis-wrapper{position:absolute;width:100%;top:12mm;bottom:0;overflow-x:auto;cursor:grab}.netgis-timeslider.netgis-active>.netgis-wrapper{cursor:grabbing}.netgis-timeslider table{height:100%;border-collapse:collapse}.netgis-timeslider td{position:relative;min-width:32mm;height:100%;white-space:nowrap}.netgis-timeslider td:not(:empty){padding:0}.netgis-timeslider td .netgis-button{height:100%;opacity:.5;cursor:inherit!important}.netgis-timeslider td .netgis-button .netgis-icon{position:relative}.netgis-timeslider td .netgis-button span{margin-left:2mm!important;margin-right:3mm}.netgis-timeslider td.netgis-active .netgis-button,.netgis-timeslider:not(.netgis-active) td:hover .netgis-button{opacity:1}.netgis-toolbox{position:absolute;top:12mm!important;bottom:0!important;width:100%;overflow:hidden}.netgis-toolbox section{position:absolute;left:0;right:0;overflow:auto}.netgis-toolbox section:first-of-type{top:0;bottom:0}.netgis-toolbox section:last-of-type{top:50%;bottom:0}.netgis-toolbox section:last-of-type>div{position:absolute;width:100%;top:12mm;bottom:0;overflow:auto}.netgis-toolbox button:hover i{color:inherit!important}.netgis-toolbox button.netgis-active{font-weight:bold}.netgis-toolbox label{display:block;width:100%;min-height:12mm;text-align:left;position:relative;padding:4mm;cursor:pointer}.netgis-toolbox input[type=checkbox]{width:4mm;height:4mm;margin:0 4mm 0 0}.netgis-toolbox input[type=checkbox]:last-child{float:right;margin-right:0}.netgis-toolbox input[type=text]{width:100%;height:10mm;padding:0 2mm;margin-top:3mm}.netgis-toolbox input[type=number]{position:absolute;right:2mm;width:24mm;top:2.5mm;height:8mm;padding:0 1mm}.netgis-tree{display:block;line-height:12mm;padding:0;margin:0;list-style-type:none}.netgis-tree ul{padding:0;margin:0;padding-left:9mm;list-style-type:none}.netgis-tree .netgis-folder{position:relative}.netgis-tree summary{display:block}.netgis-tree summary label{text-align:center}.netgis-tree .netgis-folder .netgis-icon{width:6mm;left:12mm;color:#eab000}.netgis-tree .netgis-folder .netgis-partial{opacity:.5}.netgis-tree details[open]>summary>.netgis-hide-open,.netgis-tree details>summary>.netgis-show-open{display:none}.netgis-tree details[open]>summary>.netgis-show-open{display:initial}.netgis-tree .netgis-folder>details>summary>label{position:absolute;width:12mm;top:0;left:0}.netgis-tree .netgis-folder>details>summary>span{margin-left:17mm!important}.netgis-tree .netgis-item{position:relative}.netgis-tree .netgis-item label{padding:0 4mm;padding-left:3mm}.netgis-tree .netgis-item label input{margin-right:4mm}.netgis-tree .netgis-item summary{position:absolute;width:12mm;height:12mm;right:0;top:0;text-align:center}.netgis-tree .netgis-item summary+*{position:relative;margin-left:7.5mm}.netgis-tree .netgis-item details label{position:relative}.netgis-tree .netgis-item details label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm;overflow:hidden}.netgis-tree .netgis-item details label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-tree .netgis-item details label input[type=range]{width:100%;cursor:pointer}.netgis-bold{font-weight:bold}.netgis-clip-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.netgis-center{text-align:center!important}.netgis-clickable{cursor:pointer!important}.netgis-resize-right{resize:horizontal;overflow-x:auto;min-width:40mm;max-width:100%}.netgis-resize-bottom{resize:vertical;overflow-y:auto;min-height:24mm;max-height:100%}.netgis-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.netgis-shadow{box-shadow:0 .5mm 1mm 0 rgba(0,0,0,0.1),0 1mm 2.5mm 0 rgba(0,0,0,0.05)!important}.netgis-shadow-large{box-shadow:0 1mm 2mm 0 rgba(0,0,0,0.1),0 2mm 5mm 0 rgba(0,0,0,0.05)!important}.netgis-text-shadow{text-shadow:0 0 1mm rgba(0,0,0,1.0)}.netgis-round{border-radius:2mm}.netgis-hide{display:none!important}.netgis-client button,.netgis-button{position:relative;padding:0 4mm;font-family:inherit;text-decoration:none;border:none;outline:none;cursor:pointer}.netgis-button .netgis-icon{display:inline-block;position:absolute;width:12mm;left:0;top:0;bottom:0;line-height:12mm;text-align:center;font-size:1.2em}.netgis-button.netgis-center .netgis-icon:first-child{position:static}.netgis-button .netgis-icon:last-child{left:auto;right:0}.netgis-button:not(.netgis-center) .netgis-icon+*:not(.netgis-icon){margin-left:8mm}.netgis-form h3{font-size:1em;margin-top:0;margin-bottom:4mm}.netgis-form ul{padding:0;padding-left:12mm;margin-top:0;margin-bottom:6mm;list-style-type:square}.netgis-form li{padding-left:2mm}.netgis-form label{display:block;margin-bottom:6mm;font-weight:bold;cursor:pointer;user-select:none}.netgis-form input,.netgis-form select{display:block;width:100%;margin-top:4mm;padding:2mm}.netgis-form input[type=file]{padding:6mm;cursor:pointer;background:#efefef}.netgis-form input[type=checkbox]{display:inline-block;width:12mm;margin:0}.netgis-form input[type=checkbox]:first-child{width:4mm;margin-right:3mm;margin-top:2mm;margin-bottom:2mm}.netgis-form button{display:block;width:100%;height:12mm}.netgis-form button:not(:last-child){margin-bottom:6mm}.netgis-form select{cursor:pointer}.netgis-loader{position:absolute;width:100%;height:100%;z-index:999999;text-align:center;font-size:12mm}.netgis-loader *{position:absolute;width:100%;left:0;top:50%;transform:translateY(-50%);animation:netgis-spin 2s linear infinite}@keyframes netgis-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@media (max-width:599px){.netgis-hide-mobile{display:none!important}}@media (min-width:600px){.netgis-hide-desktop{display:none!important}}
\ No newline at end of file
+.netgis-attribution{position:absolute;right:0;bottom:0;padding:1mm;background:rgba(255,255,255,0.5);font-size:2.5mm;z-index:100}.netgis-client{position:relative;box-sizing:border-box;font-size:4mm;overflow:hidden}.netgis-client *{box-sizing:border-box}.netgis-client button{font-size:inherit}.netgis-contextmenu{position:absolute;width:64mm;z-index:90000}.netgis-contextmenu>*{display:block;position:relative;width:100%;height:12mm;line-height:12mm;padding:0 4mm;text-align:left;background:none}.netgis-contextmenu>label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm}.netgis-contextmenu>label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-contextmenu>label span:only-of-type{left:12mm;right:0;padding:0 4mm;padding-left:0;cursor:pointer}.netgis-contextmenu>label input[type=range]{width:100%;cursor:pointer}.netgis-controls{position:absolute;width:12mm;right:4mm;bottom:8mm;overflow:hidden;z-index:100}.netgis-client.netgis-footer>.netgis-controls{bottom:44mm}.netgis-controls button{font-size:5mm!important;color:inherit;width:100%;height:12mm;padding:0;border:none;background-color:inherit;cursor:pointer}.netgis-dropdown{display:inline-block;position:relative;padding:0}.netgis-dropdown>:first-child{z-index:10}.netgis-dropdown ul{display:none;position:absolute;margin:0;padding:0;list-style-type:none}.netgis-dropdown:hover>ul{display:block}.netgis-dropdown li{position:relative;height:12mm}.netgis-dropdown li>button,.netgis-dropdown li>a{display:inline-block;width:100%;height:100%;text-align:left}.netgis-dropdown li>ul{display:none;top:0;left:100%}.netgis-dropdown li:hover>ul{display:block}.netgis-dropdown li i{margin-right:4mm!important}.netgis-dropdown li>label{display:block;text-align:left}.netgis-dropdown li>label input{width:4mm;margin:0;margin-right:4mm}.netgis-compact .netgis-dropdown li{height:9mm;line-height:9mm}.netgis-compact .netgis-dropdown li button,.netgis-compact .netgis-dropdown li .netgis-button{padding:0 3mm}.netgis-compact .netgis-dropdown li i{margin-right:4mm}@media (max-width:599px){}.netgis-import .netgis-preview-map{position:absolute;width:100%;height:40mm;cursor:grab}.netgis-import .netgis-preview-map:active:hover{cursor:grabbing}.netgis-import .netgis-preview-tree{position:absolute;width:100%;top:52mm;bottom:12mm;overflow-y:auto}.netgis-import .netgis-import-submit{position:absolute;width:100%;height:12mm;bottom:0}.netgis-import .netgis-geoportal .netgis-tree{padding-left:0;list-style-type:none}.netgis-import .netgis-geoportal .netgis-tree li{padding-left:0}.netgis-import .netgis-geoportal .netgis-tree label{padding-left:0;margin-bottom:0;font-weight:normal}.netgis-import .netgis-geoportal .netgis-tree .netgis-item input{margin-right:0}.netgis-map{position:absolute;left:0;right:0;top:12mm;bottom:0;cursor:grab;background:#e0dfdf}.netgis-map:active:hover{cursor:grabbing!important}.netgis-map-overlay{width:1px;height:1px;background:none}.netgis-map.netgis-clickable{cursor:pointer}.netgis-map.netgis-mode-zoom-box,.netgis-map.netgis-mode-zoom-box:active:hover,.netgis-map.netgis-mode-measure-line,.netgis-map.netgis-mode-measure-area{cursor:crosshair}.netgis-map.netgis-mode-measure-line:active:hover,.netgis-map.netgis-mode-measure-area:active:hover{cursor:grabbing}.netgis-map.netgis-mode-draw-points,.netgis-map.netgis-mode-draw-lines,.netgis-map.netgis-mode-draw-polygons,.netgis-map.netgis-mode-cut-features-draw{cursor:crosshair}.netgis-map.netgis-mode-draw-points.netgis-not-allowed,.netgis-map.netgis-mode-draw-lines.netgis-not-allowed,.netgis-map.netgis-mode-draw-polygons.netgis-not-allowed{cursor:no-drop}.netgis-map .ol-scale-bar{right:24mm;bottom:10mm;left:auto}.netgis-client.netgis-footer>.netgis-map .ol-scale-bar{bottom:46mm}.netgis-menu{position:absolute;left:0;right:0;top:0;max-height:12mm;line-height:12mm;white-space:nowrap;text-align:right;font-size:0;z-index:10000}.netgis-menu.netgis-menu-large{max-height:100%}.netgis-menu .netgis-menu-toggle{z-index:1}.netgis-menu>*{display:inline-block;min-width:12mm;height:12mm;padding:0 4mm;margin:0;font-size:4mm!important}.netgis-menu>h1{position:absolute;left:0;top:0;bottom:0;font-weight:bold;cursor:default}.netgis-menu a{color:inherit;text-decoration:none}.netgis-menu button,.netgis-menu select{color:inherit;background:none;border:none;outline:none;cursor:pointer}.netgis-menu button img,.netgis-menu a img{position:relative;top:.7mm;height:1em}.netgis-menu button i:not(:only-child),.netgis-menu a i:not(:only-child),.netgis-menu button img:not(:only-child),.netgis-menu a img:not(:only-child){width:4mm;margin-right:3mm;text-align:center}.netgis-menu>.netgis-wrapper{display:inline-block;position:relative;padding:0}.netgis-menu>.netgis-wrapper>.netgis-icon{position:absolute;left:0;top:0;padding-left:4mm;pointer-events:none}.netgis-menu>.netgis-wrapper select{width:100%;height:100%;padding-left:11mm}.netgis-menu>.netgis-wrapper select:last-child{padding-left:4mm}@media (max-width:599px){.netgis-menu>*:not(.netgis-menu-toggle){display:block;width:100%;text-align:left}.netgis-menu{overflow:hidden}.netgis-menu.netgis-menu-large{overflow-y:auto}.netgis-menu .netgis-dropdown{height:auto}.netgis-menu .netgis-dropdown ul{position:relative}.netgis-menu .netgis-dropdown li{height:auto}.netgis-menu .netgis-dropdown li>ul{top:auto;left:auto}}@media (min-width:600px){.netgis-menu-toggle{display:none!important}}.netgis-modal{display:none;position:absolute;width:100%;height:100%;top:0;left:0;padding:6mm;z-index:10000;background:rgba(0,0,0,0.6)}.netgis-modal.netgis-show{display:block}.netgis-modal>*{position:relative;width:100%;height:100%;max-width:150mm;margin:0 auto}.netgis-modal .netgis-content{position:absolute;width:100%;top:12mm;bottom:0;padding:12mm;overflow:auto}.netgis-modal .netgis-button{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel{position:absolute;left:0;width:80mm;top:12mm;bottom:0;z-index:1000;-webkit-transform:translateX(-110%);transform:translateX(-110%);transition:transform 150ms ease;will-change:transform}.netgis-panel.netgis-show{-webkit-transform:none;transform:none}.netgis-client.netgis-footer>.netgis-panel{bottom:36mm}.netgis-panel>div{position:absolute;left:0;right:0;top:12mm;bottom:0;overflow:auto}.netgis-panel h2{margin:0 4mm;font-size:1em}.netgis-panel .netgis-button,.netgis-panel label{display:block;width:100%;min-height:12mm;text-align:left}.netgis-panel input[type=text]{margin-top:3mm}.netgis-panel .netgis-half{display:inline-block;width:50%!important;padding-right:1mm}.netgis-panel .netgis-half+.netgis-half{padding-left:1mm;padding-right:0}.netgis-panel .netgis-anim-bottom{transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-panel .netgis-anim-bottom.netgis-hide{display:initial;-webkit-transform:translateY(110%);transform:translateY(110%)}.netgis-panel .netgis-resize-bottom{max-height:80%}.netgis-popup{display:none;position:absolute;width:80mm;max-width:100mm;height:20mm;left:0;top:0;transform:translate(-50%,-100%);z-index:1000}.netgis-popup.netgis-fade{opacity:.5;transition:opacity .5s ease}.netgis-popup.netgis-fade:hover{opacity:1}.netgis-popup.netgis-show{display:block}.netgis-popup .netgis-arrow-down{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:0;height:0;border-left:3mm solid transparent;border-right:3mm solid transparent;border-top:3mm solid white}.netgis-popup .netgis-content{position:absolute;width:100%;min-height:12mm;max-height:100mm;left:0;bottom:2.9mm;padding:4mm 0;overflow:auto;cursor:default;box-shadow:0 1mm 4mm 0 rgba(0,0,0,0.3)}.netgis-popup .netgis-closer{position:absolute;right:0;top:0;height:9mm;background:none;width:100%;text-align:left}.netgis-popup .netgis-closer i{position:absolute;right:3mm}.netgis-popup .netgis-loader{font-size:6mm;text-align:center}.netgis-popup .netgis-wrapper{max-height:80mm;margin-top:5mm;padding:0 3mm;overflow:auto}.netgis-popup table{width:100%;border:0;border-collapse:collapse;table-layout:fixed;word-wrap:break-word}.netgis-popup th,.netgis-popup td{padding:2mm;text-align:left;vertical-align:top}.netgis-popup th[colspan]{padding-top:4mm}.netgis-popup tr:first-of-type th[colspan]{padding-top:0}.netgis-popup .netgis-wrapper button{width:100%;height:12mm;text-align:left}.netgis-popup summary{display:block;height:12mm;line-height:12mm;font-weight:bold}.netgis-popup details>div{padding:4mm}.netgis-search{width:100%;transition:transform 150ms ease;will-change:transform;-webkit-transform:none;transform:none}.netgis-search.netgis-hide{display:initial!important;-webkit-transform:translateY(-200%);transform:translateY(-200%)}.netgis-search>label{display:inline-block;position:relative;width:100%;min-height:12mm}@media (max-width:599px){.netgis-search.netgis-responsive{left:0;right:0}}.netgis-search>label>input{width:100%;min-width:60mm;height:12mm;padding:1mm 4mm;vertical-align:top;border:none}.netgis-search>label>button{position:absolute!important;width:12mm;height:12mm;top:0;right:0;background:none}.netgis-search>ul{max-height:60mm;overflow-y:auto;margin:0;padding:0;list-style-type:none}.netgis-search li .netgis-button{width:100%;height:12mm;padding:0 3mm;text-align:left}.netgis-search li .netgis-button span{opacity:.5}.netgis-search-parcel{position:absolute;top:0;bottom:0;width:100%;overflow:hidden;padding:4mm}.netgis-search-parcel section{position:absolute;left:0;right:0;overflow:auto}.netgis-search-parcel section:first-of-type{top:0;bottom:0;padding:6mm}.netgis-search-parcel section:last-of-type{top:50%;bottom:0}.netgis-search-parcel h3{margin:0;margin-bottom:4mm}.netgis-search-parcel label{display:block;margin:3mm 0;margin-bottom:0;cursor:pointer;font-weight:bold}.netgis-search-parcel label:first-child{margin-top:0}.netgis-search-parcel label span:first-child{display:block}.netgis-search-parcel input{width:100%;height:12mm;margin:3mm 0;padding:0 3mm}.netgis-search-parcel .netgis-loader{width:6mm;height:6mm;top:8mm;right:3mm;font-size:6mm}.netgis-search-parcel ul{margin:0;padding:0;list-style-type:none}.netgis-search-parcel li button{text-align:left}.netgis-search-parcel button{display:block;width:100%;height:12mm;padding:0 3mm;margin:0}.netgis-search-parcel .netgis-table-wrapper{width:100%;margin-top:4mm;overflow:auto}.netgis-search-parcel table{min-width:100%;border-collapse:collapse;white-space:nowrap}.netgis-search-parcel table thead{position:-webkit-sticky;position:sticky;top:0;z-index:10}.netgis-search-parcel tr{height:12mm}.netgis-search-parcel th{text-align:left;padding:0 3mm}.netgis-search-parcel td{text-align:left;padding:0 3mm;cursor:pointer}.netgis-search-parcel td:first-child{padding:0}.netgis-search-parcel table button{display:inline-block;width:12mm;height:12mm;background:none}.netgis-search-parcel p{margin:4mm 3mm;font-style:italic}.netgis-search-place{position:absolute;width:100%;max-width:100mm;right:4mm;top:16mm;z-index:900}.netgis-tabs{position:relative}.netgis-tabs>.netgis-header{position:absolute;width:100%;height:12mm;left:0;top:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.netgis-tabs>.netgis-content{position:absolute;width:100%;left:0;top:12mm;bottom:0}.netgis-tabs.netgis-scroll>.netgis-header{height:16mm}.netgis-tabs.netgis-scroll>.netgis-content{top:16mm}.netgis-tabs>.netgis-header .netgis-button{display:inline-block;width:auto}.netgis-tabs>.netgis-content section{position:absolute;width:100%;height:100%;left:0;top:0;padding:12mm;overflow:auto}.netgis-tabs>.netgis-content section.netgis-hide{display:none}.netgis-font{font-family:Arial,sans-serif}.netgis-color-a{background-color:#900;color:#fff}.netgis-color-b{background-color:#430433;color:#fff}.netgis-color-c{background-color:#470f1b;color:#fff}.netgis-color-d{background-color:#f6f5f5;color:#000}.netgis-color-e{background-color:#fff;color:#000}.netgis-hover-a:hover{background-color:#900;color:#fff}.netgis-hover-b:hover{background-color:#430433;color:#fff}.netgis-hover-c:hover{background-color:#470f1b;color:#fff}.netgis-hover-d:hover{background-color:#f6f5f5;color:#000}.netgis-hover-e:hover{background-color:#fff;color:#000}.netgis-text-a{color:#900}.netgis-text-b{color:#430433}.netgis-text-c{color:#470f1b}.netgis-text-d{color:#f6f5f5}.netgis-text-e{color:#fff}.netgis-hover-text-a:hover{color:#900}.netgis-hover-text-b:hover{color:#430433}.netgis-hover-text-c:hover{color:#470f1b}.netgis-hover-text-d:hover{color:#f6f5f5}.netgis-hover-text-e:hover{color:#fff}.netgis-timeslider{position:absolute;width:100%;height:36mm;bottom:0;box-shadow:0 0 4mm 0 rgba(0,0,0,0.3);z-index:1000}.netgis-timeslider:hover{z-index:1000}.netgis-timeslider.netgis-active{z-index:1000;cursor:grabbing}.netgis-timeslider>.netgis-header{position:absolute;width:100%;height:12mm;text-align:left;z-index:1}.netgis-timeslider>.netgis-wrapper{position:absolute;width:100%;top:12mm;bottom:0;overflow-x:auto;cursor:grab}.netgis-timeslider.netgis-active>.netgis-wrapper{cursor:grabbing}.netgis-timeslider table{height:100%;border-collapse:collapse}.netgis-timeslider td{position:relative;min-width:32mm;height:100%;white-space:nowrap}.netgis-timeslider td:not(:empty){padding:0}.netgis-timeslider td .netgis-button{height:100%;opacity:.5;cursor:inherit!important}.netgis-timeslider td .netgis-button .netgis-icon{position:relative}.netgis-timeslider td .netgis-button span{margin-left:2mm!important;margin-right:3mm}.netgis-timeslider td.netgis-active .netgis-button,.netgis-timeslider:not(.netgis-active) td:hover .netgis-button{opacity:1}.netgis-toolbox{position:absolute;top:12mm!important;bottom:0!important;width:100%;overflow:hidden}.netgis-toolbox section{position:absolute;left:0;right:0;overflow:auto}.netgis-toolbox section:first-of-type{top:0;bottom:0}.netgis-toolbox section:last-of-type{top:50%;bottom:0}.netgis-toolbox section:last-of-type>div{position:absolute;width:100%;top:12mm;bottom:0;overflow:auto}.netgis-toolbox button:hover i{color:inherit!important}.netgis-toolbox button.netgis-active{font-weight:bold}.netgis-toolbox label{display:block;width:100%;min-height:12mm;text-align:left;position:relative;padding:4mm;cursor:pointer}.netgis-toolbox input[type=checkbox]{width:4mm;height:4mm;margin:0 4mm 0 0}.netgis-toolbox input[type=checkbox]:last-child{float:right;margin-right:0}.netgis-toolbox input[type=text]{width:100%;height:10mm;padding:0 2mm;margin-top:3mm}.netgis-toolbox input[type=number]{position:absolute;right:2mm;width:24mm;top:2.5mm;height:8mm;padding:0 1mm}.netgis-tree{display:block;line-height:12mm;padding:0;margin:0;list-style-type:none}.netgis-tree ul{padding:0;margin:0;padding-left:9mm;list-style-type:none}.netgis-tree .netgis-folder{position:relative}.netgis-tree summary{display:block}.netgis-tree summary label{text-align:center}.netgis-tree .netgis-folder .netgis-icon{width:6mm;left:12mm;color:#eab000}.netgis-tree .netgis-folder .netgis-partial{opacity:.5}.netgis-tree details[open]>summary>.netgis-hide-open,.netgis-tree details>summary>.netgis-show-open{display:none}.netgis-tree details[open]>summary>.netgis-show-open{display:initial}.netgis-tree .netgis-folder>details>summary>label{position:absolute;width:12mm;top:0;left:0}.netgis-tree .netgis-folder>details>summary>span{margin-left:17mm!important}.netgis-tree .netgis-item{position:relative}.netgis-tree .netgis-item label{padding:0 4mm;padding-left:3mm}.netgis-tree .netgis-item label input{margin-right:4mm}.netgis-tree .netgis-item summary{position:absolute;width:12mm;height:12mm;right:0;top:0;text-align:center}.netgis-tree .netgis-item summary+*{position:relative;margin-left:7.5mm}.netgis-tree .netgis-item details label{position:relative}.netgis-tree .netgis-item details label span{position:absolute;left:0;right:50%;height:100%;padding:0 4mm;overflow:hidden}.netgis-tree .netgis-item details label span:last-of-type{left:50%;right:0;padding:2mm;padding-left:0;padding-right:4mm}.netgis-tree .netgis-item details label input[type=range]{width:100%;cursor:pointer}.netgis-bold{font-weight:bold}.netgis-clip-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.netgis-center{text-align:center!important}.netgis-clickable{cursor:pointer!important}.netgis-resize-right{resize:horizontal;overflow-x:auto;min-width:40mm;max-width:100%}.netgis-resize-bottom{resize:vertical;overflow-y:auto;min-height:24mm;max-height:100%}.netgis-noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.netgis-shadow{box-shadow:0 .5mm 1mm 0 rgba(0,0,0,0.1),0 1mm 2.5mm 0 rgba(0,0,0,0.05)!important}.netgis-shadow-large{box-shadow:0 1mm 2mm 0 rgba(0,0,0,0.1),0 2mm 5mm 0 rgba(0,0,0,0.05)!important}.netgis-text-shadow{text-shadow:0 0 1mm rgba(0,0,0,1.0)}.netgis-round{border-radius:2mm}.netgis-hide{display:none!important}.netgis-client button,.netgis-button{position:relative;padding:0 4mm;font-family:inherit;text-decoration:none;border:none;outline:none;cursor:pointer}.netgis-button .netgis-icon{display:inline-block;position:absolute;width:12mm;left:0;top:0;bottom:0;line-height:12mm;text-align:center;font-size:1.2em}.netgis-button.netgis-center .netgis-icon:first-child{position:static}.netgis-button .netgis-icon:last-child{left:auto;right:0}.netgis-button:not(.netgis-center) .netgis-icon+*:not(.netgis-icon){margin-left:8mm}.netgis-form h3{font-size:1em;margin-top:0;margin-bottom:4mm}.netgis-form ul{padding:0;padding-left:12mm;margin-top:0;margin-bottom:6mm;list-style-type:square}.netgis-form li{padding-left:2mm}.netgis-form label{display:block;margin-bottom:6mm;font-weight:bold;cursor:pointer;user-select:none}.netgis-form input,.netgis-form select{display:block;width:100%;margin-top:4mm;padding:2mm}.netgis-form input[type=file]{padding:6mm;cursor:pointer;background:#efefef}.netgis-form input[type=checkbox]{display:inline-block;width:12mm;margin:0}.netgis-form input[type=checkbox]:first-child{width:4mm;margin-right:3mm;margin-top:2mm;margin-bottom:2mm}.netgis-form button{display:block;width:100%;height:12mm}.netgis-form button:not(:last-child){margin-bottom:6mm}.netgis-form select{cursor:pointer}.netgis-loader{position:absolute;width:100%;height:100%;z-index:999999;text-align:center;font-size:12mm;cursor:progress}.netgis-loader *{position:absolute;width:100%;left:0;top:50%;transform:translateY(-50%);animation:netgis-spin 2s linear infinite}@keyframes netgis-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@media (max-width:599px){.netgis-hide-mobile{display:none!important}}@media (min-width:600px){.netgis-hide-desktop{display:none!important}}
\ No newline at end of file
diff --git a/templates/map/client/dist/netgis.min.js b/templates/map/client/dist/netgis.min.js
index 587a5af5..346717df 100644
--- a/templates/map/client/dist/netgis.min.js
+++ b/templates/map/client/dist/netgis.min.js
@@ -1,5733 +1,445 @@
-var $jscomp = $jscomp || {};
-$jscomp.scope = {};
-$jscomp.ASSUME_ES5 = !1;
-$jscomp.ASSUME_NO_NATIVE_MAP = !1;
-$jscomp.ASSUME_NO_NATIVE_SET = !1;
-$jscomp.SIMPLE_FROUND_POLYFILL = !1;
-$jscomp.defineProperty =
-    $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties
-        ? Object.defineProperty
-        : function (a, b, c) {
-              a != Array.prototype && a != Object.prototype && (a[b] = c.value);
-          };
-$jscomp.getGlobal = function (a) {
-    return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a;
-};
-$jscomp.global = $jscomp.getGlobal(this);
-$jscomp.polyfill = function (a, b, c, d) {
-    if (b) {
-        c = $jscomp.global;
-        a = a.split(".");
-        for (d = 0; d < a.length - 1; d++) {
-            var e = a[d];
-            e in c || (c[e] = {});
-            c = c[e];
-        }
-        a = a[a.length - 1];
-        d = c[a];
-        b = b(d);
-        b != d && null != b && $jscomp.defineProperty(c, a, { configurable: !0, writable: !0, value: b });
-    }
-};
-$jscomp.polyfill(
-    "Number.parseFloat",
-    function (a) {
-        return a || parseFloat;
-    },
-    "es6",
-    "es3"
-);
-$jscomp.polyfill(
-    "Number.parseInt",
-    function (a) {
-        return a || parseInt;
-    },
-    "es6",
-    "es3"
-);
-$jscomp.arrayIteratorImpl = function (a) {
-    var b = 0;
-    return function () {
-        return b < a.length ? { done: !1, value: a[b++] } : { done: !0 };
-    };
-};
-$jscomp.arrayIterator = function (a) {
-    return { next: $jscomp.arrayIteratorImpl(a) };
-};
-$jscomp.SYMBOL_PREFIX = "jscomp_symbol_";
-$jscomp.initSymbol = function () {
-    $jscomp.initSymbol = function () {};
-    $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol);
-};
-$jscomp.SymbolClass = function (a, b) {
-    this.$jscomp$symbol$id_ = a;
-    $jscomp.defineProperty(this, "description", { configurable: !0, writable: !0, value: b });
-};
-$jscomp.SymbolClass.prototype.toString = function () {
-    return this.$jscomp$symbol$id_;
-};
-$jscomp.Symbol = (function () {
-    function a(c) {
-        if (this instanceof a) throw new TypeError("Symbol is not a constructor");
-        return new $jscomp.SymbolClass($jscomp.SYMBOL_PREFIX + (c || "") + "_" + b++, c);
-    }
-    var b = 0;
-    return a;
-})();
-$jscomp.initSymbolIterator = function () {
-    $jscomp.initSymbol();
-    var a = $jscomp.global.Symbol.iterator;
-    a || (a = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("Symbol.iterator"));
-    "function" != typeof Array.prototype[a] &&
-        $jscomp.defineProperty(Array.prototype, a, {
-            configurable: !0,
-            writable: !0,
-            value: function () {
-                return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this));
-            },
-        });
-    $jscomp.initSymbolIterator = function () {};
-};
-$jscomp.initSymbolAsyncIterator = function () {
-    $jscomp.initSymbol();
-    var a = $jscomp.global.Symbol.asyncIterator;
-    a || (a = $jscomp.global.Symbol.asyncIterator = $jscomp.global.Symbol("Symbol.asyncIterator"));
-    $jscomp.initSymbolAsyncIterator = function () {};
-};
-$jscomp.iteratorPrototype = function (a) {
-    $jscomp.initSymbolIterator();
-    a = { next: a };
-    a[$jscomp.global.Symbol.iterator] = function () {
-        return this;
-    };
-    return a;
-};
-$jscomp.iteratorFromArray = function (a, b) {
-    $jscomp.initSymbolIterator();
-    a instanceof String && (a += "");
-    var c = 0,
-        d = {
-            next: function () {
-                if (c < a.length) {
-                    var e = c++;
-                    return { value: b(e, a[e]), done: !1 };
-                }
-                d.next = function () {
-                    return { done: !0, value: void 0 };
-                };
-                return d.next();
-            },
-        };
-    d[Symbol.iterator] = function () {
-        return d;
-    };
-    return d;
-};
-$jscomp.polyfill(
-    "Array.prototype.values",
-    function (a) {
-        return a
-            ? a
-            : function () {
-                  return $jscomp.iteratorFromArray(this, function (a, c) {
-                      return c;
-                  });
-              };
-    },
-    "es8",
-    "es3"
-);
-$jscomp.polyfill(
-    "Number.isNaN",
-    function (a) {
-        return a
-            ? a
-            : function (a) {
-                  return "number" === typeof a && isNaN(a);
-              };
-    },
-    "es6",
-    "es3"
-);
-$jscomp.owns = function (a, b) {
-    return Object.prototype.hasOwnProperty.call(a, b);
-};
-$jscomp.assign =
-    "function" == typeof Object.assign
-        ? Object.assign
-        : function (a, b) {
-              for (var c = 1; c < arguments.length; c++) {
-                  var d = arguments[c];
-                  if (d) for (var e in d) $jscomp.owns(d, e) && (a[e] = d[e]);
-              }
-              return a;
-          };
-$jscomp.polyfill(
-    "Object.assign",
-    function (a) {
-        return a || $jscomp.assign;
-    },
-    "es6",
-    "es3"
-);
-var netgis = netgis || {};
-netgis.Attribution = function (a) {
-    this.config = a;
-    this.layers = this.client = null;
-    this.items = [];
-    this.initElements(a);
-};
-netgis.Attribution.prototype.initElements = function (a) {
-    this.container = document.createElement("section");
-    this.container.className = "netgis-attribution netgis-text-a";
-    a.attribution && a.attribution.prefix && this.items.push(a.attribution.prefix);
-    this.update();
-};
-netgis.Attribution.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-    a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this));
-    a.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onEditLayerChange.bind(this));
-};
-netgis.Attribution.prototype.update = function () {
-    var a = "&copy; " + this.items.join(", ");
-    this.appendix && (a += ", " + this.appendix);
-    this.container.innerHTML = a;
-};
-netgis.Attribution.prototype.add = function (a) {
-    for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) return;
-    this.items.push(a);
-    this.update();
-};
-netgis.Attribution.prototype.remove = function (a) {
-    for (var b = 0; b < this.items.length; b++)
-        if (this.items[b] === a) {
-            this.items.splice(b, 1);
-            break;
-        }
-    this.update();
-};
-netgis.Attribution.prototype.onMapLayerToggle = function (a) {
-    a = a.detail;
-    for (var b = this.config.layers, c = null, d = 0; d < b.length; d++) {
-        var e = b[d];
-        e.id === a.id && (c = e.attribution);
-    }
-    c && (a.on ? this.add(c) : this.remove(c));
-};
-netgis.Attribution.prototype.onContextUpdate = function (a) {
-    this.layers = [];
-    for (var b = 0; b < a.layers.length; b++) {
-        var c = a.layers[b];
-        c.attribution && 0 < c.attribution.length && (this.layers[c.id] = c.attribution);
-    }
-    for (b = 0; b < a.layers.length; b++) if (((c = a.layers[b]), c.active)) this.onLayerShow({ id: c.id });
-};
-netgis.Attribution.prototype.onLayerShow = function (a) {
-    if ((a = this.layers[a.id])) {
-        for (var b = 0; b < this.items.length; b++) if (this.items[b] === a) return;
-        this.items.push(a);
-        this.update();
-    }
-};
-netgis.Attribution.prototype.onLayerHide = function (a) {
-    if ((a = this.layers[a.id])) {
-        for (var b = 0; b < this.items.length; b++)
-            if (this.items[b] === a) {
-                this.items.splice(b, 1);
-                break;
-            }
-        this.update();
-    }
-};
-netgis.Attribution.prototype.onEditLayerChange = function (a) {
-    a = a.detail.geojson.area;
-    for (var b = 0; b < this.items.length; b++)
-        if (-1 < this.items[b].search("Zeichnungsfl\u00e4che: ")) {
-            this.items.splice(b, 1);
-            break;
-        }
-    this.appendix = a && 0 < a ? "<b>Zeichnungsfl\u00e4che: " + netgis.util.formatArea(a, !0) + "</b>" : null;
-    this.update();
-};
-netgis = netgis || {};
-netgis.Client = function (a, b) {
-    this.config = b;
-    this.logEvents = !1;
-    this.initParams(b);
-    this.initConfig(b);
-    this.initElements(a);
-    this.initModules(b);
-    this.initEvents();
-    this.initOutput(b);
-    a = new netgis.ContextMenu();
-    a.attachTo(this.container);
-    this.modules.contextmenu = a;
-    this.popup = new netgis.Popup();
-    this.popup.attachTo(this.container);
-};
-netgis.Client.prototype.initParams = function (a) {
-    var b = window.location.search.substr(1);
-    b = b.split("&");
-    this.params = {};
-    for (var c = 0; c < b.length; c++) {
-        var d = b[c].split("="),
-            e = d[0].toLowerCase();
-        d = d[1];
-        e && "" !== e && (this.params[e] = d);
-    }
-    for (e in this.params)
-        switch (((d = this.params[e]), e)) {
-            case "wmc_id":
-                a.wmc && (a.wmc.id = d);
-        }
-};
-netgis.Client.prototype.initConfig = function (a) {
-    a.wmc && a.wmc.url && this.requestContextWMC(a.wmc.url, a.wmc.id);
-    a.ows && a.ows.url && this.requestContextOWS(a.ows.url);
-};
-netgis.Client.prototype.initElements = function (a) {
-    alert(this.config);
-    netgis.util.isString(a) && (a = document.getElementById(a));
-    a.classList.add("netgis-client", "netgis-font");
-    if (a.hasAttribute("data-lon") && a.hasAttribute("data-lat")) {
-        var b = Number.parseFloat(a.getAttribute("data-lon")),
-            c = Number.parseFloat(a.getAttribute("data-lat"));
-        this.config.map.center_lonlat = [b, c];
-    }
-    a.hasAttribute("data-zoom") && ((b = Number.parseFloat(a.getAttribute("data-zoom"))), (this.config.map.zoom = b));
-    a.hasAttribute("data-bounds") && ((b = a.getAttribute("data-bounds")), (this.config.tools.bounds = b));
-    a.hasAttribute("data-editable") && ((b = "true" === a.getAttribute("data-editable")), (this.config.tools.editable = b));
-    this.container = a;
-};
-netgis.Client.prototype.initOutput = function (a) {
-    if (a.output && a.output.id) {
-        if ((a = document.getElementById(a.output.id)) && a.value && 0 < a.value.length) {
-            var b = JSON.parse(a.value);
-            netgis.util.invoke(this.container, netgis.Events.MAP_EDIT_LAYER_LOADED, { geojson: b });
-        }
-        this.output = a;
-    }
-    this.output || ((this.output = document.createElement("input")), this.output.setAttribute("type", "hidden"), (this.output.className = "netgis-storage"), this.container.appendChild(this.output));
-};
-netgis.Client.prototype.initModules = function (a) {
-    this.modules = {};
-    if ((a = a.modules))
-        a.map && this.addModule("map", netgis.Map),
-            a.controls && this.addModule("controls", netgis.Controls),
-            a.attribution && this.addModule("attribution", netgis.Attribution),
-            a.info && this.addModule("info", netgis.Info),
-            a.menu && this.addModule("menu", netgis.Menu),
-            a.layertree && this.addModule("layertree", netgis.LayerTree),
-            a.searchplace && this.addModule("searchplace", netgis.SearchPlace),
-            a.searchparcel && this.addModule("searchparcel", netgis.SearchParcel),
-            a.toolbox && this.addModule("toolbox", netgis.Toolbox),
-            a["import"] && this.addModule("import", netgis.Import),
-            a["export"] && this.addModule("export", netgis.Export),
-            a.timeslider && this.addModule("timeslider", netgis.TimeSlider);
-};
-netgis.Client.prototype.initEvents = function () {
-    this.container.addEventListener(void 0, function (a) {
-        console.error("undefined event invoked", a);
-    });
-    for (var a in netgis.Events) this.container.addEventListener(netgis.Events[a], this.handleEvent.bind(this));
-    this.container.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onMapEditLayerChange.bind(this));
-};
-netgis.Client.prototype.handleEvent = function (a) {
-    var b = a.type;
-    a = a.detail;
-    !0 === this.logEvents && console.info("EVENT:", b, a);
-};
-netgis.Client.prototype.addModule = function (a, b) {
-    b = new b(this.config);
-    b.attachTo && b.attachTo(this.container);
-    return (this.modules[a] = b);
-};
-netgis.Client.prototype.isMobile = function () {
-    return 600 > this.container.getBoundingClientRect().width;
-};
-netgis.Client.prototype.requestContextWMC = function (a, b) {
-    if (-1 < a.indexOf("{id}"))
-        if (b) a = netgis.util.replace(a, "{id}", b);
-        else {
-            console.warn("No WMC id set in config for url", a);
-            return;
-        }
-    new netgis.WMC().requestContext(a, this.onContextResponseWMC.bind(this));
-};
-netgis.Client.prototype.onContextResponseWMC = function (a) {
-    for (var b = 0; b < a.config.layers.length; b++) this.config.layers.push(a.config.layers[b]);
-    a.config.map.bbox && (this.config.map.bbox = a.config.map.bbox);
-    netgis.util.invoke(this.container, netgis.Events.CONTEXT_RESPONSE, { context: a });
-};
-netgis.Client.prototype.requestContextOWS = function (a) {
-    console.info("Request OWS:", a);
-    netgis.util.request(a, this.onContextResponseOWS.bind(this));
-};
-netgis.Client.prototype.onContextResponseOWS = function (a) {
-    a = JSON.parse(a);
-    console.info("OWS Response:", a);
-    a = netgis.OWS.read(a, this);
-    console.info("OWS Config:", a);
-};
-netgis.Client.prototype.onIconbarIconClick = function (a) {
-    switch (a.detail.id) {
-        case "home":
-            a = this.config.layers;
-            for (var b = 0; b < a.length; b++) {
-                var c = a[b],
-                    d = c.id;
-                !0 === c.active ? (this.modules.map.addLayer(d, c), this.modules.layertree.tree.setItemChecked(d, !0)) : (this.modules.map.removeLayer(d), this.modules.layertree.tree.setItemChecked(d, !1));
-            }
-    }
-};
-netgis.Client.prototype.onIconbarItemClick = function (a) {
-    a = a.detail;
-    for (var b = this.config.layers, c = 0; c < b.length; c++) {
-        var d = b[c],
-            e = d.id;
-        "background" !== d.folder && (e === a.id ? (this.modules.map.addLayer(e, d), this.modules.layertree.tree.setItemChecked(e, !0)) : (this.modules.map.removeLayer(e), this.modules.layertree.tree.setItemChecked(e, !1)));
-    }
-};
-netgis.Client.prototype.onSwitcherButtonClick = function (a) {
-    a = a.detail;
-    for (var b = this.config.switcher.buttons, c = this.config.layers, d = 0; d < b.length; d++) {
-        var e = b[d].id;
-        if (e === a.id)
-            for (var f = 0; f < c.length; f++) {
-                var g = c[f];
-                g.id === e && (this.modules.map.addLayer(e, g), this.modules.layertree.tree.setItemChecked(e, !0));
-            }
-        else this.modules.map.removeLayer(e), this.modules.layertree.tree.setItemChecked(e, !1);
-    }
-    0 === this.modules.switcher.getIndex(a.id) && this.modules.switcher.shift(1, 0);
-};
-netgis.Client.prototype.onGeolocationToggle = function (a) {
-    this.modules.map.setGeolocMarkerVisible(a.detail.on);
-};
-netgis.Client.prototype.onGeolocationChange = function (a) {
-    a = a.detail;
-    this.modules.map.zoomLonLat(a.lon, a.lat, this.config.geolocation.zoom);
-    this.modules.map.setGeolocMarkerLonLat(a.lon, a.lat);
-};
-netgis.Client.prototype.onMapEditLayerChange = function (a) {
-    a = JSON.stringify(a.detail.geojson);
-    this.output.value = a;
-};
-netgis.Client.handleCommand = function (a, b) {
-    switch (b) {
-        case netgis.Commands.LAYERTREE:
-            netgis.util.invoke(a, netgis.Events.LAYERTREE_TOGGLE, null);
-            break;
-        case netgis.Commands.SEARCHPLACE:
-            netgis.util.invoke(a, netgis.Events.SEARCHPLACE_TOGGLE, null);
-            break;
-        case netgis.Commands.SEARCHPARCEL:
-            netgis.util.invoke(a, netgis.Events.SEARCHPARCEL_TOGGLE, null);
-            break;
-        case netgis.Commands.TOOLBOX:
-            netgis.util.invoke(a, netgis.Events.TOOLBOX_TOGGLE, null);
-            break;
-        case netgis.Commands.VIEW_PREV:
-            netgis.util.invoke(a, netgis.Events.MAP_VIEW_PREV, null);
-            break;
-        case netgis.Commands.VIEW_NEXT:
-            netgis.util.invoke(a, netgis.Events.MAP_VIEW_NEXT, null);
-            break;
-        case netgis.Commands.VIEW:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW });
-            break;
-        case netgis.Commands.ZOOM_BOX:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.ZOOM_BOX });
-            break;
-        case netgis.Commands.MEASURE_LINE:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.MEASURE_LINE });
-            break;
-        case netgis.Commands.MEASURE_AREA:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.MEASURE_AREA });
-            break;
-        case netgis.Commands.MEASURE_CLEAR:
-            netgis.util.invoke(a, netgis.Events.MEASURE_CLEAR, null);
-            break;
-        case netgis.Commands.DRAW_POINTS:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DRAW_POINTS });
-            break;
-        case netgis.Commands.DRAW_LINES:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DRAW_LINES });
-            break;
-        case netgis.Commands.DRAW_POLYGONS:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DRAW_POLYGONS });
-            break;
-        case netgis.Commands.MODIFY_FEATURES:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.MODIFY_FEATURES });
-            break;
-        case netgis.Commands.DELETE_FEATURES:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.DELETE_FEATURES });
-            break;
-        case netgis.Commands.BUFFER_FEATURES:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES });
-            break;
-        case netgis.Commands.CUT_FEATURES:
-            netgis.util.invoke(a, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.CUT_FEATURES });
-            break;
-        case netgis.Commands.IMPORT_LAYER:
-            netgis.util.invoke(a, netgis.Events.IMPORT_LAYER_SHOW, null);
-            break;
-        case netgis.Commands.EXPORT:
-            netgis.util.invoke(a, netgis.Events.EXPORT_SHOW, null);
-            break;
-        default:
-            console.warn("unhandled command id", b);
-    }
-};
-netgis = netgis || {};
-netgis.Commands = Object.freeze({
-    LAYERTREE: "layertree",
-    SEARCHPLACE: "searchplace",
-    SEARCHPARCEL: "searchparcel",
-    TOOLBOX: "toolbox",
-    VIEW_PREV: "view_prev",
-    VIEW_NEXT: "view_next",
-    VIEW: "view",
-    ZOOM_BOX: "zoom_box",
-    MEASURE_LINE: "measure_line",
-    MEASURE_AREA: "measure_area",
-    MEASURE_CLEAR: "measure_clear",
-    DRAW_POINTS: "draw_points",
-    DRAW_LINES: "draw_lines",
-    DRAW_POLYGONS: "draw_polygons",
-    MODIFY_FEATURES: "modify_features",
-    DELETE_FEATURES: "delete_features",
-    BUFFER_FEATURES: "buffer_features",
-    CUT_FEATURES: "cut_features",
-    SNAP_TOGGLE: "snap_toggle",
-    IMPORT_LAYER: "import_layer",
-    EXPORT: "export",
-});
-netgis = netgis || {};
-netgis.ContextMenu = function () {
-    this.initElements();
-};
-netgis.ContextMenu.prototype.initElements = function () {
-    this.container = document.createElement("div");
-    this.container.className = "netgis-contextmenu netgis-shadow-large netgis-color-e netgis-hide";
-};
-netgis.ContextMenu.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-    a.addEventListener(netgis.Events.CONTEXTMENU_SHOW, this.onContextMenuShow.bind(this));
-    a.addEventListener("click", this.onParentClick.bind(this));
-    a.addEventListener("pointerup", this.onParentClick.bind(this));
-    a.addEventListener("scroll", this.onParentScroll.bind(this), !0);
-    a.addEventListener("keydown", this.onParentKeyDown.bind(this));
-};
-netgis.ContextMenu.prototype.clear = function () {
-    this.container.innerHTML = "";
-};
-netgis.ContextMenu.prototype.addButton = function (a, b) {
-    var c = document.createElement("button");
-    c.className = "netgis-button netgis-clip-text netgis-hover-d";
-    c.innerHTML = b;
-    c.setAttribute("type", "button");
-    c.setAttribute("data-id", a);
-    c.addEventListener("click", this.onButtonClick.bind(this));
-    this.container.appendChild(c);
-    return c;
-};
-netgis.ContextMenu.prototype.addCheckbox = function (a, b, c) {
-    var d = document.createElement("label");
-    d.className = "netgis-noselect netgis-hover-d";
-    var e = document.createElement("input");
-    e.setAttribute("type", "checkbox");
-    e.setAttribute("title", b);
-    e.setAttribute("data-id", a);
-    e.checked = c;
-    e.addEventListener("change", this.onCheckboxChange.bind(this));
-    d.appendChild(e);
-    a = document.createElement("span");
-    a.className = "netgis-clip-text";
-    a.innerHTML = b;
-    d.appendChild(a);
-    this.container.appendChild(d);
-    return e;
-};
-netgis.ContextMenu.prototype.addSlider = function (a, b, c, d, e, f) {
-    var g = document.createElement("label");
-    g.className = "netgis-noselect netgis-hover-d";
-    var h = document.createElement("span");
-    h.className = "netgis-clip-text";
-    h.innerHTML = b;
-    g.appendChild(h);
-    h = document.createElement("span");
-    g.appendChild(h);
-    c || 0 === c || (c = 50);
-    d || 0 === d || (d = 0);
-    e || 0 === e || (e = 100);
-    f || (f = 1);
-    var k = document.createElement("input");
-    k.setAttribute("type", "range");
-    k.setAttribute("min", d);
-    k.setAttribute("max", e);
-    k.setAttribute("step", f);
-    k.setAttribute("value", c);
-    k.setAttribute("data-id", a);
-    k.setAttribute("data-title", b);
-    k.setAttribute("title", b + " " + c);
-    k.addEventListener("change", this.onSliderChange.bind(this));
-    k.addEventListener("input", this.onSliderChange.bind(this));
-    h.appendChild(k);
-    this.container.appendChild(g);
-    return k;
-};
-netgis.ContextMenu.prototype.setVisible = function (a) {
-    a ? this.container.classList.remove("netgis-hide") : this.container.classList.add("netgis-hide");
-};
-netgis.ContextMenu.prototype.setPosition = function (a, b) {
-    var c = this.container.parentNode.getBoundingClientRect(),
-        d = this.container.getBoundingClientRect();
-    a + d.width > c.width && (a -= d.width);
-    b + d.height > c.height && (b -= d.height);
-    this.container.style.left = a + "px";
-    this.container.style.top = b + "px";
-};
-netgis.ContextMenu.prototype.onContextMenuShow = function (a) {
-    a = a.detail;
-    this.clear();
-    for (var b = 0; b < a.items.length; b++) {
-        var c = a.items[b];
-        switch (c.type) {
-            case "slider":
-                this.addSlider(c.id, c.title, c.val, c.min, c.max);
-        }
-    }
-    this.setVisible(!0);
-    this.setPosition(a.x, a.y);
-};
-netgis.ContextMenu.prototype.onContextMenu = function (a) {
-    a.preventDefault();
-    var b = a.clientX;
-    a = a.clientY;
-    this.setVisible(!0);
-    this.setPosition(b, a);
-    return !1;
-};
-netgis.ContextMenu.prototype.onParentClick = function (a) {
-    this.container.contains(a.target) || this.setVisible(!1);
-};
-netgis.ContextMenu.prototype.onParentScroll = function (a) {
-    this.setVisible(!1);
-};
-netgis.ContextMenu.prototype.onParentKeyDown = function (a) {
-    27 === (a.keyCode || a.which) && this.setVisible(!1);
-};
-netgis.ContextMenu.prototype.onButtonClick = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id");
-    this.setVisible(!1);
-    netgis.util.invoke(a, netgis.Events.CONTEXTMENU_BUTTON_CLICK, { id: b });
-    netgis.Client.handleCommand(a, b);
-};
-netgis.ContextMenu.prototype.onCheckboxChange = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id");
-    netgis.util.invoke(a, netgis.Events.CONTEXTMENU_CHECKBOX_CHANGE, { id: b, checked: a.checked });
-};
-netgis.ContextMenu.prototype.onSliderChange = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id"),
-        c = Number.parseFloat(a.value),
-        d = a.getAttribute("data-title");
-    a.setAttribute("title", d + " " + c);
-    netgis.util.invoke(a, netgis.Events.CONTEXTMENU_SLIDER_CHANGE, { id: b, val: c });
-};
-netgis = netgis || {};
-netgis.Controls = function (a) {
-    this.config = a;
-    this.initElements();
-    this.initConfig(a);
-};
-netgis.Controls.Events = Object.freeze({ BUTTON_CLICK: "controls-button-click" });
-netgis.Controls.prototype.initElements = function () {
-    this.container = document.createElement("section");
-    this.container.className = "netgis-controls netgis-color-e netgis-text-a netgis-shadow netgis-round";
-};
-netgis.Controls.prototype.initConfig = function (a) {
-    a = a.controls.buttons;
-    for (var b = 0; b < a.length; b++) {
-        var c = a[b];
-        this.addButton(c.id, c.icon, c.title);
-    }
-};
-netgis.Controls.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-};
-netgis.Controls.prototype.addButton = function (a, b, c) {
-    var d = document.createElement("button");
-    d.setAttribute("type", "button");
-    d.setAttribute("data-id", a);
-    d.className = "netgis-hover-a";
-    d.innerHTML = b;
-    d.title = c;
-    d.addEventListener("pointerdown", this.onButtonClick.bind(this));
-    this.container.appendChild(d);
-    return d;
-};
-netgis.Controls.prototype.onButtonClick = function (a) {
-    a = a.currentTarget;
-    switch (a.getAttribute("data-id")) {
-        case "zoom_in":
-            netgis.util.invoke(a, netgis.Events.MAP_ZOOM, { delta: 1 });
-            break;
-        case "zoom_out":
-            netgis.util.invoke(a, netgis.Events.MAP_ZOOM, { delta: -1 });
-            break;
-        case "zoom_home":
-            netgis.util.invoke(a, netgis.Events.MAP_ZOOM_HOME, null);
-    }
-};
-netgis = netgis || {};
-netgis.Events = Object.freeze({
-    CLIENT_CONTEXT_RESPONSE: "client-context-response",
-    CLIENT_SET_MODE: "client-set-mode",
-    CONTROLS_BUTTON_CLICK: "controls-button-click",
-    MAP_ZOOM: "map-zoom",
-    MAP_ZOOM_HOME: "map-zoom-home",
-    MAP_ZOOM_LONLAT: "map-zoom-lonlat",
-    MAP_ZOOM_SCALE: "map-zoom-scale",
-    MAP_ZOOM_LAYER: "map-zoom-layer",
-    MAP_ZOOM_LEVEL: "map-zoom-level",
-    MAP_LAYER_TOGGLE: "map-layer-toggle",
-    MAP_LAYER_TRANSPARENCY: "map-layer-transparency",
-    MAP_VIEW_CHANGE: "map-view-change",
-    MAP_VIEW_NEXT: "map-view-next",
-    MAP_VIEW_PREV: "map-view-prev",
-    MAP_CLICK: "map-click",
-    MAP_FEATURE_ENTER: "map-feature-enter",
-    MAP_FEATURE_CLICK: "map-feature-click",
-    MAP_FEATURE_LEAVE: "map-feature-leave",
-    MAP_SNAP_TOGGLE: "map-snap-toggle",
-    MAP_EDIT_LAYER_CHANGE: "map-edit-layer-change",
-    MAP_EDIT_LAYER_LOADED: "map-edit-layer-loaded",
-    MAP_COPY_FEATURE_TO_EDIT: "map-copy-feature-to-edit",
-    PANEL_TOGGLE: "panel-toggle",
-    PANEL_RESIZE: "panel-resize",
-    TREE_ITEM_CHANGE: "tree-item-change",
-    TREE_ITEM_SLIDER_CHANGE: "tree-item-slider-change",
-    TREE_BUTTON_CLICK: "tree-button-click",
-    LAYERTREE_TOGGLE: "layertree-toggle",
-    TOOLBOX_TOGGLE: "toolbox-toggle",
-    TOOLBOX_BUTTON_CLICK: "toolbox-button-click",
-    MENU_BUTTON_CLICK: "menu-button-click",
-    MENU_CHECKBOX_CHANGE: "menu-checkbox-change",
-    MENU_SELECT_CHANGE: "menu-select-change",
-    CONTEXTMENU_SHOW: "contextmenu-show",
-    CONTEXTMENU_BUTTON_CLICK: "contextmenu-button-click",
-    CONTEXTMENU_CHECKBOX_CHANGE: "contextmenu-checkbox-change",
-    CONTEXTMENU_SLIDER_CHANGE: "contextmenu-slider-change",
-    SEARCH_CHANGE: "search-change",
-    SEARCH_SELECT: "search-select",
-    SEARCH_CLEAR: "search-clear",
-    SEARCHPLACE_TOGGLE: "searchplace-toggle",
-    SEARCHPARCEL_TOGGLE: "searchparcel-toggle",
-    SEARCHPARCEL_RESET: "searchparcel-reset",
-    SEARCHPARCEL_PARCELS_RESPONSE: "searchparcel-parcels-response",
-    SEARCHPARCEL_ITEM_ENTER: "searchparcel-item-enter",
-    SEARCHPARCEL_ITEM_LEAVE: "searchparcel-item-leave",
-    SEARCHPARCEL_ITEM_CLICK: "searchparcel-item-click",
-    SEARCHPARCEL_ITEM_IMPORT: "searchparcel-item-import",
-    MEASURE_CLEAR: "measure-clear",
-    DRAW_BUFFER_TOGGLE: "draw-buffer-toggle",
-    DRAW_BUFFER_CHANGE: "draw-buffer-change",
-    BUFFER_CHANGE: "buffer-change",
-    BUFFER_ACCEPT: "buffer-accept",
-    IMPORT_LAYER_SHOW: "import-layer-show",
-    IMPORT_LAYER_ACCEPT: "import-layer-accept",
-    IMPORT_LAYER_PREVIEW: "import-layer-preview",
-    IMPORT_LAYER_PREVIEW_FEATURES: "import-layer-preview-features",
-    IMPORT_GEOPORTAL_SUBMIT: "import-geoportal-submit",
-    EXPORT_SHOW: "export-show",
-    EXPORT_BEGIN: "export-begin",
-    EXPORT_END: "export-end",
-    TIMESLIDER_SHOW: "timeslider-show",
-    TIMESLIDER_HIDE: "timeslider-hide",
-    TIMESLIDER_SELECT: "timeslider-select",
-});
-netgis = netgis || {};
-netgis.Export = function (a) {
-    this.config = a;
-    this.initElements(a);
-    this.initSections();
-};
-netgis.Export.prototype.initElements = function (a) {
-    a = a["export"];
-    this.modal = new netgis.Modal(a.title ? a.title : "Export");
-    this.modal.container.classList.add("netgis-export");
-    this.tabs = new netgis.Tabs(["PDF", "JPEG", "PNG", "GIF", "GeoJSON"]);
-    this.tabs.container.style.position = "absolute";
-    this.tabs.container.style.left = "0mm";
-    this.tabs.container.style.right = "0mm";
-    this.tabs.container.style.top = "12mm";
-    this.tabs.container.style.bottom = "0mm";
-    this.tabs.attachTo(this.modal.content);
-};
-netgis.Export.prototype.initSections = function () {
-    this.sections = {};
-    var a = 0;
-    this.sections.pdf = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputNumber(this.sections.pdf, "Breite (Pixel):", 1600, 0);
-    this.addInputNumber(this.sections.pdf, "H\u00f6he (Pixel):", 900, 0);
-    this.addInputNumber(this.sections.pdf, "Seitenr\u00e4nder (Millimeter):", 10, 0);
-    this.addCheckbox(this.sections.pdf, "Querformat", !0);
-    this.addButton(this.sections.pdf, "<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>", this.onExportClickPDF.bind(this));
-    this.sections.jpeg = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputNumber(this.sections.jpeg, "Breite (Pixel):", 1600, 0);
-    this.addInputNumber(this.sections.jpeg, "H\u00f6he (Pixel):", 900, 0);
-    this.addCheckbox(this.sections.jpeg, "Querformat", !0);
-    this.addButton(this.sections.jpeg, "<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>", this.onExportClickJPEG.bind(this));
-    this.sections.png = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputNumber(this.sections.png, "Breite (Pixel):", 1600, 0);
-    this.addInputNumber(this.sections.png, "H\u00f6he (Pixel):", 900, 0);
-    this.addCheckbox(this.sections.png, "Querformat", !0);
-    this.addButton(this.sections.png, "<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>", this.onExportClickPNG.bind(this));
-    this.sections.gif = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputNumber(this.sections.gif, "Breite (Pixel):", 1600, 0);
-    this.addInputNumber(this.sections.gif, "H\u00f6he (Pixel):", 900, 0);
-    this.addCheckbox(this.sections.gif, "Querformat", !0);
-    this.addButton(this.sections.gif, "<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>", this.onExportClickGIF.bind(this));
-    this.sections.geojson = this.tabs.getContentSection(a);
-    this.addCheckbox(this.sections.geojson, "Nicht-Editierbare Geometrien einbeziehen", !1);
-    this.addButton(this.sections.geojson, "<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>", this.onExportClickGeoJSON.bind(this));
-};
-netgis.Export.prototype.attachTo = function (a) {
-    a.appendChild(this.modal.container);
-    a.addEventListener(netgis.Events.EXPORT_SHOW, this.onExportShow.bind(this));
-    a.addEventListener(netgis.Events.EXPORT_END, this.onExportEnd.bind(this));
-};
-netgis.Export.prototype.addText = function (a, b) {
-    var c = document.createElement("div");
-    c.innerHTML = b;
-    a.appendChild(c);
-    return c;
-};
-netgis.Export.prototype.addButton = function (a, b, c) {
-    var d = document.createElement("button");
-    d.className = "netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";
-    d.setAttribute("type", "button");
-    d.innerHTML = b;
-    c && (d.onclick = c);
-    a.appendChild(d);
-    return d;
-};
-netgis.Export.prototype.addInputText = function (a, b, c) {
-    var d = document.createElement("label");
-    d.innerHTML = b;
-    var e = document.createElement("input");
-    e.setAttribute("type", "text");
-    d.appendChild(e);
-    if (c) {
-        b = "list-" + netgis.util.stringToID(b);
-        var f = document.createElement("datalist");
-        f.setAttribute("id", b);
-        for (var g = 0; g < c.length; g++) {
-            var h = document.createElement("option");
-            h.setAttribute("value", c[g]);
-            f.appendChild(h);
-        }
-        a.appendChild(f);
-        e.setAttribute("list", b);
-    }
-    a.appendChild(d);
-    return e;
-};
-netgis.Export.prototype.addInputNumber = function (a, b, c, d, e) {
-    var f = document.createElement("label");
-    f.innerHTML = b;
-    b = document.createElement("input");
-    b.setAttribute("type", "number");
-    (d || 0 === d) && b.setAttribute("min", d);
-    e && b.setAttribute("max", e);
-    b.setAttribute("value", c);
-    f.appendChild(b);
-    a.appendChild(f);
-    return b;
-};
-netgis.Export.prototype.addCheckbox = function (a, b, c) {
-    var d = document.createElement("label"),
-        e = document.createElement("input");
-    e.setAttribute("type", "checkbox");
-    e.checked = c;
-    d.appendChild(e);
-    c = document.createElement("span");
-    c.innerHTML = b;
-    d.appendChild(c);
-    a.appendChild(d);
-    return e;
-};
-netgis.Export.prototype.onExportShow = function (a) {
-    this.modal.show();
-};
-netgis.Export.prototype.onExportClickPDF = function (a) {
-    var b = this.sections.pdf.getElementsByTagName("input");
-    b = { format: "pdf", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), padding: Number.parseInt(b[2].value), landscape: b[3].checked };
-    netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b);
-};
-netgis.Export.prototype.onExportClickJPEG = function (a) {
-    var b = this.sections.pdf.getElementsByTagName("input");
-    b = { format: "jpeg", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), landscape: b[3].checked };
-    netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b);
-};
-netgis.Export.prototype.onExportClickPNG = function (a) {
-    var b = this.sections.pdf.getElementsByTagName("input");
-    b = { format: "png", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), landscape: b[3].checked };
-    netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b);
-};
-netgis.Export.prototype.onExportClickGIF = function (a) {
-    var b = this.sections.pdf.getElementsByTagName("input");
-    b = { format: "gif", width: Number.parseInt(b[0].value), height: Number.parseInt(b[1].value), landscape: b[3].checked };
-    netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b);
-};
-netgis.Export.prototype.onExportClickGeoJSON = function (a) {
-    var b = { format: "geojson", nonEdits: this.sections.geojson.getElementsByTagName("input")[0].checked };
-    netgis.util.invoke(a.target, netgis.Events.EXPORT_BEGIN, b);
-};
-netgis.Export.prototype.onExportEnd = function (a) {
-    this.modal.hide();
-};
-netgis = netgis || {};
-netgis.Import = function (a) {
-    this.config = a;
-    this.initElements(a);
-    this.initSections();
-    this.initPreview();
-};
-netgis.Import.prototype.initElements = function (a) {
-    a = a["import"];
-    this.modal = new netgis.Modal(a.title ? a.title : "Import");
-    this.modal.container.classList.add("netgis-import");
-    var b = "WMS WFS GeoJSON GML GeoPackage Spatialite Shapefile".split(" ");
-    a.geoportal_tab && b.unshift("Geoportal");
-    this.tabs = new netgis.Tabs(b);
-    this.tabs.container.style.position = "absolute";
-    this.tabs.container.style.left = "0mm";
-    this.tabs.container.style.right = "0mm";
-    this.tabs.container.style.top = "12mm";
-    this.tabs.container.style.bottom = "0mm";
-    this.tabs.attachTo(this.modal.content);
-};
-netgis.Import.prototype.initSections = function () {
-    this.sections = {};
-    var a = 0;
-    this.config["import"].geoportal_tab &&
-        ((this.sections.geoportal = this.tabs.getContentSection(a)),
-        (a += 1),
-        this.sections.geoportal.classList.add("netgis-geoportal"),
-        (this.geoportalSearch = this.addInputText(this.sections.geoportal, "Suche im Datenkatalog:")),
-        this.geoportalSearch.addEventListener("change", this.onGeoportalSearchChange.bind(this)),
-        this.geoportalSearch.setAttribute("placeholder", "Thema, Schlagwort..."),
-        (this.geoportalResults = new netgis.Tree()),
-        this.geoportalResults.attachTo(this.sections.geoportal),
-        (this.geoportalSubmit = this.addButton(this.sections.geoportal, "<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>", this.onGeoportalSubmit.bind(this))));
-    this.sections.wms = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputText(this.sections.wms, "WMS-URL:", this.config["import"].wms_options);
-    this.addButton(this.sections.wms, "<i class='netgis-icon fas fa-cloud-download-alt'></i><span>Dienst laden</span>", this.onWMSLoadClick.bind(this));
-    this.addInputText(this.sections.wms, "Bezeichnung:");
-    this.addInputSelect(this.sections.wms, "Ebene:");
-    this.addInputSelect(this.sections.wms, "Format:");
-    this.addButton(this.sections.wms, "<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>", this.onWMSAcceptClick.bind(this));
-    this.showDetailsWMS(!1);
-    this.sections.wfs = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputText(this.sections.wfs, "WFS-URL:", this.config["import"].wfs_options);
-    this.addButton(this.sections.wfs, "<i class='netgis-icon fas fa-cloud-download-alt'></i><span>Dienst laden</span>", this.onWFSLoadClick.bind(this));
-    this.addInputText(this.sections.wfs, "Bezeichnung:");
-    this.addInputSelect(this.sections.wfs, "Ebene:");
-    this.addInputSelect(this.sections.wfs, "Format:");
-    this.addButton(this.sections.wfs, "<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>", this.onWFSAcceptClick.bind(this));
-    this.showDetailsWFS(!1);
-    this.sections.geojson = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputFile(this.sections.geojson, "GeoJSON-Datei:", ".geojson,.json");
-    this.addText(this.sections.geojson, "<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");
-    this.addButton(this.sections.geojson, "<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>", this.onGeoJSONAcceptClick.bind(this));
-    this.sections.gml = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputFile(this.sections.gml, "GML-Datei:", ".gml,.xml");
-    this.addText(this.sections.gml, "<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");
-    this.addButton(this.sections.gml, "<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>", this.onGMLAcceptClick.bind(this));
-    this.sections.geopackage = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputFile(this.sections.geopackage, "GeoPackage-Datei:", ".gpkg");
-    this.addText(this.sections.geopackage, "<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");
-    this.addButton(this.sections.geopackage, "<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>", this.onGeoPackageAcceptClick.bind(this));
-    this.sections.spatialite = this.tabs.getContentSection(a);
-    a += 1;
-    this.addInputFile(this.sections.spatialite, "Spatialite-Datei:", ".sqlite");
-    this.addText(this.sections.spatialite, "<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");
-    this.addButton(this.sections.spatialite, "<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>", this.onSpatialiteAcceptClick.bind(this));
-    this.sections.shapefile = this.tabs.getContentSection(a);
-    this.addInputFile(this.sections.shapefile, "Shapefile-Zip-Datei:", ".zip");
-    this.addText(this.sections.shapefile, "<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");
-    this.addButton(this.sections.shapefile, "<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>", this.onShapefileAcceptClick.bind(this));
-};
-netgis.Import.prototype.initPreview = function () {
-    this.preview = new netgis.Modal("Vorschau");
-    this.preview.attachTo(this.modal.content);
-    this.previewMapContainer = document.createElement("div");
-    this.previewMapContainer.className = "netgis-preview-map";
-    this.preview.content.appendChild(this.previewMapContainer);
-    if (ol) {
-        var a = this.config.map;
-        a = { projection: a.projection, center: a.centerLonLat ? ol.proj.fromLonLat(a.centerLonLat) : a.center, zoom: a.zoom };
-        this.previewMap = new ol.Map({ target: this.previewMapContainer, view: new ol.View(a), pixelRatio: 1, moveTolerance: 3, controls: [] });
-        this.previewMap.getView().padding = [10, 10, 10, 10];
-        this.previewMap.addLayer(new ol.layer.Tile({ source: new ol.source.OSM() }));
-    }
-    this.previewTree = new netgis.Tree();
-    this.previewTree.container.classList.add("netgis-preview-tree");
-    this.previewTree.attachTo(this.preview.content);
-    this.previewTree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE, this.onPreviewTreeItemChange.bind(this));
-    this.previewSubmit = document.createElement("button");
-    this.previewSubmit.setAttribute("type", "button");
-    this.previewSubmit.className = "netgis-import-submit netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";
-    this.previewSubmit.innerHTML = "<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>";
-    this.previewSubmit.addEventListener("click", this.onPreviewSubmitClick.bind(this));
-    this.preview.content.appendChild(this.previewSubmit);
-};
-netgis.Import.prototype.attachTo = function (a) {
-    a.appendChild(this.modal.container);
-    a.addEventListener(netgis.Events.IMPORT_LAYER_SHOW, this.onImportShow.bind(this));
-    a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES, this.onImportPreviewFeatures.bind(this));
-};
-netgis.Import.prototype.addText = function (a, b) {
-    var c = document.createElement("div");
-    c.innerHTML = b;
-    a.appendChild(c);
-    return c;
-};
-netgis.Import.prototype.addButton = function (a, b, c) {
-    var d = document.createElement("button");
-    d.className = "netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";
-    d.setAttribute("type", "button");
-    d.innerHTML = b;
-    c && (d.onclick = c);
-    a.appendChild(d);
-    return d;
-};
-netgis.Import.prototype.addInputText = function (a, b, c) {
-    var d = document.createElement("label");
-    d.innerHTML = b;
-    var e = document.createElement("input");
-    e.setAttribute("type", "text");
-    d.appendChild(e);
-    if (c) {
-        b = "list-" + netgis.util.stringToID(b);
-        var f = document.createElement("datalist");
-        f.setAttribute("id", b);
-        for (var g = 0; g < c.length; g++) {
-            var h = document.createElement("option");
-            h.setAttribute("value", c[g]);
-            f.appendChild(h);
-        }
-        a.appendChild(f);
-        e.setAttribute("list", b);
-    }
-    a.appendChild(d);
-    return e;
-};
-netgis.Import.prototype.addInputSelect = function (a, b, c) {
-    c = document.createElement("label");
-    c.innerHTML = b;
-    b = document.createElement("select");
-    c.appendChild(b);
-    a.appendChild(c);
-    return b;
-};
-netgis.Import.prototype.addInputFile = function (a, b, c) {
-    var d = document.createElement("label");
-    d.innerHTML = b;
-    b = document.createElement("input");
-    b.setAttribute("type", "file");
-    b.setAttribute("accept", c);
-    d.appendChild(b);
-    a.appendChild(d);
-    return b;
-};
-netgis.Import.prototype.getLayerOrder = function () {
-    return 1e4;
-};
-netgis.Import.prototype.showDetailsWMS = function (a) {
-    var b = this.sections.wms,
-        c = b.getElementsByTagName("label");
-    b = b.getElementsByTagName("button");
-    a
-        ? (c[1].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide"), b[1].classList.remove("netgis-hide"))
-        : (c[1].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide"), b[1].classList.add("netgis-hide"));
-};
-netgis.Import.prototype.showDetailsWFS = function (a) {
-    var b = this.sections.wfs,
-        c = b.getElementsByTagName("label");
-    b = b.getElementsByTagName("button");
-    a
-        ? (c[1].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide"), b[1].classList.remove("netgis-hide"))
-        : (c[1].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide"), b[1].classList.add("netgis-hide"));
-};
-netgis.Import.prototype.submitImportLayer = function (a) {
-    !0 === this.config["import"].preview
-        ? netgis.util.invoke(this.modal.container, netgis.Events.IMPORT_LAYER_PREVIEW, a)
-        : (this.config.layers.push(a), netgis.util.invoke(this.modal.container, netgis.Events.IMPORT_LAYER_ACCEPT, a), this.modal.hide());
-};
-netgis.Import.prototype.onImportShow = function (a) {
-    this.modal.show();
-    this.tabs.updateHeaderScroll();
-};
-netgis.Import.prototype.onWMSLoadClick = function (a) {
-    this.showDetailsWMS(!1);
-    var b = this.sections.wms.getElementsByTagName("input")[0].value;
-    b = b.trim();
-    if (!(1 > b.length)) {
-        var c = b.indexOf("?");
-        a = -1 < c ? b.substr(0, c) : b;
-        var d = ["request=GetCapabilities"];
-        if (-1 < c)
-            for (b = b.substr(c + 1), b = b.split("&"), c = 0; c < b.length; c++) {
-                var e = b[c];
-                e = e.toLowerCase();
-                -1 < e.search("service") ? d.push(e) : -1 < e.search("version") ? d.push(e) : e.search("request");
-            }
-        d = d.join("&");
-        -1 === d.search("service=") && (d += "&service=WMS");
-        netgis.util.request(a + "?" + d, this.onWMSCapsResponse.bind(this));
-    }
-};
-netgis.Import.prototype.onWMSCapsResponse = function (a) {
-    var b = new DOMParser().parseFromString(a, "text/xml"),
-        c = b.documentElement;
-    b = b.getElementsByTagName("parsererror");
-    for (var d = 0; d < b.length; d++) console.error("WMS caps parser error:", b[d].textContent);
-    0 < b.length && alert(0 < a.length ? a : b[0].textContent);
-    a = this.sections.wms;
-    var e = a.getElementsByTagName("input");
-    a = a.getElementsByTagName("select");
-    b = a[0];
-    a = a[1];
-    for (d = b.options.length - 1; 0 <= d; d--) b.options.remove(d);
-    for (d = a.options.length - 1; 0 <= d; d--) a.options.remove(d);
-    switch (c.nodeName) {
-        default:
-        case "HTML":
-            console.warn("could not detect WMS service", c);
-            break;
-        case "WMS_Capabilities":
-        case "WMT_MS_Capabilities":
-            c.getAttribute("version");
-            d = c.getElementsByTagName("Service")[0].getElementsByTagName("Title")[0].textContent;
-            e[1].value = d;
-            d = c.getElementsByTagName("Layer");
-            for (var f = [], g = 0; g < d.length; g++) {
-                e = d[g];
-                var h = e.getElementsByTagName("Name")[0].textContent,
-                    k = e.getElementsByTagName("Title")[0].textContent;
-                f.push({ name: h, title: k });
-                e = document.createElement("option");
-                e.text = k;
-                e.value = h;
-                b.options.add(e);
-            }
-            c = c.getElementsByTagName("GetMap")[0].getElementsByTagName("Format");
-            b = [];
-            for (d = 0; d < c.length; d++) (e = c[d]), (f = e.textContent), b.push(f), (e = document.createElement("option")), (e.text = f), (e.value = f), a.options.add(e);
-    }
-    this.showDetailsWMS(!0);
-};
-netgis.Import.prototype.onWMSAcceptClick = function (a) {
-    a = this.sections.wms;
-    var b = a.getElementsByTagName("input"),
-        c = a.getElementsByTagName("select"),
-        d = "import_" + netgis.util.getTimeStamp(!0);
-    b = b[0].value;
-    var e = c[0].selectedOptions[0].innerText,
-        f = c[0].value;
-    c = c[1].value;
-    b = netgis.util.replace(b, "request=", "oldrequest=");
-    b = netgis.util.replace(b, "Request=", "oldrequest=");
-    d = { id: d, folder: null, active: !0, order: this.getLayerOrder(), type: netgis.LayerTypes.WMS, url: b, title: e, name: f, format: c, tiled: !0 };
-    this.config.layers.push(d);
-    netgis.util.invoke(a, netgis.Events.IMPORT_LAYER_ACCEPT, d);
-    this.modal.hide();
-};
-netgis.Import.prototype.onWFSLoadClick = function (a) {
-    this.showDetailsWFS(!1);
-    var b = this.sections.wfs.getElementsByTagName("input")[0].value;
-    b = b.trim();
-    if (!(1 > b.length)) {
-        var c = b.indexOf("?");
-        a = -1 < c ? b.substr(0, c) : b;
-        var d = ["request=GetCapabilities"];
-        if (-1 < c)
-            for (b = b.substr(c + 1), b = b.split("&"), c = 0; c < b.length; c++) {
-                var e = b[c];
-                e = e.toLowerCase();
-                -1 < e.search("service") ? d.push(e) : -1 < e.search("version") ? d.push(e) : -1 < e.search("request") || d.push(e);
-            }
-        d = d.join("&");
-        -1 === d.search("service=") && (d += "&service=WFS");
-        a = a + "?" + d;
-        this.config["import"].wfs_proxy && (a = this.config["import"].wfs_proxy + a);
-        netgis.util.request(a, this.onWFSCapsResponse.bind(this));
-    }
-};
-netgis.Import.prototype.onWFSCapsResponse = function (a) {
-    var b = new DOMParser().parseFromString(a, "text/xml"),
-        c = b.documentElement;
-    b = b.getElementsByTagName("parsererror");
-    for (var d = 0; d < b.length; d++) console.error("WFS caps parser error:", b[d].textContent);
-    0 < b.length && alert(0 < a.length ? a : b[0].textContent);
-    a = this.sections.wfs;
-    var e = a.getElementsByTagName("input");
-    a = a.getElementsByTagName("select");
-    b = a[0];
-    a = a[1];
-    for (d = b.options.length - 1; 0 <= d; d--) b.options.remove(d);
-    for (d = a.options.length - 1; 0 <= d; d--) a.options.remove(d);
-    switch (c.nodeName) {
-        default:
-        case "HTML":
-            console.error("could not detect WFS service", c);
-            break;
-        case "WFS_Capabilities":
-        case "wfs:WFS_Capabilities":
-            c.getAttribute("version");
-            d = c.getElementsByTagName("ows:ServiceIdentification")[0].getElementsByTagName("ows:Title")[0].textContent;
-            e[1].value = d;
-            d = c.getElementsByTagName("FeatureType");
-            for (var f = [], g = 0; g < d.length; g++) {
-                e = d[g];
-                var h = e.getElementsByTagName("Name")[0].textContent,
-                    k = e.getElementsByTagName("Title")[0].textContent;
-                f.push({ name: h, title: k });
-                e = document.createElement("option");
-                e.text = k;
-                e.value = h;
-                b.options.add(e);
-            }
-            c = c.getElementsByTagName("ows:Operation");
-            b = null;
-            for (e = 0; e < c.length; e++)
-                if ("GetFeature" === c[e].getAttribute("name")) {
-                    b = c[e];
-                    break;
-                }
-            c = null;
-            if (b)
-                for (b = b.getElementsByTagName("ows:Parameter"), e = 0; e < b.length; e++)
-                    if (((d = b[e]), "outputFormat" === d.getAttribute("name"))) {
-                        b = d.getElementsByTagName("ows:Value");
-                        for (d = 0; d < b.length; d++) (e = b[d]), (f = e.textContent), (e = document.createElement("option")), (e.text = f), (e.value = f), a.options.add(e), -1 < f.search("json") && (c = f);
-                        break;
-                    }
-            c && (a.value = c);
-    }
-    this.showDetailsWFS(!0);
-};
-netgis.Import.prototype.onWFSAcceptClick = function (a) {
-    a = this.sections.wfs;
-    var b = a.getElementsByTagName("input"),
-        c = a.getElementsByTagName("select"),
-        d = "import_" + netgis.util.getTimeStamp(!0);
-    b = b[0].value;
-    var e = c[0].selectedOptions[0].innerText,
-        f = c[0].value;
-    c = c[1].value;
-    b = netgis.util.replace(b, "request=", "oldrequest=");
-    b = netgis.util.replace(b, "Request=", "oldrequest=");
-    this.config["import"].wfs_proxy && (b = this.config["import"].wfs_proxy + b);
-    d = { id: d, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: e, type: netgis.LayerTypes.WFS, url: b, name: f, format: c };
-    this.config.layers.push(d);
-    netgis.util.invoke(a, netgis.Events.IMPORT_LAYER_ACCEPT, d);
-    this.modal.hide();
-};
-netgis.Import.prototype.onGeoJSONAcceptClick = function (a) {
-    if ((a = this.sections.geojson.getElementsByTagName("input")[0].files[0])) {
-        var b = new FileReader();
-        b.title = a.name;
-        b.onload = this.onGeoJSONLoad.bind(this);
-        b.readAsText(a);
-    } else alert("No file selected!");
-};
-netgis.Import.prototype.onGeoJSONLoad = function (a) {
-    var b = a.target;
-    a = b.title;
-    b = b.result;
-    a = { id: "import_" + netgis.util.getTimeStamp(!0), folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: a, type: netgis.LayerTypes.GEOJSON, data: b };
-    this.submitImportLayer(a);
-};
-netgis.Import.prototype.onGMLAcceptClick = function (a) {
-    if ((a = this.sections.gml.getElementsByTagName("input")[0].files[0])) {
-        var b = new FileReader();
-        b.title = a.name;
-        b.onload = this.onGMLLoad.bind(this);
-        b.readAsText(a);
-    } else alert("No file selected!");
-};
-netgis.Import.prototype.onGMLLoad = function (a) {
-    var b = a.target;
-    a = b.result;
-    var c = "import_" + netgis.util.getTimeStamp(!0);
-    b = b.title;
-    a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.GML, data: a };
-    this.submitImportLayer(a);
-};
-netgis.Import.prototype.onGeoPackageAcceptClick = function (a) {
-    if ((a = this.sections.geopackage.getElementsByTagName("input")[0].files[0])) {
-        var b = new FileReader();
-        b.title = a.name;
-        b.onload = this.onGeoPackageLoad.bind(this);
-        b.readAsArrayBuffer(a);
-    } else alert("No file selected!");
-};
-netgis.Import.prototype.onGeoPackageLoad = function (a) {
-    var b = a.target;
-    a = b.result;
-    var c = "import_" + netgis.util.getTimeStamp(!0);
-    b = b.title;
-    a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.GEOPACKAGE, data: a };
-    this.submitImportLayer(a);
-};
-netgis.Import.prototype.onSpatialiteAcceptClick = function (a) {
-    if ((a = this.sections.spatialite.getElementsByTagName("input")[0].files[0])) {
-        var b = new FileReader();
-        b.title = a.name;
-        b.onload = this.onSpatialiteLoad.bind(this);
-        b.readAsArrayBuffer(a);
-    } else alert("No file selected!");
-};
-netgis.Import.prototype.onSpatialiteLoad = function (a) {
-    var b = a.target;
-    a = b.result;
-    var c = "import_" + netgis.util.getTimeStamp(!0);
-    b = b.title;
-    a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.SPATIALITE, data: a };
-    this.submitImportLayer(a);
-};
-netgis.Import.prototype.onShapefileAcceptClick = function (a) {
-    if ((a = this.sections.shapefile.getElementsByTagName("input")[0].files[0])) {
-        var b = new FileReader();
-        b.title = a.name;
-        b.onload = this.onShapefileLoad.bind(this);
-        b.readAsArrayBuffer(a);
-    } else alert("No file selected!");
-};
-netgis.Import.prototype.onShapefileLoad = function (a) {
-    var b = a.target;
-    a = b.result;
-    var c = "import_" + netgis.util.getTimeStamp(!0);
-    b = b.title;
-    a = { id: c, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.SHAPEFILE, data: a };
-    this.submitImportLayer(a);
-};
-netgis.Import.prototype.onImportPreviewFeatures = function (a) {
-    var b = a.detail,
-        c = b.layer;
-    this.previewTree.clear();
-    a = this.previewMap.getLayers().getArray();
-    for (var d = 1; d < a.length; d++) this.previewMap.removeLayer(a[d]);
-    if (ol) {
-        a = config.styles["import"];
-        a = new ol.style.Style({ fill: new ol.style.Fill({ color: a.fill }), stroke: new ol.style.Stroke({ color: a.stroke, width: a.width }) });
-        c.setStyle(a);
-        this.previewMap.addLayer(c);
-        var e = this.previewTree.addFolder(null, b.id, b.title);
-        a = c.getSource().getFeatures();
-        if (0 === a.length) {
-            var f = this;
-            c.getSource().on("addfeature", function (a) {
-                f.featureLoadTimeout && window.clearTimeout(f.featureLoadTimeout);
-                f.featureLoadTimeout = window.setTimeout(function () {
-                    var a = c.getSource().getFeatures();
-                    f.updatePreviewFeatures(a, e, c, b);
-                    f.featureLoadTimeout = null;
-                }, 100);
-            });
-        } else this.updatePreviewFeatures(a, e, c, b);
-    } else console.error("import preview only supported with OL map renderer", c);
-};
-netgis.Import.prototype.updatePreviewFeatures = function (a, b, c, d) {
-    for (var e = 0; e < a.length; e++) {
-        var f = a[e],
-            g = f.getId(),
-            h = f.getProperties();
-        g || ((g = e + 1), f.setId(g));
-        var k = null,
-            l;
-        for (l in h)
-            switch (l.toLowerCase()) {
-                case "name":
-                    k = h[l];
-                    break;
-                case "title":
-                    k = h[l];
-                    break;
-                case "id":
-                    k = h[l];
-                    break;
-                case "gid":
-                    k = h[l];
-                    break;
-                case "oid":
-                    k = h[l];
-                    break;
-                case "objectid":
-                    k = h[l];
-            }
-        k || (k = g);
-        h = f.getGeometry();
-        if (h instanceof ol.geom.Polygon || h instanceof ol.geom.MultiPolygon) k += " (" + netgis.util.formatArea(h.getArea()) + ")";
-        else if (h instanceof ol.geom.LineString) k += " (" + netgis.util.formatArea(h.getLength()) + ")";
-        else if (h instanceof ol.geom.MultiLineString) {
-            f = 0;
-            h = h.getLineStrings();
-            for (var m = 0; m < h.length; m++) f += h[m].getLength();
-            k += " (" + netgis.util.formatArea(f) + ")";
-        }
-        this.previewTree.addCheckbox(b, g, "Feature " + k, !0);
-    }
-    this.previewTree.setFolderOpen(d.id, !0);
-    this.previewTree.updateFolderChecks();
-    this.preview.show();
-    this.previewMap.updateSize();
-    this.previewMap.getView().fit(c.getSource().getExtent());
-};
-netgis.Import.prototype.onPreviewSubmitClick = function (a) {
-    var b = this.previewTree.container.getElementsByClassName("netgis-folder")[0];
-    a = b.getAttribute("data-id");
-    b = b.getElementsByTagName("span")[0].innerText;
-    for (var c = this.previewTree.container.getElementsByTagName("input"), d = this.previewMap.getLayers().getArray()[1].getSource(), e = [], f = 1; f < c.length; f++) {
-        var g = c[f];
-        g.checked && ((g = g.getAttribute("data-id")), (g = d.getFeatureById(g)), e.push(g));
-    }
-    c = new ol.format.GeoJSON().writeFeaturesObject(e);
-    d = this.previewMap.getView().getProjection().getCode();
-    c.crs = { type: "name", properties: { name: "urn:ogc:def:crs:" + d.replace(":", "::") } };
-    a = { id: a, folder: null, active: !0, order: this.getLayerOrder(), style: this.config.styles["import"], title: b, type: netgis.LayerTypes.GEOJSON, data: c };
-    this.config.layers.push(a);
-    netgis.util.invoke(this.preview.container, netgis.Events.IMPORT_LAYER_ACCEPT, a);
-    this.preview.hide();
-    this.modal.hide();
-};
-netgis.Import.prototype.onPreviewTreeItemChange = function (a) {
-    a = a.detail;
-    var b = this.previewMap.getLayers().getArray()[1].getSource().getFeatureById(a.id);
-    a.checked ? b.setStyle(null) : b.setStyle(new ol.style.Style({}));
-};
-netgis.Import.prototype.onGeoportalSearchChange = function (a) {
-    a = this.geoportalSearch.value;
-    a = a.trim();
-    var b = this.config["import"].geoportal_search_url;
-    b = netgis.util.replace(b, "{query}", a);
-    console.info("Geoportal Search:", b);
-    netgis.util.request(b, this.onGeoportalSearchResponse.bind(this));
-};
-netgis.Import.prototype.onGeoportalSearchResponse = function (a) {
-    function b(a) {
-        if (a && a.layer) for (var c = 0; c < a.layer.length; c++) b(a.layer[c]);
-        else a && e.push(a);
-        return e.length;
-    }
-    a = JSON.parse(a);
-    this.geoportalResults.clear();
-    console.info("Geoportal Response:", a);
-    this.geoportalDataRaw = a = a.wms.srv;
-    this.geoportalData = [];
-    for (var c = 0; c < a.length; c++) {
-        var d = a[c];
-        console.info("Result Layer:", d);
-        var e = [];
-        var f = b(d);
-        f = this.geoportalResults.addFolder(null, c, d.title + " (" + f + ")");
-        f.setAttribute("title", d["abstract"]);
-        for (var g = 0; g < e.length; g++) {
-            var h = e[g];
-            console.info("Result Child:", h);
-            this.geoportalResults.addCheckbox(f, g, h.title);
-        }
-        d.children = e;
-        this.geoportalData.push(d);
-    }
-};
-netgis.Import.prototype.onGeoportalSubmit = function (a) {
-    console.info("Geoportal Submit...");
-    a = this.geoportalResults.container.getElementsByClassName("netgis-item");
-    for (var b = 0, c = 0; c < a.length; c++) {
-        var d = a[c],
-            e = d.getElementsByTagName("input")[0];
-        if (e.checked) {
-            b += 1;
-            e = e.getAttribute("data-id");
-            d = d.parentNode.parentNode.parentNode.getAttribute("data-id");
-            var f = this.geoportalData[d],
-                g = f.children[e];
-            console.info("Item:", d, e, f, g);
-            var h = f.title;
-            f = f.getMapUrl;
-            var k = g.name;
-            g = g.title;
-            d = "geoportal_" + d;
-            e = d + "_" + e;
-            netgis.util.invoke(this.sections.geoportal, netgis.Events.IMPORT_GEOPORTAL_SUBMIT, { folder: { id: d, title: h }, layer: { id: e, url: f, name: k, title: g } });
-        }
-    }
-    0 < b && this.modal.hide();
-};
-netgis = netgis || {};
-netgis.Info = function (a) {
-    this.config = a;
-    this.queryLayers = {};
-    this.popup = new netgis.Popup();
-    this.popup.setHeader("Abfrage:");
-    this.initConfig(a);
-};
-netgis.Info.prototype.initConfig = function (a) {
-    for (a = a.layers.length - 1; 0 <= a; a--);
-};
-netgis.Info.prototype.attachTo = function (a) {
-    this.popup.attachTo(a);
-    a.addEventListener(netgis.Events.MAP_CLICK, this.onMapClick.bind(this));
-    a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this));
-};
-netgis.Info.prototype.onContextResponse = function (a) {
-    this.initConfig(a.detail.context.config);
-};
-netgis.Info.prototype.onMapLayerToggle = function (a) {
-    var b = a.detail;
-    a = b.id;
-    if (b.on) {
-        b = this.config.layers;
-        for (var c = null, d = 0; d < b.length; d++)
-            if (b[d].id === a) {
-                c = b[d];
-                break;
-            }
-        if (c)
-            switch (c.type) {
-                case netgis.LayerTypes.WMS:
-                case netgis.LayerTypes.WMST:
-                    this.queryLayers[a] = c;
-            }
-    } else delete this.queryLayers[a];
-};
-netgis.Info.prototype.onMapClick = function (a) {
-    a = a.detail;
-    if (a.mode === netgis.Modes.VIEW) {
-        this.popup.container !== a.overlay && this.popup.attachTo(a.overlay);
-        this.popup.clearContent();
-        var b = 0,
-            c;
-        for (c in this.queryLayers) {
-            var d = this.queryLayers[c];
-            switch (d.type) {
-                case netgis.LayerTypes.WMS:
-                case netgis.LayerTypes.WMST:
-                    var e = d.url;
-                    d.query_url && (e = d.query_url);
-                    var f = [
-                        "service=WMS",
-                        "version=1.1.0",
-                        "request=GetFeatureInfo",
-                        "styles=",
-                        "layers=" + window.encodeURIComponent(d.name),
-                        "query_layers=" + window.encodeURIComponent(d.name),
-                        "bbox=" + a.view.bbox.join(","),
-                        "srs=" + a.view.projection,
-                        "width=" + a.view.width,
-                        "height=" + a.view.height,
-                        "x=" + a.pixel[0],
-                        "y=" + a.pixel[1],
-                        "info_format=text/html",
-                    ];
-                    e = e + (-1 === e.indexOf("?") ? "?" : "") + f.join("&");
-                    console.info("WMS REQUEST 1:", e);
-                    netgis.util.request(e, this.onLayerResponseWMS.bind(this), { title: d.title });
-                    b += 1;
-            }
-            (e = d.query_url) &&
-                "" !== e &&
-                ((e = netgis.util.replace(e, "{bbox}", a.view.bbox.join(","))),
-                (e = netgis.util.replace(e, "{proj}", a.view.projection)),
-                (e = netgis.util.replace(e, "{width}", a.view.width)),
-                (e = netgis.util.replace(e, "{height}", a.view.height)),
-                (e = netgis.util.replace(e, "{x}", a.pixel[0])),
-                (e = netgis.util.replace(e, "{y}", a.pixel[1])),
-                (e = netgis.util.replace(e, "{lon}", a.lon)),
-                (e = netgis.util.replace(e, "{lat}", a.lat)),
-                console.info("WMS REQUEST 2:", e),
-                netgis.util.request(e, this.onLayerResponseWMS.bind(this), { title: d.title }),
-                (b += 1));
-        }
-        0 < b ? (this.popup.showLoader(), this.popup.show()) : this.popup.hide();
-    }
-};
-netgis.Info.prototype.onLayerResponseWMS = function (a, b) {
-    this.popup.hideLoader();
-    this.popup.addContent(["<details><summary class='netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d'>", b.title, "</summary><div>", a, "</div></details>"].join(""));
-};
-netgis = netgis || {};
-netgis.LayerID = Object.freeze({ EDITABLE: "editable-layer", NON_EDITABLE: "non-editable-layer" });
-netgis = netgis || {};
-netgis.LayerTree = function (a) {
-    this.config = a;
-    this.importFolder = null;
-    this.initElements();
-    this.initConfig(a);
-    this.initFolders();
-};
-netgis.LayerTree.prototype.initElements = function () {
-    this.panel = new netgis.Panel("Layers");
-    this.tree = new netgis.Tree();
-    this.tree.attachTo(this.panel.content);
-    this.tree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE, this.onTreeItemChange.bind(this));
-    this.tree.container.addEventListener(netgis.Events.TREE_ITEM_SLIDER_CHANGE, this.onTreeItemSliderChange.bind(this));
-};
-netgis.LayerTree.prototype.initFolders = function () {
-    this.editFolder = this.tree.addFolder(null, "edit-folder", "Zeichnung", !0);
-    this.tree.addCheckbox(this.editFolder, netgis.LayerID.EDITABLE, "Editierbar");
-    this.tree.setItemChecked(netgis.LayerID.EDITABLE, !0);
-    this.tree.addCheckbox(this.editFolder, netgis.LayerID.NON_EDITABLE, "Nicht-Editierbar");
-    this.tree.setItemChecked(netgis.LayerID.NON_EDITABLE, !0);
-    this.editFolder.classList.add("netgis-hide");
-};
-netgis.LayerTree.prototype.initConfig = function (a, b) {
-    a.layertree && a.layertree.title && this.panel.setTitle(a.layertree.title);
-    for (var c = a.folders, d = {}, e = 0; e < c.length; e++) {
-        var f = c[e],
-            g = this.tree.addFolder(null, f.id, f.title, b, !1);
-        d[f.id] = g;
-        !0 === f.open && this.tree.setFolderOpen(f.id, !0);
-    }
-    b = a.layers;
-    for (e = 0; e < b.length; e++) {
-        g = b[e];
-        f = d[g.folder] ? d[g.folder] : null;
-        var h = g.id ? g.id : e.toString(),
-            k = !1;
-        if (f)
-            for (var l = 0; l < c.length; l++) {
-                var m = c[l];
-                m.id === g.folder && (k = m.radio);
-            }
-        g = !0 === k ? this.tree.addRadioButton(f, h, g.title, g.active, this.createDefaultDetails(g)) : this.tree.addCheckbox(f, h, g.title, g.active, !1, this.createDefaultDetails(g));
-        g.addEventListener("contextmenu", this.onTreeItemMenu.bind(this));
-    }
-    this.tree.updateFolderChecks();
-    c = a.layertree.buttons;
-    for (e = 0; e < c.length; e++) (d = c[e]), this.tree.addButton(null, d.id, d.title, this.onTreeButtonClick.bind(this));
-    a.layertree && !0 === a.layertree.open && this.panel.show();
-};
-netgis.LayerTree.prototype.attachTo = function (a) {
-    a.appendChild(this.panel.container);
-    a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE, this.onClientContextResponse.bind(this));
-    a.addEventListener(netgis.Events.LAYERTREE_TOGGLE, this.onLayerTreeToggle.bind(this));
-    a.addEventListener(netgis.Events.TOOLBOX_TOGGLE, this.onToolboxToggle.bind(this));
-    a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE, this.onSearchParcelToggle.bind(this));
-    a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this));
-    a.addEventListener(netgis.Events.IMPORT_LAYER_ACCEPT, this.onImportLayerAccept.bind(this));
-    a.addEventListener(netgis.Events.IMPORT_GEOPORTAL_SUBMIT, this.onImportGeoportalSubmit.bind(this));
-    a.addEventListener(netgis.Events.CONTEXTMENU_SLIDER_CHANGE, this.onContextMenuSliderChange.bind(this));
-    a.addEventListener(netgis.Events.MAP_EDIT_LAYER_LOADED, this.onMapEditLayerChange.bind(this));
-    a.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE, this.onMapEditLayerChange.bind(this));
-};
-netgis.LayerTree.prototype.createDefaultDetails = function (a) {
-    return [{ title: "Transparenz:", type: "slider", val: a.transparency ? Math.round(100 * a.transparency) : 0 }];
-};
-netgis.LayerTree.prototype.onTreeItemChange = function (a) {
-    var b = a.detail;
-    netgis.util.invoke(a.target, netgis.Events.MAP_LAYER_TOGGLE, { id: b.id, on: b.checked });
-};
-netgis.LayerTree.prototype.onClientContextResponse = function (a) {
-    this.initConfig(a.detail.context.config, !0);
-};
-netgis.LayerTree.prototype.onLayerTreeToggle = function (a) {
-    this.panel.toggle();
-};
-netgis.LayerTree.prototype.onToolboxToggle = function (a) {
-    this.panel.hide();
-};
-netgis.LayerTree.prototype.onSearchParcelToggle = function (a) {
-    this.panel.hide();
-};
-netgis.LayerTree.prototype.onTreeButtonClick = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id");
-    netgis.Client.handleCommand(a, b);
-};
-netgis.LayerTree.prototype.onMapLayerToggle = function (a) {
-    a = a.detail;
-    this.tree.setItemChecked(a.id, a.on, !0);
-    this.tree.updateFolderChecks();
-};
-netgis.LayerTree.prototype.onImportLayerAccept = function (a) {
-    a = a.detail;
-    this.importFolder || (this.importFolder = this.tree.addFolder(null, "_import", "Import", !0, !1));
-    this.tree.addCheckbox(this.importFolder, a.id, a.title, !0, !0, this.createDefaultDetails(a)).addEventListener("contextmenu", this.onTreeItemMenu.bind(this));
-    this.tree.updateFolderChecks();
-};
-netgis.LayerTree.prototype.onImportGeoportalSubmit = function (a) {
-    a = a.detail;
-    var b = a.folder.id,
-        c = this.tree.getFolder(b);
-    c || (c = this.tree.addFolder(null, b, a.folder.title, !0, !1));
-    var d = a.layer.id;
-    b = { id: d, folder: b, title: a.layer.title, active: !0, type: netgis.LayerTypes.WMS, url: a.layer.url, name: a.layer.name, order: 1e4, transparency: 0 };
-    this.config.layers.push(b);
-    this.tree.addCheckbox(c, d, a.layer.title, !1, !1, this.createDefaultDetails(b));
-    this.tree.setItemChecked(d, !0, !1);
-};
-netgis.LayerTree.prototype.onTreeItemMenu = function (a) {
-    a.preventDefault();
-    return !1;
-};
-netgis.LayerTree.prototype.onContextMenuSliderChange = function (a) {
-    var b = a.detail;
-    a = 0.01 * b.val;
-    var c = null;
-    0 === b.id.indexOf("layer_trans_") && (c = b.id.split("layer_trans_")[1]);
-    b = this.config.layers;
-    for (var d = 0; d < b.length; d++) {
-        var e = b[d];
-        if (e.id === c) {
-            e.transparency = a;
-            break;
-        }
-    }
-    netgis.util.invoke(this.tree.container, netgis.Events.MAP_LAYER_TRANSPARENCY, { id: c, transparency: a });
-};
-netgis.LayerTree.prototype.onTreeItemSliderChange = function (a) {
-    var b = a.detail;
-    a = b.id;
-    b = 0.01 * b.val;
-    for (var c = this.config.layers, d = 0; d < c.length; d++) {
-        var e = c[d];
-        if (e.id === a) {
-            e.transparency = b;
-            break;
-        }
-    }
-    netgis.util.invoke(this.tree.container, netgis.Events.MAP_LAYER_TRANSPARENCY, { id: a, transparency: b });
-};
-netgis.LayerTree.prototype.onMapEditLayerChange = function (a) {
-    this.editFolder.classList.remove("netgis-hide");
-};
-netgis = netgis || {};
-netgis.LayerTypes = Object.freeze({
-    TMS: "TMS",
-    WMTS: "WMTS",
-    WMS: "WMS",
-    WMST: "WMST",
-    GEOJSON: "GEOJSON",
-    VTILES: "VTILES",
-    WFS: "WFS",
-    GML: "GML",
-    GEOPACKAGE: "GEOPACKAGE",
-    SPATIALITE: "SPATIALITE",
-    SHAPEFILE: "SHAPEFILE",
-    WKT: "WKT",
-    OSM: "OSM",
-    XYZ: "XYZ",
-});
-netgis = netgis || {};
-netgis.Logic = function (a) {
-    this.client = a;
-    this.config = a.config;
-    this.container = a.container;
-    this.modules = a.modules;
-    this.initConfig(config);
-    this.initEvents();
-};
-netgis.Logic.prototype.initConfig = function (a) {
-    a.wmc && a.wmc.url && new netgis.WMC().requestContext(a.wmc.url, this.onContextLoaded.bind(this));
-};
-netgis.Logic.prototype.initEvents = function () {};
-netgis.Logic.prototype.onMenuButtonClick = function (a) {
-    a = a.detail;
-    switch (a.id) {
-        case "layertree":
-            this.modules.layertree.panel.toggle();
-            break;
-        case "searchplace":
-            this.modules.searchplace.search.toggle();
-            break;
-        default:
-            console.error("unhandled menu button", a);
-    }
-};
-netgis.Logic.prototype.onLayerItemChange = function (a) {
-    a = a.detail;
-    if (a.checked)
-        for (var b = this.config.layers, c = 0; c < b.length; c++) {
-            var d = b[c];
-            d.id === a.id && this.modules.map.addLayer(a.id, d);
-        }
-    else this.modules.map.removeLayer(a.id);
-};
-netgis.Logic.prototype.onControlsButtonClick = function (a) {
-    switch (a.detail.id) {
-        case "zoom_in":
-            this.modules.map.zoom(1);
-            break;
-        case "zoom_out":
-            this.modules.map.zoom(-1);
-            break;
-        case "zoom_home":
-            this.config.map.bbox ? this.modules.map.zoomBBox(this.config.map.bbox, 500) : this.config.map.centerLonLat && ((a = this.config.map.centerLonLat), this.modules.map.zoomLonLat(a[0], a[1], this.config.map.zoom));
-    }
-};
-netgis.Logic.prototype.onSearchPlaceChange = function (a) {
-    var b = this.config.searchplace.url;
-    b = netgis.util.replace(b, "{query}", window.encodeURIComponent(a.detail.query));
-    netgis.util.request(b, this.onSearchPlaceResponse.bind(this));
-};
-netgis.Logic.prototype.onSearchPlaceResponse = function (a) {
-    a = JSON.parse(a).data;
-    this.modules.searchplace.search.clearResults();
-    for (var b = 0; b < a.length; b++) {
-        var c = a[b],
-            d = c.name;
-        c = { type: "street", id: c.strid, lon: Number.parseFloat(c.wgs_x), lat: Number.parseFloat(c.wgs_y) };
-        this.modules.searchplace.search.addResult(d, JSON.stringify(c));
-    }
-};
-netgis.Logic.prototype.onSearchPlaceSelect = function (a) {
-    a = JSON.parse(a.detail.data);
-    this.modules.map.zoomLonLat(a.lon, a.lat, this.config.searchplace.zoom);
-    if ("street" === a.type) {
-        var b = this.config.searchplace.url_detail;
-        b && ((b = netgis.util.replace(b, "{id}", a.id)), netgis.util.request(b, this.onSearchPlaceDetailResponse.bind(this)));
-    }
-};
-netgis.Logic.prototype.onSearchPlaceDetailResponse = function (a) {
-    a = JSON.parse(a);
-    var b = a.hsnrarr;
-    if (0 !== b.length) {
-        this.modules.searchplace.search.clearResults();
-        for (var c = 0; c < b.length; c++) {
-            var d = b[c],
-                e = a.strname + " " + d.hsnr;
-            d = { type: "address", lon: Number.parseFloat(d.wgs_x), lat: Number.parseFloat(d.wgs_y) };
-            this.modules.searchplace.search.addResult(e, JSON.stringify(d));
-        }
-    }
-};
-netgis.Logic.prototype.onSearchPlaceClear = function (a) {};
-netgis.Logic.prototype.onContextLoaded = function (a) {
-    console.info("Context Loaded:", a);
-    for (var b = 0; b < a.config.layers.length; b++) this.config.layers.push(a.config.layers[b]);
-    a.config.map.bbox && (this.config.map.bbox = a.config.map.bbox);
-    this.modules.map && this.modules.map.initConfig(a.config);
-    this.modules.layertree && this.modules.layertree.initConfig(a.config, !0);
-};
-netgis = netgis || {};
-netgis.Map = function (a) {
-    this.config = a;
-    this.mode = null;
-    this.interactions = {};
-    this.layers = {};
-    this.viewHistory = [];
-    this.viewIndex = -1;
-    this.viewFromHistory = !1;
-    this.viewHistoryMax = 20;
-    this.hoverBounds = this.hoverFeature = null;
-    this.selectedFeatures = [];
-    this.sketchFeatures = [];
-    this.snap = null;
-    this.snapFeatures = new ol.Collection();
-    this.drawError = this.selectMultiple = this.editEventsSilent = !1;
-    this.initElements();
-    this.initMap(a);
-    this.initLayers();
-    this.initOverlays();
-    this.initInteractions();
-    this.initConfig(a);
-    this.setMode(netgis.Modes.VIEW);
-};
-netgis.Map.prototype.initElements = function () {
-    this.container = document.createElement("div");
-    this.container.setAttribute("tabindex", -1);
-    this.container.className = "netgis-map";
-    this.container.addEventListener("pointerleave", this.onPointerLeave.bind(this));
-    this.container.addEventListener("contextmenu", this.onRightClick.bind(this));
-    this.container.addEventListener("keydown", this.onKeyDown.bind(this));
-    this.container.addEventListener("keyup", this.onKeyUp.bind(this));
-};
-netgis.Map.prototype.initMap = function (a) {
-    var b = a.map;
-    "undefined" !== typeof proj4 && (proj4.defs(a.projections), proj4.defs("urn:ogc:def:crs:OGC:1.3:CRS84", proj4.defs("EPSG:4326")), ol.proj.proj4.register(proj4));
-    var c = { projection: b.projection, center: b.center_lonlat ? ol.proj.fromLonLat(b.center_lonlat, b.projection) : b.center, minZoom: b.min_zoom, maxZoom: b.max_zoom, zoom: b.zoom };
-    this.view = new ol.View(c);
-    this.map = new ol.Map({ target: this.container, view: this.view, pixelRatio: 1, moveTolerance: 5, controls: [] });
-    b.scalebar && ((this.scalebar = new ol.control.ScaleLine({ bar: !0 })), this.map.addControl(this.scalebar));
-    this.map.on("moveend", this.onMapMoveEnd.bind(this));
-    this.map.on("pointermove", this.onPointerMove.bind(this));
-    this.map.on("click", this.onPointerClick.bind(this));
-    if (a.map.extent) {
-        var d = this;
-        window.setTimeout(function () {
-            d.map.updateSize();
-            d.view.fit(a.map.extent);
-        }, 10);
-    }
-};
-netgis.Map.prototype.initLayers = function () {
-    this.measureLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 6e4, style: this.styleMeasure.bind(this) });
-    this.map.addLayer(this.measureLayer);
-    var a = this.config.tools;
-    this.nonEditLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 5e4, style: this.styleNonEdit.bind(this), updateWhileAnimating: a.interactive_render, updateWhileInteracting: a.interactive_render });
-    this.map.addLayer(this.nonEditLayer);
-    this.editLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 5e4, style: this.styleEdit.bind(this), updateWhileAnimating: a.interactive_render, updateWhileInteracting: a.interactive_render });
-    this.map.addLayer(this.editLayer);
-    this.editLayer.getSource().on("addfeature", this.onEditLayerAdd.bind(this));
-    this.editLayer.getSource().on("changefeature", this.onEditLayerChange.bind(this));
-    this.editLayer.getSource().on("removefeature", this.onEditLayerRemove.bind(this));
-    this.previewLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }), zIndex: 55e3, style: this.styleSketch.bind(this) });
-    this.map.addLayer(this.previewLayer);
-    this.boundsLayer = null;
-    if (this.config.tools.bounds) {
-        a = new ol.format.GeoJSON().readFeatures(this.config.tools.bounds);
-        var b = null;
-        this.config.tools.show_bounds && this.config.styles.bounds && (b = this.createStyle(this.config.styles.bounds));
-        this.boundsLayer = new ol.layer.Vector({ source: new ol.source.Vector({ features: a }), style: b, zIndex: 6e4 });
-        this.map.addLayer(this.boundsLayer);
-    }
-};
-netgis.Map.prototype.initOverlays = function () {
-    var a = document.createElement("div");
-    a.className = "netgis-map-overlay";
-    this.popupOverlay = new ol.Overlay({ id: "popup", element: a, positioning: "center-center" });
-    this.map.addOverlay(this.popupOverlay);
-};
-netgis.Map.prototype.initInteractions = function () {
-    this.interactions[netgis.Modes.VIEW] = [
-        new ol.interaction.DragPan(),
-        new ol.interaction.DragPan({
-            condition: function (a) {
-                return 1 === a.originalEvent.button;
-            },
-        }),
-        new ol.interaction.MouseWheelZoom(),
-    ];
-    this.interactions[netgis.Modes.ZOOM_BOX] = [
-        new ol.interaction.DragZoom({
-            condition: function (a) {
-                return 0 === a.originalEvent.button;
-            },
-            out: !1,
-        }),
-        new ol.interaction.DragPan({
-            condition: function (a) {
-                return 1 === a.originalEvent.button;
-            },
-        }),
-        new ol.interaction.MouseWheelZoom(),
-    ];
-    this.interactions[netgis.Modes.MEASURE_LINE] = [
-        new ol.interaction.DragPan(),
-        new ol.interaction.Modify({ source: this.measureLayer.getSource(), deleteCondition: ol.events.condition.doubleClick, style: this.styleMeasure.bind(this) }),
-        new ol.interaction.Draw({ type: "LineString", source: this.measureLayer.getSource(), style: this.styleMeasure.bind(this) }),
-        new ol.interaction.DragPan({
-            condition: function (a) {
-                return 1 === a.originalEvent.button;
-            },
-        }),
-        new ol.interaction.PinchZoom(),
-        new ol.interaction.MouseWheelZoom(),
-    ];
-    this.interactions[netgis.Modes.MEASURE_AREA] = [
-        new ol.interaction.DragPan(),
-        new ol.interaction.Modify({ source: this.measureLayer.getSource(), deleteCondition: ol.events.condition.doubleClick, style: this.styleMeasure.bind(this) }),
-        new ol.interaction.Draw({ type: "Polygon", source: this.measureLayer.getSource(), style: this.styleMeasure.bind(this) }),
-        new ol.interaction.DragPan({
-            condition: function (a) {
-                return 1 === a.originalEvent.button;
-            },
-        }),
-        new ol.interaction.PinchZoom(),
-        new ol.interaction.MouseWheelZoom(),
-    ];
-    this.interactions[netgis.Modes.MEASURE_LINE][2].on("drawstart", this.onMeasureLineBegin.bind(this));
-    this.interactions[netgis.Modes.MEASURE_AREA][2].on("drawstart", this.onMeasureAreaBegin.bind(this));
-    if (!0 === this.config.tools.editable) {
-        var a = this.config.tools.bounds ? !0 : !1;
-        this.interactions[netgis.Modes.DRAW_POINTS] = [
-            new ol.interaction.Draw({ type: "Point", source: this.editLayer.getSource(), style: this.styleSketch.bind(this), geometryFunction: a ? this.onDrawPointsUpdateGeom.bind(this) : void 0 }),
-            new ol.interaction.DragPan(),
-            new ol.interaction.DragPan({
-                condition: function (a) {
-                    return 1 === a.originalEvent.button;
-                },
-            }),
-            new ol.interaction.MouseWheelZoom(),
-        ];
-        this.interactions[netgis.Modes.DRAW_POINTS][0].on("drawend", this.onDrawBufferEnd.bind(this));
-        if (a) this.interactions[netgis.Modes.DRAW_POINTS][0].on("drawend", this.onDrawPointsEnd.bind(this));
-        this.interactions[netgis.Modes.DRAW_LINES] = [
-            new ol.interaction.Draw({ type: "LineString", source: this.editLayer.getSource(), style: this.styleSketch.bind(this), geometryFunction: a ? this.onDrawLinesUpdateGeom.bind(this) : void 0 }),
-            new ol.interaction.DragPan(),
-            new ol.interaction.DragPan({
-                condition: function (a) {
-                    return 1 === a.originalEvent.button;
-                },
-            }),
-            new ol.interaction.MouseWheelZoom(),
-        ];
-        this.interactions[netgis.Modes.DRAW_LINES][0].on("drawend", this.onDrawBufferEnd.bind(this));
-        if (a) this.interactions[netgis.Modes.DRAW_LINES][0].on("drawend", this.onDrawLinesEnd.bind(this));
-        this.interactions[netgis.Modes.DRAW_POLYGONS] = [
-            new ol.interaction.Draw({ type: "Polygon", source: this.editLayer.getSource(), style: this.styleSketch.bind(this), geometryFunction: a ? this.onDrawPolygonsUpdateGeom.bind(this) : void 0 }),
-            new ol.interaction.DragPan(),
-            new ol.interaction.DragPan({
-                condition: function (a) {
-                    return 1 === a.originalEvent.button;
-                },
-            }),
-            new ol.interaction.MouseWheelZoom(),
-        ];
-        if (a) this.interactions[netgis.Modes.DRAW_POLYGONS][0].on("drawend", this.onDrawPolygonsEnd.bind(this));
-        this.interactions[netgis.Modes.MODIFY_FEATURES] = [
-            new ol.interaction.DragPan(),
-            new ol.interaction.Modify({ source: this.editLayer.getSource(), deleteCondition: ol.events.condition.doubleClick, style: this.styleModify.bind(this) }),
-            new ol.interaction.DragPan({
-                condition: function (a) {
-                    return 1 === a.originalEvent.button;
-                },
-            }),
-            new ol.interaction.MouseWheelZoom(),
-        ];
-        this.interactions[netgis.Modes.DELETE_FEATURES] = [
-            new ol.interaction.DragPan(),
-            new ol.interaction.DragPan({
-                condition: function (a) {
-                    return 1 === a.originalEvent.button;
-                },
-            }),
-            new ol.interaction.MouseWheelZoom(),
-        ];
-        this.interactions[netgis.Modes.CUT_FEATURES_DRAW] = [
-            new ol.interaction.Draw({ type: "Polygon", style: this.styleSketch.bind(this) }),
-            new ol.interaction.DragPan(),
-            new ol.interaction.DragPan({
-                condition: function (a) {
-                    return 1 === a.originalEvent.button;
-                },
-            }),
-            new ol.interaction.MouseWheelZoom(),
-        ];
-        this.interactions[netgis.Modes.CUT_FEATURES_DRAW][0].on("drawend", this.onCutFeaturesDrawEnd.bind(this));
-    }
-};
-netgis.Map.prototype.initConfig = function (a) {
-    a.map.bbox && this.zoomBBox(a.map.bbox);
-    a.map.zoom && this.view.setZoom(a.map.zoom);
-    a = a.layers;
-    for (var b = a.length - 1; 0 <= b; b--) {
-        var c = a[b];
-        !0 === c.active && this.addLayer(c.id, c);
-    }
-};
-netgis.Map.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-    a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE, this.onClientContextResponse.bind(this));
-    a.addEventListener(netgis.Events.CLIENT_SET_MODE, this.onClientSetMode.bind(this));
-    a.addEventListener(netgis.Events.PANEL_TOGGLE, this.onPanelToggle.bind(this));
-    a.addEventListener(netgis.Events.PANEL_RESIZE, this.onPanelResize.bind(this));
-    a.addEventListener(netgis.Events.MAP_EDIT_LAYER_LOADED, this.onEditLayerLoaded.bind(this));
-    a.addEventListener(netgis.Events.MAP_ZOOM, this.onMapZoom.bind(this));
-    a.addEventListener(netgis.Events.MAP_ZOOM_HOME, this.onMapZoomHome.bind(this));
-    a.addEventListener(netgis.Events.MAP_ZOOM_LONLAT, this.onMapZoomLonLat.bind(this));
-    a.addEventListener(netgis.Events.MAP_ZOOM_SCALE, this.onMapZoomScale.bind(this));
-    a.addEventListener(netgis.Events.MAP_ZOOM_LAYER, this.onMapZoomLayer.bind(this));
-    a.addEventListener(netgis.Events.MAP_ZOOM_LEVEL, this.onMapZoomLevel.bind(this));
-    a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE, this.onMapLayerToggle.bind(this));
-    a.addEventListener(netgis.Events.MAP_LAYER_TRANSPARENCY, this.onMapLayerTransparency.bind(this));
-    a.addEventListener(netgis.Events.MAP_SNAP_TOGGLE, this.onMapSnapToggle.bind(this));
-    a.addEventListener(netgis.Events.MAP_VIEW_PREV, this.onMapViewPrev.bind(this));
-    a.addEventListener(netgis.Events.MAP_VIEW_NEXT, this.onMapViewNext.bind(this));
-    a.addEventListener(netgis.Events.MEASURE_CLEAR, this.onMeasureClear.bind(this));
-    a.addEventListener(netgis.Events.DRAW_BUFFER_TOGGLE, this.onDrawBufferToggle.bind(this));
-    a.addEventListener(netgis.Events.DRAW_BUFFER_CHANGE, this.onDrawBufferChange.bind(this));
-    a.addEventListener(netgis.Events.BUFFER_CHANGE, this.onBufferChange.bind(this));
-    a.addEventListener(netgis.Events.BUFFER_ACCEPT, this.onBufferAccept.bind(this));
-    a.addEventListener(netgis.Events.IMPORT_LAYER_ACCEPT, this.onImportLayerAccept.bind(this));
-    a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW, this.onImportLayerPreview.bind(this));
-    a.addEventListener(netgis.Events.IMPORT_GEOPORTAL_SUBMIT, this.onImportGeoportalSubmit.bind(this));
-    a.addEventListener(netgis.Events.MAP_COPY_FEATURE_TO_EDIT, this.onCopyFeatureToEdit.bind(this));
-    a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_ENTER, this.onSearchParcelItemEnter.bind(this));
-    a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_LEAVE, this.onSearchParcelItemLeave.bind(this));
-    a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_CLICK, this.onSearchParcelItemClick.bind(this));
-    a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_IMPORT, this.onSearchParcelItemImport.bind(this));
-    a.addEventListener(netgis.Events.EXPORT_BEGIN, this.onExportBegin.bind(this));
-    a.addEventListener(netgis.Events.TIMESLIDER_SHOW, this.onTimeSliderShow.bind(this));
-    a.addEventListener(netgis.Events.TIMESLIDER_HIDE, this.onTimeSliderHide.bind(this));
-    a.addEventListener(netgis.Events.TIMESLIDER_SELECT, this.onTimeSliderSelect.bind(this));
-};
-netgis.Map.prototype.setMode = function (a) {
-    switch (this.mode) {
-        case netgis.Modes.MODIFY_FEATURES:
-            this.editLayer.setStyle(this.styleEdit.bind(this));
-            break;
-        case netgis.Modes.DRAW_POINTS:
-        case netgis.Modes.DRAW_LINES:
-            this.previewLayer.getSource().clear();
-            this.container.classList.remove("netgis-not-allowed");
-            break;
-        case netgis.Modes.DRAW_POLYGONS:
-            this.container.classList.remove("netgis-not-allowed");
-            break;
-        case netgis.Modes.BUFFER_FEATURES_EDIT:
-            this.clearSketchFeatures();
-    }
-    this.map.getInteractions().clear();
-    this.mode && this.container.classList.remove("netgis-mode-" + this.mode);
-    var b = this.interactions[a];
-    b || (console.warn("no interactions found for mode", a), (b = this.interactions[netgis.Modes.VIEW]));
-    for (var c = 0; c < b.length; c++) this.map.addInteraction(b[c]);
-    b = this.config.tools.editable;
-    switch (a) {
-        case netgis.Modes.DRAW_POINTS:
-        case netgis.Modes.DRAW_LINES:
-            b && (this.setSnapping(this.drawSnapOn), this.onDrawBufferToggle({ detail: { on: this.drawBufferOn, radius: this.drawBufferRadius, segments: this.drawBufferSegments } }));
-            break;
-        case netgis.Modes.DRAW_POLYGONS:
-            b && this.setSnapping(this.drawSnapOn);
-            break;
-        case netgis.Modes.MODIFY_FEATURES:
-            b && this.editLayer.setStyle(this.styleModify.bind(this));
-    }
-    this.container.classList.add("netgis-mode-" + a);
-    this.mode = a;
-};
-netgis.Map.prototype.addLayer = function (a, b) {
-    var c = this.createLayer(b);
-    c &&
-        (c.set("id", a),
-        this.map.addLayer(c),
-        (this.layers[a] = c),
-        b.order && c.setZIndex(b.order),
-        b.transparency && c.setOpacity(1 - b.transparency),
-        b.style && c.setStyle(this.createStyle(b.style)),
-        b.min_zoom && c.setMinZoom(b.min_zoom - 1e-4),
-        b.max_zoom && c.setMaxZoom(b.max_zoom),
-        c instanceof ol.layer.Vector && this.addSnapLayer(c),
-        b.type === netgis.LayerTypes.WMST && netgis.util.invoke(this.container, netgis.Events.TIMESLIDER_SHOW, { layer: a, title: b.title, url: b.url, name: b.name }));
-    return c;
-};
-netgis.Map.prototype.createLayer = function (a) {
-    switch (a.type) {
-        case netgis.LayerTypes.TMS:
-        case netgis.LayerTypes.XYZ:
-            var b = this.createLayerTMS(a.url, a.projection, a.extent, a.scales);
-            break;
-        case netgis.LayerTypes.OSM:
-            b = this.createLayerTMS("https://{a-c}.tile.openstreetmap.de/{z}/{x}/{y}.png");
-            break;
-        case netgis.LayerTypes.WMTS:
-            b = this.createLayerWMTS(a.url, a.name);
-            break;
-        case netgis.LayerTypes.WMS:
-            b = this.createLayerWMS(a.url, a.name, a.format, a.tiled, a.username, a.password);
-            break;
-        case netgis.LayerTypes.WMST:
-            b = this.createLayerWMST(a.url, a.name, a.format, a.tiled, a.username, a.password);
-            break;
-        case netgis.LayerTypes.GEOJSON:
-            (b = a.data) && netgis.util.isString(b) && (b = JSON.parse(b));
-            b = this.createLayerGeoJSON(b ? b : a.url);
-            break;
-        case netgis.LayerTypes.WFS:
-            b = this.createLayerWFS(a.url, a.name, this.view.getProjection().getCode(), a.format, a.username, a.password);
-            break;
-        case netgis.LayerTypes.VTILES:
-            b = this.createLayerVectorTiles(a.url, a.extent, a.min_zoom, a.max_zoom);
-            break;
-        case netgis.LayerTypes.GML:
-            b = this.createLayerGML(a.data);
-            break;
-        case netgis.LayerTypes.GEOPACKAGE:
-            b = this.createLayerGeoPackage(a.data);
-            break;
-        case netgis.LayerTypes.SPATIALITE:
-            b = this.createLayerSpatialite(a.data);
-            break;
-        case netgis.LayerTypes.SHAPEFILE:
-            b = this.createLayerShapefile(a.data);
-            break;
-        case netgis.LayerTypes.WKT:
-            b = this.createLayerWKT(a.data);
-            break;
-        default:
-            console.error("unknown layer type", a.type);
-    }
-    return b;
-};
-netgis.Map.prototype.removeLayer = function (a) {
-    var b = this.layers[a];
-    b instanceof ol.layer.Vector && this.removeSnapLayer(b);
-    for (var c = 0; c < this.config.layers.length; c++)
-        if (this.config.layers[c].id === a) {
-            this.config.layers[c].type === netgis.LayerTypes.WMST && netgis.util.invoke(this.container, netgis.Events.TIMESLIDER_HIDE, null);
-            break;
-        }
-    this.map.removeLayer(b);
-    delete this.layers[a];
-};
-netgis.Map.prototype.setLayerOrder = function (a, b) {
-    this.layers[a].setZIndex(b);
-};
-netgis.Map.prototype.createStyle = function (a) {
-    var b = a.radius ? a.radius : 3,
-        c = a.width ? a.width : 1,
-        d = a.fill ? a.fill : "gray",
-        e = a.stroke ? a.stroke : "black";
-    return function (a) {
-        return new ol.style.Style({ image: new ol.style.Circle({ radius: b - c, fill: new ol.style.Fill({ color: d }) }), fill: new ol.style.Fill({ color: d }), stroke: new ol.style.Stroke({ color: e, width: c }) });
-    };
-};
-netgis.Map.prototype.styleMeasure = function (a) {
-    var b = a.getGeometry(),
-        c = this.config.measure,
-        d = new ol.style.Style({ fill: new ol.style.Fill({ color: c.area_fill }), stroke: new ol.style.Stroke({ color: c.line_color, width: c.line_width, lineDash: c.line_dash }) });
-    b instanceof ol.geom.Polygon
-        ? ((b = b.getArea()),
-          d.setText(
-              new ol.style.Text({
-                  text: [netgis.util.formatArea(b, !0), "4mm sans-serif"],
-                  font: "Arial",
-                  fill: new ol.style.Fill({ color: c.text_color }),
-                  backgroundFill: new ol.style.Fill({ color: c.text_back }),
-                  padding: [2, 4, 2, 4],
-                  overflow: !0,
-              })
-          ))
-        : b instanceof ol.geom.LineString &&
-          (this.mode === netgis.Modes.MEASURE_LINE || this.mode === netgis.Modes.VIEW) &&
-          ((b = b.getLength()),
-          d.setText(
-              new ol.style.Text({
-                  text: [netgis.util.formatDistance(b), "4mm sans-serif"],
-                  font: "Arial",
-                  fill: new ol.style.Fill({ color: c.text_color }),
-                  backgroundFill: new ol.style.Fill({ color: c.text_back }),
-                  padding: [2, 4, 2, 4],
-                  overflow: !0,
-              })
-          ));
-    return c.point_radius && 0 < c.point_radius
-        ? ((b = this.getGeometryPoints(a)),
-          (a = new ol.style.Style({ image: new ol.style.Circle({ radius: 1.25 * c.point_radius, fill: new ol.style.Fill({ color: c.point_stroke }) }), geometry: b })),
-          (c = new ol.style.Style({ image: new ol.style.Circle({ radius: c.point_radius, fill: new ol.style.Fill({ color: c.point_fill }) }), geometry: b })),
-          [d, a, c])
-        : d;
-};
-netgis.Map.prototype.styleEdit = function (a) {
-    var b = this.config.styles.draw,
-        c = this.config.styles.select,
-        d = a.getGeometry(),
-        e = this.hoverFeature === a;
-    -1 < this.selectedFeatures.indexOf(a) && (e = !0);
-    var f = e ? c.fill : b.fill;
-    a = e ? c.stroke : b.stroke;
-    c = new ol.style.Style({ image: new ol.style.Circle({ radius: e ? c.radius : b.radius, fill: new ol.style.Fill({ color: a }) }), fill: new ol.style.Fill({ color: f }), stroke: new ol.style.Stroke({ color: a, width: b.width }) });
-    e && c.setZIndex(1);
-    if (d instanceof ol.geom.Polygon || d instanceof ol.geom.MultiPolygon) {
-        e = d.getArea();
-        if (!e || 0 >= e) return c;
-        !0 === b.viewport_labels &&
-            ((b = this.view.calculateExtent(this.map.getSize())), (f = ol.geom.Polygon.fromExtent(b)), (b = new jsts.io.OL3Parser()), (d = b.read(d)), (f = b.read(f)), (d = d.intersection(f)), (d = b.write(d)), c.setGeometry(d));
-        c.setText(
-            new ol.style.Text({
-                text: [netgis.util.formatArea(e, !0), "4mm sans-serif"],
-                font: "Arial",
-                fill: new ol.style.Fill({ color: a }),
-                backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }),
-                padding: [2, 4, 2, 4],
-            })
-        );
-    }
-    return c;
-};
-netgis.Map.prototype.styleNonEdit = function (a) {
-    var b = this.config.styles.non_edit,
-        c = this.config.styles.select,
-        d = a.getGeometry(),
-        e = this.hoverFeature === a;
-    -1 < this.selectedFeatures.indexOf(a) && (e = !0);
-    var f = e ? c.fill : b.fill;
-    a = e ? c.stroke : b.stroke;
-    c = new ol.style.Style({ image: new ol.style.Circle({ radius: e ? c.radius : b.radius, fill: new ol.style.Fill({ color: a }) }), fill: new ol.style.Fill({ color: f }), stroke: new ol.style.Stroke({ color: a, width: b.width }) });
-    e && c.setZIndex(1);
-    if (d instanceof ol.geom.Polygon) {
-        e = d.getArea();
-        if (!e || 0 >= e) return c;
-        !0 === b.viewport_labels &&
-            ((b = this.map.getView().calculateExtent(this.map.getSize())), (f = ol.geom.Polygon.fromExtent(b)), (b = new jsts.io.OL3Parser()), (d = b.read(d)), (f = b.read(f)), (d = d.intersection(f)), (d = b.write(d)), c.setGeometry(d));
-        c.setText(
-            new ol.style.Text({
-                text: [netgis.util.formatArea(e, !0), "4mm sans-serif"],
-                font: "Arial",
-                fill: new ol.style.Fill({ color: a }),
-                backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }),
-                padding: [2, 4, 2, 4],
-            })
-        );
-    }
-    return c;
-};
-netgis.Map.prototype.styleSketch = function (a) {
-    var b = this.config.styles[this.drawError ? "error" : "sketch"],
-        c = a.getGeometry(),
-        d = new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.fill }) }), fill: new ol.style.Fill({ color: b.fill }), stroke: new ol.style.Stroke({ color: b.stroke, width: b.width }) });
-    c instanceof ol.geom.Polygon &&
-        ((c = c.getArea()),
-        d.setText(
-            new ol.style.Text({
-                text: [netgis.util.formatArea(c, !0), "4mm sans-serif"],
-                font: "Arial",
-                fill: new ol.style.Fill({ color: b.stroke }),
-                backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }),
-                padding: [2, 4, 2, 4],
-            })
-        ));
-    a = new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.stroke }) }), geometry: this.getGeometryPoints(a) });
-    return [d, a];
-};
-netgis.Map.prototype.styleModify = function (a) {
-    var b = this.config.styles.modify,
-        c = new ol.style.Style({
-            image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.stroke }) }),
-            fill: new ol.style.Fill({ color: b.fill }),
-            stroke: new ol.style.Stroke({ color: b.stroke, width: b.width }),
-        }),
-        d = new ol.style.Style({ image: new ol.style.Circle({ radius: b.radius, fill: new ol.style.Fill({ color: b.stroke }) }), geometry: this.getGeometryPoints(a) });
-    a = a.getGeometry();
-    a instanceof ol.geom.Polygon &&
-        ((a = a.getArea()),
-        c.setText(
-            new ol.style.Text({
-                text: [netgis.util.formatArea(a, !0), "4mm sans-serif"],
-                font: "Arial",
-                fill: new ol.style.Fill({ color: b.stroke }),
-                backgroundFill: new ol.style.Fill({ color: "rgba( 255, 255, 255, 0.5 )" }),
-                padding: [2, 4, 2, 4],
-            })
-        ));
-    return [c, d];
-};
-netgis.Map.prototype.styleHover = function (a) {
-    a = this.config.styles.select;
-    return new ol.style.Style({
-        image: new ol.style.Circle({ radius: a.radius, fill: new ol.style.Fill({ color: a.stroke }) }),
-        fill: new ol.style.Fill({ color: a.fill }),
-        stroke: new ol.style.Stroke({ color: a.stroke, width: a.width }),
-        zIndex: 1,
-    });
-};
-netgis.Map.prototype.getGeometryPoints = function (a) {
-    var b = a.getGeometry();
-    if (b instanceof ol.geom.LineString) return new ol.geom.MultiPoint(b.getCoordinates());
-    if (b instanceof ol.geom.Polygon) {
-        a = [];
-        b = b.getCoordinates();
-        for (var c = 0; c < b.length; c++) for (var d = b[c], e = 0; e < d.length; e++) a.push(d[e]);
-        return new ol.geom.MultiPoint(a);
-    }
-    if (b instanceof ol.geom.MultiPolygon) {
-        a = [];
-        for (var f = b.getPolygons(), g = 0; g < f.length; g++) for (b = f[g].getCoordinates(), c = 0; c < b.length; c++) for (d = b[c], e = 0; e < d.length; e++) a.push(d[e]);
-        return new ol.geom.MultiPoint(a);
-    }
-    if (b instanceof ol.geom.MultiLineString) {
-        a = [];
-        f = b.getPolygons();
-        for (g = 0; g < f.length; g++) for (b = f[g].getCoordinates(), c = 0; c < b.length; c++) for (d = b[c], e = 0; e < d.length; e++) a.push(d[e]);
-        return new ol.geom.MultiPoint(a);
-    }
-    return b;
-};
-netgis.Map.prototype.redrawVectorLayers = function () {
-    this.map.getLayers().forEach(function (a, b, c) {
-        (a instanceof ol.layer.Vector || a instanceof ol.layer.VectorTile) && a.setStyle(a.getStyle());
-    });
-};
-netgis.Map.prototype.setSnapping = function (a) {
-    var b = this.config.tools.snapping;
-    a
-        ? ((this.snap = new ol.interaction.Snap({ features: this.snapFeatures, pixelTolerance: b.tolerance ? b.tolerance : 10 })), this.map.addInteraction(this.snap), this.snapFeatures.changed())
-        : this.snap && (this.map.removeInteraction(this.snap), (this.snap = null));
-    this.drawSnapOn = a;
-};
-netgis.Map.prototype.setDrawTrace = function (a) {};
-netgis.Map.prototype.addSnapLayer = function (a) {
-    a = a.getSource().getFeatures();
-    for (var b = 0; b < a.length; b++) this.snapFeatures.push(a[b]);
-};
-netgis.Map.prototype.removeSnapLayer = function (a) {
-    a = a.getSource().getFeatures();
-    for (var b = 0; b < a.length; b++) this.snapFeatures.remove(a[b]);
-};
-netgis.Map.prototype.setDrawBuffer = function (a, b, c) {
-    if (a) {
-        var d = this.createBufferFeature(new ol.geom.Point(this.view.getCenter()), b, c);
-        this.previewLayer.getSource().addFeature(d);
-        this.drawBufferRadius = b;
-        this.drawBufferSegments = c;
-    } else this.previewLayer.getSource().clear();
-    this.drawBufferOn = a;
-};
-netgis.Map.prototype.createLayerTMS = function (a, b, c, d) {
-    if (b && c && d) {
-        b = [];
-        d = "map" === d ? this.config.map.scales : d;
-        c = "map" === c ? this.config.map.extent : c;
-        for (var e = 0; e < d.length; e++) b.unshift(this.getResolutionFromScale(d[e]));
-        c = new ol.source.TileImage({
-            crossOrigin: null,
-            projection: this.view.getProjection(),
-            tileGrid: new ol.tilegrid.TileGrid({ extent: c, origin: [c[0], c[1]], resolutions: b }),
-            tileUrlFunction: function (b) {
-                if (null !== b) {
-                    var c = a;
-                    c = netgis.util.replace(c, "{z}", b[0]);
-                    c = netgis.util.replace(c, "{x}", b[1]);
-                    c = netgis.util.replace(c, "{y}", b[2]);
-                    return (c = netgis.util.replace(c, "{-y}", -b[2] - 1));
-                }
-            },
-        });
-        c = new ol.layer.Tile({ source: c });
-    } else c = new ol.layer.Tile({ source: new ol.source.XYZ({ url: a, crossOrigin: "anonymous" }) });
-    return c;
-};
-netgis.Map.prototype.createLayerWMS = function (a, b, c, d, e, f) {
-    a = { url: a, params: { LAYERS: b, FORMAT: c ? c : "image/png", TRANSPARENT: "true", VERSION: "1.1.1" }, hidpi: !1 };
-    e &&
-        f &&
-        (a.imageLoadFunction = function (a, b) {
-            var c = new XMLHttpRequest();
-            c.open("GET", b);
-            c.setRequestHeader("Authorization", "Basic " + window.btoa(e + ":" + f));
-            c.onload = function () {
-                a.getImage().src = b;
-            };
-            c.send();
-        });
-    d ? ((d = new ol.source.TileWMS(a)), (d = new ol.layer.Tile({ source: d }))) : ((d = new ol.source.ImageWMS(a)), (d = new ol.layer.Image({ source: d })));
-    return d;
-};
-netgis.Map.prototype.createLayerWMST = function (a, b, c, d, e, f) {
-    a = { url: a, params: { LAYERS: b, FORMAT: c ? c : "image/png", TRANSPARENT: "true", VERSION: "1.1.1" }, hidpi: !1 };
-    e &&
-        f &&
-        (a.imageLoadFunction = function (a, b) {
-            var c = new XMLHttpRequest();
-            c.open("GET", b);
-            c.setRequestHeader("Authorization", "Basic " + window.btoa(e + ":" + f));
-            c.onload = function () {
-                a.getImage().src = b;
-            };
-            c.send();
-        });
-    d ? ((d = new ol.source.TileWMS(a)), (d = new ol.layer.Tile({ source: d }))) : ((d = new ol.source.ImageWMS(a)), (d = new ol.layer.Image({ source: d })));
-    return d;
-};
-netgis.Map.prototype.createLayerWMTS = function (a) {
-    for (var b = [], c = this.client.config.map.scales, d = this.client.config.map.extent, e = 0; e < c.length; e++) b.unshift(this.getResolutionFromScale(c[e]));
-    b = new ol.source.TileImage({
-        crossOrigin: null,
-        projection: this.view.getProjection(),
-        tileGrid: new ol.tilegrid.TileGrid({ extent: d, origin: [d[0], d[1]], resolutions: b }),
-        tileUrlFunction: function (b) {
-            if (null !== b) {
-                var c = a;
-                c = netgis.util.replace(c, "{z}", b[0]);
-                c = netgis.util.replace(c, "{x}", b[1]);
-                c = netgis.util.replace(c, "{y}", b[2]);
-                return (c = netgis.util.replace(c, "{-y}", -b[2]));
-            }
-        },
-    });
-    return new ol.layer.Tile({ source: b });
-};
-netgis.Map.prototype.createLayerWMTS_01 = function (a, b) {
-    for (var c = this.view.getProjection().getExtent(), d = ol.extent.getWidth(c) / 256, e = Array(14), f = Array(14), g = 0; 14 > g; ++g) (e[g] = d / Math.pow(2, g)), (f[g] = g);
-    source = new ol.source.WMTS({
-        url: a,
-        params: { LAYER: b, FORMAT: "image/png", TRANSPARENT: "true", VERSION: "1.1.1" },
-        layer: b,
-        format: "image/jpeg",
-        matrixSet: "UTM32",
-        tileGrid: new ol.tilegrid.WMTS({ origin: ol.extent.getTopLeft(c), resolutions: e, matrixIds: f }),
-    });
-};
-netgis.Map.prototype.createLayerGeoJSON = function (a) {
-    if (netgis.util.isObject(a)) {
-        var b = new ol.format.GeoJSON(),
-            c = b.readProjection(a);
-        a = b.readFeatures(a, { featureProjection: this.view.getProjection() });
-        c = c.getCode();
-        switch (c) {
-            case "EPSG:3857":
-            case "EPSG:4326":
-            case this.view.getProjection().getCode():
-                break;
-            default:
-                console.warn("unsupported import projection '" + c + "'");
-        }
-        var d = new ol.layer.Vector({ source: new ol.source.Vector({ features: a }) });
-        return d;
-    }
-    if (netgis.util.isString(a)) {
-        d = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) });
-        var e = this;
-        netgis.util.request(a, function (a) {
-            a = JSON.parse(a);
-            a = e.createLayerGeoJSON(a);
-            d.getSource().addFeatures(a.getSource().getFeatures());
-        });
-        return d;
-    }
-};
-netgis.Map.prototype.createLayerGML = function (a) {
-    console.warn("GML support is experimental!");
-    var b = [];
-    a = new DOMParser().parseFromString(a, "text/xml").getElementsByTagName("gml:featureMember");
-    for (var c = 0; c < a.length; c++) {
-        for (var d = {}, e = a[c].children[0], f = 0; f < e.attributes.length; f++) {
-            var g = e.attributes[f];
-            d[g.nodeName] = g.nodeValue;
-        }
-        for (f = 0; f < e.children.length; f++)
-            if (((g = e.children[f]), "ogr:geometryProperty" !== g.nodeName)) {
-                var h = g.nodeName.split(":");
-                d[h[h.length - 1]] = g.innerHTML;
-            }
-        e = e.getElementsByTagName("ogr:geometryProperty")[0].children[0];
-        (f = e.getAttribute("srsName")) && "EPSG:4326" !== f && f !== this.projection && console.warn("unsupported import projection:", f);
-        switch (e.nodeName) {
-            case "gml:Polygon":
-                d.geometry = this.gmlParsePolygon(e, f);
-                break;
-            case "gml:MultiPolygon":
-                d.geometry = this.gmlParseMultiPolygon(e, f);
-        }
-        d = new ol.Feature(d);
-        b.push(d);
-    }
-    return new ol.layer.Vector({ source: new ol.source.Vector({ features: b }) });
-};
-netgis.Map.prototype.gmlParsePolygon = function (a, b) {
-    var c = [];
-    a = a.getElementsByTagName("gml:LinearRing");
-    for (var d = 0; d < a.length; d++) {
-        var e = a[d].getElementsByTagName("gml:coordinates")[0].innerHTML;
-        c.push(this.gmlParseCoordinates(e, b));
-    }
-    return new ol.geom.Polygon(c);
-};
-netgis.Map.prototype.gmlParseMultiPolygon = function (a, b) {
-    var c = [];
-    a = a.getElementsByTagName("gml:polygonMember");
-    for (var d = 0; d < a.length; d++) {
-        var e = a[d].getElementsByTagName("gml:Polygon")[0];
-        c.push(this.gmlParsePolygon(e, b));
-    }
-    return new ol.geom.MultiPolygon(c);
-};
-netgis.Map.prototype.gmlParseCoordinates = function (a, b) {
-    a = a.split(" ");
-    for (var c = 0; c < a.length; c++) {
-        a[c] = a[c].split(",");
-        for (var d = 0; d < a[c].length; d++) a[c][d] = Number.parseFloat(a[c][d]);
-        b && (a[c] = ol.proj.transform(a[c], b, this.view.getProjection()));
-    }
-    return a;
-};
-netgis.Map.prototype.createLayerGeoPackage = function (a) {
-    var b = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }),
-        c = this;
-    a = new Uint8Array(a);
-    window.GeoPackage.setSqljsWasmLocateFile(function (a) {
-        return c.config["import"].geopackage_lib + a;
-    });
-    window.GeoPackage.GeoPackageAPI.open(a).then(function (a) {
-        for (var d = [], f = new ol.format.GeoJSON(), g = a.getFeatureTables(), h = 0; h < g.length; h++)
-            for (var k = a.queryForGeoJSONFeaturesInTable(g[h]), l = 0; l < k.length; l++) {
-                var m = f.readGeometry(k[l].geometry, { featureProjection: c.view.getProjection() });
-                m = new ol.Feature({ geometry: m });
-                d.push(m);
-            }
-        b.getSource().addFeatures(d);
-    });
-    return b;
-};
-netgis.Map.prototype.createLayerSpatialite = function (a) {
-    var b = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }),
-        c = this;
-    window.initSqlJs().then(function (d) {
-        var e = [],
-            f = new Uint8Array(a);
-        d = new d.Database(f);
-        var g = d.exec(
-            "SELECT name FROM sqlite_schema WHERE type = 'table' \n\t\t\t\t\tAND name NOT LIKE 'sqlite_%' \n\t\t\t\t\tAND name NOT LIKE 'sql_%' \n\t\t\t\t\tAND name NOT LIKE 'idx_%' \n\t\t\t\t\tAND name NOT LIKE 'spatial_ref_sys%' \n\t\t\t\t\tAND name NOT LIKE 'spatialite_%' \n\t\t\t\t\tAND name NOT LIKE 'geometry_columns%' \n\t\t\t\t\tAND name NOT LIKE 'views_%' \n\t\t\t\t\tAND name NOT LIKE 'virts_%' \n\t\t\t\t\tAND name NOT LIKE 'SpatialIndex' \n\t\t\t\t\tAND name NOT LIKE 'KNN%' \n\t\t\t\t\tAND name NOT LIKE 'ElementaryGeometries' \n\t\t\t\t;"
-        );
-        f = g[0].values;
-        for (var h = 0; h < f.length; h++) {
-            g = d.exec("SELECT * FROM " + f[h][0]);
-            var k = g[0];
-            g = null;
-            for (var l = 0; l < k.columns.length; l++) {
-                if ("geometry" === k.columns[l].toLowerCase()) {
-                    g = l;
-                    break;
-                }
-                if ("geom" === k.columns[l].toLowerCase()) {
-                    g = l;
-                    break;
-                }
-            }
-            if (null !== g)
-                for (k = k.values, l = 0; l < k.length; l++) {
-                    var m = k[l][g],
-                        n = new Uint8Array(m.length - 43 - 1 + 5);
-                    n[0] = m[1];
-                    n[1] = m[39];
-                    n[2] = m[40];
-                    n[3] = m[41];
-                    n[4] = m[42];
-                    for (var q = m.length - 43 - 1, p = 0; p < q; p++) n[5 + p] = m[43 + p];
-                    m = new ol.format.WKB().readGeometry(n, { featureProjection: c.view.getProjection() });
-                    e.push(new ol.Feature({ geometry: m }));
-                }
-        }
-        b.getSource().addFeatures(e);
-    });
-    return b;
-};
-netgis.Map.prototype.createLayerShapefile = function (a) {
-    var b = new ol.layer.Vector({ source: new ol.source.Vector({ features: [] }) }),
-        c = this;
-    shp(a).then(function (a) {
-        var d = new ol.format.GeoJSON();
-        d.readProjection(a);
-        a = d.readFeatures(a, { featureProjection: c.view.getProjection() });
-        b.getSource().addFeatures(a);
-    });
-    return b;
-};
-netgis.Map.prototype.createLayerWKT = function (a) {
-    for (var b = new ol.format.WKT(), c = [], d = 0; d < a.length; d++) {
-        var e = a[d],
-            f = b.readGeometry(e.geometry),
-            g = e.properties;
-        g.geometry = f;
-        g.wkt = e.geometry;
-        f = new ol.Feature(g);
-        f.setId(e.id);
-        c.push(f);
-    }
-    return new ol.layer.Vector({ source: new ol.source.Vector({ features: c }) });
-};
-netgis.Map.prototype.createLayerWFS = function (a, b, c, d, e, f) {
-    "?" !== a[a.length - 1] && (a += "?");
-    a += "service=WFS&version=1.1.0&request=GetFeature";
-    c || (c = this.view.getProjection().getCode());
-    d = d ? netgis.util.replace(d, " ", "+") : "application/json";
-    var g = new ol.source.Vector({
-            format: new ol.format.GeoJSON(),
-            strategy: ol.loadingstrategy.bbox,
-            loader: function (h, k, n, q, p) {
-                h = a + "&typename=" + b + "&srsname=" + c + "&bbox=" + h.join(",") + "," + c + "&outputFormat=" + d;
-                var l = new XMLHttpRequest();
-                l.open("GET", h);
-                e && f && l.setRequestHeader("Authorization", "Basic " + window.btoa(e + ":" + f));
-                l.onerror = function () {
-                    console.error("WFS request error");
-                    p();
-                };
-                l.onload = function () {
-                    if (200 === l.status) {
-                        g.clear();
-                        var a = g.getFormat().readFeatures(l.responseText);
-                        g.addFeatures(a);
-                        q(a);
-                    } else console.error("WFS request status", l.status), p();
-                };
-                l.send();
-            },
-        }),
-        h = new ol.layer.Vector({ source: g }),
-        k = this;
-    g.on("featuresloadstart", function (a) {
-        k.removeSnapLayer(h);
-    });
-    g.on("featuresloadend", function (a) {
-        window.setTimeout(function () {
-            k.addSnapLayer(h);
-        }, 10);
-    });
-    return h;
-};
-netgis.Map.prototype.createLayerVectorTiles = function (a, b, c, d) {
-    return new ol.layer.VectorTile({ extent: b, source: new ol.source.VectorTile({ format: new ol.format.MVT(), overlaps: !0, url: a, minZoom: c, maxZoom: d }) });
-};
-netgis.Map.prototype.createBufferFeature = function (a, b, c) {
-    a = this.createBufferGeometry(a, b, c);
-    return new ol.Feature({ geometry: a });
-};
-netgis.Map.prototype.createBufferGeometry = function (a, b, c) {
-    var d = new jsts.io.OL3Parser();
-    a = d.read(a).buffer(b, c);
-    if (this.boundsLayer)
-        for (b = this.boundsLayer.getSource().getFeatures(), c = 0; c < b.length; c++) {
-            var e = d.read(b[c].getGeometry());
-            a.intersects(e) && (a = a.intersection(e));
-        }
-    return d.write(a);
-};
-netgis.Map.prototype.splitMultiPolygons = function (a) {
-    a = a.getSource();
-    for (var b = a.getFeatures(), c = [], d = [], e = 0; e < b.length; e++) {
-        var f = b[e],
-            g = f.getGeometry();
-        if (g instanceof ol.geom.MultiPolygon) {
-            g = g.getPolygons();
-            for (var h = 0; h < g.length; h++) {
-                var k = new ol.Feature({ geometry: g[h] });
-                d.push(k);
-            }
-            c.push(f);
-        }
-    }
-    for (e = 0; e < c.length; e++) a.removeFeature(c[e]);
-    a.addFeatures(d);
-};
-netgis.Map.prototype.clearSketchFeatures = function () {
-    for (var a = this.editLayer.getSource(), b = 0; b < this.sketchFeatures.length; b++) a.removeFeature(this.sketchFeatures[b]);
-    this.sketchFeatures = [];
-};
-netgis.Map.prototype.updateDrawBufferPreview = function () {
-    if (!1 !== this.config.tools.editable) {
-        var a = this.interactions[this.mode][0].getOverlay().getSource().getFeatures();
-        if (!(1 > a.length)) {
-            var b = this.previewLayer.getSource().getFeatures()[0];
-            b && ((a = a[0].getGeometry()), (a = this.createBufferGeometry(a, this.drawBufferRadius, this.drawBufferSegments)), b.setGeometry(a));
-        }
-    }
-};
-netgis.Map.prototype.isPointInsideLayer = function (a, b) {
-    a = a.getSource().getFeatures();
-    for (var c = 0; c < a.length; c++) if (a[c].getGeometry().intersectsCoordinate(b)) return !0;
-    return !1;
-};
-netgis.Map.prototype.isGeomInsideLayer = function (a, b) {
-    var c = b.getCoordinates();
-    if (b instanceof ol.geom.LineString) {
-        if (2 > c.length) return !0;
-    } else if (b instanceof ol.geom.Polygon && ((c = c[0]), 4 > c.length || 0 >= b.getArea())) return !0;
-    c = new jsts.io.OL3Parser();
-    b = c.read(b);
-    a = a.getSource().getFeatures();
-    for (var d = 0; d < a.length; d++) {
-        var e = a[d].getGeometry();
-        if (c.read(e).contains(b)) return !0;
-    }
-    return !1;
-};
-netgis.Map.prototype.getScaleFromResolution = function (a) {
-    return Math.round(2834.6472 * a);
-};
-netgis.Map.prototype.getResolutionFromScale = function (a) {
-    var b = 39.3701 * ol.proj.Units.METERS_PER_UNIT[this.view.getProjection().getUnits()];
-    return 1 / (this.normalizeScale(a) * b * 72);
-};
-netgis.Map.prototype.normalizeScale = function (a) {
-    return 1 < a ? 1 / a : a;
-};
-netgis.Map.prototype.updateEditOutput = function () {
-    var a = this.editLayer.getSource().getFeatures(),
-        b = this.view.getProjection().getCode(),
-        c = new ol.format.GeoJSON().writeFeaturesObject(a, { dataProjection: b, featureProjection: b });
-    c.crs = { type: "name", properties: { name: "urn:ogc:def:crs:" + b.replace(":", "::") } };
-    for (var d = (b = 0); d < a.length; d++) {
-        var e = a[d].getGeometry();
-        e instanceof ol.geom.Polygon && (b += e.getArea());
-    }
-    c.area = b;
-    netgis.util.invoke(this.container, netgis.Events.MAP_EDIT_LAYER_CHANGE, { geojson: c });
-};
-netgis.Map.prototype.updateSnapFeatures = function () {
-    this.snapFeatures.clear();
-    var a = this;
-    this.map.getLayers().forEach(function (b, c, d) {
-        c = b.get("id");
-        c !== netgis.Client.Layers.PARCEL_DISTRICTS && c !== netgis.Client.Layers.PARCEL_FIELDS && c !== netgis.Client.Layers.PARCEL_FEATURES && b instanceof ol.layer.Vector && a.addSnapLayer(b);
-    });
-};
-netgis.Map.prototype.zoom = function (a) {
-    this.view.animate({ zoom: this.view.getZoom() + a, duration: 200 });
-};
-netgis.Map.prototype.zoomLevel = function (a) {
-    this.view.animate({ zoom: a, center: this.view.getCenter(), duration: 300 });
-};
-netgis.Map.prototype.zoomLonLat = function (a, b, c) {
-    this.view.animate({ zoom: c, center: ol.proj.fromLonLat([a, b], this.view.getProjection()), duration: 500 });
-};
-netgis.Map.prototype.zoomExtentLonLat = function (a, b, c, d) {
-    a = ol.proj.fromLonLat([a, b], this.view.getProjection());
-    c = ol.proj.fromLonLat([c, d], this.view.getProjection());
-    this.view.fit([a[0], a[1], c[0], c[1]]);
-};
-netgis.Map.prototype.zoomExtent = function (a, b, c, d) {
-    this.view.fit([a, b, c, d]);
-};
-netgis.Map.prototype.zoomBBox = function (a, b) {
-    this.view.fit(a, { duration: b });
-};
-netgis.Map.prototype.zoomScale = function (a) {
-    this.view.setResolution(this.getResolutionFromScale(a));
-};
-netgis.Map.prototype.zoomFeature = function (a, b) {
-    a = this.layers[a].getSource().getFeatureById(b);
-    this.view.fit(a.getGeometry().getExtent(), { duration: 500 });
-};
-netgis.Map.prototype.addViewHistory = function (a, b) {
-    if (0 < this.viewHistory.length) {
-        var c = this.viewHistory[this.viewHistory.length - 1],
-            d = !0;
-        10 < Math.abs(a[0] - c.center[0]) && (d = !1);
-        10 < Math.abs(a[1] - c.center[1]) && (d = !1);
-        0.1 < Math.abs(b - c.zoom) && (d = !1);
-        if (!0 === d) return;
-    }
-    this.viewHistory.push({ center: a, zoom: b });
-    this.viewHistory.length > this.viewHistoryMax && this.viewHistory.shift();
-    this.viewIndex = this.viewHistory.length - 1;
-};
-netgis.Map.prototype.gotoViewHistory = function (a) {
-    if (!(1 > this.viewHistory.length)) {
-        var b = this.viewHistory.length - 1;
-        0 > a && (a = b);
-        a > b && (a = 0);
-        a !== this.viewIndex && ((b = this.viewHistory[a]), (this.viewIndex = a), (this.viewFromHistory = !0), this.view.setCenter(b.center), this.view.setZoom(b.zoom));
-    }
-};
-netgis.Map.prototype.setPadding = function (a, b, c, d) {
-    this.view.padding = [a + 40, b + 40, c + 40, d + 40];
-};
-netgis.Map.prototype.exportImage = function (a, b, c, d, e) {
-    var f = this,
-        g = this.container,
-        h = this.map,
-        k = this.config["export"],
-        l = new Image();
-    l.onload = function () {
-        var m = document.createElement("div");
-        m.style.position = "fixed";
-        m.style.top = "0px";
-        m.style.left = "0px";
-        m.style.width = b + "px";
-        m.style.height = c + "px";
-        m.style.background = "white";
-        m.style.zIndex = -1;
-        m.style.opacity = 0;
-        m.style.pointerEvents = "none";
-        g.appendChild(m);
-        h.setTarget(m);
-        h.once("rendercomplete", function () {
-            var n = document.createElement("canvas");
-            n.width = b;
-            n.height = c;
-            var q = n.getContext("2d");
-            q.webkitImageSmoothingEnabled = !1;
-            q.mozImageSmoothingEnabled = !1;
-            q.imageSmoothingEnabled = !1;
-            Array.prototype.forEach.call(document.querySelectorAll(".ol-layer canvas"), function (a) {
-                if (0 < a.width) {
-                    var b = a.parentNode.style.opacity;
-                    q.globalAlpha = "" === b ? 1 : Number(b);
-                    b = a.style.transform
-                        .match(/^matrix\(([^\(]*)\)$/)[1]
-                        .split(",")
-                        .map(Number);
-                    CanvasRenderingContext2D.prototype.setTransform.apply(q, b);
-                    q.drawImage(a, 0, 0);
-                }
-            });
-            q.drawImage(l, 0, 0);
-            q.fillStyle = "#fff";
-            q.fillRect(0, n.height - 30, 140, 30);
-            q.fillStyle = "#000";
-            q.font = "4mm sans-serif";
-            q.fillText(netgis.util.getTimeStamp(), 10, n.height - 10);
-            var p = document.createElement("a");
-            switch (a) {
-                case "pdf":
-                    e = e ? e : 0;
-                    var r = 297 - e - e,
-                        v = 210 - e - e,
-                        t = n.width / n.height;
-                    if (!d) {
-                        var w = r;
-                        r = v;
-                        v = w;
-                    }
-                    if (n.height > n.width) {
-                        var u = v;
-                        w = u * t;
-                        w > r && ((w = r), (u = w / t));
-                    } else (w = r), (u = w / t), u > v && ((u = v), (w = u * t));
-                    t = new jsPDF(d ? "l" : "p");
-                    var x = e;
-                    x += (r - w) / 2;
-                    r = e;
-                    r += (v - u) / 2;
-                    t.addImage(n.toDataURL("image/png,1.0", 1), "PNG", x, r, w, u);
-                    t.setFillColor(255, 255, 255);
-                    t.rect(x, r + u - 11, 80, 11, "F");
-                    t.setFontSize(8);
-                    t.text("Datum: " + netgis.util.getTimeStamp(), x + 2, r + u - 2 - 4);
-                    t.text("Quelle: " + window.location.href, x + 2, r + u - 2);
-                    n = t.output("bloburl", { filename: k.default_filename + ".pdf" });
-                    window.open(n, "_blank");
-                    break;
-                case "jpeg":
-                    window.navigator.msSaveBlob
-                        ? window.navigator.msSaveBlob(n.msToBlob(), k.default_filename + ".jpg")
-                        : (p.setAttribute("download", k.default_filename + ".jpg"), p.setAttribute("href", n.toDataURL("image/jpeg", 1)), p.click());
-                    break;
-                case "png":
-                    window.navigator.msSaveBlob
-                        ? window.navigator.msSaveBlob(n.msToBlob(), k.default_filename + ".png")
-                        : (p.setAttribute("download", k.default_filename + ".png"), p.setAttribute("href", n.toDataURL("image/png", 1)), p.click());
-                    break;
-                case "gif":
-                    p.setAttribute("download", k.default_filename + ".gif"),
-                        (v = new GIF({ workerScript: k.gif_worker, quality: 1 })),
-                        v.addFrame(n),
-                        v.on("finished", function (a) {
-                            p.setAttribute("href", window.URL.createObjectURL(a));
-                            p.click();
-                        }),
-                        v.render();
-            }
-            h.setTarget(g);
-            g.removeChild(m);
-            netgis.util.invoke(f.container, netgis.Events.EXPORT_END, null);
-        });
-        h.renderSync();
-    };
-    l.src = k.logo;
-};
-netgis.Map.prototype.exportFeatures = function (a) {
-    var b = this.editLayer.getSource().getFeatures();
-    !0 === a && ((a = this.nonEditLayer.getSource().getFeatures()), (b = b.concat(a)));
-    b = new ol.format.GeoJSON().writeFeaturesObject(b, { featureProjection: this.view.getProjection(), dataProjection: "EPSG:4326" });
-    a = this.config["export"].default_filename + ".geojson";
-    b.name = a;
-    netgis.util.downloadJSON(b, a);
-    netgis.util.invoke(this.container, netgis.Events.EXPORT_END, null);
-};
-netgis.Map.prototype.onClientContextResponse = function (a) {
-    this.initConfig(a.detail.context.config);
-};
-netgis.Map.prototype.onEditLayerLoaded = function (a) {
-    a = a.detail.geojson;
-    var b = new ol.format.GeoJSON();
-    b.readProjection(a);
-    a = b.readFeatures(a, { featureProjection: this.view.getProjection().getCode() });
-    b = [];
-    for (var c = 0; c < a.length; c++) {
-        var d = a[c];
-        !0 === d.getProperties().editable && b.push(d);
-    }
-    for (c = 0; c < b.length; c++) a.splice(a.indexOf(b[c]), 1);
-    this.editEventsSilent = !0;
-    this.editLayer.getSource().addFeatures(b);
-    this.nonEditLayer.getSource().addFeatures(a);
-    this.editEventsSilent = !1;
-};
-netgis.Map.prototype.onClientSetMode = function (a) {
-    this.setMode(a.detail.mode);
-};
-netgis.Map.prototype.onPanelResize = function (a) {
-    this.setPadding(0, 0, 0, a.detail.width);
-    this.redrawVectorLayers();
-};
-netgis.Map.prototype.onPanelToggle = function (a) {
-    a = !1;
-    for (var b = 0, c = this.container.parentNode.getElementsByClassName("netgis-panel"), d = 0; d < c.length; d++)
-        if (c[d].classList.contains("netgis-show")) {
-            a = !0;
-            b = c[d].getBoundingClientRect().width;
-            break;
-        }
-    a ? this.setPadding(0, 0, 0, b) : this.setPadding(0, 0, 0, 0);
-    this.redrawVectorLayers();
-};
-netgis.Map.prototype.onMapZoom = function (a) {
-    this.zoom(a.detail.delta);
-};
-netgis.Map.prototype.onMapZoomHome = function (a) {
-    a = this.config;
-    if (a.map.bbox) this.zoomBBox(a.map.bbox, 500);
-    else if (a.map.center_lonlat) {
-        var b = a.map.center_lonlat;
-        this.zoomLonLat(b[0], b[1], a.map.zoom);
-    }
-};
-netgis.Map.prototype.onMapZoomLonLat = function (a) {
-    a = a.detail;
-    this.zoomLonLat(a.lon, a.lat, a.zoom);
-};
-netgis.Map.prototype.onMapZoomScale = function (a) {
-    this.zoomScale(a.detail.scale);
-};
-netgis.Map.prototype.onMapZoomLayer = function (a) {
-    a = a.detail;
-    var b = this.layers[a.id];
-    b ? this.view.fit(b.getSource().getExtent(), { duration: 600 }) : console.warning("trying to zoom non existing layer", a.id);
-};
-netgis.Map.prototype.onMapZoomLevel = function (a) {
-    this.view.setZoom(a.detail.z);
-};
-netgis.Map.prototype.onMapViewPrev = function (a) {
-    this.gotoViewHistory(this.viewIndex - 1);
-};
-netgis.Map.prototype.onMapViewNext = function (a) {
-    this.gotoViewHistory(this.viewIndex + 1);
-};
-netgis.Map.prototype.onMapLayerToggle = function (a) {
-    a = a.detail;
-    switch (a.id) {
-        case netgis.LayerID.EDITABLE:
-            a.on ? this.map.addLayer(this.editLayer) : this.map.removeLayer(this.editLayer);
-            break;
-        case netgis.LayerID.NON_EDITABLE:
-            a.on ? this.map.addLayer(this.nonEditLayer) : this.map.removeLayer(this.nonEditLayer);
-            break;
-        default:
-            if (a.on)
-                for (var b = this.config.layers, c = 0; c < b.length; c++) {
-                    var d = b[c];
-                    d.id === a.id && this.addLayer(a.id, d);
-                }
-            else this.removeLayer(a.id);
-    }
-};
-netgis.Map.prototype.onMapLayerTransparency = function (a) {
-    a = a.detail;
-    var b = this.layers[a.id];
-    b || (netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: a.id, on: !0 }), (b = this.layers[a.id]));
-    b.setOpacity(1 - a.transparency);
-};
-netgis.Map.prototype.onMapSnapToggle = function (a) {
-    this.setSnapping(a.detail.on);
-};
-netgis.Map.prototype.onMapMoveEnd = function (a) {
-    a = this.view.getCenter();
-    var b = this.view.getZoom(),
-        c = this.getScaleFromResolution(this.view.getResolution());
-    !1 === this.viewFromHistory && this.addViewHistory(a, b);
-    netgis.util.invoke(this.container, netgis.Events.MAP_VIEW_CHANGE, { center: a, zoom: b, scale: c });
-    this.viewFromHistory = !1;
-};
-netgis.Map.prototype.onPointerMove = function (a) {
-    var b = a.pixel;
-    a = a.coordinate;
-    var c = null,
-        d = null,
-        e = void 0,
-        f = this;
-    this.map.forEachFeatureAtPixel(b, function (a, b) {
-        if (b && b !== f.nonEditLayer)
-            if (b === f.boundsLayer) e = a;
-            else return (c = a), (d = b), !0;
-    });
-    switch (this.mode) {
-        case netgis.Modes.DRAW_POINTS:
-        case netgis.Modes.DRAW_LINES:
-            this.updateDrawBufferPreview();
-    }
-    !this.boundsLayer ||
-        (this.mode !== netgis.Modes.DRAW_POINTS && this.mode !== netgis.Modes.DRAW_LINES && this.mode !== netgis.Modes.DRAW_POLYGONS) ||
-        (e ? this.container.classList.remove("netgis-not-allowed") : this.container.classList.add("netgis-not-allowed"), (this.hoverBounds = e));
-    var g = !0;
-    this.mode === netgis.Modes.VIEW && (g = !1);
-    this.mode === netgis.Modes.DRAW_POINTS && (g = !1);
-    this.mode === netgis.Modes.DRAW_LINES && (g = !1);
-    this.mode === netgis.Modes.DRAW_POLYGONS && (g = !1);
-    this.mode === netgis.Modes.CUT_FEATURES_DRAW && (g = !1);
-    if (c !== this.hoverFeature && g) {
-        if (this.hoverFeature) this.onFeatureLeave(this.hoverFeature, this.hoverLayer, b, a);
-        if (c) this.onFeatureEnter(c, d, b, a);
-        this.redrawVectorLayers();
-        this.hoverFeature = c;
-        this.hoverLayer = d;
-    }
-    if (c) this.onFeatureHover(c, d, b, a);
-};
-netgis.Map.prototype.onPointerLeave = function (a) {
-    this.hoverFeature && (this.onFeatureLeave(this.hoverFeature, this.hoverLayer, [a.offsetX, a.offsetY], null), (this.hoverLayer = this.hoverFeature = null));
-};
-netgis.Map.prototype.onPointerClick = function (a) {
-    var b = a.pixel;
-    a = a.coordinate;
-    this.popupOverlay.setPosition(a);
-    var c = [],
-        d = this;
-    this.map.forEachFeatureAtPixel(b, function (a, b) {
-        b && b !== d.nonEditLayer && b !== d.boundsLayer && b !== d.measureLayer && b !== d.previewLayer && c.push({ feature: a, layer: b });
-    });
-    var e = !0;
-    this.mode === netgis.Modes.VIEW && (e = !1);
-    this.mode === netgis.Modes.DRAW_POINTS && (e = !1);
-    this.mode === netgis.Modes.DRAW_LINES && (e = !1);
-    this.mode === netgis.Modes.DRAW_POLYGONS && (e = !1);
-    this.mode === netgis.Modes.CUT_FEATURES_DRAW && (e = !1);
-    0 < c.length && !1 === this.selectMultiple && e && (this.selectedFeatures = []);
-    for (var f = 0; f < c.length; f++) {
-        var g = c[f];
-        e && this.selectedFeatures.push(g.feature);
-        this.onFeatureClick(g.feature, g.layer, b, a);
-    }
-    e = { resolution: this.view.getResolution(), projection: this.view.getProjection().getCode(), bbox: this.view.calculateExtent(this.map.getSize()), width: this.map.getSize()[0], height: this.map.getSize()[1] };
-    f = ol.proj.toLonLat(a, this.view.getProjection());
-    b = { mode: this.mode, pixel: b, coords: a, lon: f[0], lat: f[1], overlay: this.popupOverlay.getElement(), view: e };
-    netgis.util.invoke(this.container, netgis.Events.MAP_CLICK, b);
-    this.redrawVectorLayers();
-};
-netgis.Map.prototype.onRightClick = function (a) {
-    switch (this.mode) {
-        case netgis.Modes.MEASURE_LINE:
-            this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing();
-            break;
-        case netgis.Modes.MEASURE_AREA:
-            this.interactions[netgis.Modes.MEASURE_AREA][2].finishDrawing();
-    }
-    a.preventDefault();
-    return !1;
-};
-netgis.Map.prototype.onKeyDown = function (a) {
-    a = a.keyCode || a.which;
-    switch (this.mode) {
-        case netgis.Modes.MEASURE_LINE:
-            13 === a && this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing();
-            27 === a && this.interactions[netgis.Modes.MEASURE_LINE][2].abortDrawing();
-            break;
-        case netgis.Modes.MEASURE_AREA:
-            13 === a && this.interactions[netgis.Modes.MEASURE_AREA][2].finishDrawing();
-            27 === a && this.interactions[netgis.Modes.MEASURE_AREA][2].abortDrawing();
-            break;
-        case netgis.Modes.DRAW_LINES:
-            var b = this.interactions[netgis.Modes.DRAW_LINES][0];
-            13 === a && b.finishDrawing();
-            27 === a && b.abortDrawing();
-            8 === a && b.removeLastPoint();
-            46 === a && b.abortDrawing();
-            break;
-        case netgis.Modes.DRAW_POLYGONS:
-            (b = this.interactions[netgis.Modes.DRAW_POLYGONS][0]), 13 === a && b.finishDrawing(), 27 === a && b.abortDrawing(), 8 === a && b.removeLastPoint(), 46 === a && b.abortDrawing();
-    }
-    16 === a && (this.selectMultiple = !0);
-};
-netgis.Map.prototype.onKeyUp = function (a) {
-    a = a.keyCode || a.which;
-    switch (this.mode) {
-        case netgis.Modes.BUFFER_FEATURES:
-            this.selectMultiple && netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES_EDIT });
-            break;
-        case netgis.Modes.CUT_FEATURES:
-            this.selectMultiple && netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.CUT_FEATURES_DRAW });
-    }
-    16 === a && (this.selectMultiple = !1);
-};
-netgis.Map.prototype.onFeatureEnter = function (a, b, c, d) {
-    if (b) {
-        switch (this.mode) {
-            case netgis.Modes.DELETE_FEATURES:
-            case netgis.Modes.BUFFER_FEATURES:
-            case netgis.Modes.CUT_FEATURES:
-                this.container.classList.add("netgis-clickable");
-                a.setStyle(this.styleHover.bind(this));
-                break;
-            case netgis.Modes.SEARCH_PARCEL:
-                this.container.classList.add("netgis-clickable"), a.setStyle(this.styleHover.bind(this));
-        }
-        netgis.util.invoke(this.container, netgis.Events.MAP_FEATURE_ENTER, { pixel: c, coords: d, layer: b.get("id"), properties: a.getProperties() });
-    }
-};
-netgis.Map.prototype.onFeatureHover = function (a, b, c, d) {};
-netgis.Map.prototype.onFeatureClick = function (a, b, c, d) {
-    c = { pixel: c, coords: d, layer: this.hoverLayer ? this.hoverLayer.get("id") : null, id: this.hoverFeature ? this.hoverFeature.getId() : null, properties: this.hoverFeature ? this.hoverFeature.getProperties() : null };
-    netgis.util.invoke(this.container, netgis.Events.MAP_FEATURE_CLICK, c);
-    switch (this.mode) {
-        case netgis.Modes.DELETE_FEATURES:
-            b.getSource().removeFeature(a);
-            this.onFeatureLeave(a, b);
-            netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW });
-            break;
-        case netgis.Modes.BUFFER_FEATURES:
-            this.onFeatureLeave(a, b);
-            this.selectMultiple || netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.BUFFER_FEATURES_EDIT });
-            break;
-        case netgis.Modes.CUT_FEATURES:
-            if (a.getGeometry() instanceof ol.geom.Point) this.onFeatureLeave(a, b);
-            else this.selectMultiple || netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.CUT_FEATURES_DRAW });
-    }
-};
-netgis.Map.prototype.onFeatureLeave = function (a, b, c, d) {
-    netgis.util.invoke(this.container, netgis.Events.MAP_FEATURE_LEAVE, { pixel: c, coords: d, layer: b ? b.get("id") : null, properties: a.getProperties() });
-    switch (this.mode) {
-        case netgis.Modes.DELETE_FEATURES:
-        case netgis.Modes.BUFFER_FEATURES:
-        case netgis.Modes.CUT_FEATURES:
-        case netgis.Modes.CUT_FEATURES_DRAW:
-            this.container.classList.remove("netgis-clickable");
-            a.setStyle(null);
-            break;
-        case netgis.Modes.SEARCH_PARCEL:
-            this.container.classList.remove("netgis-clickable"), a.setStyle(null);
-    }
-};
-netgis.Map.prototype.onEditLayerAdd = function (a) {
-    this.editEventsSilent || this.updateEditOutput();
-    this.snapFeatures.push(a.feature);
-};
-netgis.Map.prototype.onEditLayerRemove = function (a) {
-    this.editEventsSilent || this.updateEditOutput();
-    this.snapFeatures.remove(a.feature);
-};
-netgis.Map.prototype.onEditLayerChange = function (a) {
-    this.editEventsSilent || this.updateEditOutput();
-};
-netgis.Map.prototype.onCopyFeatureToEdit = function (a) {
-    a = a.detail;
-    var b = this.layers[a.source].getSource().getFeatureById(a.id);
-    b ? this.editLayer.getSource().getFeatureById(a.id) || (b.setStyle(void 0), (this.selectedFeatures = []), this.editLayer.getSource().addFeature(b)) : console.error("feature to copy not found", a);
-};
-netgis.Map.prototype.onMeasureLineBegin = function (a) {
-    this.measureLayer.getSource().clear();
-};
-netgis.Map.prototype.onMeasureAreaBegin = function (a) {
-    this.measureLayer.getSource().clear();
-};
-netgis.Map.prototype.onMeasureClear = function (a) {
-    this.measureLayer.getSource().clear();
-};
-netgis.Map.prototype.onDrawBufferEnd = function (a) {
-    var b = a.feature;
-    a = this.previewLayer.getSource().getFeatures();
-    if (0 !== a.length) {
-        a = a[0];
-        if (this.boundsLayer) {
-            var c = !0;
-            c = b.getGeometry() instanceof ol.geom.Point ? this.isPointInsideLayer(this.boundsLayer, b.getGeometry().getCoordinates()) : this.isGeomInsideLayer(this.boundsLayer, b.getGeometry());
-            if (!c) return;
-            c = new jsts.io.OL3Parser();
-            for (var d = c.read(a.getGeometry()), e = this.boundsLayer.getSource().getFeatures(), f = 0; f < e.length; f++) {
-                var g = c.read(e[f].getGeometry());
-                d.intersects(g) && (d = d.intersection(g));
-            }
-            c = c.write(d);
-            a.setGeometry(c);
-        }
-        var h = this.editLayer.getSource();
-        h.addFeature(a.clone());
-        window.setTimeout(function () {
-            h.removeFeature(b);
-        }, 10);
-    }
-};
-netgis.Map.prototype.onDrawBufferToggle = function (a) {
-    a = a.detail;
-    this.setDrawBuffer(a.on, a.radius, a.segments);
-};
-netgis.Map.prototype.onDrawBufferChange = function (a) {
-    a = a.detail;
-    this.drawBufferRadius = a.radius;
-    this.drawBufferSegments = a.segments;
-    this.updateDrawBufferPreview();
-};
-netgis.Map.prototype.onBufferChange = function (a) {
-    a = a.detail;
-    var b = this.selectedFeatures,
-        c = this.editLayer.getSource();
-    this.clearSketchFeatures();
-    for (var d = 0; d < b.length; d++) {
-        var e = this.createBufferFeature(this.selectedFeatures[d].getGeometry(), a.radius, a.segments);
-        c.addFeature(e);
-        this.sketchFeatures.push(e);
-    }
-};
-netgis.Map.prototype.onBufferAccept = function (a) {
-    a = this.selectedFeatures;
-    for (var b = this.editLayer.getSource(), c = 0; c < a.length; c++) b.removeFeature(a[c]);
-    this.sketchFeatures = [];
-    this.selectedFeatures = [];
-};
-netgis.Map.prototype.onCutFeaturesDrawEnd = function (a) {
-    a = a.feature;
-    for (var b = 0; b < this.selectedFeatures.length; b++) {
-        var c = this.selectedFeatures[b];
-        if (c)
-            if ((this.onFeatureLeave(c, null), c.getGeometry() instanceof ol.geom.Point)) console.error("trying to cut a point feature", c);
-            else {
-                var d = new jsts.io.OL3Parser(),
-                    e = d.read(c.getGeometry()),
-                    f = d.read(a.getGeometry());
-                e = e.difference(f);
-                d = d.write(e);
-                d = new ol.Feature({ geometry: d });
-                e = this.editLayer.getSource();
-                e.removeFeature(c);
-                e.addFeature(d);
-            }
-    }
-    this.selectedFeatures = [];
-    this.editEventsSilent = !0;
-    this.splitMultiPolygons(this.editLayer);
-    this.editEventsSilent = !1;
-    this.updateEditOutput();
-    netgis.util.invoke(this.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW });
-};
-netgis.Map.prototype.onImportLayerAccept = function (a) {
-    a = a.detail;
-    a = this.addLayer(a.id, a);
-    0 !== a.getSource().getFeatures().length && this.view.fit(a.getSource().getExtent(), { duration: 600 });
-};
-netgis.Map.prototype.onImportGeoportalSubmit = function (a) {};
-netgis.Map.prototype.onImportLayerPreview = function (a) {
-    a = a.detail;
-    var b = this.createLayer(a),
-        c = this.view.getProjection().getCode();
-    netgis.util.invoke(this.container, netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES, { id: a.id, title: a.title, layer: b, proj: c });
-};
-netgis.Map.prototype.onSearchParcelReset = function (a) {
-    (a = this.config.searchparcel.districts_service.min_zoom) && this.view.setZoom(a);
-};
-netgis.Map.prototype.onSearchParcelItemEnter = function (a) {
-    a = a.detail.id;
-    this.layers.searchparcel_parcels.getSource().getFeatureById(a).setStyle(this.styleHover.bind(this));
-};
-netgis.Map.prototype.onSearchParcelItemLeave = function (a) {
-    a = a.detail.id;
-    this.layers.searchparcel_parcels.getSource().getFeatureById(a).setStyle(null);
-};
-netgis.Map.prototype.onSearchParcelItemClick = function (a) {
-    a = a.detail.id;
-    console.info("PARCEL CLICK:", a);
-    this.zoomFeature("searchparcel_parcels", a);
-};
-netgis.Map.prototype.onSearchParcelItemImport = function (a) {};
-netgis.Map.prototype.onDrawPointsUpdateGeom = function (a, b, c) {
-    b ? b.setCoordinates(a) : (b = new ol.geom.Point(a));
-    return b;
-};
-netgis.Map.prototype.onDrawLinesUpdateGeom = function (a, b, c) {
-    b ? b.setCoordinates(a) : (b = new ol.geom.LineString(a));
-    this.drawError = !this.isGeomInsideLayer(this.boundsLayer, b);
-    return b;
-};
-netgis.Map.prototype.onDrawPolygonsUpdateGeom = function (a, b, c) {
-    b ? ((a = [a[0].concat([a[0][0]])]), b.setCoordinates(a)) : (b = new ol.geom.Polygon(a));
-    c = !0;
-    if (4 > a[0].length)
-        for (var d = 0; d < a[0].length; d++) {
-            if (!this.isPointInsideLayer(this.boundsLayer, a[0][d])) {
-                c = !1;
-                break;
-            }
-        }
-    else c = this.isGeomInsideLayer(this.boundsLayer, b);
-    this.drawError = !c;
-    return b;
-};
-netgis.Map.prototype.onDrawPointsEnd = function (a) {
-    if (this.boundsLayer) {
-        var b = a.feature,
-            c = this.editLayer;
-        this.isPointInsideLayer(this.boundsLayer, b.getGeometry().getCoordinates()) ||
-            window.setTimeout(function () {
-                c.getSource().removeFeature(b);
-            }, 10);
-    }
-};
-netgis.Map.prototype.onDrawLinesEnd = function (a) {
-    if (this.boundsLayer) {
-        var b = a.feature,
-            c = this.editLayer;
-        this.isGeomInsideLayer(this.boundsLayer, b.getGeometry()) ||
-            window.setTimeout(function () {
-                c.getSource().removeFeature(b);
-            }, 10);
-    }
-};
-netgis.Map.prototype.onDrawPolygonsEnd = function (a) {
-    if (this.boundsLayer) {
-        var b = a.feature,
-            c = this.editLayer;
-        this.isGeomInsideLayer(this.boundsLayer, b.getGeometry()) ||
-            window.setTimeout(function () {
-                c.getSource().removeFeature(b);
-            }, 10);
-    }
-};
-netgis.Map.prototype.onExportBegin = function (a) {
-    a = a.detail;
-    switch (a.format) {
-        case "geojson":
-            this.exportFeatures(a.nonEdits);
-            break;
-        default:
-            this.exportImage(a.format, a.width, a.height, a.landscape, a.padding);
-    }
-};
-netgis.Map.prototype.onTimeSliderShow = function (a) {};
-netgis.Map.prototype.onTimeSliderHide = function (a) {};
-netgis.Map.prototype.onTimeSliderSelect = function (a) {
-    a = a.detail;
-    console.info("Time Slider Select:", a);
-    this.layers[a.layer].getSource().updateParams({ TIME: a.time });
-};
-netgis = netgis || {};
-netgis.Menu = function (a) {
-    this.config = a;
-    this.initElements();
-    this.initConfig(a);
-};
-netgis.Menu.prototype.initElements = function () {
-    this.container = document.createElement("nav");
-    this.container.className = "netgis-menu netgis-noselect netgis-color-a netgis-shadow-large";
-    this.toggle = document.createElement("button");
-    this.toggle.setAttribute("type", "button");
-    this.toggle.addEventListener("click", this.onToggleClick.bind(this));
-    this.toggle.className = "netgis-menu-toggle";
-    this.toggle.innerHTML = "<i class='fas fa-bars'></i>";
-    this.container.appendChild(this.toggle);
-};
-netgis.Menu.prototype.initConfig = function (a) {
-    !0 === a.menu.compact && this.container.classList.add("netgis-compact");
-    this.addHeader(a.menu.header);
-    for (var b = a.menu.items, c = 0; c < b.length; c++) {
-        var d = b[c];
-        if (d.items) this.addDropdown(d.title, d.items);
-        else if (d.url && 0 < d.url.length) this.addLink(d.url, d.title);
-        else if (d.options) {
-            var e;
-            if ("scales" === d.options) {
-                var f = { 0: "1:X" };
-                for (e = 0; e < a.map.scales.length; e++) f[a.map.scales[e]] = "1:" + a.map.scales[e];
-                e = a.map.default_scale;
-                this.addSelect(d.id, d.title, f, e).options[0].classList.add("netgis-hide");
-            } else {
-                f = d.options;
-                if (d.value) e = d.value;
-                else
-                    for (var g in f) {
-                        e = g;
-                        break;
-                    }
-                this.addSelect(d.id, d.title, f, e);
-            }
-        } else this.addButton(d.id, d.title);
-    }
-};
-netgis.Menu.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-    a.addEventListener(netgis.Events.MAP_VIEW_CHANGE, this.onMapViewChange.bind(this));
-};
-netgis.Menu.prototype.addHeader = function (a) {
-    var b = document.createElement("h1");
-    b.className = "netgis-hover-c";
-    b.innerHTML = a;
-    this.container.appendChild(b);
-    return b;
-};
-netgis.Menu.prototype.addButton = function (a, b) {
-    a = this.createButton(a, b);
-    this.container.appendChild(a);
-    return a;
-};
-netgis.Menu.prototype.addLink = function (a, b) {
-    a = this.createLink(a, b);
-    this.container.appendChild(a);
-    return a;
-};
-netgis.Menu.prototype.addSelect = function (a, b, c, d) {
-    var e = document.createElement("span");
-    e.className = "netgis-wrapper";
-    var f = document.createElement("select");
-    f.setAttribute("data-id", a);
-    for (var g in c) {
-        a = c[g];
-        var h = document.createElement("option");
-        h.setAttribute("value", g);
-        h.innerHTML = a;
-        f.appendChild(h);
-    }
-    f.value = d;
-    f.addEventListener("change", this.onSelectChange.bind(this));
-    e.appendChild(f);
-    b && ((c = document.createElement("span")), (c.className = "netgis-icon"), (c.innerHTML = b), e.appendChild(c));
-    this.container.appendChild(e);
-    return f;
-};
-netgis.Menu.prototype.addDropdown = function (a, b) {
-    var c = document.createElement("div");
-    c.className = "netgis-dropdown";
-    var d = document.createElement("button");
-    d.setAttribute("type", "button");
-    d.innerHTML = a;
-    c.appendChild(d);
-    a = document.createElement("ul");
-    a.className = "netgis-color-e netgis-shadow";
-    c.appendChild(a);
-    for (d = 0; d < b.length; d++) a.appendChild(this.createMenuItem(b[d]));
-    this.container.appendChild(c);
-    return c;
-};
-netgis.Menu.prototype.createMenuItem = function (a) {
-    var b = document.createElement("li");
-    b.className = "netgis-hover-c";
-    if (a.items) (a = this.createMenu(a.title, a.items)), b.appendChild(a.button), b.appendChild(a.list);
-    else if (a.type)
-        switch (a.type) {
-            case "checkbox":
-                a = this.createCheckbox(a.id, a.title, a.value);
-                b.appendChild(a);
-                break;
-            default:
-                console.error("unhandled menu item type", a.type, "for", a.id);
-        }
-    else a.url ? ((a = this.createLink(a.url, a.title)), b.appendChild(a)) : ((a = this.createButton(a.id, a.title)), b.appendChild(a));
-    return b;
-};
-netgis.Menu.prototype.createMenu = function (a, b) {
-    var c = document.createElement("button");
-    c.setAttribute("type", "button");
-    c.addEventListener("pointerdown", this.onButtonClick.bind(this));
-    c.innerHTML = a;
-    a = document.createElement("ul");
-    a.className = "netgis-color-e netgis-shadow";
-    for (var d = 0; d < b.length; d++) a.appendChild(this.createMenuItem(b[d]));
-    return { button: c, list: a };
-};
-netgis.Menu.prototype.createLink = function (a, b) {
-    var c = document.createElement("a");
-    c.setAttribute("href", a);
-    c.setAttribute("target", "_blank");
-    c.classList = "netgis-button";
-    c.innerHTML = b;
-    return c;
-};
-netgis.Menu.prototype.createButton = function (a, b) {
-    var c = document.createElement("button");
-    c.className = "netgis-text-e netgis-hover-c";
-    c.setAttribute("type", "button");
-    c.setAttribute("data-id", a);
-    c.addEventListener("pointerdown", this.onButtonClick.bind(this));
-    c.innerHTML = b;
-    return c;
-};
-netgis.Menu.prototype.createCheckbox = function (a, b, c) {
-    var d = document.createElement("label");
-    d.className = "netgis-button";
-    var e = document.createElement("input");
-    e.setAttribute("type", "checkbox");
-    e.setAttribute("data-id", a);
-    e.addEventListener("change", this.onCheckboxChange.bind(this));
-    e.checked = c;
-    d.appendChild(e);
-    a = document.createElement("span");
-    a.innerHTML = b;
-    d.appendChild(a);
-    return d;
-};
-netgis.Menu.prototype.onToggleClick = function (a) {
-    this.container.classList.toggle("netgis-menu-large");
-};
-netgis.Menu.prototype.onButtonClick = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id");
-    netgis.util.invoke(a, netgis.Events.MENU_BUTTON_CLICK, { id: b });
-    netgis.Client.handleCommand(a, b);
-};
-netgis.Menu.prototype.onCheckboxChange = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id"),
-        c = a.checked;
-    netgis.util.invoke(a, netgis.Events.MENU_CHECKBOX_CHANGE, { id: b, checked: c });
-    switch (b) {
-        case netgis.Menu.ItemID.SNAP_TOGGLE:
-            netgis.util.invoke(a, netgis.Events.MAP_SNAP_TOGGLE, { on: c });
-            break;
-        default:
-            console.error("unhandled menu item id", b);
-    }
-};
-netgis.Menu.prototype.onSelectChange = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id"),
-        c = a.value;
-    netgis.util.invoke(a, netgis.Events.MENU_SELECT_CHANGE, { id: b, value: c });
-    switch (b) {
-        case "scales":
-            netgis.util.invoke(a, netgis.Events.MAP_ZOOM_SCALE, { scale: Number.parseInt(c) });
-    }
-};
-netgis.Menu.prototype.onMapViewChange = function (a) {
-    a = a.detail;
-    for (var b = this.container.getElementsByTagName("select"), c = 0; c < b.length; c++) {
-        var d = b[c];
-        if ("scales" === !d.getAttribute("data-id")) break;
-        for (var e = !1, f = this.config.map.scales, g = 0; g < f.length; g++)
-            if (f[g] === a.scale) {
-                e = !0;
-                break;
-            }
-        e ? d.options[0].classList.add("netgis-hide") : (d.options[0].setAttribute("value", a.scale), (d.options[0].innerHTML = "1:" + a.scale), d.options[0].classList.remove("netgis-hide"));
-        d.value = a.scale;
-    }
-};
-netgis = netgis || {};
-netgis.Modal = function (a) {
-    this.initElements(a);
-    this.initEvents();
-};
-netgis.Modal.prototype.initElements = function (a) {
-    this.container = document.createElement("div");
-    this.container.className = "netgis-modal";
-    this.container.addEventListener("click", this.onContainerClick.bind(this));
-    this.content = document.createElement("div");
-    this.content.className = "netgis-color-e netgis-shadow";
-    this.container.appendChild(this.content);
-    this.header = this.addHeader(this.content, a, this.onHeaderClick.bind(this));
-};
-netgis.Modal.prototype.initEvents = function () {};
-netgis.Modal.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-};
-netgis.Modal.prototype.show = function () {
-    this.container.classList.add("netgis-show");
-};
-netgis.Modal.prototype.hide = function () {
-    this.container.classList.remove("netgis-show");
-};
-netgis.Modal.prototype.addHeader = function (a, b, c) {
-    var d = document.createElement("button");
-    d.className = "netgis-button netgis-clip-text netgis-color-c";
-    d.innerHTML = "<span>" + b + "</span><i class='netgis-icon fas fa-times'></i>";
-    d.setAttribute("type", "button");
-    c && (d.onclick = c);
-    a && a.appendChild(d);
-    return d;
-};
-netgis.Modal.prototype.onHeaderClick = function (a) {
-    this.hide();
-};
-netgis.Modal.prototype.onContainerClick = function (a) {
-    a.target === this.container && this.hide();
-};
-netgis = netgis || {};
-netgis.Modes = Object.freeze({
-    VIEW: "view",
-    ZOOM_BOX: "zoom-box",
-    MEASURE_LINE: "measure-line",
-    MEASURE_AREA: "measure-area",
-    DRAW_POINTS: "draw-points",
-    DRAW_LINES: "draw-lines",
-    DRAW_POLYGONS: "draw-polygons",
-    MODIFY_FEATURES: "modify-features",
-    DELETE_FEATURES: "delete-features",
-    BUFFER_FEATURES: "buffer-features",
-    BUFFER_FEATURES_EDIT: "buffer-features-edit",
-    CUT_FEATURES: "cut-features",
-    CUT_FEATURES_DRAW: "cut-features-draw",
-    SEARCH_PARCEL: "search-parcel",
-});
-netgis = netgis || {};
-netgis.OWS = (function () {
-    return {
-        read: function (a, b) {
-            b = { layers: [], folders: [] };
-            netgis.util.isDefined(a.properties) && (b.bbox = a.properties.bbox);
-            a = a.features;
-            for (var c = 0; c < a.length; c++) {
-                var d = a[c];
-                if ("Feature" === d.type) {
-                    var e = d.properties;
-                    e = e.folder;
-                    var f = !1;
-                    for (d = 0; d < b.folders.length; d++)
-                        if (b.folders[d].id === e) {
-                            f = !0;
-                            break;
-                        }
-                    if (!f) {
-                        d = e.split("/");
-                        e = [];
-                        for (f = 0; f < d.length; f++) {
-                            var g = d[f];
-                            0 < g.length && e.push(g);
-                        }
-                        var h = -1;
-                        for (f = 0; f < e.length; f++) {
-                            g = e[f];
-                            var k = "/" + e.slice(0, f + 1).join("/"),
-                                l = !1;
-                            for (d = 0; d < b.folders.length; d++)
-                                if (b.folders[d].path === k) {
-                                    h = d;
-                                    l = !0;
-                                    break;
-                                }
-                            l || ((d = b.folders.length), b.folders.push({ title: g, parent: h, path: k }), (h = d));
-                        }
-                    }
-                }
-            }
-            for (c = 0; c < a.length; c++)
-                if (((d = a[c]), "Feature" === d.type)) {
-                    e = d.properties;
-                    f = -1;
-                    for (d = 0; d < b.folders.length; d++)
-                        if (b.folders[d].path === e.folder) {
-                            f = d;
-                            break;
-                        }
-                    d = e.offerings;
-                    for (g = 0; g < d.length; g++)
-                        switch (((h = d[g]), (k = h.operations), h.code)) {
-                            case "http://www.opengis.net/spec/owc-geojson/1.0/req/wms":
-                                b.layers.push({ folder: f, type: netgis.LayerTypes.WMS, url: k[0].href, title: e.title, attribution: e.rights, active: e.active });
-                                break;
-                            case "http://www.opengis.net/spec/owc-geojson/1.0/req/xyz":
-                                h = k[0];
-                                b.layers.push({ folder: f, type: netgis.LayerTypes.XYZ, url: h.href, title: e.title, attribution: e.rights, active: e.active });
-                                break;
-                            case "http://www.opengis.net/spec/owc-geojson/1.0/req/osm":
-                                (h = k[0]), b.layers.push({ folder: f, type: netgis.LayerTypes.XYZ, url: h.href, title: e.title, attribution: e.rights, active: e.active });
-                        }
-                }
-            return b;
-        },
-    };
-})();
-netgis = netgis || {};
-netgis.Panel = function (a) {
-    this.initElements(a);
-    this.initEvents();
-};
-netgis.Panel.prototype.initElements = function (a) {
-    var b = document.createElement("section");
-    b.className = "netgis-panel netgis-resize-right netgis-color-e netgis-shadow";
-    this.content = document.createElement("div");
-    b.appendChild(this.content);
-    this.header = this.addHeader(b, a, this.onHeaderClick.bind(this));
-    this.container = b;
-};
-netgis.Panel.prototype.initEvents = function () {
-    this.resizeObserver = new ResizeObserver(this.onResize.bind(this)).observe(this.container);
-};
-netgis.Panel.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-};
-netgis.Panel.prototype.addHeader = function (a, b, c) {
-    var d = document.createElement("button");
-    d.className = "netgis-button netgis-clip-text netgis-color-c netgis-shadow";
-    d.innerHTML = "<span>" + b + "</span><i class='netgis-icon fas fa-times'></i>";
-    d.setAttribute("type", "button");
-    c && (d.onpointerdown = c);
-    a && a.appendChild(d);
-    return d;
-};
-netgis.Panel.prototype.show = function () {
-    this.container.classList.contains("netgis-show") || (this.container.classList.add("netgis-show"), netgis.util.invoke(this.container, netgis.Events.PANEL_TOGGLE, { visible: !0, width: this.container.getBoundingClientRect().width }));
-};
-netgis.Panel.prototype.hide = function () {
-    this.container.classList.contains("netgis-show") && (this.container.classList.remove("netgis-show"), netgis.util.invoke(this.container, netgis.Events.PANEL_TOGGLE, { visible: !1 }));
-};
-netgis.Panel.prototype.toggle = function () {
-    this.container.classList.toggle("netgis-show");
-    var a = this.container.classList.contains("netgis-show");
-    netgis.util.invoke(this.container, netgis.Events.PANEL_TOGGLE, { visible: a, width: a ? this.container.getBoundingClientRect().width : void 0 });
-};
-netgis.Panel.prototype.visible = function () {
-    return this.container.classList.contains("netgis-show");
-};
-netgis.Panel.prototype.width = function () {
-    return this.container.getBoundingClientRect().width;
-};
-netgis.Panel.prototype.setTitle = function (a) {
-    this.header.getElementsByTagName("span")[0].innerHTML = a;
-};
-netgis.Panel.prototype.onHeaderClick = function (a) {
-    this.hide();
-};
-netgis.Panel.prototype.onResize = function (a) {
-    this.container.classList.contains("netgis-show") && ((a = this.container.getBoundingClientRect()), netgis.util.invoke(this.container, netgis.Events.PANEL_RESIZE, { width: a.width }));
-};
-netgis = netgis || {};
-netgis.Popup = function () {
-    this.initElements();
-};
-netgis.Popup.prototype.initElements = function () {
-    document.body.addEventListener("pointerdown", this.onDocumentPointerDown.bind(this));
-    this.container = document.createElement("div");
-    this.container.className = "netgis-popup";
-    this.container.addEventListener("pointerdown", this.onPointerDown.bind(this));
-    this.content = document.createElement("div");
-    this.content.className = "netgis-content netgis-color-e netgis-round";
-    this.container.appendChild(this.content);
-    this.arrow = document.createElement("div");
-    this.arrow.className = "netgis-arrow-down";
-    this.container.appendChild(this.arrow);
-    this.closer = document.createElement("button");
-    this.closer.setAttribute("type", "button");
-    this.closer.className = "netgis-closer netgis-color-e netgis-text-a";
-    this.closer.innerHTML = "<span></span><i class='fas fa-times'></i>";
-    this.closer.onclick = this.onCloserClick.bind(this);
-    this.content.appendChild(this.closer);
-    this.loader = document.createElement("div");
-    this.loader.className = "netgis-loader netgis-text-a";
-    this.loader.innerHTML = "<i class='netgis-icon netgis-anim-spin fas fa-sync-alt'></i>";
-    this.wrapper = document.createElement("div");
-    this.wrapper.className = "netgis-wrapper";
-    this.content.appendChild(this.wrapper);
-};
-netgis.Popup.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-};
-netgis.Popup.prototype.show = function () {
-    this.container.classList.add("netgis-show");
-};
-netgis.Popup.prototype.hide = function () {
-    this.container.classList.remove("netgis-show");
-};
-netgis.Popup.prototype.showLoader = function () {
-    this.content.appendChild(this.loader);
-};
-netgis.Popup.prototype.hideLoader = function () {
-    this.loader.parentNode === this.content && this.content.removeChild(this.loader);
-};
-netgis.Popup.prototype.setPosition = function (a, b) {
-    var c = this.container.parentNode.getBoundingClientRect(),
-        d = this.arrow.getBoundingClientRect();
-    a > c.width - d.width && (a = c.width - d.width);
-    a < d.width && (a = d.width);
-    this.container.style.left = a + "px";
-    this.container.style.top = b + "px";
-    this.content.style.left = "";
-    a = this.content.getBoundingClientRect();
-    0 > a.x ? (this.content.style.left = -a.x + "px") : a.x + a.width > c.width && (this.content.style.left = -(a.x + a.width - c.width) + "px");
-};
-netgis.Popup.prototype.setHeader = function (a) {
-    this.closer.getElementsByTagName("span")[0].innerHTML = a;
-};
-netgis.Popup.prototype.setContent = function (a) {
-    this.wrapper.innerHTML = a;
-};
-netgis.Popup.prototype.clearContent = function () {
-    this.wrapper.innerHTML = "";
-};
-netgis.Popup.prototype.addContent = function (a) {
-    this.wrapper.innerHTML += a;
-};
-netgis.Popup.prototype.onDocumentPointerDown = function (a) {};
-netgis.Popup.prototype.onPointerDown = function (a) {
-    a.stopPropagation();
-};
-netgis.Popup.prototype.onCloserClick = function (a) {
-    this.hide();
-};
-netgis = netgis || {};
-netgis.Search = function (a) {
-    this.debounce = 400;
-    this.initElements(a);
-    this.initEvents();
-};
-netgis.Search.prototype.initElements = function (a) {
-    var b = document.createElement("div");
-    b.className = "netgis-search";
-    this.container = b;
-    var c = document.createElement("label");
-    b.appendChild(c);
-    this.label = c;
-    var d = document.createElement("input");
-    d.className = "netgis-round netgis-shadow";
-    d.setAttribute("type", "text");
-    d.setAttribute("placeholder", a);
-    c.appendChild(d);
-    this.input = d;
-    a = document.createElement("button");
-    a.setAttribute("type", "button");
-    a.innerHTML = "<i class='fas fa-search'></i>";
-    c.appendChild(a);
-    this.button = a;
-    a = document.createElement("button");
-    a.setAttribute("type", "button");
-    a.className = "netgis-hide";
-    a.innerHTML = "<i class='fas fa-times'></i>";
-    c.appendChild(a);
-    this.closer = a;
-    c = document.createElement("ul");
-    b.appendChild(c);
-    this.results = c;
-};
-netgis.Search.prototype.initEvents = function () {
-    this.input.addEventListener("change", this.onInputChange.bind(this));
-    this.input.addEventListener("keydown", this.onInputKeyDown.bind(this));
-    this.input.addEventListener("keyup", this.onInputKeyUp.bind(this));
-    this.button.addEventListener("click", this.onButtonClick.bind(this));
-    this.closer.addEventListener("click", this.onCloserClick.bind(this));
-};
-netgis.Search.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-};
-netgis.Search.prototype.show = function () {
-    this.container.classList.remove("netgis-hide");
-};
-netgis.Search.prototype.hide = function () {
-    this.container.classList.add("netgis-hide");
-};
-netgis.Search.prototype.toggle = function () {
-    this.container.classList.toggle("netgis-hide");
-};
-netgis.Search.prototype.isVisible = function () {
-    return !this.container.classList.contains("netgis-hide");
-};
-netgis.Search.prototype.minimize = function () {
-    this.container.classList.remove("netgis-color-e", "netgis-shadow");
-    this.input.classList.add("netgis-shadow");
-};
-netgis.Search.prototype.maximize = function () {
-    this.container.classList.add("netgis-color-e", "netgis-shadow");
-    this.input.classList.remove("netgis-shadow");
-};
-netgis.Search.prototype.setTitle = function (a) {
-    this.input.setAttribute("placeholder", a);
-};
-netgis.Search.prototype.addResult = function (a, b) {
-    var c = document.createElement("li"),
-        d = document.createElement("button");
-    d.className = "netgis-button netgis-clip-text netgis-color-e netgis-hover-a";
-    d.innerHTML = a;
-    d.setAttribute("type", "button");
-    d.setAttribute("title", d.innerText);
-    d.setAttribute("data-result", b);
-    d.addEventListener("click", this.onResultClick.bind(this));
-    c.appendChild(d);
-    0 === this.results.childNodes.length && (this.button.classList.add("netgis-hide"), this.closer.classList.remove("netgis-hide"));
-    this.results.appendChild(c);
-    this.maximize();
-    return c;
-};
-netgis.Search.prototype.clearResults = function () {
-    this.results.innerHTML = "";
-    this.minimize();
-    netgis.util.invoke(this.container, netgis.Events.SEARCH_CLEAR, null);
-};
-netgis.Search.prototype.clearAll = function () {
-    this.clearResults();
-    this.lastQuery = null;
-    this.input.value = "";
-    this.button.classList.remove("netgis-hide");
-    this.closer.classList.add("netgis-hide");
-};
-netgis.Search.prototype.requestSearch = function (a) {
-    (this.lastQuery && this.lastQuery === a) || ((this.lastQuery = a), netgis.util.invoke(this.container, netgis.Events.SEARCH_CHANGE, { query: a }));
-};
-netgis.Search.prototype.onInputKeyDown = function (a) {
-    if (13 === a.keyCode) return a.preventDefault(), !1;
-};
-netgis.Search.prototype.onInputKeyUp = function (a) {
-    switch (a.keyCode) {
-        case 13:
-            a = this.results.getElementsByTagName("button");
-            0 < a.length && a[0].click();
-            break;
-        case 27:
-            this.clearAll();
-            break;
-        default:
-            this.onInputChange();
-    }
-};
-netgis.Search.prototype.onInputChange = function (a) {
-    this.timeout && window.clearTimeout(this.timeout);
-    this.timeout = window.setTimeout(this.onInputTimeout.bind(this), this.debounce);
-};
-netgis.Search.prototype.onInputTimeout = function () {
-    var a = this.input.value;
-    a = a.trim();
-    0 < a.length ? this.requestSearch(a) : this.clearAll();
-};
-netgis.Search.prototype.onButtonClick = function (a) {
-    this.input.focus();
-};
-netgis.Search.prototype.onCloserClick = function (a) {
-    this.clearAll();
-    this.input.focus();
-};
-netgis.Search.prototype.onResultClick = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-result");
-    netgis.util.invoke(a, netgis.Events.SEARCH_SELECT, { item: a, data: b });
-};
-netgis = netgis || {};
-netgis.SearchParcel = function (a) {
-    this.config = a;
-    this.districtsLayerID = "searchparcel_districts";
-    this.fieldsLayerID = "searchparcel_fields";
-    this.parcelsLayerID = "searchparcel_parcels";
-    this.parcelsAdded = [];
-    this.initElements();
-    this.initEvents();
-    this.initConfig(a);
-};
-netgis.SearchParcel.prototype.initElements = function () {
-    this.panel = new netgis.Panel("Flurst\u00fccks-Suche");
-    this.panel.container.style.minWidth = "92mm";
-    this.panel.container.addEventListener(netgis.Events.PANEL_TOGGLE, this.onPanelToggle.bind(this));
-    this.container = document.createElement("section");
-    this.container.className = "netgis-search-parcel";
-    this.panel.content.appendChild(this.container);
-    var a = document.createElement("section");
-    this.top = a;
-    this.container.appendChild(a);
-    var b = this.createInput("Gemarkungsname:");
-    b.style.position = "relative";
-    a.appendChild(b);
-    this.nameInput = b.children[0];
-    this.nameInput.setAttribute("title", "ENTER: Ausw\u00e4hlen, ESCAPE: Zur\u00fccksetzen");
-    this.nameInput.addEventListener("keyup", this.onInputNameKey.bind(this));
-    this.nameLoader = document.createElement("div");
-    this.nameLoader.className = "netgis-loader netgis-text-primary netgis-hide";
-    this.nameLoader.innerHTML = "<i class='fas fa-spinner'></i>";
-    b.appendChild(this.nameLoader);
-    this.nameList = document.createElement("ul");
-    a.appendChild(this.nameList);
-    b = this.createInput("Gemarkungsnummer:");
-    this.districtInput = b.children[0];
-    a.appendChild(b);
-    b = this.createInput("Flurnummer:");
-    this.fieldInput = b.children[0];
-    this.fieldInput.addEventListener("keyup", this.onInputFieldKey.bind(this));
-    a.appendChild(b);
-    b = this.createInput("<span>Flurst\u00fccksnummer (Z\u00e4hler/Nenner):</span>");
-    this.parcelInputA = b.children[1];
-    this.parcelInputA.style.width = "48%";
-    this.parcelInputB = this.parcelInputA.cloneNode(!0);
-    this.parcelInputB.style.marginLeft = "4%";
-    b.appendChild(this.parcelInputB);
-    a.appendChild(b);
-    b = document.createElement("button");
-    b.setAttribute("type", "button");
-    b.addEventListener("click", this.onParcelSearchClick.bind(this));
-    b.className = "netgis-color-a netgis-hover-c";
-    b.innerHTML = "Flurst\u00fccke suchen";
-    b.style.marginTop = "4mm";
-    a.appendChild(b);
-    b = document.createElement("section");
-    b.className = "netgis-hide";
-    this.bottom = b;
-    this.container.appendChild(b);
-    var c = document.createElement("button");
-    c.className = "netgis-button netgis-clip-text netgis-color-c";
-    c.innerHTML = "<span>Flurst\u00fccke</span> <span></span><i class='netgis-icon fas fa-times'></i>";
-    c.setAttribute("type", "button");
-    c.addEventListener("click", this.onBottomHeaderClick.bind(this));
-    b.appendChild(c);
-    this.parcelCount = c.getElementsByTagName("span")[1];
-    this.parcelInfo = document.createElement("p");
-    this.parcelTable = this.createTable(";Flur;Z\u00e4hler;Nenner;FKZ;Fl\u00e4che (qm)".split(";"));
-    this.parcelTable.classList.add("netgis-hide");
-    this.parcelTable.style.position = "absolute";
-    this.parcelTable.style.width = "100%";
-    this.parcelTable.style.top = "12mm";
-    this.parcelTable.style.bottom = "0mm";
-    this.parcelTable.style.margin = "0mm";
-    this.parcelTable.style.overflow = "auto";
-    b.appendChild(this.parcelTable);
-    this.parcelList = this.parcelTable.getElementsByTagName("tbody")[0];
-    this.parcelReset = document.createElement("button");
-    this.parcelReset.setAttribute("type", "button");
-    this.parcelReset.addEventListener("click", this.onResetClick.bind(this));
-    this.parcelReset.className = "netgis-color-a netgis-hover-c";
-    this.parcelReset.innerHTML = "Zur\u00fccksetzen";
-    this.parcelReset.style.marginTop = "4mm";
-    a.appendChild(this.parcelReset);
-};
-netgis.SearchParcel.prototype.initEvents = function () {
-    this.resizeObserver = new ResizeObserver(this.onTopResize.bind(this)).observe(this.top);
-};
-netgis.SearchParcel.prototype.initConfig = function (a) {
-    this.districtsLayer = a.searchparcel.districts_service;
-    this.districtsLayer.id = this.districtsLayerID;
-    this.districtsLayer.style = a.styles.parcel;
-    this.districtsLayer.order = 99999;
-    a.layers.push(this.districtsLayer);
-    this.fieldsLayer = { id: this.fieldsLayerID, type: netgis.LayerTypes.GEOJSON, style: a.styles.parcel, order: 99999, data: null };
-    a.layers.push(this.fieldsLayer);
-    this.parcelsLayer = { id: this.parcelsLayerID, type: netgis.LayerTypes.WKT, style: a.styles.parcel, order: 99999, data: null };
-    a.layers.push(this.parcelsLayer);
-    if (!0 === a.searchparcel.open) {
-        var b = this;
-        window.setTimeout(function () {
-            b.panel.show();
-        }, 100);
-    }
-};
-netgis.SearchParcel.prototype.attachTo = function (a) {
-    this.panel.attachTo(a);
-    a.addEventListener(netgis.Events.CLIENT_SET_MODE, this.onClientSetMode.bind(this));
-    a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE, this.onSearchParcelToggle.bind(this));
-    a.addEventListener(netgis.Events.LAYERTREE_TOGGLE, this.onLayerTreeToggle.bind(this));
-    a.addEventListener(netgis.Events.TOOLBOX_TOGGLE, this.onToolboxToggle.bind(this));
-    a.addEventListener(netgis.Events.MAP_FEATURE_ENTER, this.onMapFeatureEnter.bind(this));
-    a.addEventListener(netgis.Events.MAP_FEATURE_CLICK, this.onMapFeatureClick.bind(this));
-    a.addEventListener(netgis.Events.MAP_FEATURE_LEAVE, this.onMapFeatureLeave.bind(this));
-};
-netgis.SearchParcel.prototype.createInput = function (a) {
-    var b = document.createElement("label");
-    b.className = "netgis-hover-text-primary";
-    b.innerHTML = a;
-    a = document.createElement("input");
-    a.setAttribute("type", "text");
-    b.appendChild(a);
-    return b;
-};
-netgis.SearchParcel.prototype.createNameItem = function (a) {
-    var b = document.createElement("li"),
-        c = document.createElement("button");
-    c.setAttribute("type", "button");
-    c.addEventListener("click", this.onNameItemClick.bind(this));
-    c.className = "netgis-color-e netgis-hover-a netgis-text-a netgis-hover-text-e";
-    c.innerHTML = a;
-    b.appendChild(c);
-    return b;
-};
-netgis.SearchParcel.prototype.createTable = function (a) {
-    var b = document.createElement("div");
-    b.className = "netgis-table-wrapper";
-    var c = document.createElement("table");
-    b.appendChild(c);
-    var d = document.createElement("thead");
-    c.appendChild(d);
-    var e = document.createElement("tr");
-    e.className = "netgis-color-d netgis-shadow";
-    d.appendChild(e);
-    for (d = 0; d < a.length; d++) {
-        var f = document.createElement("th");
-        f.innerHTML = a[d];
-        e.appendChild(f);
-    }
-    a = document.createElement("tbody");
-    c.appendChild(a);
-    return b;
-};
-netgis.SearchParcel.prototype.createParcelItem = function (a, b, c, d, e, f, g) {
-    var h = document.createElement("tr");
-    h.className = "netgis-hover-d";
-    h.setAttribute("title", "Klicken zum zoomen");
-    h.setAttribute("data-id", d);
-    h.setAttribute("data-field", a);
-    h.setAttribute("data-parcel-a", b);
-    h.setAttribute("data-parcel-b", c);
-    h.setAttribute("data-bbox", f);
-    h.setAttribute("data-geom", g);
-    h.addEventListener("pointerenter", this.onParcelEnter.bind(this));
-    h.addEventListener("pointerleave", this.onParcelLeave.bind(this));
-    h.addEventListener("click", this.onParcelClick.bind(this));
-    f = document.createElement("td");
-    h.appendChild(f);
-    g = document.createElement("button");
-    g.setAttribute("type", "button");
-    g.setAttribute("title", "Geometrie \u00fcbernehmen");
-    g.addEventListener("click", this.onParcelImportClick.bind(this));
-    g.className = "netgis-hover-a";
-    g.innerHTML = "<i class='fas fa-paste'></i>";
-    f.appendChild(g);
-    f = document.createElement("td");
-    f.innerHTML = a;
-    h.appendChild(f);
-    a = document.createElement("td");
-    a.innerHTML = b;
-    h.appendChild(a);
-    b = document.createElement("td");
-    b.innerHTML = c;
-    h.appendChild(b);
-    c = document.createElement("td");
-    c.innerHTML = netgis.util.trim(d, "_");
-    h.appendChild(c);
-    d = document.createElement("td");
-    d.innerHTML = e;
-    h.appendChild(d);
-    return h;
-};
-netgis.SearchParcel.prototype.reset = function () {
-    this.hideBottom();
-    this.nameLoader.classList.add("netgis-hide");
-    this.nameInput.value = "";
-    this.districtInput.value = "";
-    this.fieldInput.value = "";
-    this.parcelInputA.value = "";
-    this.parcelInputB.value = "";
-    this.nameList.innerHTML = "";
-    this.parcelInfo.innerHTML = "";
-    this.parcelList.innerHTML = "";
-    this.parcelTable.classList.add("netgis-hide");
-    this.parcelReset.classList.add("netgis-hide");
-    this.parcelCount.innerHTML = "";
-    var a = this;
-    window.setTimeout(function () {
-        a.top.scrollTop = 0;
-        a.parcelTable.scrollTop = 0;
-    }, 10);
-    netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_RESET, null);
-    this.panel.visible() && this.showDistricts(!0);
-    this.showFields(!1);
-    this.showParcels(!1);
-};
-netgis.SearchParcel.prototype.showDistricts = function (a) {
-    a
-        ? (netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.districtsLayerID, on: !0 }),
-          netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LEVEL, { z: this.config.searchparcel.districts_service.min_zoom }))
-        : netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.districtsLayerID, on: !1 });
-};
-netgis.SearchParcel.prototype.showFields = function (a, b) {
-    a
-        ? ((b.crs = { type: "name", properties: { name: "urn:ogc:def:crs:EPSG::25832" } }),
-          (this.fieldsLayer.data = b),
-          netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.fieldsLayerID, on: !0 }),
-          netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LAYER, { id: this.fieldsLayerID }))
-        : (netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.fieldsLayerID, on: !1 }), (this.fieldsLayer.data = null));
-};
-netgis.SearchParcel.prototype.showParcels = function (a, b) {
-    if (a) {
-        a = [];
-        for (var c = 0; c < b.length; c++) {
-            var d = b[c];
-            a.push({ id: d.fsk, geometry: d.geometry, properties: { flaeche: d.flaeche, fln: d.fln, fsk: d.fsk, fsn_nen: d.fsn_nen, fsn_zae: d.fsn_zae } });
-        }
-        this.parcelsLayer.data = a;
-        netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.parcelsLayerID, on: !0 });
-        netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LAYER, { id: this.parcelsLayerID });
-    } else netgis.util.invoke(this.container, netgis.Events.MAP_LAYER_TOGGLE, { id: this.parcelsLayerID, on: !1 });
-};
-netgis.SearchParcel.prototype.onSearchParcelToggle = function (a) {
-    this.panel.toggle();
-};
-netgis.SearchParcel.prototype.onLayerTreeToggle = function (a) {
-    this.panel.hide();
-};
-netgis.SearchParcel.prototype.onToolboxToggle = function (a) {
-    this.panel.hide();
-};
-netgis.SearchParcel.prototype.onClientSetMode = function (a) {
-    a.detail.mode === netgis.Modes.SEARCH_PARCEL ? this.reset() : (this.showDistricts(!1), this.showFields(!1), this.showParcels(!1));
-};
-netgis.SearchParcel.prototype.onPanelToggle = function (a) {
-    !1 === a.detail.visible
-        ? netgis.util.invoke(this.panel.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW })
-        : netgis.util.invoke(this.panel.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.SEARCH_PARCEL });
-};
-netgis.SearchParcel.prototype.onInputNameKey = function (a) {
-    switch (a.keyCode) {
-        case 13:
-            this.selectFirstName();
-            break;
-        case 27:
-            this.reset();
-            break;
-        default:
-            this.requestName(this.nameInput.value.trim());
-    }
-};
-netgis.SearchParcel.prototype.requestName = function (a) {
-    this.nameDebounce && window.clearTimeout(this.nameDebounce);
-    if (0 !== a.length) {
-        var b = this.config.searchparcel.name_url;
-        b = netgis.util.replace(b, "{q}", window.encodeURIComponent(a));
-        this.nameDebounce = window.setTimeout(this.onInputNameDebounce.bind(this, b), 200);
-        this.nameLoader.classList.remove("netgis-hide");
-    }
-};
-netgis.SearchParcel.prototype.onInputNameDebounce = function (a) {
-    netgis.util.request(a, this.onInputNameResponse.bind(this));
-};
-netgis.SearchParcel.prototype.onInputNameResponse = function (a) {
-    this.nameLoader.classList.add("netgis-hide");
-    this.parcelReset.classList.remove("netgis-hide");
-    this.nameList.innerHTML = "";
-    if ("{" === a.charAt(0) || "[" === a.charAt(0)) {
-        a = JSON.parse(a);
-        for (var b = 0; b < a.data.length; b++) {
-            var c = a.data[b],
-                d = this.createNameItem(c.gmk_name);
-            d.getElementsByTagName("button")[0].setAttribute("data-id", c.gmk_gmn);
-            this.nameList.appendChild(d);
-        }
-    }
-};
-netgis.SearchParcel.prototype.onNameItemClick = function (a) {
-    a = a.target;
-    var b = a.getAttribute("data-id");
-    this.nameInput.value = a.innerHTML;
-    this.nameList.innerHTML = "";
-    this.districtInput.value = b;
-    this.requestFields(b);
-};
-netgis.SearchParcel.prototype.requestFields = function (a) {
-    var b = this.config.searchparcel.fields_service,
-        c = b.url;
-    c = c + "service=WFS&version=1.0.0&request=GetFeature&outputFormat=application/json; subtype=geojson&typename=" + b.name;
-    c = c + "&filter=<Filter><PropertyIsEqualTo><PropertyName>" + (b.filter_property + "</PropertyName>");
-    netgis.util.request(c + ("<Literal>" + a + "</Literal></PropertyIsEqualTo></Filter>"), this.onFieldsResponse.bind(this));
-};
-netgis.SearchParcel.prototype.onFieldsResponse = function (a) {
-    a = JSON.parse(a);
-    this.showDistricts(!1);
-    this.showFields(!0, a);
-    this.showParcels(!1);
-};
-netgis.SearchParcel.prototype.selectFirstName = function () {
-    var a = this.nameList.getElementsByTagName("button");
-    0 < a.length && a[0].click();
-};
-netgis.SearchParcel.prototype.setDistrict = function (a, b) {
-    this.nameInput.value = a;
-    this.districtInput.value = b;
-    this.requestFields(b);
-};
-netgis.SearchParcel.prototype.setFieldNumber = function (a) {
-    this.fieldInput.value = a;
-    this.onParcelSearchClick();
-};
-netgis.SearchParcel.prototype.setParcelNumber = function (a, b) {
-    this.parcelInputA.value = a;
-    this.parcelInputB.value = b;
-    this.onParcelSearchClick();
-};
-netgis.SearchParcel.prototype.showBottom = function () {
-    this.top.classList.add("netgis-resize-bottom");
-    this.top.style.height = "50%";
-    this.top.style.bottom = "auto";
-    this.bottom.classList.remove("netgis-hide");
-};
-netgis.SearchParcel.prototype.hideBottom = function () {
-    this.top.classList.remove("netgis-resize-bottom");
-    this.top.style.height = "auto";
-    this.top.style.bottom = "0mm";
-    this.bottom.classList.add("netgis-hide");
-};
-netgis.SearchParcel.prototype.onInputFieldKey = function (a) {
-    switch (a.keyCode) {
-        case 13:
-            this.onParcelSearchClick();
-    }
-};
-netgis.SearchParcel.prototype.onParcelSearchClick = function (a) {
-    this.requestParcels(this.districtInput.value.trim(), this.fieldInput.value.trim(), this.parcelInputA.value.trim(), this.parcelInputB.value.trim());
-};
-netgis.SearchParcel.prototype.requestParcels = function (a, b, c, d) {
-    var e = this.config.searchparcel.parcel_url;
-    e = netgis.util.replace(e, "{district}", a ? a : "");
-    e = netgis.util.replace(e, "{field}", b ? b : "");
-    e = netgis.util.replace(e, "{parcelA}", c ? c : "");
-    e = netgis.util.replace(e, "{parcelB}", d ? d : "");
-    this.parcelTable.classList.add("netgis-hide");
-    this.parcelList.innerHTML = "";
-    this.parcelInfo.innerHTML = "Suche Flurst\u00fccke...";
-    netgis.util.request(e, this.onParcelsResponse.bind(this));
-};
-netgis.SearchParcel.prototype.onParcelsResponse = function (a) {
-    a = JSON.parse(a);
-    this.parcelCount.innerHTML = "(" + a.count + ")";
-    if (0 === a.count) this.parcelInfo.innerHTML = a.Info;
-    else {
-        for (var b = 0; b < a.data.length; b++) {
-            var c = a.data[b];
-            c = this.createParcelItem(c.fln, c.fsn_zae, c.fsn_nen, c.fsk, c.flaeche, c.bbox, c.geometry);
-            this.parcelList.appendChild(c);
-        }
-        this.parcelTable.classList.remove("netgis-hide");
-        this.showBottom();
-        this.showDistricts(!1);
-        this.showFields(!1);
-        this.showParcels(!0, a.data);
-    }
-    this.container.classList.contains("netgis-hide") || this.parcelTable.scrollIntoView();
-};
-netgis.SearchParcel.prototype.onParcelEnter = function (a) {
-    a = a.target;
-    var b = a.getAttribute("data-geom");
-    a = { id: a.getAttribute("data-id"), field: a.getAttribute("data-field"), parcelA: a.getAttribute("data-parcel-a"), parcelB: a.getAttribute("data-parcel-b"), geom: b };
-    netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_ITEM_ENTER, a);
-};
-netgis.SearchParcel.prototype.onParcelLeave = function (a) {
-    netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_ITEM_LEAVE, { id: a.target.getAttribute("data-id") });
-};
-netgis.SearchParcel.prototype.onParcelClick = function (a) {
-    netgis.util.invoke(this.container, netgis.Events.SEARCHPARCEL_ITEM_CLICK, { id: a.currentTarget.getAttribute("data-id") });
-};
-netgis.SearchParcel.prototype.onParcelImportClick = function (a) {
-    a.stopPropagation();
-    a = a.currentTarget.parentElement.parentElement;
-    var b = a.getAttribute("data-id");
-    a.getAttribute("data-geom");
-    netgis.util.invoke(this.container, netgis.Events.MAP_COPY_FEATURE_TO_EDIT, { source: this.parcelsLayerID, id: b });
-};
-netgis.SearchParcel.prototype.onResetClick = function (a) {
-    this.reset();
-};
-netgis.SearchParcel.prototype.onTopResize = function (a) {
-    if (!this.bottom.classList.contains("netgis-hide")) {
-        a = this.top.getBoundingClientRect();
-        var b = this.top.parentNode.getBoundingClientRect();
-        this.bottom.style.top = a.bottom - b.top + "px";
-    }
-};
-netgis.SearchParcel.prototype.onBottomHeaderClick = function (a) {
-    this.reset();
-};
-netgis.SearchParcel.prototype.onMapFeatureEnter = function (a) {
-    var b = a.target;
-    a = a.detail;
-    switch (a.layer) {
-        case this.districtsLayerID:
-            var c = a.properties.gemarkung;
-            b.setAttribute("title", c);
-            break;
-        case this.fieldsLayerID:
-            c = a.properties.flurname;
-            b.setAttribute("title", c);
-            break;
-        case this.parcelsLayerID:
-            for (
-                c = "Flur: " + a.properties.fln + " / Z\u00e4hler: " + a.properties.fsn_zae + " / Nenner: " + a.properties.fsn_nen, b.setAttribute("title", c), b = a.properties.fsk, a = this.parcelList.getElementsByTagName("tr"), c = 0;
-                c < a.length;
-                c++
-            ) {
-                var d = a[c];
-                if (d.getAttribute("data-id") === b) {
-                    d.scrollIntoView({ behavior: "smooth", block: "center" });
-                    d.classList.add("netgis-color-d");
-                    break;
-                }
-            }
-    }
-};
-netgis.SearchParcel.prototype.onMapFeatureClick = function (a) {
-    a = a.detail;
-    switch (a.layer) {
-        case this.districtsLayerID:
-            this.setDistrict(a.properties.gemarkung + " (" + a.properties.ldkreis + ")", a.properties.gmkgnr);
-            break;
-        case this.fieldsLayerID:
-            this.setFieldNumber(a.properties.flur);
-            break;
-        case this.parcelsLayerID:
-            netgis.util.invoke(this.container, netgis.Events.MAP_COPY_FEATURE_TO_EDIT, { source: this.parcelsLayerID, id: a.properties.fsk });
-    }
-};
-netgis.SearchParcel.prototype.onMapFeatureLeave = function (a) {
-    var b = a.target;
-    a = a.detail;
-    switch (a.layer) {
-        case this.districtsLayerID:
-        case this.fieldsLayerID:
-            b.setAttribute("title", "");
-            break;
-        case this.parcelsLayerID:
-            b.setAttribute("title", "");
-            b = a.properties.fsk;
-            a = this.parcelList.getElementsByTagName("tr");
-            for (var c = 0; c < a.length; c++) {
-                var d = a[c];
-                if (d.getAttribute("data-id") === b) {
-                    d.classList.remove("netgis-color-d");
-                    break;
-                }
-            }
-    }
-};
-netgis = netgis || {};
-netgis.SearchPlace = function (a) {
-    this.config = a;
-    this.initElements();
-    this.initEvents();
-    this.initConfig(a);
-};
-netgis.SearchPlace.prototype.initElements = function () {
-    this.search = new netgis.Search("");
-    this.container = this.search.container;
-    this.container.classList.add("netgis-search-place", "netgis-responsive");
-    this.search.container.addEventListener(netgis.Events.SEARCH_CHANGE, this.onSearchChange.bind(this));
-    this.search.container.addEventListener(netgis.Events.SEARCH_SELECT, this.onSearchSelect.bind(this));
-    this.search.container.addEventListener(netgis.Events.SEARCH_CLEAR, this.onSearchClear.bind(this));
-};
-netgis.SearchPlace.prototype.initEvents = function () {};
-netgis.SearchPlace.prototype.initConfig = function (a) {
-    this.search.setTitle(a.searchplace.title);
-};
-netgis.SearchPlace.prototype.attachTo = function (a) {
-    this.search.attachTo(a);
-    a.addEventListener(netgis.Events.SEARCHPLACE_TOGGLE, this.onSearchPlaceToggle.bind(this));
-};
-netgis.SearchPlace.prototype.onSearchPlaceToggle = function (a) {
-    this.search.toggle();
-};
-netgis.SearchPlace.prototype.onSearchChange = function (a) {
-    var b = this.config.searchplace.url;
-    b = netgis.util.replace(b, "{query}", window.encodeURIComponent(a.detail.query));
-    b = netgis.util.replace(b, "{epsg}", 4326);
-    netgis.util.request(b, this.onSearchResponse.bind(this));
-};
-netgis.SearchPlace.prototype.onSearchResponse = function (a) {
-    a = JSON.parse(a);
-    this.search.clearResults();
-    if (a.geonames) {
-        a = a.geonames;
-        for (var b = 0; b < a.length; b++) {
-            var c = a[b],
-                d = c.title,
-                e = 0.5 * (Number.parseFloat(c.minx) + Number.parseFloat(c.maxx)),
-                f = 0.5 * (Number.parseFloat(c.miny) + Number.parseFloat(c.maxy));
-            c = { type: c.category, id: b, lon: e, lat: f };
-            this.search.addResult(d, JSON.stringify(c));
-        }
-    } else if (a.data)
-        for (a = a.data, b = 0; b < a.length; b++) (c = a[b]), (d = c.name), (c = { type: "street", id: c.strid, lon: Number.parseFloat(c.wgs_x), lat: Number.parseFloat(c.wgs_y) }), this.search.addResult(d, JSON.stringify(c));
-};
-netgis.SearchPlace.prototype.onSearchSelect = function (a) {
-    a = JSON.parse(a.detail.data);
-    netgis.util.invoke(this.container, netgis.Events.MAP_ZOOM_LONLAT, { lon: a.lon, lat: a.lat, zoom: this.config.searchplace.zoom });
-    if ("street" === a.type) {
-        var b = this.config.searchplace.url_detail;
-        b && ((b = netgis.util.replace(b, "{id}", a.id)), netgis.util.request(b, this.onSearchDetailResponse.bind(this)));
-    }
-};
-netgis.SearchPlace.prototype.onSearchDetailResponse = function (a) {
-    a = JSON.parse(a);
-    var b = a.hsnrarr;
-    if (0 !== b.length) {
-        this.search.clearResults();
-        for (var c = 0; c < b.length; c++) {
-            var d = b[c],
-                e = a.strname + " " + d.hsnr;
-            d = { type: "address", lon: Number.parseFloat(d.wgs_x), lat: Number.parseFloat(d.wgs_y) };
-            this.search.addResult(e, JSON.stringify(d));
-        }
-    }
-};
-netgis.SearchPlace.prototype.onSearchClear = function (a) {};
-netgis = netgis || {};
-netgis.SLD = (function () {
-    return {
-        read: function (a, b) {
-            var c = {};
-            a = new DOMParser().parseFromString(a, "text/xml").getElementsByTagName("NamedLayer");
-            for (var d = 0; d < a.length; d++) {
-                var e = a[d],
-                    f = e.getElementsByTagName("se:Name")[0].innerHTML;
-                console.info("Layer:", f);
-                e = e.getElementsByTagName("se:FeatureTypeStyle");
-                for (f = 0; f < e.length; f++)
-                    for (var g = e[f].getElementsByTagName("se:Rule"), h = 0; h < g.length; h++) {
-                        var k = g[h],
-                            l = k.getElementsByTagName("se:Name")[0].innerHTML;
-                        console.info("Rule:", l);
-                        l = k.getElementsByTagName("se:PolygonSymbolizer")[0];
-                        k = l.getElementsByTagName("se:Fill")[0];
-                        l = l.getElementsByTagName("se:Stroke")[0];
-                        c.polygon = { fill: k.querySelector("[name='fill']").innerHTML, stroke: l.querySelector("[name='stroke']").innerHTML, strokeWidth: Number.parseFloat(l.querySelector("[name='stroke-width']").innerHTML) };
-                    }
-            }
-            console.info("SLD:", c);
-            b.invoke(netgis.Events.MAP_UPDATE_STYLE, c);
-            return c;
-        },
-    };
-})();
-netgis = netgis || {};
-netgis.Tabs = function (a) {
-    this.initElements(a);
-    this.setActiveTab(0);
-};
-netgis.Tabs.prototype.initElements = function (a) {
-    this.container = document.createElement("div");
-    this.container.className = "netgis-tabs";
-    this.header = document.createElement("div");
-    this.header.className = "netgis-header netgis-color-d";
-    this.container.appendChild(this.header);
-    this.content = document.createElement("div");
-    this.content.className = "netgis-content netgis-color-e";
-    this.container.appendChild(this.content);
-    for (var b = 0; b < a.length; b++) {
-        var c = document.createElement("button");
-        c.setAttribute("type", "button");
-        c.addEventListener("click", this.onHeaderButtonClick.bind(this));
-        c.className = "netgis-button netgis-color-d";
-        c.innerHTML = a[b];
-        this.header.appendChild(c);
-        c = document.createElement("section");
-        c.className = "netgis-color-e netgis-form";
-        this.content.appendChild(c);
-    }
-};
-netgis.Tabs.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-};
-netgis.Tabs.prototype.setActiveTab = function (a) {
-    for (var b = this.header.getElementsByClassName("netgis-button"), c = this.content.getElementsByTagName("section"), d = 0; d < b.length; d++) {
-        var e = b[d],
-            f = c[d];
-        d === a
-            ? (e.classList.add("netgis-color-e"),
-              e.classList.add("netgis-text-a"),
-              e.classList.add("netgis-bar-a"),
-              e.classList.add("netgis-active"),
-              e.scrollIntoView({ behavior: "smooth" }),
-              f.classList.remove("netgis-hide"),
-              (f.scrollTop = 0))
-            : (e.classList.remove("netgis-color-e"), e.classList.remove("netgis-text-a"), e.classList.remove("netgis-bar-a"), e.classList.remove("netgis-active"), f.classList.add("netgis-hide"));
-    }
-};
-netgis.Tabs.prototype.getContentSection = function (a) {
-    return this.content.getElementsByTagName("section")[a];
-};
-netgis.Tabs.prototype.appendContent = function (a, b) {
-    this.content.getElementsByTagName("section")[a].appendChild(b);
-};
-netgis.Tabs.prototype.updateHeaderScroll = function () {
-    for (var a = 0, b = this.header.getElementsByTagName("button"), c = 0; c < b.length; c++) {
-        var d = b[c];
-        a += d.getBoundingClientRect().width;
-        d.classList.contains("netgis-active") && d.scrollIntoView();
-    }
-    b = this.header.getBoundingClientRect().width;
-    a > b ? this.container.classList.add("netgis-scroll") : this.container.classList.remove("netgis-scroll");
-};
-netgis.Tabs.prototype.onHeaderButtonClick = function (a) {
-    a = a.currentTarget;
-    for (var b = this.header.getElementsByClassName("netgis-button"), c = 0, d = 0; d < b.length; d++)
-        if (b[d] === a) {
-            c = d;
-            break;
-        }
-    this.setActiveTab(c);
-};
-netgis = netgis || {};
-netgis.TimeSlider = function (a) {
-    this.config = a;
-    this.insertTop = !0;
-    this.initElements();
-    for (a = 1900; 2e3 >= a; a++);
-    console.info("TimeSlider:", this);
-    var b = this;
-    window.setTimeout(function () {
-        b.container.scrollLeft = 0;
-    }, 1);
-};
-netgis.TimeSlider.prototype.initElements = function () {
-    this.container = document.createElement("section");
-    this.container.className = "netgis-timeslider netgis-footer netgis-noselect netgis-color-e netgis-hide";
-    document.addEventListener("pointermove", this.onPointerMove.bind(this));
-    document.addEventListener("pointerup", this.onPointerUp.bind(this));
-    this.header = document.createElement("button");
-    this.header.className = "netgis-header netgis-button netgis-clip-text netgis-color-a netgis-hover-c netgis-shadow";
-    this.header.innerHTML = "<i class='netgis-icon fas fa-clock'></i><span>TimeSlider</span><i class='netgis-icon fas fa-times'></i>";
-    this.header.setAttribute("type", "button");
-    this.header.addEventListener("click", this.onHeaderClick.bind(this));
-    this.container.appendChild(this.header);
-    this.wrapper = document.createElement("div");
-    this.wrapper.className = "netgis-wrapper";
-    this.wrapper.addEventListener("pointerdown", this.onPointerDown.bind(this));
-    this.container.appendChild(this.wrapper);
-    this.table = document.createElement("table");
-    this.wrapper.appendChild(this.table);
-    this.top = document.createElement("tr");
-    this.table.appendChild(this.top);
-    this.bottom = document.createElement("tr");
-};
-netgis.TimeSlider.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-    a.addEventListener(netgis.Events.TIMESLIDER_SHOW, this.onTimeSliderShow.bind(this));
-    a.addEventListener(netgis.Events.TIMESLIDER_HIDE, this.onTimeSliderHide.bind(this));
-};
-netgis.TimeSlider.prototype.setVisible = function (a) {
-    a ? (this.container.classList.remove("netgis-hide"), this.container.parentNode.classList.add("netgis-footer")) : (this.container.classList.add("netgis-hide"), this.container.parentNode.classList.remove("netgis-footer"));
-};
-netgis.TimeSlider.prototype.setTitle = function (a) {
-    this.header.getElementsByTagName("span")[0].innerHTML = a;
-};
-netgis.TimeSlider.prototype.clearTimeSteps = function () {
-    this.top.innerHTML = "";
-};
-netgis.TimeSlider.prototype.addTimeStep = function (a, b) {
-    var c = document.createElement("td");
-    c.setAttribute("data-id", a);
-    a = document.createElement("button");
-    a.className = "netgis-button netgis-color-e netgis-hover-d";
-    a.innerHTML = "<i class='netgis-icon netgis-text-a far fa-calendar'></i><span>" + b + "</span>";
-    a.setAttribute("type", "button");
-    a.addEventListener("click", this.onTimeStepClick.bind(this));
-    c.appendChild(a);
-    this.top.appendChild(c);
-};
-netgis.TimeSlider.prototype.addTimeStep_01 = function (a, b) {
-    a = document.createElement("td");
-    var c = document.createElement("td");
-    this.insertTop ? (a.innerHTML = b) : (c.innerHTML = b);
-    this.top.appendChild(a);
-    this.bottom.appendChild(c);
-    this.insertTop = !this.insertTop;
-};
-netgis.TimeSlider.prototype.setActiveTimeStep = function (a) {
-    var b = this.top.getElementsByTagName("td"),
-        c = b[a],
-        d = c.getAttribute("data-id");
-    console.info("Set Active Step:", a, d);
-    for (var e = 0; e < b.length; e++) {
-        var f = b[e],
-            g = f.getElementsByClassName("netgis-icon")[0];
-        e === a ? (f.classList.add("netgis-active"), g.classList.remove("fa-calendar"), g.classList.add("fa-calendar-check")) : (f.classList.remove("netgis-active"), g.classList.add("fa-calendar"), g.classList.remove("fa-calendar-check"));
-    }
-    c.scrollIntoView();
-    netgis.util.invoke(c, netgis.Events.TIMESLIDER_SELECT, { layer: this.layerID, time: d });
-};
-netgis.TimeSlider.prototype.requestServiceWMST = function (a, b) {
-    a = a.trim();
-    1 > a.length || (-1 === a.indexOf("GetCapabilities") && (a += "&REQUEST=GetCapabilities"), netgis.util.request(a, this.onServiceResponseWMST.bind(this), { id: b }));
-};
-netgis.TimeSlider.prototype.onServiceResponseWMST = function (a, b) {
-    for (var c = new DOMParser().parseFromString(a, "text/xml").documentElement.getElementsByTagName("Layer"), d, e = 0; e < c.length; e++) {
-        a = c[e];
-        var f = a.getElementsByTagName("Name")[0].textContent;
-        if (f === b.id) {
-            d = { name: f, title: a.getElementsByTagName("Title")[0].textContent, abstract: a.getElementsByTagName("Abstract")[0].textContent, queryable: "1" === a.getAttribute("queryable"), opaque: "1" === a.getAttribute("opaque") };
-            e = a.getElementsByTagName("SRS");
-            0 < e.length && (d.projection = e[0].textContent);
-            e = a.getElementsByTagName("CRS");
-            0 < e.length && (d.projection = e[0].textContent);
-            e = a.getElementsByTagName("BoundingBox")[0];
-            d.bbox = [Number.parseFloat(e.getAttribute("minx")), Number.parseFloat(e.getAttribute("miny")), Number.parseFloat(e.getAttribute("maxx")), Number.parseFloat(e.getAttribute("maxy"))];
-            b = a.getElementsByTagName("Dimension");
-            for (e = 0; e < b.length; e++)
-                if (((c = b[e]), "time" === c.getAttribute("name"))) {
-                    var g = { defaultTime: c.getAttribute("default"), extent: c.textContent.split("/") };
-                    break;
-                }
-            a = a.getElementsByTagName("Extent");
-            for (e = 0; e < a.length; e++)
-                if (((b = a[e]), "time" === b.getAttribute("name"))) {
-                    g.defaultTime = b.getAttribute("default");
-                    g.extent = b.textContent.split("/");
-                    break;
-                }
-            d.time = g;
-            break;
-        }
-    }
-    console.info("WMST Layer:", d);
-    this.setTitle(d.title);
-    if (d.time.extent) {
-        g = new Date(d.time.extent[0]);
-        a = new Date(d.time.extent[1]);
-        b = d.time.extent[2];
-        d = [];
-        switch (b) {
-            case "P1D":
-                for (; g <= a; ) d.push(new Date(g)), g.setDate(g.getDate() + 1);
-                break;
-            default:
-                console.error("unsupported WMST date range", b, g, a);
-        }
-        for (e = 0; e < d.length; e++) (b = d[e]), (a = g = b.toISOString()), (a = a.replace("T", ", ")), (a = a.replace("Z", "")), this.addTimeStep(g, a);
-        this.setActiveTimeStep(d.length - 1);
-    }
-};
-netgis.TimeSlider.prototype.onTimeSliderShow = function (a) {
-    a = a.detail;
-    console.info("TimeSlider Show:", a);
-    this.layerID = a.layer;
-    this.setTitle(a.title);
-    this.clearTimeSteps();
-    this.requestServiceWMST(a.url, a.name);
-    this.setVisible(!0);
-};
-netgis.TimeSlider.prototype.onTimeSliderHide = function (a) {
-    this.setVisible(!1);
-};
-netgis.TimeSlider.prototype.onHeaderClick = function (a) {
-    this.setVisible(!1);
-};
-netgis.TimeSlider.prototype.onPointerDown = function (a) {
-    a = a.pageX - this.wrapper.offsetLeft;
-    this.down = !0;
-    this.downX = a;
-    this.downScroll = this.wrapper.scrollLeft;
-    this.container.classList.add("netgis-active");
-};
-netgis.TimeSlider.prototype.onPointerMove = function (a) {
-    this.down && (a.preventDefault(), (this.wrapper.scrollLeft = this.downScroll - (a.pageX - this.wrapper.offsetLeft - this.downX)));
-};
-netgis.TimeSlider.prototype.onPointerUp = function (a) {
-    this.down && a.preventDefault();
-    this.down = !1;
-    this.container.classList.remove("netgis-active");
-};
-netgis.TimeSlider.prototype.onTimeStepClick = function (a) {
-    a = a.currentTarget.parentNode;
-    a.getAttribute("data-id");
-    if (!(5 < Math.abs(this.wrapper.scrollLeft - this.downScroll))) {
-        for (var b = this.top.getElementsByTagName("td"), c = -1, d = 0; d < b.length; d++)
-            if (b[d] === a) {
-                c = d;
-                break;
-            }
-        this.setActiveTimeStep(c);
-    }
-};
-netgis = netgis || {};
-netgis.Toolbox = function (a) {
-    this.config = a;
-    this.bottomPanels = {};
-    this.initElements(a);
-    this.initOptions(a);
-    this.initEvents();
-};
-netgis.Toolbox.prototype.initElements = function (a) {
-    this.panel = new netgis.Panel("Toolbox");
-    this.panel.content.classList.add("netgis-toolbox");
-    this.top = document.createElement("section");
-    this.panel.content.appendChild(this.top);
-    for (var b = a.toolbox.items, c = 0; c < b.length; c++) {
-        var d = b[c];
-        if (!1 === this.config.tools.editable)
-            switch (d.id) {
-                case "draw_points":
-                    continue;
-                case "draw_lines":
-                    continue;
-                case "draw_polygons":
-                    continue;
-                case "modify_features":
-                    continue;
-                case "delete_features":
-                    continue;
-                case "buffer_features":
-                    continue;
-                case "cut_features":
-                    continue;
-            }
-        this.addButton(this.top, d.id, d.title);
-    }
-    this.bottom = document.createElement("section");
-    this.bottom.className = "netgis-color-e netgis-hide";
-    this.panel.content.appendChild(this.bottom);
-    b = document.createElement("button");
-    b.className = "netgis-button netgis-clip-text netgis-color-c";
-    b.innerHTML = "<span>Einstellungen</span><i class='netgis-icon fas fa-times'></i>";
-    b.setAttribute("type", "button");
-    b.addEventListener("click", this.onBottomHeaderClick.bind(this));
-    this.bottom.appendChild(b);
-    this.bottomTitle = b.getElementsByTagName("span")[0];
-    a.toolbox && !0 === a.toolbox.open && this.panel.show();
-};
-netgis.Toolbox.prototype.initOptions = function (a) {
-    var b = a.toolbox.options;
-    if (b) for (var c in b);
-    b = a.tools;
-    a = [];
-    this.bottomPanels.drawPoints = document.createElement("div");
-    a.push(this.addCheckbox(this.bottomPanels.drawPoints, "Einrasten", this.onDrawSnapToggle.bind(this)));
-    this.addCheckbox(this.bottomPanels.drawPoints, "Puffern", this.onDrawBufferToggle.bind(this));
-    this.addInputNumber(this.bottomPanels.drawPoints, "Radius (Meter):", b.buffer.default_radius, this.onDrawBufferChange.bind(this));
-    this.addInputNumber(this.bottomPanels.drawPoints, "Segmente:", b.buffer.default_segments, this.onDrawBufferChange.bind(this));
-    this.bottom.appendChild(this.bottomPanels.drawPoints);
-    this.bottomPanels.drawLines = document.createElement("div");
-    a.push(this.addCheckbox(this.bottomPanels.drawLines, "Einrasten", this.onDrawSnapToggle.bind(this)));
-    this.addCheckbox(this.bottomPanels.drawLines, "Puffern", this.onDrawBufferToggle.bind(this));
-    this.addInputNumber(this.bottomPanels.drawLines, "Radius (Meter):", b.buffer.default_radius, this.onDrawBufferChange.bind(this));
-    this.addInputNumber(this.bottomPanels.drawLines, "Segmente:", b.buffer.default_segments, this.onDrawBufferChange.bind(this));
-    this.bottom.appendChild(this.bottomPanels.drawLines);
-    this.showDrawBufferOptions(!1);
-    this.bottomPanels.drawPolygons = document.createElement("div");
-    a.push(this.addCheckbox(this.bottomPanels.drawPolygons, "Einrasten", this.onDrawSnapToggle.bind(this)));
-    this.bottom.appendChild(this.bottomPanels.drawPolygons);
-    this.bottomPanels.bufferFeatures = document.createElement("div");
-    this.addInputNumber(this.bottomPanels.bufferFeatures, "Radius (Meter):", b.buffer.default_radius, this.onBufferFeaturesChange.bind(this));
-    this.addInputNumber(this.bottomPanels.bufferFeatures, "Segmente:", b.buffer.default_segments, this.onBufferFeaturesChange.bind(this));
-    this.addButton(this.bottomPanels.bufferFeatures, null, "<i class='netgis-icon netgis-text-a fas fa-arrow-circle-right'></i><span>Akzeptieren</span>", this.onBufferFeaturesAccept.bind(this));
-    this.bottom.appendChild(this.bottomPanels.bufferFeatures);
-    this.bottomPanels.modifyFeatures = document.createElement("div");
-    a.push(this.addCheckbox(this.bottomPanels.modifyFeatures, "Einrasten", this.onDrawSnapToggle.bind(this)));
-    this.bottom.appendChild(this.bottomPanels.modifyFeatures);
-    if (!this.config.tools.snapping.show) for (b = 0; b < a.length; b++) a[b].parentNode.classList.add("netgis-hide");
-    if (!0 === this.config.tools.snapping.active) {
-        for (b = 0; b < a.length; b++) a[b].checked = !0;
-        var d = this;
-        window.setTimeout(function () {
-            netgis.util.invoke(d.panel.container, netgis.Events.MAP_SNAP_TOGGLE, { on: !0 });
-        }, 100);
-    }
-};
-netgis.Toolbox.prototype.initEvents = function () {
-    this.resizeObserver = new ResizeObserver(this.onTopResize.bind(this)).observe(this.top);
-};
-netgis.Toolbox.prototype.attachTo = function (a) {
-    a.appendChild(this.panel.container);
-    a.addEventListener(netgis.Events.CLIENT_SET_MODE, this.onClientSetMode.bind(this));
-    a.addEventListener(netgis.Events.TOOLBOX_TOGGLE, this.onToolboxToggle.bind(this));
-    a.addEventListener(netgis.Events.LAYERTREE_TOGGLE, this.onLayerTreeToggle.bind(this));
-    a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE, this.onSearchParcelToggle.bind(this));
-};
-netgis.Toolbox.prototype.addButton = function (a, b, c, d) {
-    var e = document.createElement("button");
-    e.className = "netgis-button netgis-clip-text netgis-color-e netgis-hover-d";
-    e.innerHTML = c;
-    e.setAttribute("type", "button");
-    e.setAttribute("data-id", b);
-    d ? (e.onclick = d) : e.addEventListener("click", this.onButtonClick.bind(this));
-    a && a.appendChild(e);
-    return e;
-};
-netgis.Toolbox.prototype.addCheckbox = function (a, b, c) {
-    var d = document.createElement("label");
-    d.className = "netgis-noselect netgis-hover-a";
-    var e = document.createElement("input");
-    e.setAttribute("type", "checkbox");
-    d.appendChild(e);
-    var f = document.createElement("span");
-    f.innerHTML = b;
-    d.appendChild(f);
-    c && (e.onchange = c);
-    a && a.appendChild(d);
-    return e;
-};
-netgis.Toolbox.prototype.addInputNumber = function (a, b, c, d) {
-    var e = document.createElement("label");
-    e.className = "netgis-noselect netgis-hover-a";
-    var f = document.createElement("span");
-    f.innerHTML = b;
-    e.appendChild(f);
-    b = document.createElement("input");
-    b.setAttribute("type", "number");
-    b.setAttribute("min", 0);
-    b.value = c;
-    e.appendChild(b);
-    d && ((b.onchange = d), (b.onkeyup = d));
-    a && a.appendChild(e);
-    return b;
-};
-netgis.Toolbox.prototype.showBottom = function (a, b) {
-    this.top.classList.add("netgis-resize-bottom");
-    this.top.style.height = "50%";
-    this.top.style.bottom = "auto";
-    this.bottom.classList.remove("netgis-hide");
-    this.bottomTitle.innerHTML = b;
-    if (a) for (var c in this.bottomPanels) (b = this.bottomPanels[c]), b === a ? b.classList.remove("netgis-hide") : b.classList.add("netgis-hide");
-};
-netgis.Toolbox.prototype.hideBottom = function () {
-    this.top.classList.remove("netgis-resize-bottom");
-    this.top.style.height = "auto";
-    this.top.style.bottom = "0mm";
-    this.bottom.classList.add("netgis-hide");
-};
-netgis.Toolbox.prototype.showDrawBufferOptions = function (a) {
-    var b = this.bottomPanels.drawPoints.getElementsByTagName("label"),
-        c = this.bottomPanels.drawLines.getElementsByTagName("label");
-    b[1].getElementsByTagName("input")[0].checked = a;
-    (c[1].getElementsByTagName("input")[0].checked = a)
-        ? (b[2].classList.remove("netgis-hide"), b[3].classList.remove("netgis-hide"), c[2].classList.remove("netgis-hide"), c[3].classList.remove("netgis-hide"))
-        : (b[2].classList.add("netgis-hide"), b[3].classList.add("netgis-hide"), c[2].classList.add("netgis-hide"), c[3].classList.add("netgis-hide"));
-};
-netgis.Toolbox.prototype.setActiveButton = function (a) {
-    for (var b = this.top.getElementsByTagName("button"), c = null, d = 0; d < b.length; d++) {
-        var e = b[d];
-        e.getAttribute("data-id") === a ? ((c = e), e.classList.add("netgis-active")) : e.classList.remove("netgis-active");
-    }
-    if (c) {
-        var f = this;
-        window.setTimeout(function () {
-            f.top.scrollTo({ top: c.offsetTop, behavior: "smooth" });
-        }, 10);
-    }
-};
-netgis.Toolbox.prototype.onToolboxToggle = function (a) {
-    this.panel.toggle();
-};
-netgis.Toolbox.prototype.onLayerTreeToggle = function (a) {
-    this.panel.hide();
-};
-netgis.Toolbox.prototype.onSearchParcelToggle = function (a) {
-    this.panel.hide();
-};
-netgis.Toolbox.prototype.onClientSetMode = function (a) {
-    a = a.detail;
-    this.hideBottom();
-    switch (a.mode) {
-        default:
-            this.setActiveButton(null);
-            break;
-        case netgis.Modes.VIEW:
-            this.setActiveButton(netgis.Commands.VIEW);
-            break;
-        case netgis.Modes.ZOOM_BOX:
-            this.setActiveButton(netgis.Commands.ZOOM_BOX);
-            break;
-        case netgis.Modes.MEASURE_LINE:
-            this.setActiveButton(netgis.Commands.MEASURE_LINE);
-            break;
-        case netgis.Modes.MEASURE_AREA:
-            this.setActiveButton(netgis.Commands.MEASURE_AREA);
-            break;
-        case netgis.Modes.DRAW_POINTS:
-            this.setActiveButton(netgis.Commands.DRAW_POINTS);
-            this.showBottom(this.bottomPanels.drawPoints, "Punkte zeichnen");
-            break;
-        case netgis.Modes.DRAW_LINES:
-            this.setActiveButton(netgis.Commands.DRAW_LINES);
-            this.showBottom(this.bottomPanels.drawLines, "Linien zeichnen");
-            break;
-        case netgis.Modes.DRAW_POLYGONS:
-            this.setActiveButton(netgis.Commands.DRAW_POLYGONS);
-            this.showBottom(this.bottomPanels.drawPolygons, "Polygone zeichnen");
-            break;
-        case netgis.Modes.MODIFY_FEATURES:
-            this.setActiveButton(netgis.Commands.MODIFY_FEATURES);
-            this.showBottom(this.bottomPanels.modifyFeatures, "Verschieben");
-            break;
-        case netgis.Modes.DELETE_FEATURES:
-            this.setActiveButton(netgis.Commands.DELETE_FEATURES);
-            break;
-        case netgis.Modes.BUFFER_FEATURES:
-            this.setActiveButton(netgis.Commands.BUFFER_FEATURES);
-            this.showBottom(this.bottomPanels.bufferFeatures, "Puffern");
-            break;
-        case netgis.Modes.BUFFER_FEATURES_EDIT:
-            this.setActiveButton(netgis.Commands.BUFFER_FEATURES);
-            this.showBottom(this.bottomPanels.bufferFeatures, "Puffern");
-            this.onBufferFeaturesChange();
-            break;
-        case netgis.Modes.CUT_FEATURES:
-        case netgis.Modes.CUT_FEATURE_DRAW:
-            this.setActiveButton(netgis.Commands.CUT_FEATURES);
-    }
-};
-netgis.Toolbox.prototype.onTopResize = function (a) {
-    if (!this.bottom.classList.contains("netgis-hide")) {
-        a = this.top.getBoundingClientRect();
-        var b = this.top.parentNode.getBoundingClientRect();
-        this.bottom.style.top = a.bottom - b.top + "px";
-    }
-};
-netgis.Toolbox.prototype.onBottomHeaderClick = function (a) {
-    netgis.util.invoke(this.panel.container, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW });
-};
-netgis.Toolbox.prototype.onButtonClick = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id");
-    netgis.util.invoke(a, netgis.Events.TOOLBOX_BUTTON_CLICK, { id: b });
-    netgis.Client.handleCommand(a, b);
-};
-netgis.Toolbox.prototype.onDrawSnapToggle = function (a) {
-    var b = a.currentTarget,
-        c = b.parentNode.parentNode;
-    a = b.checked;
-    netgis.util.invoke(b, netgis.Events.MAP_SNAP_TOGGLE, { on: a });
-    b = [];
-    c === this.bottomPanels.drawPoints && (b.push(this.bottomPanels.drawLines), b.push(this.bottomPanels.drawPolygons), b.push(this.bottomPanels.modifyFeatures));
-    c === this.bottomPanels.drawLines && (b.push(this.bottomPanels.drawPoints), b.push(this.bottomPanels.drawPolygons), b.push(this.bottomPanels.modifyFeatures));
-    c === this.bottomPanels.drawPolygons && (b.push(this.bottomPanels.drawPoints), b.push(this.bottomPanels.drawLines), b.push(this.bottomPanels.modifyFeatures));
-    c === this.bottomPanels.modifyFeatures && (b.push(this.bottomPanels.drawPoints), b.push(this.bottomPanels.drawLines), b.push(this.bottomPanels.drawPolygons));
-    for (c = 0; c < b.length; c++) b[c].getElementsByTagName("input")[0].checked = a;
-};
-netgis.Toolbox.prototype.onDrawBufferToggle = function (a) {
-    a = a.currentTarget;
-    var b = a.checked;
-    this.showDrawBufferOptions(b);
-    var c = this.bottomPanels.drawPoints.getElementsByTagName("input"),
-        d = Number.parseFloat(c[2].value);
-    c = Number.parseInt(c[3].value);
-    netgis.util.invoke(a, netgis.Events.DRAW_BUFFER_TOGGLE, { on: b, radius: d, segments: c });
-};
-netgis.Toolbox.prototype.onDrawBufferChange = function (a) {
-    a = a.currentTarget.parentNode.parentNode;
-    var b = a.getElementsByTagName("input"),
-        c = b[1].checked,
-        d = Number.parseFloat(b[2].value),
-        e = Number.parseInt(b[3].value);
-    netgis.util.invoke(this.bottomPanels.drawPoints, netgis.Events.DRAW_BUFFER_CHANGE, { on: c, radius: d, segments: e });
-    if (a === this.bottomPanels.drawPoints) var f = this.bottomPanels.drawLines;
-    a === this.bottomPanels.drawLines && (f = this.bottomPanels.drawPoints);
-    f && ((b = f.getElementsByTagName("input")), (b[1].checked = c), (b[2].value = d), (b[3].value = e));
-};
-netgis.Toolbox.prototype.onBufferFeaturesChange = function (a) {
-    var b = this.bottomPanels.bufferFeatures.getElementsByTagName("input");
-    a = Number.parseFloat(b[0].value);
-    b = Number.parseInt(b[1].value);
-    netgis.util.invoke(this.bottomPanels.bufferFeatures, netgis.Events.BUFFER_CHANGE, { radius: a, segments: b });
-};
-netgis.Toolbox.prototype.onBufferFeaturesAccept = function (a) {
-    var b = this.bottomPanels.bufferFeatures.getElementsByTagName("input");
-    a = Number.parseFloat(b[0].value);
-    b = Number.parseInt(b[1].value);
-    netgis.util.invoke(this.bottomPanels.bufferFeatures, netgis.Events.BUFFER_ACCEPT, { radius: a, segments: b });
-    netgis.util.invoke(this.bottomPanels.bufferFeatures, netgis.Events.CLIENT_SET_MODE, { mode: netgis.Modes.VIEW });
-};
-netgis = netgis || {};
-netgis.Tree = function () {
-    this.initElements();
-};
-netgis.Tree.prototype.initElements = function () {
-    var a = document.createElement("ul");
-    a.className = "netgis-tree";
-    this.container = a;
-};
-netgis.Tree.prototype.attachTo = function (a) {
-    a.appendChild(this.container);
-};
-netgis.Tree.prototype.clear = function () {
-    this.container.innerHTML = "";
-};
-netgis.Tree.prototype.addFolder = function (a, b, c, d, e) {
-    var f = document.createElement("li");
-    f.className = "netgis-folder";
-    f.setAttribute("data-id", b);
-    b = document.createElement("details");
-    f.appendChild(b);
-    var g = document.createElement("summary");
-    g.className = "netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";
-    g.innerHTML = "<i class='netgis-icon netgis-hide-open fas fa-folder'></i><i class='netgis-icon netgis-show-open fas fa-folder-open'></i><span>" + c + "</span>";
-    b.appendChild(g);
-    c = document.createElement("label");
-    g.appendChild(c);
-    g = document.createElement("input");
-    g.setAttribute("type", "checkbox");
-    g.onchange = this.onFolderChange.bind(this);
-    c.appendChild(g);
-    !0 === e && f.classList.add("netgis-nocheck");
-    e = document.createElement("ul");
-    b.appendChild(e);
-    a = a ? a.getElementsByTagName("ul")[0] : this.container;
-    d ? a.insertBefore(f, a.firstChild) : a.appendChild(f);
-    return f;
-};
-netgis.Tree.prototype.addCheckbox = function (a, b, c, d, e, f) {
-    var g = document.createElement("li");
-    g.className = "netgis-item";
-    var h = document.createElement("label");
-    h.className = "netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";
-    h.innerHTML = "<span>" + c + "</span>";
-    g.appendChild(h);
-    c = document.createElement("input");
-    c.setAttribute("type", "checkbox");
-    c.setAttribute("data-id", b);
-    d && (c.checked = d);
-    c.onchange = this.onItemChange.bind(this);
-    h.insertBefore(c, h.firstChild);
-    f && this.addItemDetails(g, b, f);
-    a = a ? a.getElementsByTagName("ul")[0] : this.container;
-    e ? a.insertBefore(g, a.firstChild) : a.appendChild(g);
-    return g;
-};
-netgis.Tree.prototype.addRadioButton = function (a, b, c, d, e) {
-    var f = document.createElement("li");
-    f.className = "netgis-item";
-    var g = document.createElement("label");
-    g.className = "netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";
-    g.innerHTML = "<span>" + c + "</span>";
-    f.appendChild(g);
-    c = a ? "radio-" + a.getAttribute("data-id") : "radio-noname";
-    var h = document.createElement("input");
-    h.setAttribute("type", "radio");
-    h.setAttribute("name", c);
-    h.setAttribute("value", "radio-" + b);
-    h.setAttribute("data-id", b);
-    d && (h.checked = d);
-    h.onchange = this.onItemChange.bind(this);
-    g.insertBefore(h, g.firstChild);
-    e && this.addItemDetails(f, b, e);
-    a ? a.getElementsByTagName("ul")[0].appendChild(f) : this.container.appendChild(f);
-    return f;
-};
-netgis.Tree.prototype.addButton = function (a, b, c, d) {
-    var e = document.createElement("li"),
-        f = document.createElement("button");
-    f.innerHTML = c;
-    f.className = "netgis-button netgis-color-e netgis-hover-d netgis-clip-text";
-    f.setAttribute("type", "button");
-    e.appendChild(f);
-    b && f.setAttribute("data-id", b);
-    d && (f.onclick = d);
-    f.addEventListener("click", this.onButtonClick.bind(this));
-    a ? a.getElementsByTagName("ul")[0].appendChild(e) : this.container.appendChild(e);
-    return e;
-};
-netgis.Tree.prototype.addSpace = function (a) {
-    var b = document.createElement("li");
-    b.className = "netgis-space";
-    a ? a.getElementsByTagName("ul")[0].appendChild(b) : this.container.appendChild(b);
-    return b;
-};
-netgis.Tree.prototype.addItemDetails = function (a, b, c) {
-    var d = document.createElement("details");
-    d.className = "netgis-noselect";
-    var e = document.createElement("summary");
-    e.className = "netgis-clickable netgis-hover-d";
-    e.innerHTML = "<i class='fas fa-angle-down'></i>";
-    d.appendChild(e);
-    e = document.createElement("div");
-    d.appendChild(e);
-    for (var f = 0; f < c.length; f++) {
-        var g = c[f],
-            h = document.createElement("label");
-        e.className = "netgis-hover-d";
-        switch (g.type) {
-            case "slider":
-                var k = document.createElement("span");
-                k.className = "netgis-clip-text";
-                k.innerHTML = g.title;
-                h.appendChild(k);
-                k = document.createElement("span");
-                h.appendChild(k);
-                var l = document.createElement("input");
-                l.setAttribute("type", "range");
-                l.setAttribute("min", 0);
-                l.setAttribute("max", 100);
-                l.setAttribute("step", 1);
-                l.setAttribute("value", g.val);
-                l.setAttribute("data-id", b);
-                l.addEventListener("change", this.onItemSliderChange.bind(this));
-                l.addEventListener("input", this.onItemSliderChange.bind(this));
-                k.appendChild(l);
-        }
-        e.appendChild(h);
-    }
-    a.appendChild(d);
-};
-netgis.Tree.prototype.getFolder = function (a) {
-    for (var b = this.container.getElementsByClassName("netgis-folder"), c = 0; c < b.length; c++) {
-        var d = b[c];
-        if (d.getAttribute("data-id") === a) return d;
-    }
-    return null;
-};
-netgis.Tree.prototype.getItem = function (a) {
-    for (var b = this.container.getElementsByTagName("input"), c = 0; c < b.length; c++) {
-        var d = b[c];
-        if (d.getAttribute("data-id") === a) return d;
-    }
-    return null;
-};
-netgis.Tree.prototype.setFolderOpen = function (a, b) {
-    var c = this.container.getElementsByClassName("netgis-folder");
-    a = a.toString();
-    for (var d = 0; d < c.length; d++) {
-        var e = c[d],
-            f = e.getElementsByTagName("details")[0];
-        e.getAttribute("data-id") === a && (!0 === b ? f.setAttribute("open", "") : f.removeAttribute("open"));
-    }
-};
-netgis.Tree.prototype.setItemChecked = function (a, b, c) {
-    var d = this.container.getElementsByClassName("netgis-item");
-    a = a.toString();
-    for (var e = 0; e < d.length; e++) {
-        var f = d[e],
-            g = f.getElementsByTagName("input")[0];
-        if (g.getAttribute("data-id") === a) {
-            if ("radio" === g.getAttribute("type")) {
-                f = f.parentNode.getElementsByTagName("input");
-                for (var h = 0; h < f.length; h++) {
-                    var k = f[h];
-                    k !== g && "radio" === k.getAttribute("type") && !1 !== k.checked && ((k.checked = !1), netgis.util.invoke(g, netgis.Events.TREE_ITEM_CHANGE, { id: k.getAttribute("data-id"), checked: !1 }));
-                }
-            }
-            c ? (g.checked = b) : g.checked !== b && g.click();
-        }
-    }
-};
-netgis.Tree.prototype.setFolderParent = function (a, b) {
-    var c = a.parentNode;
-    c && c.removeChild(a);
-    null !== b ? b.getElementsByTagName("ul")[0].appendChild(a) : this.container.appendChild(a);
-};
-netgis.Tree.prototype.updateFolderChecks = function () {
-    for (var a = this.container.getElementsByClassName("netgis-folder"), b = 0; b < a.length; b++) this.updateFolderCheck(a[b]);
-};
-netgis.Tree.prototype.updateFolderCheck = function (a) {
-    a || (a = this.container);
-    for (var b = a.getElementsByClassName("netgis-item"), c = 0, d = 0; d < b.length; d++) {
-        var e = b[d].getElementsByTagName("input")[0];
-        e.checked && c++;
-    }
-    e = a.getElementsByTagName("input")[0];
-    d = 0;
-    0 < c && (d = 1);
-    c === b.length && (d = 2);
-    switch (d) {
-        case 0:
-            e.checked = !1;
-            e.classList.remove("netgis-partial");
-            break;
-        case 1:
-            e.checked = !0;
-            e.classList.add("netgis-partial");
-            break;
-        case 2:
-            (e.checked = !0), e.classList.remove("netgis-partial");
-    }
-    (a = a.parentElement) && a !== this.container && (a = a.parentElement.parentElement) && -1 !== a.className.search("netgis-folder") && this.updateFolderCheck(a);
-};
-netgis.Tree.prototype.onFolderChange = function (a) {
-    var b = a.currentTarget;
-    a = b.checked;
-    b = b.parentElement.parentElement.parentElement.parentElement;
-    for (var c = b.getElementsByTagName("input"), d = 1; d < c.length; d++) {
-        var e = c[d];
-        e.checked !== a && e.click();
-    }
-    this.updateFolderCheck(b);
-    a = b.parentElement.parentElement.parentElement;
-    -1 !== a.className.search("netgis-folder") && this.updateFolderCheck(a);
-};
-netgis.Tree.prototype.onItemChange = function (a) {
-    a = a.currentTarget;
-    var b = a.checked,
-        c = a.getAttribute("data-id"),
-        d = a.parentElement.parentElement.parentElement.parentElement.parentElement;
-    if ("radio" === a.getAttribute("type"))
-        for (var e = a.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("input"), f = 0; f < e.length; f++) {
-            var g = e[f].getAttribute("data-id");
-            g && g !== c && netgis.util.invoke(a, netgis.Events.TREE_ITEM_CHANGE, { id: g, checked: !1 });
-        }
-    netgis.util.invoke(a, netgis.Events.TREE_ITEM_CHANGE, { id: c, checked: b });
-    -1 !== d.className.search("netgis-folder") && this.updateFolderCheck(d);
-};
-netgis.Tree.prototype.onRadioChange = function (a) {
-    a = a.currentTarget;
-    var b = a.checked,
-        c = a.getAttribute("data-id"),
-        d = Number.parseInt(c);
-    Number.isNaN(d) || (c = d);
-    d = a.parentElement.parentElement.parentElement.parentElement.parentElement;
-    netgis.util.invoke(a, netgis.Events.TREE_ITEM_CHANGE, { id: c, checked: b });
-    -1 !== d.className.search("netgis-folder") && this.updateFolderCheck(d);
-};
-netgis.Tree.prototype.onButtonClick = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id");
-    netgis.util.invoke(a, netgis.Events.TREE_BUTTON_CLICK, { id: b });
-};
-netgis.Tree.prototype.onItemSliderChange = function (a) {
-    a = a.currentTarget;
-    var b = a.getAttribute("data-id");
-    netgis.util.invoke(a, netgis.Events.TREE_ITEM_SLIDER_CHANGE, { id: b, val: Number.parseFloat(a.value) });
-};
-netgis = netgis || {};
-netgis.util = (function () {
-    var a = function (a, b) {
-            for (var c in a) a.hasOwnProperty(c) && b(c, a[c]);
-        },
-        b = function () {
-            return navigator.language || "de-DE";
-        };
-    return {
-        isDefined: function (a) {
-            return "undefined" !== typeof a;
-        },
-        isObject: function (a) {
-            return "object" !== typeof a || Array.isArray(a) || null === a ? !1 : !0;
-        },
-        isString: function (a) {
-            return "string" === typeof a || a instanceof String;
-        },
-        clone: function (a) {
-            return JSON.parse(JSON.stringify(a));
-        },
-        stringToID: function (a, b) {
-            b || (b = "-");
-            a = a.trim();
-            a = a.toLowerCase();
-            a = this.replace(a, " ", b);
-            a = this.replace(a, "\n", b);
-            a = this.replace(a, "\t", b);
-            a = this.replace(a, "\\.", b);
-            a = this.replace(a, "\\,", b);
-            a = this.replace(a, "\\!", b);
-            a = this.replace(a, "\\?", b);
-            a = this.replace(a, ":", b);
-            a = this.replace(a, ";", b);
-            a = this.replace(a, '"', b);
-            a = this.replace(a, "'", b);
-            a = this.replace(a, "\\\u00a7", b);
-            a = this.replace(a, "\\$", b);
-            a = this.replace(a, "\\%", b);
-            a = this.replace(a, "\\&", b);
-            a = this.replace(a, "\\/", b);
-            a = this.replace(a, "\\\\", b);
-            a = this.replace(a, "\\(", b);
-            a = this.replace(a, "\\)", b);
-            a = this.replace(a, "\\{", b);
-            a = this.replace(a, "\\}", b);
-            a = this.replace(a, "\\[", b);
-            a = this.replace(a, "\\]", b);
-            a = this.replace(a, "=", b);
-            a = this.replace(a, "\\+", b);
-            a = this.replace(a, "\\*", b);
-            a = this.replace(a, "\\~", b);
-            a = this.replace(a, "\\^", b);
-            a = this.replace(a, "\\\u00b0", b);
-            a = this.replace(a, "\u00b2", b);
-            a = this.replace(a, "\u00b3", b);
-            a = this.replace(a, "\\#", b);
-            a = this.replace(a, "\\<", b);
-            a = this.replace(a, "\\>", b);
-            a = this.replace(a, "\\|", b);
-            a = this.replace(a, "\\@", b);
-            a = this.replace(a, "\u20ac", b);
-            a = this.replace(a, "\u00b5", b);
-            a = this.trim(a, b);
-            a = this.replace(a, "\u00e4", "ae");
-            a = this.replace(a, "\u00f6", "oe");
-            a = this.replace(a, "\u00fc", "ue");
-            a = this.replace(a, "\u00df", "ss");
-            a = this.replace(a, "\u00e1", "a");
-            a = this.replace(a, "\u00e0", "a");
-            a = this.replace(a, "\u00e2", "a");
-            a = this.replace(a, "\u00e9", "e");
-            a = this.replace(a, "\u00e8", "e");
-            a = this.replace(a, "\u00ea", "e");
-            a = this.replace(a, "\u00ed", "i");
-            a = this.replace(a, "\u00ec", "i");
-            a = this.replace(a, "\u00ee", "i");
-            a = this.replace(a, "\u00f3", "o");
-            a = this.replace(a, "\u00f2", "o");
-            a = this.replace(a, "\u00f4", "o");
-            a = this.replace(a, "\u00fa", "u");
-            a = this.replace(a, "\u00f9", "u");
-            return (a = this.replace(a, "\u00fb", "u"));
-        },
-        replace: function (a, b, e) {
-            return a.replace(new RegExp(b, "g"), e);
-        },
-        trim: function (a, b) {
-            a = a.replace(new RegExp("^" + b + "+"), "");
-            return (a = a.replace(new RegExp(b + "+$"), ""));
-        },
-        foreach: a,
-        template: function (b, d) {
-            a(d, function (a, c) {
-                b = b.replace(new RegExp("{" + a + "}", "g"), c);
-            });
-            return b;
-        },
-        newlines: function (a) {
-            return a.replace(/\n/g, "<br />");
-        },
-        create: function (a) {
-            var b = document.createElement("tbody");
-            b.innerHTML = a;
-            return b.children[0];
-        },
-        size: function (a) {
-            a = new TextEncoder().encode(JSON.stringify(a)).length;
-            var b = a / 1024;
-            return { bytes: a, kilobytes: b, megabytes: b / 1024 };
-        },
-        request: function (a, b, e) {
-            var c = new XMLHttpRequest();
-            e && (c._requestData = e);
-            c.onload = function () {
-                b(this.responseText, this._requestData, this);
-            };
-            c.withCredentials = !1;
-            c.open("GET", a, !0);
-            c.send();
-            return c;
-        },
-        downloadJSON: function (a, b) {
-            a = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(a));
-            var c = document.createElement("a");
-            c.setAttribute("href", a);
-            c.setAttribute("download", b);
-            document.body.appendChild(c);
-            c.click();
-            c.remove();
-        },
-        padstr: function (a, b) {
-            for (a = a.toString(); a.length < b; ) a = "0" + a;
-            return a;
-        },
-        merge: function (a, b) {
-            return Object.assign(a, b);
-        },
-        getTimeStamp: function (a) {
-            var b = new Date();
-            if (!0 === a) {
-                a = b.getFullYear();
-                var c = b.getMonth() + 1,
-                    f = b.getDate(),
-                    g = b.getHours(),
-                    h = b.getMinutes();
-                b = b.getSeconds();
-                10 > c && (c = "0" + c);
-                10 > f && (f = "0" + f);
-                10 > g && (g = "0" + g);
-                10 > h && (h = "0" + h);
-                10 > b && (b = "0" + b);
-                a = [a, c, f, "_", g, h, b].join("");
-            } else (a = b.getDate() + "." + (b.getMonth() + 1) + "." + b.getFullYear()), (a += " " + b.getHours() + ":" + b.getMinutes());
-            return a;
-        },
-        getUserLanguage: b,
-        getFileExtension: function (a) {
-            a = a.split(".");
-            return 1 >= a.length ? "" : a[a.length - 1];
-        },
-        formatDistance: function (a) {
-            return 100 < a ? Math.round((a / 1e3) * 100) / 100 + " km" : Math.round(100 * a) / 100 + " m";
-        },
-        formatLength: function (a, b) {
-            var c = 1e3 < a;
-            a = c ? (b ? Math.round((a / 1e3) * 1e3) / 1e3 : Math.round(a / 1e3)) : b ? Math.round(100 * a) / 100 : Math.round(a);
-            0 === a && (c = !1);
-            return a + (c ? " km" : " m");
-        },
-        formatArea: function (a, d, e, f) {
-            a = (e = a > (e || 1e5)) ? (d ? Math.round((a / 1e6) * 1e3) / 1e3 : Math.round(a / 1e6)) : d ? Math.round(100 * a) / 100 : Math.round(a);
-            0 === a && (e = !1);
-            a = a.toLocaleString(b());
-            return a + (e ? " km\u00b2" : " m\u00b2");
-        },
-        invoke: function (a, b, e) {
-            a.dispatchEvent(new CustomEvent(b, { bubbles: !0, detail: e }));
-        },
-        handler: function (a, b) {
-            return function (c) {
-                b || (b = c);
-                netgis.util.invoke(this, a, b);
-            };
-        },
-    };
-})();
-netgis = netgis || {};
-netgis.WMC = function () {};
-netgis.WMC.prototype.requestContext = function (a, b) {
-    this.callback = b;
-    netgis.util.request(a, this.onContextResponse.bind(this));
-};
-netgis.WMC.prototype.onContextResponse = function (a) {
-    a = JSON.parse(a);
-    this.fromJSON(a);
-};
-netgis.WMC.prototype.requestLayers = function (a) {
-    a = "./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_callMetadata.php?languageCode=de&resultTarget=web&maxResults=40&resourceIds=" + a.join(",");
-    netgis.util.request(a, this.onLayersResponse.bind(this));
-};
-netgis.WMC.prototype.onLayersResponse = function (a) {
-    a = JSON.parse(a).wms.srv;
-    this.services = [];
-    for (var b = 0; b < a.length; b++) {
-        var c = a[b],
-            d = { id: c.id, title: c.title, url: c.getMapUrl };
-        d.layers = this.parseLayers(c.layer);
-        this.services.push(d);
-    }
-    var e = this.layers;
-    this.services.sort(function (a, b) {
-        a = Number.parseInt(a.layers[0].id);
-        b = Number.parseInt(b.layers[0].id);
-        for (var c = null, d = null, f = 0; f < e.length; f++) e[f].id === a && (c = f), e[f].id === b && (d = f);
-        return c < d ? -1 : c > d ? 1 : 0;
-    });
-    this.callback && this.callback({ config: this.toConfig() });
-};
-netgis.WMC.prototype.parseLayers = function (a) {
-    var b = [];
-    if (a)
-        for (var c = 0; c < a.length; c++) {
-            var d = a[c],
-                e = { id: d.id, title: d.title, name: d.name, legendURL: d.getLegendGraphicUrl, legendFormat: d.getLegendGraphicUrlFormat, queryable: d.layerQueryable | d.queryable, bbox: d.bbox };
-            e.layers = this.parseLayers(d.layer);
-            b.push(e);
-        }
-    this.sortLayers(b);
-    return b;
-};
-netgis.WMC.prototype.sortLayers = function (a) {
-    var b = this.layers;
-    a.sort(function (a, d) {
-        var c = null,
-            f = null;
-        a = Number.parseInt(a.id);
-        d = Number.parseInt(d.id);
-        for (var g = 0; g < b.length; g++) b[g].id === a && (c = b[g].pos), b[g].id === d && (f = b[g].pos);
-        return c < f ? 1 : c > f ? -1 : 0;
-    });
-};
-netgis.WMC.prototype.fromJSON = function (a) {
-    var b = a.wmc;
-    this.id = b.id;
-    this.title = b.title;
-    this.crs = b.crs;
-    var c = b.bbox;
-    c = c.split(",");
-    for (b = 0; b < c.length; b++) c[b] = Number.parseFloat(c[b]);
-    this.bbox = c;
-    this.layers = [];
-    c = [];
-    a = a.layerList;
-    for (b = 0; b < a.length; b++) {
-        var d = a[b];
-        this.layers.push({ id: d.layerId, active: d.active, opacity: d.opacity, pos: d.layerPos });
-        c.push(d.layerId);
-    }
-    this.requestLayers(c);
-};
-netgis.WMC.prototype.toConfig = function () {
-    for (var a = { map: { attribution: this.title + ", GeoPortal RLP", projection: this.crs, bbox: this.bbox } }, b = [], c = [], d = this.layers.length, e = 0; e < this.services.length; e++) {
-        var f = this.services[e],
-            g = f.layers[0],
-            h = { id: g.id, title: g.title, parent: -1 };
-        b.unshift(h);
-        h = h.id;
-        for (var k = 0; k < g.layers.length; k++) {
-            for (var l = g.layers[k], m = null, n = 0; n < this.layers.length; n++)
-                if (this.layers[n].id === Number.parseInt(l.id)) {
-                    m = this.layers[n];
-                    break;
-                }
-            c.push({ id: l.id, title: l.title, folder: h, active: m.active, type: "WMS", url: f.url, name: l.name, order: d });
-            --d;
-        }
-    }
-    a.folders = b;
-    a.layers = c;
-    return a;
-};
-netgis = netgis || {};
-netgis.WMC = function () {};
-netgis.WMC.prototype.requestContext = function (a, b) {
-    this.callback = b;
-    netgis.util.request(a, this.onContextResponse.bind(this));
-};
-netgis.WMC.prototype.onContextResponse = function (a) {
-    a = JSON.parse(a);
-    console.info("Context Response:", a);
-    this.fromJSON(a);
-};
-netgis.WMC.prototype.requestLayers = function (a) {
-    a = "./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_callMetadata.php?languageCode=de&resultTarget=web&maxResults=40&resourceIds=" + a.join(",");
-    netgis.util.request(a, this.onLayersResponse.bind(this));
-};
-netgis.WMC.prototype.onLayersResponse = function (a) {
-    a = JSON.parse(a);
-    console.info("Layers Response:", a);
-    a = a.wms.srv;
-    this.services = [];
-    for (var b = 0; b < a.length; b++) {
-        var c = a[b],
-            d = { id: c.id, title: c.title, url: c.getMapUrl };
-        d.layers = this.parseLayers(c.layer);
-        this.services.push(d);
-    }
-    var e = this.layers;
-    this.services.sort(function (a, b) {
-        a = Number.parseInt(a.layers[0].id);
-        b = Number.parseInt(b.layers[0].id);
-        for (var c = null, d = null, f = 0; f < e.length; f++) e[f].id === a && (c = f), e[f].id === b && (d = f);
-        return c < d ? -1 : c > d ? 1 : 0;
-    });
-    this.callback && this.callback({ config: this.toConfig() });
-};
-netgis.WMC.prototype.parseLayers = function (a) {
-    var b = [];
-    if (a)
-        for (var c = 0; c < a.length; c++) {
-            var d = a[c],
-                e = { id: d.id, title: d.title, name: d.name, legendURL: d.getLegendGraphicUrl, legendFormat: d.getLegendGraphicUrlFormat, queryable: d.layerQueryable | d.queryable, bbox: d.bbox };
-            e.layers = this.parseLayers(d.layer);
-            b.push(e);
-        }
-    this.sortLayers(b);
-    return b;
-};
-netgis.WMC.prototype.sortLayers = function (a) {
-    var b = this.layers;
-    a.sort(function (a, d) {
-        var c = null,
-            f = null;
-        a = Number.parseInt(a.id);
-        d = Number.parseInt(d.id);
-        for (var g = 0; g < b.length; g++) b[g].id === a && (c = b[g].pos), b[g].id === d && (f = b[g].pos);
-        return c < f ? 1 : c > f ? -1 : 0;
-    });
-};
-netgis.WMC.prototype.fromJSON = function (a) {
-    var b = a.wmc;
-    this.id = b.id;
-    this.title = b.title;
-    this.crs = b.crs;
-    var c = b.bbox;
-    c = c.split(",");
-    for (b = 0; b < c.length; b++) c[b] = Number.parseFloat(c[b]);
-    this.bbox = c;
-    this.layers = [];
-    c = [];
-    a = a.layerList;
-    for (b = 0; b < a.length; b++) {
-        var d = a[b];
-        this.layers.push({ id: d.layerId, active: d.active, opacity: d.opacity, pos: d.layerPos });
-        c.push(d.layerId);
-    }
-    this.requestLayers(c);
-    console.info("WMC Layers:", this.layers);
-};
-netgis.WMC.prototype.toConfig = function () {
-    for (
-        var a = {
-                title: "<b>GeoPortal</b>",
-                modules: { search_parcel: !1 },
-                map: { attribution: this.title + ", GeoPortal RLP", projection: this.crs, bbox: this.bbox, scalebar: !0 },
-                search: {
-                    url:
-                        "./proxy.php?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={q}&name_startsWith={q}",
-                },
-            },
-            b = [],
-            c = [],
-            d = this.layers.length,
-            e = 0;
-        e < this.services.length;
-        e++
-    ) {
-        var f = this.services[e],
-            g = f.layers[0];
-        b.push({ id: g.id, title: g.title, parent: -1 });
-        for (var h = b.length - 1, k = 0; k < g.layers.length; k++) {
-            for (var l = g.layers[k], m = null, n = 0; n < this.layers.length; n++)
-                if (this.layers[n].id === Number.parseInt(l.id)) {
-                    m = this.layers[n];
-                    break;
-                }
-            c.push({ id: l.id, title: l.title, folder: h, active: m.active, type: "WMS", url: f.url, name: l.name, order: d });
-            --d;
-        }
-    }
-    a.folders = b;
-    a.layers = c;
-    return a;
-};
+var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
+$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Number.parseFloat",function(a){return a||parseFloat},"es6","es3");$jscomp.polyfill("Number.parseInt",function(a){return a||parseInt},"es6","es3");
+$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.SymbolClass=function(a,b){this.$jscomp$symbol$id_=a;$jscomp.defineProperty(this,"description",{configurable:!0,writable:!0,value:b})};
+$jscomp.SymbolClass.prototype.toString=function(){return this.$jscomp$symbol$id_};$jscomp.Symbol=function(){function a(c){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return new $jscomp.SymbolClass($jscomp.SYMBOL_PREFIX+(c||"")+"_"+b++,c)}var b=0;return a}();
+$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("Symbol.iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this))}});$jscomp.initSymbolIterator=function(){}};
+$jscomp.initSymbolAsyncIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.asyncIterator;a||(a=$jscomp.global.Symbol.asyncIterator=$jscomp.global.Symbol("Symbol.asyncIterator"));$jscomp.initSymbolAsyncIterator=function(){}};$jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[$jscomp.global.Symbol.iterator]=function(){return this};return a};
+$jscomp.iteratorFromArray=function(a,b){$jscomp.initSymbolIterator();a instanceof String&&(a+="");var c=0,d={next:function(){if(c<a.length){var e=c++;return{value:b(e,a[e]),done:!1}}d.next=function(){return{done:!0,value:void 0}};return d.next()}};d[Symbol.iterator]=function(){return d};return d};$jscomp.polyfill("Array.prototype.values",function(a){return a?a:function(){return $jscomp.iteratorFromArray(this,function(a,c){return c})}},"es8","es3");
+$jscomp.polyfill("Number.isNaN",function(a){return a?a:function(a){return"number"===typeof a&&isNaN(a)}},"es6","es3");$jscomp.owns=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};$jscomp.assign="function"==typeof Object.assign?Object.assign:function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(d)for(var e in d)$jscomp.owns(d,e)&&(a[e]=d[e])}return a};$jscomp.polyfill("Object.assign",function(a){return a||$jscomp.assign},"es6","es3");var netgis=netgis||{};
+netgis.Attribution=function(a){this.config=a;this.layers=this.client=null;this.items=[];this.initElements(a)};netgis.Attribution.prototype.initElements=function(a){this.container=document.createElement("section");this.container.className="netgis-attribution netgis-text-a";a.attribution&&a.attribution.prefix&&this.items.push(a.attribution.prefix);this.update()};
+netgis.Attribution.prototype.attachTo=function(a){a.appendChild(this.container);a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE,this.onMapLayerToggle.bind(this));a.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE,this.onEditLayerChange.bind(this))};netgis.Attribution.prototype.update=function(){var a="&copy; "+this.items.join(", ");this.appendix&&(a+=", "+this.appendix);this.container.innerHTML=a};
+netgis.Attribution.prototype.add=function(a){for(var b=0;b<this.items.length;b++)if(this.items[b]===a)return;this.items.push(a);this.update()};netgis.Attribution.prototype.remove=function(a){for(var b=0;b<this.items.length;b++)if(this.items[b]===a){this.items.splice(b,1);break}this.update()};netgis.Attribution.prototype.onMapLayerToggle=function(a){a=a.detail;for(var b=this.config.layers,c=null,d=0;d<b.length;d++){var e=b[d];e.id===a.id&&(c=e.attribution)}c&&(a.on?this.add(c):this.remove(c))};
+netgis.Attribution.prototype.onContextUpdate=function(a){this.layers=[];for(var b=0;b<a.layers.length;b++){var c=a.layers[b];c.attribution&&0<c.attribution.length&&(this.layers[c.id]=c.attribution)}for(b=0;b<a.layers.length;b++)if(c=a.layers[b],c.active)this.onLayerShow({id:c.id})};netgis.Attribution.prototype.onLayerShow=function(a){if(a=this.layers[a.id]){for(var b=0;b<this.items.length;b++)if(this.items[b]===a)return;this.items.push(a);this.update()}};
+netgis.Attribution.prototype.onLayerHide=function(a){if(a=this.layers[a.id]){for(var b=0;b<this.items.length;b++)if(this.items[b]===a){this.items.splice(b,1);break}this.update()}};netgis.Attribution.prototype.onEditLayerChange=function(a){a=a.detail.geojson.area;for(var b=0;b<this.items.length;b++)if(-1<this.items[b].search("Zeichnungsfl\u00e4che: ")){this.items.splice(b,1);break}this.appendix=a&&0<a?"<b>Zeichnungsfl\u00e4che: "+netgis.util.formatArea(a,!0)+"</b>":null;this.update()};netgis=netgis||{};netgis.Client=function(a,b){this.container=this.initContainer(a);this.config=b;netgis.util.isString(b)?(this.showLoader(!0),netgis.util.request(b,this.onConfigResponse.bind(this))):this.init(this.container,b)};
+netgis.Client.prototype.init=function(a,b){this.config=b;this.logEvents=!1;this.initParams(b);this.initConfig(b);this.initElements(a);this.initModules(b);this.initEvents();this.initOutput(b);a=new netgis.ContextMenu;a.attachTo(this.container);this.modules.contextmenu=a;this.popup=new netgis.Popup;this.popup.attachTo(this.container)};netgis.Client.prototype.initContainer=function(a){netgis.util.isString(a)&&(a=document.getElementById(a));a.classList.add("netgis-client","netgis-font");return a};
+netgis.Client.prototype.initParams=function(a){var b=window.location.search.substr(1);b=b.split("&");this.params={};for(var c=0;c<b.length;c++){var d=b[c].split("="),e=d[0].toLowerCase();d=d[1];e&&""!==e&&(this.params[e]=d)}for(e in this.params)switch(d=this.params[e],e){case "wmc_id":a.wmc&&(a.wmc.id=d)}};netgis.Client.prototype.initConfig=function(a){a.wmc&&a.wmc.url&&this.requestContextWMC(a.wmc.url,a.wmc.id);a.ows&&a.ows.url&&this.requestContextOWS(a.ows.url)};
+netgis.Client.prototype.initElements=function(a){if(a.hasAttribute("data-lon")&&a.hasAttribute("data-lat")){var b=Number.parseFloat(a.getAttribute("data-lon")),c=Number.parseFloat(a.getAttribute("data-lat"));this.config.map.center_lonlat=[b,c]}a.hasAttribute("data-zoom")&&(b=Number.parseFloat(a.getAttribute("data-zoom")),this.config.map.zoom=b);a.hasAttribute("data-bounds")&&(b=a.getAttribute("data-bounds"),this.config.tools.bounds=b);a.hasAttribute("data-editable")&&(b="true"===a.getAttribute("data-editable"),
+this.config.tools||(this.config.tools={}),this.config.tools.editable=b);this.container=a};netgis.Client.prototype.initOutput=function(a){if(a.output&&a.output.id){if((a=document.getElementById(a.output.id))&&a.value&&0<a.value.length){var b=JSON.parse(a.value);netgis.util.invoke(this.container,netgis.Events.MAP_EDIT_LAYER_LOADED,{geojson:b})}this.output=a}this.output||(this.output=document.createElement("input"),this.output.setAttribute("type","hidden"),this.output.className="netgis-storage",this.container.appendChild(this.output))};
+netgis.Client.prototype.initModules=function(a){this.modules={};if(a=a.modules)a.map&&this.addModule("map",netgis.Map),a.controls&&this.addModule("controls",netgis.Controls),a.attribution&&this.addModule("attribution",netgis.Attribution),a.info&&this.addModule("info",netgis.Info),a.menu&&this.addModule("menu",netgis.Menu),a.layertree&&this.addModule("layertree",netgis.LayerTree),a.searchplace&&this.addModule("searchplace",netgis.SearchPlace),a.searchparcel&&this.addModule("searchparcel",netgis.SearchParcel),
+a.toolbox&&this.addModule("toolbox",netgis.Toolbox),a["import"]&&this.addModule("import",netgis.Import),a["export"]&&this.addModule("export",netgis.Export),a.timeslider&&this.addModule("timeslider",netgis.TimeSlider)};
+netgis.Client.prototype.initEvents=function(){this.container.addEventListener(void 0,function(a){console.error("undefined event invoked",a)});for(var a in netgis.Events)this.container.addEventListener(netgis.Events[a],this.handleEvent.bind(this));this.container.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE,this.onMapEditLayerChange.bind(this))};
+netgis.Client.prototype.showLoader=function(a){this.loader||(this.loader=document.createElement("div"),this.loader.className="netgis-loader netgis-color-e netgis-text-a",this.loader.innerHTML="<i class='fas fa-cog'></i>",this.container.appendChild(this.loader));!1===a?this.loader.classList.add("netgis-hide"):this.loader.classList.remove("netgis-hide")};netgis.Client.prototype.handleEvent=function(a){var b=a.type;a=a.detail;!0===this.logEvents&&console.info("EVENT:",b,a)};
+netgis.Client.prototype.addModule=function(a,b){b=new b(this.config);b.attachTo&&b.attachTo(this.container);return this.modules[a]=b};netgis.Client.prototype.isMobile=function(){return netgis.util.isMobile(this.container)};netgis.Client.prototype.onConfigResponse=function(a){a=JSON.parse(a);this.init(this.container,a);this.showLoader(!1)};
+netgis.Client.prototype.requestContextWMC=function(a,b){if(-1<a.indexOf("{id}"))if(b)a=netgis.util.replace(a,"{id}",b);else{console.warn("No WMC id set in config for url",a);return}(new netgis.WMC).requestContext(a,this.onContextResponseWMC.bind(this))};
+netgis.Client.prototype.onContextResponseWMC=function(a){for(var b=0;b<a.config.layers.length;b++)this.config.layers.push(a.config.layers[b]);a.config.map.bbox&&(this.config.map.bbox=a.config.map.bbox);netgis.util.invoke(this.container,netgis.Events.CONTEXT_RESPONSE,{context:a})};netgis.Client.prototype.requestContextOWS=function(a){console.info("Request OWS:",a);netgis.util.request(a,this.onContextResponseOWS.bind(this))};
+netgis.Client.prototype.onContextResponseOWS=function(a){a=JSON.parse(a);console.info("OWS Response:",a);a=netgis.OWS.read(a,this);console.info("OWS Config:",a)};netgis.Client.prototype.onIconbarIconClick=function(a){switch(a.detail.id){case "home":a=this.config.layers;for(var b=0;b<a.length;b++){var c=a[b],d=c.id;!0===c.active?(this.modules.map.addLayer(d,c),this.modules.layertree.tree.setItemChecked(d,!0)):(this.modules.map.removeLayer(d),this.modules.layertree.tree.setItemChecked(d,!1))}}};
+netgis.Client.prototype.onIconbarItemClick=function(a){a=a.detail;for(var b=this.config.layers,c=0;c<b.length;c++){var d=b[c],e=d.id;"background"!==d.folder&&(e===a.id?(this.modules.map.addLayer(e,d),this.modules.layertree.tree.setItemChecked(e,!0)):(this.modules.map.removeLayer(e),this.modules.layertree.tree.setItemChecked(e,!1)))}};
+netgis.Client.prototype.onSwitcherButtonClick=function(a){a=a.detail;for(var b=this.config.switcher.buttons,c=this.config.layers,d=0;d<b.length;d++){var e=b[d].id;if(e===a.id)for(var f=0;f<c.length;f++){var g=c[f];g.id===e&&(this.modules.map.addLayer(e,g),this.modules.layertree.tree.setItemChecked(e,!0))}else this.modules.map.removeLayer(e),this.modules.layertree.tree.setItemChecked(e,!1)}0===this.modules.switcher.getIndex(a.id)&&this.modules.switcher.shift(1,0)};
+netgis.Client.prototype.onGeolocationToggle=function(a){this.modules.map.setGeolocMarkerVisible(a.detail.on)};netgis.Client.prototype.onGeolocationChange=function(a){a=a.detail;this.modules.map.zoomLonLat(a.lon,a.lat,this.config.geolocation.zoom);this.modules.map.setGeolocMarkerLonLat(a.lon,a.lat)};netgis.Client.prototype.onMapEditLayerChange=function(a){a=JSON.stringify(a.detail.geojson);this.output.value=a};
+netgis.Client.handleCommand=function(a,b){switch(b){case netgis.Commands.LAYERTREE:netgis.util.invoke(a,netgis.Events.LAYERTREE_TOGGLE,null);break;case netgis.Commands.SEARCHPLACE:netgis.util.invoke(a,netgis.Events.SEARCHPLACE_TOGGLE,null);break;case netgis.Commands.SEARCHPARCEL:netgis.util.invoke(a,netgis.Events.SEARCHPARCEL_TOGGLE,null);break;case netgis.Commands.TOOLBOX:netgis.util.invoke(a,netgis.Events.TOOLBOX_TOGGLE,null);break;case netgis.Commands.VIEW_PREV:netgis.util.invoke(a,netgis.Events.MAP_VIEW_PREV,
+null);break;case netgis.Commands.VIEW_NEXT:netgis.util.invoke(a,netgis.Events.MAP_VIEW_NEXT,null);break;case netgis.Commands.VIEW:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.VIEW});break;case netgis.Commands.ZOOM_BOX:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.ZOOM_BOX});break;case netgis.Commands.MEASURE_LINE:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.MEASURE_LINE});break;case netgis.Commands.MEASURE_AREA:netgis.util.invoke(a,
+netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.MEASURE_AREA});break;case netgis.Commands.MEASURE_CLEAR:netgis.util.invoke(a,netgis.Events.MEASURE_CLEAR,null);break;case netgis.Commands.DRAW_POINTS:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.DRAW_POINTS});break;case netgis.Commands.DRAW_LINES:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.DRAW_LINES});break;case netgis.Commands.DRAW_POLYGONS:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.DRAW_POLYGONS});
+break;case netgis.Commands.MODIFY_FEATURES:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.MODIFY_FEATURES});break;case netgis.Commands.DELETE_FEATURES:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.DELETE_FEATURES});break;case netgis.Commands.BUFFER_FEATURES:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.BUFFER_FEATURES});break;case netgis.Commands.CUT_FEATURES:netgis.util.invoke(a,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.CUT_FEATURES});
+break;case netgis.Commands.IMPORT_LAYER:netgis.util.invoke(a,netgis.Events.IMPORT_LAYER_SHOW,null);break;case netgis.Commands.EXPORT:netgis.util.invoke(a,netgis.Events.EXPORT_SHOW,null);break;default:console.warn("unhandled command id",b)}};netgis=netgis||{};
+netgis.Commands=Object.freeze({LAYERTREE:"layertree",SEARCHPLACE:"searchplace",SEARCHPARCEL:"searchparcel",TOOLBOX:"toolbox",VIEW_PREV:"view_prev",VIEW_NEXT:"view_next",VIEW:"view",ZOOM_BOX:"zoom_box",MEASURE_LINE:"measure_line",MEASURE_AREA:"measure_area",MEASURE_CLEAR:"measure_clear",DRAW_POINTS:"draw_points",DRAW_LINES:"draw_lines",DRAW_POLYGONS:"draw_polygons",MODIFY_FEATURES:"modify_features",DELETE_FEATURES:"delete_features",BUFFER_FEATURES:"buffer_features",CUT_FEATURES:"cut_features",SNAP_TOGGLE:"snap_toggle",
+IMPORT_LAYER:"import_layer",EXPORT:"export"});netgis=netgis||{};netgis.ContextMenu=function(){this.initElements()};netgis.ContextMenu.prototype.initElements=function(){this.container=document.createElement("div");this.container.className="netgis-contextmenu netgis-shadow-large netgis-color-e netgis-hide"};
+netgis.ContextMenu.prototype.attachTo=function(a){a.appendChild(this.container);a.addEventListener(netgis.Events.CONTEXTMENU_SHOW,this.onContextMenuShow.bind(this));a.addEventListener("click",this.onParentClick.bind(this));a.addEventListener("pointerup",this.onParentClick.bind(this));a.addEventListener("scroll",this.onParentScroll.bind(this),!0);a.addEventListener("keydown",this.onParentKeyDown.bind(this))};netgis.ContextMenu.prototype.clear=function(){this.container.innerHTML=""};
+netgis.ContextMenu.prototype.addButton=function(a,b){var c=document.createElement("button");c.className="netgis-button netgis-clip-text netgis-hover-d";c.innerHTML=b;c.setAttribute("type","button");c.setAttribute("data-id",a);c.addEventListener("click",this.onButtonClick.bind(this));this.container.appendChild(c);return c};
+netgis.ContextMenu.prototype.addCheckbox=function(a,b,c){var d=document.createElement("label");d.className="netgis-noselect netgis-hover-d";var e=document.createElement("input");e.setAttribute("type","checkbox");e.setAttribute("title",b);e.setAttribute("data-id",a);e.checked=c;e.addEventListener("change",this.onCheckboxChange.bind(this));d.appendChild(e);a=document.createElement("span");a.className="netgis-clip-text";a.innerHTML=b;d.appendChild(a);this.container.appendChild(d);return e};
+netgis.ContextMenu.prototype.addSlider=function(a,b,c,d,e,f){var g=document.createElement("label");g.className="netgis-noselect netgis-hover-d";var h=document.createElement("span");h.className="netgis-clip-text";h.innerHTML=b;g.appendChild(h);h=document.createElement("span");g.appendChild(h);c||0===c||(c=50);d||0===d||(d=0);e||0===e||(e=100);f||(f=1);var k=document.createElement("input");k.setAttribute("type","range");k.setAttribute("min",d);k.setAttribute("max",e);k.setAttribute("step",f);k.setAttribute("value",
+c);k.setAttribute("data-id",a);k.setAttribute("data-title",b);k.setAttribute("title",b+" "+c);k.addEventListener("change",this.onSliderChange.bind(this));k.addEventListener("input",this.onSliderChange.bind(this));h.appendChild(k);this.container.appendChild(g);return k};netgis.ContextMenu.prototype.setVisible=function(a){a?this.container.classList.remove("netgis-hide"):this.container.classList.add("netgis-hide")};
+netgis.ContextMenu.prototype.setPosition=function(a,b){var c=this.container.parentNode.getBoundingClientRect(),d=this.container.getBoundingClientRect();a+d.width>c.width&&(a-=d.width);b+d.height>c.height&&(b-=d.height);this.container.style.left=a+"px";this.container.style.top=b+"px"};
+netgis.ContextMenu.prototype.onContextMenuShow=function(a){a=a.detail;this.clear();for(var b=0;b<a.items.length;b++){var c=a.items[b];switch(c.type){case "slider":this.addSlider(c.id,c.title,c.val,c.min,c.max)}}this.setVisible(!0);this.setPosition(a.x,a.y)};netgis.ContextMenu.prototype.onContextMenu=function(a){a.preventDefault();var b=a.clientX;a=a.clientY;this.setVisible(!0);this.setPosition(b,a);return!1};
+netgis.ContextMenu.prototype.onParentClick=function(a){this.container.contains(a.target)||this.setVisible(!1)};netgis.ContextMenu.prototype.onParentScroll=function(a){this.setVisible(!1)};netgis.ContextMenu.prototype.onParentKeyDown=function(a){27===(a.keyCode||a.which)&&this.setVisible(!1)};
+netgis.ContextMenu.prototype.onButtonClick=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");this.setVisible(!1);netgis.util.invoke(a,netgis.Events.CONTEXTMENU_BUTTON_CLICK,{id:b});netgis.Client.handleCommand(a,b)};netgis.ContextMenu.prototype.onCheckboxChange=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");netgis.util.invoke(a,netgis.Events.CONTEXTMENU_CHECKBOX_CHANGE,{id:b,checked:a.checked})};
+netgis.ContextMenu.prototype.onSliderChange=function(a){a=a.currentTarget;var b=a.getAttribute("data-id"),c=Number.parseFloat(a.value),d=a.getAttribute("data-title");a.setAttribute("title",d+" "+c);netgis.util.invoke(a,netgis.Events.CONTEXTMENU_SLIDER_CHANGE,{id:b,val:c})};netgis=netgis||{};netgis.Controls=function(a){this.config=a;this.initElements();this.initConfig(a)};netgis.Controls.Events=Object.freeze({BUTTON_CLICK:"controls-button-click"});netgis.Controls.prototype.initElements=function(){this.container=document.createElement("section");this.container.className="netgis-controls netgis-color-e netgis-text-a netgis-shadow netgis-round"};
+netgis.Controls.prototype.initConfig=function(a){a=a.controls.buttons;for(var b=0;b<a.length;b++){var c=a[b];this.addButton(c.id,c.icon,c.title)}};netgis.Controls.prototype.attachTo=function(a){a.appendChild(this.container)};
+netgis.Controls.prototype.addButton=function(a,b,c){var d=document.createElement("button");d.setAttribute("type","button");d.setAttribute("data-id",a);d.className="netgis-hover-a";d.innerHTML=b;d.title=c;d.addEventListener("pointerdown",this.onButtonClick.bind(this));this.container.appendChild(d);return d};
+netgis.Controls.prototype.onButtonClick=function(a){a=a.currentTarget;switch(a.getAttribute("data-id")){case "zoom_in":netgis.util.invoke(a,netgis.Events.MAP_ZOOM,{delta:1});break;case "zoom_out":netgis.util.invoke(a,netgis.Events.MAP_ZOOM,{delta:-1});break;case "zoom_home":netgis.util.invoke(a,netgis.Events.MAP_ZOOM_HOME,null)}};netgis=netgis||{};
+netgis.Events=Object.freeze({CLIENT_CONTEXT_RESPONSE:"client-context-response",CLIENT_SET_MODE:"client-set-mode",CONTROLS_BUTTON_CLICK:"controls-button-click",MAP_ZOOM:"map-zoom",MAP_ZOOM_HOME:"map-zoom-home",MAP_ZOOM_LONLAT:"map-zoom-lonlat",MAP_ZOOM_SCALE:"map-zoom-scale",MAP_ZOOM_LAYER:"map-zoom-layer",MAP_ZOOM_LEVEL:"map-zoom-level",MAP_LAYER_TOGGLE:"map-layer-toggle",MAP_LAYER_TRANSPARENCY:"map-layer-transparency",MAP_VIEW_CHANGE:"map-view-change",MAP_VIEW_NEXT:"map-view-next",MAP_VIEW_PREV:"map-view-prev",
+MAP_CLICK:"map-click",MAP_FEATURE_ENTER:"map-feature-enter",MAP_FEATURE_CLICK:"map-feature-click",MAP_FEATURE_LEAVE:"map-feature-leave",MAP_SNAP_TOGGLE:"map-snap-toggle",MAP_EDIT_LAYER_CHANGE:"map-edit-layer-change",MAP_EDIT_LAYER_LOADED:"map-edit-layer-loaded",MAP_COPY_FEATURE_TO_EDIT:"map-copy-feature-to-edit",PANEL_TOGGLE:"panel-toggle",PANEL_RESIZE:"panel-resize",TREE_ITEM_CHANGE:"tree-item-change",TREE_ITEM_SLIDER_CHANGE:"tree-item-slider-change",TREE_BUTTON_CLICK:"tree-button-click",LAYERTREE_TOGGLE:"layertree-toggle",
+TOOLBOX_TOGGLE:"toolbox-toggle",TOOLBOX_BUTTON_CLICK:"toolbox-button-click",MENU_BUTTON_CLICK:"menu-button-click",MENU_CHECKBOX_CHANGE:"menu-checkbox-change",MENU_SELECT_CHANGE:"menu-select-change",CONTEXTMENU_SHOW:"contextmenu-show",CONTEXTMENU_BUTTON_CLICK:"contextmenu-button-click",CONTEXTMENU_CHECKBOX_CHANGE:"contextmenu-checkbox-change",CONTEXTMENU_SLIDER_CHANGE:"contextmenu-slider-change",SEARCH_CHANGE:"search-change",SEARCH_SELECT:"search-select",SEARCH_CLEAR:"search-clear",SEARCHPLACE_TOGGLE:"searchplace-toggle",
+SEARCHPARCEL_TOGGLE:"searchparcel-toggle",SEARCHPARCEL_RESET:"searchparcel-reset",SEARCHPARCEL_PARCELS_RESPONSE:"searchparcel-parcels-response",SEARCHPARCEL_ITEM_ENTER:"searchparcel-item-enter",SEARCHPARCEL_ITEM_LEAVE:"searchparcel-item-leave",SEARCHPARCEL_ITEM_CLICK:"searchparcel-item-click",SEARCHPARCEL_ITEM_IMPORT:"searchparcel-item-import",MEASURE_CLEAR:"measure-clear",DRAW_BUFFER_TOGGLE:"draw-buffer-toggle",DRAW_BUFFER_CHANGE:"draw-buffer-change",BUFFER_CHANGE:"buffer-change",BUFFER_ACCEPT:"buffer-accept",
+IMPORT_LAYER_SHOW:"import-layer-show",IMPORT_LAYER_ACCEPT:"import-layer-accept",IMPORT_LAYER_PREVIEW:"import-layer-preview",IMPORT_LAYER_PREVIEW_FEATURES:"import-layer-preview-features",IMPORT_GEOPORTAL_SUBMIT:"import-geoportal-submit",EXPORT_SHOW:"export-show",EXPORT_BEGIN:"export-begin",EXPORT_END:"export-end",TIMESLIDER_SHOW:"timeslider-show",TIMESLIDER_HIDE:"timeslider-hide",TIMESLIDER_SELECT:"timeslider-select"});netgis=netgis||{};netgis.Export=function(a){this.config=a;this.initElements(a);this.initSections()};
+netgis.Export.prototype.initElements=function(a){a=a["export"];this.modal=new netgis.Modal(a.title?a.title:"Export");this.modal.container.classList.add("netgis-export");this.tabs=new netgis.Tabs(["PDF","JPEG","PNG","GIF","GeoJSON"]);this.tabs.container.style.position="absolute";this.tabs.container.style.left="0mm";this.tabs.container.style.right="0mm";this.tabs.container.style.top="12mm";this.tabs.container.style.bottom="0mm";this.tabs.attachTo(this.modal.content)};
+netgis.Export.prototype.initSections=function(){this.sections={};var a=0;this.sections.pdf=this.tabs.getContentSection(a);a+=1;this.addInputNumber(this.sections.pdf,"Breite (Pixel):",1600,0);this.addInputNumber(this.sections.pdf,"H\u00f6he (Pixel):",900,0);this.addInputNumber(this.sections.pdf,"Seitenr\u00e4nder (Millimeter):",10,0);this.addCheckbox(this.sections.pdf,"Querformat",!0);this.addButton(this.sections.pdf,"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",this.onExportClickPDF.bind(this));
+this.sections.jpeg=this.tabs.getContentSection(a);a+=1;this.addInputNumber(this.sections.jpeg,"Breite (Pixel):",1600,0);this.addInputNumber(this.sections.jpeg,"H\u00f6he (Pixel):",900,0);this.addCheckbox(this.sections.jpeg,"Querformat",!0);this.addButton(this.sections.jpeg,"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",this.onExportClickJPEG.bind(this));this.sections.png=this.tabs.getContentSection(a);a+=1;this.addInputNumber(this.sections.png,"Breite (Pixel):",1600,0);this.addInputNumber(this.sections.png,
+"H\u00f6he (Pixel):",900,0);this.addCheckbox(this.sections.png,"Querformat",!0);this.addButton(this.sections.png,"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",this.onExportClickPNG.bind(this));this.sections.gif=this.tabs.getContentSection(a);a+=1;this.addInputNumber(this.sections.gif,"Breite (Pixel):",1600,0);this.addInputNumber(this.sections.gif,"H\u00f6he (Pixel):",900,0);this.addCheckbox(this.sections.gif,"Querformat",!0);this.addButton(this.sections.gif,"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",
+this.onExportClickGIF.bind(this));this.sections.geojson=this.tabs.getContentSection(a);this.addCheckbox(this.sections.geojson,"Nicht-Editierbare Geometrien einbeziehen",!1);this.addButton(this.sections.geojson,"<i class='netgis-icon fas fa-save'></i><span>Exportieren</span>",this.onExportClickGeoJSON.bind(this))};
+netgis.Export.prototype.attachTo=function(a){a.appendChild(this.modal.container);a.addEventListener(netgis.Events.EXPORT_SHOW,this.onExportShow.bind(this));a.addEventListener(netgis.Events.EXPORT_END,this.onExportEnd.bind(this))};netgis.Export.prototype.addText=function(a,b){var c=document.createElement("div");c.innerHTML=b;a.appendChild(c);return c};
+netgis.Export.prototype.addButton=function(a,b,c){var d=document.createElement("button");d.className="netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";d.setAttribute("type","button");d.innerHTML=b;c&&(d.onclick=c);a.appendChild(d);return d};
+netgis.Export.prototype.addInputText=function(a,b,c){var d=document.createElement("label");d.innerHTML=b;var e=document.createElement("input");e.setAttribute("type","text");d.appendChild(e);if(c){b="list-"+netgis.util.stringToID(b);var f=document.createElement("datalist");f.setAttribute("id",b);for(var g=0;g<c.length;g++){var h=document.createElement("option");h.setAttribute("value",c[g]);f.appendChild(h)}a.appendChild(f);e.setAttribute("list",b)}a.appendChild(d);return e};
+netgis.Export.prototype.addInputNumber=function(a,b,c,d,e){var f=document.createElement("label");f.innerHTML=b;b=document.createElement("input");b.setAttribute("type","number");(d||0===d)&&b.setAttribute("min",d);e&&b.setAttribute("max",e);b.setAttribute("value",c);f.appendChild(b);a.appendChild(f);return b};
+netgis.Export.prototype.addCheckbox=function(a,b,c){var d=document.createElement("label"),e=document.createElement("input");e.setAttribute("type","checkbox");e.checked=c;d.appendChild(e);c=document.createElement("span");c.innerHTML=b;d.appendChild(c);a.appendChild(d);return e};netgis.Export.prototype.onExportShow=function(a){this.modal.show()};
+netgis.Export.prototype.onExportClickPDF=function(a){var b=this.sections.pdf.getElementsByTagName("input");b={format:"pdf",width:Number.parseInt(b[0].value),height:Number.parseInt(b[1].value),padding:Number.parseInt(b[2].value),landscape:b[3].checked};netgis.util.invoke(a.target,netgis.Events.EXPORT_BEGIN,b)};
+netgis.Export.prototype.onExportClickJPEG=function(a){var b=this.sections.pdf.getElementsByTagName("input");b={format:"jpeg",width:Number.parseInt(b[0].value),height:Number.parseInt(b[1].value),landscape:b[3].checked};netgis.util.invoke(a.target,netgis.Events.EXPORT_BEGIN,b)};
+netgis.Export.prototype.onExportClickPNG=function(a){var b=this.sections.pdf.getElementsByTagName("input");b={format:"png",width:Number.parseInt(b[0].value),height:Number.parseInt(b[1].value),landscape:b[3].checked};netgis.util.invoke(a.target,netgis.Events.EXPORT_BEGIN,b)};
+netgis.Export.prototype.onExportClickGIF=function(a){var b=this.sections.pdf.getElementsByTagName("input");b={format:"gif",width:Number.parseInt(b[0].value),height:Number.parseInt(b[1].value),landscape:b[3].checked};netgis.util.invoke(a.target,netgis.Events.EXPORT_BEGIN,b)};netgis.Export.prototype.onExportClickGeoJSON=function(a){var b={format:"geojson",nonEdits:this.sections.geojson.getElementsByTagName("input")[0].checked};netgis.util.invoke(a.target,netgis.Events.EXPORT_BEGIN,b)};
+netgis.Export.prototype.onExportEnd=function(a){this.modal.hide()};netgis=netgis||{};netgis.Import=function(a){this.config=a;this.initElements(a);this.initSections();this.initPreview()};
+netgis.Import.prototype.initElements=function(a){a=a["import"];this.modal=new netgis.Modal(a.title?a.title:"Import");this.modal.container.classList.add("netgis-import");var b="WMS WFS GeoJSON GML GeoPackage Spatialite Shapefile".split(" ");a.geoportal_tab&&b.unshift("Geoportal");this.tabs=new netgis.Tabs(b);this.tabs.container.style.position="absolute";this.tabs.container.style.left="0mm";this.tabs.container.style.right="0mm";this.tabs.container.style.top="12mm";this.tabs.container.style.bottom="0mm";
+this.tabs.attachTo(this.modal.content)};
+netgis.Import.prototype.initSections=function(){this.sections={};var a=0;this.config["import"].geoportal_tab&&(this.sections.geoportal=this.tabs.getContentSection(a),a+=1,this.sections.geoportal.classList.add("netgis-geoportal"),this.geoportalSearch=this.addInputText(this.sections.geoportal,"Suche im Datenkatalog:"),this.geoportalSearch.addEventListener("change",this.onGeoportalSearchChange.bind(this)),this.geoportalSearch.setAttribute("placeholder","Thema, Schlagwort..."),this.geoportalResults=new netgis.Tree,
+this.geoportalResults.attachTo(this.sections.geoportal),this.geoportalSubmit=this.addButton(this.sections.geoportal,"<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>",this.onGeoportalSubmit.bind(this)));this.sections.wms=this.tabs.getContentSection(a);a+=1;this.addInputText(this.sections.wms,"WMS-URL:",this.config["import"].wms_options);this.addButton(this.sections.wms,"<i class='netgis-icon fas fa-cloud-download-alt'></i><span>Dienst laden</span>",this.onWMSLoadClick.bind(this));
+this.addInputText(this.sections.wms,"Bezeichnung:");this.addInputSelect(this.sections.wms,"Ebene:");this.addInputSelect(this.sections.wms,"Format:");this.addButton(this.sections.wms,"<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>",this.onWMSAcceptClick.bind(this));this.showDetailsWMS(!1);this.sections.wfs=this.tabs.getContentSection(a);a+=1;this.addInputText(this.sections.wfs,"WFS-URL:",this.config["import"].wfs_options);this.addButton(this.sections.wfs,"<i class='netgis-icon fas fa-cloud-download-alt'></i><span>Dienst laden</span>",
+this.onWFSLoadClick.bind(this));this.addInputText(this.sections.wfs,"Bezeichnung:");this.addInputSelect(this.sections.wfs,"Ebene:");this.addInputSelect(this.sections.wfs,"Format:");this.addButton(this.sections.wfs,"<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>",this.onWFSAcceptClick.bind(this));this.showDetailsWFS(!1);this.sections.geojson=this.tabs.getContentSection(a);a+=1;this.addInputFile(this.sections.geojson,"GeoJSON-Datei:",".geojson,.json");this.addText(this.sections.geojson,
+"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");this.addButton(this.sections.geojson,"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",this.onGeoJSONAcceptClick.bind(this));this.sections.gml=this.tabs.getContentSection(a);a+=1;this.addInputFile(this.sections.gml,"GML-Datei:",".gml,.xml");this.addText(this.sections.gml,"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");
+this.addButton(this.sections.gml,"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",this.onGMLAcceptClick.bind(this));this.sections.geopackage=this.tabs.getContentSection(a);a+=1;this.addInputFile(this.sections.geopackage,"GeoPackage-Datei:",".gpkg");this.addText(this.sections.geopackage,"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");this.addButton(this.sections.geopackage,
+"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",this.onGeoPackageAcceptClick.bind(this));this.sections.spatialite=this.tabs.getContentSection(a);a+=1;this.addInputFile(this.sections.spatialite,"Spatialite-Datei:",".sqlite");this.addText(this.sections.spatialite,"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");this.addButton(this.sections.spatialite,"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",
+this.onSpatialiteAcceptClick.bind(this));this.sections.shapefile=this.tabs.getContentSection(a);this.addInputFile(this.sections.shapefile,"Shapefile-Zip-Datei:",".zip");this.addText(this.sections.shapefile,"<h3>Unterst\u00fctzte Koordinatensysteme:</h3><ul><li>Web Mercator (EPSG:3857)</li><li>WGS84 / Lon-Lat (EPSG:4326)</li><li>ETRS89 / UTM Zone 32N (EPSG:25832)</li></ul>");this.addButton(this.sections.shapefile,"<i class='netgis-icon fas fa-check'></i><span>Datei laden</span>",this.onShapefileAcceptClick.bind(this))};
+netgis.Import.prototype.initPreview=function(){this.preview=new netgis.Modal("Vorschau");this.preview.attachTo(this.modal.content);this.previewMapContainer=document.createElement("div");this.previewMapContainer.className="netgis-preview-map";this.preview.content.appendChild(this.previewMapContainer);if(ol){var a=this.config.map;a={projection:a.projection,center:a.centerLonLat?ol.proj.fromLonLat(a.centerLonLat):a.center,zoom:a.zoom};this.previewMap=new ol.Map({target:this.previewMapContainer,view:new ol.View(a),
+pixelRatio:1,moveTolerance:3,controls:[]});this.previewMap.getView().padding=[10,10,10,10];this.previewMap.addLayer(new ol.layer.Tile({source:new ol.source.OSM}))}this.previewTree=new netgis.Tree;this.previewTree.container.classList.add("netgis-preview-tree");this.previewTree.attachTo(this.preview.content);this.previewTree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE,this.onPreviewTreeItemChange.bind(this));this.previewSubmit=document.createElement("button");this.previewSubmit.setAttribute("type",
+"button");this.previewSubmit.className="netgis-import-submit netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";this.previewSubmit.innerHTML="<i class='netgis-icon fas fa-check'></i><span>Hinzuf\u00fcgen</span>";this.previewSubmit.addEventListener("click",this.onPreviewSubmitClick.bind(this));this.preview.content.appendChild(this.previewSubmit)};
+netgis.Import.prototype.attachTo=function(a){a.appendChild(this.modal.container);a.addEventListener(netgis.Events.IMPORT_LAYER_SHOW,this.onImportShow.bind(this));a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES,this.onImportPreviewFeatures.bind(this))};netgis.Import.prototype.addText=function(a,b){var c=document.createElement("div");c.innerHTML=b;a.appendChild(c);return c};
+netgis.Import.prototype.addButton=function(a,b,c){var d=document.createElement("button");d.className="netgis-button netgis-center netgis-color-a netgis-hover-c netgis-shadow";d.setAttribute("type","button");d.innerHTML=b;c&&(d.onclick=c);a.appendChild(d);return d};
+netgis.Import.prototype.addInputText=function(a,b,c){var d=document.createElement("label");d.innerHTML=b;var e=document.createElement("input");e.setAttribute("type","text");d.appendChild(e);if(c){b="list-"+netgis.util.stringToID(b);var f=document.createElement("datalist");f.setAttribute("id",b);for(var g=0;g<c.length;g++){var h=document.createElement("option");h.setAttribute("value",c[g]);f.appendChild(h)}a.appendChild(f);e.setAttribute("list",b)}a.appendChild(d);return e};
+netgis.Import.prototype.addInputSelect=function(a,b,c){c=document.createElement("label");c.innerHTML=b;b=document.createElement("select");c.appendChild(b);a.appendChild(c);return b};netgis.Import.prototype.addInputFile=function(a,b,c){var d=document.createElement("label");d.innerHTML=b;b=document.createElement("input");b.setAttribute("type","file");b.setAttribute("accept",c);d.appendChild(b);a.appendChild(d);return b};netgis.Import.prototype.getLayerOrder=function(){return 1E4};
+netgis.Import.prototype.showDetailsWMS=function(a){var b=this.sections.wms,c=b.getElementsByTagName("label");b=b.getElementsByTagName("button");a?(c[1].classList.remove("netgis-hide"),c[2].classList.remove("netgis-hide"),c[3].classList.remove("netgis-hide"),b[1].classList.remove("netgis-hide")):(c[1].classList.add("netgis-hide"),c[2].classList.add("netgis-hide"),c[3].classList.add("netgis-hide"),b[1].classList.add("netgis-hide"))};
+netgis.Import.prototype.showDetailsWFS=function(a){var b=this.sections.wfs,c=b.getElementsByTagName("label");b=b.getElementsByTagName("button");a?(c[1].classList.remove("netgis-hide"),c[2].classList.remove("netgis-hide"),c[3].classList.remove("netgis-hide"),b[1].classList.remove("netgis-hide")):(c[1].classList.add("netgis-hide"),c[2].classList.add("netgis-hide"),c[3].classList.add("netgis-hide"),b[1].classList.add("netgis-hide"))};
+netgis.Import.prototype.submitImportLayer=function(a){!0===this.config["import"].preview?netgis.util.invoke(this.modal.container,netgis.Events.IMPORT_LAYER_PREVIEW,a):(this.config.layers.push(a),netgis.util.invoke(this.modal.container,netgis.Events.IMPORT_LAYER_ACCEPT,a),this.modal.hide())};netgis.Import.prototype.onImportShow=function(a){this.modal.show();this.tabs.updateHeaderScroll()};
+netgis.Import.prototype.onWMSLoadClick=function(a){this.showDetailsWMS(!1);var b=this.sections.wms.getElementsByTagName("input")[0].value;b=b.trim();if(!(1>b.length)){var c=b.indexOf("?");a=-1<c?b.substr(0,c):b;var d=["request=GetCapabilities"];if(-1<c)for(b=b.substr(c+1),b=b.split("&"),c=0;c<b.length;c++){var e=b[c];e=e.toLowerCase();-1<e.search("service")?d.push(e):-1<e.search("version")?d.push(e):e.search("request")}d=d.join("&");-1===d.search("service=")&&(d+="&service=WMS");netgis.util.request(a+
+"?"+d,this.onWMSCapsResponse.bind(this))}};
+netgis.Import.prototype.onWMSCapsResponse=function(a){var b=(new DOMParser).parseFromString(a,"text/xml"),c=b.documentElement;b=b.getElementsByTagName("parsererror");for(var d=0;d<b.length;d++)console.error("WMS caps parser error:",b[d].textContent);0<b.length&&alert(0<a.length?a:b[0].textContent);a=this.sections.wms;var e=a.getElementsByTagName("input");a=a.getElementsByTagName("select");b=a[0];a=a[1];for(d=b.options.length-1;0<=d;d--)b.options.remove(d);for(d=a.options.length-1;0<=d;d--)a.options.remove(d);
+switch(c.nodeName){default:case "HTML":console.warn("could not detect WMS service",c);break;case "WMS_Capabilities":case "WMT_MS_Capabilities":c.getAttribute("version");d=c.getElementsByTagName("Service")[0].getElementsByTagName("Title")[0].textContent;e[1].value=d;d=c.getElementsByTagName("Layer");for(var f=[],g=0;g<d.length;g++){e=d[g];var h=e.getElementsByTagName("Name")[0].textContent,k=e.getElementsByTagName("Title")[0].textContent;f.push({name:h,title:k});e=document.createElement("option");
+e.text=k;e.value=h;b.options.add(e)}c=c.getElementsByTagName("GetMap")[0].getElementsByTagName("Format");b=[];for(d=0;d<c.length;d++)e=c[d],f=e.textContent,b.push(f),e=document.createElement("option"),e.text=f,e.value=f,a.options.add(e)}this.showDetailsWMS(!0)};
+netgis.Import.prototype.onWMSAcceptClick=function(a){a=this.sections.wms;var b=a.getElementsByTagName("input"),c=a.getElementsByTagName("select"),d="import_"+netgis.util.getTimeStamp(!0);b=b[0].value;var e=c[0].selectedOptions[0].innerText,f=c[0].value;c=c[1].value;b=netgis.util.replace(b,"request=","oldrequest=");b=netgis.util.replace(b,"Request=","oldrequest=");d={id:d,folder:null,active:!0,order:this.getLayerOrder(),type:netgis.LayerTypes.WMS,url:b,title:e,name:f,format:c,tiled:!0};this.config.layers.push(d);
+netgis.util.invoke(a,netgis.Events.IMPORT_LAYER_ACCEPT,d);this.modal.hide()};
+netgis.Import.prototype.onWFSLoadClick=function(a){this.showDetailsWFS(!1);var b=this.sections.wfs.getElementsByTagName("input")[0].value;b=b.trim();if(!(1>b.length)){var c=b.indexOf("?");a=-1<c?b.substr(0,c):b;var d=["request=GetCapabilities"];if(-1<c)for(b=b.substr(c+1),b=b.split("&"),c=0;c<b.length;c++){var e=b[c];e=e.toLowerCase();-1<e.search("service")?d.push(e):-1<e.search("version")?d.push(e):-1<e.search("request")||d.push(e)}d=d.join("&");-1===d.search("service=")&&(d+="&service=WFS");a=a+
+"?"+d;this.config["import"].wfs_proxy&&(a=this.config["import"].wfs_proxy+a);netgis.util.request(a,this.onWFSCapsResponse.bind(this))}};
+netgis.Import.prototype.onWFSCapsResponse=function(a){var b=(new DOMParser).parseFromString(a,"text/xml"),c=b.documentElement;b=b.getElementsByTagName("parsererror");for(var d=0;d<b.length;d++)console.error("WFS caps parser error:",b[d].textContent);0<b.length&&alert(0<a.length?a:b[0].textContent);a=this.sections.wfs;var e=a.getElementsByTagName("input");a=a.getElementsByTagName("select");b=a[0];a=a[1];for(d=b.options.length-1;0<=d;d--)b.options.remove(d);for(d=a.options.length-1;0<=d;d--)a.options.remove(d);
+switch(c.nodeName){default:case "HTML":console.error("could not detect WFS service",c);break;case "WFS_Capabilities":case "wfs:WFS_Capabilities":c.getAttribute("version");d=c.getElementsByTagName("ows:ServiceIdentification")[0].getElementsByTagName("ows:Title")[0].textContent;e[1].value=d;d=c.getElementsByTagName("FeatureType");for(var f=[],g=0;g<d.length;g++){e=d[g];var h=e.getElementsByTagName("Name")[0].textContent,k=e.getElementsByTagName("Title")[0].textContent;f.push({name:h,title:k});e=document.createElement("option");
+e.text=k;e.value=h;b.options.add(e)}c=c.getElementsByTagName("ows:Operation");b=null;for(e=0;e<c.length;e++)if("GetFeature"===c[e].getAttribute("name")){b=c[e];break}c=null;if(b)for(b=b.getElementsByTagName("ows:Parameter"),e=0;e<b.length;e++)if(d=b[e],"outputFormat"===d.getAttribute("name")){b=d.getElementsByTagName("ows:Value");for(d=0;d<b.length;d++)e=b[d],f=e.textContent,e=document.createElement("option"),e.text=f,e.value=f,a.options.add(e),-1<f.search("json")&&(c=f);break}c&&(a.value=c)}this.showDetailsWFS(!0)};
+netgis.Import.prototype.onWFSAcceptClick=function(a){a=this.sections.wfs;var b=a.getElementsByTagName("input"),c=a.getElementsByTagName("select"),d="import_"+netgis.util.getTimeStamp(!0);b=b[0].value;var e=c[0].selectedOptions[0].innerText,f=c[0].value;c=c[1].value;b=netgis.util.replace(b,"request=","oldrequest=");b=netgis.util.replace(b,"Request=","oldrequest=");this.config["import"].wfs_proxy&&(b=this.config["import"].wfs_proxy+b);d={id:d,folder:null,active:!0,order:this.getLayerOrder(),style:this.config.styles["import"],
+title:e,type:netgis.LayerTypes.WFS,url:b,name:f,format:c};this.config.layers.push(d);netgis.util.invoke(a,netgis.Events.IMPORT_LAYER_ACCEPT,d);this.modal.hide()};netgis.Import.prototype.onGeoJSONAcceptClick=function(a){if(a=this.sections.geojson.getElementsByTagName("input")[0].files[0]){var b=new FileReader;b.title=a.name;b.onload=this.onGeoJSONLoad.bind(this);b.readAsText(a)}else alert("No file selected!")};
+netgis.Import.prototype.onGeoJSONLoad=function(a){var b=a.target;a=b.title;b=b.result;a={id:"import_"+netgis.util.getTimeStamp(!0),folder:null,active:!0,order:this.getLayerOrder(),style:this.config.styles["import"],title:a,type:netgis.LayerTypes.GEOJSON,data:b};this.submitImportLayer(a)};netgis.Import.prototype.onGMLAcceptClick=function(a){if(a=this.sections.gml.getElementsByTagName("input")[0].files[0]){var b=new FileReader;b.title=a.name;b.onload=this.onGMLLoad.bind(this);b.readAsText(a)}else alert("No file selected!")};
+netgis.Import.prototype.onGMLLoad=function(a){var b=a.target;a=b.result;var c="import_"+netgis.util.getTimeStamp(!0);b=b.title;a={id:c,folder:null,active:!0,order:this.getLayerOrder(),style:this.config.styles["import"],title:b,type:netgis.LayerTypes.GML,data:a};this.submitImportLayer(a)};netgis.Import.prototype.onGeoPackageAcceptClick=function(a){if(a=this.sections.geopackage.getElementsByTagName("input")[0].files[0]){var b=new FileReader;b.title=a.name;b.onload=this.onGeoPackageLoad.bind(this);b.readAsArrayBuffer(a)}else alert("No file selected!")};
+netgis.Import.prototype.onGeoPackageLoad=function(a){var b=a.target;a=b.result;var c="import_"+netgis.util.getTimeStamp(!0);b=b.title;a={id:c,folder:null,active:!0,order:this.getLayerOrder(),style:this.config.styles["import"],title:b,type:netgis.LayerTypes.GEOPACKAGE,data:a};this.submitImportLayer(a)};
+netgis.Import.prototype.onSpatialiteAcceptClick=function(a){if(a=this.sections.spatialite.getElementsByTagName("input")[0].files[0]){var b=new FileReader;b.title=a.name;b.onload=this.onSpatialiteLoad.bind(this);b.readAsArrayBuffer(a)}else alert("No file selected!")};
+netgis.Import.prototype.onSpatialiteLoad=function(a){var b=a.target;a=b.result;var c="import_"+netgis.util.getTimeStamp(!0);b=b.title;a={id:c,folder:null,active:!0,order:this.getLayerOrder(),style:this.config.styles["import"],title:b,type:netgis.LayerTypes.SPATIALITE,data:a};this.submitImportLayer(a)};
+netgis.Import.prototype.onShapefileAcceptClick=function(a){if(a=this.sections.shapefile.getElementsByTagName("input")[0].files[0]){var b=new FileReader;b.title=a.name;b.onload=this.onShapefileLoad.bind(this);b.readAsArrayBuffer(a)}else alert("No file selected!")};
+netgis.Import.prototype.onShapefileLoad=function(a){var b=a.target;a=b.result;var c="import_"+netgis.util.getTimeStamp(!0);b=b.title;a={id:c,folder:null,active:!0,order:this.getLayerOrder(),style:this.config.styles["import"],title:b,type:netgis.LayerTypes.SHAPEFILE,data:a};this.submitImportLayer(a)};
+netgis.Import.prototype.onImportPreviewFeatures=function(a){var b=a.detail,c=b.layer;this.previewTree.clear();a=this.previewMap.getLayers().getArray();for(var d=1;d<a.length;d++)this.previewMap.removeLayer(a[d]);if(ol){a=config.styles["import"];a=new ol.style.Style({fill:new ol.style.Fill({color:a.fill}),stroke:new ol.style.Stroke({color:a.stroke,width:a.width})});c.setStyle(a);this.previewMap.addLayer(c);var e=this.previewTree.addFolder(null,b.id,b.title);a=c.getSource().getFeatures();if(0===a.length){var f=
+this;c.getSource().on("addfeature",function(a){f.featureLoadTimeout&&window.clearTimeout(f.featureLoadTimeout);f.featureLoadTimeout=window.setTimeout(function(){var a=c.getSource().getFeatures();f.updatePreviewFeatures(a,e,c,b);f.featureLoadTimeout=null},100)})}else this.updatePreviewFeatures(a,e,c,b)}else console.error("import preview only supported with OL map renderer",c)};
+netgis.Import.prototype.updatePreviewFeatures=function(a,b,c,d){for(var e=0;e<a.length;e++){var f=a[e],g=f.getId(),h=f.getProperties();g||(g=e+1,f.setId(g));var k=null,l;for(l in h)switch(l.toLowerCase()){case "name":k=h[l];break;case "title":k=h[l];break;case "id":k=h[l];break;case "gid":k=h[l];break;case "oid":k=h[l];break;case "objectid":k=h[l]}k||(k=g);h=f.getGeometry();if(h instanceof ol.geom.Polygon||h instanceof ol.geom.MultiPolygon)k+=" ("+netgis.util.formatArea(h.getArea())+")";else if(h instanceof
+ol.geom.LineString)k+=" ("+netgis.util.formatArea(h.getLength())+")";else if(h instanceof ol.geom.MultiLineString){f=0;h=h.getLineStrings();for(var m=0;m<h.length;m++)f+=h[m].getLength();k+=" ("+netgis.util.formatArea(f)+")"}this.previewTree.addCheckbox(b,g,"Feature "+k,!0)}this.previewTree.setFolderOpen(d.id,!0);this.previewTree.updateFolderChecks();this.preview.show();this.previewMap.updateSize();this.previewMap.getView().fit(c.getSource().getExtent())};
+netgis.Import.prototype.onPreviewSubmitClick=function(a){var b=this.previewTree.container.getElementsByClassName("netgis-folder")[0];a=b.getAttribute("data-id");b=b.getElementsByTagName("span")[0].innerText;for(var c=this.previewTree.container.getElementsByTagName("input"),d=this.previewMap.getLayers().getArray()[1].getSource(),e=[],f=1;f<c.length;f++){var g=c[f];g.checked&&(g=g.getAttribute("data-id"),g=d.getFeatureById(g),e.push(g))}c=(new ol.format.GeoJSON).writeFeaturesObject(e);d=this.previewMap.getView().getProjection().getCode();
+c.crs={type:"name",properties:{name:"urn:ogc:def:crs:"+d.replace(":","::")}};a={id:a,folder:null,active:!0,order:this.getLayerOrder(),style:this.config.styles["import"],title:b,type:netgis.LayerTypes.GEOJSON,data:c};this.config.layers.push(a);netgis.util.invoke(this.preview.container,netgis.Events.IMPORT_LAYER_ACCEPT,a);this.preview.hide();this.modal.hide()};
+netgis.Import.prototype.onPreviewTreeItemChange=function(a){a=a.detail;var b=this.previewMap.getLayers().getArray()[1].getSource().getFeatureById(a.id);a.checked?b.setStyle(null):b.setStyle(new ol.style.Style({}))};netgis.Import.prototype.onGeoportalSearchChange=function(a){a=this.geoportalSearch.value;a=a.trim();var b=this.config["import"].geoportal_search_url;b=netgis.util.replace(b,"{query}",a);console.info("Geoportal Search:",b);netgis.util.request(b,this.onGeoportalSearchResponse.bind(this))};
+netgis.Import.prototype.onGeoportalSearchResponse=function(a){function b(a){if(a&&a.layer)for(var c=0;c<a.layer.length;c++)b(a.layer[c]);else a&&e.push(a);return e.length}a=JSON.parse(a);this.geoportalResults.clear();console.info("Geoportal Response:",a);this.geoportalDataRaw=a=a.wms.srv;this.geoportalData=[];for(var c=0;c<a.length;c++){var d=a[c];console.info("Result Layer:",d);var e=[];var f=b(d);f=this.geoportalResults.addFolder(null,c,d.title+" ("+f+")");f.setAttribute("title",d["abstract"]);
+for(var g=0;g<e.length;g++){var h=e[g];console.info("Result Child:",h);this.geoportalResults.addCheckbox(f,g,h.title)}d.children=e;this.geoportalData.push(d)}};
+netgis.Import.prototype.onGeoportalSubmit=function(a){console.info("Geoportal Submit...");a=this.geoportalResults.container.getElementsByClassName("netgis-item");for(var b=0,c=0;c<a.length;c++){var d=a[c],e=d.getElementsByTagName("input")[0];if(e.checked){b+=1;e=e.getAttribute("data-id");d=d.parentNode.parentNode.parentNode.getAttribute("data-id");var f=this.geoportalData[d],g=f.children[e];console.info("Item:",d,e,f,g);var h=f.title;f=f.getMapUrl;var k=g.name;g=g.title;d="geoportal_"+d;e=d+"_"+e;
+netgis.util.invoke(this.sections.geoportal,netgis.Events.IMPORT_GEOPORTAL_SUBMIT,{folder:{id:d,title:h},layer:{id:e,url:f,name:k,title:g}})}}0<b&&this.modal.hide()};netgis=netgis||{};netgis.Info=function(a){this.config=a;this.queryLayers={};this.popup=new netgis.Popup;this.popup.setHeader("Abfrage:");this.initConfig(a)};netgis.Info.prototype.initConfig=function(a){for(a=a.layers.length-1;0<=a;a--);};netgis.Info.prototype.attachTo=function(a){this.popup.attachTo(a);a.addEventListener(netgis.Events.MAP_CLICK,this.onMapClick.bind(this));a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE,this.onMapLayerToggle.bind(this))};netgis.Info.prototype.onContextResponse=function(a){this.initConfig(a.detail.context.config)};
+netgis.Info.prototype.onMapLayerToggle=function(a){var b=a.detail;a=b.id;if(b.on){b=this.config.layers;for(var c=null,d=0;d<b.length;d++)if(b[d].id===a){c=b[d];break}if(c)switch(c.type){case netgis.LayerTypes.WMS:case netgis.LayerTypes.WMST:this.queryLayers[a]=c}}else delete this.queryLayers[a]};
+netgis.Info.prototype.onMapClick=function(a){a=a.detail;if(a.mode===netgis.Modes.VIEW){this.popup.container!==a.overlay&&this.popup.attachTo(a.overlay);this.popup.clearContent();var b=0,c;for(c in this.queryLayers){var d=this.queryLayers[c];switch(d.type){case netgis.LayerTypes.WMS:case netgis.LayerTypes.WMST:var e=d.url;d.query_url&&(e=d.query_url);var f=["service=WMS","version=1.1.0","request=GetFeatureInfo","styles=","layers="+window.encodeURIComponent(d.name),"query_layers="+window.encodeURIComponent(d.name),
+"bbox="+a.view.bbox.join(","),"srs="+a.view.projection,"width="+a.view.width,"height="+a.view.height,"x="+a.pixel[0],"y="+a.pixel[1],"info_format=text/html"];e=e+(-1===e.indexOf("?")?"?":"")+f.join("&");console.info("WMS REQUEST 1:",e);netgis.util.request(e,this.onLayerResponseWMS.bind(this),{title:d.title});b+=1}(e=d.query_url)&&""!==e&&(e=netgis.util.replace(e,"{bbox}",a.view.bbox.join(",")),e=netgis.util.replace(e,"{proj}",a.view.projection),e=netgis.util.replace(e,"{width}",a.view.width),e=netgis.util.replace(e,
+"{height}",a.view.height),e=netgis.util.replace(e,"{x}",a.pixel[0]),e=netgis.util.replace(e,"{y}",a.pixel[1]),e=netgis.util.replace(e,"{lon}",a.lon),e=netgis.util.replace(e,"{lat}",a.lat),console.info("WMS REQUEST 2:",e),netgis.util.request(e,this.onLayerResponseWMS.bind(this),{title:d.title}),b+=1)}0<b?(this.popup.showLoader(),this.popup.show()):this.popup.hide()}};
+netgis.Info.prototype.onLayerResponseWMS=function(a,b){this.popup.hideLoader();this.popup.addContent(["<details><summary class='netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d'>",b.title,"</summary><div>",a,"</div></details>"].join(""))};netgis=netgis||{};netgis.LayerID=Object.freeze({EDITABLE:"editable-layer",NON_EDITABLE:"non-editable-layer"});netgis=netgis||{};netgis.LayerTree=function(a){this.config=a;this.importFolder=null;this.initElements();this.initConfig(a);this.initFolders()};netgis.LayerTree.prototype.initElements=function(){this.panel=new netgis.Panel("Layers");this.tree=new netgis.Tree;this.tree.attachTo(this.panel.content);this.tree.container.addEventListener(netgis.Events.TREE_ITEM_CHANGE,this.onTreeItemChange.bind(this));this.tree.container.addEventListener(netgis.Events.TREE_ITEM_SLIDER_CHANGE,this.onTreeItemSliderChange.bind(this))};
+netgis.LayerTree.prototype.initFolders=function(){this.editFolder=this.tree.addFolder(null,"edit-folder","Zeichnung",!0);this.tree.addCheckbox(this.editFolder,netgis.LayerID.EDITABLE,"Editierbar");this.tree.setItemChecked(netgis.LayerID.EDITABLE,!0);this.tree.addCheckbox(this.editFolder,netgis.LayerID.NON_EDITABLE,"Nicht-Editierbar");this.tree.setItemChecked(netgis.LayerID.NON_EDITABLE,!0);this.editFolder.classList.add("netgis-hide")};
+netgis.LayerTree.prototype.initConfig=function(a,b){a.layertree&&a.layertree.title&&this.panel.setTitle(a.layertree.title);for(var c=a.folders,d={},e=0;e<c.length;e++){var f=c[e],g=this.tree.addFolder(null,f.id,f.title,b,!1);d[f.id]=g;!0===f.open&&this.tree.setFolderOpen(f.id,!0)}b=a.layers;for(e=0;e<b.length;e++){g=b[e];f=d[g.folder]?d[g.folder]:null;var h=g.id?g.id:e.toString(),k=!1;if(f)for(var l=0;l<c.length;l++){var m=c[l];m.id===g.folder&&(k=m.radio)}g=!0===k?this.tree.addRadioButton(f,h,g.title,
+g.active,this.createDefaultDetails(g)):this.tree.addCheckbox(f,h,g.title,g.active,!1,this.createDefaultDetails(g));g.addEventListener("contextmenu",this.onTreeItemMenu.bind(this))}this.tree.updateFolderChecks();c=a.layertree.buttons;for(e=0;e<c.length;e++)d=c[e],this.tree.addButton(null,d.id,d.title,this.onTreeButtonClick.bind(this));a.layertree&&!0===a.layertree.open&&this.panel.show()};
+netgis.LayerTree.prototype.attachTo=function(a){a.appendChild(this.panel.container);a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE,this.onClientContextResponse.bind(this));a.addEventListener(netgis.Events.LAYERTREE_TOGGLE,this.onLayerTreeToggle.bind(this));a.addEventListener(netgis.Events.TOOLBOX_TOGGLE,this.onToolboxToggle.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE,this.onSearchParcelToggle.bind(this));a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE,this.onMapLayerToggle.bind(this));
+a.addEventListener(netgis.Events.IMPORT_LAYER_ACCEPT,this.onImportLayerAccept.bind(this));a.addEventListener(netgis.Events.IMPORT_GEOPORTAL_SUBMIT,this.onImportGeoportalSubmit.bind(this));a.addEventListener(netgis.Events.CONTEXTMENU_SLIDER_CHANGE,this.onContextMenuSliderChange.bind(this));a.addEventListener(netgis.Events.MAP_EDIT_LAYER_LOADED,this.onMapEditLayerChange.bind(this));a.addEventListener(netgis.Events.MAP_EDIT_LAYER_CHANGE,this.onMapEditLayerChange.bind(this))};
+netgis.LayerTree.prototype.createDefaultDetails=function(a){return[{title:"Transparenz:",type:"slider",val:a.transparency?Math.round(100*a.transparency):0}]};netgis.LayerTree.prototype.onTreeItemChange=function(a){var b=a.detail;netgis.util.invoke(a.target,netgis.Events.MAP_LAYER_TOGGLE,{id:b.id,on:b.checked})};netgis.LayerTree.prototype.onClientContextResponse=function(a){this.initConfig(a.detail.context.config,!0)};netgis.LayerTree.prototype.onLayerTreeToggle=function(a){this.panel.toggle()};
+netgis.LayerTree.prototype.onToolboxToggle=function(a){this.panel.hide()};netgis.LayerTree.prototype.onSearchParcelToggle=function(a){this.panel.hide()};netgis.LayerTree.prototype.onTreeButtonClick=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");netgis.Client.handleCommand(a,b)};netgis.LayerTree.prototype.onMapLayerToggle=function(a){a=a.detail;this.tree.setItemChecked(a.id,a.on,!0);this.tree.updateFolderChecks()};
+netgis.LayerTree.prototype.onImportLayerAccept=function(a){a=a.detail;this.importFolder||(this.importFolder=this.tree.addFolder(null,"_import","Import",!0,!1));this.tree.addCheckbox(this.importFolder,a.id,a.title,!0,!0,this.createDefaultDetails(a)).addEventListener("contextmenu",this.onTreeItemMenu.bind(this));this.tree.updateFolderChecks()};
+netgis.LayerTree.prototype.onImportGeoportalSubmit=function(a){a=a.detail;var b=a.folder.id,c=this.tree.getFolder(b);c||(c=this.tree.addFolder(null,b,a.folder.title,!0,!1));var d=a.layer.id;b={id:d,folder:b,title:a.layer.title,active:!0,type:netgis.LayerTypes.WMS,url:a.layer.url,name:a.layer.name,order:1E4,transparency:0};this.config.layers.push(b);this.tree.addCheckbox(c,d,a.layer.title,!1,!1,this.createDefaultDetails(b));this.tree.setItemChecked(d,!0,!1)};
+netgis.LayerTree.prototype.onTreeItemMenu=function(a){a.preventDefault();return!1};netgis.LayerTree.prototype.onContextMenuSliderChange=function(a){var b=a.detail;a=.01*b.val;var c=null;0===b.id.indexOf("layer_trans_")&&(c=b.id.split("layer_trans_")[1]);b=this.config.layers;for(var d=0;d<b.length;d++){var e=b[d];if(e.id===c){e.transparency=a;break}}netgis.util.invoke(this.tree.container,netgis.Events.MAP_LAYER_TRANSPARENCY,{id:c,transparency:a})};
+netgis.LayerTree.prototype.onTreeItemSliderChange=function(a){var b=a.detail;a=b.id;b=.01*b.val;for(var c=this.config.layers,d=0;d<c.length;d++){var e=c[d];if(e.id===a){e.transparency=b;break}}netgis.util.invoke(this.tree.container,netgis.Events.MAP_LAYER_TRANSPARENCY,{id:a,transparency:b})};netgis.LayerTree.prototype.onMapEditLayerChange=function(a){this.editFolder.classList.remove("netgis-hide")};netgis=netgis||{};netgis.LayerTypes=Object.freeze({TMS:"TMS",WMTS:"WMTS",WMS:"WMS",WMST:"WMST",GEOJSON:"GEOJSON",VTILES:"VTILES",WFS:"WFS",GML:"GML",GEOPACKAGE:"GEOPACKAGE",SPATIALITE:"SPATIALITE",SHAPEFILE:"SHAPEFILE",WKT:"WKT",OSM:"OSM",XYZ:"XYZ"});netgis=netgis||{};netgis.Logic=function(a){this.client=a;this.config=a.config;this.container=a.container;this.modules=a.modules;this.initConfig(config);this.initEvents()};netgis.Logic.prototype.initConfig=function(a){a.wmc&&a.wmc.url&&(new netgis.WMC).requestContext(a.wmc.url,this.onContextLoaded.bind(this))};netgis.Logic.prototype.initEvents=function(){};
+netgis.Logic.prototype.onMenuButtonClick=function(a){a=a.detail;switch(a.id){case "layertree":this.modules.layertree.panel.toggle();break;case "searchplace":this.modules.searchplace.search.toggle();break;default:console.error("unhandled menu button",a)}};netgis.Logic.prototype.onLayerItemChange=function(a){a=a.detail;if(a.checked)for(var b=this.config.layers,c=0;c<b.length;c++){var d=b[c];d.id===a.id&&this.modules.map.addLayer(a.id,d)}else this.modules.map.removeLayer(a.id)};
+netgis.Logic.prototype.onControlsButtonClick=function(a){switch(a.detail.id){case "zoom_in":this.modules.map.zoom(1);break;case "zoom_out":this.modules.map.zoom(-1);break;case "zoom_home":this.config.map.bbox?this.modules.map.zoomBBox(this.config.map.bbox,500):this.config.map.centerLonLat&&(a=this.config.map.centerLonLat,this.modules.map.zoomLonLat(a[0],a[1],this.config.map.zoom))}};
+netgis.Logic.prototype.onSearchPlaceChange=function(a){var b=this.config.searchplace.url;b=netgis.util.replace(b,"{query}",window.encodeURIComponent(a.detail.query));netgis.util.request(b,this.onSearchPlaceResponse.bind(this))};
+netgis.Logic.prototype.onSearchPlaceResponse=function(a){a=JSON.parse(a).data;this.modules.searchplace.search.clearResults();for(var b=0;b<a.length;b++){var c=a[b],d=c.name;c={type:"street",id:c.strid,lon:Number.parseFloat(c.wgs_x),lat:Number.parseFloat(c.wgs_y)};this.modules.searchplace.search.addResult(d,JSON.stringify(c))}};
+netgis.Logic.prototype.onSearchPlaceSelect=function(a){a=JSON.parse(a.detail.data);this.modules.map.zoomLonLat(a.lon,a.lat,this.config.searchplace.zoom);if("street"===a.type){var b=this.config.searchplace.url_detail;b&&(b=netgis.util.replace(b,"{id}",a.id),netgis.util.request(b,this.onSearchPlaceDetailResponse.bind(this)))}};
+netgis.Logic.prototype.onSearchPlaceDetailResponse=function(a){a=JSON.parse(a);var b=a.hsnrarr;if(0!==b.length){this.modules.searchplace.search.clearResults();for(var c=0;c<b.length;c++){var d=b[c],e=a.strname+" "+d.hsnr;d={type:"address",lon:Number.parseFloat(d.wgs_x),lat:Number.parseFloat(d.wgs_y)};this.modules.searchplace.search.addResult(e,JSON.stringify(d))}}};netgis.Logic.prototype.onSearchPlaceClear=function(a){};
+netgis.Logic.prototype.onContextLoaded=function(a){console.info("Context Loaded:",a);for(var b=0;b<a.config.layers.length;b++)this.config.layers.push(a.config.layers[b]);a.config.map.bbox&&(this.config.map.bbox=a.config.map.bbox);this.modules.map&&this.modules.map.initConfig(a.config);this.modules.layertree&&this.modules.layertree.initConfig(a.config,!0)};netgis=netgis||{};
+netgis.Map=function(a){this.config=a;this.mode=null;this.interactions={};this.layers={};this.viewHistory=[];this.viewIndex=-1;this.viewFromHistory=!1;this.viewHistoryMax=20;this.hoverBounds=this.hoverFeature=null;this.selectedFeatures=[];this.sketchFeatures=[];this.snap=null;this.snapFeatures=new ol.Collection;this.drawError=this.selectMultiple=this.editEventsSilent=!1;this.initElements();this.initMap(a);this.initLayers();this.initOverlays();this.initInteractions();this.initConfig(a);this.setMode(netgis.Modes.VIEW)};
+netgis.Map.prototype.initElements=function(){this.container=document.createElement("div");this.container.setAttribute("tabindex",-1);this.container.className="netgis-map";this.container.addEventListener("pointerleave",this.onPointerLeave.bind(this));this.container.addEventListener("contextmenu",this.onRightClick.bind(this));this.container.addEventListener("keydown",this.onKeyDown.bind(this));this.container.addEventListener("keyup",this.onKeyUp.bind(this))};
+netgis.Map.prototype.initMap=function(a){var b=a.map;"undefined"!==typeof proj4&&(proj4.defs(a.projections),proj4.defs("urn:ogc:def:crs:OGC:1.3:CRS84",proj4.defs("EPSG:4326")),ol.proj.proj4.register(proj4));var c={projection:b.projection,center:b.center_lonlat?ol.proj.fromLonLat(b.center_lonlat,b.projection):b.center,minZoom:b.min_zoom,maxZoom:b.max_zoom,zoom:b.zoom};this.view=new ol.View(c);this.map=new ol.Map({target:this.container,view:this.view,pixelRatio:1,moveTolerance:5,controls:[]});b.scalebar&&
+(this.scalebar=new ol.control.ScaleLine({bar:!0}),this.map.addControl(this.scalebar));this.map.on("moveend",this.onMapMoveEnd.bind(this));this.map.on("pointermove",this.onPointerMove.bind(this));this.map.on("click",this.onPointerClick.bind(this));if(a.map.extent){var d=this;window.setTimeout(function(){d.map.updateSize();d.view.fit(a.map.extent)},10)}};
+netgis.Map.prototype.initLayers=function(){this.measureLayer=new ol.layer.Vector({source:new ol.source.Vector({features:[]}),zIndex:6E4,style:this.styleMeasure.bind(this)});this.map.addLayer(this.measureLayer);var a=this.config.tools;this.nonEditLayer=new ol.layer.Vector({source:new ol.source.Vector({features:[]}),zIndex:5E4,style:this.styleNonEdit.bind(this),updateWhileAnimating:a.interactive_render,updateWhileInteracting:a.interactive_render});this.map.addLayer(this.nonEditLayer);this.editLayer=
+new ol.layer.Vector({source:new ol.source.Vector({features:[]}),zIndex:5E4,style:this.styleEdit.bind(this),updateWhileAnimating:a.interactive_render,updateWhileInteracting:a.interactive_render});this.map.addLayer(this.editLayer);this.editLayer.getSource().on("addfeature",this.onEditLayerAdd.bind(this));this.editLayer.getSource().on("changefeature",this.onEditLayerChange.bind(this));this.editLayer.getSource().on("removefeature",this.onEditLayerRemove.bind(this));this.previewLayer=new ol.layer.Vector({source:new ol.source.Vector({features:[]}),
+zIndex:55E3,style:this.styleSketch.bind(this)});this.map.addLayer(this.previewLayer);this.boundsLayer=null;if(this.config.tools.bounds){a=(new ol.format.GeoJSON).readFeatures(this.config.tools.bounds);var b=null;this.config.tools.show_bounds&&this.config.styles.bounds&&(b=this.createStyle(this.config.styles.bounds));this.boundsLayer=new ol.layer.Vector({source:new ol.source.Vector({features:a}),style:b,zIndex:6E4});this.map.addLayer(this.boundsLayer)}};
+netgis.Map.prototype.initOverlays=function(){var a=document.createElement("div");a.className="netgis-map-overlay";this.popupOverlay=new ol.Overlay({id:"popup",element:a,positioning:"center-center"});this.map.addOverlay(this.popupOverlay)};
+netgis.Map.prototype.initInteractions=function(){this.interactions[netgis.Modes.VIEW]=[new ol.interaction.DragPan,new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.ZOOM_BOX]=[new ol.interaction.DragZoom({condition:function(a){return 0===a.originalEvent.button},out:!1}),new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.MEASURE_LINE]=
+[new ol.interaction.DragPan,new ol.interaction.Modify({source:this.measureLayer.getSource(),deleteCondition:ol.events.condition.doubleClick,style:this.styleMeasure.bind(this)}),new ol.interaction.Draw({type:"LineString",source:this.measureLayer.getSource(),style:this.styleMeasure.bind(this)}),new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),new ol.interaction.PinchZoom,new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.MEASURE_AREA]=[new ol.interaction.DragPan,
+new ol.interaction.Modify({source:this.measureLayer.getSource(),deleteCondition:ol.events.condition.doubleClick,style:this.styleMeasure.bind(this)}),new ol.interaction.Draw({type:"Polygon",source:this.measureLayer.getSource(),style:this.styleMeasure.bind(this)}),new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),new ol.interaction.PinchZoom,new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.MEASURE_LINE][2].on("drawstart",this.onMeasureLineBegin.bind(this));
+this.interactions[netgis.Modes.MEASURE_AREA][2].on("drawstart",this.onMeasureAreaBegin.bind(this));if(!0===this.config.tools.editable){var a=this.config.tools.bounds?!0:!1;this.interactions[netgis.Modes.DRAW_POINTS]=[new ol.interaction.Draw({type:"Point",source:this.editLayer.getSource(),style:this.styleSketch.bind(this),geometryFunction:a?this.onDrawPointsUpdateGeom.bind(this):void 0}),new ol.interaction.DragPan,new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),
+new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.DRAW_POINTS][0].on("drawend",this.onDrawBufferEnd.bind(this));if(a)this.interactions[netgis.Modes.DRAW_POINTS][0].on("drawend",this.onDrawPointsEnd.bind(this));this.interactions[netgis.Modes.DRAW_LINES]=[new ol.interaction.Draw({type:"LineString",source:this.editLayer.getSource(),style:this.styleSketch.bind(this),geometryFunction:a?this.onDrawLinesUpdateGeom.bind(this):void 0}),new ol.interaction.DragPan,new ol.interaction.DragPan({condition:function(a){return 1===
+a.originalEvent.button}}),new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.DRAW_LINES][0].on("drawend",this.onDrawBufferEnd.bind(this));if(a)this.interactions[netgis.Modes.DRAW_LINES][0].on("drawend",this.onDrawLinesEnd.bind(this));this.interactions[netgis.Modes.DRAW_POLYGONS]=[new ol.interaction.Draw({type:"Polygon",source:this.editLayer.getSource(),style:this.styleSketch.bind(this),geometryFunction:a?this.onDrawPolygonsUpdateGeom.bind(this):void 0}),new ol.interaction.DragPan,new ol.interaction.DragPan({condition:function(a){return 1===
+a.originalEvent.button}}),new ol.interaction.MouseWheelZoom];if(a)this.interactions[netgis.Modes.DRAW_POLYGONS][0].on("drawend",this.onDrawPolygonsEnd.bind(this));this.interactions[netgis.Modes.MODIFY_FEATURES]=[new ol.interaction.DragPan,new ol.interaction.Modify({source:this.editLayer.getSource(),deleteCondition:ol.events.condition.doubleClick,style:this.styleModify.bind(this)}),new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),new ol.interaction.MouseWheelZoom];
+this.interactions[netgis.Modes.DELETE_FEATURES]=[new ol.interaction.DragPan,new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.CUT_FEATURES_DRAW]=[new ol.interaction.Draw({type:"Polygon",style:this.styleSketch.bind(this)}),new ol.interaction.DragPan,new ol.interaction.DragPan({condition:function(a){return 1===a.originalEvent.button}}),new ol.interaction.MouseWheelZoom];this.interactions[netgis.Modes.CUT_FEATURES_DRAW][0].on("drawend",
+this.onCutFeaturesDrawEnd.bind(this))}};netgis.Map.prototype.initConfig=function(a){a.map.bbox&&this.zoomBBox(a.map.bbox);a.map.zoom&&this.view.setZoom(a.map.zoom);a=a.layers;for(var b=a.length-1;0<=b;b--){var c=a[b];!0===c.active&&this.addLayer(c.id,c)}};
+netgis.Map.prototype.attachTo=function(a){a.appendChild(this.container);a.addEventListener(netgis.Events.CLIENT_CONTEXT_RESPONSE,this.onClientContextResponse.bind(this));a.addEventListener(netgis.Events.CLIENT_SET_MODE,this.onClientSetMode.bind(this));a.addEventListener(netgis.Events.PANEL_TOGGLE,this.onPanelToggle.bind(this));a.addEventListener(netgis.Events.PANEL_RESIZE,this.onPanelResize.bind(this));a.addEventListener(netgis.Events.MAP_EDIT_LAYER_LOADED,this.onEditLayerLoaded.bind(this));a.addEventListener(netgis.Events.MAP_ZOOM,
+this.onMapZoom.bind(this));a.addEventListener(netgis.Events.MAP_ZOOM_HOME,this.onMapZoomHome.bind(this));a.addEventListener(netgis.Events.MAP_ZOOM_LONLAT,this.onMapZoomLonLat.bind(this));a.addEventListener(netgis.Events.MAP_ZOOM_SCALE,this.onMapZoomScale.bind(this));a.addEventListener(netgis.Events.MAP_ZOOM_LAYER,this.onMapZoomLayer.bind(this));a.addEventListener(netgis.Events.MAP_ZOOM_LEVEL,this.onMapZoomLevel.bind(this));a.addEventListener(netgis.Events.MAP_LAYER_TOGGLE,this.onMapLayerToggle.bind(this));
+a.addEventListener(netgis.Events.MAP_LAYER_TRANSPARENCY,this.onMapLayerTransparency.bind(this));a.addEventListener(netgis.Events.MAP_SNAP_TOGGLE,this.onMapSnapToggle.bind(this));a.addEventListener(netgis.Events.MAP_VIEW_PREV,this.onMapViewPrev.bind(this));a.addEventListener(netgis.Events.MAP_VIEW_NEXT,this.onMapViewNext.bind(this));a.addEventListener(netgis.Events.MEASURE_CLEAR,this.onMeasureClear.bind(this));a.addEventListener(netgis.Events.DRAW_BUFFER_TOGGLE,this.onDrawBufferToggle.bind(this));
+a.addEventListener(netgis.Events.DRAW_BUFFER_CHANGE,this.onDrawBufferChange.bind(this));a.addEventListener(netgis.Events.BUFFER_CHANGE,this.onBufferChange.bind(this));a.addEventListener(netgis.Events.BUFFER_ACCEPT,this.onBufferAccept.bind(this));a.addEventListener(netgis.Events.IMPORT_LAYER_ACCEPT,this.onImportLayerAccept.bind(this));a.addEventListener(netgis.Events.IMPORT_LAYER_PREVIEW,this.onImportLayerPreview.bind(this));a.addEventListener(netgis.Events.IMPORT_GEOPORTAL_SUBMIT,this.onImportGeoportalSubmit.bind(this));
+a.addEventListener(netgis.Events.MAP_COPY_FEATURE_TO_EDIT,this.onCopyFeatureToEdit.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_ENTER,this.onSearchParcelItemEnter.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_LEAVE,this.onSearchParcelItemLeave.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_CLICK,this.onSearchParcelItemClick.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_ITEM_IMPORT,this.onSearchParcelItemImport.bind(this));a.addEventListener(netgis.Events.EXPORT_BEGIN,
+this.onExportBegin.bind(this));a.addEventListener(netgis.Events.TIMESLIDER_SHOW,this.onTimeSliderShow.bind(this));a.addEventListener(netgis.Events.TIMESLIDER_HIDE,this.onTimeSliderHide.bind(this));a.addEventListener(netgis.Events.TIMESLIDER_SELECT,this.onTimeSliderSelect.bind(this))};
+netgis.Map.prototype.setMode=function(a){switch(this.mode){case netgis.Modes.MODIFY_FEATURES:this.editLayer.setStyle(this.styleEdit.bind(this));break;case netgis.Modes.DRAW_POINTS:case netgis.Modes.DRAW_LINES:this.previewLayer.getSource().clear();this.container.classList.remove("netgis-not-allowed");break;case netgis.Modes.DRAW_POLYGONS:this.container.classList.remove("netgis-not-allowed");break;case netgis.Modes.BUFFER_FEATURES_EDIT:this.clearSketchFeatures()}this.map.getInteractions().clear();this.mode&&
+this.container.classList.remove("netgis-mode-"+this.mode);var b=this.interactions[a];b||(console.warn("no interactions found for mode",a),b=this.interactions[netgis.Modes.VIEW]);for(var c=0;c<b.length;c++)this.map.addInteraction(b[c]);b=this.config.tools.editable;switch(a){case netgis.Modes.DRAW_POINTS:case netgis.Modes.DRAW_LINES:b&&(this.setSnapping(this.drawSnapOn),this.onDrawBufferToggle({detail:{on:this.drawBufferOn,radius:this.drawBufferRadius,segments:this.drawBufferSegments}}));break;case netgis.Modes.DRAW_POLYGONS:b&&
+this.setSnapping(this.drawSnapOn);break;case netgis.Modes.MODIFY_FEATURES:b&&this.editLayer.setStyle(this.styleModify.bind(this))}this.container.classList.add("netgis-mode-"+a);this.mode=a};
+netgis.Map.prototype.addLayer=function(a,b){var c=this.createLayer(b);c&&(c.set("id",a),this.map.addLayer(c),this.layers[a]=c,b.order&&c.setZIndex(b.order),b.transparency&&c.setOpacity(1-b.transparency),b.style&&c.setStyle(this.createStyle(b.style)),b.min_zoom&&c.setMinZoom(b.min_zoom-1E-4),b.max_zoom&&c.setMaxZoom(b.max_zoom),c instanceof ol.layer.Vector&&this.addSnapLayer(c),b.type===netgis.LayerTypes.WMST&&netgis.util.invoke(this.container,netgis.Events.TIMESLIDER_SHOW,{layer:a,title:b.title,url:b.url,
+name:b.name}));return c};
+netgis.Map.prototype.createLayer=function(a){switch(a.type){case netgis.LayerTypes.TMS:case netgis.LayerTypes.XYZ:var b=this.createLayerTMS(a.url,a.projection,a.extent,a.scales);break;case netgis.LayerTypes.OSM:b=this.createLayerTMS("https://{a-c}.tile.openstreetmap.de/{z}/{x}/{y}.png");break;case netgis.LayerTypes.WMTS:b=this.createLayerWMTS(a.url,a.name);break;case netgis.LayerTypes.WMS:b=this.createLayerWMS(a.url,a.name,a.format,a.tiled,a.username,a.password);break;case netgis.LayerTypes.WMST:b=this.createLayerWMST(a.url,
+a.name,a.format,a.tiled,a.username,a.password);break;case netgis.LayerTypes.GEOJSON:(b=a.data)&&netgis.util.isString(b)&&(b=JSON.parse(b));b=this.createLayerGeoJSON(b?b:a.url);break;case netgis.LayerTypes.WFS:b=this.createLayerWFS(a.url,a.name,this.view.getProjection().getCode(),a.format,a.username,a.password);break;case netgis.LayerTypes.VTILES:b=this.createLayerVectorTiles(a.url,a.extent,a.min_zoom,a.max_zoom);break;case netgis.LayerTypes.GML:b=this.createLayerGML(a.data);break;case netgis.LayerTypes.GEOPACKAGE:b=
+this.createLayerGeoPackage(a.data);break;case netgis.LayerTypes.SPATIALITE:b=this.createLayerSpatialite(a.data);break;case netgis.LayerTypes.SHAPEFILE:b=this.createLayerShapefile(a.data);break;case netgis.LayerTypes.WKT:b=this.createLayerWKT(a.data);break;default:console.error("unknown layer type",a.type)}return b};
+netgis.Map.prototype.removeLayer=function(a){var b=this.layers[a];b instanceof ol.layer.Vector&&this.removeSnapLayer(b);for(var c=0;c<this.config.layers.length;c++)if(this.config.layers[c].id===a){this.config.layers[c].type===netgis.LayerTypes.WMST&&netgis.util.invoke(this.container,netgis.Events.TIMESLIDER_HIDE,null);break}this.map.removeLayer(b);delete this.layers[a]};netgis.Map.prototype.setLayerOrder=function(a,b){this.layers[a].setZIndex(b)};
+netgis.Map.prototype.createStyle=function(a){var b=a.radius?a.radius:3,c=a.width?a.width:1,d=a.fill?a.fill:"gray",e=a.stroke?a.stroke:"black";return function(a){return new ol.style.Style({image:new ol.style.Circle({radius:b-c,fill:new ol.style.Fill({color:d})}),fill:new ol.style.Fill({color:d}),stroke:new ol.style.Stroke({color:e,width:c})})}};
+netgis.Map.prototype.styleMeasure=function(a){var b=a.getGeometry(),c=this.config.measure,d=new ol.style.Style({fill:new ol.style.Fill({color:c.area_fill}),stroke:new ol.style.Stroke({color:c.line_color,width:c.line_width,lineDash:c.line_dash})});b instanceof ol.geom.Polygon?(b=b.getArea(),d.setText(new ol.style.Text({text:[netgis.util.formatArea(b,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:c.text_color}),backgroundFill:new ol.style.Fill({color:c.text_back}),padding:[2,4,2,4],
+overflow:!0}))):b instanceof ol.geom.LineString&&(this.mode===netgis.Modes.MEASURE_LINE||this.mode===netgis.Modes.VIEW)&&(b=b.getLength(),d.setText(new ol.style.Text({text:[netgis.util.formatDistance(b),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:c.text_color}),backgroundFill:new ol.style.Fill({color:c.text_back}),padding:[2,4,2,4],overflow:!0})));return c.point_radius&&0<c.point_radius?(b=this.getGeometryPoints(a),a=new ol.style.Style({image:new ol.style.Circle({radius:1.25*c.point_radius,
+fill:new ol.style.Fill({color:c.point_stroke})}),geometry:b}),c=new ol.style.Style({image:new ol.style.Circle({radius:c.point_radius,fill:new ol.style.Fill({color:c.point_fill})}),geometry:b}),[d,a,c]):d};
+netgis.Map.prototype.styleEdit=function(a){var b=this.config.styles.draw,c=this.config.styles.select,d=a.getGeometry(),e=this.hoverFeature===a;-1<this.selectedFeatures.indexOf(a)&&(e=!0);var f=e?c.fill:b.fill;a=e?c.stroke:b.stroke;c=new ol.style.Style({image:new ol.style.Circle({radius:e?c.radius:b.radius,fill:new ol.style.Fill({color:a})}),fill:new ol.style.Fill({color:f}),stroke:new ol.style.Stroke({color:a,width:b.width})});e&&c.setZIndex(1);if(d instanceof ol.geom.Polygon||d instanceof ol.geom.MultiPolygon){e=
+d.getArea();if(!e||0>=e)return c;!0===b.viewport_labels&&(b=this.view.calculateExtent(this.map.getSize()),f=ol.geom.Polygon.fromExtent(b),b=new jsts.io.OL3Parser,d=b.read(d),f=b.read(f),d=d.intersection(f),d=b.write(d),c.setGeometry(d));c.setText(new ol.style.Text({text:[netgis.util.formatArea(e,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:a}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]}))}return c};
+netgis.Map.prototype.styleNonEdit=function(a){var b=this.config.styles.non_edit,c=this.config.styles.select,d=a.getGeometry(),e=this.hoverFeature===a;-1<this.selectedFeatures.indexOf(a)&&(e=!0);var f=e?c.fill:b.fill;a=e?c.stroke:b.stroke;c=new ol.style.Style({image:new ol.style.Circle({radius:e?c.radius:b.radius,fill:new ol.style.Fill({color:a})}),fill:new ol.style.Fill({color:f}),stroke:new ol.style.Stroke({color:a,width:b.width})});e&&c.setZIndex(1);if(d instanceof ol.geom.Polygon){e=d.getArea();
+if(!e||0>=e)return c;!0===b.viewport_labels&&(b=this.map.getView().calculateExtent(this.map.getSize()),f=ol.geom.Polygon.fromExtent(b),b=new jsts.io.OL3Parser,d=b.read(d),f=b.read(f),d=d.intersection(f),d=b.write(d),c.setGeometry(d));c.setText(new ol.style.Text({text:[netgis.util.formatArea(e,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:a}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]}))}return c};
+netgis.Map.prototype.styleSketch=function(a){var b=this.config.styles[this.drawError?"error":"sketch"],c=a.getGeometry(),d=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.fill})}),fill:new ol.style.Fill({color:b.fill}),stroke:new ol.style.Stroke({color:b.stroke,width:b.width})});c instanceof ol.geom.Polygon&&(c=c.getArea(),d.setText(new ol.style.Text({text:[netgis.util.formatArea(c,!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:b.stroke}),
+backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]})));a=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.stroke})}),geometry:this.getGeometryPoints(a)});return[d,a]};
+netgis.Map.prototype.styleModify=function(a){var b=this.config.styles.modify,c=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.stroke})}),fill:new ol.style.Fill({color:b.fill}),stroke:new ol.style.Stroke({color:b.stroke,width:b.width})}),d=new ol.style.Style({image:new ol.style.Circle({radius:b.radius,fill:new ol.style.Fill({color:b.stroke})}),geometry:this.getGeometryPoints(a)});a=a.getGeometry();a instanceof ol.geom.Polygon&&(a=a.getArea(),c.setText(new ol.style.Text({text:[netgis.util.formatArea(a,
+!0),"4mm sans-serif"],font:"Arial",fill:new ol.style.Fill({color:b.stroke}),backgroundFill:new ol.style.Fill({color:"rgba( 255, 255, 255, 0.5 )"}),padding:[2,4,2,4]})));return[c,d]};netgis.Map.prototype.styleHover=function(a){a=this.config.styles.select;return new ol.style.Style({image:new ol.style.Circle({radius:a.radius,fill:new ol.style.Fill({color:a.stroke})}),fill:new ol.style.Fill({color:a.fill}),stroke:new ol.style.Stroke({color:a.stroke,width:a.width}),zIndex:1})};
+netgis.Map.prototype.getGeometryPoints=function(a){var b=a.getGeometry();if(b instanceof ol.geom.LineString)return new ol.geom.MultiPoint(b.getCoordinates());if(b instanceof ol.geom.Polygon){a=[];b=b.getCoordinates();for(var c=0;c<b.length;c++)for(var d=b[c],e=0;e<d.length;e++)a.push(d[e]);return new ol.geom.MultiPoint(a)}if(b instanceof ol.geom.MultiPolygon){a=[];for(var f=b.getPolygons(),g=0;g<f.length;g++)for(b=f[g].getCoordinates(),c=0;c<b.length;c++)for(d=b[c],e=0;e<d.length;e++)a.push(d[e]);
+return new ol.geom.MultiPoint(a)}if(b instanceof ol.geom.MultiLineString){a=[];f=b.getPolygons();for(g=0;g<f.length;g++)for(b=f[g].getCoordinates(),c=0;c<b.length;c++)for(d=b[c],e=0;e<d.length;e++)a.push(d[e]);return new ol.geom.MultiPoint(a)}return b};netgis.Map.prototype.redrawVectorLayers=function(){this.map.getLayers().forEach(function(a,b,c){(a instanceof ol.layer.Vector||a instanceof ol.layer.VectorTile)&&a.setStyle(a.getStyle())})};
+netgis.Map.prototype.setSnapping=function(a){var b=this.config.tools.snapping;a?(this.snap=new ol.interaction.Snap({features:this.snapFeatures,pixelTolerance:b.tolerance?b.tolerance:10}),this.map.addInteraction(this.snap),this.snapFeatures.changed()):this.snap&&(this.map.removeInteraction(this.snap),this.snap=null);this.drawSnapOn=a};netgis.Map.prototype.setDrawTrace=function(a){};netgis.Map.prototype.addSnapLayer=function(a){a=a.getSource().getFeatures();for(var b=0;b<a.length;b++)this.snapFeatures.push(a[b])};
+netgis.Map.prototype.removeSnapLayer=function(a){a=a.getSource().getFeatures();for(var b=0;b<a.length;b++)this.snapFeatures.remove(a[b])};netgis.Map.prototype.setDrawBuffer=function(a,b,c){if(a){var d=this.createBufferFeature(new ol.geom.Point(this.view.getCenter()),b,c);this.previewLayer.getSource().addFeature(d);this.drawBufferRadius=b;this.drawBufferSegments=c}else this.previewLayer.getSource().clear();this.drawBufferOn=a};
+netgis.Map.prototype.createLayerTMS=function(a,b,c,d){if(b&&c&&d){b=[];d="map"===d?this.config.map.scales:d;c="map"===c?this.config.map.extent:c;for(var e=0;e<d.length;e++)b.unshift(this.getResolutionFromScale(d[e]));c=new ol.source.TileImage({crossOrigin:null,projection:this.view.getProjection(),tileGrid:new ol.tilegrid.TileGrid({extent:c,origin:[c[0],c[1]],resolutions:b}),tileUrlFunction:function(b){if(null!==b){var c=a;c=netgis.util.replace(c,"{z}",b[0]);c=netgis.util.replace(c,"{x}",b[1]);c=netgis.util.replace(c,
+"{y}",b[2]);return c=netgis.util.replace(c,"{-y}",-b[2]-1)}}});c=new ol.layer.Tile({source:c})}else c=new ol.layer.Tile({source:new ol.source.XYZ({url:a,crossOrigin:"anonymous"})});return c};
+netgis.Map.prototype.createLayerWMS=function(a,b,c,d,e,f){a={url:a,params:{LAYERS:b,FORMAT:c?c:"image/png",TRANSPARENT:"true",VERSION:"1.1.1"},hidpi:!1};e&&f&&(a.imageLoadFunction=function(a,b){var c=new XMLHttpRequest;c.open("GET",b);c.setRequestHeader("Authorization","Basic "+window.btoa(e+":"+f));c.onload=function(){a.getImage().src=b};c.send()});d?(d=new ol.source.TileWMS(a),d=new ol.layer.Tile({source:d})):(d=new ol.source.ImageWMS(a),d=new ol.layer.Image({source:d}));return d};
+netgis.Map.prototype.createLayerWMST=function(a,b,c,d,e,f){a={url:a,params:{LAYERS:b,FORMAT:c?c:"image/png",TRANSPARENT:"true",VERSION:"1.1.1"},hidpi:!1};e&&f&&(a.imageLoadFunction=function(a,b){var c=new XMLHttpRequest;c.open("GET",b);c.setRequestHeader("Authorization","Basic "+window.btoa(e+":"+f));c.onload=function(){a.getImage().src=b};c.send()});d?(d=new ol.source.TileWMS(a),d=new ol.layer.Tile({source:d})):(d=new ol.source.ImageWMS(a),d=new ol.layer.Image({source:d}));return d};
+netgis.Map.prototype.createLayerWMTS=function(a){for(var b=[],c=this.client.config.map.scales,d=this.client.config.map.extent,e=0;e<c.length;e++)b.unshift(this.getResolutionFromScale(c[e]));b=new ol.source.TileImage({crossOrigin:null,projection:this.view.getProjection(),tileGrid:new ol.tilegrid.TileGrid({extent:d,origin:[d[0],d[1]],resolutions:b}),tileUrlFunction:function(b){if(null!==b){var c=a;c=netgis.util.replace(c,"{z}",b[0]);c=netgis.util.replace(c,"{x}",b[1]);c=netgis.util.replace(c,"{y}",
+b[2]);return c=netgis.util.replace(c,"{-y}",-b[2])}}});return new ol.layer.Tile({source:b})};
+netgis.Map.prototype.createLayerWMTS_01=function(a,b){for(var c=this.view.getProjection().getExtent(),d=ol.extent.getWidth(c)/256,e=Array(14),f=Array(14),g=0;14>g;++g)e[g]=d/Math.pow(2,g),f[g]=g;source=new ol.source.WMTS({url:a,params:{LAYER:b,FORMAT:"image/png",TRANSPARENT:"true",VERSION:"1.1.1"},layer:b,format:"image/jpeg",matrixSet:"UTM32",tileGrid:new ol.tilegrid.WMTS({origin:ol.extent.getTopLeft(c),resolutions:e,matrixIds:f})})};
+netgis.Map.prototype.createLayerGeoJSON=function(a){if(netgis.util.isObject(a)){var b=new ol.format.GeoJSON,c=b.readProjection(a);a=b.readFeatures(a,{featureProjection:this.view.getProjection()});c=c.getCode();switch(c){case "EPSG:3857":case "EPSG:4326":case this.view.getProjection().getCode():break;default:console.warn("unsupported import projection '"+c+"'")}var d=new ol.layer.Vector({source:new ol.source.Vector({features:a})});return d}if(netgis.util.isString(a)){d=new ol.layer.Vector({source:new ol.source.Vector({features:[]})});
+var e=this;netgis.util.request(a,function(a){a=JSON.parse(a);a=e.createLayerGeoJSON(a);d.getSource().addFeatures(a.getSource().getFeatures())});return d}};
+netgis.Map.prototype.createLayerGML=function(a){console.warn("GML support is experimental!");var b=[];a=(new DOMParser).parseFromString(a,"text/xml").getElementsByTagName("gml:featureMember");for(var c=0;c<a.length;c++){for(var d={},e=a[c].children[0],f=0;f<e.attributes.length;f++){var g=e.attributes[f];d[g.nodeName]=g.nodeValue}for(f=0;f<e.children.length;f++)if(g=e.children[f],"ogr:geometryProperty"!==g.nodeName){var h=g.nodeName.split(":");d[h[h.length-1]]=g.innerHTML}e=e.getElementsByTagName("ogr:geometryProperty")[0].children[0];
+(f=e.getAttribute("srsName"))&&"EPSG:4326"!==f&&f!==this.projection&&console.warn("unsupported import projection:",f);switch(e.nodeName){case "gml:Polygon":d.geometry=this.gmlParsePolygon(e,f);break;case "gml:MultiPolygon":d.geometry=this.gmlParseMultiPolygon(e,f)}d=new ol.Feature(d);b.push(d)}return new ol.layer.Vector({source:new ol.source.Vector({features:b})})};
+netgis.Map.prototype.gmlParsePolygon=function(a,b){var c=[];a=a.getElementsByTagName("gml:LinearRing");for(var d=0;d<a.length;d++){var e=a[d].getElementsByTagName("gml:coordinates")[0].innerHTML;c.push(this.gmlParseCoordinates(e,b))}return new ol.geom.Polygon(c)};netgis.Map.prototype.gmlParseMultiPolygon=function(a,b){var c=[];a=a.getElementsByTagName("gml:polygonMember");for(var d=0;d<a.length;d++){var e=a[d].getElementsByTagName("gml:Polygon")[0];c.push(this.gmlParsePolygon(e,b))}return new ol.geom.MultiPolygon(c)};
+netgis.Map.prototype.gmlParseCoordinates=function(a,b){a=a.split(" ");for(var c=0;c<a.length;c++){a[c]=a[c].split(",");for(var d=0;d<a[c].length;d++)a[c][d]=Number.parseFloat(a[c][d]);b&&(a[c]=ol.proj.transform(a[c],b,this.view.getProjection()))}return a};
+netgis.Map.prototype.createLayerGeoPackage=function(a){var b=new ol.layer.Vector({source:new ol.source.Vector({features:[]})}),c=this;a=new Uint8Array(a);window.GeoPackage.setSqljsWasmLocateFile(function(a){return c.config["import"].geopackage_lib+a});window.GeoPackage.GeoPackageAPI.open(a).then(function(a){for(var d=[],f=new ol.format.GeoJSON,g=a.getFeatureTables(),h=0;h<g.length;h++)for(var k=a.queryForGeoJSONFeaturesInTable(g[h]),l=0;l<k.length;l++){var m=f.readGeometry(k[l].geometry,{featureProjection:c.view.getProjection()});
+m=new ol.Feature({geometry:m});d.push(m)}b.getSource().addFeatures(d)});return b};
+netgis.Map.prototype.createLayerSpatialite=function(a){var b=new ol.layer.Vector({source:new ol.source.Vector({features:[]})}),c=this;window.initSqlJs().then(function(d){var e=[],f=new Uint8Array(a);d=new d.Database(f);var g=d.exec("SELECT name FROM sqlite_schema WHERE type = 'table' \n\t\t\t\t\tAND name NOT LIKE 'sqlite_%' \n\t\t\t\t\tAND name NOT LIKE 'sql_%' \n\t\t\t\t\tAND name NOT LIKE 'idx_%' \n\t\t\t\t\tAND name NOT LIKE 'spatial_ref_sys%' \n\t\t\t\t\tAND name NOT LIKE 'spatialite_%' \n\t\t\t\t\tAND name NOT LIKE 'geometry_columns%' \n\t\t\t\t\tAND name NOT LIKE 'views_%' \n\t\t\t\t\tAND name NOT LIKE 'virts_%' \n\t\t\t\t\tAND name NOT LIKE 'SpatialIndex' \n\t\t\t\t\tAND name NOT LIKE 'KNN%' \n\t\t\t\t\tAND name NOT LIKE 'ElementaryGeometries' \n\t\t\t\t;");f=
+g[0].values;for(var h=0;h<f.length;h++){g=d.exec("SELECT * FROM "+f[h][0]);var k=g[0];g=null;for(var l=0;l<k.columns.length;l++){if("geometry"===k.columns[l].toLowerCase()){g=l;break}if("geom"===k.columns[l].toLowerCase()){g=l;break}}if(null!==g)for(k=k.values,l=0;l<k.length;l++){var m=k[l][g],n=new Uint8Array(m.length-43-1+5);n[0]=m[1];n[1]=m[39];n[2]=m[40];n[3]=m[41];n[4]=m[42];for(var q=m.length-43-1,p=0;p<q;p++)n[5+p]=m[43+p];m=(new ol.format.WKB).readGeometry(n,{featureProjection:c.view.getProjection()});
+e.push(new ol.Feature({geometry:m}))}}b.getSource().addFeatures(e)});return b};netgis.Map.prototype.createLayerShapefile=function(a){var b=new ol.layer.Vector({source:new ol.source.Vector({features:[]})}),c=this;shp(a).then(function(a){var d=new ol.format.GeoJSON;d.readProjection(a);a=d.readFeatures(a,{featureProjection:c.view.getProjection()});b.getSource().addFeatures(a)});return b};
+netgis.Map.prototype.createLayerWKT=function(a){for(var b=new ol.format.WKT,c=[],d=0;d<a.length;d++){var e=a[d],f=b.readGeometry(e.geometry),g=e.properties;g.geometry=f;g.wkt=e.geometry;f=new ol.Feature(g);f.setId(e.id);c.push(f)}return new ol.layer.Vector({source:new ol.source.Vector({features:c})})};
+netgis.Map.prototype.createLayerWFS=function(a,b,c,d,e,f){"?"!==a[a.length-1]&&(a+="?");a+="service=WFS&version=1.1.0&request=GetFeature";c||(c=this.view.getProjection().getCode());d=d?netgis.util.replace(d," ","+"):"application/json";var g=new ol.source.Vector({format:new ol.format.GeoJSON,strategy:ol.loadingstrategy.bbox,loader:function(h,k,n,q,p){h=a+"&typename="+b+"&srsname="+c+"&bbox="+h.join(",")+","+c+"&outputFormat="+d;var l=new XMLHttpRequest;l.open("GET",h);e&&f&&l.setRequestHeader("Authorization",
+"Basic "+window.btoa(e+":"+f));l.onerror=function(){console.error("WFS request error");p()};l.onload=function(){if(200===l.status){g.clear();var a=g.getFormat().readFeatures(l.responseText);g.addFeatures(a);q(a)}else console.error("WFS request status",l.status),p()};l.send()}}),h=new ol.layer.Vector({source:g}),k=this;g.on("featuresloadstart",function(a){k.removeSnapLayer(h)});g.on("featuresloadend",function(a){window.setTimeout(function(){k.addSnapLayer(h)},10)});return h};
+netgis.Map.prototype.createLayerVectorTiles=function(a,b,c,d){return new ol.layer.VectorTile({extent:b,source:new ol.source.VectorTile({format:new ol.format.MVT,overlaps:!0,url:a,minZoom:c,maxZoom:d})})};netgis.Map.prototype.createBufferFeature=function(a,b,c){a=this.createBufferGeometry(a,b,c);return new ol.Feature({geometry:a})};
+netgis.Map.prototype.createBufferGeometry=function(a,b,c){var d=new jsts.io.OL3Parser;a=d.read(a).buffer(b,c);if(this.boundsLayer)for(b=this.boundsLayer.getSource().getFeatures(),c=0;c<b.length;c++){var e=d.read(b[c].getGeometry());a.intersects(e)&&(a=a.intersection(e))}return d.write(a)};
+netgis.Map.prototype.splitMultiPolygons=function(a){a=a.getSource();for(var b=a.getFeatures(),c=[],d=[],e=0;e<b.length;e++){var f=b[e],g=f.getGeometry();if(g instanceof ol.geom.MultiPolygon){g=g.getPolygons();for(var h=0;h<g.length;h++){var k=new ol.Feature({geometry:g[h]});d.push(k)}c.push(f)}}for(e=0;e<c.length;e++)a.removeFeature(c[e]);a.addFeatures(d)};
+netgis.Map.prototype.clearSketchFeatures=function(){for(var a=this.editLayer.getSource(),b=0;b<this.sketchFeatures.length;b++)a.removeFeature(this.sketchFeatures[b]);this.sketchFeatures=[]};
+netgis.Map.prototype.updateDrawBufferPreview=function(){if(!1!==this.config.tools.editable){var a=this.interactions[this.mode][0].getOverlay().getSource().getFeatures();if(!(1>a.length)){var b=this.previewLayer.getSource().getFeatures()[0];b&&(a=a[0].getGeometry(),a=this.createBufferGeometry(a,this.drawBufferRadius,this.drawBufferSegments),b.setGeometry(a))}}};
+netgis.Map.prototype.isPointInsideLayer=function(a,b){a=a.getSource().getFeatures();for(var c=0;c<a.length;c++)if(a[c].getGeometry().intersectsCoordinate(b))return!0;return!1};
+netgis.Map.prototype.isGeomInsideLayer=function(a,b){var c=b.getCoordinates();if(b instanceof ol.geom.LineString){if(2>c.length)return!0}else if(b instanceof ol.geom.Polygon&&(c=c[0],4>c.length||0>=b.getArea()))return!0;c=new jsts.io.OL3Parser;b=c.read(b);a=a.getSource().getFeatures();for(var d=0;d<a.length;d++){var e=a[d].getGeometry();if(c.read(e).contains(b))return!0}return!1};netgis.Map.prototype.getScaleFromResolution=function(a){return Math.round(2834.6472*a)};
+netgis.Map.prototype.getResolutionFromScale=function(a){var b=39.3701*ol.proj.Units.METERS_PER_UNIT[this.view.getProjection().getUnits()];return 1/(this.normalizeScale(a)*b*72)};netgis.Map.prototype.normalizeScale=function(a){return 1<a?1/a:a};
+netgis.Map.prototype.updateEditOutput=function(){var a=this.editLayer.getSource().getFeatures(),b=this.view.getProjection().getCode(),c=(new ol.format.GeoJSON).writeFeaturesObject(a,{dataProjection:b,featureProjection:b});c.crs={type:"name",properties:{name:"urn:ogc:def:crs:"+b.replace(":","::")}};for(var d=b=0;d<a.length;d++){var e=a[d].getGeometry();e instanceof ol.geom.Polygon&&(b+=e.getArea())}c.area=b;netgis.util.invoke(this.container,netgis.Events.MAP_EDIT_LAYER_CHANGE,{geojson:c})};
+netgis.Map.prototype.updateSnapFeatures=function(){this.snapFeatures.clear();var a=this;this.map.getLayers().forEach(function(b,c,d){c=b.get("id");c!==netgis.Client.Layers.PARCEL_DISTRICTS&&c!==netgis.Client.Layers.PARCEL_FIELDS&&c!==netgis.Client.Layers.PARCEL_FEATURES&&b instanceof ol.layer.Vector&&a.addSnapLayer(b)})};netgis.Map.prototype.zoom=function(a){this.view.animate({zoom:this.view.getZoom()+a,duration:200})};
+netgis.Map.prototype.zoomLevel=function(a){this.view.animate({zoom:a,center:this.view.getCenter(),duration:300})};netgis.Map.prototype.zoomLonLat=function(a,b,c){this.view.animate({zoom:c,center:ol.proj.fromLonLat([a,b],this.view.getProjection()),duration:500})};netgis.Map.prototype.zoomExtentLonLat=function(a,b,c,d){a=ol.proj.fromLonLat([a,b],this.view.getProjection());c=ol.proj.fromLonLat([c,d],this.view.getProjection());this.view.fit([a[0],a[1],c[0],c[1]])};
+netgis.Map.prototype.zoomExtent=function(a,b,c,d){this.view.fit([a,b,c,d])};netgis.Map.prototype.zoomBBox=function(a,b){this.view.fit(a,{duration:b})};netgis.Map.prototype.zoomScale=function(a){this.view.setResolution(this.getResolutionFromScale(a))};netgis.Map.prototype.zoomFeature=function(a,b){a=this.layers[a].getSource().getFeatureById(b);this.view.fit(a.getGeometry().getExtent(),{duration:500})};
+netgis.Map.prototype.addViewHistory=function(a,b){if(0<this.viewHistory.length){var c=this.viewHistory[this.viewHistory.length-1],d=!0;10<Math.abs(a[0]-c.center[0])&&(d=!1);10<Math.abs(a[1]-c.center[1])&&(d=!1);.1<Math.abs(b-c.zoom)&&(d=!1);if(!0===d)return}this.viewHistory.push({center:a,zoom:b});this.viewHistory.length>this.viewHistoryMax&&this.viewHistory.shift();this.viewIndex=this.viewHistory.length-1};
+netgis.Map.prototype.gotoViewHistory=function(a){if(!(1>this.viewHistory.length)){var b=this.viewHistory.length-1;0>a&&(a=b);a>b&&(a=0);a!==this.viewIndex&&(b=this.viewHistory[a],this.viewIndex=a,this.viewFromHistory=!0,this.view.setCenter(b.center),this.view.setZoom(b.zoom))}};netgis.Map.prototype.setPadding=function(a,b,c,d){this.view.padding=[a+40,b+40,c+40,d+40]};
+netgis.Map.prototype.exportImage=function(a,b,c,d,e){var f=this,g=this.container,h=this.map,k=this.config["export"],l=new Image;l.onload=function(){var m=document.createElement("div");m.style.position="fixed";m.style.top="0px";m.style.left="0px";m.style.width=b+"px";m.style.height=c+"px";m.style.background="white";m.style.zIndex=-1;m.style.opacity=0;m.style.pointerEvents="none";g.appendChild(m);h.setTarget(m);h.once("rendercomplete",function(){var n=document.createElement("canvas");n.width=b;n.height=
+c;var q=n.getContext("2d");q.webkitImageSmoothingEnabled=!1;q.mozImageSmoothingEnabled=!1;q.imageSmoothingEnabled=!1;Array.prototype.forEach.call(document.querySelectorAll(".ol-layer canvas"),function(a){if(0<a.width){var b=a.parentNode.style.opacity;q.globalAlpha=""===b?1:Number(b);b=a.style.transform.match(/^matrix\(([^\(]*)\)$/)[1].split(",").map(Number);CanvasRenderingContext2D.prototype.setTransform.apply(q,b);q.drawImage(a,0,0)}});q.drawImage(l,0,0);q.fillStyle="#fff";q.fillRect(0,n.height-
+30,140,30);q.fillStyle="#000";q.font="4mm sans-serif";q.fillText(netgis.util.getTimeStamp(),10,n.height-10);var p=document.createElement("a");switch(a){case "pdf":e=e?e:0;var r=297-e-e,v=210-e-e,t=n.width/n.height;if(!d){var w=r;r=v;v=w}if(n.height>n.width){var u=v;w=u*t;w>r&&(w=r,u=w/t)}else w=r,u=w/t,u>v&&(u=v,w=u*t);t=new jsPDF(d?"l":"p");var x=e;x+=(r-w)/2;r=e;r+=(v-u)/2;t.addImage(n.toDataURL("image/png,1.0",1),"PNG",x,r,w,u);t.setFillColor(255,255,255);t.rect(x,r+u-11,80,11,"F");t.setFontSize(8);
+t.text("Datum: "+netgis.util.getTimeStamp(),x+2,r+u-2-4);t.text("Quelle: "+window.location.href,x+2,r+u-2);n=t.output("bloburl",{filename:k.default_filename+".pdf"});window.open(n,"_blank");break;case "jpeg":window.navigator.msSaveBlob?window.navigator.msSaveBlob(n.msToBlob(),k.default_filename+".jpg"):(p.setAttribute("download",k.default_filename+".jpg"),p.setAttribute("href",n.toDataURL("image/jpeg",1)),p.click());break;case "png":window.navigator.msSaveBlob?window.navigator.msSaveBlob(n.msToBlob(),
+k.default_filename+".png"):(p.setAttribute("download",k.default_filename+".png"),p.setAttribute("href",n.toDataURL("image/png",1)),p.click());break;case "gif":p.setAttribute("download",k.default_filename+".gif"),v=new GIF({workerScript:k.gif_worker,quality:1}),v.addFrame(n),v.on("finished",function(a){p.setAttribute("href",window.URL.createObjectURL(a));p.click()}),v.render()}h.setTarget(g);g.removeChild(m);netgis.util.invoke(f.container,netgis.Events.EXPORT_END,null)});h.renderSync()};l.src=k.logo};
+netgis.Map.prototype.exportFeatures=function(a){var b=this.editLayer.getSource().getFeatures();!0===a&&(a=this.nonEditLayer.getSource().getFeatures(),b=b.concat(a));b=(new ol.format.GeoJSON).writeFeaturesObject(b,{featureProjection:this.view.getProjection(),dataProjection:"EPSG:4326"});a=this.config["export"].default_filename+".geojson";b.name=a;netgis.util.downloadJSON(b,a);netgis.util.invoke(this.container,netgis.Events.EXPORT_END,null)};netgis.Map.prototype.onClientContextResponse=function(a){this.initConfig(a.detail.context.config)};
+netgis.Map.prototype.onEditLayerLoaded=function(a){a=a.detail.geojson;var b=new ol.format.GeoJSON;b.readProjection(a);a=b.readFeatures(a,{featureProjection:this.view.getProjection().getCode()});b=[];for(var c=0;c<a.length;c++){var d=a[c];!0===d.getProperties().editable&&b.push(d)}for(c=0;c<b.length;c++)a.splice(a.indexOf(b[c]),1);this.editEventsSilent=!0;this.editLayer.getSource().addFeatures(b);this.nonEditLayer.getSource().addFeatures(a);this.editEventsSilent=!1};
+netgis.Map.prototype.onClientSetMode=function(a){this.setMode(a.detail.mode)};netgis.Map.prototype.onPanelResize=function(a){this.setPadding(0,0,0,a.detail.width);this.redrawVectorLayers()};netgis.Map.prototype.onPanelToggle=function(a){a=!1;for(var b=0,c=this.container.parentNode.getElementsByClassName("netgis-panel"),d=0;d<c.length;d++)if(c[d].classList.contains("netgis-show")){a=!0;b=c[d].getBoundingClientRect().width;break}a?this.setPadding(0,0,0,b):this.setPadding(0,0,0,0);this.redrawVectorLayers()};
+netgis.Map.prototype.onMapZoom=function(a){this.zoom(a.detail.delta)};netgis.Map.prototype.onMapZoomHome=function(a){a=this.config;if(a.map.bbox)this.zoomBBox(a.map.bbox,500);else if(a.map.center_lonlat){var b=a.map.center_lonlat;this.zoomLonLat(b[0],b[1],a.map.zoom)}};netgis.Map.prototype.onMapZoomLonLat=function(a){a=a.detail;this.zoomLonLat(a.lon,a.lat,a.zoom)};netgis.Map.prototype.onMapZoomScale=function(a){this.zoomScale(a.detail.scale)};
+netgis.Map.prototype.onMapZoomLayer=function(a){a=a.detail;var b=this.layers[a.id];b?this.view.fit(b.getSource().getExtent(),{duration:600}):console.warning("trying to zoom non existing layer",a.id)};netgis.Map.prototype.onMapZoomLevel=function(a){this.view.setZoom(a.detail.z)};netgis.Map.prototype.onMapViewPrev=function(a){this.gotoViewHistory(this.viewIndex-1)};netgis.Map.prototype.onMapViewNext=function(a){this.gotoViewHistory(this.viewIndex+1)};
+netgis.Map.prototype.onMapLayerToggle=function(a){a=a.detail;switch(a.id){case netgis.LayerID.EDITABLE:a.on?this.map.addLayer(this.editLayer):this.map.removeLayer(this.editLayer);break;case netgis.LayerID.NON_EDITABLE:a.on?this.map.addLayer(this.nonEditLayer):this.map.removeLayer(this.nonEditLayer);break;default:if(a.on)for(var b=this.config.layers,c=0;c<b.length;c++){var d=b[c];d.id===a.id&&this.addLayer(a.id,d)}else this.removeLayer(a.id)}};
+netgis.Map.prototype.onMapLayerTransparency=function(a){a=a.detail;var b=this.layers[a.id];b||(netgis.util.invoke(this.container,netgis.Events.MAP_LAYER_TOGGLE,{id:a.id,on:!0}),b=this.layers[a.id]);b.setOpacity(1-a.transparency)};netgis.Map.prototype.onMapSnapToggle=function(a){this.setSnapping(a.detail.on)};
+netgis.Map.prototype.onMapMoveEnd=function(a){a=this.view.getCenter();var b=this.view.getZoom(),c=this.getScaleFromResolution(this.view.getResolution());!1===this.viewFromHistory&&this.addViewHistory(a,b);netgis.util.invoke(this.container,netgis.Events.MAP_VIEW_CHANGE,{center:a,zoom:b,scale:c});this.viewFromHistory=!1};
+netgis.Map.prototype.onPointerMove=function(a){var b=a.pixel;a=a.coordinate;var c=null,d=null,e=void 0,f=this;this.map.forEachFeatureAtPixel(b,function(a,b){if(b&&b!==f.nonEditLayer)if(b===f.boundsLayer)e=a;else return c=a,d=b,!0});switch(this.mode){case netgis.Modes.DRAW_POINTS:case netgis.Modes.DRAW_LINES:this.updateDrawBufferPreview()}!this.boundsLayer||this.mode!==netgis.Modes.DRAW_POINTS&&this.mode!==netgis.Modes.DRAW_LINES&&this.mode!==netgis.Modes.DRAW_POLYGONS||(e?this.container.classList.remove("netgis-not-allowed"):
+this.container.classList.add("netgis-not-allowed"),this.hoverBounds=e);var g=!0;this.mode===netgis.Modes.VIEW&&(g=!1);this.mode===netgis.Modes.DRAW_POINTS&&(g=!1);this.mode===netgis.Modes.DRAW_LINES&&(g=!1);this.mode===netgis.Modes.DRAW_POLYGONS&&(g=!1);this.mode===netgis.Modes.CUT_FEATURES_DRAW&&(g=!1);if(c!==this.hoverFeature&&g){if(this.hoverFeature)this.onFeatureLeave(this.hoverFeature,this.hoverLayer,b,a);if(c)this.onFeatureEnter(c,d,b,a);this.redrawVectorLayers();this.hoverFeature=c;this.hoverLayer=
+d}if(c)this.onFeatureHover(c,d,b,a)};netgis.Map.prototype.onPointerLeave=function(a){this.hoverFeature&&(this.onFeatureLeave(this.hoverFeature,this.hoverLayer,[a.offsetX,a.offsetY],null),this.hoverLayer=this.hoverFeature=null)};
+netgis.Map.prototype.onPointerClick=function(a){var b=a.pixel;a=a.coordinate;this.popupOverlay.setPosition(a);var c=[],d=this;this.map.forEachFeatureAtPixel(b,function(a,b){b&&b!==d.nonEditLayer&&b!==d.boundsLayer&&b!==d.measureLayer&&b!==d.previewLayer&&c.push({feature:a,layer:b})});var e=!0;this.mode===netgis.Modes.VIEW&&(e=!1);this.mode===netgis.Modes.DRAW_POINTS&&(e=!1);this.mode===netgis.Modes.DRAW_LINES&&(e=!1);this.mode===netgis.Modes.DRAW_POLYGONS&&(e=!1);this.mode===netgis.Modes.CUT_FEATURES_DRAW&&
+(e=!1);0<c.length&&!1===this.selectMultiple&&e&&(this.selectedFeatures=[]);for(var f=0;f<c.length;f++){var g=c[f];e&&this.selectedFeatures.push(g.feature);this.onFeatureClick(g.feature,g.layer,b,a)}e={resolution:this.view.getResolution(),projection:this.view.getProjection().getCode(),bbox:this.view.calculateExtent(this.map.getSize()),width:this.map.getSize()[0],height:this.map.getSize()[1]};f=ol.proj.toLonLat(a,this.view.getProjection());b={mode:this.mode,pixel:b,coords:a,lon:f[0],lat:f[1],overlay:this.popupOverlay.getElement(),
+view:e};netgis.util.invoke(this.container,netgis.Events.MAP_CLICK,b);this.redrawVectorLayers()};netgis.Map.prototype.onRightClick=function(a){switch(this.mode){case netgis.Modes.MEASURE_LINE:this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing();break;case netgis.Modes.MEASURE_AREA:this.interactions[netgis.Modes.MEASURE_AREA][2].finishDrawing()}a.preventDefault();return!1};
+netgis.Map.prototype.onKeyDown=function(a){a=a.keyCode||a.which;switch(this.mode){case netgis.Modes.MEASURE_LINE:13===a&&this.interactions[netgis.Modes.MEASURE_LINE][2].finishDrawing();27===a&&this.interactions[netgis.Modes.MEASURE_LINE][2].abortDrawing();break;case netgis.Modes.MEASURE_AREA:13===a&&this.interactions[netgis.Modes.MEASURE_AREA][2].finishDrawing();27===a&&this.interactions[netgis.Modes.MEASURE_AREA][2].abortDrawing();break;case netgis.Modes.DRAW_LINES:var b=this.interactions[netgis.Modes.DRAW_LINES][0];
+13===a&&b.finishDrawing();27===a&&b.abortDrawing();8===a&&b.removeLastPoint();46===a&&b.abortDrawing();break;case netgis.Modes.DRAW_POLYGONS:b=this.interactions[netgis.Modes.DRAW_POLYGONS][0],13===a&&b.finishDrawing(),27===a&&b.abortDrawing(),8===a&&b.removeLastPoint(),46===a&&b.abortDrawing()}16===a&&(this.selectMultiple=!0)};
+netgis.Map.prototype.onKeyUp=function(a){a=a.keyCode||a.which;switch(this.mode){case netgis.Modes.BUFFER_FEATURES:this.selectMultiple&&netgis.util.invoke(this.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.BUFFER_FEATURES_EDIT});break;case netgis.Modes.CUT_FEATURES:this.selectMultiple&&netgis.util.invoke(this.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.CUT_FEATURES_DRAW})}16===a&&(this.selectMultiple=!1)};
+netgis.Map.prototype.onFeatureEnter=function(a,b,c,d){if(b){switch(this.mode){case netgis.Modes.DELETE_FEATURES:case netgis.Modes.BUFFER_FEATURES:case netgis.Modes.CUT_FEATURES:this.container.classList.add("netgis-clickable");a.setStyle(this.styleHover.bind(this));break;case netgis.Modes.SEARCH_PARCEL:this.container.classList.add("netgis-clickable"),a.setStyle(this.styleHover.bind(this))}netgis.util.invoke(this.container,netgis.Events.MAP_FEATURE_ENTER,{pixel:c,coords:d,layer:b.get("id"),properties:a.getProperties()})}};
+netgis.Map.prototype.onFeatureHover=function(a,b,c,d){};
+netgis.Map.prototype.onFeatureClick=function(a,b,c,d){c={pixel:c,coords:d,layer:this.hoverLayer?this.hoverLayer.get("id"):null,id:this.hoverFeature?this.hoverFeature.getId():null,properties:this.hoverFeature?this.hoverFeature.getProperties():null};netgis.util.invoke(this.container,netgis.Events.MAP_FEATURE_CLICK,c);switch(this.mode){case netgis.Modes.DELETE_FEATURES:b.getSource().removeFeature(a);this.onFeatureLeave(a,b);netgis.util.invoke(this.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.VIEW});
+break;case netgis.Modes.BUFFER_FEATURES:this.onFeatureLeave(a,b);this.selectMultiple||netgis.util.invoke(this.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.BUFFER_FEATURES_EDIT});break;case netgis.Modes.CUT_FEATURES:if(a.getGeometry()instanceof ol.geom.Point)this.onFeatureLeave(a,b);else this.selectMultiple||netgis.util.invoke(this.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.CUT_FEATURES_DRAW})}};
+netgis.Map.prototype.onFeatureLeave=function(a,b,c,d){netgis.util.invoke(this.container,netgis.Events.MAP_FEATURE_LEAVE,{pixel:c,coords:d,layer:b?b.get("id"):null,properties:a.getProperties()});switch(this.mode){case netgis.Modes.DELETE_FEATURES:case netgis.Modes.BUFFER_FEATURES:case netgis.Modes.CUT_FEATURES:case netgis.Modes.CUT_FEATURES_DRAW:this.container.classList.remove("netgis-clickable");a.setStyle(null);break;case netgis.Modes.SEARCH_PARCEL:this.container.classList.remove("netgis-clickable"),
+a.setStyle(null)}};netgis.Map.prototype.onEditLayerAdd=function(a){this.editEventsSilent||this.updateEditOutput();this.snapFeatures.push(a.feature)};netgis.Map.prototype.onEditLayerRemove=function(a){this.editEventsSilent||this.updateEditOutput();this.snapFeatures.remove(a.feature)};netgis.Map.prototype.onEditLayerChange=function(a){this.editEventsSilent||this.updateEditOutput()};
+netgis.Map.prototype.onCopyFeatureToEdit=function(a){a=a.detail;var b=this.layers[a.source].getSource().getFeatureById(a.id);b?this.editLayer.getSource().getFeatureById(a.id)||(b.setStyle(void 0),this.selectedFeatures=[],this.editLayer.getSource().addFeature(b)):console.error("feature to copy not found",a)};netgis.Map.prototype.onMeasureLineBegin=function(a){this.measureLayer.getSource().clear()};netgis.Map.prototype.onMeasureAreaBegin=function(a){this.measureLayer.getSource().clear()};
+netgis.Map.prototype.onMeasureClear=function(a){this.measureLayer.getSource().clear()};
+netgis.Map.prototype.onDrawBufferEnd=function(a){var b=a.feature;a=this.previewLayer.getSource().getFeatures();if(0!==a.length){a=a[0];if(this.boundsLayer){var c=!0;c=b.getGeometry()instanceof ol.geom.Point?this.isPointInsideLayer(this.boundsLayer,b.getGeometry().getCoordinates()):this.isGeomInsideLayer(this.boundsLayer,b.getGeometry());if(!c)return;c=new jsts.io.OL3Parser;for(var d=c.read(a.getGeometry()),e=this.boundsLayer.getSource().getFeatures(),f=0;f<e.length;f++){var g=c.read(e[f].getGeometry());
+d.intersects(g)&&(d=d.intersection(g))}c=c.write(d);a.setGeometry(c)}var h=this.editLayer.getSource();h.addFeature(a.clone());window.setTimeout(function(){h.removeFeature(b)},10)}};netgis.Map.prototype.onDrawBufferToggle=function(a){a=a.detail;this.setDrawBuffer(a.on,a.radius,a.segments)};netgis.Map.prototype.onDrawBufferChange=function(a){a=a.detail;this.drawBufferRadius=a.radius;this.drawBufferSegments=a.segments;this.updateDrawBufferPreview()};
+netgis.Map.prototype.onBufferChange=function(a){a=a.detail;var b=this.selectedFeatures,c=this.editLayer.getSource();this.clearSketchFeatures();for(var d=0;d<b.length;d++){var e=this.createBufferFeature(this.selectedFeatures[d].getGeometry(),a.radius,a.segments);c.addFeature(e);this.sketchFeatures.push(e)}};
+netgis.Map.prototype.onBufferAccept=function(a){a=this.selectedFeatures;for(var b=this.editLayer.getSource(),c=0;c<a.length;c++)b.removeFeature(a[c]);this.sketchFeatures=[];this.selectedFeatures=[]};
+netgis.Map.prototype.onCutFeaturesDrawEnd=function(a){a=a.feature;for(var b=0;b<this.selectedFeatures.length;b++){var c=this.selectedFeatures[b];if(c)if(this.onFeatureLeave(c,null),c.getGeometry()instanceof ol.geom.Point)console.error("trying to cut a point feature",c);else{var d=new jsts.io.OL3Parser,e=d.read(c.getGeometry()),f=d.read(a.getGeometry());e=e.difference(f);d=d.write(e);d=new ol.Feature({geometry:d});e=this.editLayer.getSource();e.removeFeature(c);e.addFeature(d)}}this.selectedFeatures=
+[];this.editEventsSilent=!0;this.splitMultiPolygons(this.editLayer);this.editEventsSilent=!1;this.updateEditOutput();netgis.util.invoke(this.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.VIEW})};netgis.Map.prototype.onImportLayerAccept=function(a){a=a.detail;a=this.addLayer(a.id,a);0!==a.getSource().getFeatures().length&&this.view.fit(a.getSource().getExtent(),{duration:600})};netgis.Map.prototype.onImportGeoportalSubmit=function(a){};
+netgis.Map.prototype.onImportLayerPreview=function(a){a=a.detail;var b=this.createLayer(a),c=this.view.getProjection().getCode();netgis.util.invoke(this.container,netgis.Events.IMPORT_LAYER_PREVIEW_FEATURES,{id:a.id,title:a.title,layer:b,proj:c})};netgis.Map.prototype.onSearchParcelReset=function(a){(a=this.config.searchparcel.districts_service.min_zoom)&&this.view.setZoom(a)};netgis.Map.prototype.onSearchParcelItemEnter=function(a){a=a.detail.id;this.layers.searchparcel_parcels.getSource().getFeatureById(a).setStyle(this.styleHover.bind(this))};
+netgis.Map.prototype.onSearchParcelItemLeave=function(a){a=a.detail.id;this.layers.searchparcel_parcels.getSource().getFeatureById(a).setStyle(null)};netgis.Map.prototype.onSearchParcelItemClick=function(a){a=a.detail.id;console.info("PARCEL CLICK:",a);this.zoomFeature("searchparcel_parcels",a)};netgis.Map.prototype.onSearchParcelItemImport=function(a){};netgis.Map.prototype.onDrawPointsUpdateGeom=function(a,b,c){b?b.setCoordinates(a):b=new ol.geom.Point(a);return b};
+netgis.Map.prototype.onDrawLinesUpdateGeom=function(a,b,c){b?b.setCoordinates(a):b=new ol.geom.LineString(a);this.drawError=!this.isGeomInsideLayer(this.boundsLayer,b);return b};
+netgis.Map.prototype.onDrawPolygonsUpdateGeom=function(a,b,c){b?(a=[a[0].concat([a[0][0]])],b.setCoordinates(a)):b=new ol.geom.Polygon(a);c=!0;if(4>a[0].length)for(var d=0;d<a[0].length;d++){if(!this.isPointInsideLayer(this.boundsLayer,a[0][d])){c=!1;break}}else c=this.isGeomInsideLayer(this.boundsLayer,b);this.drawError=!c;return b};
+netgis.Map.prototype.onDrawPointsEnd=function(a){if(this.boundsLayer){var b=a.feature,c=this.editLayer;this.isPointInsideLayer(this.boundsLayer,b.getGeometry().getCoordinates())||window.setTimeout(function(){c.getSource().removeFeature(b)},10)}};netgis.Map.prototype.onDrawLinesEnd=function(a){if(this.boundsLayer){var b=a.feature,c=this.editLayer;this.isGeomInsideLayer(this.boundsLayer,b.getGeometry())||window.setTimeout(function(){c.getSource().removeFeature(b)},10)}};
+netgis.Map.prototype.onDrawPolygonsEnd=function(a){if(this.boundsLayer){var b=a.feature,c=this.editLayer;this.isGeomInsideLayer(this.boundsLayer,b.getGeometry())||window.setTimeout(function(){c.getSource().removeFeature(b)},10)}};netgis.Map.prototype.onExportBegin=function(a){a=a.detail;switch(a.format){case "geojson":this.exportFeatures(a.nonEdits);break;default:this.exportImage(a.format,a.width,a.height,a.landscape,a.padding)}};netgis.Map.prototype.onTimeSliderShow=function(a){};
+netgis.Map.prototype.onTimeSliderHide=function(a){};netgis.Map.prototype.onTimeSliderSelect=function(a){a=a.detail;console.info("Time Slider Select:",a);this.layers[a.layer].getSource().updateParams({TIME:a.time})};netgis=netgis||{};netgis.Menu=function(a){this.config=a;this.initElements();this.initConfig(a)};
+netgis.Menu.prototype.initElements=function(){this.container=document.createElement("nav");this.container.className="netgis-menu netgis-noselect netgis-color-a netgis-shadow-large";this.toggle=document.createElement("button");this.toggle.setAttribute("type","button");this.toggle.addEventListener("click",this.onToggleClick.bind(this));this.toggle.className="netgis-menu-toggle netgis-hover-c";this.toggle.innerHTML="<i class='fas fa-bars'></i>";this.container.appendChild(this.toggle)};
+netgis.Menu.prototype.initConfig=function(a){!0===a.menu.compact&&this.container.classList.add("netgis-compact");this.addHeader(a.menu.header);for(var b=a.menu.items,c=0;c<b.length;c++){var d=b[c];if(d.items)this.addDropdown(d.title,d.items);else if(d.url&&0<d.url.length)this.addLink(d.url,d.title);else if(d.options){var e;if("scales"===d.options){var f={0:"1:X"};for(e=0;e<a.map.scales.length;e++)f[a.map.scales[e]]="1:"+a.map.scales[e];e=a.map.default_scale;this.addSelect(d.id,d.title,f,e).options[0].classList.add("netgis-hide")}else{f=
+d.options;if(d.value)e=d.value;else for(var g in f){e=g;break}this.addSelect(d.id,d.title,f,e)}}else this.addButton(d.id,d.title)}};netgis.Menu.prototype.attachTo=function(a){a.appendChild(this.container);a.addEventListener(netgis.Events.MAP_VIEW_CHANGE,this.onMapViewChange.bind(this))};netgis.Menu.prototype.addHeader=function(a){var b=document.createElement("h1");b.className="netgis-hover-c";b.innerHTML=a;this.container.appendChild(b);return b};
+netgis.Menu.prototype.addButton=function(a,b){a=this.createButton(a,b);this.container.appendChild(a);return a};netgis.Menu.prototype.addLink=function(a,b){a=this.createLink(a,b);this.container.appendChild(a);return a};
+netgis.Menu.prototype.addSelect=function(a,b,c,d){var e=document.createElement("span");e.className="netgis-wrapper netgis-hover-c";var f=document.createElement("select");f.setAttribute("data-id",a);for(var g in c){a=c[g];var h=document.createElement("option");h.setAttribute("value",g);h.innerHTML=a;f.appendChild(h)}f.value=d;f.addEventListener("change",this.onSelectChange.bind(this));e.appendChild(f);b&&(c=document.createElement("span"),c.className="netgis-icon",c.innerHTML=b,e.appendChild(c));this.container.appendChild(e);
+return f};netgis.Menu.prototype.addDropdown=function(a,b){var c=document.createElement("div");c.className="netgis-dropdown netgis-hover-c";var d=document.createElement("button");d.setAttribute("type","button");d.innerHTML=a;c.appendChild(d);a=document.createElement("ul");a.className="netgis-color-e netgis-shadow";c.appendChild(a);for(d=0;d<b.length;d++)a.appendChild(this.createMenuItem(b[d]));this.container.appendChild(c);return c};
+netgis.Menu.prototype.createMenuItem=function(a){var b=document.createElement("li");b.className="netgis-hover-c";if(a.items)a=this.createMenu(a.title,a.items),b.appendChild(a.button),b.appendChild(a.list);else if(a.type)switch(a.type){case "checkbox":a=this.createCheckbox(a.id,a.title,a.value);b.appendChild(a);break;default:console.error("unhandled menu item type",a.type,"for",a.id)}else a.url?(a=this.createLink(a.url,a.title),b.appendChild(a)):(a=this.createButton(a.id,a.title),b.appendChild(a));
+return b};netgis.Menu.prototype.createMenu=function(a,b){var c=document.createElement("button");c.setAttribute("type","button");c.addEventListener("pointerdown",this.onButtonClick.bind(this));c.innerHTML=a;a=document.createElement("ul");a.className="netgis-color-e netgis-shadow";for(var d=0;d<b.length;d++)a.appendChild(this.createMenuItem(b[d]));return{button:c,list:a}};
+netgis.Menu.prototype.createLink=function(a,b){var c=document.createElement("a");c.setAttribute("href",a);c.setAttribute("target","_blank");c.classList="netgis-button";c.innerHTML=b;return c};netgis.Menu.prototype.createButton=function(a,b){var c=document.createElement("button");c.className="netgis-text-e netgis-hover-c";c.setAttribute("type","button");c.setAttribute("data-id",a);c.addEventListener("pointerdown",this.onButtonClick.bind(this));c.innerHTML=b;return c};
+netgis.Menu.prototype.createCheckbox=function(a,b,c){var d=document.createElement("label");d.className="netgis-button";var e=document.createElement("input");e.setAttribute("type","checkbox");e.setAttribute("data-id",a);e.addEventListener("change",this.onCheckboxChange.bind(this));e.checked=c;d.appendChild(e);a=document.createElement("span");a.innerHTML=b;d.appendChild(a);return d};netgis.Menu.prototype.onToggleClick=function(a){this.container.classList.toggle("netgis-menu-large")};
+netgis.Menu.prototype.onButtonClick=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");netgis.util.invoke(a,netgis.Events.MENU_BUTTON_CLICK,{id:b});netgis.Client.handleCommand(a,b)};
+netgis.Menu.prototype.onCheckboxChange=function(a){a=a.currentTarget;var b=a.getAttribute("data-id"),c=a.checked;netgis.util.invoke(a,netgis.Events.MENU_CHECKBOX_CHANGE,{id:b,checked:c});switch(b){case netgis.Menu.ItemID.SNAP_TOGGLE:netgis.util.invoke(a,netgis.Events.MAP_SNAP_TOGGLE,{on:c});break;default:console.error("unhandled menu item id",b)}};
+netgis.Menu.prototype.onSelectChange=function(a){a=a.currentTarget;var b=a.getAttribute("data-id"),c=a.value;netgis.util.invoke(a,netgis.Events.MENU_SELECT_CHANGE,{id:b,value:c});switch(b){case "scales":netgis.util.invoke(a,netgis.Events.MAP_ZOOM_SCALE,{scale:Number.parseInt(c)})}};
+netgis.Menu.prototype.onMapViewChange=function(a){a=a.detail;for(var b=this.container.getElementsByTagName("select"),c=0;c<b.length;c++){var d=b[c];if("scales"===!d.getAttribute("data-id"))break;for(var e=!1,f=this.config.map.scales,g=0;g<f.length;g++)if(f[g]===a.scale){e=!0;break}e?d.options[0].classList.add("netgis-hide"):(d.options[0].setAttribute("value",a.scale),d.options[0].innerHTML="1:"+a.scale,d.options[0].classList.remove("netgis-hide"));d.value=a.scale}};netgis=netgis||{};netgis.Modal=function(a){this.initElements(a);this.initEvents()};netgis.Modal.prototype.initElements=function(a){this.container=document.createElement("div");this.container.className="netgis-modal";this.container.addEventListener("click",this.onContainerClick.bind(this));this.content=document.createElement("div");this.content.className="netgis-color-e netgis-shadow";this.container.appendChild(this.content);this.header=this.addHeader(this.content,a,this.onHeaderClick.bind(this))};
+netgis.Modal.prototype.initEvents=function(){};netgis.Modal.prototype.attachTo=function(a){a.appendChild(this.container)};netgis.Modal.prototype.show=function(){this.container.classList.add("netgis-show")};netgis.Modal.prototype.hide=function(){this.container.classList.remove("netgis-show")};
+netgis.Modal.prototype.addHeader=function(a,b,c){var d=document.createElement("button");d.className="netgis-button netgis-clip-text netgis-color-c";d.innerHTML="<span>"+b+"</span><i class='netgis-icon fas fa-times'></i>";d.setAttribute("type","button");c&&(d.onclick=c);a&&a.appendChild(d);return d};netgis.Modal.prototype.onHeaderClick=function(a){this.hide()};netgis.Modal.prototype.onContainerClick=function(a){a.target===this.container&&this.hide()};netgis=netgis||{};netgis.Modes=Object.freeze({VIEW:"view",ZOOM_BOX:"zoom-box",MEASURE_LINE:"measure-line",MEASURE_AREA:"measure-area",DRAW_POINTS:"draw-points",DRAW_LINES:"draw-lines",DRAW_POLYGONS:"draw-polygons",MODIFY_FEATURES:"modify-features",DELETE_FEATURES:"delete-features",BUFFER_FEATURES:"buffer-features",BUFFER_FEATURES_EDIT:"buffer-features-edit",CUT_FEATURES:"cut-features",CUT_FEATURES_DRAW:"cut-features-draw",SEARCH_PARCEL:"search-parcel"});netgis=netgis||{};
+netgis.OWS=function(){return{read:function(a,b){b={layers:[],folders:[]};netgis.util.isDefined(a.properties)&&(b.bbox=a.properties.bbox);a=a.features;for(var c=0;c<a.length;c++){var d=a[c];if("Feature"===d.type){var e=d.properties;e=e.folder;var f=!1;for(d=0;d<b.folders.length;d++)if(b.folders[d].id===e){f=!0;break}if(!f){d=e.split("/");e=[];for(f=0;f<d.length;f++){var g=d[f];0<g.length&&e.push(g)}var h=-1;for(f=0;f<e.length;f++){g=e[f];var k="/"+e.slice(0,f+1).join("/"),l=!1;for(d=0;d<b.folders.length;d++)if(b.folders[d].path===
+k){h=d;l=!0;break}l||(d=b.folders.length,b.folders.push({title:g,parent:h,path:k}),h=d)}}}}for(c=0;c<a.length;c++)if(d=a[c],"Feature"===d.type){e=d.properties;f=-1;for(d=0;d<b.folders.length;d++)if(b.folders[d].path===e.folder){f=d;break}d=e.offerings;for(g=0;g<d.length;g++)switch(h=d[g],k=h.operations,h.code){case "http://www.opengis.net/spec/owc-geojson/1.0/req/wms":b.layers.push({folder:f,type:netgis.LayerTypes.WMS,url:k[0].href,title:e.title,attribution:e.rights,active:e.active});break;case "http://www.opengis.net/spec/owc-geojson/1.0/req/xyz":h=
+k[0];b.layers.push({folder:f,type:netgis.LayerTypes.XYZ,url:h.href,title:e.title,attribution:e.rights,active:e.active});break;case "http://www.opengis.net/spec/owc-geojson/1.0/req/osm":h=k[0],b.layers.push({folder:f,type:netgis.LayerTypes.XYZ,url:h.href,title:e.title,attribution:e.rights,active:e.active})}}return b}}}();netgis=netgis||{};netgis.Panel=function(a){this.initElements(a);this.initEvents()};netgis.Panel.prototype.initElements=function(a){var b=document.createElement("section");b.className="netgis-panel netgis-resize-right netgis-color-e netgis-shadow";this.content=document.createElement("div");b.appendChild(this.content);this.header=this.addHeader(b,a,this.onHeaderClick.bind(this));this.container=b};netgis.Panel.prototype.initEvents=function(){this.resizeObserver=(new ResizeObserver(this.onResize.bind(this))).observe(this.container)};
+netgis.Panel.prototype.attachTo=function(a){a.appendChild(this.container)};netgis.Panel.prototype.addHeader=function(a,b,c){var d=document.createElement("button");d.className="netgis-button netgis-clip-text netgis-color-c netgis-shadow";d.innerHTML="<span>"+b+"</span><i class='netgis-icon fas fa-times'></i>";d.setAttribute("type","button");c&&(d.onpointerdown=c);a&&a.appendChild(d);return d};
+netgis.Panel.prototype.show=function(){this.container.classList.contains("netgis-show")||(this.container.classList.add("netgis-show"),netgis.util.invoke(this.container,netgis.Events.PANEL_TOGGLE,{visible:!0,width:this.container.getBoundingClientRect().width}))};netgis.Panel.prototype.hide=function(){this.container.classList.contains("netgis-show")&&(this.container.classList.remove("netgis-show"),netgis.util.invoke(this.container,netgis.Events.PANEL_TOGGLE,{visible:!1}))};
+netgis.Panel.prototype.toggle=function(){this.container.classList.toggle("netgis-show");var a=this.container.classList.contains("netgis-show");netgis.util.invoke(this.container,netgis.Events.PANEL_TOGGLE,{visible:a,width:a?this.container.getBoundingClientRect().width:void 0})};netgis.Panel.prototype.visible=function(){return this.container.classList.contains("netgis-show")};netgis.Panel.prototype.width=function(){return this.container.getBoundingClientRect().width};
+netgis.Panel.prototype.setTitle=function(a){this.header.getElementsByTagName("span")[0].innerHTML=a};netgis.Panel.prototype.onHeaderClick=function(a){this.hide()};netgis.Panel.prototype.onResize=function(a){this.container.classList.contains("netgis-show")&&(a=this.container.getBoundingClientRect(),netgis.util.invoke(this.container,netgis.Events.PANEL_RESIZE,{width:a.width}))};netgis=netgis||{};netgis.Popup=function(){this.initElements()};
+netgis.Popup.prototype.initElements=function(){document.body.addEventListener("pointerdown",this.onDocumentPointerDown.bind(this));this.container=document.createElement("div");this.container.className="netgis-popup";this.container.addEventListener("pointerdown",this.onPointerDown.bind(this));this.content=document.createElement("div");this.content.className="netgis-content netgis-color-e netgis-round";this.container.appendChild(this.content);this.arrow=document.createElement("div");this.arrow.className=
+"netgis-arrow-down";this.container.appendChild(this.arrow);this.closer=document.createElement("button");this.closer.setAttribute("type","button");this.closer.className="netgis-closer netgis-color-e netgis-text-a";this.closer.innerHTML="<span></span><i class='fas fa-times'></i>";this.closer.onclick=this.onCloserClick.bind(this);this.content.appendChild(this.closer);this.loader=document.createElement("div");this.loader.className="netgis-loader netgis-text-a";this.loader.innerHTML="<i class='netgis-icon netgis-anim-spin fas fa-sync-alt'></i>";
+this.wrapper=document.createElement("div");this.wrapper.className="netgis-wrapper";this.content.appendChild(this.wrapper)};netgis.Popup.prototype.attachTo=function(a){a.appendChild(this.container)};netgis.Popup.prototype.show=function(){this.container.classList.add("netgis-show")};netgis.Popup.prototype.hide=function(){this.container.classList.remove("netgis-show")};netgis.Popup.prototype.showLoader=function(){this.content.appendChild(this.loader)};
+netgis.Popup.prototype.hideLoader=function(){this.loader.parentNode===this.content&&this.content.removeChild(this.loader)};
+netgis.Popup.prototype.setPosition=function(a,b){var c=this.container.parentNode.getBoundingClientRect(),d=this.arrow.getBoundingClientRect();a>c.width-d.width&&(a=c.width-d.width);a<d.width&&(a=d.width);this.container.style.left=a+"px";this.container.style.top=b+"px";this.content.style.left="";a=this.content.getBoundingClientRect();0>a.x?this.content.style.left=-a.x+"px":a.x+a.width>c.width&&(this.content.style.left=-(a.x+a.width-c.width)+"px")};
+netgis.Popup.prototype.setHeader=function(a){this.closer.getElementsByTagName("span")[0].innerHTML=a};netgis.Popup.prototype.setContent=function(a){this.wrapper.innerHTML=a};netgis.Popup.prototype.clearContent=function(){this.wrapper.innerHTML=""};netgis.Popup.prototype.addContent=function(a){this.wrapper.innerHTML+=a};netgis.Popup.prototype.onDocumentPointerDown=function(a){};netgis.Popup.prototype.onPointerDown=function(a){a.stopPropagation()};netgis.Popup.prototype.onCloserClick=function(a){this.hide()};netgis=netgis||{};netgis.Search=function(a){this.debounce=400;this.initElements(a);this.initEvents()};
+netgis.Search.prototype.initElements=function(a){var b=document.createElement("div");b.className="netgis-search";this.container=b;var c=document.createElement("label");b.appendChild(c);this.label=c;var d=document.createElement("input");d.className="netgis-round netgis-shadow";d.setAttribute("type","text");d.setAttribute("placeholder",a);c.appendChild(d);this.input=d;a=document.createElement("button");a.setAttribute("type","button");a.innerHTML="<i class='fas fa-search'></i>";c.appendChild(a);this.button=
+a;a=document.createElement("button");a.setAttribute("type","button");a.className="netgis-hide";a.innerHTML="<i class='fas fa-times'></i>";c.appendChild(a);this.closer=a;c=document.createElement("ul");b.appendChild(c);this.results=c};
+netgis.Search.prototype.initEvents=function(){this.input.addEventListener("change",this.onInputChange.bind(this));this.input.addEventListener("keydown",this.onInputKeyDown.bind(this));this.input.addEventListener("keyup",this.onInputKeyUp.bind(this));this.button.addEventListener("click",this.onButtonClick.bind(this));this.closer.addEventListener("click",this.onCloserClick.bind(this))};netgis.Search.prototype.attachTo=function(a){a.appendChild(this.container)};netgis.Search.prototype.show=function(){this.container.classList.remove("netgis-hide")};
+netgis.Search.prototype.hide=function(){this.container.classList.add("netgis-hide")};netgis.Search.prototype.toggle=function(){this.container.classList.toggle("netgis-hide")};netgis.Search.prototype.isVisible=function(){return!this.container.classList.contains("netgis-hide")};netgis.Search.prototype.minimize=function(){this.container.classList.remove("netgis-color-e","netgis-shadow");this.input.classList.add("netgis-shadow")};
+netgis.Search.prototype.maximize=function(){this.container.classList.add("netgis-color-e","netgis-shadow");this.input.classList.remove("netgis-shadow")};netgis.Search.prototype.setTitle=function(a){this.input.setAttribute("placeholder",a)};
+netgis.Search.prototype.addResult=function(a,b){var c=document.createElement("li"),d=document.createElement("button");d.className="netgis-button netgis-clip-text netgis-color-e netgis-hover-a";d.innerHTML=a;d.setAttribute("type","button");d.setAttribute("title",d.innerText);d.setAttribute("data-result",b);d.addEventListener("click",this.onResultClick.bind(this));c.appendChild(d);0===this.results.childNodes.length&&(this.button.classList.add("netgis-hide"),this.closer.classList.remove("netgis-hide"));
+this.results.appendChild(c);this.maximize();return c};netgis.Search.prototype.clearResults=function(){this.results.innerHTML="";this.minimize();netgis.util.invoke(this.container,netgis.Events.SEARCH_CLEAR,null)};netgis.Search.prototype.clearAll=function(){this.clearResults();this.lastQuery=null;this.input.value="";this.button.classList.remove("netgis-hide");this.closer.classList.add("netgis-hide")};
+netgis.Search.prototype.requestSearch=function(a){this.lastQuery&&this.lastQuery===a||(this.lastQuery=a,netgis.util.invoke(this.container,netgis.Events.SEARCH_CHANGE,{query:a}))};netgis.Search.prototype.onInputKeyDown=function(a){if(13===a.keyCode)return a.preventDefault(),!1};netgis.Search.prototype.onInputKeyUp=function(a){switch(a.keyCode){case 13:a=this.results.getElementsByTagName("button");0<a.length&&a[0].click();break;case 27:this.clearAll();break;default:this.onInputChange()}};
+netgis.Search.prototype.onInputChange=function(a){this.timeout&&window.clearTimeout(this.timeout);this.timeout=window.setTimeout(this.onInputTimeout.bind(this),this.debounce)};netgis.Search.prototype.onInputTimeout=function(){var a=this.input.value;a=a.trim();0<a.length?this.requestSearch(a):this.clearAll()};netgis.Search.prototype.onButtonClick=function(a){this.input.focus()};netgis.Search.prototype.onCloserClick=function(a){this.clearAll();this.input.focus()};
+netgis.Search.prototype.onResultClick=function(a){a=a.currentTarget;var b=a.getAttribute("data-result");netgis.util.invoke(a,netgis.Events.SEARCH_SELECT,{item:a,data:b})};netgis=netgis||{};netgis.SearchParcel=function(a){this.config=a;this.districtsLayerID="searchparcel_districts";this.fieldsLayerID="searchparcel_fields";this.parcelsLayerID="searchparcel_parcels";this.parcelsAdded=[];this.initElements();this.initEvents();this.initConfig(a)};
+netgis.SearchParcel.prototype.initElements=function(){this.panel=new netgis.Panel("Flurst\u00fccks-Suche");this.panel.container.style.minWidth="92mm";this.panel.container.addEventListener(netgis.Events.PANEL_TOGGLE,this.onPanelToggle.bind(this));this.container=document.createElement("section");this.container.className="netgis-search-parcel";this.panel.content.appendChild(this.container);var a=document.createElement("section");this.top=a;this.container.appendChild(a);var b=this.createInput("Gemarkungsname:");
+b.style.position="relative";a.appendChild(b);this.nameInput=b.children[0];this.nameInput.setAttribute("title","ENTER: Ausw\u00e4hlen, ESCAPE: Zur\u00fccksetzen");this.nameInput.addEventListener("keyup",this.onInputNameKey.bind(this));this.nameLoader=document.createElement("div");this.nameLoader.className="netgis-loader netgis-text-primary netgis-hide";this.nameLoader.innerHTML="<i class='fas fa-spinner'></i>";b.appendChild(this.nameLoader);this.nameList=document.createElement("ul");a.appendChild(this.nameList);
+b=this.createInput("Gemarkungsnummer:");this.districtInput=b.children[0];a.appendChild(b);b=this.createInput("Flurnummer:");this.fieldInput=b.children[0];this.fieldInput.addEventListener("keyup",this.onInputFieldKey.bind(this));a.appendChild(b);b=this.createInput("<span>Flurst\u00fccksnummer (Z\u00e4hler/Nenner):</span>");this.parcelInputA=b.children[1];this.parcelInputA.style.width="48%";this.parcelInputB=this.parcelInputA.cloneNode(!0);this.parcelInputB.style.marginLeft="4%";b.appendChild(this.parcelInputB);
+a.appendChild(b);b=document.createElement("button");b.setAttribute("type","button");b.addEventListener("click",this.onParcelSearchClick.bind(this));b.className="netgis-color-a netgis-hover-c";b.innerHTML="Flurst\u00fccke suchen";b.style.marginTop="4mm";a.appendChild(b);b=document.createElement("section");b.className="netgis-hide";this.bottom=b;this.container.appendChild(b);var c=document.createElement("button");c.className="netgis-button netgis-clip-text netgis-color-c";c.innerHTML="<span>Flurst\u00fccke</span> <span></span><i class='netgis-icon fas fa-times'></i>";
+c.setAttribute("type","button");c.addEventListener("click",this.onBottomHeaderClick.bind(this));b.appendChild(c);this.parcelCount=c.getElementsByTagName("span")[1];this.parcelInfo=document.createElement("p");this.parcelTable=this.createTable(";Flur;Z\u00e4hler;Nenner;FKZ;Fl\u00e4che (qm)".split(";"));this.parcelTable.classList.add("netgis-hide");this.parcelTable.style.position="absolute";this.parcelTable.style.width="100%";this.parcelTable.style.top="12mm";this.parcelTable.style.bottom="0mm";this.parcelTable.style.margin=
+"0mm";this.parcelTable.style.overflow="auto";b.appendChild(this.parcelTable);this.parcelList=this.parcelTable.getElementsByTagName("tbody")[0];this.parcelReset=document.createElement("button");this.parcelReset.setAttribute("type","button");this.parcelReset.addEventListener("click",this.onResetClick.bind(this));this.parcelReset.className="netgis-color-a netgis-hover-c";this.parcelReset.innerHTML="Zur\u00fccksetzen";this.parcelReset.style.marginTop="4mm";a.appendChild(this.parcelReset)};
+netgis.SearchParcel.prototype.initEvents=function(){this.resizeObserver=(new ResizeObserver(this.onTopResize.bind(this))).observe(this.top)};
+netgis.SearchParcel.prototype.initConfig=function(a){this.districtsLayer=a.searchparcel.districts_service;this.districtsLayer.id=this.districtsLayerID;this.districtsLayer.style=a.styles.parcel;this.districtsLayer.order=99999;a.layers.push(this.districtsLayer);this.fieldsLayer={id:this.fieldsLayerID,type:netgis.LayerTypes.GEOJSON,style:a.styles.parcel,order:99999,data:null};a.layers.push(this.fieldsLayer);this.parcelsLayer={id:this.parcelsLayerID,type:netgis.LayerTypes.WKT,style:a.styles.parcel,order:99999,
+data:null};a.layers.push(this.parcelsLayer);if(!0===a.searchparcel.open){var b=this;window.setTimeout(function(){b.panel.show()},100)}};
+netgis.SearchParcel.prototype.attachTo=function(a){this.panel.attachTo(a);a.addEventListener(netgis.Events.CLIENT_SET_MODE,this.onClientSetMode.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE,this.onSearchParcelToggle.bind(this));a.addEventListener(netgis.Events.LAYERTREE_TOGGLE,this.onLayerTreeToggle.bind(this));a.addEventListener(netgis.Events.TOOLBOX_TOGGLE,this.onToolboxToggle.bind(this));a.addEventListener(netgis.Events.MAP_FEATURE_ENTER,this.onMapFeatureEnter.bind(this));a.addEventListener(netgis.Events.MAP_FEATURE_CLICK,
+this.onMapFeatureClick.bind(this));a.addEventListener(netgis.Events.MAP_FEATURE_LEAVE,this.onMapFeatureLeave.bind(this))};netgis.SearchParcel.prototype.createInput=function(a){var b=document.createElement("label");b.className="netgis-hover-text-primary";b.innerHTML=a;a=document.createElement("input");a.setAttribute("type","text");b.appendChild(a);return b};
+netgis.SearchParcel.prototype.createNameItem=function(a){var b=document.createElement("li"),c=document.createElement("button");c.setAttribute("type","button");c.addEventListener("click",this.onNameItemClick.bind(this));c.className="netgis-color-e netgis-hover-a netgis-text-a netgis-hover-text-e";c.innerHTML=a;b.appendChild(c);return b};
+netgis.SearchParcel.prototype.createTable=function(a){var b=document.createElement("div");b.className="netgis-table-wrapper";var c=document.createElement("table");b.appendChild(c);var d=document.createElement("thead");c.appendChild(d);var e=document.createElement("tr");e.className="netgis-color-d netgis-shadow";d.appendChild(e);for(d=0;d<a.length;d++){var f=document.createElement("th");f.innerHTML=a[d];e.appendChild(f)}a=document.createElement("tbody");c.appendChild(a);return b};
+netgis.SearchParcel.prototype.createParcelItem=function(a,b,c,d,e,f,g){var h=document.createElement("tr");h.className="netgis-hover-d";h.setAttribute("title","Klicken zum zoomen");h.setAttribute("data-id",d);h.setAttribute("data-field",a);h.setAttribute("data-parcel-a",b);h.setAttribute("data-parcel-b",c);h.setAttribute("data-bbox",f);h.setAttribute("data-geom",g);h.addEventListener("pointerenter",this.onParcelEnter.bind(this));h.addEventListener("pointerleave",this.onParcelLeave.bind(this));h.addEventListener("click",
+this.onParcelClick.bind(this));f=document.createElement("td");h.appendChild(f);g=document.createElement("button");g.setAttribute("type","button");g.setAttribute("title","Geometrie \u00fcbernehmen");g.addEventListener("click",this.onParcelImportClick.bind(this));g.className="netgis-hover-a";g.innerHTML="<i class='fas fa-paste'></i>";f.appendChild(g);f=document.createElement("td");f.innerHTML=a;h.appendChild(f);a=document.createElement("td");a.innerHTML=b;h.appendChild(a);b=document.createElement("td");
+b.innerHTML=c;h.appendChild(b);c=document.createElement("td");c.innerHTML=netgis.util.trim(d,"_");h.appendChild(c);d=document.createElement("td");d.innerHTML=e;h.appendChild(d);return h};
+netgis.SearchParcel.prototype.reset=function(){this.hideBottom();this.nameLoader.classList.add("netgis-hide");this.nameInput.value="";this.districtInput.value="";this.fieldInput.value="";this.parcelInputA.value="";this.parcelInputB.value="";this.nameList.innerHTML="";this.parcelInfo.innerHTML="";this.parcelList.innerHTML="";this.parcelTable.classList.add("netgis-hide");this.parcelReset.classList.add("netgis-hide");this.parcelCount.innerHTML="";var a=this;window.setTimeout(function(){a.top.scrollTop=
+0;a.parcelTable.scrollTop=0},10);netgis.util.invoke(this.container,netgis.Events.SEARCHPARCEL_RESET,null);this.panel.visible()&&this.showDistricts(!0);this.showFields(!1);this.showParcels(!1)};
+netgis.SearchParcel.prototype.showDistricts=function(a){a?(netgis.util.invoke(this.container,netgis.Events.MAP_LAYER_TOGGLE,{id:this.districtsLayerID,on:!0}),netgis.util.invoke(this.container,netgis.Events.MAP_ZOOM_LEVEL,{z:this.config.searchparcel.districts_service.min_zoom})):netgis.util.invoke(this.container,netgis.Events.MAP_LAYER_TOGGLE,{id:this.districtsLayerID,on:!1})};
+netgis.SearchParcel.prototype.showFields=function(a,b){a?(b.crs={type:"name",properties:{name:"urn:ogc:def:crs:EPSG::25832"}},this.fieldsLayer.data=b,netgis.util.invoke(this.container,netgis.Events.MAP_LAYER_TOGGLE,{id:this.fieldsLayerID,on:!0}),netgis.util.invoke(this.container,netgis.Events.MAP_ZOOM_LAYER,{id:this.fieldsLayerID})):(netgis.util.invoke(this.container,netgis.Events.MAP_LAYER_TOGGLE,{id:this.fieldsLayerID,on:!1}),this.fieldsLayer.data=null)};
+netgis.SearchParcel.prototype.showParcels=function(a,b){if(a){a=[];for(var c=0;c<b.length;c++){var d=b[c];a.push({id:d.fsk,geometry:d.geometry,properties:{flaeche:d.flaeche,fln:d.fln,fsk:d.fsk,fsn_nen:d.fsn_nen,fsn_zae:d.fsn_zae}})}this.parcelsLayer.data=a;netgis.util.invoke(this.container,netgis.Events.MAP_LAYER_TOGGLE,{id:this.parcelsLayerID,on:!0});netgis.util.invoke(this.container,netgis.Events.MAP_ZOOM_LAYER,{id:this.parcelsLayerID})}else netgis.util.invoke(this.container,netgis.Events.MAP_LAYER_TOGGLE,
+{id:this.parcelsLayerID,on:!1})};netgis.SearchParcel.prototype.onSearchParcelToggle=function(a){this.panel.toggle()};netgis.SearchParcel.prototype.onLayerTreeToggle=function(a){this.panel.hide()};netgis.SearchParcel.prototype.onToolboxToggle=function(a){this.panel.hide()};netgis.SearchParcel.prototype.onClientSetMode=function(a){a.detail.mode===netgis.Modes.SEARCH_PARCEL?this.reset():(this.showDistricts(!1),this.showFields(!1),this.showParcels(!1))};
+netgis.SearchParcel.prototype.onPanelToggle=function(a){!1===a.detail.visible?netgis.util.invoke(this.panel.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.VIEW}):netgis.util.invoke(this.panel.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.SEARCH_PARCEL})};netgis.SearchParcel.prototype.onInputNameKey=function(a){switch(a.keyCode){case 13:this.selectFirstName();break;case 27:this.reset();break;default:this.requestName(this.nameInput.value.trim())}};
+netgis.SearchParcel.prototype.requestName=function(a){this.nameDebounce&&window.clearTimeout(this.nameDebounce);if(0!==a.length){var b=this.config.searchparcel.name_url;b=netgis.util.replace(b,"{q}",window.encodeURIComponent(a));this.nameDebounce=window.setTimeout(this.onInputNameDebounce.bind(this,b),200);this.nameLoader.classList.remove("netgis-hide")}};netgis.SearchParcel.prototype.onInputNameDebounce=function(a){netgis.util.request(a,this.onInputNameResponse.bind(this))};
+netgis.SearchParcel.prototype.onInputNameResponse=function(a){this.nameLoader.classList.add("netgis-hide");this.parcelReset.classList.remove("netgis-hide");this.nameList.innerHTML="";if("{"===a.charAt(0)||"["===a.charAt(0)){a=JSON.parse(a);for(var b=0;b<a.data.length;b++){var c=a.data[b],d=this.createNameItem(c.gmk_name);d.getElementsByTagName("button")[0].setAttribute("data-id",c.gmk_gmn);this.nameList.appendChild(d)}}};
+netgis.SearchParcel.prototype.onNameItemClick=function(a){a=a.target;var b=a.getAttribute("data-id");this.nameInput.value=a.innerHTML;this.nameList.innerHTML="";this.districtInput.value=b;this.requestFields(b)};
+netgis.SearchParcel.prototype.requestFields=function(a){var b=this.config.searchparcel.fields_service,c=b.url;c=c+"service=WFS&version=1.0.0&request=GetFeature&outputFormat=application/json; subtype=geojson&typename="+b.name;c=c+"&filter=<Filter><PropertyIsEqualTo><PropertyName>"+(b.filter_property+"</PropertyName>");netgis.util.request(c+("<Literal>"+a+"</Literal></PropertyIsEqualTo></Filter>"),this.onFieldsResponse.bind(this))};
+netgis.SearchParcel.prototype.onFieldsResponse=function(a){a=JSON.parse(a);this.showDistricts(!1);this.showFields(!0,a);this.showParcels(!1)};netgis.SearchParcel.prototype.selectFirstName=function(){var a=this.nameList.getElementsByTagName("button");0<a.length&&a[0].click()};netgis.SearchParcel.prototype.setDistrict=function(a,b){this.nameInput.value=a;this.districtInput.value=b;this.requestFields(b)};netgis.SearchParcel.prototype.setFieldNumber=function(a){this.fieldInput.value=a;this.onParcelSearchClick()};
+netgis.SearchParcel.prototype.setParcelNumber=function(a,b){this.parcelInputA.value=a;this.parcelInputB.value=b;this.onParcelSearchClick()};netgis.SearchParcel.prototype.showBottom=function(){this.top.classList.add("netgis-resize-bottom");this.top.style.height="50%";this.top.style.bottom="auto";this.bottom.classList.remove("netgis-hide")};netgis.SearchParcel.prototype.hideBottom=function(){this.top.classList.remove("netgis-resize-bottom");this.top.style.height="auto";this.top.style.bottom="0mm";this.bottom.classList.add("netgis-hide")};
+netgis.SearchParcel.prototype.onInputFieldKey=function(a){switch(a.keyCode){case 13:this.onParcelSearchClick()}};netgis.SearchParcel.prototype.onParcelSearchClick=function(a){this.requestParcels(this.districtInput.value.trim(),this.fieldInput.value.trim(),this.parcelInputA.value.trim(),this.parcelInputB.value.trim())};
+netgis.SearchParcel.prototype.requestParcels=function(a,b,c,d){var e=this.config.searchparcel.parcel_url;e=netgis.util.replace(e,"{district}",a?a:"");e=netgis.util.replace(e,"{field}",b?b:"");e=netgis.util.replace(e,"{parcelA}",c?c:"");e=netgis.util.replace(e,"{parcelB}",d?d:"");this.parcelTable.classList.add("netgis-hide");this.parcelList.innerHTML="";this.parcelInfo.innerHTML="Suche Flurst\u00fccke...";netgis.util.request(e,this.onParcelsResponse.bind(this))};
+netgis.SearchParcel.prototype.onParcelsResponse=function(a){a=JSON.parse(a);this.parcelCount.innerHTML="("+a.count+")";if(0===a.count)this.parcelInfo.innerHTML=a.Info;else{for(var b=0;b<a.data.length;b++){var c=a.data[b];c=this.createParcelItem(c.fln,c.fsn_zae,c.fsn_nen,c.fsk,c.flaeche,c.bbox,c.geometry);this.parcelList.appendChild(c)}this.parcelTable.classList.remove("netgis-hide");this.showBottom();this.showDistricts(!1);this.showFields(!1);this.showParcels(!0,a.data)}this.container.classList.contains("netgis-hide")||
+this.parcelTable.scrollIntoView()};netgis.SearchParcel.prototype.onParcelEnter=function(a){a=a.target;var b=a.getAttribute("data-geom");a={id:a.getAttribute("data-id"),field:a.getAttribute("data-field"),parcelA:a.getAttribute("data-parcel-a"),parcelB:a.getAttribute("data-parcel-b"),geom:b};netgis.util.invoke(this.container,netgis.Events.SEARCHPARCEL_ITEM_ENTER,a)};netgis.SearchParcel.prototype.onParcelLeave=function(a){netgis.util.invoke(this.container,netgis.Events.SEARCHPARCEL_ITEM_LEAVE,{id:a.target.getAttribute("data-id")})};
+netgis.SearchParcel.prototype.onParcelClick=function(a){netgis.util.invoke(this.container,netgis.Events.SEARCHPARCEL_ITEM_CLICK,{id:a.currentTarget.getAttribute("data-id")})};netgis.SearchParcel.prototype.onParcelImportClick=function(a){a.stopPropagation();a=a.currentTarget.parentElement.parentElement;var b=a.getAttribute("data-id");a.getAttribute("data-geom");netgis.util.invoke(this.container,netgis.Events.MAP_COPY_FEATURE_TO_EDIT,{source:this.parcelsLayerID,id:b})};
+netgis.SearchParcel.prototype.onResetClick=function(a){this.reset()};netgis.SearchParcel.prototype.onTopResize=function(a){if(!this.bottom.classList.contains("netgis-hide")){a=this.top.getBoundingClientRect();var b=this.top.parentNode.getBoundingClientRect();this.bottom.style.top=a.bottom-b.top+"px"}};netgis.SearchParcel.prototype.onBottomHeaderClick=function(a){this.reset()};
+netgis.SearchParcel.prototype.onMapFeatureEnter=function(a){var b=a.target;a=a.detail;switch(a.layer){case this.districtsLayerID:var c=a.properties.gemarkung;b.setAttribute("title",c);break;case this.fieldsLayerID:c=a.properties.flurname;b.setAttribute("title",c);break;case this.parcelsLayerID:for(c="Flur: "+a.properties.fln+" / Z\u00e4hler: "+a.properties.fsn_zae+" / Nenner: "+a.properties.fsn_nen,b.setAttribute("title",c),b=a.properties.fsk,a=this.parcelList.getElementsByTagName("tr"),c=0;c<a.length;c++){var d=
+a[c];if(d.getAttribute("data-id")===b){d.scrollIntoView({behavior:"smooth",block:"center"});d.classList.add("netgis-color-d");break}}}};
+netgis.SearchParcel.prototype.onMapFeatureClick=function(a){a=a.detail;switch(a.layer){case this.districtsLayerID:this.setDistrict(a.properties.gemarkung+" ("+a.properties.ldkreis+")",a.properties.gmkgnr);break;case this.fieldsLayerID:this.setFieldNumber(a.properties.flur);break;case this.parcelsLayerID:netgis.util.invoke(this.container,netgis.Events.MAP_COPY_FEATURE_TO_EDIT,{source:this.parcelsLayerID,id:a.properties.fsk})}};
+netgis.SearchParcel.prototype.onMapFeatureLeave=function(a){var b=a.target;a=a.detail;switch(a.layer){case this.districtsLayerID:case this.fieldsLayerID:b.setAttribute("title","");break;case this.parcelsLayerID:b.setAttribute("title","");b=a.properties.fsk;a=this.parcelList.getElementsByTagName("tr");for(var c=0;c<a.length;c++){var d=a[c];if(d.getAttribute("data-id")===b){d.classList.remove("netgis-color-d");break}}}};netgis=netgis||{};netgis.SearchPlace=function(a){this.config=a;this.initElements();this.initEvents();this.initConfig(a)};
+netgis.SearchPlace.prototype.initElements=function(){this.search=new netgis.Search("");this.container=this.search.container;this.container.classList.add("netgis-search-place","netgis-responsive");this.search.container.addEventListener(netgis.Events.SEARCH_CHANGE,this.onSearchChange.bind(this));this.search.container.addEventListener(netgis.Events.SEARCH_SELECT,this.onSearchSelect.bind(this));this.search.container.addEventListener(netgis.Events.SEARCH_CLEAR,this.onSearchClear.bind(this))};
+netgis.SearchPlace.prototype.initEvents=function(){};netgis.SearchPlace.prototype.initConfig=function(a){this.search.setTitle(a.searchplace.title)};netgis.SearchPlace.prototype.attachTo=function(a){this.search.attachTo(a);a.addEventListener(netgis.Events.SEARCHPLACE_TOGGLE,this.onSearchPlaceToggle.bind(this))};netgis.SearchPlace.prototype.onSearchPlaceToggle=function(a){this.search.toggle()};
+netgis.SearchPlace.prototype.onSearchChange=function(a){var b=this.config.searchplace.url;b=netgis.util.replace(b,"{query}",window.encodeURIComponent(a.detail.query));b=netgis.util.replace(b,"{epsg}",4326);netgis.util.request(b,this.onSearchResponse.bind(this))};
+netgis.SearchPlace.prototype.onSearchResponse=function(a){a=JSON.parse(a);this.search.clearResults();if(a.geonames){a=a.geonames;for(var b=0;b<a.length;b++){var c=a[b],d=c.title,e=.5*(Number.parseFloat(c.minx)+Number.parseFloat(c.maxx)),f=.5*(Number.parseFloat(c.miny)+Number.parseFloat(c.maxy));c={type:c.category,id:b,lon:e,lat:f};this.search.addResult(d,JSON.stringify(c))}}else if(a.data)for(a=a.data,b=0;b<a.length;b++)c=a[b],d=c.name,c={type:"street",id:c.strid,lon:Number.parseFloat(c.wgs_x),lat:Number.parseFloat(c.wgs_y)},
+this.search.addResult(d,JSON.stringify(c))};netgis.SearchPlace.prototype.onSearchSelect=function(a){a=JSON.parse(a.detail.data);netgis.util.invoke(this.container,netgis.Events.MAP_ZOOM_LONLAT,{lon:a.lon,lat:a.lat,zoom:this.config.searchplace.zoom});if("street"===a.type){var b=this.config.searchplace.url_detail;b&&(b=netgis.util.replace(b,"{id}",a.id),netgis.util.request(b,this.onSearchDetailResponse.bind(this)))}};
+netgis.SearchPlace.prototype.onSearchDetailResponse=function(a){a=JSON.parse(a);var b=a.hsnrarr;if(0!==b.length){this.search.clearResults();for(var c=0;c<b.length;c++){var d=b[c],e=a.strname+" "+d.hsnr;d={type:"address",lon:Number.parseFloat(d.wgs_x),lat:Number.parseFloat(d.wgs_y)};this.search.addResult(e,JSON.stringify(d))}}};netgis.SearchPlace.prototype.onSearchClear=function(a){};netgis=netgis||{};
+netgis.SLD=function(){return{read:function(a,b){var c={};a=(new DOMParser).parseFromString(a,"text/xml").getElementsByTagName("NamedLayer");for(var d=0;d<a.length;d++){var e=a[d],f=e.getElementsByTagName("se:Name")[0].innerHTML;console.info("Layer:",f);e=e.getElementsByTagName("se:FeatureTypeStyle");for(f=0;f<e.length;f++)for(var g=e[f].getElementsByTagName("se:Rule"),h=0;h<g.length;h++){var k=g[h],l=k.getElementsByTagName("se:Name")[0].innerHTML;console.info("Rule:",l);l=k.getElementsByTagName("se:PolygonSymbolizer")[0];k=
+l.getElementsByTagName("se:Fill")[0];l=l.getElementsByTagName("se:Stroke")[0];c.polygon={fill:k.querySelector("[name='fill']").innerHTML,stroke:l.querySelector("[name='stroke']").innerHTML,strokeWidth:Number.parseFloat(l.querySelector("[name='stroke-width']").innerHTML)}}}console.info("SLD:",c);b.invoke(netgis.Events.MAP_UPDATE_STYLE,c);return c}}}();netgis=netgis||{};netgis.Tabs=function(a){this.initElements(a);this.setActiveTab(0)};
+netgis.Tabs.prototype.initElements=function(a){this.container=document.createElement("div");this.container.className="netgis-tabs";this.header=document.createElement("div");this.header.className="netgis-header netgis-color-d";this.container.appendChild(this.header);this.content=document.createElement("div");this.content.className="netgis-content netgis-color-e";this.container.appendChild(this.content);for(var b=0;b<a.length;b++){var c=document.createElement("button");c.setAttribute("type","button");
+c.addEventListener("click",this.onHeaderButtonClick.bind(this));c.className="netgis-button netgis-color-d";c.innerHTML=a[b];this.header.appendChild(c);c=document.createElement("section");c.className="netgis-color-e netgis-form";this.content.appendChild(c)}};netgis.Tabs.prototype.attachTo=function(a){a.appendChild(this.container)};
+netgis.Tabs.prototype.setActiveTab=function(a){for(var b=this.header.getElementsByClassName("netgis-button"),c=this.content.getElementsByTagName("section"),d=0;d<b.length;d++){var e=b[d],f=c[d];d===a?(e.classList.add("netgis-color-e"),e.classList.add("netgis-text-a"),e.classList.add("netgis-bar-a"),e.classList.add("netgis-active"),e.scrollIntoView({behavior:"smooth"}),f.classList.remove("netgis-hide"),f.scrollTop=0):(e.classList.remove("netgis-color-e"),e.classList.remove("netgis-text-a"),e.classList.remove("netgis-bar-a"),
+e.classList.remove("netgis-active"),f.classList.add("netgis-hide"))}};netgis.Tabs.prototype.getContentSection=function(a){return this.content.getElementsByTagName("section")[a]};netgis.Tabs.prototype.appendContent=function(a,b){this.content.getElementsByTagName("section")[a].appendChild(b)};
+netgis.Tabs.prototype.updateHeaderScroll=function(){for(var a=0,b=this.header.getElementsByTagName("button"),c=0;c<b.length;c++){var d=b[c];a+=d.getBoundingClientRect().width;d.classList.contains("netgis-active")&&d.scrollIntoView()}b=this.header.getBoundingClientRect().width;a>b?this.container.classList.add("netgis-scroll"):this.container.classList.remove("netgis-scroll")};
+netgis.Tabs.prototype.onHeaderButtonClick=function(a){a=a.currentTarget;for(var b=this.header.getElementsByClassName("netgis-button"),c=0,d=0;d<b.length;d++)if(b[d]===a){c=d;break}this.setActiveTab(c)};netgis=netgis||{};netgis.TimeSlider=function(a){this.config=a;this.insertTop=!0;this.initElements();for(a=1900;2E3>=a;a++);console.info("TimeSlider:",this);var b=this;window.setTimeout(function(){b.container.scrollLeft=0},1)};
+netgis.TimeSlider.prototype.initElements=function(){this.container=document.createElement("section");this.container.className="netgis-timeslider netgis-footer netgis-noselect netgis-color-e netgis-hide";document.addEventListener("pointermove",this.onPointerMove.bind(this));document.addEventListener("pointerup",this.onPointerUp.bind(this));this.header=document.createElement("button");this.header.className="netgis-header netgis-button netgis-clip-text netgis-color-a netgis-hover-c netgis-shadow";this.header.innerHTML=
+"<i class='netgis-icon fas fa-clock'></i><span>TimeSlider</span><i class='netgis-icon fas fa-times'></i>";this.header.setAttribute("type","button");this.header.addEventListener("click",this.onHeaderClick.bind(this));this.container.appendChild(this.header);this.wrapper=document.createElement("div");this.wrapper.className="netgis-wrapper";this.wrapper.addEventListener("pointerdown",this.onPointerDown.bind(this));this.container.appendChild(this.wrapper);this.table=document.createElement("table");this.wrapper.appendChild(this.table);
+this.top=document.createElement("tr");this.table.appendChild(this.top);this.bottom=document.createElement("tr")};netgis.TimeSlider.prototype.attachTo=function(a){a.appendChild(this.container);a.addEventListener(netgis.Events.TIMESLIDER_SHOW,this.onTimeSliderShow.bind(this));a.addEventListener(netgis.Events.TIMESLIDER_HIDE,this.onTimeSliderHide.bind(this))};
+netgis.TimeSlider.prototype.setVisible=function(a){a?(this.container.classList.remove("netgis-hide"),this.container.parentNode.classList.add("netgis-footer")):(this.container.classList.add("netgis-hide"),this.container.parentNode.classList.remove("netgis-footer"))};netgis.TimeSlider.prototype.setTitle=function(a){this.header.getElementsByTagName("span")[0].innerHTML=a};netgis.TimeSlider.prototype.clearTimeSteps=function(){this.top.innerHTML=""};
+netgis.TimeSlider.prototype.addTimeStep=function(a,b){var c=document.createElement("td");c.setAttribute("data-id",a);a=document.createElement("button");a.className="netgis-button netgis-color-e netgis-hover-d";a.innerHTML="<i class='netgis-icon netgis-text-a far fa-calendar'></i><span>"+b+"</span>";a.setAttribute("type","button");a.addEventListener("click",this.onTimeStepClick.bind(this));c.appendChild(a);this.top.appendChild(c)};
+netgis.TimeSlider.prototype.addTimeStep_01=function(a,b){a=document.createElement("td");var c=document.createElement("td");this.insertTop?a.innerHTML=b:c.innerHTML=b;this.top.appendChild(a);this.bottom.appendChild(c);this.insertTop=!this.insertTop};
+netgis.TimeSlider.prototype.setActiveTimeStep=function(a){var b=this.top.getElementsByTagName("td"),c=b[a],d=c.getAttribute("data-id");console.info("Set Active Step:",a,d);for(var e=0;e<b.length;e++){var f=b[e],g=f.getElementsByClassName("netgis-icon")[0];e===a?(f.classList.add("netgis-active"),g.classList.remove("fa-calendar"),g.classList.add("fa-calendar-check")):(f.classList.remove("netgis-active"),g.classList.add("fa-calendar"),g.classList.remove("fa-calendar-check"))}c.scrollIntoView();netgis.util.invoke(c,
+netgis.Events.TIMESLIDER_SELECT,{layer:this.layerID,time:d})};netgis.TimeSlider.prototype.requestServiceWMST=function(a,b){a=a.trim();1>a.length||(-1===a.indexOf("GetCapabilities")&&(a+="&REQUEST=GetCapabilities"),netgis.util.request(a,this.onServiceResponseWMST.bind(this),{id:b}))};
+netgis.TimeSlider.prototype.onServiceResponseWMST=function(a,b){for(var c=(new DOMParser).parseFromString(a,"text/xml").documentElement.getElementsByTagName("Layer"),d,e=0;e<c.length;e++){a=c[e];var f=a.getElementsByTagName("Name")[0].textContent;if(f===b.id){d={name:f,title:a.getElementsByTagName("Title")[0].textContent,abstract:a.getElementsByTagName("Abstract")[0].textContent,queryable:"1"===a.getAttribute("queryable"),opaque:"1"===a.getAttribute("opaque")};e=a.getElementsByTagName("SRS");0<e.length&&
+(d.projection=e[0].textContent);e=a.getElementsByTagName("CRS");0<e.length&&(d.projection=e[0].textContent);e=a.getElementsByTagName("BoundingBox")[0];d.bbox=[Number.parseFloat(e.getAttribute("minx")),Number.parseFloat(e.getAttribute("miny")),Number.parseFloat(e.getAttribute("maxx")),Number.parseFloat(e.getAttribute("maxy"))];b=a.getElementsByTagName("Dimension");for(e=0;e<b.length;e++)if(c=b[e],"time"===c.getAttribute("name")){var g={defaultTime:c.getAttribute("default"),extent:c.textContent.split("/")};
+break}a=a.getElementsByTagName("Extent");for(e=0;e<a.length;e++)if(b=a[e],"time"===b.getAttribute("name")){g.defaultTime=b.getAttribute("default");g.extent=b.textContent.split("/");break}d.time=g;break}}console.info("WMST Layer:",d);this.setTitle(d.title);if(d.time.extent){g=new Date(d.time.extent[0]);a=new Date(d.time.extent[1]);b=d.time.extent[2];d=[];switch(b){case "P1D":for(;g<=a;)d.push(new Date(g)),g.setDate(g.getDate()+1);break;default:console.error("unsupported WMST date range",b,g,a)}for(e=
+0;e<d.length;e++)b=d[e],a=g=b.toISOString(),a=a.replace("T",", "),a=a.replace("Z",""),this.addTimeStep(g,a);this.setActiveTimeStep(d.length-1)}};netgis.TimeSlider.prototype.onTimeSliderShow=function(a){a=a.detail;console.info("TimeSlider Show:",a);this.layerID=a.layer;this.setTitle(a.title);this.clearTimeSteps();this.requestServiceWMST(a.url,a.name);this.setVisible(!0)};netgis.TimeSlider.prototype.onTimeSliderHide=function(a){this.setVisible(!1)};netgis.TimeSlider.prototype.onHeaderClick=function(a){this.setVisible(!1)};
+netgis.TimeSlider.prototype.onPointerDown=function(a){a=a.pageX-this.wrapper.offsetLeft;this.down=!0;this.downX=a;this.downScroll=this.wrapper.scrollLeft;this.container.classList.add("netgis-active")};netgis.TimeSlider.prototype.onPointerMove=function(a){this.down&&(a.preventDefault(),this.wrapper.scrollLeft=this.downScroll-(a.pageX-this.wrapper.offsetLeft-this.downX))};netgis.TimeSlider.prototype.onPointerUp=function(a){this.down&&a.preventDefault();this.down=!1;this.container.classList.remove("netgis-active")};
+netgis.TimeSlider.prototype.onTimeStepClick=function(a){a=a.currentTarget.parentNode;a.getAttribute("data-id");if(!(5<Math.abs(this.wrapper.scrollLeft-this.downScroll))){for(var b=this.top.getElementsByTagName("td"),c=-1,d=0;d<b.length;d++)if(b[d]===a){c=d;break}this.setActiveTimeStep(c)}};netgis=netgis||{};netgis.Toolbox=function(a){this.config=a;this.bottomPanels={};this.initElements(a);this.initOptions(a);this.initEvents()};
+netgis.Toolbox.prototype.initElements=function(a){this.panel=new netgis.Panel("Toolbox");this.panel.content.classList.add("netgis-toolbox");this.top=document.createElement("section");this.panel.content.appendChild(this.top);for(var b=a.toolbox.items,c=0;c<b.length;c++){var d=b[c];if(!1===this.config.tools.editable)switch(d.id){case "draw_points":continue;case "draw_lines":continue;case "draw_polygons":continue;case "modify_features":continue;case "delete_features":continue;case "buffer_features":continue;
+case "cut_features":continue}this.addButton(this.top,d.id,d.title)}this.bottom=document.createElement("section");this.bottom.className="netgis-color-e netgis-hide";this.panel.content.appendChild(this.bottom);b=document.createElement("button");b.className="netgis-button netgis-clip-text netgis-color-c";b.innerHTML="<span>Einstellungen</span><i class='netgis-icon fas fa-times'></i>";b.setAttribute("type","button");b.addEventListener("click",this.onBottomHeaderClick.bind(this));this.bottom.appendChild(b);
+this.bottomTitle=b.getElementsByTagName("span")[0];a.toolbox&&!0===a.toolbox.open&&this.panel.show()};
+netgis.Toolbox.prototype.initOptions=function(a){var b=a.toolbox.options;if(b)for(var c in b);b=a.tools;a=[];b.buffer||(b.buffer={});this.bottomPanels.drawPoints=document.createElement("div");a.push(this.addCheckbox(this.bottomPanels.drawPoints,"Einrasten",this.onDrawSnapToggle.bind(this)));this.addCheckbox(this.bottomPanels.drawPoints,"Puffern",this.onDrawBufferToggle.bind(this));this.addInputNumber(this.bottomPanels.drawPoints,"Radius (Meter):",b.buffer.default_radius,this.onDrawBufferChange.bind(this));
+this.addInputNumber(this.bottomPanels.drawPoints,"Segmente:",b.buffer.default_segments,this.onDrawBufferChange.bind(this));this.bottom.appendChild(this.bottomPanels.drawPoints);this.bottomPanels.drawLines=document.createElement("div");a.push(this.addCheckbox(this.bottomPanels.drawLines,"Einrasten",this.onDrawSnapToggle.bind(this)));this.addCheckbox(this.bottomPanels.drawLines,"Puffern",this.onDrawBufferToggle.bind(this));this.addInputNumber(this.bottomPanels.drawLines,"Radius (Meter):",b.buffer.default_radius,
+this.onDrawBufferChange.bind(this));this.addInputNumber(this.bottomPanels.drawLines,"Segmente:",b.buffer.default_segments,this.onDrawBufferChange.bind(this));this.bottom.appendChild(this.bottomPanels.drawLines);this.showDrawBufferOptions(!1);this.bottomPanels.drawPolygons=document.createElement("div");a.push(this.addCheckbox(this.bottomPanels.drawPolygons,"Einrasten",this.onDrawSnapToggle.bind(this)));this.bottom.appendChild(this.bottomPanels.drawPolygons);this.bottomPanels.bufferFeatures=document.createElement("div");
+this.addInputNumber(this.bottomPanels.bufferFeatures,"Radius (Meter):",b.buffer.default_radius,this.onBufferFeaturesChange.bind(this));this.addInputNumber(this.bottomPanels.bufferFeatures,"Segmente:",b.buffer.default_segments,this.onBufferFeaturesChange.bind(this));this.addButton(this.bottomPanels.bufferFeatures,null,"<i class='netgis-icon netgis-text-a fas fa-arrow-circle-right'></i><span>Akzeptieren</span>",this.onBufferFeaturesAccept.bind(this));this.bottom.appendChild(this.bottomPanels.bufferFeatures);
+this.bottomPanels.modifyFeatures=document.createElement("div");a.push(this.addCheckbox(this.bottomPanels.modifyFeatures,"Einrasten",this.onDrawSnapToggle.bind(this)));this.bottom.appendChild(this.bottomPanels.modifyFeatures);if(this.config.tools&&this.config.tools.snapping){if(!1===this.config.tools.snapping.show)for(b=0;b<a.length;b++)a[b].parentNode.classList.add("netgis-hide");if(!0===this.config.tools.snapping.active){for(b=0;b<a.length;b++)a[b].checked=!0;var d=this;window.setTimeout(function(){netgis.util.invoke(d.panel.container,
+netgis.Events.MAP_SNAP_TOGGLE,{on:!0})},100)}}};netgis.Toolbox.prototype.initEvents=function(){this.resizeObserver=(new ResizeObserver(this.onTopResize.bind(this))).observe(this.top)};
+netgis.Toolbox.prototype.attachTo=function(a){a.appendChild(this.panel.container);a.addEventListener(netgis.Events.CLIENT_SET_MODE,this.onClientSetMode.bind(this));a.addEventListener(netgis.Events.TOOLBOX_TOGGLE,this.onToolboxToggle.bind(this));a.addEventListener(netgis.Events.LAYERTREE_TOGGLE,this.onLayerTreeToggle.bind(this));a.addEventListener(netgis.Events.SEARCHPARCEL_TOGGLE,this.onSearchParcelToggle.bind(this))};
+netgis.Toolbox.prototype.addButton=function(a,b,c,d){var e=document.createElement("button");e.className="netgis-button netgis-clip-text netgis-color-e netgis-hover-d";e.innerHTML=c;e.setAttribute("type","button");e.setAttribute("data-id",b);d?e.onclick=d:e.addEventListener("click",this.onButtonClick.bind(this));a&&a.appendChild(e);return e};
+netgis.Toolbox.prototype.addCheckbox=function(a,b,c){var d=document.createElement("label");d.className="netgis-noselect netgis-hover-a";var e=document.createElement("input");e.setAttribute("type","checkbox");d.appendChild(e);var f=document.createElement("span");f.innerHTML=b;d.appendChild(f);c&&(e.onchange=c);a&&a.appendChild(d);return e};
+netgis.Toolbox.prototype.addInputNumber=function(a,b,c,d){var e=document.createElement("label");e.className="netgis-noselect netgis-hover-a";var f=document.createElement("span");f.innerHTML=b;e.appendChild(f);b=document.createElement("input");b.setAttribute("type","number");b.setAttribute("min",0);b.value=c;e.appendChild(b);d&&(b.onchange=d,b.onkeyup=d);a&&a.appendChild(e);return b};
+netgis.Toolbox.prototype.showBottom=function(a,b){this.top.classList.add("netgis-resize-bottom");this.top.style.height="50%";this.top.style.bottom="auto";this.bottom.classList.remove("netgis-hide");this.bottomTitle.innerHTML=b;if(a)for(var c in this.bottomPanels)b=this.bottomPanels[c],b===a?b.classList.remove("netgis-hide"):b.classList.add("netgis-hide")};
+netgis.Toolbox.prototype.hideBottom=function(){this.top.classList.remove("netgis-resize-bottom");this.top.style.height="auto";this.top.style.bottom="0mm";this.bottom.classList.add("netgis-hide")};
+netgis.Toolbox.prototype.showDrawBufferOptions=function(a){var b=this.bottomPanels.drawPoints.getElementsByTagName("label"),c=this.bottomPanels.drawLines.getElementsByTagName("label");b[1].getElementsByTagName("input")[0].checked=a;(c[1].getElementsByTagName("input")[0].checked=a)?(b[2].classList.remove("netgis-hide"),b[3].classList.remove("netgis-hide"),c[2].classList.remove("netgis-hide"),c[3].classList.remove("netgis-hide")):(b[2].classList.add("netgis-hide"),b[3].classList.add("netgis-hide"),
+c[2].classList.add("netgis-hide"),c[3].classList.add("netgis-hide"))};netgis.Toolbox.prototype.setActiveButton=function(a){for(var b=this.top.getElementsByTagName("button"),c=null,d=0;d<b.length;d++){var e=b[d];e.getAttribute("data-id")===a?(c=e,e.classList.add("netgis-active")):e.classList.remove("netgis-active")}if(c){var f=this;window.setTimeout(function(){f.top.scrollTo({top:c.offsetTop,behavior:"smooth"})},10)}};netgis.Toolbox.prototype.onToolboxToggle=function(a){this.panel.toggle()};
+netgis.Toolbox.prototype.onLayerTreeToggle=function(a){this.panel.hide()};netgis.Toolbox.prototype.onSearchParcelToggle=function(a){this.panel.hide()};
+netgis.Toolbox.prototype.onClientSetMode=function(a){a=a.detail;this.hideBottom();switch(a.mode){default:this.setActiveButton(null);break;case netgis.Modes.VIEW:this.setActiveButton(netgis.Commands.VIEW);break;case netgis.Modes.ZOOM_BOX:this.setActiveButton(netgis.Commands.ZOOM_BOX);break;case netgis.Modes.MEASURE_LINE:this.setActiveButton(netgis.Commands.MEASURE_LINE);break;case netgis.Modes.MEASURE_AREA:this.setActiveButton(netgis.Commands.MEASURE_AREA);break;case netgis.Modes.DRAW_POINTS:this.setActiveButton(netgis.Commands.DRAW_POINTS);
+this.showBottom(this.bottomPanels.drawPoints,"Punkte zeichnen");break;case netgis.Modes.DRAW_LINES:this.setActiveButton(netgis.Commands.DRAW_LINES);this.showBottom(this.bottomPanels.drawLines,"Linien zeichnen");break;case netgis.Modes.DRAW_POLYGONS:this.setActiveButton(netgis.Commands.DRAW_POLYGONS);this.showBottom(this.bottomPanels.drawPolygons,"Polygone zeichnen");break;case netgis.Modes.MODIFY_FEATURES:this.setActiveButton(netgis.Commands.MODIFY_FEATURES);this.showBottom(this.bottomPanels.modifyFeatures,
+"Verschieben");break;case netgis.Modes.DELETE_FEATURES:this.setActiveButton(netgis.Commands.DELETE_FEATURES);break;case netgis.Modes.BUFFER_FEATURES:this.setActiveButton(netgis.Commands.BUFFER_FEATURES);this.showBottom(this.bottomPanels.bufferFeatures,"Puffern");break;case netgis.Modes.BUFFER_FEATURES_EDIT:this.setActiveButton(netgis.Commands.BUFFER_FEATURES);this.showBottom(this.bottomPanels.bufferFeatures,"Puffern");this.onBufferFeaturesChange();break;case netgis.Modes.CUT_FEATURES:case netgis.Modes.CUT_FEATURE_DRAW:this.setActiveButton(netgis.Commands.CUT_FEATURES)}};
+netgis.Toolbox.prototype.onTopResize=function(a){if(!this.bottom.classList.contains("netgis-hide")){a=this.top.getBoundingClientRect();var b=this.top.parentNode.getBoundingClientRect();this.bottom.style.top=a.bottom-b.top+"px"}};netgis.Toolbox.prototype.onBottomHeaderClick=function(a){netgis.util.invoke(this.panel.container,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.VIEW})};
+netgis.Toolbox.prototype.onButtonClick=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");netgis.util.invoke(a,netgis.Events.TOOLBOX_BUTTON_CLICK,{id:b});netgis.Client.handleCommand(a,b)};
+netgis.Toolbox.prototype.onDrawSnapToggle=function(a){var b=a.currentTarget,c=b.parentNode.parentNode;a=b.checked;netgis.util.invoke(b,netgis.Events.MAP_SNAP_TOGGLE,{on:a});b=[];c===this.bottomPanels.drawPoints&&(b.push(this.bottomPanels.drawLines),b.push(this.bottomPanels.drawPolygons),b.push(this.bottomPanels.modifyFeatures));c===this.bottomPanels.drawLines&&(b.push(this.bottomPanels.drawPoints),b.push(this.bottomPanels.drawPolygons),b.push(this.bottomPanels.modifyFeatures));c===this.bottomPanels.drawPolygons&&
+(b.push(this.bottomPanels.drawPoints),b.push(this.bottomPanels.drawLines),b.push(this.bottomPanels.modifyFeatures));c===this.bottomPanels.modifyFeatures&&(b.push(this.bottomPanels.drawPoints),b.push(this.bottomPanels.drawLines),b.push(this.bottomPanels.drawPolygons));for(c=0;c<b.length;c++)b[c].getElementsByTagName("input")[0].checked=a};
+netgis.Toolbox.prototype.onDrawBufferToggle=function(a){a=a.currentTarget;var b=a.checked;this.showDrawBufferOptions(b);var c=this.bottomPanels.drawPoints.getElementsByTagName("input"),d=Number.parseFloat(c[2].value);c=Number.parseInt(c[3].value);netgis.util.invoke(a,netgis.Events.DRAW_BUFFER_TOGGLE,{on:b,radius:d,segments:c})};
+netgis.Toolbox.prototype.onDrawBufferChange=function(a){a=a.currentTarget.parentNode.parentNode;var b=a.getElementsByTagName("input"),c=b[1].checked,d=Number.parseFloat(b[2].value),e=Number.parseInt(b[3].value);netgis.util.invoke(this.bottomPanels.drawPoints,netgis.Events.DRAW_BUFFER_CHANGE,{on:c,radius:d,segments:e});if(a===this.bottomPanels.drawPoints)var f=this.bottomPanels.drawLines;a===this.bottomPanels.drawLines&&(f=this.bottomPanels.drawPoints);f&&(b=f.getElementsByTagName("input"),b[1].checked=
+c,b[2].value=d,b[3].value=e)};netgis.Toolbox.prototype.onBufferFeaturesChange=function(a){var b=this.bottomPanels.bufferFeatures.getElementsByTagName("input");a=Number.parseFloat(b[0].value);b=Number.parseInt(b[1].value);netgis.util.invoke(this.bottomPanels.bufferFeatures,netgis.Events.BUFFER_CHANGE,{radius:a,segments:b})};
+netgis.Toolbox.prototype.onBufferFeaturesAccept=function(a){var b=this.bottomPanels.bufferFeatures.getElementsByTagName("input");a=Number.parseFloat(b[0].value);b=Number.parseInt(b[1].value);netgis.util.invoke(this.bottomPanels.bufferFeatures,netgis.Events.BUFFER_ACCEPT,{radius:a,segments:b});netgis.util.invoke(this.bottomPanels.bufferFeatures,netgis.Events.CLIENT_SET_MODE,{mode:netgis.Modes.VIEW})};netgis=netgis||{};netgis.Tree=function(){this.initElements()};netgis.Tree.prototype.initElements=function(){var a=document.createElement("ul");a.className="netgis-tree";this.container=a};netgis.Tree.prototype.attachTo=function(a){a.appendChild(this.container)};netgis.Tree.prototype.clear=function(){this.container.innerHTML=""};
+netgis.Tree.prototype.addFolder=function(a,b,c,d,e){var f=document.createElement("li");f.className="netgis-folder";f.setAttribute("data-id",b);b=document.createElement("details");f.appendChild(b);var g=document.createElement("summary");g.className="netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";g.innerHTML="<i class='netgis-icon netgis-hide-open fas fa-folder'></i><i class='netgis-icon netgis-show-open fas fa-folder-open'></i><span>"+c+"</span>";b.appendChild(g);c=document.createElement("label");
+g.appendChild(c);g=document.createElement("input");g.setAttribute("type","checkbox");g.onchange=this.onFolderChange.bind(this);c.appendChild(g);!0===e&&f.classList.add("netgis-nocheck");e=document.createElement("ul");b.appendChild(e);a=a?a.getElementsByTagName("ul")[0]:this.container;d?a.insertBefore(f,a.firstChild):a.appendChild(f);return f};
+netgis.Tree.prototype.addCheckbox=function(a,b,c,d,e,f){var g=document.createElement("li");g.className="netgis-item";var h=document.createElement("label");h.className="netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";h.innerHTML="<span>"+c+"</span>";g.appendChild(h);c=document.createElement("input");c.setAttribute("type","checkbox");c.setAttribute("data-id",b);d&&(c.checked=d);c.onchange=this.onItemChange.bind(this);h.insertBefore(c,h.firstChild);f&&this.addItemDetails(g,
+b,f);a=a?a.getElementsByTagName("ul")[0]:this.container;e?a.insertBefore(g,a.firstChild):a.appendChild(g);return g};
+netgis.Tree.prototype.addRadioButton=function(a,b,c,d,e){var f=document.createElement("li");f.className="netgis-item";var g=document.createElement("label");g.className="netgis-button netgis-noselect netgis-clip-text netgis-color-e netgis-hover-d";g.innerHTML="<span>"+c+"</span>";f.appendChild(g);c=a?"radio-"+a.getAttribute("data-id"):"radio-noname";var h=document.createElement("input");h.setAttribute("type","radio");h.setAttribute("name",c);h.setAttribute("value","radio-"+b);h.setAttribute("data-id",
+b);d&&(h.checked=d);h.onchange=this.onItemChange.bind(this);g.insertBefore(h,g.firstChild);e&&this.addItemDetails(f,b,e);a?a.getElementsByTagName("ul")[0].appendChild(f):this.container.appendChild(f);return f};
+netgis.Tree.prototype.addButton=function(a,b,c,d){var e=document.createElement("li"),f=document.createElement("button");f.innerHTML=c;f.className="netgis-button netgis-color-e netgis-hover-d netgis-clip-text";f.setAttribute("type","button");e.appendChild(f);b&&f.setAttribute("data-id",b);d&&(f.onclick=d);f.addEventListener("click",this.onButtonClick.bind(this));a?a.getElementsByTagName("ul")[0].appendChild(e):this.container.appendChild(e);return e};
+netgis.Tree.prototype.addSpace=function(a){var b=document.createElement("li");b.className="netgis-space";a?a.getElementsByTagName("ul")[0].appendChild(b):this.container.appendChild(b);return b};
+netgis.Tree.prototype.addItemDetails=function(a,b,c){var d=document.createElement("details");d.className="netgis-noselect";var e=document.createElement("summary");e.className="netgis-clickable netgis-hover-d";e.innerHTML="<i class='fas fa-angle-down'></i>";d.appendChild(e);e=document.createElement("div");d.appendChild(e);for(var f=0;f<c.length;f++){var g=c[f],h=document.createElement("label");e.className="netgis-hover-d";switch(g.type){case "slider":var k=document.createElement("span");k.className=
+"netgis-clip-text";k.innerHTML=g.title;h.appendChild(k);k=document.createElement("span");h.appendChild(k);var l=document.createElement("input");l.setAttribute("type","range");l.setAttribute("min",0);l.setAttribute("max",100);l.setAttribute("step",1);l.setAttribute("value",g.val);l.setAttribute("data-id",b);l.addEventListener("change",this.onItemSliderChange.bind(this));l.addEventListener("input",this.onItemSliderChange.bind(this));k.appendChild(l)}e.appendChild(h)}a.appendChild(d)};
+netgis.Tree.prototype.getFolder=function(a){for(var b=this.container.getElementsByClassName("netgis-folder"),c=0;c<b.length;c++){var d=b[c];if(d.getAttribute("data-id")===a)return d}return null};netgis.Tree.prototype.getItem=function(a){for(var b=this.container.getElementsByTagName("input"),c=0;c<b.length;c++){var d=b[c];if(d.getAttribute("data-id")===a)return d}return null};
+netgis.Tree.prototype.setFolderOpen=function(a,b){var c=this.container.getElementsByClassName("netgis-folder");a=a.toString();for(var d=0;d<c.length;d++){var e=c[d],f=e.getElementsByTagName("details")[0];e.getAttribute("data-id")===a&&(!0===b?f.setAttribute("open",""):f.removeAttribute("open"))}};
+netgis.Tree.prototype.setItemChecked=function(a,b,c){var d=this.container.getElementsByClassName("netgis-item");a=a.toString();for(var e=0;e<d.length;e++){var f=d[e],g=f.getElementsByTagName("input")[0];if(g.getAttribute("data-id")===a){if("radio"===g.getAttribute("type")){f=f.parentNode.getElementsByTagName("input");for(var h=0;h<f.length;h++){var k=f[h];k!==g&&"radio"===k.getAttribute("type")&&!1!==k.checked&&(k.checked=!1,netgis.util.invoke(g,netgis.Events.TREE_ITEM_CHANGE,{id:k.getAttribute("data-id"),
+checked:!1}))}}c?g.checked=b:g.checked!==b&&g.click()}}};netgis.Tree.prototype.setFolderParent=function(a,b){var c=a.parentNode;c&&c.removeChild(a);null!==b?b.getElementsByTagName("ul")[0].appendChild(a):this.container.appendChild(a)};netgis.Tree.prototype.updateFolderChecks=function(){for(var a=this.container.getElementsByClassName("netgis-folder"),b=0;b<a.length;b++)this.updateFolderCheck(a[b])};
+netgis.Tree.prototype.updateFolderCheck=function(a){a||(a=this.container);for(var b=a.getElementsByClassName("netgis-item"),c=0,d=0;d<b.length;d++){var e=b[d].getElementsByTagName("input")[0];e.checked&&c++}e=a.getElementsByTagName("input")[0];d=0;0<c&&(d=1);c===b.length&&(d=2);switch(d){case 0:e.checked=!1;e.classList.remove("netgis-partial");break;case 1:e.checked=!0;e.classList.add("netgis-partial");break;case 2:e.checked=!0,e.classList.remove("netgis-partial")}(a=a.parentElement)&&a!==this.container&&
+(a=a.parentElement.parentElement)&&-1!==a.className.search("netgis-folder")&&this.updateFolderCheck(a)};netgis.Tree.prototype.onFolderChange=function(a){var b=a.currentTarget;a=b.checked;b=b.parentElement.parentElement.parentElement.parentElement;for(var c=b.getElementsByTagName("input"),d=1;d<c.length;d++){var e=c[d];e.checked!==a&&e.click()}this.updateFolderCheck(b);a=b.parentElement.parentElement.parentElement;-1!==a.className.search("netgis-folder")&&this.updateFolderCheck(a)};
+netgis.Tree.prototype.onItemChange=function(a){a=a.currentTarget;var b=a.checked,c=a.getAttribute("data-id"),d=a.parentElement.parentElement.parentElement.parentElement.parentElement;if("radio"===a.getAttribute("type"))for(var e=a.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("input"),f=0;f<e.length;f++){var g=e[f].getAttribute("data-id");g&&g!==c&&netgis.util.invoke(a,netgis.Events.TREE_ITEM_CHANGE,{id:g,checked:!1})}netgis.util.invoke(a,netgis.Events.TREE_ITEM_CHANGE,{id:c,checked:b});
+-1!==d.className.search("netgis-folder")&&this.updateFolderCheck(d)};netgis.Tree.prototype.onRadioChange=function(a){a=a.currentTarget;var b=a.checked,c=a.getAttribute("data-id"),d=Number.parseInt(c);Number.isNaN(d)||(c=d);d=a.parentElement.parentElement.parentElement.parentElement.parentElement;netgis.util.invoke(a,netgis.Events.TREE_ITEM_CHANGE,{id:c,checked:b});-1!==d.className.search("netgis-folder")&&this.updateFolderCheck(d)};
+netgis.Tree.prototype.onButtonClick=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");netgis.util.invoke(a,netgis.Events.TREE_BUTTON_CLICK,{id:b})};netgis.Tree.prototype.onItemSliderChange=function(a){a=a.currentTarget;var b=a.getAttribute("data-id");netgis.util.invoke(a,netgis.Events.TREE_ITEM_SLIDER_CHANGE,{id:b,val:Number.parseFloat(a.value)})};netgis=netgis||{};
+netgis.util=function(){var a=function(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])},b=function(){return navigator.language||"de-DE"};return{isDefined:function(a){return"undefined"!==typeof a},isObject:function(a){return"object"!==typeof a||Array.isArray(a)||null===a?!1:!0},isString:function(a){return"string"===typeof a||a instanceof String},isMobile:function(a){return a?600>a.getBoundingClientRect().width:600>document.body.getBoundingClientRect().width},clone:function(a){return JSON.parse(JSON.stringify(a))},stringToID:function(a,
+b){b||(b="-");a=a.trim();a=a.toLowerCase();a=this.replace(a," ",b);a=this.replace(a,"\n",b);a=this.replace(a,"\t",b);a=this.replace(a,"\\.",b);a=this.replace(a,"\\,",b);a=this.replace(a,"\\!",b);a=this.replace(a,"\\?",b);a=this.replace(a,":",b);a=this.replace(a,";",b);a=this.replace(a,'"',b);a=this.replace(a,"'",b);a=this.replace(a,"\\\u00a7",b);a=this.replace(a,"\\$",b);a=this.replace(a,"\\%",b);a=this.replace(a,"\\&",b);a=this.replace(a,"\\/",b);a=this.replace(a,"\\\\",b);a=this.replace(a,"\\(",
+b);a=this.replace(a,"\\)",b);a=this.replace(a,"\\{",b);a=this.replace(a,"\\}",b);a=this.replace(a,"\\[",b);a=this.replace(a,"\\]",b);a=this.replace(a,"=",b);a=this.replace(a,"\\+",b);a=this.replace(a,"\\*",b);a=this.replace(a,"\\~",b);a=this.replace(a,"\\^",b);a=this.replace(a,"\\\u00b0",b);a=this.replace(a,"\u00b2",b);a=this.replace(a,"\u00b3",b);a=this.replace(a,"\\#",b);a=this.replace(a,"\\<",b);a=this.replace(a,"\\>",b);a=this.replace(a,"\\|",b);a=this.replace(a,"\\@",b);a=this.replace(a,"\u20ac",
+b);a=this.replace(a,"\u00b5",b);a=this.trim(a,b);a=this.replace(a,"\u00e4","ae");a=this.replace(a,"\u00f6","oe");a=this.replace(a,"\u00fc","ue");a=this.replace(a,"\u00df","ss");a=this.replace(a,"\u00e1","a");a=this.replace(a,"\u00e0","a");a=this.replace(a,"\u00e2","a");a=this.replace(a,"\u00e9","e");a=this.replace(a,"\u00e8","e");a=this.replace(a,"\u00ea","e");a=this.replace(a,"\u00ed","i");a=this.replace(a,"\u00ec","i");a=this.replace(a,"\u00ee","i");a=this.replace(a,"\u00f3","o");a=this.replace(a,
+"\u00f2","o");a=this.replace(a,"\u00f4","o");a=this.replace(a,"\u00fa","u");a=this.replace(a,"\u00f9","u");return a=this.replace(a,"\u00fb","u")},replace:function(a,b,e){return a.replace(new RegExp(b,"g"),e)},trim:function(a,b){a=a.replace(new RegExp("^"+b+"+"),"");return a=a.replace(new RegExp(b+"+$"),"")},foreach:a,template:function(b,d){a(d,function(a,c){b=b.replace(new RegExp("{"+a+"}","g"),c)});return b},newlines:function(a){return a.replace(/\n/g,"<br />")},create:function(a){var b=document.createElement("tbody");
+b.innerHTML=a;return b.children[0]},size:function(a){a=(new TextEncoder).encode(JSON.stringify(a)).length;var b=a/1024;return{bytes:a,kilobytes:b,megabytes:b/1024}},request:function(a,b,e){var c=new XMLHttpRequest;e&&(c._requestData=e);c.onload=function(){b(this.responseText,this._requestData,this)};c.withCredentials=!1;c.open("GET",a,!0);c.send();return c},downloadJSON:function(a,b){a="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(a));var c=document.createElement("a");c.setAttribute("href",
+a);c.setAttribute("download",b);document.body.appendChild(c);c.click();c.remove()},padstr:function(a,b){for(a=a.toString();a.length<b;)a="0"+a;return a},merge:function(a,b){return Object.assign(a,b)},getTimeStamp:function(a){var b=new Date;if(!0===a){a=b.getFullYear();var c=b.getMonth()+1,f=b.getDate(),g=b.getHours(),h=b.getMinutes();b=b.getSeconds();10>c&&(c="0"+c);10>f&&(f="0"+f);10>g&&(g="0"+g);10>h&&(h="0"+h);10>b&&(b="0"+b);a=[a,c,f,"_",g,h,b].join("")}else a=b.getDate()+"."+(b.getMonth()+1)+
+"."+b.getFullYear(),a+=" "+b.getHours()+":"+b.getMinutes();return a},getUserLanguage:b,getFileExtension:function(a){a=a.split(".");return 1>=a.length?"":a[a.length-1]},formatDistance:function(a){return 100<a?Math.round(a/1E3*100)/100+" km":Math.round(100*a)/100+" m"},formatLength:function(a,b){var c=1E3<a;a=c?b?Math.round(a/1E3*1E3)/1E3:Math.round(a/1E3):b?Math.round(100*a)/100:Math.round(a);0===a&&(c=!1);return a+(c?" km":" m")},formatArea:function(a,d,e,f){a=(e=a>(e||1E5))?d?Math.round(a/1E6*1E3)/
+1E3:Math.round(a/1E6):d?Math.round(100*a)/100:Math.round(a);0===a&&(e=!1);a=a.toLocaleString(b());return a+(e?" km\u00b2":" m\u00b2")},invoke:function(a,b,e){a.dispatchEvent(new CustomEvent(b,{bubbles:!0,detail:e}))},handler:function(a,b){return function(c){b||(b=c);netgis.util.invoke(this,a,b)}}}}();netgis=netgis||{};netgis.WMC=function(){};netgis.WMC.prototype.requestContext=function(a,b){this.callback=b;netgis.util.request(a,this.onContextResponse.bind(this))};netgis.WMC.prototype.onContextResponse=function(a){a=JSON.parse(a);this.fromJSON(a)};netgis.WMC.prototype.requestLayers=function(a){a="./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_callMetadata.php?languageCode=de&resultTarget=web&maxResults=40&resourceIds="+a.join(",");netgis.util.request(a,this.onLayersResponse.bind(this))};
+netgis.WMC.prototype.onLayersResponse=function(a){a=JSON.parse(a).wms.srv;this.services=[];for(var b=0;b<a.length;b++){var c=a[b],d={id:c.id,title:c.title,url:c.getMapUrl};d.layers=this.parseLayers(c.layer);this.services.push(d)}var e=this.layers;this.services.sort(function(a,b){a=Number.parseInt(a.layers[0].id);b=Number.parseInt(b.layers[0].id);for(var c=null,d=null,f=0;f<e.length;f++)e[f].id===a&&(c=f),e[f].id===b&&(d=f);return c<d?-1:c>d?1:0});this.callback&&this.callback({config:this.toConfig()})};
+netgis.WMC.prototype.parseLayers=function(a){var b=[];if(a)for(var c=0;c<a.length;c++){var d=a[c],e={id:d.id,title:d.title,name:d.name,legendURL:d.getLegendGraphicUrl,legendFormat:d.getLegendGraphicUrlFormat,queryable:d.layerQueryable|d.queryable,bbox:d.bbox};e.layers=this.parseLayers(d.layer);b.push(e)}this.sortLayers(b);return b};
+netgis.WMC.prototype.sortLayers=function(a){var b=this.layers;a.sort(function(a,d){var c=null,f=null;a=Number.parseInt(a.id);d=Number.parseInt(d.id);for(var g=0;g<b.length;g++)b[g].id===a&&(c=b[g].pos),b[g].id===d&&(f=b[g].pos);return c<f?1:c>f?-1:0})};
+netgis.WMC.prototype.fromJSON=function(a){var b=a.wmc;this.id=b.id;this.title=b.title;this.crs=b.crs;var c=b.bbox;c=c.split(",");for(b=0;b<c.length;b++)c[b]=Number.parseFloat(c[b]);this.bbox=c;this.layers=[];c=[];a=a.layerList;for(b=0;b<a.length;b++){var d=a[b];this.layers.push({id:d.layerId,active:d.active,opacity:d.opacity,pos:d.layerPos});c.push(d.layerId)}this.requestLayers(c)};
+netgis.WMC.prototype.toConfig=function(){for(var a={map:{attribution:this.title+", GeoPortal RLP",projection:this.crs,bbox:this.bbox}},b=[],c=[],d=this.layers.length,e=0;e<this.services.length;e++){var f=this.services[e],g=f.layers[0],h={id:g.id,title:g.title,parent:-1};b.unshift(h);h=h.id;for(var k=0;k<g.layers.length;k++){for(var l=g.layers[k],m=null,n=0;n<this.layers.length;n++)if(this.layers[n].id===Number.parseInt(l.id)){m=this.layers[n];break}c.push({id:l.id,title:l.title,folder:h,active:m.active,
+type:"WMS",url:f.url,name:l.name,order:d});--d}}a.folders=b;a.layers=c;return a};netgis=netgis||{};netgis.WMC=function(){};netgis.WMC.prototype.requestContext=function(a,b){this.callback=b;netgis.util.request(a,this.onContextResponse.bind(this))};netgis.WMC.prototype.onContextResponse=function(a){a=JSON.parse(a);console.info("Context Response:",a);this.fromJSON(a)};
+netgis.WMC.prototype.requestLayers=function(a){a="./proxy.php?https://www.geoportal.rlp.de/mapbender/php/mod_callMetadata.php?languageCode=de&resultTarget=web&maxResults=40&resourceIds="+a.join(",");netgis.util.request(a,this.onLayersResponse.bind(this))};
+netgis.WMC.prototype.onLayersResponse=function(a){a=JSON.parse(a);console.info("Layers Response:",a);a=a.wms.srv;this.services=[];for(var b=0;b<a.length;b++){var c=a[b],d={id:c.id,title:c.title,url:c.getMapUrl};d.layers=this.parseLayers(c.layer);this.services.push(d)}var e=this.layers;this.services.sort(function(a,b){a=Number.parseInt(a.layers[0].id);b=Number.parseInt(b.layers[0].id);for(var c=null,d=null,f=0;f<e.length;f++)e[f].id===a&&(c=f),e[f].id===b&&(d=f);return c<d?-1:c>d?1:0});this.callback&&
+this.callback({config:this.toConfig()})};netgis.WMC.prototype.parseLayers=function(a){var b=[];if(a)for(var c=0;c<a.length;c++){var d=a[c],e={id:d.id,title:d.title,name:d.name,legendURL:d.getLegendGraphicUrl,legendFormat:d.getLegendGraphicUrlFormat,queryable:d.layerQueryable|d.queryable,bbox:d.bbox};e.layers=this.parseLayers(d.layer);b.push(e)}this.sortLayers(b);return b};
+netgis.WMC.prototype.sortLayers=function(a){var b=this.layers;a.sort(function(a,d){var c=null,f=null;a=Number.parseInt(a.id);d=Number.parseInt(d.id);for(var g=0;g<b.length;g++)b[g].id===a&&(c=b[g].pos),b[g].id===d&&(f=b[g].pos);return c<f?1:c>f?-1:0})};
+netgis.WMC.prototype.fromJSON=function(a){var b=a.wmc;this.id=b.id;this.title=b.title;this.crs=b.crs;var c=b.bbox;c=c.split(",");for(b=0;b<c.length;b++)c[b]=Number.parseFloat(c[b]);this.bbox=c;this.layers=[];c=[];a=a.layerList;for(b=0;b<a.length;b++){var d=a[b];this.layers.push({id:d.layerId,active:d.active,opacity:d.opacity,pos:d.layerPos});c.push(d.layerId)}this.requestLayers(c);console.info("WMC Layers:",this.layers)};
+netgis.WMC.prototype.toConfig=function(){for(var a={title:"<b>GeoPortal</b>",modules:{search_parcel:!1},map:{attribution:this.title+", GeoPortal RLP",projection:this.crs,bbox:this.bbox,scalebar:!0},search:{url:"./proxy.php?https://www.geoportal.rlp.de/mapbender/geoportal/gaz_geom_mobile.php?outputFormat=json&resultTarget=web&searchEPSG={epsg}&maxResults=5&maxRows=5&featureClass=P&style=full&searchText={q}&name_startsWith={q}"}},b=[],c=[],d=this.layers.length,e=0;e<this.services.length;e++){var f=
+this.services[e],g=f.layers[0];b.push({id:g.id,title:g.title,parent:-1});for(var h=b.length-1,k=0;k<g.layers.length;k++){for(var l=g.layers[k],m=null,n=0;n<this.layers.length;n++)if(this.layers[n].id===Number.parseInt(l.id)){m=this.layers[n];break}c.push({id:l.id,title:l.title,folder:h,active:m.active,type:"WMS",url:f.url,name:l.name,order:d});--d}}a.folders=b;a.layers=c;return a};
diff --git a/templates/map/client/index.html b/templates/map/client/index.html
index 6190cc32..56d10d72 100644
--- a/templates/map/client/index.html
+++ b/templates/map/client/index.html
@@ -24,7 +24,7 @@
 			  style="position: relative; width: 100%; height: 100%;">
 		</main>
 
-		<input type="hidden" id="netgis-storage" name="output" value="{{geom_form.fields.geom.initial}}"/>
+		<input type="hidden" id="netgis-storage" name="output" value="{{geom_form.fields.output.initial}}"/>
 
 		<script type="text/javascript">