{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eventsourcing/src/components/demo/lively-simulation-code.js"],"names":["Morph","_","DEFAULT_SNIPPET","HIGHLIGHT_BG_COLOR","LivelySimulationCode","initialize","initializeCodeMirror","initializeSaveDiscard","codeMirror","get","addEventListener","handleFocusOut","handleFocusIn","setCustomStyle","initializeSnippet","snippet","editView","editorLoaded","initializeEditor","preCompile","updateCellTags","save","handleSaveDiscard","discard","attachedCallback","registerCellName","detachedCallback","codeView","getCodeView","getCell","dataflow","cellName","isEmpty","getSnippet","saveDiscard","clearAllMarks","handleCellRef","event","cellRef","simulation","getSimulation","toggleHighlight","preventDefault","setSnippet","execute","state","cellNames","keys","clearError","message","setError","resolve","pick","preProcessedSnippet","preProcess","Function","localState","getState","name","processedSnippet","preImportStateAsLocal","preImportSimulationAsLocal","preTransformExternalState","preExportStateAsLocal","replace","m","$1","s","split","ea","charAt","slice","join","re","match","exec","addWidget","highlight","cm","widget","markText","posFromIndex","replacedWith","error","forEach","getAllMarks","mark","clear","clearConnector","clearMarkupHighlight","matchingWidgets","updateMarkupHighlights","createConnector","undefined","widgets","map","filter","otherWidgets","reject","targetCell","find","cell","getNormalizedName","connector","initializeConnector","connectFrom","connectTo","scrollIntoView","selector","shadowRoot","querySelector","status","editor","getValue","isFocused","isChildFocused","child","doc","document","getRootNode"],"mappings":"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","file":"lively-simulation-code.js","sourcesContent":["/*MD\n  ![](https://lively-kernel.org/lively4/lively4-core/demos/lively-simulation/screenshots/code.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_SNIPPET = '// Enter simulation code here';\nconst HIGHLIGHT_BG_COLOR = 'cornflowerblue';\n\nexport default class LivelySimulationCode extends Morph {\n    \n  // lifecycle\n  initialize() {\n    this.initializeCodeMirror();\n    this.initializeSaveDiscard();\n  }\n  \n  initializeCodeMirror() {\n    const codeMirror = this.get('#codeMirror');\n    codeMirror.addEventListener('focusout', () => this.handleFocusOut());\n    codeMirror.addEventListener('focusin', () => this.handleFocusIn());\n    codeMirror.checkSyntax = () => {};\n    codeMirror.setCustomStyle('.CodeMirror * { font-size: 0.7rem } .cm-error { color: inherit !important; }');\n  }\n  \n  initializeSnippet(snippet = DEFAULT_SNIPPET) {\n    const codeMirror = this.get('#codeMirror');\n    codeMirror.editView(snippet);\n    codeMirror.editorLoaded().then(() => this.initializeEditor());\n  }\n  \n  initializeEditor() {\n    const codeMirror = this.get('#codeMirror');\n    codeMirror.editor.setOption('lineNumbers', false);\n    codeMirror.editor.setOption('gutters', []);\n    codeMirror.editor.setOption('highlight', false);\n    codeMirror.editor.setOption('lint', false);\n    codeMirror.editor.refresh();\n    this.preCompile();\n    this.updateCellTags();\n  }\n  \n  initializeSaveDiscard() {\n    const save = this.get('#save');\n    save.addEventListener('click', () => this.handleSaveDiscard(true));\n    const discard = this.get('#discard');\n    discard.addEventListener('click', () => this.handleSaveDiscard(false));\n  }\n  \n  attachedCallback() {\n    this.registerCellName();\n  }\n  \n  detachedCallback() {\n    this.cellNameUpdater.dispose();\n  }\n  \n  registerCellName() {\n    this.cellNameUpdater = aexpr(() => {\n      const codeView = this.getCodeView();\n      return codeView.getCell().getNormalizedName();\n    }).dataflow((cellName) => {\n      if (!_.isEmpty(cellName)) this.preCompile();\n    });\n  }\n  \n  // event handler\n  handleFocusOut() {\n    if (this.checkpoint === this.getSnippet()) this.handleSaveDiscard(false);\n  }\n  \n  handleFocusIn() {\n    if (!this.isEditing) {\n      this.isEditing = true;\n      this.checkpoint = this.getSnippet();\n      const saveDiscard = this.get('#saveDiscard');\n      saveDiscard.classList.add('show');\n    }\n    this.clearAllMarks();\n  }\n  \n  handleCellRef(event, cellRef) {\n    if (this.hasFocus) return;\n    const simulation = this.getSimulation();\n    if (simulation && simulation.toggleHighlight)\n      simulation.toggleHighlight(cellRef);\n    event.preventDefault();\n  }\n  \n  handleSaveDiscard(save) {\n    const saveDiscard = this.get('#saveDiscard');\n    saveDiscard.classList.remove('show');\n    this.isEditing = false;\n    if (save) this.save();\n    else this.discard();\n    this.updateCellTags();\n  }\n  \n  // other\n  save() {\n    this.preCompile();\n  }\n  \n  discard() {\n    this.setSnippet(this.checkpoint);\n  }\n  \n  execute(state) {\n    const cellNames = _.keys(state);\n    try {\n      this.precompiled.apply(state);\n      this.clearError();\n    } catch ({ message }) {\n      this.setError(message);\n    }\n    return Promise.resolve(_.pick(state, cellNames));\n  }\n  \n  preCompile() {\n    try {\n      const snippet = this.getSnippet();\n      const preProcessedSnippet = this.preProcess(snippet);\n      this.precompiled = new Function(preProcessedSnippet);\n      this.clearError();\n    } catch ({ message }) {\n      this.setError(message);\n    }\n  }\n  \n  preProcess(snippet) {\n    const codeView = this.getCodeView();\n    if (!codeView) return;\n    const localState = codeView.getState();\n    const name = codeView.getCell().getNormalizedName();\n    let processedSnippet = snippet;\n    processedSnippet = this.preImportStateAsLocal(processedSnippet, name, localState);\n    processedSnippet = this.preImportSimulationAsLocal(processedSnippet, localState);\n    processedSnippet = this.preTransformExternalState(processedSnippet);\n    processedSnippet = this.preExportStateAsLocal(processedSnippet, name, localState);\n    return processedSnippet;\n  }\n  \n  preTransformExternalState(processedSnippet) {\n    // adapted from old simulation (#Cell -> this['cell'])\n    return processedSnippet.replace(/#([A-Za-z][A-Za-z0-9]*(?:#[A-Za-z0-9]*)*)(\\$)?(?!#)/g, \n        (m, $1) => {\n            var s = \"this\"\n            $1.split(\"#\").forEach(function(ea) { s += \"['\" + ea.charAt(0).toLowerCase() + ea.slice(1) +\"']\"})\n            return s\n        })\n  }\n  \n  preImportStateAsLocal(snippet, name, localState) {\n    if (_.isEmpty(localState)) return snippet;\n    return `let { ${name}: { ${_.join(_.keys(localState), ',')} } } = this;\\n\n            ${snippet}`;\n  }\n  \n  preImportSimulationAsLocal(snippet, localState) {\n    if (_.isEmpty(localState)) return snippet;\n    return `const { simulation: { dt, time } } = this;\\n${snippet}`;\n  }\n  \n  preExportStateAsLocal(snippet, name, localState) {\n    if (_.isEmpty(localState)) return snippet;\n    return `${snippet}\\n\n            this['${name}'] = {\n              ${ _.join(_.keys(localState), ',\\n') }\n            };`;\n  }\n  \n  updateCellTags() {\n    this.clearAllMarks();\n    const snippet = this.getSnippet();\n    const re = /#([A-Za-z][A-Za-z0-9]*(?:#[A-Za-z0-9]*)*)(\\$)?(?!#)/g;\n    let match;\n    while ((match = re.exec(snippet)) != null) {\n      this.addWidget(match);\n    }    \n    const simulation = this.getSimulation();\n    if (!simulation) return;\n    this.highlight(simulation.currentHighlight);\n  }\n  \n  addWidget(match) {\n    const cm =  this.get('#codeMirror').editor;\n    const cellRef = match[1].toLowerCase();\n    const widget = <span style='cursor: pointer; transition: background-color 0.3s ease; text-decoration: underline;'>{ match[0] }</span>;\n    widget.dataset['cellref'] = cellRef;\n    widget.addEventListener('mousedown', (event) => this.handleCellRef(event, cellRef));\n    try {\n      cm.markText(\n        cm.posFromIndex(match.index),\n        cm.posFromIndex(match.index + match[0].length), \n        { replacedWith: widget }\n      );\n    } catch (error) { /* ignore */ }\n  }\n  \n  clearAllMarks() {\n    const cm =  this.get('#codeMirror').editor;\n    _.forEach(cm.getAllMarks(), mark => mark.clear());\n  }\n  \n  highlight(cellRef) {\n    this.clearConnector();\n    if (!cellRef) {\n      this.clearMarkupHighlight();\n    } else {\n      const matchingWidgets = this.updateMarkupHighlights(cellRef);\n      if (!_.isEmpty(matchingWidgets)) this.createConnector(cellRef);\n    }\n  }\n  \n  clearConnector() {\n    if (this.connector) {\n      this.connector.remove();\n      this.connector = undefined;\n    }\n  }\n  \n  updateMarkupHighlights(cellRef) {\n    const cm =  this.get('#codeMirror').editor;\n    const widgets = _.map(cm.getAllMarks(), mark => _.get(mark, 'widgetNode.children[0]'));\n    const matchingWidgets = _.filter(widgets, widget => widget.dataset['cellref']== cellRef);\n    const otherWidgets = _.reject(widgets, widget => widget.dataset['cellref']== cellRef);\n    _.forEach(otherWidgets, widget => widget.style.backgroundColor = '');\n    _.forEach(matchingWidgets, widget => widget.style.backgroundColor = HIGHLIGHT_BG_COLOR);\n    return matchingWidgets;\n  }\n  \n  clearMarkupHighlight() {\n    const cm =  this.get('#codeMirror').editor;\n    const widgets = _.map(cm.getAllMarks(), mark => _.get(mark, 'widgetNode.children[0]'));\n    _.forEach(widgets, widget => widget.style.backgroundColor = '');\n  }\n  \n  createConnector(cellRef) {\n    this.clearConnector();\n    const targetCell = _.find(this.getSimulation().collectCells(), cell => cell.getNormalizedName().toLowerCase() === cellRef);\n    if (targetCell) {\n      Promise.resolve(<lively-connector></lively-connector>)\n        .then(connector => {\n          this.initializeConnector(connector, targetCell);\n          this.connector = connector;\n        });\n    }\n  }\n  \n  initializeConnector(connector, targetCell) {\n    this.getSimulation().appendChild(connector);\n    connector.connectFrom(this.getCodeView().getCell(), false, true);\n    connector.connectTo(targetCell, false, true);\n    connector.style.zIndex = 9999;\n    connector.style.cursor = 'pointer';\n    connector.addEventListener('click', () => targetCell.scrollIntoView());\n  }\n  \n  setSnippet(snippet) {\n    const codeMirror = this.get('#codeMirror');\n    codeMirror.editor.setValue(snippet);\n    this.preCompile(snippet);\n  }\n  \n  get(selector) {\n    const { shadowRoot } = this;\n    return shadowRoot.querySelector(selector);\n  }\n  \n  setError(error) {\n    const status = this.get('#status');\n    status.innerText = error;\n    status.classList.add('error');\n  }\n  \n  clearError() {\n    const status = this.get('#status');\n    status.innerText = '';\n    status.classList.remove('error');\n  }\n  \n  getSnippet() {\n    const editor = this.get('#codeMirror').editor;\n    return editor ? editor.getValue() : '';\n  }\n  \n  isFocused() {\n    return this.isChildFocused(this.get('#codeMirror'));\n  }\n  \n  isChildFocused(child, doc = document) {\n    if (doc.activeElement === child) return true;\n    if (doc.activeElement && doc.activeElement.shadowRoot)\n\t\t\treturn this.isChildFocused(child, doc.activeElement.shadowRoot)\n    return false;\n  }\n  \n  getCodeView() {\n    return this.getRootNode().host;\n  }\n  \n  getSimulation() {\n    const codeView = this.getCodeView();\n    if (!codeView) return;\n    const cell = codeView.getCell();\n    if (!cell) return;\n    return cell.getSimulation();  \n  }\n}"]}