| 
									
										
										
										
											2020-11-06 01:58:26 +01:00
										 |  |  | import Translations from "../../UI/i18n/Translations"; | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | import TagRenderingConfig from "./TagRenderingConfig"; | 
					
						
							|  |  |  | import {Tag, TagsFilter} from "../../Logic/Tags"; | 
					
						
							|  |  |  | import {LayerConfigJson} from "./LayerConfigJson"; | 
					
						
							|  |  |  | import {FromJSON} from "./FromJSON"; | 
					
						
							|  |  |  | import SharedTagRenderings from "../SharedTagRenderings"; | 
					
						
							|  |  |  | import {TagRenderingConfigJson} from "./TagRenderingConfigJson"; | 
					
						
							| 
									
										
										
										
											2020-11-06 01:58:26 +01:00
										 |  |  | import {Translation} from "../../UI/i18n/Translation"; | 
					
						
							| 
									
										
										
										
											2020-11-06 04:02:53 +01:00
										 |  |  | import {Img} from "../../UI/Img"; | 
					
						
							|  |  |  | import Svg from "../../Svg"; | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class LayerConfig { | 
					
						
							|  |  |  |     id: string; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     name: Translation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     description: Translation; | 
					
						
							|  |  |  |     overpassTags: TagsFilter; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     minzoom: number; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     title: TagRenderingConfig; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     titleIcons: TagRenderingConfig[]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 14:46:40 +01:00
										 |  |  |     icon: TagRenderingConfig; | 
					
						
							|  |  |  |     iconSize: TagRenderingConfig; | 
					
						
							|  |  |  |     color: TagRenderingConfig; | 
					
						
							|  |  |  |     width: TagRenderingConfig; | 
					
						
							| 
									
										
										
										
											2020-10-30 00:56:46 +01:00
										 |  |  |     dashArray: TagRenderingConfig; | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     wayHandling: number; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static WAYHANDLING_DEFAULT = 0; | 
					
						
							|  |  |  |     static WAYHANDLING_CENTER_ONLY = 1; | 
					
						
							|  |  |  |     static WAYHANDLING_CENTER_AND_WAY = 2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     hideUnderlayingFeaturesMinPercentage?: number; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     presets: { | 
					
						
							|  |  |  |         title: Translation, | 
					
						
							|  |  |  |         tags: Tag[], | 
					
						
							|  |  |  |         description?: Translation, | 
					
						
							|  |  |  |     }[]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tagRenderings: TagRenderingConfig []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(json: LayerConfigJson, context?: string) { | 
					
						
							|  |  |  |         context = context + "." + json.id; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.id = json.id; | 
					
						
							|  |  |  |         this.name = Translations.T(json.name); | 
					
						
							|  |  |  |         this.description = Translations.T(json.name); | 
					
						
							|  |  |  |         this.overpassTags = FromJSON.Tag(json.overpassTags, context + ".overpasstags"); | 
					
						
							|  |  |  |         this.minzoom = json.minzoom; | 
					
						
							|  |  |  |         this.wayHandling = json.wayHandling ?? 0; | 
					
						
							|  |  |  |         this.hideUnderlayingFeaturesMinPercentage = json.hideUnderlayingFeaturesMinPercentage ?? 0; | 
					
						
							|  |  |  |         this.title = new TagRenderingConfig(json.title); | 
					
						
							| 
									
										
										
										
											2020-10-30 00:56:46 +01:00
										 |  |  |         this.presets = (json.presets ?? []).map(pr => | 
					
						
							|  |  |  |             ({ | 
					
						
							|  |  |  |                 title: Translations.T(pr.title), | 
					
						
							|  |  |  |                 tags: pr.tags.map(t => FromJSON.SimpleTag(t)), | 
					
						
							|  |  |  |                 description: Translations.T(pr.description) | 
					
						
							|  |  |  |             })) | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /** | 
					
						
							|  |  |  |          * Converts a list of tagRenderingCOnfigJSON in to TagRenderingConfig | 
					
						
							|  |  |  |          * A string is interpreted as a name to call | 
					
						
							|  |  |  |          * @param tagRenderings | 
					
						
							|  |  |  |          */ | 
					
						
							|  |  |  |         function trs(tagRenderings?: (string | TagRenderingConfigJson)[]) { | 
					
						
							|  |  |  |             if (tagRenderings === undefined) { | 
					
						
							|  |  |  |                 return []; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             return tagRenderings.map( | 
					
						
							|  |  |  |                 (renderingJson, i) => { | 
					
						
							|  |  |  |                     if (typeof renderingJson === "string") { | 
					
						
							|  |  |  |                         const shared = SharedTagRenderings.SharedTagRendering[renderingJson]; | 
					
						
							|  |  |  |                         if (shared !== undefined) { | 
					
						
							|  |  |  |                             return shared; | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         throw `Predefined tagRendering ${renderingJson} not found in ${context}`; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     return new TagRenderingConfig(renderingJson, `${context}.tagrendering[${i}]`); | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.tagRenderings = trs(json.tagRenderings); | 
					
						
							|  |  |  |         this.titleIcons = trs(json.titleIcons ?? ["wikipedialink","osmlink"]); | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         function tr(key, deflt) { | 
					
						
							|  |  |  |             const v = json[key]; | 
					
						
							|  |  |  |             if (v === undefined) { | 
					
						
							|  |  |  |                 return new TagRenderingConfig(deflt); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if (typeof v === "string") { | 
					
						
							|  |  |  |                 const shared = SharedTagRenderings.SharedTagRendering[v]; | 
					
						
							|  |  |  |                 if (shared) { | 
					
						
							|  |  |  |                     console.log("Got shared TR:", v, "-->", shared) | 
					
						
							|  |  |  |                     return shared; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             return new TagRenderingConfig(v, context + "." + key); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.title = tr("title", ""); | 
					
						
							| 
									
										
										
										
											2020-11-06 04:02:53 +01:00
										 |  |  |         this.icon = tr("icon", Img.AsData(Svg.bug)); | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |         this.iconSize = tr("iconSize", "40,40,center"); | 
					
						
							|  |  |  |         this.color = tr("color", "#0000ff"); | 
					
						
							|  |  |  |         this.width = tr("width", "7"); | 
					
						
							| 
									
										
										
										
											2020-10-30 00:56:46 +01:00
										 |  |  |         this.dashArray = tr("dashArray", ""); | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |