{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-constraints/src/components/demo/lively-petrinet-place.js"],"names":["Morph","ContextMenu","pt","Helper","LivelyPetrinetPlace","initialize","componentId","getRandomId","history","windowTitle","registerButtons","addEventListener","evt","onContextMenu","get","onLabelChange","lively","startDragAndDrop","label","getAttribute","value","JSON","parse","historyArray","setAttribute","stringify","id","tokens","Array","from","querySelectorAll","numberOfTokens","length","setState","step","deleteAllTokens","numberTokensAtStep","i","addToken","start","persistState","graphicElement","shiftKey","stopPropagation","preventDefault","menu","deleteToken","openIn","document","body","token","x","Math","random","y","setPosition","appendChild","remove"],"mappings":"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","file":"lively-petrinet-place.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\n\nexport default class LivelyPetrinetPlace extends Morph {\n\n  initialize() {\n    if (!this.componentId) {\n      this.componentId = Helper.getRandomId();\n    }\n    \n    if (this.history === null) {\n       this.history = [];\n    }\n    \n    this.windowTitle = \"LivelyPetrinetPlace\";\n    this.registerButtons();\n    this.addEventListener('contextmenu',  evt => this.onContextMenu(evt), false);\n    this.get(\"#inputLabel\").addEventListener(\"change\", (evt) => this.onLabelChange(evt));\n    lively.addEventListener(\"foo\", this, \"pointerdown\", evt => Helper.startDragAndDrop(evt, this));\n    \n    const label = this.getAttribute(\"label\");\n    if (label) {\n      this.get(\"#inputLabel\").value = label;\n    }\n  }\n  \n  \n  // Access\n  \n  \n  \n  get history() {\n    return JSON.parse(this.getAttribute(\"history\"));\n  }\n  \n  set history(historyArray) {\n    this.setAttribute(\"history\", JSON.stringify(historyArray));\n  }\n    \n  get componentId() {\n    return this.getAttribute(\"componentId\");\n  }\n\n  set componentId(id) {\n    this.setAttribute(\"componentId\", id);\n  }\n  \n  get tokens() {\n    return Array.from(this.querySelectorAll(\"lively-petrinet-token\"));\n  }\n  \n  numberOfTokens(){\n    return this.tokens.length;\n  }\n  \n  \n  \n  // Simulation State\n  \n  \n  \n  setState(step) {\n    this.deleteAllTokens();\n    const numberTokensAtStep = this.history[step];\n    for (let i = 0; i < numberTokensAtStep; i++) {\n      this.addToken();\n    }\n  }\n  \n  start() {\n    this.history = [this.numberOfTokens()];\n  }  \n  \n  persistState() {\n    this.history = [...this.history, this.numberOfTokens()];\n  }\n  \n  \n  \n  // Interaction\n  \n  \n  \n  graphicElement() {\n    return this.get(\"#circle\");\n  }\n  \n  onLabelChange(evt) {\n    this.setAttribute(\"label\", this.get(\"#inputLabel\").value);\n  }\n  \n  \n  onContextMenu(evt) {\n    if (!evt.shiftKey) {\n       evt.stopPropagation();\n      evt.preventDefault();\n\n       var menu = new ContextMenu(this, [\n          [\"add token\", () => this.addToken()],\n          [\"delete token\", () => this.deleteToken()],\n            ]);\n       menu.openIn(document.body, evt, this);\n        return true;\n      }\n  }\n  \n\n  async addToken() {\n    const length = 50;\n    var token = await (<lively-petrinet-token></lively-petrinet-token>);\n    var x = Math.random() * length/2 + length/4;\n    var y = Math.random() * length/2 + length/4;\n    lively.setPosition(token, pt(x,y));\n\n    //lively.setPosition(dot, pt(10, 10));\n    this.appendChild(token); \n  }\n  \n  \n  async deleteToken(){\n      this.tokens[0].remove()\n  }\n  \n  async deleteAllTokens(){\n    for (let token of this.tokens) {\n      token.remove();\n    }\n  }\n   \n  \n}"]}