{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/components/halo/lively-halo-connectors-item.js"],"names":["HaloItem","pt","ContextMenu","Connection","LivelyHaloConnectorsItem","initialize","registerEvent","onClick","evt","window","showStartingConnectorsMenuFor","hideHalo","showMenu","menuItems","menu","openIn","document","undefined","connections","connection","push","existingConnectionsMenu","map","getLabel","openConnectionEditor","myConnectionsMenu","allConnectionsFor","startCreatingConnectionFor","getAllEventsFor","getAllStylesFor","startCreatingConnectionCustom","object","isFinishing","result","styles","getComputedStyle","stylesLength","i","item","event","finishCreatingConnection","showFinishingConnectorsMenuFor","morph","finishCreatingConnectionCustom","elementUnderHand","path","composedPath","onPointerMove","showElement","setGlobalPosition","getPosition","onPointerUp","removeEventListener","editor","openComponentInWindow","setConnection","userinput","prompt","property","isEvent","addEventListener","e","capture","target","targetProperty","activate","drawConnectionLine"],"mappings":"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","file":"lively-halo-connectors-item.js","sourcesContent":["\"enable aexpr\";\n\nimport HaloItem from 'src/components/halo/lively-halo-item.js';\nimport {pt} from 'src/client/graphics.js';\nimport ContextMenu from \"src/client/contextmenu.js\";\nimport Connection from \"./Connection.js\";\n\nexport default class LivelyHaloConnectorsItem extends HaloItem {\n  \n  async initialize() {\n    this.windowTitle = \"LivelyHaloConnectorsItem\";\n\n    this.registerEvent('click', 'onClick');\n  }\n   \n  onClick(evt) {\n      this.source = window.that;\n    \n      this.showStartingConnectorsMenuFor(evt);\n    \n      this.hideHalo();\n  }\n  \n  async showMenu(evt, menuItems) {\n    const menu = await ContextMenu.openIn(document.body, evt, undefined, document.body, menuItems);\n  }\n  \n  async showStartingConnectorsMenuFor(evt) {  \n    \n    let connections = []\n    Connection.allConnections.forEach(connection => {\n      connections.push(connection)\n    })\n    let existingConnectionsMenu = connections.map(connection => [connection.getLabel(), () => this.openConnectionEditor(connection)]);\n    let myConnectionsMenu = Connection.allConnectionsFor(this.source).map(connection => [connection.getLabel(), () => this.openConnectionEditor(connection)]);\n    \n    const menuItems = [\n      ['Value', () => this.startCreatingConnectionFor(evt, 'value', false)],\n      ['Width', () => this.startCreatingConnectionFor(evt, 'style.width', false)],\n      ['Height', () => this.startCreatingConnectionFor(evt, 'style.height', false)],\n      ['Events', this.getAllEventsFor(this.source, evt)],\n      ['Style', this.getAllStylesFor(this.source, evt)],\n      ['On custom...', () => this.startCreatingConnectionCustom(evt)],\n      ['My Connections', myConnectionsMenu, '', '<i class=\"fa fa-arrow-right\" aria-hidden=\"true\"></i>'],\n      ['All Connections', existingConnectionsMenu, '', '<i class=\"fa fa-arrow-right\" aria-hidden=\"true\"></i>']\n    ];\n    \n    this.showMenu(evt, menuItems);\n  }\n  \n  //More events https://developer.mozilla.org/en-US/docs/Web/Events\n  getAllEventsFor(object, evt) {\n    return [['Click', () => this.startCreatingConnectionFor(evt, 'click', true)],\n      ['DoubleClick', () => this.startCreatingConnectionFor(evt, 'dblclick', true)],\n      ['MouseDown', () => this.startCreatingConnectionFor(evt, 'mousedown', true)],\n      ['MouseEnter', () => this.startCreatingConnectionFor(evt, 'mouseenter', true)],\n      ['MouseLeave', () => this.startCreatingConnectionFor(evt, 'mouseleave', true)],\n      ['MouseMove', () => this.startCreatingConnectionFor(evt, 'mousemove', true)],\n      ['MouseOver', () => this.startCreatingConnectionFor(evt, 'mouseover', true)],\n      ['MouseOut', () => this.startCreatingConnectionFor(evt, 'mouseout', true)],\n      ['MouseUp', () => this.startCreatingConnectionFor(evt, 'mouseup', true)]]\n  }\n  \n  getAllStylesFor(object, evt, isFinishing = false) {\n    let result = [];\n    let styles = window.getComputedStyle(object);\n    let stylesLength = styles.length;\n    for(let i = 0; i < stylesLength; i++){\n      if(isFinishing){\n        result.push([styles.item(i), event => this.finishCreatingConnection(object, 'style.' + styles.item(i), event)]);\n      } else {\n        result.push([styles.item(i), () => this.startCreatingConnectionFor(evt, 'style.' + styles.item(i), false)]); \n      }\n    }\n    return result;\n  }\n  \n  async showFinishingConnectorsMenuFor(evt, morph) {\n    const menuItems = [\n      ['Value', event => this.finishCreatingConnection(morph, 'value', event)],\n      ['Width', event => this.finishCreatingConnection(morph, 'style.width', event)],\n      ['Height', event => this.finishCreatingConnection(morph, 'style.height', event)],\n      ['InnerHTML', event => this.finishCreatingConnection(morph, 'innerHTML', event)],\n      // Hook for chained events\n      //['Events', this.getAllEventsFor(morph, evt, true)],\n      ['Style', this.getAllStylesFor(morph, evt, true)],\n      ['On custom...', event => this.finishCreatingConnectionCustom(morph, event)]];\n    this.showMenu(evt, menuItems);\n  }\n  \n  elementUnderHand(evt) {\n    var path = evt.composedPath().slice(evt.composedPath().indexOf(evt.srcElement))\n    return path[0]\n  }\n  \n  onPointerMove(evt) {\n    if (this.dropIndicator) this.dropIndicator.remove()\n    this.dropTarget = this.elementUnderHand(evt)\n    if (this.dropTarget) {\n      this.dropIndicator = lively.showElement(this.dropTarget)\n      this.dropIndicator.style.border = \"3px dashed rgba(0,100,0,0.5)\"\n      this.dropIndicator.innerHTML = \"\"\n    }\n    \n    if (this.valueIndicator) this.valueIndicator.remove();\n    this.valueIndicator = <span>{this.sourceProperty}</span>;\n    this.valueIndicator.style.zIndex = 200;\n    lively.setGlobalPosition(this.valueIndicator, pt(lively.getPosition(evt).x+1, lively.getPosition(evt).y+1));\n    document.body.appendChild(this.valueIndicator);\n  }\n  \n  onPointerUp(evt) {\n    lively.removeEventListener(\"Connectors\")\n    \n    if (this.dropIndicator) this.dropIndicator.remove()\n    if (this.valueIndicator) this.valueIndicator.remove()\n    var morph = this.elementUnderHand(evt)\n    \n    this.showFinishingConnectorsMenuFor(evt, morph);\n  }\n  \n  async openConnectionEditor(connection) {\n    let editor = await lively.openComponentInWindow('lively-connection-editor')\n    editor.setConnection(connection)\n  }\n  \n  async startCreatingConnectionCustom(evt) {\n    var userinput = await lively.prompt(\"Enter something\", \"value\");\n    this.startCreatingConnectionFor(evt, userinput, false);\n  }\n  \n  startCreatingConnectionFor(evt, property, isEvent) {\n    this.sourceProperty = property;\n    this.isEvent = isEvent;\n    \n    lively.addEventListener(\"Connectors\", document.body.parentElement, \"pointermove\",\n      e => this.onPointerMove(e), { capture: true });\n    lively.addEventListener(\"Connectors\", document.body.parentElement, \"pointerup\",\n      e => this.onPointerUp(e), { capture: true });\n  }\n  \n  async finishCreatingConnectionCustom(target, event) {\n    var userinput = await lively.prompt(\"Enter something\", \"style.width\");\n    this.finishCreatingConnection(target, userinput, event);\n  }\n  \n  finishCreatingConnection(target, targetProperty, event) {\n    let connection = new Connection(target, targetProperty, this.source, this.sourceProperty, this.isEvent);\n    connection.activate();\n    connection.drawConnectionLine();\n    if(!event.shiftKey){\n      this.openConnectionEditor(connection);\n    }\n  } \n}"]}