| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | import {UIElement} from "./UIElement"; | 
					
						
							|  |  |  | import {VerticalCombine} from "./Base/VerticalCombine"; | 
					
						
							|  |  |  | import Translations from "./i18n/Translations"; | 
					
						
							|  |  |  | import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; | 
					
						
							| 
									
										
										
										
											2020-07-29 16:46:45 +02:00
										 |  |  | import Combine from "./Base/Combine"; | 
					
						
							|  |  |  | import {SubtleButton} from "./Base/SubtleButton"; | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  | import {State} from "../State"; | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  | import {VariableUiElement} from "./Base/VariableUIElement"; | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  | import {PersonalLayout} from "../Logic/PersonalLayout"; | 
					
						
							|  |  |  | import {Layout} from "../Customizations/Layout"; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export class MoreScreen extends UIElement { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |     constructor() { | 
					
						
							|  |  |  |         super(State.state.locationControl); | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |         this.ListenTo(State.state.osmConnection.userDetails); | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  |         this.ListenTo(State.state.installedThemes); | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-05 23:44:33 +02:00
										 |  |  |     private createLinkButton(layout: Layout, customThemeDefinition: string = undefined) { | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |         if (layout === undefined) { | 
					
						
							|  |  |  |             return undefined; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-08-31 02:59:47 +02:00
										 |  |  |         if(layout.id === undefined){ | 
					
						
							|  |  |  |             console.error("ID is undefined for layout",layout); | 
					
						
							|  |  |  |             return undefined; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-08-27 18:44:16 +02:00
										 |  |  |         if (layout.hideFromOverview) { | 
					
						
							| 
									
										
										
										
											2020-09-05 23:44:33 +02:00
										 |  |  |             const pref = State.state.osmConnection.GetPreference("hidden-theme-" + layout.id + "-enabled"); | 
					
						
							|  |  |  |             this.ListenTo(pref); | 
					
						
							|  |  |  |             if (pref.data !== "true") { | 
					
						
							| 
									
										
										
										
											2020-08-27 18:44:16 +02:00
										 |  |  |                 return undefined; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |         if (layout.id === State.state.layoutToUse.data.id) { | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |             return undefined; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const currentLocation = State.state.locationControl.data; | 
					
						
							|  |  |  |         let linkText = | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |             `./${layout.id.toLowerCase()}.html?z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}` | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (location.hostname === "localhost" || location.hostname === "127.0.0.1") { | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |             linkText = `./index.html?layout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}` | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (customThemeDefinition) { | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |             linkText = `./index.html?userlayout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}#${customThemeDefinition}` | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let description = Translations.W(layout.description); | 
					
						
							|  |  |  |         if (description !== undefined) { | 
					
						
							|  |  |  |             description = new Combine(["<br/>", description]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         const link = | 
					
						
							|  |  |  |             new SubtleButton(layout.icon, | 
					
						
							|  |  |  |                 new Combine([ | 
					
						
							|  |  |  |                     "<b>", | 
					
						
							|  |  |  |                     Translations.W(layout.title), | 
					
						
							|  |  |  |                     "</b>", | 
					
						
							|  |  |  |                     description ?? "", | 
					
						
							|  |  |  |                 ]), {url: linkText, newTab: false}) | 
					
						
							|  |  |  |         return link; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     InnerRender(): string { | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  |         const tr = Translations.t.general.morescreen; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const els: UIElement[] = [] | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         els.push(new VariableUiElement( | 
					
						
							|  |  |  |             State.state.osmConnection.userDetails.map(userDetails => { | 
					
						
							| 
									
										
										
										
											2020-09-03 16:44:48 +02:00
										 |  |  |                 if (userDetails.csCount < State.userJourney.themeGeneratorReadOnlyUnlock) { | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  |                     return tr.requestATheme.Render(); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return new SubtleButton("./assets/pencil.svg", tr.createYourOwnTheme, { | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |                     url: "./customGenerator.html", | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  |                     newTab: false | 
					
						
							|  |  |  |                 }).Render(); | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         )); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         for (const k in AllKnownLayouts.allSets) { | 
					
						
							| 
									
										
										
										
											2020-08-28 03:16:21 +02:00
										 |  |  |             const layout : Layout = AllKnownLayouts.allSets[k]; | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  |             if (k === PersonalLayout.NAME) { | 
					
						
							| 
									
										
										
										
											2020-09-03 16:44:48 +02:00
										 |  |  |                 if (State.state.osmConnection.userDetails.data.csCount < State.userJourney.personalLayoutUnlock) { | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  |                     continue; | 
					
						
							| 
									
										
										
										
											2020-08-24 20:24:53 +02:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |             if (layout.id !== k) { | 
					
						
							| 
									
										
										
										
											2020-08-28 03:16:21 +02:00
										 |  |  |                 continue; // This layout was added multiple time due to an uppercase
 | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-09-05 23:44:33 +02:00
										 |  |  |             els.push(this.createLinkButton(layout)); | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  |         const customThemesNames = State.state.installedThemes.data ?? []; | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |         if (customThemesNames.length > 0) { | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |             els.push(Translations.t.general.customThemeIntro) | 
					
						
							| 
									
										
										
										
											2020-08-25 02:12:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |             for (const installed of State.state.installedThemes.data) { | 
					
						
							| 
									
										
										
										
											2020-09-05 23:44:33 +02:00
										 |  |  |                 els.push(this.createLinkButton(installed.layout, installed.definition)); | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return new VerticalCombine([ | 
					
						
							|  |  |  |             tr.intro, | 
					
						
							|  |  |  |             new VerticalCombine(els), | 
					
						
							| 
									
										
										
										
											2020-08-17 17:23:15 +02:00
										 |  |  |             tr.streetcomplete | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  |         ]).Render(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |