{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/point-selection2.js"],"names":["inside","Noose","Selector","constructor","parentElement","mb","mp","selectPreferences","inspector","selectedObjects","highlightColor","r","g","b","opacity","history","selector","setUpKeyEventListeners","init","objects","drawFunction","updateSelectableObjects","start","on","event","clickedHighlightedPointIndices","calculateClickedPointsIndices","left","updateSelectedObjects","clickedPointIndices","oneClickedPointIndex","inspect","draw","right","length","preventDefault","stopPropagation","lively","openInspector","noose","select","e","coors","selected","move","console","log","stop","dispose","push","unselectedObjectsIndices","newlySelectedObjects","calculateNewlySelectedObjects","multipleSelect","filter","obj","includes","concat","highlightObjects","dishighlightObjects","unselectedObjectIndices","forEach","index","drawing","highlighted","color","defaultColor","selectedObjectIndices","i","point","point_polygon","x","size","y","calculatedPointsInPolygon","points","polygon","highlightedPointIndices","unhighlightPoints","markClickedPoint","clickedPointsIndices","handleKeyDown","shiftKey","handleKeyUp","key","keyCode","setAttribute","addEventListener"],"mappings":"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","file":"point-selection2.js","sourcesContent":["import inside from \"https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/npm-modules/npm-point-in-polygon.js\"\n\nimport Noose from \"https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/npm-modules/npm-noose.js\"\n\nexport class Selector {\n  constructor(parentElement, mb, mp, selectPreferences, inspector) {\n    this.parentElement = parentElement;\n    this.selectPreferences = selectPreferences;\n    this.selectedObjects = [];\n    this.highlightColor = {r: 245, g: 245, b: 0, opacity: 1}\n    this.history = []\n    this.mb = mb\n    this.mp = mp\n    this.inspector = inspector\n    this.selector = this\n    this.setUpKeyEventListeners(parentElement, selectPreferences)\n  }\n  \n  init(objects, drawFunction) {\n    this.objects = objects;\n    this.drawFunction = drawFunction;\n  }\n  \n  updateSelectableObjects(objects) {\n    this.objects = objects;\n  }\n\n  \n  start() {\n    let selector = this.selector\n    let inspector = this.inspector\n    this.mb.on('down', function(event) {\n      let clickedHighlightedPointIndices = selector.calculateClickedPointsIndices(selector.objects, selector.mp)\n      if (selector.mb.left) {\n        selector.updateSelectedObjects(selector.objects, selector.mp)\n        let clickedPointIndices = clickedHighlightedPointIndices[\"clickedPointIndices\"]\n        let oneClickedPointIndex = clickedPointIndices[0]\n        if (inspector != null) inspector.inspect(selector.objects[oneClickedPointIndex])\n        selector.draw()\n      } else if (selector.mb.right && clickedHighlightedPointIndices[\"clickedPointIndices\"].length > 0) {\n        event.preventDefault()\n        event.stopPropagation()\n        let clickedPointIndices = clickedHighlightedPointIndices[\"clickedPointIndices\"]\n        let oneClickedPointIndex = clickedPointIndices[0]\n        if (inspector == null) {\n          lively.openInspector(selector.objects[oneClickedPointIndex])\n        } else {\n          inspector.inspect(selector.objects[oneClickedPointIndex])\n        }\n      }\n    })\n    this.noose = new Noose(this.parentElement, {\n      select: false,\n      start: function(e, coors, selected) {\n          //selector.selectPreferences.multipleSelect = true;\n      },\n    move: function(e, coors, selected) {\n        console.log(coors)\n      }\n    })\n  }\n  \n  stop() {\n    this.mb.dispose()\n  }\n  draw() {\n    this.drawFunction(this.objects)\n  }\n  \n  updateSelectedObjects(objects, mp) {\n    this.history.push(this.selectedObjects)\n    let unselectedObjectsIndices = []\n    let newlySelectedObjects = this.calculateNewlySelectedObjects(objects, mp)\n    if (!this.selectPreferences.multipleSelect) {\n      unselectedObjectsIndices = this.selectedObjects.filter(obj => !newlySelectedObjects.includes(obj))\n      this.selectedObjects = newlySelectedObjects\n    } else {\n      this.selectedObjects = this.selectedObjects.concat(newlySelectedObjects)\n    }\n    this.highlightObjects(this.selectedObjects)\n    this.dishighlightObjects(unselectedObjectsIndices)\n  }\n  \n  dishighlightObjects(unselectedObjectIndices) {\n    unselectedObjectIndices.forEach((index) => {\n      this.objects[index].drawing.highlighted = false\n      this.objects[index].drawing.color = this.objects[index].drawing.defaultColor\n    })\n  }\n  \n  highlightObjects(selectedObjectIndices) {\n    selectedObjectIndices.forEach((index) => {\n      this.objects[index].drawing.highlighted = true\n      this.objects[index].drawing.color = this.highlightColor\n      console.log(this.objects[index])\n    })\n  }\n  \n  calculateNewlySelectedObjects(objects, mp) {\n    let newlySelectedObjects = []\n    for (let i = 0; i < objects.length; i++) {\n      var point = objects[i]\n      var point_polygon = [\n          [point.drawing.x - point.drawing.size/2, point.drawing.y - point.drawing.size/2],\n          [point.drawing.x + point.drawing.size/2, point.drawing.y - point.drawing.size/2],\n          [point.drawing.x + point.drawing.size/2, point.drawing.y + point.drawing.size/2],\n          [point.drawing.x - point.drawing.size/2, point.drawing.y + point.drawing.size/2]\n        ]  \n      if (inside(mp, point_polygon)) {\n        newlySelectedObjects.push(i)\n      }\n    }\n    return newlySelectedObjects\n  }\n  \n  calculatedPointsInPolygon(points, polygon){}\n  \n\n  calculateClickedPointsIndices(points, mp) {\n    let clickedPointIndices = []\n    let highlightedPointIndices = []\n\n    for (let i = 0; i < points.length; i++) {\n      var point = points[i]\n      var point_polygon = [\n          [point.drawing.x - point.drawing.size/2, point.drawing.y - point.drawing.size/2],\n          [point.drawing.x + point.drawing.size/2, point.drawing.y - point.drawing.size/2],\n          [point.drawing.x + point.drawing.size/2, point.drawing.y + point.drawing.size/2],\n          [point.drawing.x - point.drawing.size/2, point.drawing.y + point.drawing.size/2]\n        ]  \n      if (inside(mp, point_polygon)) {\n        clickedPointIndices.push(i)\n      }\n\n      if (point.drawing.highlighted) {\n        highlightedPointIndices.push(i)\n      }\n    }\n\n    return {\"clickedPointIndices\": clickedPointIndices, \"highlightedPointIndices\": highlightedPointIndices}\n  }\n\n  unhighlightPoints(points, highlightedPointIndices) {\n    highlightedPointIndices.forEach((index) => {\n      points[index].drawing.highlighted = false\n      points[index].drawing.color = points[index].drawing.defaultColor\n    })\n\n    return points\n  }\n\n  markClickedPoint(points, clickedPointsIndices) {\n    clickedPointsIndices.forEach((index) => {\n      points[index].drawing.highlighted = true\n      points[index].drawing.color = this.highlightColor;\n    })\n\n    return points\n  }\n\n  // MULTIPLE SELECT\n\n  handleKeyDown(event, selectPreferences) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (event.shiftKey) {\n      selectPreferences.multipleSelect = true\n    }\n  }\n\n  handleKeyUp(event, selectPreferences) {\n\n    let key = event.keyCode;\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    // needed because event.shiftKey is not set on an keyup event\n    switch (key) {\n      case 16: //shift\n        selectPreferences.multipleSelect = false\n        break;\n    }\n  }\n setUpKeyEventListeners(parentElement, selectPreferences) {\n    // this allows parentElement to get focus and thus capture key events\n    parentElement.setAttribute(\"tabindex\", 0);\n\n    parentElement.addEventListener(\"keydown\", (event) => { this.handleKeyDown(event, selectPreferences) });\n    parentElement.addEventListener(\"keyup\", (event) => { this.handleKeyUp(event, selectPreferences) });\n\n  }\n\n}"]}