{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/components/bp2019-map-widget.js"],"names":["assertListenerInterface","KenyaMap","SomaliaMap","Morph","d3","FreehandDrawer","inside","SelectActionType","InspectActionType","FilterActionType","ColorActionType","INITIAL_POINT_SIZE","Bp2019MapWidget","initialize","iamReady","ready","Promise","resolve","listeners","name","currentMap","drawingCanvas","get","uniquePolygonCanvas","uniqueIndividualCanvas","canvasWindow","freehandSelectionSVG","controlWidget","controlPanelContainer","addSizeListener","collapsed","strokeStyle","currentActions","drawer","addListener","attachedCallback","detachedCallback","setStrokeStyle","setGeoData","geoData","data","setContainerType","type","containerType","updateStrokeStyle","onSizeChange","setExtent","extent","setDataProcessor","dataProcessor","_propagateDataProcessor","setColorStore","colorStore","getData","individuals","setData","deleteSelections","currentExtent","_setMapSize","x","y","_initializeWithData","lively","pt","setLocalControls","currentCanvasExtent","getExtent","select","attr","updateZoom","activate","applyAction","action","_dispatchAction","listener","push","freehandSelectionCreated","draw","drawSelections","applyTransform","zoomer","transform","freehandSelectionDeleted","selection","dispatchEvent","CustomEvent","detail","bubbles","freehandSelectionOnContextMenu","evt","selectionSVG","linePointsArray","linePoints","map","point","selectedIndividuals","filter","drawing","position","freehandSelectionSVGElement","clientX","clientY","individualsSelection","selectionColor","color","unsetLocalControls","myWindow","findWindow","isWindow","style","overflow","display","parentPosition","getGlobalPosition","setGlobalPosition","addPt","parentElement","zIndex","size","width","height","_addEventListenersForSelection","start","_removeEventListenersForSelection","stop","_addEventListenersForNavigation","addEventListenersForNavigation","_removeEventListenersForNavigation","removeEventListenersForNavigation","_addShiftKeyEventListener","setAttribute","addEventListener","event","key","_registerControlWidget","districtTooltipDiv","getDistrictTooltip","_buildMap","initializeAfterDataFetch","_applyActionToListeners","forEach","clear","datasetName","Error","_initializeCurrentMap","create","getType","_handleColorAction","_handleInspectAction","_handleSelectAction","_handleFilterAction","_handleNotSupportedAction","colorAction","runOn","individualClicker","deselectSelectedIndividual","selectIndividual","individual","_getIndividualById","id","filteredIndividuals","includes","dataHandler","selectedIndividual","updateIndividuals","_handleFreeHandSelection","zoomLevel","currentZoomLevel","selectedPoints","i","length"],"mappings":"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","file":"bp2019-map-widget.js","sourcesContent":["import { assertListenerInterface } from \"../src/internal/individuals-as-points/common/interfaces.js\"\nimport { KenyaMap, SomaliaMap } from \"../src/internal/individuals-as-points/map/map.js\"\n\nimport Morph from \"src/components/widgets/lively-morph.js\"\nimport d3 from 'src/external/d3.v5.js'\n\nimport FreehandDrawer from '../src/internal/individuals-as-points/common/drawFreehand.js'\nimport inside from \"../src/internal/individuals-as-points/common/npm-point-in-polygon.js\"\n\nimport { SelectActionType, InspectActionType, FilterActionType, ColorActionType } from '../src/internal/individuals-as-points/common/actions.js'\n\nconst INITIAL_POINT_SIZE = 5\n\nexport default class Bp2019MapWidget extends Morph {\n  async initialize() {\n    var iamReady \n    this.ready = new Promise( resolve => {\n      iamReady = resolve\n    })\n    this.listeners = []\n    this.name = \"bp2019-map-widget\"\n    this.currentMap\n    this.drawingCanvas = this.get(\"#bp2019-map-widget-drawing-canvas\")\n    this.uniquePolygonCanvas = this.get(\"#bp2019-map-widget-unique-polygon-canvas\")\n    this.uniqueIndividualCanvas = this.get(\"#bp2019-map-widget-unique-individual-canvas\")\n    this.canvasWindow = this.get(\"#bp2019-map-widget-canvas-container\")\n    this.freehandSelectionSVG = this.get(\"#bp2019-map-widget-free-hand-selection-svg\")\n    this.controlWidget = this.get(\"bp2019-map-control-widget\")\n    this.controlPanelContainer = this.get(\"#map-control-widget-container\")\n    this.controlWidget.addSizeListener(this)\n    this.collapsed = false\n    this.strokeStyle = false\n    \n    this.currentActions = {}\n    \n    // freehand drawCanvas the size of canvas-window\n    this.drawer = new FreehandDrawer(this.canvasWindow, this.drawingCanvas, this.freehandSelectionSVG)\n    this.drawer.addListener(this)\n        \n    iamReady()\n  }\n  \n  attachedCallback() {\n    // here goes checking for windows stuff\n  }\n  \n  detachedCallback() {\n\n  }\n                                            \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  // *** Interface to application ***\n  \n  \n  setStrokeStyle(strokeStyle) {\n    this.strokeStyle = strokeStyle\n  }\n  \n  setGeoData(geoData) {\n    this.geoData = geoData.data\n  }\n  \n  setContainerType(type) {\n    this.containerType = type\n  }\n  \n  updateStrokeStyle(strokeStyle) {\n    this.strokeStyle = strokeStyle\n    this.currentMap.updateStrokeStyle(this.strokeStyle)\n  }\n  \n  onSizeChange(collapsed) {\n    this.collapsed = collapsed\n    this.setExtent(this.extent)\n  }\n  \n  setDataProcessor(dataProcessor) {\n    this.dataProcessor = dataProcessor  \n    this._propagateDataProcessor()\n  }\n  \n  setColorStore(colorStore) {\n    this.colorStore = colorStore\n  }\n  \n  getData() {\n    return this.individuals\n  }\n  \n  async setData(individuals) {\n    this.drawer.deleteSelections()\n    let currentExtent = this.extent\n    if (this.currentMap) {\n      this._setMapSize({x: 1000, y: 1000})\n    }\n    this.individuals = individuals\n    await this._initializeWithData()\n    this.setExtent(currentExtent)\n  }\n  \n  setExtent(extent) {\n    this.extent = extent\n    if (this.collapsed) {\n      if (this.containerType === \"pane\") {\n        lively.setExtent(this.canvasWindow, lively.pt(extent.x, extent.y))\n        this.controlWidget.setExtent(lively.pt(45, extent.y))\n        this.setLocalControls()\n      } else {\n        lively.setExtent(this.canvasWindow, lively.pt(extent.x - 50, extent.y))\n        this.controlWidget.setExtent(lively.pt(45, extent.y))\n      }\n      \n    } else {\n      if (this.containerType === \"pane\") {\n        lively.setExtent(this.canvasWindow, lively.pt(extent.x, extent.y))\n        this.controlWidget.setExtent(lively.pt(200, extent.y))\n        this.setLocalControls()\n      } else {\n        lively.setExtent(this.canvasWindow, lively.pt(extent.x * 0.73, extent.y))\n        this.controlWidget.setExtent(lively.pt(extent.x * 0.20, extent.y))\n      }\n    }\n    \n    let currentCanvasExtent = lively.getExtent(this.canvasWindow)\n    d3.select(this.freehandSelectionSVG)\n      .attr(\"width\", currentCanvasExtent.x + \"px\")\n      .attr(\"height\", currentCanvasExtent.y + \"px\")\n\n    if (this.currentMap) { // should be removed\n      // refactor into setter in map\n      this._setMapSize(currentCanvasExtent)\n      this.currentMap.updateZoom()\n    }\n  }\n  \n  async activate() {\n    // should be removed\n    await this.ready\n    if (this.currentMap) {\n      this.currentMap.updateZoom()\n    }\n  }\n  \n  // *** Interface to control menu ***\n  \n  async applyAction(action){\n    this._dispatchAction(action)   \n  }\n  \n  addListener(listener) {\n    assertListenerInterface(listener)\n    this.listeners.push(listener)\n  }\n  \n  freehandSelectionCreated() {\n    this.currentMap.draw()\n    this.drawer.drawSelections()\n    this.drawer.applyTransform(this.currentMap.zoomer.transform)\n  }\n  \n  freehandSelectionDeleted(selection) {\n    this.currentMap.draw()\n    this.drawer.drawSelections()\n    this.drawer.applyTransform(this.currentMap.zoomer.transform)\n    \n    this.dispatchEvent(new CustomEvent(\"freehand-selection-deleted\", {\n      detail: {\n        selection: selection\n      },\n      bubbles: true\n    }))\n  }\n  \n  freehandSelectionOnContextMenu(evt, selection, selectionSVG) {\n    let linePointsArray = selection.linePoints.map(point => [point.x, point.y])\n    let selectedIndividuals = this.individuals.filter(point => inside([point.drawing.position.x, point.drawing.position.y], linePointsArray))\n    \n    this.dispatchEvent(new CustomEvent(\"freehand-selection-contextmenu\", {\n      detail: {\n        freehandSelectionSVGElement: selectionSVG,\n        clientX: evt.clientX,\n        clientY: evt.clientY,\n        individualsSelection: {selectedIndividuals: selectedIndividuals, selectionColor: selection.color}\n      },\n      bubbles: true\n    }))\n  }\n  \n  setLocalControls() {\n    this.unsetLocalControls()\n    \n    var myWindow = lively.findWindow(this)\n    if (myWindow.isWindow) {\n      myWindow.get(\".window-content\").style.overflow = \"visible\"\n    }\n    \n    this.controlPanelContainer.style.display = \"block\"\n    \n    let parentPosition = lively.getGlobalPosition(this)\n    \n    lively.setGlobalPosition(\n      this.controlPanelContainer, \n      parentPosition.addPt(lively.pt(lively.getExtent(this.parentElement).x, 0))\n    )\n\n    this.controlPanelContainer.style.zIndex = 20000\n  }\n  \n  unsetLocalControls() {\n    this.controlPanelContainer.style.display = \"none\"\n  }\n\n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _setMapSize(size){\n    this.currentMap.width = size.x\n    this.currentMap.height = size.y\n    this.drawingCanvas.width = size.x\n    this.drawingCanvas.height = size.y\n    this.uniquePolygonCanvas.width = size.x\n    this.uniquePolygonCanvas.height = size.y\n    this.uniqueIndividualCanvas.width = size.x\n    this.uniqueIndividualCanvas.height = size.y    \n  }\n  \n  _addEventListenersForSelection() {\n    this.drawer.start()\n  }\n  \n  _removeEventListenersForSelection() {\n    this.drawer.stop()\n  }\n  \n  _addEventListenersForNavigation() {\n    this.currentMap.addEventListenersForNavigation()\n  }\n  \n  _removeEventListenersForNavigation() {\n    this.currentMap.removeEventListenersForNavigation()\n  }\n  \n  _addShiftKeyEventListener() {\n    // d3's zooming interaction which is used for navigating consumes all of it's used events, which are the same events required for the selection interaction\n    \n    this.drawingCanvas.setAttribute(\"tabindex\", 0) //necessary for the ability of the canvas to receive key events\n    this.drawingCanvas.addEventListener(\"keydown\", (event) => {\n      if (event.key == \"Shift\") {\n        this._addEventListenersForSelection()\n        this._removeEventListenersForNavigation()\n      }\n    })\n    this.drawingCanvas.addEventListener(\"keyup\", (event) => {\n      if (event.key == \"Shift\") {\n        this._addEventListenersForNavigation()\n        this._removeEventListenersForSelection()\n      }\n    })\n  } \n  \n  _propagateDataProcessor() {\n    this.controlWidget.setDataProcessor(this.dataProcessor)  \n  }\n  \n  async _initializeWithData() {\n    this.controlWidget = this._registerControlWidget()\n    this.districtTooltipDiv = this.controlWidget.getDistrictTooltip()\n    \n    await this._buildMap()\n    \n    this._addShiftKeyEventListener()\n    this._addEventListenersForNavigation()\n  }\n  \n  _registerControlWidget() {\n    let controlWidget = this.get(\"#bp2019-map-control-widget\")\n    controlWidget.addListener(this)\n    controlWidget.initializeAfterDataFetch()\n    \n    return controlWidget\n  }\n  \n  _applyActionToListeners(action){\n    this.listeners.forEach((listener) => {\n      listener.applyAction(action);\n    })\n  }\n  \n  async _buildMap() {\n    if (this.currentMap) {\n      this.currentMap.clear()\n    }\n    switch(this.dataProcessor.datasetName) {\n      case 'Somalia':\n        this.currentMap = new SomaliaMap(this, INITIAL_POINT_SIZE)\n        break\n      case 'Kenya':\n        this.currentMap = new KenyaMap(this, INITIAL_POINT_SIZE)\n        break\n      default:\n        throw new Error(\"this dataset is not supported\")\n    }\n    \n    this._initializeCurrentMap()\n    await this.currentMap.create(this.individuals)\n    \n    this.currentMap.setStrokeStyle(this.strokeStyle)\n  }\n  \n  _initializeCurrentMap() {\n    this.currentMap.setDataProcessor(this.dataProcessor)\n    this.currentMap.setColorStore(this.colorStore)\n    this.currentMap.setGeoData(this.geoData)\n  }\n  \n  _dispatchAction(action) {\n    switch(action.getType()) {\n      case (ColorActionType):\n        this._handleColorAction(action)\n        break\n      case (InspectActionType):\n        this._handleInspectAction(action)\n        break\n      case (SelectActionType):\n        this._handleSelectAction(action)\n        break\n      case (FilterActionType):\n        this._handleFilterAction(action)\n        break\n      default:\n        this._handleNotSupportedAction(action)\n     }\n  }\n  \n  _handleColorAction(colorAction) {\n    colorAction.runOn(this.individuals)  \n    this.currentMap.draw()\n  }\n  \n  _handleInspectAction(action) {\n    this.currentActions[\"inspect\"] = action\n    action.runOn(this.individuals)\n    this.currentMap.individualClicker.deselectSelectedIndividual()\n    if (!action.selection) {\n      this.currentMap.individualClicker.selectIndividual(null)\n    } else {\n      let individual = this._getIndividualById(action.selection.id)\n      this.currentMap.individualClicker.selectIndividual(individual)\n    }\n    \n    this.currentMap.draw()\n  }\n  \n  _handleFilterAction(action){\n    let filteredIndividuals = action.runOn(this.individuals)\n    if (!filteredIndividuals.includes(this.currentMap.dataHandler.selectedIndividual)) {\n      this.currentMap.individualClicker.deselectSelectedIndividual()\n    }\n    \n    this.currentMap.updateIndividuals(filteredIndividuals)\n  }\n  \n  _handleSelectAction(action) {\n    action.runOn(this.individuals)\n    this.currentMap.draw()\n  }\n  \n  _handleFreeHandSelection(linePoints, event) {\n    let zoomLevel = this.currentMap.zoomer.currentZoomLevel\n    let linePointsArray = linePoints.map(point => [point.x / zoomLevel, point.y / zoomLevel])\n    let selectedPoints = this.individuals.filter(point => inside([point.drawing.position.x, point.drawing.position.y], linePointsArray))\n    \n    this.dispatchEvent(new CustomEvent(\"selection-contextmenu\", {\n      detail: {\n        selectedPoints: selectedPoints,\n        clientX: event.clientX,\n        clientY: event.clientY,\n        selectionColor: \"CadetBlue\"\n      },\n      bubbles: true\n    }))\n  }\n  \n  _handleNotSupportedAction(action) {}\n  \n  _getIndividualById(id) {\n    for (let i = 0; i < this.individuals.length; i++) {\n      if (this.individuals[i].id === id) {\n        return this.individuals[i]\n      }\n    }\n  }\n\n}"]}