{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH-stable/src/internal/individuals-as-points/venn/interaction-manager.js"],"names":["d3","InteractionManager","constructor","canvas","vennDiagram","transform","zoomIdentity","radius","draggableSubjects","toggleSubjects","registerDragging","subjects","select","call","drag","subject","_dragSubject","on","_dragged","_dragended","registerToggle","_clickSubject","registerDoubleClick","doubleClickSubjects","_doubleClickSubject","setDraggingSubjects","setToggleSubjects","setDoubleClickSubjects","doubleClickSubject","_getSubjectUnderMouse","toggleDoubleClick","toggleSubject","toggleSingleClick","position","mouse","x","y","i","dx","dy","length","node","event","fx","invertX","fy","invertY","updatePosition","updateDistribution"],"mappings":"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","file":"interaction-manager.js","sourcesContent":["import d3 from \"src/external/d3.v5.js\";\n\nexport default class InteractionManager {\n  constructor(canvas, vennDiagram) {\n    this.canvas = canvas\n    this.vennDiagram = vennDiagram\n    this.transform = d3.zoomIdentity;\n    this.radius = 35\n    this.draggableSubjects = []\n    this.toggleSubjects = []\n  }\n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n  registerDragging(subjects) {\n    this.draggableSubjects = subjects\n    \n    d3.select(this.canvas)\n      .call(d3.drag()\n            .subject(() => this._dragSubject())\n            .on(\"drag\", () => this._dragged())\n            .on(\"end\", () => this._dragended()))\n  }\n  \n  registerToggle(subjects) {\n    this.toggleSubjects = subjects\n    d3.select(this.canvas)\n      .on(\"click\", () => this._clickSubject())\n  }\n  \n  registerDoubleClick(subjects) {\n    this.doubleClickSubjects = subjects\n    d3.select(this.canvas)\n      .on(\"dblclick\", () => this._doubleClickSubject())\n  }\n  \n  setDraggingSubjects(subjects) {\n    this.draggableSubjects = subjects\n  }\n  \n  setToggleSubjects(subjects) {\n    this.toggleSubjects = subjects\n  }\n  \n  setDoubleClickSubjects(subjects) {\n    this.doubleClickSubjects = subjects\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _doubleClickSubject() {\n    let doubleClickSubject = this._getSubjectUnderMouse(this.doubleClickSubjects)\n    \n    if(doubleClickSubject) doubleClickSubject.toggleDoubleClick()\n  }\n  \n  _clickSubject() {\n    let toggleSubject = this._getSubjectUnderMouse(this.toggleSubjects)\n    \n    if(toggleSubject) toggleSubject.toggleSingleClick()\n  }\n  \n  _getSubjectUnderMouse(subjects) {\n    let position = d3.mouse(this.canvas)\n    let x = position[0]\n    let y = position[1]\n    var i,\n    dx,\n    dy;\n    for (i = subjects.length - 1; i >= 0; --i) {\n      let node = subjects[i];\n      dx = x - node.x;\n      dy = y - node.y;\n\n      if (dx * dx + dy * dy < this.radius * this.radius) { \n        return node;\n      }\n    }\n  }\n  \n  _dragSubject() {\n    return this._getSubjectUnderMouse(this.draggableSubjects)\n  }\n  \n  _dragged() {\n    let node = d3.event.subject;\n    node.fx = this.transform.invertX(d3.event.x)\n    node.fy = this.transform.invertY(d3.event.y)\n    node.updatePosition(d3.event.x, d3.event.y)\n    this.vennDiagram.updateDistribution()\n  }\n\n  _dragended() {\n    let node = d3.event.subject;\n    node.fx = null;\n    node.fy = null;\n    let x = this.transform.invertX(d3.event.x)\n    let y = this.transform.invertY(d3.event.y)\n    //node.updatePosition(x, y)\n    //this.vennDiagram.updateDistribution()\n  }\n  \n}"]}