{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/groupchaining/node-modules/groupingMenu.js"],"names":["GroupingMenu","constructor","attributes","currentGroupings","initGroupingSelectBox","containerElement","world","addGrouping","removeGrouping","selectContainer","groupingBar","id","appendChild","uniqueValues","textElement","selectElement","buttonElement","sort","innerHTML","value","options","length","Option","addEventListener","selectedIndex","includes","addGroupingAndRemoveGroupingButton","removeGroupingButton","disablePreviousRemoveGroupingButton","push","setAttribute","clickedGroupingKey","getAttribute","filter","groupingKey","removeChild","enableLastRemoveGroupingButton","getFilteredData","points","activeFilterExpr","getLastButtonOfButtonBar","disabled","previousGroupingKey","slice","lively","query"],"mappings":"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","file":"groupingMenu.js","sourcesContent":["\nexport class GroupingMenu {\n  \n  constructor(attributes) {\n    this.attributes = attributes;\n    this.currentGroupings = [];\n  }\n  \n  initGroupingSelectBox(containerElement, world, addGrouping, removeGrouping) {\n    let selectContainer = <div></div>\n    let groupingBar = <div></div>\n    selectContainer.id = \"selectContainer\"\n    groupingBar.id = \"filter-bar\"\n    this.world = world;\n    \n    containerElement.appendChild(selectContainer)\n    containerElement.appendChild(groupingBar)\n    \n    \n    let uniqueValues = this.attributes;\n    let textElement = <div></div>\n    let selectElement = <select></select>\n    let buttonElement = <button>Group</button>\n\n    uniqueValues.sort()\n\n    selectElement.id = \"group-select\"\n    buttonElement.id = \"group-button\"\n    textElement.innerHTML =  \"Group: \"\n\n    for (let value of uniqueValues) {\n      selectElement.options[selectElement.options.length] = new Option(value)\n    }\n\n    selectContainer.appendChild(textElement)\n    selectContainer.appendChild(selectElement)\n    selectContainer.appendChild(buttonElement)\n\n\n    buttonElement.addEventListener(\"click\", () => {\n\n      let value = selectElement.options[selectElement.selectedIndex].value\n\n      if (!this.currentGroupings.includes(value)) {\n        this.addGroupingAndRemoveGroupingButton(value, groupingBar, removeGrouping)\n        addGrouping(value);\n      }\n\n    })\n  }\n  \n  addGroupingAndRemoveGroupingButton(value, groupingBar, removeGrouping) {\n    let removeGroupingButton = <button></button>\n    this.disablePreviousRemoveGroupingButton();\n    this.currentGroupings.push(value);\n\n    removeGroupingButton.innerHTML = \"Grouping: \" + value;\n    removeGroupingButton.setAttribute(\"value\", value);\n    removeGroupingButton.id = value;\n\n    groupingBar.appendChild(removeGroupingButton)\n    \n    removeGroupingButton.addEventListener(\"click\", () => {\n      \n      let clickedGroupingKey = removeGroupingButton.getAttribute(\"value\");\n      this.currentGroupings= this.currentGroupings\n        .filter(groupingKey => groupingKey != clickedGroupingKey)\n      removeGrouping(clickedGroupingKey);\n      groupingBar.removeChild(removeGroupingButton);\n      this.enableLastRemoveGroupingButton();\n    });\n  }\n  \n  getFilteredData(points) {\n    return points.filter(this.activeFilterExpr)\n  }\n  \n  disablePreviousRemoveGroupingButton(){\n    if(this.currentGroupings.length >= 1) {\n      let removeGroupingButton = this.getLastButtonOfButtonBar();\n      removeGroupingButton.disabled = true;\n    }\n  }\n  \n  enableLastRemoveGroupingButton(){\n    if(this.currentGroupings.length >= 1) {\n      let removeGroupingButton =  this.getLastButtonOfButtonBar();\n      removeGroupingButton.disabled = false;\n    }\n  }\n  \n  getLastButtonOfButtonBar() {\n    let previousGroupingKey = this.currentGroupings.slice(-1)[0];\n    let removeGroupingButton = lively.query(this.world, `#${previousGroupingKey}`);\n    return removeGroupingButton;\n  }\n  \n}\n"]}