forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import PointRenderingConfigJson from "./Json/PointRenderingConfigJson";
 | 
						|
import WithContextLoader from "./WithContextLoader";
 | 
						|
import {UIEventSource} from "../../Logic/UIEventSource";
 | 
						|
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 offset: 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.leftRightSensitive = json.offset !== undefined && json.offset !== 0 && json.offset !== "0"
 | 
						|
 | 
						|
        this.offset = this.tr("offset", "0");
 | 
						|
    }
 | 
						|
 | 
						|
    public GenerateLeafletStyle(tags: {}):
 | 
						|
        {
 | 
						|
            color: string,
 | 
						|
            weight: number,
 | 
						|
            dashArray: string,
 | 
						|
            offset: number
 | 
						|
        } {
 | 
						|
        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
 | 
						|
            }
 | 
						|
            const str = tr?.GetRenderValue(tags)?.txt ?? 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 weight = rendernum(this.width, 5);
 | 
						|
        const offset = rendernum(this.offset, 0)
 | 
						|
        return {
 | 
						|
            color,
 | 
						|
            weight,
 | 
						|
            dashArray,
 | 
						|
            offset
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
} |