MapComplete/src/Models/ThemeConfig/LineRenderingConfig.ts

55 lines
2.2 KiB
TypeScript

import WithContextLoader from "./WithContextLoader"
import TagRenderingConfig from "./TagRenderingConfig"
import LineRenderingConfigJson from "./Json/LineRenderingConfigJson"
import { TagUtils } from "../../Logic/Tags/TagUtils"
import { TagsFilter } from "../../Logic/Tags/TagsFilter"
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
public readonly imageAlongWay: { if?: TagsFilter; then: string }[]
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)
this.imageAlongWay = []
if (json.imageAlongWay) {
if (typeof json.imageAlongWay === "string") {
this.imageAlongWay.push({
then: json.imageAlongWay,
})
} else {
for (let i = 0; i < json.imageAlongWay.length; i++) {
const imgAlong = json.imageAlongWay[i]
const ctx = context + ".imageAlongWay[" + i + "]"
if (!imgAlong.then.endsWith(".png")) {
throw "An imageAlongWay should always be a PNG image"
}
this.imageAlongWay.push({
if: TagUtils.Tag(imgAlong.if, ctx),
then: imgAlong.then,
})
}
}
}
if (typeof json.offset === "string") {
json.offset = parseFloat(json.offset)
}
this.leftRightSensitive = json.offset !== undefined && json.offset !== 0
this.offset = this.tr("offset", "0")
}
}