{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-petrinet/src/components/demo/lively-petrinet-place.js"],"names":["Morph","ContextMenu","pt","Helper","DEFAULT_COLOUR","LivelyPetrinetPlace","initialize","componentId","getRandomId","history","windowTitle","registerButtons","addEventListener","evt","onContextMenu","get","onLabelChange","lively","startDragAndDrop","label","value","getAttribute","id","setAttribute","tokens","Array","from","querySelectorAll","numberOfTokens","length","text","petrinet","getPetrinetOf","getTokensWithColour","colour","filter","token","getNormalTokens","defaultColour","setState","step","tokensAtStep","toString","map","deleteAllTokens","tokenColour","addToken","resetToState","slice","start","persistState","setSelectedStyle","graphicElement","style","border","getSelectedBorder","setDisselectedStyle","getDisselectedBorder","shiftKey","stopPropagation","preventDefault","menu","startConnectionFrom","openIn","document","body","getExtent","x","setColour","margin","getGlobalPosition","console","log","Math","random","y","tokenPosition","setPosition","appendChild","listenForSelect","deleteToken","tokensWithSameColour","error","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\nconst DEFAULT_COLOUR = \"black\";\n\n\nexport default class LivelyPetrinetPlace extends Morph {\n  \n\n  initialize() {\n    if (!this.componentId) {\n      this.componentId = Helper.getRandomId();\n    }\n    \n    this.history = [];\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    if (this.label) {\n      this.get(\"#inputLabel\").value = this.label;\n    }\n  }\n  \n  \n  // Access\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  get label() {\n    return this.getAttribute(\"label\");\n  }\n  \n  set label(text) {\n    this.setAttribute(\"label\", text);\n  }\n  \n  get petrinet() {\n    return Helper.getPetrinetOf(this);\n  }\n  \n  getTokensWithColour(colour) {\n    return this.tokens.filter(token => token.colour === colour);\n  }\n  \n  getNormalTokens() {\n    return this.getTokensWithColour(DEFAULT_COLOUR);\n  }\n  \n  defaultColour() {\n    return DEFAULT_COLOUR\n  }\n  \n  // Simulation State\n  \n  \n  \n  setState(step) {\n    const tokensAtStep = this.history[step];\n    if (tokensAtStep.toString() === this.tokens.map(token => token.colour).toString()) {\n      return;\n    }\n\n    this.deleteAllTokens();\n    for (const tokenColour of tokensAtStep) {\n      this.addToken(tokenColour);\n    }\n  }\n  \n  resetToState(step) {\n    this.history = this.history.slice(0,step);\n  }\n  \n  start() {\n    this.history = [this.tokens.map(token => token.colour)];\n  }  \n  \n  persistState() {\n    this.history = [...this.history, this.tokens.map(token => token.colour)];\n  }\n  \n  \n  \n  // Interaction\n  \n  setSelectedStyle() {\n    this.graphicElement().style.border = Helper.getSelectedBorder();\n  }\n  \n  setDisselectedStyle() {\n    this.graphicElement().style.border = Helper.getDisselectedBorder();\n  }\n  \n  graphicElement() {\n    return this.get(\"#circle\");\n  }\n  \n  onLabelChange(evt) {\n    this.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(DEFAULT_COLOUR)],\n          [\"add coloured token\", [\n            [`blue`, () => this.addToken(\"blue\")], \n            [`green`, () => this.addToken(\"green\")],\n            [`red`, () => this.addToken(\"red\")]\n          ], \"\", ''],\n          [\"start connection\", () => this.petrinet.startConnectionFrom(this)]]);\n       menu.openIn(document.body, evt, this);\n        return true;\n      }\n  }\n  \n\n  async addToken(colour) {\n    const length = lively.getExtent(this.graphicElement()).x;\n    const token = await (<lively-petrinet-token></lively-petrinet-token>);\n    token.setColour(colour);\n    const margin = lively.getGlobalPosition(this.graphicElement()).x - lively.getGlobalPosition(this).x;\n    console.log(margin);\n    const x = Math.random() * length/2 + length/4;\n    const y = Math.random() * length/2 + length/4;\n    const tokenPosition = pt(margin+x,y);\n    lively.setPosition(token, tokenPosition);\n    this.appendChild(token)\n    this.petrinet.listenForSelect(token);\n  }\n  \n  \n  async deleteToken(colour){\n      const tokensWithSameColour = this.getTokensWithColour(colour);\n      if (tokensWithSameColour.length == 0) {\n        lively.error(\"Error: We found no token with colour: \" + colour);\n      }\n      tokensWithSameColour[0].remove()\n  }\n  \n  \n  \n  async deleteAllTokens(){\n    for (let token of this.tokens) {\n      token.remove();\n    }\n  }\n   \n  \n}"]}