{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/components/halo/lively-halo-connectors-item.js"],"names":["HaloItem","pt","ContextMenu","Connection","domEvents","cssProperties","LivelyHaloConnectorsItem","initialize","registerEvent","onClick","evt","window","showStartingConnectorsMenuFor","hideHalo","attachedCallback","detachedCallback","showMenu","menuItems","openIn","document","undefined","myConnectionsMenu","allConnectionsFor","connection","getLabel","openConnectionEditor","startCreatingConnectionFor","getAllEventsFor","getAllStylesFor","startCreatingConnectionCustom","object","allEvents","map","domEvent","isFinishing","result","forEach","cssProperty","push","event","finishCreatingConnection","showFinishingConnectorsMenuFor","morph","finishCreatingConnectionCustom","elementUnderHand","lively","onPointerMove","showElement","setGlobalPosition","getPosition","onPointerUp","removeEventListener","editor","openComponentInWindow","setExtent","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\";\nimport { domEvents, cssProperties } from \"src/client/constants.js\";\n\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  attachedCallback() {\n  }\n  \n  detachedCallback() {\n  \n  }\n\n  async showMenu(evt, menuItems) {\n    return ContextMenu.openIn(document.body, evt, undefined, document.body, menuItems);\n  }\n  \n  async showStartingConnectorsMenuFor(evt) {  \n    \n    let myConnectionsMenu = Connection.allConnectionsFor(this.source)\n        .map(connection => [\n          connection.getLabel(), \n          () => 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      ['Connections', myConnectionsMenu, '', '<i class=\"fa fa-arrow-right\" aria-hidden=\"true\"></i>'],\n    ];\n    \n    return this.showMenu(evt, menuItems);\n  }\n  \n  //More events https://developer.mozilla.org/en-US/docs/Web/Events\n  getAllEventsFor(object, evt) {\n    const allEvents = domEvents.map(domEvent => [domEvent, () => this.startCreatingConnectionFor(evt, domEvent, true)]);\n    \n    return [\n      ['click', () => this.startCreatingConnectionFor(evt, 'click', true)],\n      ['dblclick', () => this.startCreatingConnectionFor(evt, 'dblclick', true)],\n      ['mousemove', () => this.startCreatingConnectionFor(evt, 'mousemove', true)],\n      ['more', allEvents]\n    ];\n  }\n  \n  getAllStylesFor(object, evt, isFinishing = false) {\n    const result = [];\n    \n    cssProperties.forEach(cssProperty => {\n      if(isFinishing){\n        result.push([cssProperty, event => this.finishCreatingConnection(object, 'style.' + cssProperty, event)]);\n      } else {\n        result.push([cssProperty, () => this.startCreatingConnectionFor(evt, 'style.' + cssProperty, false)]); \n      }\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    return await this.showMenu(evt, menuItems);\n  }\n  \n  elementUnderHand(evt) {\n    return lively.hand.elementUnderHand(evt)\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) {\n      this.valueIndicator.remove();\n    }\n    this.valueIndicator = <span>{this.sourceProperty}</span>;\n    this.valueIndicator.isMetaNode = true\n    this.valueIndicator.style.zIndex = 200;\n    document.body.appendChild(this.valueIndicator);\n    lively.setGlobalPosition(this.valueIndicator, pt(lively.getPosition(evt).x+1, lively.getPosition(evt).y+1));\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    lively.setExtent(editor.parentElement, lively.pt(800, 50))\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(this.source, this.sourceProperty, \n                                    target, targetProperty, this.isEvent);\n    connection.activate();\n    connection.drawConnectionLine();\n    if(!event.shiftKey){\n      this.openConnectionEditor(connection);\n    }\n  } \n}"]}