{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-constraints/src/components/demo/lively-simulation-log-view.js"],"names":["Morph","_","DEFAULT_INTERVAL","LivelySimulationLogView","initialize","get","updateLogTable","initializeInterval","interval","attachedCallback","registerLogTable","detachedCallback","log","timestamp","entry","logs","timestampedEntry","assign","push","logTable","getInterval","setFromJSO","filter","iLog","selector","shadowRoot","querySelector","isFocused","isChildFocused","child","doc","document"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;AAEOA,W;;AACAC,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEP,YAAMC,mBAAmB,CAAzB;;;;;;;;;;;;;;;;;AAEe,YAAMC,uBAAN,SAAsCH,KAAtC,CAA4C;;AAEzD;AACAI,qBAAa;AACX,mCAAY,EAAZ;AACA,wGAAKC,GAAL,CAAS,WAAT,yBAAuC,OAAvC,EAAgD;AAAM,4CAAY,EAAZ;AAAN,WAAhD;AACA,wGAAKA,GAAL,CAAS,WAAT,yBAAuC,UAAvC,EAAmD;AAAM,yGAAKC,cAAL;AAAN,WAAnD;AACD;;AAEDC,2BAAmBC,WAAWN,gBAA9B,EAAgD;AAAA;;AAC9C,iGAAKG,GAAL,CAAS,WAAT,mGAA8BG,QAA9B;AACD;;AAEDC,2BAAmB;AAAA;;AACjB,eAAKC,gBAAL;AACD;;AAEDC,2BAAmB;AACjB;AACA;AACD;;AAED;AACAD,2BAAmB;AACjB,gEAAuB,OAAM;AAAM;AAAN,WAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAvB,eAA8D;AAAM,yGAAKJ,cAAL;AAAN,WAA9D;AACA,kEAAyB,OAAM;AAAM,iFAAwB,QAAxB;AAAN,WAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAzB,eAAiF;AAAM,yGAAKA,cAAL;AAAN,WAAjF;AACD;;AAGD;AACAM,YAAIC,SAAJ,EAAeC,KAAf,EAAsB;AAAA;;AACpB,gBAAM,EAAEC,IAAF,KAAW,IAAjB;AACA,gBAAMC,0FAAmB,0EAAEC,MAAF,CAAS,EAAEJ,SAAF,EAAT,kFAAwBC,KAAxB,EAAnB,CAAN;AAFoB;AAGpB,8FAAKI,IAAL,uGAAUF,gBAAV;AACD;;AAEDV,yBAAiB;AAAA;;AACf,cAAI,8BAAC,IAAD,6BAAyB,QAAzB,EAAJ;AAAwC;AAAxC,WACA,MAAMa,kFAAW,KAAKd,GAAL,CAAS,WAAT,CAAX,CAAN;AACA,gBAAMG,0FAAW,KAAKY,WAAL,EAAX,CAAN;AAHe;AAIf,0GAASC,UAAT,wEAAoB,0EAAEC,MAAF,YAAS,IAAT,WAAoB,CAACrB,CAAD,EAAIsB,IAAJ;AAAA;AAAa,qBAAE,4KAAOf,QAAP,CAAF;AAAb,WAApB,CAApB;AACA,oOAAqBW,QAArB;AACD;;AAEDd,YAAImB,QAAJ,EAAc;AAAA;;AACZ,gBAAM,EAAEC,UAAF,KAAiB,IAAvB;AACA,uGAAO,sGAAWC,aAAX,uFAAyBF,QAAzB,EAAP;AACD;;AAEDJ,sBAAc;AACZ,iBAAO,gKAAS,KAAKf,GAAL,CAAS,WAAT,CAAT,qHAAyCH,gBAAzC,CAAP;AACD;;AAEDyB,oBAAY;AACV,kGAAO,KAAKC,cAAL,wEAAoB,KAAKvB,GAAL,CAAS,WAAT,CAApB,EAAP;AACD;;AAEDuB,uBAAeC,KAAf,EAAsBC,MAAMC,QAA5B,EAAsC;AAAA;;AACpC,cAAI,oMAAsBF,KAAtB,CAAJ;AAAiC,mBAAO,IAAP;AAAjC,WACA,IAAI,qNAAqBC,GAArB,kCAAJ;AACD,oGAAO,KAAKF,cAAL,kFAAoBC,KAApB,sGAA2BC,GAA3B,mCAAP;AADC,WAEA,OAAO,KAAP;AACD;AA9DwD;;yBAAtC3B,uB","file":"lively-simulation-log-view.js","sourcesContent":["\"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', () => this.logs = []);\n    this.get('#interval').addEventListener('focusout', () => 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 }, entry);\n    logs.push(timestampedEntry);\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}"]}