| 
									
										
										
										
											2020-11-11 16:23:49 +01:00
										 |  |  | import {Translation} from "../../UI/i18n/Translation"; | 
					
						
							|  |  |  | import TagRenderingConfig from "./TagRenderingConfig"; | 
					
						
							|  |  |  | import LayerConfig from "./LayerConfig"; | 
					
						
							|  |  |  | import {LayoutConfigJson} from "./LayoutConfigJson"; | 
					
						
							|  |  |  | import SharedLayers from "../SharedLayers"; | 
					
						
							|  |  |  | import SharedTagRenderings from "../SharedTagRenderings"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default class LayoutConfig { | 
					
						
							|  |  |  |     public readonly id: string; | 
					
						
							|  |  |  |     public readonly maintainer: string; | 
					
						
							|  |  |  |     public readonly changesetmessage?: string; | 
					
						
							|  |  |  |     public readonly version: string; | 
					
						
							|  |  |  |     public readonly language: string[]; | 
					
						
							|  |  |  |     public readonly title: Translation; | 
					
						
							|  |  |  |     public readonly shortDescription?: Translation; | 
					
						
							|  |  |  |     public readonly description: Translation; | 
					
						
							|  |  |  |     public readonly descriptionTail?: Translation; | 
					
						
							|  |  |  |     public readonly icon: string; | 
					
						
							|  |  |  |     public readonly socialImage?: string; | 
					
						
							|  |  |  |     public readonly startZoom: number; | 
					
						
							|  |  |  |     public readonly startLat: number; | 
					
						
							|  |  |  |     public readonly startLon: number; | 
					
						
							|  |  |  |     public readonly widenFactor: number; | 
					
						
							|  |  |  |     public readonly roamingRenderings: TagRenderingConfig[]; | 
					
						
							|  |  |  |     public readonly defaultBackgroundId?: string; | 
					
						
							|  |  |  |     public readonly layers: LayerConfig[]; | 
					
						
							|  |  |  |     public readonly hideFromOverview: boolean; | 
					
						
							|  |  |  |     public readonly enableUserBadge: boolean; | 
					
						
							|  |  |  |     public readonly enableShareScreen: boolean; | 
					
						
							|  |  |  |     public readonly enableMoreQuests: boolean; | 
					
						
							|  |  |  |     public readonly enableAddNewPoints: boolean; | 
					
						
							|  |  |  |     public readonly enableLayers: boolean; | 
					
						
							|  |  |  |     public readonly enableSearch: boolean; | 
					
						
							|  |  |  |     public readonly enableGeolocation: boolean; | 
					
						
							|  |  |  |    public readonly enableBackgroundLayerSelection: boolean; | 
					
						
							|  |  |  |     public readonly customCss?: string; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(json: LayoutConfigJson, context?:string) { | 
					
						
							|  |  |  |         this.id = json.id; | 
					
						
							|  |  |  |         context = (context ?? "")+"."+this.id; | 
					
						
							|  |  |  |         this.maintainer = json.maintainer; | 
					
						
							|  |  |  |         this.changesetmessage = json.changesetmessage; | 
					
						
							|  |  |  |         this.version = json.version; | 
					
						
							|  |  |  |         this.language = []; | 
					
						
							|  |  |  |         if (typeof json.language === "string") { | 
					
						
							|  |  |  |             this.language = [json.language]; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             this.language = json.language; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if(json.title === undefined){ | 
					
						
							|  |  |  |             throw "Title not defined in "+this.id; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if(json.description === undefined){ | 
					
						
							|  |  |  |             throw "Description not defined in "+this.id; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         this.title = new Translation(json.title, context+".title"); | 
					
						
							|  |  |  |         this.description = new Translation(json.description, context+".description"); | 
					
						
							|  |  |  |         this.shortDescription = json.shortDescription === undefined ? this.description.FirstSentence() : new Translation(json.shortDescription, context+".shortdescription"); | 
					
						
							|  |  |  |         this.descriptionTail = json.descriptionTail === undefined ? new Translation({"*":""}, context) : new Translation(json.descriptionTail, context+".descriptionTail"); | 
					
						
							|  |  |  |         this.icon = json.icon; | 
					
						
							|  |  |  |         this.socialImage = json.socialImage; | 
					
						
							|  |  |  |         this.startZoom = json.startZoom; | 
					
						
							|  |  |  |         this.startLat = json.startLat; | 
					
						
							|  |  |  |         this.startLon = json.startLon; | 
					
						
							|  |  |  |         this.widenFactor = json.widenFactor ?? 0.05; | 
					
						
							|  |  |  |         this.roamingRenderings = (json.roamingRenderings ?? []).map((tr, i) => { | 
					
						
							|  |  |  |                 if (typeof tr === "string") { | 
					
						
							|  |  |  |                     if (SharedTagRenderings.SharedTagRendering[tr] !== undefined) { | 
					
						
							|  |  |  |                         return SharedTagRenderings.SharedTagRendering[tr]; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return new TagRenderingConfig(tr, `${this.id}.roaming_renderings[${i}]`); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         this.defaultBackgroundId = json.defaultBackgroundId; | 
					
						
							|  |  |  |         this.layers = json.layers.map((layer, i) => { | 
					
						
							|  |  |  |             if (typeof layer === "string") | 
					
						
							|  |  |  |                 if (SharedLayers.sharedLayers[layer] !== undefined) { | 
					
						
							|  |  |  |                     return SharedLayers.sharedLayers[layer]; | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     throw "Unkown fixed layer " + layer; | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2020-11-17 16:29:51 +01:00
										 |  |  |             return new LayerConfig(layer, this.roamingRenderings,`${this.id}.layers[${i}]`); | 
					
						
							| 
									
										
										
										
											2020-11-11 16:23:49 +01:00
										 |  |  |         }); | 
					
						
							|  |  |  |         this.hideFromOverview = json.hideFromOverview ?? false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.enableUserBadge = json.enableUserBadge ?? true; | 
					
						
							|  |  |  |         this.enableShareScreen = json.enableShareScreen ?? true; | 
					
						
							|  |  |  |         this.enableMoreQuests = json.enableMoreQuests ?? true; | 
					
						
							|  |  |  |         this.enableLayers = json.enableLayers ?? true; | 
					
						
							|  |  |  |         this.enableSearch = json.enableSearch ?? true; | 
					
						
							|  |  |  |         this.enableGeolocation = json.enableGeolocation ?? true; | 
					
						
							|  |  |  |         this.enableAddNewPoints = json.enableAddNewPoints ?? true; | 
					
						
							|  |  |  |         this.enableBackgroundLayerSelection = json.enableBackgroundLayerSelection ?? true; | 
					
						
							|  |  |  |         this.customCss = json.customCss; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |