diff --git a/Logic/DetermineLayout.ts b/Logic/DetermineLayout.ts index f1f28ee14e..78fa921308 100644 --- a/Logic/DetermineLayout.ts +++ b/Logic/DetermineLayout.ts @@ -11,7 +11,6 @@ import { LocalStorageSource } from "./Web/LocalStorageSource" import LZString from "lz-string" import { FixLegacyTheme } from "../Models/ThemeConfig/Conversion/LegacyJsonConvert" import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson" -import SharedTagRenderings from "../Customizations/SharedTagRenderings" import known_layers from "../assets/generated/known_layers.json" import { PrepareTheme } from "../Models/ThemeConfig/Conversion/PrepareTheme" import licenses from "../assets/generated/license_info.json" @@ -24,9 +23,8 @@ import { ValidateTagRenderings, ValidateThemeAndLayers, } from "../Models/ThemeConfig/Conversion/Validation" -import { DesugaringContext, Each, On } from "../Models/ThemeConfig/Conversion/Conversion" -import { PrepareLayer, RewriteSpecial } from "../Models/ThemeConfig/Conversion/PrepareLayer" -import { AllSharedLayers } from "../Customizations/AllSharedLayers" +import { DesugaringContext } from "../Models/ThemeConfig/Conversion/Conversion" +import { RewriteSpecial } from "../Models/ThemeConfig/Conversion/PrepareLayer" import { TagRenderingConfigJson } from "../Models/ThemeConfig/Json/TagRenderingConfigJson" import questions from "../assets/tagRenderings/questions.json" @@ -79,55 +77,33 @@ export default class DetermineLayout { let hash = location.hash.substr(1) let json: any - try { - // layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter - const dedicatedHashFromLocalStorage = LocalStorageSource.Get( - "user-layout-" + userLayoutParam.data?.replace(" ", "_") - ) - if (dedicatedHashFromLocalStorage.data?.length < 10) { - dedicatedHashFromLocalStorage.setData(undefined) - } - - const hashFromLocalStorage = LocalStorageSource.Get("last-loaded-user-layout") - if (hash.length < 10) { - hash = dedicatedHashFromLocalStorage.data ?? hashFromLocalStorage.data - } else { - console.log("Saving hash to local storage") - hashFromLocalStorage.setData(hash) - dedicatedHashFromLocalStorage.setData(hash) - } - - try { - json = JSON.parse(atob(hash)) - } catch (e) { - // We try to decode with lz-string - try { - json = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(hash))) - } catch (e) { - console.error(e) - DetermineLayout.ShowErrorOnCustomTheme( - "Could not decode the hash", - new FixedUiElement("Not a valid (LZ-compressed) JSON") - ) - return null - } - } - - const layoutToUse = DetermineLayout.prepCustomTheme(json) - userLayoutParam.setData(layoutToUse.id) - return layoutToUse - } catch (e) { - console.error(e) - if (hash === undefined || hash.length < 10) { - DetermineLayout.ShowErrorOnCustomTheme( - "Could not load a theme from the hash", - new FixedUiElement("Hash does not contain data"), - json - ) - } - this.ShowErrorOnCustomTheme("Could not parse the hash", new FixedUiElement(e), json) - return null + // layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter + const dedicatedHashFromLocalStorage = LocalStorageSource.Get( + "user-layout-" + userLayoutParam.data?.replace(" ", "_") + ) + if (dedicatedHashFromLocalStorage.data?.length < 10) { + dedicatedHashFromLocalStorage.setData(undefined) } + + const hashFromLocalStorage = LocalStorageSource.Get("last-loaded-user-layout") + if (hash.length < 10) { + hash = dedicatedHashFromLocalStorage.data ?? hashFromLocalStorage.data + } else { + console.log("Saving hash to local storage") + hashFromLocalStorage.setData(hash) + dedicatedHashFromLocalStorage.setData(hash) + } + + try { + json = JSON.parse(atob(hash)) + } catch (e) { + // We try to decode with lz-string + json = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(hash))) + } + + const layoutToUse = DetermineLayout.prepCustomTheme(json) + userLayoutParam.setData(layoutToUse.id) + return layoutToUse } public static ShowErrorOnCustomTheme( @@ -187,6 +163,7 @@ export default class DetermineLayout { return dict } + private static prepCustomTheme(json: any, sourceUrl?: string, forceId?: string): LayoutConfig { if (json.layers === undefined && json.tagRenderings !== undefined) { const iconTr = json.mapRendering.map((mr) => mr.icon).find((icon) => icon !== undefined) @@ -255,32 +232,13 @@ export default class DetermineLayout { "maindiv" ) - try { - let parsed = await Utils.downloadJson(link) - try { - let forcedId = parsed.id - const url = new URL(link) - if (!(url.hostname === "localhost" || url.hostname === "127.0.0.1")) { - forcedId = link - } - console.log("Loaded remote link:", link) - return DetermineLayout.prepCustomTheme(parsed, link, forcedId) - } catch (e) { - console.error(e) - DetermineLayout.ShowErrorOnCustomTheme( - `${link} is invalid:`, - new FixedUiElement(e), - parsed - ) - return null - } - } catch (e) { - console.error(e) - DetermineLayout.ShowErrorOnCustomTheme( - `${link} is invalid - probably not found or invalid JSON:`, - new FixedUiElement(e) - ) - return null + let parsed = await Utils.downloadJson(link) + let forcedId = parsed.id + const url = new URL(link) + if (!(url.hostname === "localhost" || url.hostname === "127.0.0.1")) { + forcedId = link } + console.log("Loaded remote link:", link) + return DetermineLayout.prepCustomTheme(parsed, link, forcedId) } } diff --git a/index.ts b/index.ts index 3d29af169f..73d68c768c 100644 --- a/index.ts +++ b/index.ts @@ -6,13 +6,17 @@ import ThemeViewGUI from "./UI/ThemeViewGUI.svelte" import { FixedUiElement } from "./UI/Base/FixedUiElement" // @ts-ignore -DetermineLayout.GetLayout() - .then((layout) => { - const state = new ThemeViewState(layout) - const main = new SvelteUIElement(ThemeViewGUI, { state }) - main.AttachTo("maindiv") - }) - .catch((err) => { - console.error("Error while initializing: ", err, err.stack) - new FixedUiElement(err).SetClass("block alert").AttachTo("maindiv") - }) +try { + DetermineLayout.GetLayout() + .then((layout) => { + const state = new ThemeViewState(layout) + const main = new SvelteUIElement(ThemeViewGUI, { state }) + main.AttachTo("maindiv") + }) + .catch((err) => { + console.error("Error while initializing: ", err, err.stack) + new FixedUiElement(err).SetClass("block alert").AttachTo("maindiv") + }) +} catch (err) { + new FixedUiElement(err).SetClass("block alert").AttachTo("maindiv") +}