{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-core/src/components/demo/lively-petrinet-toolbar.js"],"names":["Morph","ContextMenu","pt","Helper","START","STOP","STEP","RUN","PAUSE","LivelyPetrinetToolbar","initialize","windowTitle","registerButtons","initializeSimulationSlider","initializeSimulationButtons","get","addEventListener","onDelete","stepState","petrinet","stepUntilFired","updateSlider","getCurrentStep","getPetrinetOf","isStarted","innerHTML","isRunning","getCurrentState","value","maxStep","max","innerText","simulationSlider","event","onSimulationSlider","target","simulationStep","simulationState","setState","startButton","runButton","onStep","onStartButton","style","borderColor","start","onStepButton","next","step","onRunButton","resetToState","bordergroundColor","sleep","deleteSelectedElement","ms","Promise","resolve","setTimeout"],"mappings":"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","file":"lively-petrinet-toolbar.js","sourcesContent":["import 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\nconst START = \"Start\";\nconst STOP = \"Stop\";\nconst STEP = \"Step\";\nconst RUN = \"Run\";\nconst PAUSE = \"Pause\";\n\n\n\nexport default class LivelyPetrinetToolbar extends Morph {\n\n  initialize() {\n    this.windowTitle = \"LivelyPetrinetToolbar\";\n    this.registerButtons();\n    \n    this.initializeSimulationSlider();\n    this.initializeSimulationButtons();\n    \n    this.get(\"#delete\").addEventListener( \"click\", () => this.onDelete());\n    // We use the yield keyword, so we have to keep a reference on the function\n    this.stepState = this.petrinet.stepUntilFired();\n    this.updateSlider(this.petrinet.getCurrentStep());\n  }\n  \n  \n  \n  // Access\n  \n  \n  \n  get petrinet() {\n    return Helper.getPetrinetOf(this);\n  }\n  \n  isStarted() {\n    return this.get(\"#startButton\").innerHTML == STOP;\n  }\n  \n  isRunning() {\n    return this.get(\"#runButton\").innerHTML == PAUSE;\n  }\n  \n  getCurrentState() {\n    return this.get(\"#simulationSlider\").value;\n  }\n  \n  \n  \n  \n  // Simulation\n  \n  \n  \n  updateSlider(maxStep) {\n    this.get(\"#simulationSlider\").max = maxStep;\n    this.get(\"#simulationSlider\").value = maxStep;\n    this.get(\"#simulationState\").innerText = maxStep;\n  }\n  \n  initializeSimulationSlider() {\n    const simulationSlider = this.get('#simulationSlider');\n    simulationSlider.addEventListener('input', (event) => this.onSimulationSlider(event));\n  }\n  \n  onSimulationSlider({ target: { value: simulationStep } }) {\n    const simulationState = this.get('#simulationState');\n    simulationState.innerText = simulationStep;\n    this.petrinet.setState(simulationStep-1);\n  }\n  \n  initializeSimulationButtons() {\n    let startButton = this.get(\"#startButton\");\n    let runButton = this.get(\"#runButton\");\n    \n    startButton.innerHTML = START;\n    runButton.innerHTML = RUN;\n  }\n  \n  async onStep() {\n    await this.petrinet.onStep();\n  }\n  \n  async onStartButton() {\n    let startButton = await this.get(\"#startButton\");\n    let runButton = await this.get(\"#runButton\");\n\n    if (!this.isStarted()) {\n      startButton.innerHTML = STOP;\n      startButton.style.borderColor = \"#FFCC80\";\n      this.petrinet.start();\n    } else {\n      // Change Start Button\n      startButton.innerHTML = START;\n      startButton.style.borderColor =\"#C5E1A5\";\n      // Change Run Button\n      this.get(\"#runButton\").innerHTML = RUN;\n      runButton.style.borderColor = \"#C5E1A5\";\n      this.petrinet.setState(0);\n      this.updateSlider(1);\n\n    }\n  }\n  \n  onStepButton() {\n    if (this.isStarted()) {\n      this.stepState.next();\n      const step = this.petrinet.getCurrentStep();\n      this.updateSlider(step);\n    }\n  }\n  \n  async onRunButton(){\n   if (!this.isStarted()) {\n     return;\n   }\n   \n    let runButton = this.get(\"#runButton\");\n    if (!this.isRunning()) {\n      this.petrinet.resetToState(this.getCurrentState())\n      runButton.innerHTML = PAUSE;\n      runButton.style.bordergroundColor = \"#FFCC80\";\n      \n    } else {\n      runButton.innerHTML = RUN;\n      runButton.style.bordergroundColor = \"#C5E1A5\";\n    }\n    \n        \n    // StartRunning\n    while (this.isStarted() && this.isRunning()) {\n      this.updateSlider(this.petrinet.getCurrentStep());\n      await this.onStep();\n      await this.sleep(100);\n    }\n    \n  }\n\n  \n  \n  // Toolbar\n  \n  \n  \n  onDelete(){\n    //lively.notify(\"Hallo\");\n    this.petrinet.deleteSelectedElement();\n  }\n\n  \n  \n  // Helper\n  \n  \n  \n  async sleep(ms) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n  \n\n  \n\n  \n\n  \n  \n\n  \n}"]}