forked from MapComplete/MapComplete
		
	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…
	
	Add table
		Add a link
		
	
		Reference in a new issue