Save layoutconfigJSON as preferences, the are saved in the morescreen
This commit is contained in:
parent
c874afc745
commit
6cb5803efd
6 changed files with 44 additions and 10 deletions
|
@ -72,7 +72,7 @@ export default class DetermineLayout {
|
|||
|
||||
public static LoadLayoutFromHash(
|
||||
userLayoutParam: UIEventSource<string>
|
||||
): LayoutConfig | null {
|
||||
): (LayoutConfig & {definition: LayoutConfigJson}) | null {
|
||||
let hash = location.hash.substr(1);
|
||||
let json: any;
|
||||
|
||||
|
@ -113,7 +113,9 @@ export default class DetermineLayout {
|
|||
|
||||
const layoutToUse = DetermineLayout.prepCustomTheme(json)
|
||||
userLayoutParam.setData(layoutToUse.id);
|
||||
return new LayoutConfig(layoutToUse, false);
|
||||
const config = new LayoutConfig(layoutToUse, false);
|
||||
config["definition"] = json
|
||||
return <any> config
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
if (hash === undefined || hash.length < 10) {
|
||||
|
|
|
@ -68,7 +68,8 @@ export default class UserRelatedState extends ElementsState {
|
|||
id: this.layoutToUse.id,
|
||||
icon: this.layoutToUse.icon,
|
||||
title: this.layoutToUse.title.translations,
|
||||
shortDescription: this.layoutToUse.shortDescription.translations
|
||||
shortDescription: this.layoutToUse.shortDescription.translations,
|
||||
definition: this.layoutToUse["definition"]
|
||||
}))
|
||||
}
|
||||
|
||||
|
|
|
@ -406,12 +406,31 @@ class AddDependencyLayersToTheme extends DesugaringStep<LayoutConfigJson> {
|
|||
}
|
||||
}
|
||||
|
||||
class PreparePersonalTheme extends DesugaringStep<LayoutConfigJson> {
|
||||
private readonly _state: DesugaringContext;
|
||||
constructor(state: DesugaringContext) {
|
||||
super("Adds every public layer to the personal theme",["layers"],"PreparePersonalTheme");
|
||||
this._state = state;
|
||||
}
|
||||
|
||||
convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors?: string[]; warnings?: string[]; information?: string[] } {
|
||||
if(json.id !== "personal"){
|
||||
return {result: json}
|
||||
}
|
||||
|
||||
json.layers = Array.from(this._state.sharedLayers.keys())
|
||||
|
||||
|
||||
return {result: json};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class PrepareTheme extends Fuse<LayoutConfigJson> {
|
||||
constructor(state: DesugaringContext) {
|
||||
super(
|
||||
"Fully prepares and expands a theme",
|
||||
|
||||
new PreparePersonalTheme(state),
|
||||
new OnEveryConcat("layers", new SubstituteLayer(state)),
|
||||
new SetDefault("socialImage", "assets/SocialImage.png", true),
|
||||
new OnEvery("layers", new PrepareLayer(state)),
|
||||
|
|
|
@ -105,8 +105,9 @@ export default class FilterConfig {
|
|||
if(this.options.length > 1){
|
||||
defaultValue = ""+this.defaultSelection
|
||||
}else{
|
||||
// Only a single option
|
||||
if(this.defaultSelection > 0){
|
||||
defaultValue = ""+this.defaultSelection
|
||||
defaultValue = "true"
|
||||
}
|
||||
}
|
||||
const qp = QueryParameters.GetQueryParameter("filter-" + this.id, defaultValue, "State of filter " + this.id)
|
||||
|
|
|
@ -20,7 +20,6 @@ import Toggle from "../Input/Toggle";
|
|||
import {OsmConnection} from "../../Logic/Osm/OsmConnection";
|
||||
import Constants from "../../Models/Constants";
|
||||
import ContributorCount from "../../Logic/ContributorCount";
|
||||
import {icon} from "leaflet";
|
||||
import Img from "../Base/Img";
|
||||
|
||||
export class OpenIdEditor extends VariableUiElement {
|
||||
|
@ -211,7 +210,11 @@ export default class CopyrightPanel extends Combine {
|
|||
|
||||
private static IconAttribution(iconPath: string): BaseUIElement {
|
||||
if (iconPath.startsWith("http")) {
|
||||
try{
|
||||
iconPath = "." + new URL(iconPath).pathname;
|
||||
}catch(e){
|
||||
console.error(e)
|
||||
}
|
||||
}
|
||||
|
||||
const license: SmallLicense = CopyrightPanel.LicenseObject[iconPath]
|
||||
|
|
|
@ -9,7 +9,7 @@ import BaseUIElement from "../BaseUIElement";
|
|||
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
|
||||
import {UIEventSource} from "../../Logic/UIEventSource";
|
||||
import Loc from "../../Models/Loc";
|
||||
import {OsmConnection} from "../../Logic/Osm/OsmConnection";
|
||||
import UserDetails, {OsmConnection} from "../../Logic/Osm/OsmConnection";
|
||||
import UserRelatedState from "../../Logic/State/UserRelatedState";
|
||||
import Toggle from "../Input/Toggle";
|
||||
import {Utils} from "../../Utils";
|
||||
|
@ -52,7 +52,8 @@ export default class MoreScreen extends Combine {
|
|||
id: string,
|
||||
icon: string,
|
||||
title: any,
|
||||
shortDescription: any
|
||||
shortDescription: any,
|
||||
definition?: any
|
||||
}, isCustom: boolean = false
|
||||
):
|
||||
BaseUIElement {
|
||||
|
@ -87,6 +88,11 @@ export default class MoreScreen extends Combine {
|
|||
linkPrefix = `${path}/theme.html?userlayout=${layout.id}&`
|
||||
}
|
||||
|
||||
let hash = ""
|
||||
if(layout.definition !== undefined){
|
||||
hash = "#"+btoa(JSON.stringify(layout.definition))
|
||||
}
|
||||
|
||||
const linkText = currentLocation?.map(currentLocation => {
|
||||
const params = [
|
||||
["z", currentLocation?.zoom],
|
||||
|
@ -95,10 +101,11 @@ export default class MoreScreen extends Combine {
|
|||
].filter(part => part[1] !== undefined)
|
||||
.map(part => part[0] + "=" + part[1])
|
||||
.join("&")
|
||||
return `${linkPrefix}${params}`;
|
||||
return `${linkPrefix}${params}${hash}`;
|
||||
}) ?? new UIEventSource<string>(`${linkPrefix}`)
|
||||
|
||||
|
||||
|
||||
return new SubtleButton(layout.icon,
|
||||
new Combine([
|
||||
`<dt class='text-lg leading-6 font-medium text-gray-900 group-hover:text-blue-800'>`,
|
||||
|
@ -134,7 +141,8 @@ export default class MoreScreen extends Combine {
|
|||
id: string
|
||||
icon: string,
|
||||
title: any,
|
||||
shortDescription: any
|
||||
shortDescription: any,
|
||||
definition?: any
|
||||
} = JSON.parse(str)
|
||||
|
||||
return MoreScreen.createLinkButton(state, value, true)
|
||||
|
|
Loading…
Reference in a new issue