mapcomplete/Models/ThemeConfig/LineRenderingConfig.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

92 lines
3 KiB
TypeScript
Raw Normal View History

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
2021-11-08 14:18:45 +01:00
public readonly lineCap: TagRenderingConfig
public readonly offset: TagRenderingConfig
2021-11-08 14:18:45 +01:00
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", "")
2021-11-08 14:18:45 +01:00
this.lineCap = this.tr("lineCap", "round")
2021-11-08 19:46:43 +01:00
this.fill = this.tr("fill", undefined)
this.fillColor = this.tr("fillColor", undefined)
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
this.offset = this.tr("offset", "0")
}
public GenerateLeafletStyle(tags: {}): {
2021-11-08 19:46:43 +01:00
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
}
2022-01-26 21:40:38 +01:00
if (tr === undefined) {
return deflt
}
const str = tr?.GetRenderValue(tags)?.txt ?? deflt
2021-11-08 19:46:43 +01:00
if (str === "") {
return deflt
}
return Utils.SubstituteKeys(str, tags)?.replace(/{.*}/g, "")
}
2021-10-28 01:26:35 +02:00
const dashArray = render(this.dashArray)
let color = render(this.color, "#00f")
if (color.startsWith("--")) {
color = getComputedStyle(document.body).getPropertyValue("--catch-detail-color")
}
2022-01-26 21:40:38 +01:00
2021-11-08 19:46:43 +01:00
const style = {
color,
dashArray,
2021-11-08 14:18:45 +01:00
weight: rendernum(this.width, 5),
lineCap: render(this.lineCap),
2021-11-08 19:46:43 +01:00
offset: rendernum(this.offset, 0),
}
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-11-08 19:46:43 +01:00
return style
}
}