{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/src/internal/individuals-as-points/map/mapCanvas.js"],"names":["MapCanvas","constructor","canvas","dataHandler","projection","transform","scale","geoData","context","getContext","lineWidth","constLineWidth","setColorStore","colorStore","updateScale","updateLineWidth","updateTransform","draw","save","clear","translate","x","y","drawMap","restore","clearRect","width","height","i","length","districtName","properties","locationLookupKey","fill","getFillColor","drawPolygon","missingDataKeys","includes","writeText","missingDataFeatureToTextCoordinates","coordinates","projectedCoordinates","font","fillStyle","text","fillText","feature","geometry","convertColorObjectToRGBAValue","strokeStyle","beginPath","forEach","rings","ring","Array","isArray","coord","drawLine","stroke","closePath","projected","moveTo","lineTo","DefaultColoredMap","r","g","b","opacity","UniqueColoredMap","districtToColor"],"mappings":"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","file":"mapCanvas.js","sourcesContent":["export class MapCanvas {\n  \n  constructor(canvas, dataHandler, projection) {\n    this.canvas = canvas\n    this.transform = {\"k\": 1, \"x\": 0, \"y\": 0}\n    this.scale = 1\n    this.geoData = dataHandler.geoData\n    this.context = canvas.getContext(\"2d\")\n    this.projection = projection\n    this.dataHandler = dataHandler\n    this.lineWidth = 1\n    this.constLineWidth = 1\n  }\n  \n  setColorStore(colorStore) {\n    this.colorStore = colorStore\n  }\n  \n  updateScale(scale){\n    this.scale = scale;\n    this.updateLineWidth()\n  }\n  \n  updateTransform(transform){\n    this.transform = transform;\n  }\n  \n  updateLineWidth() {\n    this.lineWidth = this.constLineWidth / this.scale\n  }\n  \n  draw() {\n    this.context.save()\n    this.clear()\n    this.context.translate(this.transform.x, this.transform.y)\n    this.context.scale(this.scale, this.scale)\n    this.drawMap()\n    this.context.restore()\n  }\n  \n  clear() {\n    this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)\n  }\n  \n  drawMap() {\n    let i = this.geoData.length\n    while(i--){\n      let districtName = this.geoData[i].properties[this.dataHandler.locationLookupKey]\n      let fill = this.getFillColor(districtName) \n      this.drawPolygon(this.geoData[i], fill)\n      if (this.dataHandler.missingDataKeys.includes(districtName)) {\n        this.writeText(districtName, this.dataHandler.missingDataFeatureToTextCoordinates[districtName])\n      }\n    }\n  }\n  \n  writeText(districtName, coordinates) {\n    let projectedCoordinates = this.projection(coordinates)\n    this.context.font = \"15px Arial\"\n    this.context.fillStyle = \"black\"\n    let text = districtName + \" data\"\n    this.context.fillText(text, projectedCoordinates[0], projectedCoordinates[1])\n  }\n  \n  drawPolygon(feature, fill) {\n    let coordinates = feature.geometry.coordinates\n    this.context.fillStyle = this.colorStore.convertColorObjectToRGBAValue(fill)\n    this.context.strokeStyle = \"black\"\n    this.context.lineWidth = this.lineWidth\n    this.context.beginPath()\n    \n    // TODO: make this dynamic for all four levels\n    coordinates.forEach((rings) => {\n      rings.forEach((ring, i) => {\n        if (Array.isArray(ring[0])) {\n          ring.forEach((coord, i) => {\n            this.drawLine(coord, i)\n          })\n        } else {\n          this.drawLine(ring, i)\n        }\n      })\n    })\n\n    this.context.stroke()\n    this.context.closePath()\n    this.context.fill()\n  }\n  \n  drawLine(coord, i) {\n    let projected = this.projection( coord );\n    if (i == 0) {\n      this.context.moveTo(projected[0], projected[1])\n    } else {\n      this.context.lineTo(projected[0], projected[1])\n    }\n  }\n  \n}\n\nexport class DefaultColoredMap extends MapCanvas {\n  \n  getFillColor() {\n    return {r: 255, g: 255, b: 255, opacity: 0}\n  }\n  \n}\n\nexport class UniqueColoredMap extends MapCanvas {\n  \n  getFillColor(districtName) {\n    return this.dataHandler.districtToColor[districtName]\n  }\n  \n}"]}