| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  | import {FixedUiElement} from "./UI/Base/FixedUiElement"; | 
					
						
							| 
									
										
										
										
											2021-06-10 01:36:20 +02:00
										 |  |  | import Toggle from "./UI/Input/Toggle"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import {Basemap} from "./UI/BigComponents/Basemap"; | 
					
						
							| 
									
										
										
										
											2020-10-02 19:00:24 +02:00
										 |  |  | import State from "./State"; | 
					
						
							| 
									
										
										
										
											2021-05-14 02:25:30 +02:00
										 |  |  | import LoadFromOverpass from "./Logic/Actors/OverpassFeatureSource"; | 
					
						
							| 
									
										
										
										
											2020-08-17 17:23:15 +02:00
										 |  |  | import {UIEventSource} from "./Logic/UIEventSource"; | 
					
						
							|  |  |  | import {QueryParameters} from "./Logic/Web/QueryParameters"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import StrayClickHandler from "./Logic/Actors/StrayClickHandler"; | 
					
						
							|  |  |  | import SimpleAddUI from "./UI/BigComponents/SimpleAddUI"; | 
					
						
							|  |  |  | import CenterMessageBox from "./UI/CenterMessageBox"; | 
					
						
							|  |  |  | import UserBadge from "./UI/BigComponents/UserBadge"; | 
					
						
							|  |  |  | import SearchAndGo from "./UI/BigComponents/SearchAndGo"; | 
					
						
							|  |  |  | import GeoLocationHandler from "./Logic/Actors/GeoLocationHandler"; | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  | import {LocalStorageSource} from "./Logic/Web/LocalStorageSource"; | 
					
						
							| 
									
										
										
										
											2020-09-15 00:25:25 +02:00
										 |  |  | import {Utils} from "./Utils"; | 
					
						
							| 
									
										
										
										
											2020-11-06 01:58:26 +01:00
										 |  |  | import Svg from "./Svg"; | 
					
						
							|  |  |  | import Link from "./UI/Base/Link"; | 
					
						
							| 
									
										
										
										
											2020-11-11 16:23:49 +01:00
										 |  |  | import * as personal from "./assets/themes/personalLayout/personalLayout.json" | 
					
						
							|  |  |  | import LayoutConfig from "./Customizations/JSON/LayoutConfig"; | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  | import * as L from "leaflet"; | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  | import Img from "./UI/Base/Img"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import UserDetails from "./Logic/Osm/OsmConnection"; | 
					
						
							|  |  |  | import Attribution from "./UI/BigComponents/Attribution"; | 
					
						
							| 
									
										
										
										
											2021-01-03 13:50:18 +01:00
										 |  |  | import LayerResetter from "./Logic/Actors/LayerResetter"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import FullWelcomePaneWithTabs from "./UI/BigComponents/FullWelcomePaneWithTabs"; | 
					
						
							|  |  |  | import LayerControlPanel from "./UI/BigComponents/LayerControlPanel"; | 
					
						
							|  |  |  | import ShowDataLayer from "./UI/ShowDataLayer"; | 
					
						
							| 
									
										
										
										
											2021-01-06 02:09:04 +01:00
										 |  |  | import Hash from "./Logic/Web/Hash"; | 
					
						
							| 
									
										
										
										
											2021-01-15 00:29:07 +01:00
										 |  |  | import FeaturePipeline from "./Logic/FeatureSource/FeaturePipeline"; | 
					
						
							| 
									
										
										
										
											2021-02-14 19:45:02 +01:00
										 |  |  | import ScrollableFullScreen from "./UI/Base/ScrollableFullScreen"; | 
					
						
							|  |  |  | import Translations from "./UI/i18n/Translations"; | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  | import MapControlButton from "./UI/MapControlButton"; | 
					
						
							|  |  |  | import Combine from "./UI/Base/Combine"; | 
					
						
							| 
									
										
										
										
											2021-02-26 14:54:59 +01:00
										 |  |  | import SelectedFeatureHandler from "./Logic/Actors/SelectedFeatureHandler"; | 
					
						
							| 
									
										
										
										
											2021-04-04 03:22:56 +02:00
										 |  |  | import LZString from "lz-string"; | 
					
						
							|  |  |  | import {LayoutConfigJson} from "./Customizations/JSON/LayoutConfigJson"; | 
					
						
							| 
									
										
										
										
											2021-04-07 01:32:39 +02:00
										 |  |  | import AttributionPanel from "./UI/BigComponents/AttributionPanel"; | 
					
						
							| 
									
										
										
										
											2021-05-10 23:48:00 +02:00
										 |  |  | import ContributorCount from "./Logic/ContributorCount"; | 
					
						
							|  |  |  | import FeatureSource from "./Logic/FeatureSource/FeatureSource"; | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  | import AllKnownLayers from "./Customizations/AllKnownLayers"; | 
					
						
							|  |  |  | import LayerConfig from "./Customizations/JSON/LayerConfig"; | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  | import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export class InitUiElements { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-11 16:23:49 +01:00
										 |  |  |     static InitAll(layoutToUse: LayoutConfig, layoutFromBase64: string, testing: UIEventSource<string>, layoutName: string, | 
					
						
							| 
									
										
										
										
											2020-09-15 02:29:31 +02:00
										 |  |  |                    layoutDefinition: string = "") { | 
					
						
							| 
									
										
										
										
											2021-01-20 21:26:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         if (layoutToUse === undefined) { | 
					
						
							|  |  |  |             console.log("Incorrect layout") | 
					
						
							| 
									
										
										
										
											2021-01-15 01:57:46 +01:00
										 |  |  |             new FixedUiElement(`Error: incorrect layout <i>${layoutName}</i><br/><a href='https://${window.location.host}/'>Go back</a>`).AttachTo("centermessage").onClick(() => { | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |             }); | 
					
						
							|  |  |  |             throw "Incorrect layout" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-15 00:25:25 +02:00
										 |  |  |         console.log("Using layout: ", layoutToUse.id, "LayoutFromBase64 is ", layoutFromBase64); | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         State.state = new State(layoutToUse); | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-15 00:25:25 +02:00
										 |  |  |         // This 'leaks' the global state via the window object, useful for debugging
 | 
					
						
							|  |  |  |         // @ts-ignore
 | 
					
						
							|  |  |  |         window.mapcomplete_state = State.state; | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (layoutToUse.hideFromOverview) { | 
					
						
							|  |  |  |             State.state.osmConnection.GetPreference("hidden-theme-" + layoutToUse.id + "-enabled").setData("true"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (layoutFromBase64 !== "false") { | 
					
						
							| 
									
										
										
										
											2020-09-15 02:29:31 +02:00
										 |  |  |             State.state.layoutDefinition = layoutDefinition; | 
					
						
							|  |  |  |             console.log("Layout definition:", Utils.EllipsesAfter(State.state.layoutDefinition, 100)) | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |             if (testing.data !== "true") { | 
					
						
							|  |  |  |                 State.state.osmConnection.OnLoggedIn(() => { | 
					
						
							|  |  |  |                     State.state.osmConnection.GetLongPreference("installed-theme-" + layoutToUse.id).setData(State.state.layoutDefinition); | 
					
						
							|  |  |  |                 }) | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 console.warn("NOT saving custom layout to OSM as we are tesing -> probably in an iFrame") | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-01-03 13:50:18 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         function updateFavs() { | 
					
						
							| 
									
										
										
										
											2021-02-20 01:45:51 +01:00
										 |  |  |             // This is purely for the personal theme to load the layers there
 | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |             const favs = State.state.favouriteLayers.data ?? []; | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  |             const neededLayers = new Set<LayerConfig>(); | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  |             console.log("Favourites are: ", favs) | 
					
						
							| 
									
										
										
										
											2020-11-11 16:23:49 +01:00
										 |  |  |             layoutToUse.layers.splice(0, layoutToUse.layers.length); | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  |             let somethingChanged = false; | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |             for (const fav of favs) { | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 if (AllKnownLayers.sharedLayers.has(fav)) { | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  |                     const layer = AllKnownLayers.sharedLayers.get(fav) | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |                     if (!neededLayers.has(layer)) { | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  |                         neededLayers.add(layer) | 
					
						
							|  |  |  |                         somethingChanged = true; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |                 for (const layouts of State.state.installedThemes.data) { | 
					
						
							|  |  |  |                     for (const layer of layouts.layout.layers) { | 
					
						
							|  |  |  |                         if (typeof layer === "string") { | 
					
						
							|  |  |  |                             continue; | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         if (layer.id === fav) { | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |                             if (!neededLayers.has(layer)) { | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  |                                 neededLayers.add(layer) | 
					
						
							|  |  |  |                                 somethingChanged = true; | 
					
						
							|  |  |  |                             } | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |             if (somethingChanged) { | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  |                 console.log("layoutToUse.layers:", layoutToUse.layers) | 
					
						
							|  |  |  |                 State.state.layoutToUse.data.layers = Array.from(neededLayers); | 
					
						
							|  |  |  |                 State.state.layoutToUse.ping(); | 
					
						
							|  |  |  |                 State.state.layerUpdater?.ForceRefresh(); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-20 01:45:51 +01:00
										 |  |  |         if (layoutToUse.customCss !== undefined) { | 
					
						
							|  |  |  |             Utils.LoadCustomCss(layoutToUse.customCss); | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-20 01:45:51 +01:00
										 |  |  |         InitUiElements.InitBaseMap(); | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         InitUiElements.OnlyIf(State.state.featureSwitchUserbadge, () => { | 
					
						
							|  |  |  |             new UserBadge().AttachTo('userbadge'); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         InitUiElements.OnlyIf((State.state.featureSwitchSearch), () => { | 
					
						
							|  |  |  |             new SearchAndGo().AttachTo("searchbox"); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         InitUiElements.OnlyIf(State.state.featureSwitchWelcomeMessage, () => { | 
					
						
							|  |  |  |             InitUiElements.InitWelcomeMessage() | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ((window != window.top && !State.state.featureSwitchWelcomeMessage.data) || State.state.featureSwitchIframe.data) { | 
					
						
							|  |  |  |             const currentLocation = State.state.locationControl; | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |             const url = `${window.location.origin}${window.location.pathname}?z=${currentLocation.data.zoom ?? 0}&lat=${currentLocation.data.lat ?? 0}&lon=${currentLocation.data.lon ?? 0}`; | 
					
						
							|  |  |  |             new MapControlButton( | 
					
						
							|  |  |  |                 new Link(Svg.pop_out_img, url, true) | 
					
						
							|  |  |  |                     .SetClass("block w-full h-full p-1.5") | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2021-02-21 01:57:50 +01:00
										 |  |  |                 .AttachTo("messagesbox"); | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  |         State.state.osmConnection.userDetails.map((userDetails: UserDetails) => userDetails?.home) | 
					
						
							|  |  |  |             .addCallbackAndRun(home => { | 
					
						
							|  |  |  |                 if (home === undefined) { | 
					
						
							|  |  |  |                     return; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 const color = getComputedStyle(document.body).getPropertyValue("--subtle-detail-color") | 
					
						
							|  |  |  |                 const icon = L.icon({ | 
					
						
							|  |  |  |                     iconUrl: Img.AsData(Svg.home_white_bg.replace(/#ffffff/g, color)), | 
					
						
							|  |  |  |                     iconSize: [30, 30], | 
					
						
							|  |  |  |                     iconAnchor: [15, 15] | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |                 const marker = L.marker([home.lat, home.lon], {icon: icon}) | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |                 marker.addTo(State.state.leafletMap.data) | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  |             }); | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         const geolocationButton = new Toggle( | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |             new MapControlButton( | 
					
						
							|  |  |  |                 new GeoLocationHandler( | 
					
						
							|  |  |  |                     State.state.currentGPSLocation, | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |                     State.state.leafletMap, | 
					
						
							|  |  |  |                     State.state.layoutToUse | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |                 )), | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |             undefined, | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |             State.state.featureSwitchGeolocation); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const plus = new MapControlButton( | 
					
						
							|  |  |  |             Svg.plus_ui() | 
					
						
							|  |  |  |         ).onClick(() => { | 
					
						
							|  |  |  |             State.state.locationControl.data.zoom++; | 
					
						
							|  |  |  |             State.state.locationControl.ping(); | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const min = new MapControlButton( | 
					
						
							|  |  |  |             Svg.min_ui() | 
					
						
							|  |  |  |         ).onClick(() => { | 
					
						
							|  |  |  |             State.state.locationControl.data.zoom--; | 
					
						
							|  |  |  |             State.state.locationControl.ping(); | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         new Combine([plus, min, geolocationButton].map(el => el.SetClass("m-0.5 md:m-1"))) | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |             .SetClass("flex flex-col") | 
					
						
							|  |  |  |             .AttachTo("bottom-right"); | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-20 02:09:41 +01:00
										 |  |  |         if (layoutToUse.id === personal.id) { | 
					
						
							|  |  |  |             updateFavs(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-02-20 01:45:51 +01:00
										 |  |  |         InitUiElements.setupAllLayerElements(); | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-20 01:45:51 +01:00
										 |  |  |         if (layoutToUse.id === personal.id) { | 
					
						
							|  |  |  |             State.state.favouriteLayers.addCallback(updateFavs); | 
					
						
							|  |  |  |             State.state.installedThemes.addCallback(updateFavs); | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2021-02-20 01:45:51 +01:00
										 |  |  |             State.state.locationControl.ping(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-18 19:36:19 +01:00
										 |  |  |         // Reset the loading message once things are loaded
 | 
					
						
							|  |  |  |         new CenterMessageBox().AttachTo("centermessage"); | 
					
						
							| 
									
										
										
										
											2021-06-16 16:39:48 +02:00
										 |  |  |         document.getElementById("centermessage").classList.add("pointer-events-none") | 
					
						
							| 
									
										
										
										
											2021-01-20 21:26:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-06 01:33:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-17 00:37:57 +02:00
										 |  |  |     static LoadLayoutFromHash(userLayoutParam: UIEventSource<string>): [LayoutConfig, string]{ | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         try { | 
					
						
							|  |  |  |             let hash = location.hash.substr(1); | 
					
						
							|  |  |  |             const layoutFromBase64 = userLayoutParam.data; | 
					
						
							|  |  |  |             // layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             const dedicatedHashFromLocalStorage = LocalStorageSource.Get("user-layout-" + layoutFromBase64.replace(" ", "_")); | 
					
						
							|  |  |  |             if (dedicatedHashFromLocalStorage.data?.length < 10) { | 
					
						
							|  |  |  |                 dedicatedHashFromLocalStorage.setData(undefined); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             const hashFromLocalStorage = LocalStorageSource.Get("last-loaded-user-layout"); | 
					
						
							|  |  |  |             if (hash.length < 10) { | 
					
						
							|  |  |  |                 hash = dedicatedHashFromLocalStorage.data ?? hashFromLocalStorage.data; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 console.log("Saving hash to local storage") | 
					
						
							|  |  |  |                 hashFromLocalStorage.setData(hash); | 
					
						
							|  |  |  |                 dedicatedHashFromLocalStorage.setData(hash); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-25 16:01:46 +02:00
										 |  |  |             let json: {} | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  |             try { | 
					
						
							|  |  |  |                 json = JSON.parse(atob(hash)); | 
					
						
							| 
									
										
										
										
											2021-04-04 03:22:56 +02:00
										 |  |  |             } catch (e) { | 
					
						
							|  |  |  |                 // We try to decode with lz-string
 | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  |                 json = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(hash))) as LayoutConfigJson; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-04 03:22:56 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-04 03:22:56 +02:00
										 |  |  |             // @ts-ignore
 | 
					
						
							|  |  |  |             const layoutToUse = new LayoutConfig(json, false); | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |             userLayoutParam.setData(layoutToUse.id); | 
					
						
							| 
									
										
										
										
											2021-06-17 00:37:57 +02:00
										 |  |  |             return [layoutToUse, btoa(Utils.MinifyJSON(JSON.stringify(json)))]; | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |         } catch (e) { | 
					
						
							| 
									
										
										
										
											2021-03-29 14:10:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-07 02:25:45 +02:00
										 |  |  |             new FixedUiElement("Error: could not parse the custom layout:<br/> " + e).AttachTo("centermessage"); | 
					
						
							|  |  |  |             throw e; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  |     private static OnlyIf(featureSwitch: UIEventSource<boolean>, callback: () => void) { | 
					
						
							|  |  |  |         featureSwitch.addCallbackAndRun(() => { | 
					
						
							| 
									
										
										
										
											2020-07-30 00:59:08 +02:00
										 |  |  |             if (featureSwitch.data) { | 
					
						
							|  |  |  |                 callback(); | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  |     private static InitWelcomeMessage() { | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |         const isOpened = new UIEventSource<boolean>(false); | 
					
						
							|  |  |  |         const fullOptions = new FullWelcomePaneWithTabs(isOpened); | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-20 21:48:47 +01:00
										 |  |  |         // ?-Button on Desktop, opens panel with close-X.
 | 
					
						
							| 
									
										
										
										
											2021-02-21 03:51:29 +01:00
										 |  |  |         const help = new MapControlButton(Svg.help_svg()); | 
					
						
							| 
									
										
										
										
											2021-06-14 02:39:23 +02:00
										 |  |  |         help.onClick(() => isOpened.setData(true)) | 
					
						
							| 
									
										
										
										
											2021-06-10 01:36:20 +02:00
										 |  |  |         new Toggle( | 
					
						
							| 
									
										
										
										
											2021-02-14 19:45:02 +01:00
										 |  |  |             fullOptions | 
					
						
							| 
									
										
										
										
											2021-06-14 02:39:23 +02:00
										 |  |  |                 .SetClass("welcomeMessage"), | 
					
						
							| 
									
										
										
										
											2020-11-06 01:58:26 +01:00
										 |  |  |             help | 
					
						
							| 
									
										
										
										
											2021-01-24 18:33:16 +01:00
										 |  |  |             , isOpened | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  |         ).AttachTo("messagesbox"); | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |         const openedTime = new Date().getTime(); | 
					
						
							|  |  |  |         State.state.locationControl.addCallback(() => { | 
					
						
							|  |  |  |             if (new Date().getTime() - openedTime < 15 * 1000) { | 
					
						
							| 
									
										
										
										
											2020-09-12 23:15:17 +02:00
										 |  |  |                 // Don't autoclose the first 15 secs when the map is moving
 | 
					
						
							| 
									
										
										
										
											2020-07-29 18:35:46 +02:00
										 |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |             isOpened.setData(false); | 
					
						
							| 
									
										
										
										
											2020-07-29 18:35:46 +02:00
										 |  |  |         }) | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-27 01:14:16 +01:00
										 |  |  |         State.state.selectedElement.addCallbackAndRun(selected => { | 
					
						
							| 
									
										
										
										
											2021-01-08 18:02:07 +01:00
										 |  |  |             if (selected !== undefined) { | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |                 isOpened.setData(false); | 
					
						
							| 
									
										
										
										
											2021-01-04 23:36:02 +01:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  |         }) | 
					
						
							| 
									
										
										
										
											2021-03-17 14:34:52 +01:00
										 |  |  |         isOpened.setData(Hash.hash.data === undefined || Hash.hash.data === "" || Hash.hash.data == "welcome") | 
					
						
							| 
									
										
										
										
											2020-07-30 00:59:08 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-10 23:48:00 +02:00
										 |  |  |     private static InitLayerSelection(featureSource: FeatureSource) { | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const copyrightNotice = | 
					
						
							|  |  |  |             new ScrollableFullScreen( | 
					
						
							|  |  |  |                 () => Translations.t.general.attribution.attributionTitle.Clone(), | 
					
						
							| 
									
										
										
										
											2021-05-10 23:48:00 +02:00
										 |  |  |                 () => new AttributionPanel(State.state.layoutToUse, new ContributorCount(featureSource).Contributors), | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  |                 "copyright" | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  |         ; | 
					
						
							| 
									
										
										
										
											2021-06-10 01:36:20 +02:00
										 |  |  |         const copyrightButton = new Toggle( | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  |             copyrightNotice, | 
					
						
							|  |  |  |             new MapControlButton(Svg.osm_copyright_svg()), | 
					
						
							|  |  |  |             copyrightNotice.isShown | 
					
						
							| 
									
										
										
										
											2021-06-14 02:39:23 +02:00
										 |  |  |         ).ToggleOnClick() | 
					
						
							|  |  |  |             .SetClass("p-0.5") | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const layerControlPanel = new LayerControlPanel( | 
					
						
							|  |  |  |             State.state.layerControlIsOpened) | 
					
						
							|  |  |  |             .SetClass("block p-1 rounded-full"); | 
					
						
							| 
									
										
										
										
											2021-06-10 01:36:20 +02:00
										 |  |  |         const layerControlButton = new Toggle( | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  |             layerControlPanel, | 
					
						
							|  |  |  |             new MapControlButton(Svg.layers_svg()), | 
					
						
							|  |  |  |             State.state.layerControlIsOpened | 
					
						
							| 
									
										
										
										
											2021-06-14 02:39:23 +02:00
										 |  |  |         ).ToggleOnClick() | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-10 01:36:20 +02:00
										 |  |  |         const layerControl = new Toggle( | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  |             layerControlButton, | 
					
						
							|  |  |  |             "", | 
					
						
							|  |  |  |             State.state.featureSwitchLayers | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         new Combine([copyrightButton, layerControl]) | 
					
						
							|  |  |  |             .AttachTo("bottom-left"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         State.state.locationControl | 
					
						
							|  |  |  |             .addCallback(() => { | 
					
						
							|  |  |  |                 // Close the layer selection when the map is moved
 | 
					
						
							|  |  |  |                 layerControlButton.isEnabled.setData(false); | 
					
						
							|  |  |  |                 copyrightButton.isEnabled.setData(false); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         State.state.selectedElement.addCallbackAndRun(feature => { | 
					
						
							|  |  |  |             if (feature !== undefined) { | 
					
						
							|  |  |  |                 layerControlButton.isEnabled.setData(false); | 
					
						
							|  |  |  |                 copyrightButton.isEnabled.setData(false); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2020-09-13 03:29:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  |     private static InitBaseMap() { | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-03 13:50:18 +01:00
										 |  |  |         State.state.availableBackgroundLayers = new AvailableBaseLayers(State.state.locationControl).availableEditorLayers; | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         State.state.backgroundLayer = State.state.backgroundLayerId | 
					
						
							| 
									
										
										
										
											2021-01-03 13:50:18 +01:00
										 |  |  |             .map((selectedId: string) => { | 
					
						
							| 
									
										
										
										
											2021-06-23 02:15:28 +02:00
										 |  |  |                 if(selectedId === undefined){ | 
					
						
							|  |  |  |                     return AvailableBaseLayers.osmCarto | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                  | 
					
						
							|  |  |  |                  | 
					
						
							| 
									
										
										
										
											2021-01-03 13:50:18 +01:00
										 |  |  |                 const available = State.state.availableBackgroundLayers.data; | 
					
						
							|  |  |  |                 for (const layer of available) { | 
					
						
							|  |  |  |                     if (layer.id === selectedId) { | 
					
						
							|  |  |  |                         return layer; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return AvailableBaseLayers.osmCarto; | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  |             }, [State.state.availableBackgroundLayers], layer => layer.id); | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2021-01-03 13:50:18 +01:00
										 |  |  |         new LayerResetter( | 
					
						
							|  |  |  |             State.state.backgroundLayer, State.state.locationControl, | 
					
						
							|  |  |  |             State.state.availableBackgroundLayers, State.state.layoutToUse.map((layout: LayoutConfig) => layout.defaultBackgroundId)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 22:14:56 +01:00
										 |  |  |         const attr = new Attribution(State.state.locationControl, State.state.osmConnection.userDetails, State.state.layoutToUse, | 
					
						
							| 
									
										
										
										
											2021-01-04 18:55:10 +01:00
										 |  |  |             State.state.leafletMap); | 
					
						
							| 
									
										
										
										
											2021-03-14 20:14:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         const bm = new Basemap("leafletDiv", | 
					
						
							|  |  |  |             State.state.locationControl, | 
					
						
							| 
									
										
										
										
											2021-01-02 19:09:49 +01:00
										 |  |  |             State.state.backgroundLayer, | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |             State.state.LastClickLocation, | 
					
						
							|  |  |  |             attr | 
					
						
							| 
									
										
										
										
											2021-01-02 19:09:49 +01:00
										 |  |  |         ); | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         State.state.leafletMap.setData(bm.map); | 
					
						
							| 
									
										
										
										
											2021-03-14 20:14:51 +01:00
										 |  |  |         const layout = State.state.layoutToUse.data | 
					
						
							|  |  |  |         if (layout.lockLocation) { | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if (layout.lockLocation === true) { | 
					
						
							|  |  |  |                 const tile = Utils.embedded_tile(layout.startLat, layout.startLon, layout.startZoom - 1) | 
					
						
							|  |  |  |                 const bounds = Utils.tile_bounds(tile.z, tile.x, tile.y) | 
					
						
							|  |  |  |                 // We use the bounds to get a sense of distance for this zoom level
 | 
					
						
							|  |  |  |                 const latDiff = bounds[0][0] - bounds[1][0] | 
					
						
							|  |  |  |                 const lonDiff = bounds[0][1] - bounds[1][1] | 
					
						
							|  |  |  |                 layout.lockLocation = [[layout.startLat - latDiff, layout.startLon - lonDiff], | 
					
						
							| 
									
										
										
										
											2021-03-29 14:10:20 +02:00
										 |  |  |                     [layout.startLat + latDiff, layout.startLon + lonDiff], | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |                 ]; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             console.warn("Locking the bounds to ", layout.lockLocation) | 
					
						
							|  |  |  |             bm.map.setMaxBounds(layout.lockLocation); | 
					
						
							| 
									
										
										
										
											2021-03-14 20:14:51 +01:00
										 |  |  |             bm.map.setMinZoom(layout.startZoom) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 17:38:03 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-07-30 00:59:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |     private static InitLayers(): FeatureSource { | 
					
						
							| 
									
										
										
										
											2021-01-03 13:50:18 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |         const state = State.state; | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |         state.filteredLayers = | 
					
						
							| 
									
										
										
										
											2021-02-14 19:45:02 +01:00
										 |  |  |             state.layoutToUse.map(layoutToUse => { | 
					
						
							|  |  |  |                 const flayers = []; | 
					
						
							| 
									
										
										
										
											2020-09-05 15:27:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-14 19:45:02 +01:00
										 |  |  |                 for (const layer of layoutToUse.layers) { | 
					
						
							|  |  |  |                     const isDisplayed = QueryParameters.GetQueryParameter("layer-" + layer.id, "true", "Wether or not layer " + layer.id + " is shown") | 
					
						
							|  |  |  |                         .map<boolean>((str) => str !== "false", [], (b) => b.toString()); | 
					
						
							|  |  |  |                     const flayer = { | 
					
						
							|  |  |  |                         isDisplayed: isDisplayed, | 
					
						
							|  |  |  |                         layerDef: layer | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     flayers.push(flayer); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return flayers; | 
					
						
							|  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |         const updater = new LoadFromOverpass(state.locationControl, state.layoutToUse, state.leafletMap); | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  |         State.state.layerUpdater = updater; | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const source = new FeaturePipeline(state.filteredLayers, | 
					
						
							|  |  |  |             updater, | 
					
						
							|  |  |  |             state.osmApiFeatureSource, | 
					
						
							|  |  |  |             state.layoutToUse, | 
					
						
							| 
									
										
										
										
											2021-05-06 01:33:09 +02:00
										 |  |  |             state.changes, | 
					
						
							|  |  |  |             state.locationControl, | 
					
						
							|  |  |  |             state.selectedElement); | 
					
						
							| 
									
										
										
										
											2021-01-04 22:14:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-29 14:10:20 +02:00
										 |  |  |         new ShowDataLayer(source.features, State.state.leafletMap, State.state.layoutToUse); | 
					
						
							| 
									
										
										
										
											2021-02-14 19:45:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-06 01:33:09 +02:00
										 |  |  |         const selectedFeatureHandler = new SelectedFeatureHandler(Hash.hash, State.state.selectedElement, source, State.state.osmApiFeatureSource); | 
					
						
							|  |  |  |         selectedFeatureHandler.zoomToSelectedFeature(State.state.locationControl); | 
					
						
							| 
									
										
										
										
											2021-05-10 23:48:00 +02:00
										 |  |  |         return source; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |     private static setupAllLayerElements() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // ------------- Setup the layers -------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |         const source = InitUiElements.InitLayers(); | 
					
						
							| 
									
										
										
										
											2021-05-10 23:48:00 +02:00
										 |  |  |         InitUiElements.InitLayerSelection(source); | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // ------------------ Setup various other UI elements ------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         InitUiElements.OnlyIf(State.state.featureSwitchAddNew, () => { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             let presetCount = 0; | 
					
						
							|  |  |  |             for (const layer of State.state.filteredLayers.data) { | 
					
						
							|  |  |  |                 for (const preset of layer.layerDef.presets) { | 
					
						
							|  |  |  |                     presetCount++; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if (presetCount == 0) { | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-08 22:32:15 +02:00
										 |  |  |             const newPointDialogIsShown = new UIEventSource<boolean>(false); | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |             const addNewPoint = new ScrollableFullScreen( | 
					
						
							|  |  |  |                 () => Translations.t.general.add.title.Clone(), | 
					
						
							| 
									
										
										
										
											2021-04-08 22:32:15 +02:00
										 |  |  |                 () => new SimpleAddUI(newPointDialogIsShown), | 
					
						
							|  |  |  |                 "new", | 
					
						
							|  |  |  |                 newPointDialogIsShown) | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |             addNewPoint.isShown.addCallback(isShown => { | 
					
						
							|  |  |  |                 if (!isShown) { | 
					
						
							|  |  |  |                     State.state.LastClickLocation.setData(undefined) | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |             new StrayClickHandler( | 
					
						
							|  |  |  |                 State.state.LastClickLocation, | 
					
						
							|  |  |  |                 State.state.selectedElement, | 
					
						
							|  |  |  |                 State.state.filteredLayers, | 
					
						
							|  |  |  |                 State.state.leafletMap, | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |                 addNewPoint | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |             ); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-03 16:04:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  | } |