| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | import WithContextLoader from "./WithContextLoader" | 
					
						
							|  |  |  | import TagRenderingConfig from "./TagRenderingConfig" | 
					
						
							|  |  |  | import { Utils } from "../../Utils" | 
					
						
							|  |  |  | import LineRenderingConfigJson from "./Json/LineRenderingConfigJson" | 
					
						
							| 
									
										
										
										
											2021-10-20 02:01:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class LineRenderingConfig extends WithContextLoader { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     public readonly color: TagRenderingConfig | 
					
						
							|  |  |  |     public readonly width: TagRenderingConfig | 
					
						
							|  |  |  |     public readonly dashArray: TagRenderingConfig | 
					
						
							|  |  |  |     public readonly lineCap: TagRenderingConfig | 
					
						
							|  |  |  |     public readonly offset: TagRenderingConfig | 
					
						
							|  |  |  |     public readonly fill: TagRenderingConfig | 
					
						
							|  |  |  |     public readonly fillColor: TagRenderingConfig | 
					
						
							| 
									
										
										
										
											2021-10-22 01:42:44 +02:00
										 |  |  |     public readonly leftRightSensitive: boolean | 
					
						
							| 
									
										
										
										
											2021-10-28 03:15:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 02:01:27 +02:00
										 |  |  |     constructor(json: LineRenderingConfigJson, context: string) { | 
					
						
							|  |  |  |         super(json, context) | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         this.color = this.tr("color", "#0000ff") | 
					
						
							|  |  |  |         this.width = this.tr("width", "7") | 
					
						
							|  |  |  |         this.dashArray = this.tr("dashArray", "") | 
					
						
							|  |  |  |         this.lineCap = this.tr("lineCap", "round") | 
					
						
							|  |  |  |         this.fill = this.tr("fill", undefined) | 
					
						
							|  |  |  |         this.fillColor = this.tr("fillColor", undefined) | 
					
						
							| 
									
										
										
										
											2021-10-28 03:15:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-23 16:51:31 +01:00
										 |  |  |         if (typeof json.offset === "string") { | 
					
						
							|  |  |  |             json.offset = parseFloat(json.offset) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.leftRightSensitive = json.offset !== undefined && json.offset !== 0 | 
					
						
							| 
									
										
										
										
											2021-10-28 03:15:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         this.offset = this.tr("offset", "0") | 
					
						
							| 
									
										
										
										
											2021-10-20 02:01:27 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     public GenerateLeafletStyle(tags: {}): { | 
					
						
							|  |  |  |         fillColor?: string | 
					
						
							|  |  |  |         color: string | 
					
						
							|  |  |  |         lineCap: string | 
					
						
							|  |  |  |         offset: number | 
					
						
							|  |  |  |         weight: number | 
					
						
							|  |  |  |         dashArray: string | 
					
						
							|  |  |  |         fill?: boolean | 
					
						
							|  |  |  |     } { | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |         function rendernum(tr: TagRenderingConfig, deflt: number) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             const str = Number(render(tr, "" + deflt)) | 
					
						
							|  |  |  |             const n = Number(str) | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |             if (isNaN(n)) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 return deflt | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             return n | 
					
						
							| 
									
										
										
										
											2021-10-20 02:01:27 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |         function render(tr: TagRenderingConfig, deflt?: string) { | 
					
						
							|  |  |  |             if (tags === undefined) { | 
					
						
							|  |  |  |                 return deflt | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-01-26 21:40:38 +01:00
										 |  |  |             if (tr === undefined) { | 
					
						
							|  |  |  |                 return deflt | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             const str = tr?.GetRenderValue(tags)?.txt ?? deflt | 
					
						
							| 
									
										
										
										
											2021-11-08 19:46:43 +01:00
										 |  |  |             if (str === "") { | 
					
						
							|  |  |  |                 return deflt | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             return Utils.SubstituteKeys(str, tags)?.replace(/{.*}/g, "") | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-10-20 02:01:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         const dashArray = render(this.dashArray) | 
					
						
							|  |  |  |         let color = render(this.color, "#00f") | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |         if (color.startsWith("--")) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             color = getComputedStyle(document.body).getPropertyValue("--catch-detail-color") | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-01-26 21:40:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-08 19:46:43 +01:00
										 |  |  |         const style = { | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |             color, | 
					
						
							|  |  |  |             dashArray, | 
					
						
							| 
									
										
										
										
											2021-11-08 14:18:45 +01:00
										 |  |  |             weight: rendernum(this.width, 5), | 
					
						
							|  |  |  |             lineCap: render(this.lineCap), | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             offset: rendernum(this.offset, 0), | 
					
						
							| 
									
										
										
										
											2021-11-08 19:46:43 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const fillStr = render(this.fill, undefined) | 
					
						
							|  |  |  |         if (fillStr !== undefined && fillStr !== "") { | 
					
						
							|  |  |  |             style["fill"] = fillStr === "yes" || fillStr === "true" | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-01-26 21:40:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-08 19:46:43 +01:00
										 |  |  |         const fillColorStr = render(this.fillColor, undefined) | 
					
						
							| 
									
										
										
										
											2022-01-26 21:40:38 +01:00
										 |  |  |         if (fillColorStr !== undefined) { | 
					
						
							| 
									
										
										
										
											2021-11-08 19:46:43 +01:00
										 |  |  |             style["fillColor"] = fillColorStr | 
					
						
							| 
									
										
										
										
											2021-10-22 01:07:32 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-11-08 19:46:43 +01:00
										 |  |  |         return style | 
					
						
							| 
									
										
										
										
											2021-10-20 02:01:27 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | } |