{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/src/babylonian-programming-editor/ui/connector.js"],"names":["defaultConnections","Connector","constructor","source","changeCallback","_source","_target","_changeCallback","_targetKind","_isConnected","_isBroken","_element","addEventListener","isConnected","target","classList","add","setTimeout","document","_onTargetSelect","bind","once","event","path","canvas","shadowRoot","querySelector","isBroken","remove","stringTarget","__proto__","name","id","element"],"mappings":"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","file":"connector.js","sourcesContent":["import { defaultConnections } from \"../utils/defaults.js\";\n\nexport default class Connector {\n  \n  constructor(source, changeCallback) {\n    this._source = source;\n    this._target = null;\n    this._changeCallback = changeCallback;\n    this._targetKind = null;\n    this._isConnected = false;\n    this._isBroken = false;\n    \n    // Set up element\n    this._element = <span class=\"icon connector off\"></span>;\n    this._element.addEventListener(\"click\", () => {\n      if(this.isConnected) {\n        this.target = null;\n      } else {\n        this._element.classList.add(\"on\");\n        setTimeout(() => {\n          document.addEventListener(\"click\", this._onTargetSelect.bind(this), {once : true});\n        }, 100);\n      }\n    });\n  }\n  \n  _onTargetSelect(event) {\n    debugger\n    var target = event.path[0]\n    // Connect to the canvas if there is one\n    const canvas = target.shadowRoot ?\n                   target.shadowRoot.querySelector(\"canvas\") :\n                   target.querySelector(\"canvas\");\n    \n    if(canvas) {\n      this.target = canvas;\n      this._targetKind = \"canvas\";\n    } else {\n      this.target = target;\n      this._targetKind = \"component\";\n    }\n  }\n  \n  get isBroken() {\n    return this._isBroken;\n  }\n  \n  set isBroken(isBroken) {\n    this._isBroken = isBroken;\n    if(isBroken) {\n      this._element.classList.add(\"broken\");\n    } else {\n      this._element.classList.remove(\"broken\");\n    }\n  }\n  \n  get isConnected() {\n    return this._isConnected;\n  }\n  \n  set isConnected(isConnected) {\n    this._isConnected = isConnected;\n    if(isConnected) {\n      this._element.classList.add(\"on\");\n    } else {\n      this._element.classList.remove(\"on\");\n    }\n  }\n  \n  get stringTarget() {\n    if(!this._target) {\n      return null;\n    }\n    if(this._target.__proto__.constructor) {\n      return this._target.__proto__.constructor.name;\n    } else {\n      return \"\" + this._target;\n    }\n  }\n  \n  get target() {\n    return this._target;\n  }\n  \n  set target(target) {\n    this._target = target;\n    if(target) {\n      this.isConnected = true;\n      this.isBroken = false;\n      \n      // Set up target\n      defaultConnections()[this._source.id] = target;\n    } else {\n      this.isConnected = false;\n      this.isBroken = false;\n      delete defaultConnections()[this._source.id];\n    }\n    this._changeCallback(target);\n  }\n  \n  get element() {\n    return this._element;\n  }\n}\n\n/* Context: {\"context\":{\"prescript\":\"\",\"postscript\":\"\"},\"customInstances\":[]} */"]}