diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts index 4ec9665a00..8857bf60d8 100644 --- a/src/Logic/State/UserRelatedState.ts +++ b/src/Logic/State/UserRelatedState.ts @@ -41,6 +41,8 @@ export default class UserRelatedState { public readonly showAllQuestionsAtOnce: UIEventSource public readonly showTags: UIEventSource<"no" | undefined | "always" | "yes" | "full"> public readonly showCrosshair: UIEventSource<"yes" | "always" | "no" | undefined> + public readonly translationMode: UIEventSource<"false" | "true" | "mobile" | undefined | string> + public readonly fixateNorth: UIEventSource public readonly a11y: UIEventSource public readonly homeLocation: FeatureSource @@ -86,30 +88,11 @@ export default class UserRelatedState { ) { this.osmConnection = osmConnection this._mapProperties = mapProperties - { - const translationMode: UIEventSource = - this.osmConnection.GetPreference("translation-mode", "false") - translationMode.addCallbackAndRunD((mode) => { - mode = mode.toLowerCase() - if (mode === "true" || mode === "yes") { - Locale.showLinkOnMobile.setData(false) - Locale.showLinkToWeblate.setData(true) - } else if (mode === "false" || mode === "no") { - Locale.showLinkToWeblate.setData(false) - } else if (mode === "mobile") { - Locale.showLinkOnMobile.setData(true) - Locale.showLinkToWeblate.setData(true) - } else { - Locale.showLinkOnMobile.setData(false) - Locale.showLinkToWeblate.setData(false) - } - }) - } this.showAllQuestionsAtOnce = UIEventSource.asBoolean( this.osmConnection.GetPreference("show-all-questions", "false", { documentation: - "Either 'true' or 'false'. If set, all questions will be shown all at once", + "Either 'true' or 'false'. If set, all questions will be shown all at once" }) ) this.language = this.osmConnection.GetPreference("language") @@ -129,7 +112,7 @@ export default class UserRelatedState { undefined, { documentation: - "The ID of a layer or layer category that MapComplete uses by default", + "The ID of a layer or layer category that MapComplete uses by default" } ) @@ -137,15 +120,15 @@ export default class UserRelatedState { "preferences-add-new-mode", "button_click_right", { - documentation: "How adding a new feature is done", + documentation: "How adding a new feature is done" } ) this.imageLicense = this.osmConnection.GetPreference("pictures-license", "CC0", { - documentation: "The license under which new images are uploaded", + documentation: "The license under which new images are uploaded" }) this.installedUserThemes = this.InitInstalledUserThemes() - + this.translationMode = this.initTranslationMode() this.homeLocation = this.initHomeLocation() this.preferencesAsTags = this.initAmendedPrefs(layout, featureSwitches) @@ -161,6 +144,29 @@ export default class UserRelatedState { this.language.syncWith(Locale.language) } + + private initTranslationMode(): UIEventSource<"false" | "true" | "mobile" | undefined | string> { + const translationMode: UIEventSource = + this.osmConnection.GetPreference("translation-mode", "false") + translationMode.addCallbackAndRunD((mode) => { + mode = mode.toLowerCase() + if (mode === "true" || mode === "yes") { + Locale.showLinkOnMobile.setData(false) + Locale.showLinkToWeblate.setData(true) + } else if (mode === "false" || mode === "no") { + Locale.showLinkToWeblate.setData(false) + } else if (mode === "mobile") { + Locale.showLinkOnMobile.setData(true) + Locale.showLinkToWeblate.setData(true) + } else { + Locale.showLinkOnMobile.setData(false) + Locale.showLinkToWeblate.setData(false) + } + }) + return translationMode + + } + private static initUserSettingsState(): LayerConfig { try { return new LayerConfig(usersettings, "userinformationpanel") @@ -171,13 +177,13 @@ export default class UserRelatedState { public GetUnofficialTheme(id: string): | { - id: string - icon: string - title: any - shortDescription: any - definition?: any - isOfficial: boolean - } + id: string + icon: string + title: any + shortDescription: any + definition?: any + isOfficial: boolean + } | undefined { console.log("GETTING UNOFFICIAL THEME") const pref = this.osmConnection.GetLongPreference("unofficial-theme-" + id) @@ -202,8 +208,8 @@ export default class UserRelatedState { } catch (e) { console.warn( "Removing theme " + - id + - " as it could not be parsed from the preferences; the content is:", + id + + " as it could not be parsed from the preferences; the content is:", str ) pref.setData(null) @@ -233,7 +239,7 @@ export default class UserRelatedState { icon: layout.icon, title: layout.title.translations, shortDescription: layout.shortDescription.translations, - definition: layout["definition"], + definition: layout["definition"] }) ) } @@ -273,13 +279,13 @@ export default class UserRelatedState { id: "home", "user:home": "yes", _lon: homeLonLat[0], - _lat: homeLonLat[1], + _lat: homeLonLat[1] }, geometry: { type: "Point", - coordinates: homeLonLat, - }, - }, + coordinates: homeLonLat + } + } ] }) return new StaticFeatureSource(feature) @@ -300,7 +306,7 @@ export default class UserRelatedState { _applicationOpened: new Date().toISOString(), _supports_sharing: typeof window === "undefined" ? "no" : window.navigator.share ? "yes" : "no", - _iframe: Utils.isIframe ? "yes" : "no", + _iframe: Utils.isIframe ? "yes" : "no" }) for (const key in Constants.userJourney) { @@ -333,12 +339,10 @@ export default class UserRelatedState { amendedPrefs.ping() }) - const translationMode = osmConnection.GetPreference("translation-mode") - Locale.language.mapD( (language) => { amendedPrefs.data["_language"] = language - const trmode = translationMode.data + const trmode = this.translationMode.data if ((trmode === "true" || trmode === "mobile") && layout !== undefined) { const extraInspection = UserRelatedState.usersettingsConfig const missing = layout.missingTranslations(extraInspection) @@ -355,18 +359,18 @@ export default class UserRelatedState { const zenLinks: { link: string; id: string }[] = Utils.NoNull([ hasMissingTheme ? { - id: "theme:" + layout.id, - link: LinkToWeblate.hrefToWeblateZen( - language, - "themes", - layout.id - ), - } + id: "theme:" + layout.id, + link: LinkToWeblate.hrefToWeblateZen( + language, + "themes", + layout.id + ) + } : undefined, ...missingLayers.map((id) => ({ id: "layer:" + id, - link: LinkToWeblate.hrefToWeblateZen(language, "layers", id), - })), + link: LinkToWeblate.hrefToWeblateZen(language, "layers", id) + })) ]) const untranslated_count = untranslated.length amendedPrefs.data["_translation_total"] = "" + total @@ -378,7 +382,7 @@ export default class UserRelatedState { } amendedPrefs.ping() }, - [translationMode] + [this.translationMode] ) this.mangroveIdentity.getKeyId().addCallbackAndRun((kid) => { diff --git a/src/Models/ThemeViewState.ts b/src/Models/ThemeViewState.ts index 6c6dcbde3a..4c81f2931f 100644 --- a/src/Models/ThemeViewState.ts +++ b/src/Models/ThemeViewState.ts @@ -704,7 +704,12 @@ export default class ThemeViewState implements SpecialVisualizationState { }, Translations.t.hotkeyDocumentation.translationMode, () => { - Locale.showLinkToWeblate.setData(!Locale.showLinkToWeblate.data) + const tm = this.userRelatedState.translationMode + if(tm.data === "false"){ + tm.setData("true") + } else { + tm.setData("false") + } } ) }