Fix custom layouts

This commit is contained in:
Pieter Vander Vennet 2021-12-21 19:56:04 +01:00
parent 8e2e367a0c
commit 4b6769d601
5 changed files with 76 additions and 23 deletions

View file

@ -20,23 +20,18 @@ export default class DetermineLayout {
/**
* Gets the correct layout for this website
*/
public static async GetLayout(): Promise<[LayoutConfig, string]> {
public static async GetLayout(): Promise<LayoutConfig> {
const loadCustomThemeParam = QueryParameters.GetQueryParameter("userlayout", "false", "If not 'false', a custom (non-official) theme is loaded. This custom layout can be done in multiple ways: \n\n- The hash of the URL contains a base64-encoded .json-file containing the theme definition\n- The hash of the URL contains a lz-compressed .json-file, as generated by the custom theme generator\n- The parameter itself is an URL, in which case that URL will be downloaded. It should point to a .json of a theme")
const layoutFromBase64 = decodeURIComponent(loadCustomThemeParam.data);
if (layoutFromBase64.startsWith("http")) {
const layout = await DetermineLayout.LoadRemoteTheme(layoutFromBase64)
return [layout, undefined]
return await DetermineLayout.LoadRemoteTheme(layoutFromBase64)
}
if (layoutFromBase64 !== "false") {
// We have to load something from the hash (or from disk)
let loaded = DetermineLayout.LoadLayoutFromHash(loadCustomThemeParam);
if (loaded === null) {
return [null, undefined]
}
return loaded
return DetermineLayout.LoadLayoutFromHash(loadCustomThemeParam)
}
let layoutId: string = undefined
@ -64,12 +59,12 @@ export default class DetermineLayout {
}
}
return [layoutToUse, undefined]
return layoutToUse
}
public static LoadLayoutFromHash(
userLayoutParam: UIEventSource<string>
): [LayoutConfig, string] | null {
): LayoutConfig | null {
let hash = location.hash.substr(1);
try {
// layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter
@ -109,7 +104,9 @@ export default class DetermineLayout {
const knownLayersDict = new Map<string, LayerConfigJson>()
for (const key in known_layers["default"]) {
knownLayersDict.set(key, known_layers["default"][key])
const layer = known_layers["default"][key]
console.log("Found shared layer "+layer.id)
knownLayersDict.set(layer.id, layer)
}
const converState = {
@ -123,7 +120,7 @@ export default class DetermineLayout {
const layoutToUse = new LayoutConfig(json, false);
userLayoutParam.setData(layoutToUse.id);
return [layoutToUse, btoa(Utils.MinifyJSON(JSON.stringify(json)))];
return layoutToUse;
} catch (e) {
console.error(e)
if (hash === undefined || hash.length < 10) {