{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/point-selection.js"],"names":["inside","highlightColor","r","g","b","addSelectionEventListener","points","drawFunction","mb","mp","parentElement","selectPreferences","setUpKeyEventListeners","on","clickedHighlightedPointIndices","calculateClickedPointsIndices","left","multipleSelect","unhighlightPoints","markClickedPoint","right","length","clickedPointIndices","oneClickedPointIndex","lively","openInspector","highlightedPointIndices","i","point","point_polygon","drawing","x","size","y","push","highlighted","forEach","index","color","defaultColor","clickedPointsIndices","handleKeyDown","event","preventDefault","stopPropagation","shiftKey","handleKeyUp","key","keyCode","setAttribute","addEventListener"],"mappings":"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","file":"point-selection.js","sourcesContent":["import inside from \"https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/npm-modules/npm-point-in-polygon.js\"\n\nlet highlightColor = {r: 255, g: 0, b: 255}\n\n// TODO refactor clickedPointIndices to selected Point indices\n\nexport const addSelectionEventListener = (points, drawFunction, mb, mp, parentElement, selectPreferences) => {  \n  \n  setUpKeyEventListeners(parentElement, selectPreferences);\n  \n  mb.on('down', function() {\n    let clickedHighlightedPointIndices = calculateClickedPointsIndices(points, mp)\n    if (mb.left) {\n      if (!selectPreferences.multipleSelect) {\n        unhighlightPoints(points, clickedHighlightedPointIndices[\"highlightedPointIndices\"])\n      }\n      markClickedPoint(points, clickedHighlightedPointIndices[\"clickedPointIndices\"])\n      \n      drawFunction()\n\n    } else if (mb.right && clickedHighlightedPointIndices[\"clickedPointIndices\"].length > 0) {\n      let clickedPointIndices = clickedHighlightedPointIndices[\"clickedPointIndices\"]\n      let oneClickedPointIndex = clickedPointIndices[0]\n      \n      lively.openInspector(points[oneClickedPointIndex])\n    }\n  })\n}\n\nfunction 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\nfunction 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\nfunction markClickedPoint(points, clickedPointsIndices) {\n  clickedPointsIndices.forEach((index) => {\n    points[index].drawing.highlighted = true\n    points[index].drawing.color = highlightColor;\n  })\n  \n  return points\n}\n\n// MULTIPLE SELECT\n\nfunction handleKeyDown(event, selectPreferences) {\n  event.preventDefault();\n  event.stopPropagation();\n\n  if (event.shiftKey) {\n    selectPreferences.multipleSelect = true\n  }\n}\n  \nfunction 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\nfunction 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) => { handleKeyDown(event, selectPreferences) });\n  parentElement.addEventListener(\"keyup\", (event) => { handleKeyUp(event, selectPreferences) });\n\n}\n\n\n\n\n"]}