"use strict"; import chroma from 'chroma-js'; import marker_svg from '../marker-embed.svg'; import gradients from './Gradients.mjs'; class MarkerGenerator { constructor() { } marker_default() { return marker_svg.replace("{{colour_a}}", "#1975c8") .replace("{{colour_b}}", "#5ea6d5") .replace("{{colour_dark}}", "#2e6d99"); } marker(value, type) { let col = this.get_colour(value, type); let result = marker_svg.replace(/\{\{colour_a\}\}/g, col.darken(0.25).hex()) .replace(/\{\{colour_b\}\}/g, col.brighten(0.25).hex()) .replace(/\{\{colour_dark\}\}/g, col.darken(1)) .replace(/\{\{id_grad\}\}/g, `marker-grad-${btoa(`${type}-${value}`).replace(/\+/g, "-").replace(/\//g, "_")}`); return result; } /** * Fetches the colour for a given value of a given type. * Currently a gradient is not used - i.e. a value is coloured according to * the last threshold it crossed in the associated gradient definition. * TODO: Calculate the gradient instead. * @param {number} value The value to calculate the colour for. * @param {string} type The type of measurement value we're working with. Determines the gradient to use. * @return {chroma} The calculated colour. */ get_colour(value, type) { if(typeof gradients[type] == "undefined") { console.warn(`[MarkerGenerator] Warning: Unknown gradient type '${type}', using unknown instead.`); type = "unknown"; } return gradients[type].chroma(value); } } export default MarkerGenerator;