| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  | import {InputElement} from "./InputElement"; | 
					
						
							|  |  |  | import Loc from "../../Models/Loc"; | 
					
						
							|  |  |  | import {UIEventSource} from "../../Logic/UIEventSource"; | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  | import Minimap, {MinimapObj} from "../Base/Minimap"; | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  | import BaseLayer from "../../Models/BaseLayer"; | 
					
						
							|  |  |  | import Combine from "../Base/Combine"; | 
					
						
							|  |  |  | import Svg from "../../Svg"; | 
					
						
							| 
									
										
										
										
											2021-07-14 16:05:50 +02:00
										 |  |  | import State from "../../State"; | 
					
						
							| 
									
										
										
										
											2021-09-28 17:30:48 +02:00
										 |  |  | import {GeoOperations} from "../../Logic/GeoOperations"; | 
					
						
							| 
									
										
										
										
											2021-09-21 02:10:42 +02:00
										 |  |  | import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer"; | 
					
						
							|  |  |  | import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"; | 
					
						
							|  |  |  | import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; | 
					
						
							| 
									
										
										
										
											2021-09-28 17:30:48 +02:00
										 |  |  | import {BBox} from "../../Logic/BBox"; | 
					
						
							| 
									
										
										
										
											2021-09-29 19:48:36 +02:00
										 |  |  | import {FixedUiElement} from "../Base/FixedUiElement"; | 
					
						
							| 
									
										
										
										
											2021-09-29 19:49:42 +02:00
										 |  |  | import ShowDataLayer from "../ShowDataLayer/ShowDataLayer"; | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  | import BaseUIElement from "../BaseUIElement"; | 
					
						
							| 
									
										
										
										
											2021-10-14 03:46:09 +02:00
										 |  |  | import Toggle from "./Toggle"; | 
					
						
							| 
									
										
										
										
											2021-12-22 01:08:11 +01:00
										 |  |  | import * as matchpoint from "../../assets/layers/matchpoint/matchpoint.json" | 
					
						
							| 
									
										
										
										
											2022-01-18 18:52:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  | export default class LocationInput extends InputElement<Loc> implements MinimapObj { | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-22 01:08:11 +01:00
										 |  |  |     private static readonly matchLayer = new LayerConfig(matchpoint, "LocationInput.matchpoint", true) | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |     IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false); | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |     public readonly snappedOnto: UIEventSource<any> = new UIEventSource<any>(undefined) | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |     public readonly _matching_layer: LayerConfig; | 
					
						
							|  |  |  |     public readonly leafletMap: UIEventSource<any> | 
					
						
							| 
									
										
										
										
											2022-01-26 21:40:38 +01:00
										 |  |  |     public readonly bounds; | 
					
						
							|  |  |  |     public readonly location; | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |     private _centerLocation: UIEventSource<Loc>; | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |     private readonly mapBackground: UIEventSource<BaseLayer>; | 
					
						
							| 
									
										
										
										
											2021-09-21 02:10:42 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * The features to which the input should be snapped | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |     private readonly _snapTo: UIEventSource<{ feature: any }[]> | 
					
						
							|  |  |  |     private readonly _value: UIEventSource<Loc> | 
					
						
							|  |  |  |     private readonly _snappedPoint: UIEventSource<any> | 
					
						
							|  |  |  |     private readonly _maxSnapDistance: number | 
					
						
							|  |  |  |     private readonly _snappedPointTags: any; | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |     private readonly _bounds: UIEventSource<BBox>; | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  |     private readonly map: BaseUIElement & MinimapObj; | 
					
						
							|  |  |  |     private readonly clickLocation: UIEventSource<Loc>; | 
					
						
							| 
									
										
										
										
											2021-10-13 03:09:37 +02:00
										 |  |  |     private readonly _minZoom: number; | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |     constructor(options: { | 
					
						
							| 
									
										
										
										
											2021-10-13 03:09:37 +02:00
										 |  |  |         minZoom?: number, | 
					
						
							| 
									
										
										
										
											2021-07-14 16:05:50 +02:00
										 |  |  |         mapBackground?: UIEventSource<BaseLayer>, | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |         snapTo?: UIEventSource<{ feature: any }[]>, | 
					
						
							|  |  |  |         maxSnapDistance?: number, | 
					
						
							|  |  |  |         snappedPointTags?: any, | 
					
						
							|  |  |  |         requiresSnapping?: boolean, | 
					
						
							|  |  |  |         centerLocation: UIEventSource<Loc>, | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |         bounds?: UIEventSource<BBox> | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |     }) { | 
					
						
							|  |  |  |         super(); | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |         this._snapTo = options.snapTo?.map(features => features?.filter(feat => feat.feature.geometry.type !== "Point")) | 
					
						
							|  |  |  |         this._maxSnapDistance = options.maxSnapDistance | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |         this._centerLocation = options.centerLocation; | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |         this._snappedPointTags = options.snappedPointTags | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |         this._bounds = options.bounds; | 
					
						
							| 
									
										
										
										
											2021-10-13 03:09:37 +02:00
										 |  |  |         this._minZoom = options.minZoom | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |         if (this._snapTo === undefined) { | 
					
						
							|  |  |  |             this._value = this._centerLocation; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             const self = this; | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |             if (self._snappedPointTags !== undefined) { | 
					
						
							| 
									
										
										
										
											2021-09-28 18:00:44 +02:00
										 |  |  |                 const layout = State.state.layoutToUse | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-28 18:00:44 +02:00
										 |  |  |                 let matchingLayer = LocationInput.matchLayer | 
					
						
							|  |  |  |                 for (const layer of layout.layers) { | 
					
						
							|  |  |  |                     if (layer.source.osmTags.matchesProperties(self._snappedPointTags)) { | 
					
						
							|  |  |  |                         matchingLayer = layer | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-09-28 18:00:44 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |                 this._matching_layer = matchingLayer; | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |                 this._matching_layer = LocationInput.matchLayer | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             this._snappedPoint = options.centerLocation.map(loc => { | 
					
						
							|  |  |  |                 if (loc === undefined) { | 
					
						
							|  |  |  |                     return undefined; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 // We reproject the location onto every 'snap-to-feature' and select the closest
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 let min = undefined; | 
					
						
							|  |  |  |                 let matchedWay = undefined; | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |                 for (const feature of self._snapTo.data ?? []) { | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  |                     try { | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  |                         const nearestPointOnLine = GeoOperations.nearestPoint(feature.feature, [loc.lon, loc.lat]) | 
					
						
							|  |  |  |                         if (min === undefined) { | 
					
						
							|  |  |  |                             min = nearestPointOnLine | 
					
						
							|  |  |  |                             matchedWay = feature.feature; | 
					
						
							|  |  |  |                             continue; | 
					
						
							|  |  |  |                         } | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  |                         if (min.properties.dist > nearestPointOnLine.properties.dist) { | 
					
						
							|  |  |  |                             min = nearestPointOnLine | 
					
						
							|  |  |  |                             matchedWay = feature.feature; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                     } catch (e) { | 
					
						
							|  |  |  |                         console.log("Snapping to a nearest point failed for ", feature.feature, "due to ", e) | 
					
						
							| 
									
										
										
										
											2021-10-31 02:08:39 +01:00
										 |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |                 if (min === undefined || min.properties.dist * 1000 > self._maxSnapDistance) { | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |                     if (options.requiresSnapping) { | 
					
						
							|  |  |  |                         return undefined | 
					
						
							|  |  |  |                     } else { | 
					
						
							|  |  |  |                         return { | 
					
						
							|  |  |  |                             "type": "Feature", | 
					
						
							|  |  |  |                             "properties": options.snappedPointTags ?? min.properties, | 
					
						
							|  |  |  |                             "geometry": {"type": "Point", "coordinates": [loc.lon, loc.lat]} | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 min.properties = options.snappedPointTags ?? min.properties | 
					
						
							|  |  |  |                 self.snappedOnto.setData(matchedWay) | 
					
						
							|  |  |  |                 return min | 
					
						
							|  |  |  |             }, [this._snapTo]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             this._value = this._snappedPoint.map(f => { | 
					
						
							|  |  |  |                 const [lon, lat] = f.geometry.coordinates; | 
					
						
							|  |  |  |                 return { | 
					
						
							| 
									
										
										
										
											2021-09-08 01:36:44 +02:00
										 |  |  |                     lon: lon, lat: lat, zoom: undefined | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-10-14 20:14:14 +02:00
										 |  |  |         this.mapBackground = options.mapBackground ?? State.state?.backgroundLayer | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |         this.SetClass("block h-full") | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.clickLocation = new UIEventSource<Loc>(undefined); | 
					
						
							|  |  |  |         this.map = Minimap.createMiniMap( | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 location: this._centerLocation, | 
					
						
							|  |  |  |                 background: this.mapBackground, | 
					
						
							|  |  |  |                 attribution: this.mapBackground !== State.state?.backgroundLayer, | 
					
						
							|  |  |  |                 lastClickLocation: this.clickLocation, | 
					
						
							| 
									
										
										
										
											2021-11-21 02:44:35 +01:00
										 |  |  |                 bounds: this._bounds, | 
					
						
							|  |  |  |                 addLayerControl: true | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-10-13 03:09:37 +02:00
										 |  |  |         this.leafletMap = this.map.leafletMap | 
					
						
							| 
									
										
										
										
											2022-01-19 20:34:04 +01:00
										 |  |  |         this.location = this.map.location; | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GetValue(): UIEventSource<Loc> { | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |         return this._value; | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     IsValid(t: Loc): boolean { | 
					
						
							|  |  |  |         return t !== undefined; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     installBounds(factor: number | BBox, showRange?: boolean): void { | 
					
						
							|  |  |  |         this.map.installBounds(factor, showRange) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-03 00:44:53 +01:00
										 |  |  |     TakeScreenshot(): Promise<any> { | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  |         return this.map.TakeScreenshot() | 
					
						
							| 
									
										
										
										
											2021-11-03 00:44:53 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |     protected InnerConstructElement(): HTMLElement { | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2021-10-13 03:09:37 +02:00
										 |  |  |             const self = this; | 
					
						
							| 
									
										
										
										
											2021-10-14 03:46:09 +02:00
										 |  |  |             const hasMoved = new UIEventSource(false) | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |             const startLocation = {...this._centerLocation.data} | 
					
						
							|  |  |  |             this._centerLocation.addCallbackD(newLocation => { | 
					
						
							| 
									
										
										
										
											2021-10-15 19:58:02 +02:00
										 |  |  |                 const f = 100000 | 
					
						
							|  |  |  |                 console.log(newLocation.lon, startLocation.lon) | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |                 const diff = (Math.abs(newLocation.lon * f - startLocation.lon * f) + Math.abs(newLocation.lat * f - startLocation.lat * f)) | 
					
						
							|  |  |  |                 if (diff < 1) { | 
					
						
							| 
									
										
										
										
											2021-10-15 19:58:02 +02:00
										 |  |  |                     return; | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2021-10-14 03:46:09 +02:00
										 |  |  |                 hasMoved.setData(true) | 
					
						
							|  |  |  |                 return true; | 
					
						
							|  |  |  |             }) | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  |             this.clickLocation.addCallbackAndRunD(location => this._centerLocation.setData(location)) | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |             if (this._snapTo !== undefined) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |                 // Show the lines to snap to
 | 
					
						
							| 
									
										
										
										
											2021-12-09 01:22:57 +01:00
										 |  |  |                 console.log("Constructing the snap-to layer", this._snapTo) | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |                 new ShowDataMultiLayer({ | 
					
						
							|  |  |  |                         features: new StaticFeatureSource(this._snapTo, true), | 
					
						
							| 
									
										
										
										
											2022-01-19 20:34:04 +01:00
										 |  |  |                         popup: undefined, | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |                         zoomToFeatures: false, | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  |                         leafletMap: this.map.leafletMap, | 
					
						
							| 
									
										
										
										
											2022-01-19 20:34:04 +01:00
										 |  |  |                         layers: State.state.filteredLayers | 
					
						
							| 
									
										
										
										
											2021-09-22 05:02:09 +02:00
										 |  |  |                     } | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |                 // Show the central point
 | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |                 const matchPoint = this._snappedPoint.map(loc => { | 
					
						
							|  |  |  |                     if (loc === undefined) { | 
					
						
							|  |  |  |                         return [] | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     return [{feature: loc}]; | 
					
						
							|  |  |  |                 }) | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |                 new ShowDataLayer({ | 
					
						
							|  |  |  |                     features: new StaticFeatureSource(matchPoint, true), | 
					
						
							| 
									
										
										
										
											2022-01-19 20:34:04 +01:00
										 |  |  |                     popup: undefined, | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |                     zoomToFeatures: false, | 
					
						
							|  |  |  |                     leafletMap: this.map.leafletMap, | 
					
						
							|  |  |  |                     layerToShow: this._matching_layer, | 
					
						
							| 
									
										
										
										
											2022-01-19 20:34:04 +01:00
										 |  |  |                     state: State.state, | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |                     selectedElement: State.state.selectedElement | 
					
						
							|  |  |  |                 }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |             this.mapBackground.map(layer => { | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  |                 const leaflet = this.map.leafletMap.data | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |                 if (leaflet === undefined || layer === undefined) { | 
					
						
							|  |  |  |                     return; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 leaflet.setMaxZoom(layer.max_zoom) | 
					
						
							| 
									
										
										
										
											2021-10-13 03:09:37 +02:00
										 |  |  |                 leaflet.setMinZoom(self._minZoom ?? layer.max_zoom - 2) | 
					
						
							| 
									
										
										
										
											2022-02-09 00:35:18 +01:00
										 |  |  |                 leaflet.setZoom(layer.max_zoom - 1) | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  |             }, [this.map.leafletMap]) | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-29 19:48:36 +02:00
										 |  |  |             const animatedHand = Svg.hand_ui() | 
					
						
							|  |  |  |                 .SetStyle("width: 2rem; height: unset;") | 
					
						
							|  |  |  |                 .SetClass("hand-drag-animation block pointer-events-none") | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |             return new Combine([ | 
					
						
							|  |  |  |                 new Combine([ | 
					
						
							| 
									
										
										
										
											2021-09-08 01:36:44 +02:00
										 |  |  |                     Svg.move_arrows_ui() | 
					
						
							|  |  |  |                         .SetClass("block relative pointer-events-none") | 
					
						
							|  |  |  |                         .SetStyle("left: -2.5rem; top: -2.5rem; width: 5rem; height: 5rem") | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  |                 ]).SetClass("block w-0 h-0 z-10 relative") | 
					
						
							| 
									
										
										
										
											2021-09-29 19:48:36 +02:00
										 |  |  |                     .SetStyle("background: rgba(255, 128, 128, 0.21); left: 50%; top: 50%; opacity: 0.5"), | 
					
						
							| 
									
										
										
										
											2021-10-19 03:00:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-14 03:46:09 +02:00
										 |  |  |                 new Toggle(undefined, | 
					
						
							|  |  |  |                     animatedHand, hasMoved) | 
					
						
							| 
									
										
										
										
											2021-09-29 19:48:36 +02:00
										 |  |  |                     .SetClass("block w-0 h-0 z-10 relative") | 
					
						
							|  |  |  |                     .SetStyle("left: calc(50% + 3rem); top: calc(50% + 2rem); opacity: 0.7"), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-11 00:54:35 +02:00
										 |  |  |                 this.map | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |                     .SetClass("z-0 relative block w-full h-full bg-gray-100") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ]).ConstructElement(); | 
					
						
							|  |  |  |         } catch (e) { | 
					
						
							|  |  |  |             console.error("Could not generate LocationInputElement:", e) | 
					
						
							| 
									
										
										
										
											2021-09-29 19:48:36 +02:00
										 |  |  |             return new FixedUiElement("Constructing a locationInput failed due to" + e).SetClass("alert").ConstructElement(); | 
					
						
							| 
									
										
										
										
											2021-08-07 21:19:01 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-07-14 00:17:15 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |