{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-RP19-4/src/client/reactive/components/basic/aexpr-monitor.js"],"names":["Morph","AExprRegistry","AexprTable","initialize","windowTitle","initializeCallbacks","initializeHeader","value","Array","populate","buttonShowEvents","addEventListener","openEventDrops","filterElement","filterChanged","update","on","aexpr","addAexpr","removeAexpr","updateAexpr","header","col","attributes","appendChild","table","detached","rows","forEach","coolDown","_filterDirty","updateFilter","setTimeout","get","_rows","each","allAsArray","createRow","push","row","rowOf","rowIndex","indexOf","splice","removeChild","index","setRow","igniteRow","heat","newColor","colorForHeat","setAttribute","childNodes","filter","tagName","getAttribute","find","htmlRow","firstChild","attribute","clearTable","remove","code","numResults","numErrored","Function","filterIn","e","style","display","textContent","length","lively","notify","eventDrops","openComponentInWindow","dataFromSource","map","groupingFunction","meta","livelyMigrate","other","livelyExample","detachedCallback","id","ae","function","deBabelify","currentValue","getValueTag","callbacks","listify","dependencies","getDependencies","actions","evt","openInspector","undefined","dispose","location","source","func","toString","inspectorLink","object","link","onclick","isError","evaluateToCurrentValue","supportsDependencies","all","dependencyString","dependency","descriptor","getAsDependencyDescription","type","isMemberDependency","isGlobalDependency","isLocalDependency","Object","keys","key","array","protect","others","Math","round","currentHeat","max"],"mappings":"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","file":"aexpr-monitor.js","sourcesContent":["\"enable aexpr\";\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport {AExprRegistry} from 'src/client/reactive/active-expression/active-expression.js';\n\nexport default class AexprTable extends Morph {\n  async initialize() {\n    this.windowTitle = \"Active Expression Monitor\";\n    this.initializeCallbacks();\n    this.initializeHeader();\n    this.value = new Array();\n    this.populate();\n    this.buttonShowEvents.addEventListener('click', () => this.openEventDrops());\n    this.filterElement.addEventListener('change', () => this.filterChanged());\n    this.update();\n  }\n  \n  initializeCallbacks(){\n    AExprRegistry.on('add', (aexpr) => this.addAexpr(aexpr));\n    AExprRegistry.on('remove', (aexpr) => this.removeAexpr(aexpr));\n    AExprRegistry.on('update', (aexpr) => this.updateAexpr(aexpr));\n  }\n  \n  initializeHeader(){\n    let header = <tr class='header'></tr>;\n    for(let col in attributes)header.appendChild(<td>{col}</td>)\n    this.table.appendChild(header);\n  }\n  \n  update() {\n    if(this.detached)return;\n    this.rows().forEach(coolDown);\n    if(this._filterDirty !== false) {\n      this.updateFilter();\n      this._filterDirty = false;\n    }\n    setTimeout(() => {this.update()}, 100);\n  }\n  \n  \n  get table() {\n    return this.get(\"#table\");\n  }\n  \n  get filterElement() {\n    return this.get(\"#filter\");\n  }\n  \n  get buttonShowEvents() {\n    return this.get(\"#buttonShowEvents\");\n  }\n\n  \n  populate() {  \n    this._rows = [];\n    for(let each of AExprRegistry.allAsArray())this.addAexpr(each);\n  } \n  \n  addAexpr(aexpr){\n    this.createRow(aexpr);\n    this.value.push(aexpr);\n    this.filterChanged();\n  }\n  \n  removeAexpr(aexpr){\n    let row = this.rowOf(aexpr);\n    if(row) {\n      let rowIndex = this.rows().indexOf(row);\n      this.rows().splice(rowIndex, 1);\n      this.table.removeChild(row);\n    }\n  \n    let index = this.value.indexOf(aexpr);\n    this.value.splice(index, 1);\n    this.filterChanged();\n  }\n  \n  updateAexpr(aexpr){\n    let row = this.rowOf(aexpr);\n    if(!row)return;\n    this.setRow(row, aexpr);\n    this.igniteRow(row);\n    this.filterChanged();\n  }\n  \n  igniteRow(row){\n    row.heat++;\n    let newColor = colorForHeat(row.heat);\n    row.setAttribute(\"bgcolor\", newColor);\n  }\n  \n  rows() {\n    if(!this._rows) {\n      this._rows = this.table.childNodes\n        .filter(each => each.tagName == 'TR')\n        .filter(each => each.getAttribute('class') == 'aeRow');\n    }\n    return this._rows;\n  }\n  \n  rowOf(aexpr){\n    return this.rows().find(each => each.aexpr === aexpr);\n  }\n  \n  createRow(aexpr){\n    let htmlRow = <tr class='aeRow'></tr>;\n    htmlRow.heat = 0;\n    this.setRow(htmlRow, aexpr);\n    this.table.appendChild(htmlRow);\n    this.rows().push(htmlRow);\n  }\n  \n  setRow(row, aexpr){\n    row.aexpr = aexpr;\n    while(row.firstChild) {\n      row.removeChild(row.firstChild);\n    }\n    for(let attribute in attributes){\n      let value = attributes[attribute](aexpr);\n      row.appendChild(<td>{value}</td>);\n    }\n  }\n  \n  clearTable() {\n    while (this.table.firstChild)this.table.firstChild.remove();\n  }\n  \n  filterChanged() {\n    this._filterDirty = true;\n  }\n  \n  updateFilter() {\n    let code = this.filterElement.value;\n    let numResults = 0;\n    let numErrored = 0;\n    try {\n      if(code && code !== '')this.filter = new Function(\"each\", \"return \"+code);\n      else this.filter = () => true;\n      this.rows().forEach(each => {\n        let filterIn = false;\n        try {\n          filterIn = this.filter(each.aexpr);\n        } catch(e) {\n          filterIn = false;\n          numErrored++;\n        };\n        if(filterIn)numResults++;\n        each.style.display = filterIn ? 'table-row' : 'none';\n      });\n      this.get('#filter-info').textContent = \n        \"results/errored/total = \"+numResults+\"/\"+numErrored+\"/\"+this.rows().length;\n    } catch(e) {\n      lively.notify('Error parsing '+code+': '+e);\n    }\n  }\n  \n  async openEventDrops() {\n    let eventDrops = await lively.openComponentInWindow('aexpr-timeline');\n    eventDrops.dataFromSource = this.rows()\n      .map(each => each.aexpr)\n      .filter(each => this.filter(each));\n    eventDrops.groupingFunction = each => each.meta().get('id');\n    eventDrops.update();\n  }\n  \n  livelyMigrate(other) {\n    \n  }\n  \n  async livelyExample() {\n  \n  }\n  \n  detachedCallback() {\n    this.detached = true;\n  }\n  \n\n}\n\n/*MD ## Row Utilities MD*/\nconst attributes = {\n  id : ae => ae.meta().get('id'),\n  function : deBabelify,\n  currentValue : getValueTag,\n  callbacks : ae => listify(ae.callbacks),\n  dependencies : getDependencies,\n  actions : ae => <div>\n    <button click={evt => lively.openInspector(ae, undefined, ae)}>inspect</button>\n    <button click={() => ae.dispose()}>dispose</button>\n  </div>\n}\n  \nfunction deBabelify(ae) {\n  let location = ae.meta().get('location');\n  return location && location.source || ae.func.toString();\n}\n\nfunction inspectorLink(object) {\n  let link = <a>{object && object.toString()}</a>;\n  link.onclick = () => lively.openInspector(object);\n  return link;\n}\n                  \n\nfunction getValueTag(ae) {\n  let {value, isError} = ae.evaluateToCurrentValue();\n  return <font color={isError ? \"red\" : \"blue\"}>{\"\"+value}</font>;\n}\n\nfunction getDependencies(ae) {\n  return ae.supportsDependencies() ? \n      listify(ae.dependencies().all().map(dependencyString))\n      : <font color=\"#551199\">{\"no dependecy api available\"}</font>\n}\n  \nfunction dependencyString(dependency) {\n  let descriptor = dependency.getAsDependencyDescription();\n  let type = 'unknown type';\n  if(dependency.isMemberDependency()) type = 'member';\n  if(dependency.isGlobalDependency()) type = 'global';\n  if(dependency.isLocalDependency()) type = 'local';\n  return <li>{type}\n    {listify(Object.keys(descriptor)\n      .map(key => <span>{key+' : '}{inspectorLink(descriptor[key])}</span>), true)}</li>\n}\n\nfunction listify(array, protect) {\n  return <ul style=\"display:block\">{...(\n      array.map(each => <li style={protect ? \"white-space: nowrap\" : \"\"}>{each}</li>)\n    )}</ul>\n}\n\nfunction colorForHeat(heat) {\n  let others = Math.round(256/(heat+1.02)).toString(16);\n  if(others.length == 1)others = \"0\"+others;\n  return \"#FF\"+others+others;\n}\n\nfunction coolDown(row) {\n  let currentHeat = row.heat;\n  if(currentHeat <= 0)return;\n  row.heat = Math.max(currentHeat * 0.95 - 0.01, 0);\n  let newColor = colorForHeat(row.heat);\n  row.setAttribute(\"bgcolor\", newColor);\n  if(row.heat <= 0) {\n    row.heat = 0;\n    row.setAttribute(\"bgcolor\", \"#FFFFFF\");\n  }\n}"]}