| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | import {VerticalCombine} from "../Base/VerticalCombine"; | 
					
						
							|  |  |  | import {UIElement} from "../UIElement"; | 
					
						
							|  |  |  | import {VariableUiElement} from "../Base/VariableUIElement"; | 
					
						
							|  |  |  | import LayoutConfig from "../../Customizations/JSON/LayoutConfig"; | 
					
						
							|  |  |  | import {AllKnownLayouts} from "../../Customizations/AllKnownLayouts"; | 
					
						
							|  |  |  | import Svg from "../../Svg"; | 
					
						
							|  |  |  | import State from "../../State"; | 
					
						
							|  |  |  | import Combine from "../Base/Combine"; | 
					
						
							|  |  |  | import {SubtleButton} from "../Base/SubtleButton"; | 
					
						
							|  |  |  | import Translations from "../i18n/Translations"; | 
					
						
							|  |  |  | import * as personal from "../../assets/themes/personalLayout/personalLayout.json" | 
					
						
							|  |  |  | import Constants from "../../Models/Constants"; | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  | import LanguagePicker from "../LanguagePicker"; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | export default class MoreScreen extends UIElement { | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |     private readonly _onMainScreen: boolean; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private _component: UIElement; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-18 00:28:51 +02:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |     constructor(onMainScreen: boolean = false) { | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |         super(State.state.locationControl); | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |         this._onMainScreen = onMainScreen; | 
					
						
							| 
									
										
										
										
											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-11-11 16:23:49 +01:00
										 |  |  |     private createLinkButton(layout: LayoutConfig, 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
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01: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; | 
					
						
							| 
									
										
										
										
											2021-01-06 01:11:07 +01:00
										 |  |  |         let path = window.location.pathname; | 
					
						
							|  |  |  |         // Path starts with a '/' and contains everything, e.g. '/dir/dir/page.html'
 | 
					
						
							|  |  |  |         path = path.substr(0, path.lastIndexOf("/")); | 
					
						
							|  |  |  |         // Path will now contain '/dir/dir', or empty string in case of nothing
 | 
					
						
							|  |  |  |         if(path === ""){ | 
					
						
							|  |  |  |             path = "." | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |         let linkText = | 
					
						
							| 
									
										
										
										
											2021-01-06 01:11:07 +01:00
										 |  |  |             `${path}/${layout.id.toLowerCase()}?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") { | 
					
						
							| 
									
										
										
										
											2021-01-06 01:11:07 +01:00
										 |  |  |             linkText = `${path}/index.html?layout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}` | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (customThemeDefinition) { | 
					
						
							| 
									
										
										
										
											2021-01-06 01:11:07 +01:00
										 |  |  |             linkText = `${path}/?userlayout=${layout.id}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}#${customThemeDefinition}` | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-11 16:23:49 +01:00
										 |  |  |         let description = Translations.W(layout.shortDescription); | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |         if (description !== undefined) { | 
					
						
							|  |  |  |             description = new Combine(["<br/>", description]); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  |         return new SubtleButton(layout.icon, | 
					
						
							|  |  |  |             new Combine([ | 
					
						
							|  |  |  |                 "<b>", | 
					
						
							|  |  |  |                 Translations.W(layout.title), | 
					
						
							|  |  |  |                 "</b>", | 
					
						
							|  |  |  |                 description ?? "", | 
					
						
							|  |  |  |             ]), {url: linkText, newTab: false}); | 
					
						
							| 
									
										
										
										
											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 => { | 
					
						
							| 
									
										
										
										
											2021-01-02 19:09:49 +01:00
										 |  |  |                 if (userDetails.csCount < Constants.userJourney.themeGeneratorReadOnlyUnlock) { | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  |                     return tr.requestATheme.Render(); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2020-11-06 04:02:53 +01:00
										 |  |  |                 return new SubtleButton(Svg.pencil_ui(), 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-11-11 16:23:49 +01:00
										 |  |  |             const layout : LayoutConfig = AllKnownLayouts.allSets[k]; | 
					
						
							|  |  |  |             if (k === personal.id) { | 
					
						
							| 
									
										
										
										
											2021-01-02 19:09:49 +01:00
										 |  |  |                 if (State.state.osmConnection.userDetails.data.csCount < Constants.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-12-18 12:10:43 +01:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											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
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |         let intro : UIElement= tr.intro; | 
					
						
							|  |  |  |         if(this._onMainScreen){ | 
					
						
							|  |  |  |            intro = new Combine([ | 
					
						
							|  |  |  |                 | 
					
						
							|  |  |  |            LanguagePicker.CreateLanguagePicker(Translations.t.general.index.SupportedLanguages()) | 
					
						
							|  |  |  |                .SetStyle("position: absolute; right: 1.5em; top: 1.5em;"), | 
					
						
							|  |  |  |             Translations.t.general.index.SetStyle("margin-top: 2em;display:block; margin-bottom: 1em;") | 
					
						
							|  |  |  |            ])  | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |         this._component = new VerticalCombine([ | 
					
						
							|  |  |  |           intro, | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  |             new VerticalCombine(els), | 
					
						
							| 
									
										
										
										
											2020-08-17 17:23:15 +02:00
										 |  |  |             tr.streetcomplete | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |         ]); | 
					
						
							|  |  |  |         return this._component.Render(); | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |