{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stable/src/components/demo/lively-simulation-cell.js"],"names":["Morph","_","DEFAULT_VIEW","LivelySimulationCell","initialize","hasAttribute","isMirrorCell","initializeTitleBar","initializeCodeView","initializeLogView","initializeViewSlot","addEventListener","bringToFront","titleBar","get","initializeName","codeView","initializeState","initializeSnippet","logView","initializeInterval","shouldSkip","viewSlot","setAttribute","switchViewTo","livelyPrepareSave","getName","stringify","getState","getSnippet","getActiveView","removeAttribute","onPointerMove","event","clientX","clientY","lastMove","pick","onPointerUp","anchor","document","removeEventListener","simulation","getSimulation","foregroundCell","getForegroundCell","selector","shadowRoot","querySelector","getNormalizedName","setName","name","highlight","setState","state","time","log","timestamp","clearLog","execute","scope","executeSingle","resolve","executeSelf","executeSingleCell","delete","removeMirrorCells","remove","clone","cloneCell","mirror","mirrorCell","target","views","map","forEach","view","toggleSkip","startGrabbing","initPosition","parentBounds","getBoundingClientRect","isFocused","cellRef"],"mappings":"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","file":"lively-simulation-cell.js","sourcesContent":["/*MD\n  ![](https://lively-kernel.org/lively4/lively4-core/demos/lively-simulation/screenshots/cell.png){width=500px}\nMD*/\n\n\"enable aexpr\";\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport _ from 'src/external/lodash/lodash.js';\n\nconst DEFAULT_VIEW = 'codeView';\n\nexport default class LivelySimulationCell extends Morph {\n  \n  // life cycle\n  initialize() {\n    this.onPointerMove = this.onPointerMove.bind(this);\n    this.onPointerUp = this.onPointerUp.bind(this);\n    this.shouldSkip = this.hasAttribute('data-should-skip') || this.isMirrorCell();\n    this.executeSingle = false;\n    this.initializeTitleBar();\n    this.initializeCodeView();\n    this.initializeLogView();\n    this.initializeViewSlot();\n    this.addEventListener('mousedown', () => this.bringToFront());\n  }\n  \n  initializeTitleBar() {\n    const titleBar = this.get('#titleBar');\n    titleBar.initializeName(this.dataset['name']);\n  }\n  \n  initializeCodeView() {\n    const codeView = this.get('#codeView');\n    codeView.initializeState(this.dataset['state']);\n    codeView.initializeSnippet(this.dataset['snippet']);\n  }\n  \n  initializeLogView() {\n    const logView = this.get('#logView');\n    logView.initializeInterval(this.dataset['loginterval']);\n  }\n  \n  initializeViewSlot() {\n    const { shouldSkip } = this;\n    const viewSlot = this.get('#viewSlot');\n    viewSlot.setAttribute('disabled', shouldSkip);\n    this.switchViewTo(this.dataset['view']);\n  }\n  \n  livelyPrepareSave() {\n    this.dataset['name'] = this.getName();\n    this.dataset['state'] = JSON.stringify(this.getState());\n    this.dataset['snippet'] = this.getSnippet();\n    this.dataset['view'] = this.getActiveView();\n    this.dataset['loginterval'] = this.get('#logView').getInterval();\n    if (this.shouldSkip) this.setAttribute('data-should-skip', true);\n    else this.removeAttribute('data-should-skip');\n  }\n  \n  // event handler\n  onPointerMove(event) {\n    const { clientX, clientY } = event;\n    const { lastMove } = this;\n    this.style.left = `${this.offsetLeft + clientX - lastMove.clientX}px`;\n    this.style.top = `${this.offsetTop + clientY - lastMove.clientY}px`;\n    this.lastMove = _.pick(event, ['clientX', 'clientY']);\n  }\n\n  onPointerUp() {\n    const anchor = document.body.parentElement;\n    anchor.removeEventListener('pointermove', this.onPointerMove);\n    anchor.removeEventListener('pointerup', this.onPointerUp);\n  }\n  \n  // other\n  bringToFront() {\n    const simulation = this.getSimulation();\n    if (!simulation.getForegroundCell) return;\n    const foregroundCell = simulation.getForegroundCell();\n    if (foregroundCell === this) return;\n    this.style.zIndex = parseInt(foregroundCell.style.zIndex || 1) + 1;\n  }\n  \n  get(selector) {\n    const { shadowRoot } = this;\n    return shadowRoot.querySelector(selector);\n  }\n  \n  getName() {\n    return this.get('#titleBar').getName();\n  }\n  \n  getNormalizedName() {\n    return this.get('#titleBar').getNormalizedName();\n  }\n  \n  setName(name) {\n    this.get('#titleBar').setName(name);\n    const simulation = this.getSimulation();\n    this.highlight(simulation.currentHighlight);\n  }\n  \n  getState() {\n    return this.get('#codeView').getState();\n  }\n  \n  setState(state, time) {\n    if (time) this.log(time, state);\n    return this.get('#codeView').setState(state);\n  }\n  \n  getSnippet() {\n    return this.get('#codeView').getSnippet();\n  }\n  \n  log(timestamp, state) {\n    this.get('#chartView').append(timestamp, state);\n    this.get('#logView').log(timestamp, state);\n  }\n  \n  clearLog() {\n    this.get('#chartView').reset();\n    this.get('#logView').clearLog();\n  }\n  \n  execute(scope = {}) {\n    const { executeSingle, shouldSkip } = this;\n    if (!executeSingle && shouldSkip || this.isMirrorCell()) return Promise.resolve(scope);\n    return this.get('#codeView').execute(scope);\n  }\n  \n  executeSelf() {\n    if (this.executeSingle || this.isMirrorCell()) return\n    const simulation = this.getSimulation();\n    if (!simulation.executeSingleCell) return;\n    this.executeSingle = true;\n    simulation.executeSingleCell(this).finally(() => this.executeSingle = false);\n  }\n  \n  delete() {\n    const simulation = this.getSimulation();\n    if (simulation.removeMirrorCells && !this.isMirrorCell()) {\n      simulation.removeMirrorCells(this.getName());\n    }\n    this.remove();\n  }\n  \n  clone(event) {\n    const simulation = this.getSimulation();\n    if (!simulation.cloneCell) return;\n    simulation.cloneCell(event, this);\n  }\n  \n  mirror(event) {\n    const simulation = this.getSimulation();\n    if (!simulation.mirrorCell) return;\n    simulation.mirrorCell(event, this);\n  }\n  \n  switchViewTo(target = DEFAULT_VIEW) {\n    const views = _.map(['codeView', 'logView', 'chartView'], name => this.get(`#${name}`));\n    _.forEach(views, view => view.classList.remove('active'));\n    this.get(`#${target}`).classList.add('active');\n  }\n  \n  toggleSkip() {\n    if (this.isMirrorCell()) return;\n    this.shouldSkip = !this.shouldSkip;\n    const { shouldSkip } = this;\n    this.get('#viewSlot').setAttribute('disabled', shouldSkip);\n  }\n  \n  startGrabbing(event, initPosition = true) {\n    const anchor = document.body.parentElement;\n    anchor.addEventListener('pointermove', this.onPointerMove);\n    anchor.addEventListener('pointerup', this.onPointerUp);\n    this.lastMove = _.pick(event, ['clientX', 'clientY']);\n    if (initPosition) {\n      const simulation = this.getSimulation();\n      const parentBounds = simulation.getBoundingClientRect();\n      this.style.top = `${event.clientY - parentBounds.y}px`;\n      this.style.left = `${event.clientX - parentBounds.x - this.clientWidth / 2}px`;\n    }\n  }\n  \n  isFocused() {\n    return this.get('#codeView').isFocused() \n    || this.get('#titleBar').isFocused() \n    || this.get('#logView').isFocused();\n  }\n  \n  getSimulation() {\n    return this.parentElement;\n  }\n  \n  getActiveView() {\n    return this.get('#viewSlot').querySelector('.active').id;\n  }\n  \n  highlight(cellRef) {\n    this.get('#titleBar').highlight(cellRef === this.getNormalizedName().toLowerCase());\n    this.get('#codeView').highlight(cellRef);\n  }\n  \n  isMirrorCell() {\n    return this.hasAttribute('data-is-mirror');\n  }\n}\n"]}