| 
									
										
										
										
											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; | 
					
						
							| 
									
										
										
										
											2021-01-17 21:04:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |     private _component: UIElement; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-17 21:04:37 +01: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); | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  |         return new SubtleButton(layout.icon, | 
					
						
							|  |  |  |             new Combine([ | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |                 `<dt class='text-lg leading-6 font-medium text-gray-900 group-hover:text-blue-800'>`, | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  |                 Translations.W(layout.title), | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |                 `</dt>`, | 
					
						
							|  |  |  |                 `<dd class='mt-1 text-base text-gray-500 group-hover:text-blue-900'>`, | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  |                 description ?? "", | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |                 `</dd>`, | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  |             ]), {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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |         const linkButton: UIElement[] = [] | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         for (const k in AllKnownLayouts.allSets) { | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |             const layout: LayoutConfig = AllKnownLayouts.allSets[k]; | 
					
						
							| 
									
										
										
										
											2020-11-11 16:23:49 +01:00
										 |  |  |             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
 | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |             linkButton.push(this.createLinkButton(layout)); | 
					
						
							| 
									
										
										
										
											2020-08-26 15:36:04 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-08-23 16:59:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |         els.push(new Combine([ | 
					
						
							|  |  |  |             `<div class='rounded-xl overflow-hidden bg-gradient-to-tr from-green-400 via-blue-500 to-green-500 p-5 m-8 mt-5'>`, | 
					
						
							|  |  |  |             new Combine(linkButton), | 
					
						
							|  |  |  |             `</div>` | 
					
						
							|  |  |  |         ])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         els.push(new VariableUiElement( | 
					
						
							|  |  |  |             State.state.osmConnection.userDetails.map(userDetails => { | 
					
						
							|  |  |  |                 if (userDetails.csCount < Constants.userJourney.themeGeneratorReadOnlyUnlock) { | 
					
						
							|  |  |  |                     return tr.requestATheme.SetClass("block text-base mx-10 my-3").Render(); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return new SubtleButton(Svg.pencil_ui(), tr.createYourOwnTheme, { | 
					
						
							|  |  |  |                     url: "./customGenerator.html", | 
					
						
							|  |  |  |                     newTab: false | 
					
						
							|  |  |  |                 }).Render(); | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         )); | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-26 20:11:43 +02:00
										 |  |  |         const customThemesNames = State.state.installedThemes.data ?? []; | 
					
						
							| 
									
										
										
										
											2021-01-17 21:04:37 +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([ | 
					
						
							| 
									
										
										
										
											2021-01-17 21:04:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |            LanguagePicker.CreateLanguagePicker(Translations.t.general.index.SupportedLanguages()) | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |                .SetClass("absolute top-2 right-3 dropdown-ui-element-2226"), | 
					
						
							| 
									
										
										
										
											2021-01-17 21:15:14 +01:00
										 |  |  |             //    todo add logo above text
 | 
					
						
							|  |  |  |             //    new FixedUiElement(`<img class="h-24 w-24" src="./assets/svg/logo.svg" alt="MapComplete Logo">`),
 | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |                Translations.t.general.index.SetClass("sm:text-center lg:text-left block m-6 mt-8") | 
					
						
							|  |  |  |            ]) | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-17 21:11:57 +01:00
										 |  |  |         this._component = new Combine([ | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |             intro, | 
					
						
							| 
									
										
										
										
											2021-01-17 21:11:57 +01:00
										 |  |  |             new Combine(els), | 
					
						
							| 
									
										
										
										
											2021-01-17 21:14:48 +01:00
										 |  |  |             tr.streetcomplete.SetClass("block text-base mx-10 my-3 mb-10") | 
					
						
							| 
									
										
										
										
											2021-01-14 22:25:11 +01:00
										 |  |  |         ]); | 
					
						
							|  |  |  |         return this._component.Render(); | 
					
						
							| 
									
										
										
										
											2020-07-29 15:48:21 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |