| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |   import { OsmConnectionFeatureSwitches } from "../Logic/State/FeatureSwitchState" | 
					
						
							|  |  |  |   import { OsmConnection } from "../Logic/Osm/OsmConnection" | 
					
						
							|  |  |  |   import { QueryParameters } from "../Logic/Web/QueryParameters" | 
					
						
							|  |  |  |   import UserRelatedState from "../Logic/State/UserRelatedState" | 
					
						
							|  |  |  |   import LanguagePicker from "./InputElement/LanguagePicker.svelte" | 
					
						
							|  |  |  |   import Translations from "./i18n/Translations" | 
					
						
							|  |  |  |   import Logo from "../assets/svg/Logo.svelte" | 
					
						
							|  |  |  |   import Tr from "./Base/Tr.svelte" | 
					
						
							|  |  |  |   import MoreScreen from "./BigComponents/MoreScreen" | 
					
						
							|  |  |  |   import LoginToggle from "./Base/LoginToggle.svelte" | 
					
						
							|  |  |  |   import Pencil from "../assets/svg/Pencil.svelte" | 
					
						
							|  |  |  |   import Login from "../assets/svg/Login.svelte" | 
					
						
							|  |  |  |   import Constants from "../Models/Constants" | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |   import { Store, UIEventSource } from "../Logic/UIEventSource" | 
					
						
							|  |  |  |   import { placeholder } from "../Utils/placeholder" | 
					
						
							|  |  |  |   import { SearchIcon } from "@rgossiaux/svelte-heroicons/solid" | 
					
						
							|  |  |  |   import ThemesList from "./BigComponents/ThemesList.svelte" | 
					
						
							|  |  |  |   import { LayoutInformation } from "../Models/ThemeConfig/LayoutConfig" | 
					
						
							|  |  |  |   import * as themeOverview from "../assets/generated/theme_overview.json" | 
					
						
							|  |  |  |   import UnofficialThemeList from "./BigComponents/UnofficialThemeList.svelte" | 
					
						
							| 
									
										
										
										
											2024-01-22 04:29:51 +01:00
										 |  |  |   import Eye from "../assets/svg/Eye.svelte" | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |   const featureSwitches = new OsmConnectionFeatureSwitches() | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |   const osmConnection = new OsmConnection({ | 
					
						
							|  |  |  |     fakeUser: featureSwitches.featureSwitchFakeUser.data, | 
					
						
							|  |  |  |     oauth_token: QueryParameters.GetQueryParameter( | 
					
						
							|  |  |  |       "oauth_token", | 
					
						
							|  |  |  |       undefined, | 
					
						
							| 
									
										
										
										
											2023-12-21 01:46:18 +01:00
										 |  |  |       "Used to complete the login" | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |     ), | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  |   const state = new UserRelatedState(osmConnection) | 
					
						
							|  |  |  |   const t = Translations.t.index | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |   const tr = Translations.t.general.morescreen | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |   let userLanguages = osmConnection.userDetails.map((ud) => ud.languages) | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |   let themeSearchText: UIEventSource<string | undefined> = new UIEventSource<string>(undefined) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-21 01:46:18 +01:00
										 |  |  |   document.addEventListener("keydown", function (event) { | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |     if (event.ctrlKey && event.code === "KeyF") { | 
					
						
							|  |  |  |       document.getElementById("theme-search")?.focus() | 
					
						
							|  |  |  |       event.preventDefault() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let visitedHiddenThemes: Store<LayoutInformation[]> | 
					
						
							|  |  |  |   const hiddenThemes: LayoutInformation[] = | 
					
						
							|  |  |  |     (themeOverview["default"] ?? themeOverview)?.filter((layout) => layout.hideFromOverview) ?? [] | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     const prefix = "mapcomplete-hidden-theme-" | 
					
						
							|  |  |  |     const userPreferences = state.osmConnection.preferencesHandler.preferences | 
					
						
							| 
									
										
										
										
											2023-12-21 01:46:18 +01:00
										 |  |  |     visitedHiddenThemes = userPreferences.map((preferences) => { | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |       const knownIds = new Set<string>( | 
					
						
							|  |  |  |         Object.keys(preferences) | 
					
						
							|  |  |  |           .filter((key) => key.startsWith(prefix)) | 
					
						
							| 
									
										
										
										
											2023-12-21 01:46:18 +01:00
										 |  |  |           .map((key) => key.substring(prefix.length, key.length - "-enabled".length)) | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |       ) | 
					
						
							| 
									
										
										
										
											2024-01-19 17:46:41 +01:00
										 |  |  |       return hiddenThemes.filter((theme) => knownIds.has(theme.id) || state.osmConnection.userDetails.data.name === "Pieter Vander Vennet") | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |     }) | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  | <div class="m-4 flex flex-col"> | 
					
						
							| 
									
										
										
										
											2023-12-19 22:08:00 +01:00
										 |  |  |   <LanguagePicker | 
					
						
							| 
									
										
										
										
											2023-12-23 22:21:27 +01:00
										 |  |  |     clss="self-end max-w-full" | 
					
						
							| 
									
										
										
										
											2023-12-19 22:08:00 +01:00
										 |  |  |     assignTo={state.language} | 
					
						
							|  |  |  |     availableLanguages={t.title.SupportedLanguages()} | 
					
						
							|  |  |  |     preferredLanguages={userLanguages} | 
					
						
							|  |  |  |   /> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |   <div class="mt-4 flex"> | 
					
						
							|  |  |  |     <div class="m-3 flex-none"> | 
					
						
							|  |  |  |       <Logo alt="MapComplete Logo" class="h-12 w-12 sm:h-24 sm:w-24" /> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |     </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <div class="flex flex-col"> | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |       <h1 class="m-0 font-extrabold tracking-tight md:text-6xl"> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |         <Tr t={t.title} /> | 
					
						
							|  |  |  |       </h1> | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |       <Tr | 
					
						
							|  |  |  |         cls="my-4 mr-4 text-base font-semibold sm:text-lg md:mt-5 md:text-xl lg:mx-0" | 
					
						
							|  |  |  |         t={Translations.t.index.intro} | 
					
						
							|  |  |  |       /> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-21 01:46:18 +01:00
										 |  |  |   <form | 
					
						
							|  |  |  |     class="flex justify-center" | 
					
						
							|  |  |  |     on:submit|preventDefault={(_) => MoreScreen.applySearch(themeSearchText.data)} | 
					
						
							|  |  |  |   > | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |     <label | 
					
						
							| 
									
										
										
										
											2023-12-21 01:46:18 +01:00
										 |  |  |       class="neutral-label my-2 flex w-full items-center rounded-full border-2 border-black sm:w-1/2" | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |       <SearchIcon aria-hidden="true" class="h-8 w-8" /> | 
					
						
							|  |  |  |       <input | 
					
						
							|  |  |  |         autofocus | 
					
						
							|  |  |  |         bind:value={$themeSearchText} | 
					
						
							|  |  |  |         class="mr-4 w-full" | 
					
						
							|  |  |  |         id="theme-search" | 
					
						
							|  |  |  |         type="search" | 
					
						
							|  |  |  |         use:placeholder={tr.searchForATheme} | 
					
						
							|  |  |  |       /> | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |     </label> | 
					
						
							|  |  |  |   </form> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <ThemesList search={themeSearchText} {state} themes={MoreScreen.officialThemes} /> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |   <LoginToggle {state}> | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |     <ThemesList | 
					
						
							|  |  |  |       hideThemes={false} | 
					
						
							|  |  |  |       isCustom={false} | 
					
						
							|  |  |  |       search={themeSearchText} | 
					
						
							|  |  |  |       {state} | 
					
						
							|  |  |  |       themes={$visitedHiddenThemes} | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |       <svelte:fragment slot="title"> | 
					
						
							|  |  |  |         <h3> | 
					
						
							|  |  |  |           <Tr t={tr.previouslyHiddenTitle} /> | 
					
						
							|  |  |  |         </h3> | 
					
						
							|  |  |  |         <p> | 
					
						
							| 
									
										
										
										
											2023-12-21 01:46:18 +01:00
										 |  |  |           <Tr | 
					
						
							|  |  |  |             t={tr.hiddenExplanation.Subs({ | 
					
						
							|  |  |  |               hidden_discovered: $visitedHiddenThemes.length.toString(), | 
					
						
							|  |  |  |               total_hidden: hiddenThemes.length.toString(), | 
					
						
							|  |  |  |             })} | 
					
						
							|  |  |  |           /> | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |         </p> | 
					
						
							|  |  |  |       </svelte:fragment> | 
					
						
							|  |  |  |     </ThemesList> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <UnofficialThemeList search={themeSearchText} {state} /> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |     <div slot="not-logged-in"> | 
					
						
							|  |  |  |       <button class="w-full" on:click={() => osmConnection.AttemptLogin()}> | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |         <Login class="mr-2 h-6 w-6 " /> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |         <Tr t={Translations.t.index.logIn} /> | 
					
						
							|  |  |  |       </button> | 
					
						
							|  |  |  |     </div> | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |     <a | 
					
						
							|  |  |  |       class="button h-fit w-full" | 
					
						
							|  |  |  |       href={window.location.protocol + "//" + window.location.host + "/studio.html"} | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |       <Pencil class="mr-2 h-6 w-6" /> | 
					
						
							|  |  |  |       <Tr t={Translations.t.general.morescreen.createYourOwnTheme} /> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |     </a> | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-20 02:50:08 +01:00
										 |  |  |     <a | 
					
						
							|  |  |  |       class="button h-fit w-full" | 
					
						
							|  |  |  |       href={window.location.protocol + "//" + window.location.host + "/privacy.html"} | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |       <Eye class="mr-2 h-6 w-6" /> | 
					
						
							|  |  |  |       <Tr t={Translations.t.privacy.title} /> | 
					
						
							|  |  |  |     </a> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |   </LoginToggle> | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   <Tr cls="link-underline" t={Translations.t.general.aboutMapComplete.intro} /> | 
					
						
							| 
									
										
										
										
											2023-12-13 02:16:53 +01:00
										 |  |  |   <Tr t={tr.streetcomplete} /> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-01 15:23:28 +01:00
										 |  |  |   <div class="subtle mb-16 self-end"> | 
					
						
							| 
									
										
										
										
											2023-11-19 01:05:15 +01:00
										 |  |  |     v{Constants.vNumber} | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </div> |