{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-croquet/src/components/demo/lively-simulation-log-view.js"],"names":["Morph","_","DEFAULT_INTERVAL","LivelySimulationLogView","initialize","get","cell","getCell","clearLog","updateLogTable","initializeInterval","interval","attachedCallback","registerLogTable","detachedCallback","onChange","log","timestamp","entry","logs","timestampedEntry","assign","mapValues","push","logTable","getInterval","setFromJSO","filter","iLog","selector","shadowRoot","querySelector","isFocused","isChildFocused","child","doc","document","getRootNode"],"mappings":"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","file":"lively-simulation-log-view.js","sourcesContent":["/*MD\n  ![](https://lively-kernel.org/lively4/lively4-core/demos/lively-simulation/screenshots/log-view.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_INTERVAL = 1;\n\nexport default class LivelySimulationLogView extends Morph {\n  \n  // life cycle\n  initialize() {\n    this.logs = [];\n    this.get('#clearLog').addEventListener('click', () => { \n      const cell = this.getCell();\n      if (cell.clearLog) cell.clearLog();\n    });\n    this.get('#interval').addEventListener('change', () => this.updateLogTable());\n  }\n  \n  initializeInterval(interval = DEFAULT_INTERVAL) {\n    this.get('#interval').value = interval;\n  }\n  \n  attachedCallback() {\n    this.registerLogTable();\n  }\n  \n  detachedCallback() {\n    this.logTableUpdater.dispose();\n    this.visibilityUpdater.dispose();\n  }\n  \n  // aexpr\n  registerLogTable() {\n    this.logTableUpdater = aexpr(() => this.logs.length).onChange(() => this.updateLogTable());\n    this.visibilityUpdater = aexpr(() => this.classList.contains('active')).onChange(() => this.updateLogTable());\n  }\n  \n  \n  // other\n  log(timestamp, entry) {\n    const { logs } = this;\n    const timestampedEntry = _.assign({ timestamp }, _.mapValues(entry, 'value'));\n    logs.push(timestampedEntry);\n  }\n  \n  clearLog() {\n    this.logs = [];\n  }\n  \n  updateLogTable() {\n    if (!this.classList.contains('active')) return;\n    const logTable = this.get('#logTable');\n    const interval = this.getInterval();\n    logTable.setFromJSO(_.filter(this.logs, (_, iLog) => !(iLog % interval)));\n    logTable.scrollTop = logTable.scrollHeight;\n  }\n  \n  get(selector) {\n    const { shadowRoot } = this;\n    return shadowRoot.querySelector(selector);\n  }\n  \n  getInterval() {\n    return parseInt(this.get('#interval').value) || DEFAULT_INTERVAL;\n  }\n  \n  isFocused() {\n    return this.isChildFocused(this.get('#interval'));\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  getCell() {\n    return this.getRootNode().host;\n  }\n}"]}