import WithContextLoader from "./WithContextLoader" import TagRenderingConfig from "./TagRenderingConfig" import { Utils } from "../../Utils" import LineRenderingConfigJson from "./Json/LineRenderingConfigJson" export default class LineRenderingConfig extends WithContextLoader { 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 public readonly leftRightSensitive: boolean constructor(json: LineRenderingConfigJson, context: string) { super(json, context) 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) if (typeof json.offset === "string") { json.offset = parseFloat(json.offset) } this.leftRightSensitive = json.offset !== undefined && json.offset !== 0 this.offset = this.tr("offset", "0") } public GenerateLeafletStyle(tags: {}): { fillColor?: string color: string lineCap: string offset: number weight: number dashArray: string fill?: boolean } { function rendernum(tr: TagRenderingConfig, deflt: number) { const str = Number(render(tr, "" + deflt)) const n = Number(str) if (isNaN(n)) { return deflt } return n } function render(tr: TagRenderingConfig, deflt?: string) { if (tags === undefined) { return deflt } if (tr === undefined) { return deflt } const str = tr?.GetRenderValue(tags)?.txt ?? deflt if (str === "") { return deflt } return Utils.SubstituteKeys(str, tags)?.replace(/{.*}/g, "") } const dashArray = render(this.dashArray) let color = render(this.color, "#00f") if (color.startsWith("--")) { color = getComputedStyle(document.body).getPropertyValue("--catch-detail-color") } const style = { color, dashArray, weight: rendernum(this.width, 5), lineCap: render(this.lineCap), offset: rendernum(this.offset, 0), } const fillStr = render(this.fill, undefined) if (fillStr !== undefined && fillStr !== "") { style["fill"] = fillStr === "yes" || fillStr === "true" } const fillColorStr = render(this.fillColor, undefined) if (fillColorStr !== undefined) { style["fillColor"] = fillColorStr } return style } }