{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-croquet/src/components/halo/Connection.js"],"names":["uuid","Set","Connection","nextId","targetIsFunction","Function","e","constructor","source","sourceProperty","target","targetProperty","isEvent","evt","connectionFunction","cleanProperty","makeSavingScript","property","split","each","camelCaseIfNeeded","propertyPart","includes","camelCase","ensureID","saveSerializedConnectionIntoWidget","serializedConnections","from","window","connection","serialize","sourceId","targetId","trackingCode","modifyingCode","label","deserialize","json","forEach","connectionData","connectionFromExistingData","deserializeFromObjectIfNeeded","object","hasAttribute","getJSONAttribute","config","elementByID","undeadConnection","setModifyingCode","setTrackingCode","setLabel","activate","deactivate","activateEvent","activateAexpr","addEventListener","myFunction","onChange","svalue","getTrackingCode","string","isActive","sourceValue","drawConnectionLine","removeConnectionLine","getSource","to","getTarget","connector","createElement","setAttribute","lively","document","connectFrom","connectTo","setActive","shouldBeActive","toggleDirection","oldTarget","copyAndActivate","newConnection","removeEventListener","destroy","setSource","getSourceId","setTarget","getTargetId","getAexpr","getSourceProperty","setSourceProperty","newProperty","getModifyingCode","allConnections","allConnectionsFor","connections","objectId","getAttribute","push","getLabel","getFullLabel","elementToCSSName","migrateTo"],"mappings":"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","file":"Connection.js","sourcesContent":["\"enable aexpr\";\n\nwindow.allConnections = window.allConnections || new Set()\n\nimport { uuid } from 'utils';\n\n\nexport default class Connection {\n  \n  static nextId(){\n    return uuid()\n    // this._currentId = this._currentId || 1\n    // return this._currentId++\n  }\n  \n  targetIsFunction() {\n    try {\n      return this.target[this._targetProperty] instanceof Function\n    } catch(e) {\n      return false\n    }\n  }\n  \n  constructor(source, sourceProperty, target, targetProperty, isEvent) {\n    this.id = Connection.nextId();\n    window.allConnections.add(this);\n    \n    this.target = target;\n    this._targetProperty = targetProperty;\n    this.source = source;\n    this._sourceProperty = sourceProperty;\n    this.isEvent = isEvent;\n    this.isActive = false\n    this._eventListener = evt => this.connectionFunction(evt)\n    this._targetProperty = this.cleanProperty(this._targetProperty)\n    \n    \n    if(isEvent){\n      if (this.targetIsFunction()) { \n      this.modifyingCode = \n`(target, event) => {\n  target.${this._targetProperty}(event);\n}`;        \n      } else {\n      this.modifyingCode = `(target, event) => {\n  target.${this._targetProperty} = event;\n}`;\n      }\n        \n      this.trackingCode = this._sourceProperty;\n    } else {\n      if (this.targetIsFunction()) {\n        this.modifyingCode = \n`(target, sourceValue) => {\n  target.${this._targetProperty}(sourceValue);\n}`;   \n      } else {\n        this.modifyingCode = \n`(target, sourceValue) => {\n  target.${this._targetProperty} = sourceValue;\n}`;        \n      }\n      \n      \n      \n      \n      this._sourceProperty = this.cleanProperty(this._sourceProperty)\n      this.trackingCode = `(source) => {\n  return source.${this._sourceProperty};\n}`\n    }\n    this.makeSavingScript();\n  }\n  \n  get sourceProperty() {\n    return this._sourceProperty\n  }\n  \n  get targetProperty() {\n    return this._targetProperty\n  }\n  \n  \n  cleanProperty(property) {\n    return property.split(\".\").map(each => this.camelCaseIfNeeded(each)).join(\".\")\n  }\n  \n  camelCaseIfNeeded(propertyPart) {\n    if(propertyPart.includes('-')) {\n      return propertyPart.camelCase();\n    } else {\n      return propertyPart;\n    }\n  }\n  \n  makeSavingScript() {\n    if (this.target) {\n      this.targetId = lively.ensureID(this.target);\n    } \n    if (this.source) {\n      this.sourceId = lively.ensureID(this.source);\n    }\n    if (this.target && this.source) {\n      this.saveSerializedConnectionIntoWidget();\n    }\n  }\n  \n  saveSerializedConnectionIntoWidget() {\n    if (!this.source) return; // cannot save it...\n    const serializedConnections = Array.from(window.allConnections)\n      .filter(connection => connection.source === this.source)\n      .map(connection => connection.serialize())\n    this.source.setJSONAttribute('data-connection', serializedConnections);\n  }\n  \n  serialize() {\n    return {\n      sourceId: this.sourceId,\n      targetId: this.targetId,\n      sourceProperty: this._sourceProperty,\n      targetProperty: this._targetProperty,      \n      trackingCode: this.trackingCode,\n      modifyingCode: this.modifyingCode,\n      label: this.label,\n      isEvent: this.isEvent\n    }\n  }\n  \n  static deserialize(json) {\n    json.forEach(connectionData => {\n      this.connectionFromExistingData(connectionData)\n    })\n  }\n  \n  static deserializeFromObjectIfNeeded(object) {\n    if (object.hasAttribute && object.hasAttribute('data-connection')) {\n      this.deserialize(object.getJSONAttribute('data-connection'))\n    }\n  }\n  \n  static connectionFromExistingData(config) {\n    \n    const target = lively.elementByID(config.targetId);\n    const source = lively.elementByID(config.sourceId);\n    const undeadConnection = new Connection(\n        source, config.targetProperty, \n        target, config.sourceProperty,\n        config.isEvent);\n    undeadConnection.setModifyingCode(config.modifyingCode);\n    undeadConnection.setTrackingCode(config.trackingCode);\n    undeadConnection.setLabel(config.label);\n    undeadConnection.activate();\n  }\n  \n  activate() {\n    \n    if(this.isActive) {\n       this.deactivate()\n    }\n    \n    if(this.isEvent) {\n      this.activateEvent()\n    }\n    else {\n      this.activateAexpr()\n    }\n    this.isActive = true\n  }\n  \n  async activateEvent() {\n    if (this.source) {\n      lively.addEventListener('Connections', this.source, this.trackingCode, this._eventListener);\n    }\n  }\n  \n  async activateAexpr() {\n    let myFunction = await this.trackingCode.boundEval()\n    this.ae = aexpr(() => myFunction(this.source));\n    this.ae.onChange(svalue => this.connectionFunction(svalue));\n  }\n  \n  getTrackingCode() {\n    return this.trackingCode\n  }\n  \n  setTrackingCode(string) {\n    const isActive = this.isActive\n    if(isActive){this.deactivate()}\n    this.trackingCode = string;\n    this.saveSerializedConnectionIntoWidget();\n    if(isActive){this.activate()}\n  }\n  \n  async connectionFunction(sourceValue) {  \n    let myFunction = await this.modifyingCode.boundEval()\n    myFunction(this.target, sourceValue)\n  }\n  \n  async drawConnectionLine() {\n    this.removeConnectionLine()\n    var from = this.getSource()\n    var to = this.getTarget()\n    if (!from || !to) return\n    \n    var connector = document.createElement(\"lively-connector\")\n    connector.setAttribute(\"data-lively4-donotpersist\", true)\n    await lively.components.openIn(document.body, connector)\n    this.connectionLine = connector\n    \n    connector.connectFrom(from)\n    connector.connectTo(to)\n    return connector\n  }\n  \n  async removeConnectionLine() {\n    if (this.connectionLine) this.connectionLine.remove()\n  }\n  \n  setActive(shouldBeActive) {\n    if(shouldBeActive){\n      this.activate()\n    }\n    else{\n       this.deactivate()\n    }\n  }\n  \n  toggleDirection() {\n    this.deactivate();\n    let oldTarget = this.target;\n    this.target = this.source;\n    this.source = oldTarget;\n    this.saveSerializedConnectionIntoWidget();\n    this.activate();\n  }\n  \n  copyAndActivate() {\n    let newConnection = new Connection(\n      this.source, this.sourceProperty, \n      this.target, this._targetProperty, \n      this.isEvent);\n    newConnection.setModifyingCode(this.modifyingCode);\n    newConnection.activate();\n    return newConnection;\n  }\n  \n  deactivate() {\n    this.ae && this.ae.dispose()\n    if(this.isEvent){\n      lively.removeEventListener ('Connections', this.source, this.trackingCode, this._eventListener)\n    }\n    this.isActive = false\n  }\n  \n  destroy() {\n    this.deactivate()\n    window.allConnections.delete(this)\n  }\n  \n  getSource() {\n    return this.source\n  }\n  \n  setSource(object) {\n    this.source = object\n  }\n  \n  getSourceId() {\n    return this.sourceId\n  }\n  \n  getTarget() {\n    return this.target\n  }\n  \n  setTarget(object) {\n    this.target = object\n  }\n  \n  getTargetId() {\n    return this.targetId\n  }\n  \n  getAexpr() {\n    return this.ae\n  }\n  \n  getSourceProperty() {\n    return this._sourceProperty\n  }\n  \n  setSourceProperty(newProperty) {\n    this._sourceProperty = newProperty;\n    this.saveSerializedConnectionIntoWidget();\n    this.activate();\n  }\n  \n  getModifyingCode() {\n    return this.modifyingCode\n  }\n  \n  setModifyingCode(string) {\n    this.modifyingCode = string;\n    this.saveSerializedConnectionIntoWidget();\n  }\n  \n  static get allConnections() {\n    return window.allConnections\n  }\n  \n  static allConnectionsFor(object) {\n    let connections = [];\n    if (object.hasAttribute && object.hasAttribute('data-lively-id')) {\n      let objectId = object.getAttribute('data-lively-id');\n      this.allConnections.forEach(connection => {\n        if((connection.targetId == objectId) || (connection.sourceId == objectId)) {connections.push(connection)}\n      })\n    }\n    return connections\n  }\n  \n  getLabel() {\n    return this._sourceProperty + \"⇨\" + this._targetProperty \n  }\n\n  getFullLabel() {\n    try {\n      return lively.elementToCSSName(this.getSource()) + \" \" + this._sourceProperty +\n        \"⇨\" + lively.elementToCSSName(this.getTarget()) + \" \"+ this._targetProperty      \n    } catch(e) {\n      return this.getLabel()\n    }\n    \n  }\n\n  \n  setLabel(string) {\n    this.label = string // not used...\n  }\n  \n}\n\nwindow.allConnections.forEach(connection => connection.migrateTo(Connection));"]}