{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-petrinet/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}"]}