{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-pipes-and-filters/src/components/demo/lively-petrinet-editor.js"],"names":["Morph","ContextMenu","pt","Helper","LivelyPetrinetEditor","initialize","registerButtons","undefined","addAllListeners","initializePetrinet","petrinet","appendChild","get","places","transitions","connectors","tokens","accumulator","place","addEventListener","evt","onDblClick","onMouseMove","onContextMenu","addListeners","transition","connector","listenForSelect","token","start","setState","step","resetToState","getCurrentStep","stepUntilFired","shuffled","canFire","fire","persistPlaceState","onStep","hasFired","placesBefore","getFirstComponents","getConnectorsBefore","placesAfter","getSecondComponents","getConnectorsAfter","firingIsPossible","every","transitionAllowsFiring","isActiveTransition","connectorsBefore","connectorsAfter","placesToRemoveTokenFrom","getPlacesToRemoveTokenFrom","placesToAddTokenTo","getPlacesToAddTokenTo","colour","deleteToken","animateTokens","addToken","placesToChangeToken","connectorsConnectedToThem","animationPromises","connectorOfPlace","getConnectorOfPlace","push","animateMovingToken","all","connectorsToCompare","error","map","element","persistState","log","stopPropagation","preventDefault","mousePosition","getPositionInWindow","offset","getGlobalPosition","positionInPetrinet","toolbarToggleText","toolbarIsActive","menu","addPlace","addTransition","addCodeTransition","toggleToolbar","openIn","document","livelyExample","addConnector","cursor","pos","connectionIsStarted","setGlobalPosition","windowPosition","x","y","startedConnection","deleteUnfinishedConnector","remove","startConnectionFrom","append","connectFromPetrinetComponent","setExtent","position","connectTo","component","fromComponent","manageNewConnection","updateAllConnectors","updateConnector","toComponent","newConnector","onElementClick","initializeElement","codeTransition","graphicElement","deleteSelectedElement","isSelectedElement","setSelectedStyle","otherElement","setDisselectedStyle"],"mappings":"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","file":"lively-petrinet-editor.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';\nimport {Helper} from \"src/components/demo/lively-petrinet-helper.js\"\n\n\n\n\nexport default class LivelyPetrinetEditor extends Morph {\n  \n  \n  \n  // Initialization\n  \n  async initialize() {\n    this.windowTitle = \"LivelyPetrinetEditor\";\n    this.registerButtons();\n    this.mouseIsOnNode = false;\n    this.selectedElement = undefined;\n    if (this.petrinet != undefined) {\n        await this.petrinet.initializeConnectors();\n        this.addAllListeners();\n    }\n  }\n  \n  \n  async initializePetrinet(petrinet) {\n    await this.appendChild(petrinet);\n    this.addAllListeners();\n  }\n  \n  \n  \n  // Access\n  \n  \n  \n  get petrinet() {\n    return this.get(\"lively-petrinet\");\n  }\n  \n  get places() {\n    return this.petrinet.places;\n  }\n  \n  \n  get transitions(){\n    return this.petrinet.transitions;\n  }\n  \n  \n  get connectors() {\n    return this.petrinet.connectors;\n  }\n  \n  get tokens() {\n    return this.places.reduce((accumulator, place) => [...accumulator, ...place.tokens], []);\n  }\n  \n  addAllListeners() {\n    lively.addEventListener(\"OnDblClick\", this, \"dblclick\", (evt) => this.onDblClick(evt))\n    lively.addEventListener(\"MouseDraw\", this, \"mousemove\", evt => this.onMouseMove(evt));\n    this.addEventListener('contextmenu',  evt => this.onContextMenu(evt), false);\n\n    for (const place of this.places) {\n      this.addListeners(place)\n    }\n    for (const transition of this.transitions) {\n      this.addListeners(transition)\n    }\n    \n    for (const connector of this.connectors) {\n      this.listenForSelect(connector);\n    }\n    \n    for (const token of this.tokens) {\n      this.listenForSelect(token);\n    }\n  }\n  \n\n  \n  // Methods For Simulation\n  \n  \n  \n  start() {\n    for (const place of this.places) {\n      place.start();\n    }\n  }\n  \n  setState(step) {\n    for (const place of this.places) {\n      place.setState(step);\n    }\n  }\n  \n  resetToState(step) {\n    for (const place of this.places) {\n      place.resetToState(step);\n    }\n  }\n  \n  getCurrentStep() {\n    return this.places[0].history.length\n  }\n  \n  *stepUntilFired() {\n    while (true) {\n       for (const transition of Helper.shuffled(this.transitions)) {\n        if (this.canFire(transition)) {\n          this.fire(transition);\n          this.persistPlaceState();\n          yield;\n        }\n      }\n    }\n  }\n  \n  async onStep() {\n      let hasFired = false;\n      for (const transition of Helper.shuffled(this.transitions)) {\n          if (this.canFire(transition)) {\n            await this.fire(transition);\n            hasFired = true;\n          }\n      }\n      if (hasFired) {\n        this.persistPlaceState();\n      }\n  }\n  \n  canFire(transition) {\n      const placesBefore = this.getFirstComponents(this.getConnectorsBefore(transition));\n      const placesAfter = this.getSecondComponents(this.getConnectorsAfter(transition));\n      const firingIsPossible = placesBefore.every((place) => place.tokens.length > 0);\n      const transitionAllowsFiring = transition.isActiveTransition(placesBefore, placesAfter);\n      if (!firingIsPossible || !transitionAllowsFiring) {\n        return false;\n      }\n      return true;\n  }\n  \n  async fire(transition) {\n      const connectorsBefore = this.getConnectorsBefore(transition);\n      const connectorsAfter = this.getConnectorsAfter(transition);\n      const placesBefore = this.getFirstComponents(connectorsBefore);\n      const placesAfter = this.getSecondComponents(connectorsAfter);\n      const placesToRemoveTokenFrom = transition.getPlacesToRemoveTokenFrom(placesBefore, placesAfter);\n      const placesToAddTokenTo = transition.getPlacesToAddTokenTo(placesBefore, placesAfter);\n      for (const [place,colour] of placesToRemoveTokenFrom) {\n        await place.deleteToken(colour);\n      }\n    \n      // Animation\n      await this.animateTokens(placesToRemoveTokenFrom, connectorsBefore);\n      await this.animateTokens(placesToAddTokenTo, connectorsAfter);\n      \n    \n      for (const [place,colour] of placesToAddTokenTo) {\n        await place.addToken(colour);\n      }\n      return\n  }\n  \n  async animateTokens(placesToChangeToken, connectorsConnectedToThem) {\n    let animationPromises = []\n    for (const [place, colour] of placesToChangeToken) {\n      const connectorOfPlace = this.getConnectorOfPlace(place, connectorsConnectedToThem);\n  animationPromises.push(connectorOfPlace.animateMovingToken(colour));\n    }\n    await Promise.all(animationPromises);\n  }\n  \n  getConnectorOfPlace(place, connectorsToCompare) {\n    for (const connector of connectorsToCompare) {\n      if (connector.fromComponentId === place.componentId || connector.toComponentId === place.componentId) {\n            return connector;\n      }\n    }\n    lively.error(\"When transitioning, did not found connector that connects the place with the transition\")\n  }\n  \n  getFirstComponents(connectors) {\n    return connectors.map(connector => this.petrinet.getComponentFrom(connector.fromComponentId));\n  }\n  \n  getSecondComponents(connectors) {\n    return connectors.map(connector => this.petrinet.getComponentFrom(connector.toComponentId));\n  }\n  \n  getConnectorsBefore(element) {\n    let connectorsBefore = [];\n    for (const connector of this.connectors) {\n      if (connector.toComponentId == element.componentId) {\n        connectorsBefore.push(connector);\n      }\n    }\n    return connectorsBefore;\n  }\n  \n  \n  getConnectorsAfter(element) {\n    let connectorsAfter = [];\n    for (const connector of this.connectors) {\n      if (connector.fromComponentId == element.componentId) {\n        connectorsAfter.push(connector);\n      }\n    }\n    return connectorsAfter;\n  }\n  \n  persistPlaceState() {\n    for (const place of this.places) {\n      place.persistState();\n    }\n  }\n\n  \n  \n  // Lively Methods\n  \n  \n  \n  onContextMenu(evt) {\n    console.log(evt);\n    if (!evt.shiftKey) {\n        evt.stopPropagation();\n        evt.preventDefault();\n        const mousePosition = this.getPositionInWindow(evt);\n        const offset = lively.getGlobalPosition(this.get(\"lively-petrinet\")).y - lively.getGlobalPosition(this).y;\n        const positionInPetrinet = pt(mousePosition.x, mousePosition.y - offset);\n        const toolbarToggleText = this.toolbarIsActive() ? \"disable toolbar\" : \"activate toolbar\";\n\n        var menu = new ContextMenu(this, [\n              [\"add place\", () => this.addPlace(positionInPetrinet)],\n              [\"add transition\", () => this.addTransition(positionInPetrinet)],\n              [\"add code transition\", () => this.addCodeTransition(positionInPetrinet)],\n              [toolbarToggleText, () => this.toggleToolbar()]\n            ]);\n        menu.openIn(document.body, evt, this);\n        return true;\n      }\n  }\n  \n  toggleToolbar() {\n    if (this.toolbarIsActive()){\n      this.get(\"lively-petrinet-toolbar\").style.display = \"none\";\n    } else {\n      this.get(\"lively-petrinet-toolbar\").style.display = \"block\";\n    }\n  }\n  \n  toolbarIsActive() {\n    return this.get(\"lively-petrinet-toolbar\").style.display != \"none\";\n  }\n  \n  async livelyExample() {\n    const petrinet = await (<lively-petrinet></lively-petrinet>);\n    await this.initializePetrinet(petrinet);\n    await this.addPlace(pt(0,0));\n    this.petrinet.places[0].addToken(\"black\");\n    await this.addPlace(pt(500, 100));\n    await this.addTransition(pt(300, 100));\n    this.addConnector(this.places[0], this.transitions[0]);\n    this.addConnector(this.transitions[0],this.places[1]);\n    this.toggleToolbar();\n  }\n\n  \n  \n  // Connector Creation\n  \n  \n  \n  async onMouseMove(evt) { \n    const cursor = this.get(\"#cursor\");\n    const pos = pt(evt.clientX, evt.clientY);\n    if (this.connectionIsStarted()) {\n      lively.setGlobalPosition(cursor, pt(pos.x-5, pos.y-5));\n    }\n  }\n  \n  getPositionInWindow(evt){\n    const windowPosition = lively.getGlobalPosition(this);\n    const x = evt.clientX - windowPosition.x;\n    const y = evt.clientY - windowPosition.y;\n    return pt(x,y);\n  }\n  \n  connectionIsStarted() {\n    const cursor = this.get(\"#cursor\");\n    const startedConnection = cursor != null;\n    return startedConnection;\n  }\n  \n  onDblClick(evt) {\n    if (this.mouseIsOnNode || !this.connectionIsStarted())      {\n        return;\n    }\n    console.log(this.mouseIsOnNode);\n    this.deleteUnfinishedConnector(this.get(\"#cursor\"),   this.unfinishedConnector);\n  }\n  \n  async deleteUnfinishedConnector(cursor, connector) {\n    cursor.remove();\n    connector.remove();\n  }\n  \n  async startConnectionFrom(element) {\n    //Create Connector\n    var connector = await (<lively-petrinet-edge></lively-petrinet-edge>);\n    this.append(connector);\n    connector.connectFromPetrinetComponent(element);\n    \n    // Create Cursor That Moves Connector\n    var cursor = await (<div></div>)\n    cursor.style.backgroundColor = \"blue\"\n    cursor.id = \"cursor\"\n    lively.setExtent(cursor, pt(5,5));\n    const position = lively.getGlobalPosition(element);\n    await this.append(cursor);\n    lively.setGlobalPosition(cursor, position);\n    \n    //Connect Cursor To Connector\n    connector.connectTo(cursor);\n    this.unfinishedConnector = connector;\n\n    return connector\n  }\n  \n  async connectTo(component) {\n    if (!this.unfinishedConnector) {\n      return;\n    }\n    const fromComponent = this.petrinet.getComponentFrom(this.unfinishedConnector.fromComponentId);\n    this.deleteUnfinishedConnector(this.get(\"#cursor\"), this.unfinishedConnector);\n\n    if (fromComponent == component) {\n      return\n    }\n    \n    await this.addConnector(fromComponent, component);\n  }\n  \n  async manageNewConnection(element) {\n    if (!this.connectionIsStarted()) {\n      await this.startConnectionFrom(element);\n    } else {\n      await this.connectTo(element);\n    }\n  }\n  \n  updateAllConnectors() {\n    for (const connector of this.connectors) {\n      connector.updateConnector();\n    }\n  }\n  \n  \n  \n  // Add And Delete Elements\n  \n  \n  \n  async addConnector(fromComponent, toComponent) {\n    const newConnector = await this.petrinet.addConnector(fromComponent, toComponent);\n    lively.addEventListener(\"onClick\", newConnector, \"click\", (evt) => this.onElementClick(evt, newConnector));\n  }\n  \n  async addTransition(position) {\n    const transition = await this.petrinet.addTransition(position);\n    this.initializeElement(transition, position);\n  }\n  \n  \n  async addPlace(position) {\n      const place = await this.petrinet.addPlace(position);\n      this.initializeElement(place, position);\n  }\n  \n  async addCodeTransition(position) {\n    const codeTransition = await this.petrinet.addCodeTransition(position);\n    this.initializeElement(codeTransition, position);\n  }\n  \n  async addListeners(element) {\n      element.graphicElement().onmouseover = () => this.mouseIsOnNode = true;\n      element.graphicElement().onmouseout = () => this.mouseIsOnNode = false;\n      lively.addEventListener(\"onDblClick\", element.graphicElement(), \"dblclick\", () =>     this.manageNewConnection(element));\n    this.listenForSelect(element);\n  }\n  \n  listenForSelect(element) {\n    lively.addEventListener(\"lively\", element, \"click\", (evt) => this.onElementClick(evt, element));\n  }\n  \n  async initializeElement(element, position) {\n      this.addListeners(element);\n  }\n  \n  deleteSelectedElement(){\n    const connectorsBefore = this.getConnectorsBefore(this.selectedElement);\n    for (const connector of connectorsBefore) {\n      connector.remove();\n    }\n    const connectorsAfter = this.getConnectorsAfter(this.selectedElement);\n    for (const connector of connectorsAfter) {\n      connector.remove();\n    }\n    this.selectedElement.remove();\n  }\n  \n  isSelectedElement(element){\n    return element == this.selectedElement;\n  }\n\n  onElementClick(evt, element) {\n    evt.preventDefault();\n    evt.stopPropagation();\n    this.selectedElement = element;\n    element.setSelectedStyle();\n    for (const otherElement of [...this.transitions, ...this.places, ...this.connectors, ...this.tokens]) {\n      if (otherElement != element) {\n        otherElement.setDisselectedStyle();\n      }\n    }\n  }\n  \n  \n\n}"]}