{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-pipes-and-filters/src/components/demo/lively-petrinet.js"],"names":["Morph","ContextMenu","pt","LivelyPetrinet","initialize","registerButtons","updateConnectorPosition","initializeConnectors","connector","fromComponent","getComponentFrom","toComponent","error","addConnector","remove","detachedCallback","places","from","querySelectorAll","transitions","probTransitions","codeTransitions","connectors","id","allComponents","component","livelyExample","addPlace","addTransition","updateAllConnectors","updateConnector","newConnector","appendChild","connectPetrinetComponents","position","transition","initializeElement","place","addCodeTransition","codeTransition","element","setPosition"],"mappings":"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","file":"lively-petrinet.js","sourcesContent":["\"enable aexpr\";\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport ContextMenu from 'src/client/contextmenu.js';\nimport {pt} from 'src/client/graphics.js';\n\n\n\nexport default class LivelyPetrinet extends Morph {\n  \n  \n  \n  // Initialization\n  \n  async initialize() {\n    this.windowTitle = \"LivelyPetrinet\";\n    this.registerButtons();\n    this.mouseIsOnNode = false;\n    this.positionUpdate = setInterval(() => this.updateConnectorPosition(), 1000);\n    \n  }\n  \n  \n  // The connectors don't behave probperly when reloaded, because they are not connected to the components with the previous data-lively-id anymore. So we remove them and create new connectors instead (updating didnt properly work)\n  async initializeConnectors() {\n    for (const connector of this.connectors) {\n      const fromComponent = this.getComponentFrom(connector.fromComponentId);\n      const toComponent = this.getComponentFrom(connector.toComponentId);\n      if (!fromComponent || !toComponent) {\n        lively.error(\"Connector is not connected to component\");\n      }\n      await this.addConnector(fromComponent, toComponent);\n      connector.remove();\n      \n    }\n  }\n  \n  detachedCallback() {\n    clearInterval(this.positionUpdate);\n  }\n  \n  \n  \n  // Access Methods\n  \n  \n  \n  get places() {\n    return Array.from(this.querySelectorAll(\"lively-petrinet-place\"));\n  }\n  \n  get transitions() {\n    const probTransitions = Array.from(this.querySelectorAll(\"lively-petrinet-prob-transition\"));\n    const codeTransitions = Array.from(this.querySelectorAll(\"lively-petrinet-code-transition\"));\n    return [...probTransitions, ...codeTransitions]\n  }\n  \n  get connectors() {\n    return Array.from(this.querySelectorAll(\"lively-petrinet-edge\"))\n  }\n  \n  \n  getComponentFrom(id) {\n    const allComponents = [...this.places, ...this.transitions];\n    for (const component of allComponents) {\n      if (component.componentId == id) {\n        return component;\n      }\n    }\n  }\n  \n  \n  // Lively Methods\n  \n  \n  async livelyExample() {\n    await this.addPlace(pt(100, 100));\n    this.places[0].addToken();\n    await this.addPlace(pt(500, 300));\n    await this.addTransition(pt(300, 200));\n    this.addConnector(this.places[0], this.transitions[0]);\n    this.addConnector(this.transitions[0],this.places[1]);\n  }\n  \n  \n  \n  // Connector Creation\n  \n\n  updateAllConnectors() {\n    for (const connector of this.connectors) {\n      connector.updateConnector();\n    }\n  }\n  \n  \n  // Add And Delete Elements\n  \n  \n  \n  async addConnector(fromComponent, toComponent) {\n    const newConnector = await(<lively-petrinet-edge></lively-petrinet-edge>);\n    this.appendChild(newConnector);\n    await newConnector.connectPetrinetComponents(fromComponent, toComponent);\n    // The connector has some weird behaviour, in that it is not 100% connected to the elements in the beginning. We fix this by manually updating its position.\n    return newConnector;\n  }\n  \n  updateConnectorPosition() {\n    for (const connector of this.connectors) {\n      connector.updateConnector();\n    }\n  }\n  \n  async addTransition(position) {\n    var transition = await (<lively-petrinet-prob-transition></lively-petrinet-prob-transition>);\n    this.initializeElement(transition, position);\n    this.appendChild(transition);\n    return transition;\n  }\n  \n  \n  async addPlace(position) {\n      var place = await (<lively-petrinet-place></lively-petrinet-place>);\n      this.initializeElement(place, position);\n      this.appendChild(place);\n      return place;\n  }\n  \n  async addCodeTransition(position) {\n    var codeTransition = await (<lively-petrinet-code-transition></lively-petrinet-code-transition>);\n    this.initializeElement(codeTransition, position);\n    this.appendChild(codeTransition);\n    return codeTransition;\n  }\n  \n  \n  async initializeElement(element, position) {\n      lively.setPosition(element, position);\n  }\n\n}"]}