| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | import {UIElement} from "../UI/UIElement"; | 
					
						
							|  |  |  | import {State} from "../State"; | 
					
						
							|  |  |  | import Translations from "../UI/i18n/Translations"; | 
					
						
							| 
									
										
										
										
											2020-08-17 17:23:15 +02:00
										 |  |  | import {UIEventSource} from "./UIEventSource"; | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; | 
					
						
							|  |  |  | import Combine from "../UI/Base/Combine"; | 
					
						
							|  |  |  | import {Img} from "../UI/Img"; | 
					
						
							|  |  |  | import {CheckBox} from "../UI/Input/CheckBox"; | 
					
						
							|  |  |  | import {CustomLayersState} from "./CustomLayersState"; | 
					
						
							|  |  |  | import {VerticalCombine} from "../UI/Base/VerticalCombine"; | 
					
						
							|  |  |  | import {FixedUiElement} from "../UI/Base/FixedUiElement"; | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  | import {CustomLayout} from "./CustomLayers"; | 
					
						
							|  |  |  | import {SubtleButton} from "../UI/Base/SubtleButton"; | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export class CustomLayersPanel extends UIElement { | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |     private checkboxes: UIElement[] = []; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private updateButton : UIElement; | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     constructor() { | 
					
						
							|  |  |  |         super(State.state.favourteLayers); | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |         this.ListenTo(State.state.osmConnection.userDetails); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const t = Translations.t.favourite; | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |         const favs = State.state.favourteLayers.data; | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         this.updateButton = new SubtleButton("./assets/reload.svg", t.reload) | 
					
						
							|  |  |  |             .onClick(() => { | 
					
						
							|  |  |  |                 State.state.layerUpdater.ForceRefresh(); | 
					
						
							|  |  |  |                 CustomLayersState.InitFavouriteLayers(State.state); | 
					
						
							|  |  |  |                 State.state.layoutToUse.ping(); | 
					
						
							|  |  |  |             }) | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const controls = new Map<string, UIEventSource<boolean>>(); | 
					
						
							|  |  |  |         for (const layout of AllKnownLayouts.layoutsList) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |             if(layout.name === CustomLayout.NAME){ | 
					
						
							|  |  |  |                 continue; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-07-31 21:54:30 +02:00
										 |  |  |             if (layout.hideFromOverview &&  | 
					
						
							|  |  |  |                 State.state.osmConnection.userDetails.data.name !== "Pieter Vander Vennet") { | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |                 continue | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |              | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |             const header = | 
					
						
							|  |  |  |                 new Combine([ | 
					
						
							|  |  |  |                     `<div class="custom-layer-panel-header-img"><img src='${layout.icon}'></div>`, | 
					
						
							|  |  |  |                     "<span><b>", | 
					
						
							|  |  |  |                     layout.title, | 
					
						
							|  |  |  |                     "</b><br/>", | 
					
						
							|  |  |  |                     layout.description ?? "", | 
					
						
							|  |  |  |                     "</span>", | 
					
						
							|  |  |  |                 ], 'custom-layer-panel-header') | 
					
						
							|  |  |  |             this.checkboxes.push(header); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for (const layer of layout.layers) { | 
					
						
							|  |  |  |                 const image = (layer.icon ? `<img src='${layer.icon}'>` : Img.checkmark); | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |                 const noimage = (layer.icon ? `<img src='${layer.icon}'>` : Img.no_checkmark); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-22 14:59:52 +02:00
										 |  |  |                 let name = layer.name; | 
					
						
							|  |  |  |                 if(typeof (name) !== "string"){ | 
					
						
							|  |  |  |                     name = name.InnerRender(); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                  | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |                 const content = new Combine([ | 
					
						
							|  |  |  |                     "<span>", | 
					
						
							| 
									
										
										
										
											2020-08-22 14:59:52 +02:00
										 |  |  |                     "<b>", name ?? "", "</b> ", | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |                     layer.description !== undefined ? new Combine(["<br/>", layer.description]) : "", | 
					
						
							|  |  |  |                     "</span>"]) | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |                 const cb = new CheckBox( | 
					
						
							|  |  |  |                     new Combine([ | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |                         image, content | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |                     ]), | 
					
						
							|  |  |  |                     new Combine([ | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |                         "<span style='opacity: 0.1'>", | 
					
						
							|  |  |  |                         noimage, "</span>",  | 
					
						
							|  |  |  |                         "<del>", | 
					
						
							|  |  |  |                         content, | 
					
						
							|  |  |  |                         "</del>" | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |                     ]), | 
					
						
							|  |  |  |                     controls[layer.id] ?? (favs.indexOf(layer.id) >= 0) | 
					
						
							|  |  |  |                 ); | 
					
						
							|  |  |  |                 cb.clss = "custom-layer-checkbox" | 
					
						
							|  |  |  |                 controls[layer.id] = cb.isEnabled; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 cb.isEnabled.addCallback((isEnabled) => { | 
					
						
							|  |  |  |                     if (isEnabled) { | 
					
						
							|  |  |  |                         CustomLayersState.AddFavouriteLayer(layer.id) | 
					
						
							|  |  |  |                     } else { | 
					
						
							|  |  |  |                         CustomLayersState.RemoveFavouriteLayer(layer.id); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 this.checkboxes.push(cb); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |             State.state.favourteLayers.addCallback((layers) => { | 
					
						
							|  |  |  |                 for (const layerId of layers) { | 
					
						
							|  |  |  |                     controls[layerId]?.setData(true); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }) | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     InnerRender(): string { | 
					
						
							|  |  |  |         const t = Translations.t.favourite; | 
					
						
							|  |  |  |         const userDetails = State.state.osmConnection.userDetails.data; | 
					
						
							|  |  |  |         if(!userDetails.loggedIn){ | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |             return t.loginNeeded.Render(); | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return new Combine([ | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |             t.panelIntro, | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |             this.updateButton, | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |             ...this.checkboxes | 
					
						
							|  |  |  |         ], "custom-layer-panel").Render(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |