{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-jens/demos/engery-sim/history.js"],"names":["_","FixedSizeBufferQueue","POLLING_INTERVAL_IN_SECONDS","MILLISECONDS_PER_SECOND","SECONDS_PER_MINUTE","HISTORY_LENGTH","CHECKPOINTS_IN_SECONDS","History","constructor","getInnerHTML","history","undefined","poll","bind","get","historyPolling","setInterval","snapshot","push","timestamp","Date","getTime","shutdown","clearInterval","clone","map","i","checkpoint","readableTimeDifference","timeDifferenceInSeconds","minutes","Math","floor","seconds","round"],"mappings":";;;;;;;AAAOA,O;;AACAC,0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEP,YAAMC,8BAA8B,CAApC;;;;;;;;;;;;;;AACA,YAAMC,0BAA0B,IAAhC;;;;;;;;;;;;;;AACA,YAAMC,qBAAqB,EAA3B;;;;;;;;;;;;;;AACA,YAAMC,iBAAiB,KAAKD,kBAA5B;;;;;;;;;;;;;;AACA,YAAME,yBAAyB,CAAE,CAAF,EAAK,EAAL,EAAS,EAAT,EAAaF,kBAAb,EAAiC,IAAIA,kBAArC,EAAyD,KAAKA,kBAA9D,CAA/B;;;;;;;;;;;;;;;AAEA,YAAMG,OAAN,CAAc;;AAEZC,oBAAYC,eAAe,MAAM,EAAjC,EAAqC;AACnC,eAAKA,YAAL,GAAoBA,YAApB;AACA,eAAKC,OAAL,GAAeT,qBAAqBI,cAArB,EAAqCM,SAArC,CAAf;AACA,eAAKC,IAAL,GAAY,KAAKA,IAAL,CAAUC,IAAV,CAAe,IAAf,CAAZ;AACA,eAAKC,GAAL,GAAW,KAAKA,GAAL,CAASD,IAAT,CAAc,IAAd,CAAX;AACA,eAAKE,cAAL,GAAsBC,YAAY,KAAKJ,IAAjB,EAAuBV,8BAA8BC,uBAArD,CAAtB;AACA,eAAKS,IAAL;AACD;;AAEDA,eAAO;AACL,gBAAM,EAAEH,YAAF,EAAgBC,OAAhB,KAA4B,IAAlC;AACA,gBAAMO,WAAWR,cAAjB;AACAC,kBAAQQ,IAAR,CAAa;AACXC,uBAAW,IAAIC,IAAJ,GAAWC,OAAX,EADA;AAEXJ;AAFW,WAAb;AAID;;AAEDK,mBAAW;AACTC,wBAAc,KAAKR,cAAnB;AACD;;AAEDD,cAAM;AACJ,gBAAM,EAAEJ,OAAF,KAAc,IAApB;AACA,gBAAMc,QAAQxB,EAAEwB,KAAF,CAAQd,OAAR,CAAd;AACA,iBAAOV,EAAEyB,GAAF,CAAMnB,sBAAN,EAA8BoB,KAAK;AACxC,kBAAMC,aAAa3B,EAAEwB,KAAF,CAAQA,MAAMnB,iBAAiBqB,CAAvB,CAAR,CAAnB;AACA,gBAAIC,UAAJ,EAAgBA,WAAW,WAAX,IAA0B,KAAKC,sBAAL,CAA4BF,CAA5B,CAA1B;AAChB,mBAAOC,UAAP;AACD,WAJM,CAAP;AAKD;;AAEDC,+BAAuBC,uBAAvB,EAAgD;AAC9C,gBAAMC,UAAUC,KAAKC,KAAL,CAAWH,0BAA0BzB,kBAArC,CAAhB;AACA,gBAAM6B,UAAUF,KAAKG,KAAL,CAAWL,0BAA0BC,UAAU1B,kBAA/C,CAAhB;AACA,iBAAQ,GAAE0B,UAAW,GAAEA,OAAQ,MAArB,GAA6B,EAAG,GAAEG,UAAW,GAAEA,OAAQ,IAArB,GAA0B,EAAG,KAAzE;AACD;AAtCW;;;;;;;;;;;;;;;;yBAyCC1B,O","file":"history.js","sourcesContent":["import _ from 'src/external/lodash/lodash.js';\nimport FixedSizeBufferQueue from './FixedSizeBufferQueue.js';\n\nconst POLLING_INTERVAL_IN_SECONDS = 1;\nconst MILLISECONDS_PER_SECOND = 1000;\nconst SECONDS_PER_MINUTE = 60;\nconst HISTORY_LENGTH = 10 * SECONDS_PER_MINUTE;\nconst CHECKPOINTS_IN_SECONDS = [ 5, 10, 30, SECONDS_PER_MINUTE, 5 * SECONDS_PER_MINUTE, 10 * SECONDS_PER_MINUTE ];\n\nclass History {\n  \n  constructor(getInnerHTML = () => '') {\n    this.getInnerHTML = getInnerHTML;\n    this.history = FixedSizeBufferQueue(HISTORY_LENGTH, undefined);\n    this.poll = this.poll.bind(this);\n    this.get = this.get.bind(this);\n    this.historyPolling = setInterval(this.poll, POLLING_INTERVAL_IN_SECONDS * MILLISECONDS_PER_SECOND);\n    this.poll();\n  }\n  \n  poll() {\n    const { getInnerHTML, history } = this;\n    const snapshot = getInnerHTML();\n    history.push({\n      timestamp: new Date().getTime(),\n      snapshot\n    });\n  }\n  \n  shutdown() {\n    clearInterval(this.historyPolling);\n  }\n  \n  get() {\n    const { history } = this;\n    const clone = _.clone(history);\n    return _.map(CHECKPOINTS_IN_SECONDS, i => {\n      const checkpoint = _.clone(clone[HISTORY_LENGTH - i]);\n      if (checkpoint) checkpoint['timestamp'] = this.readableTimeDifference(i);\n      return checkpoint;\n    });\n  }\n  \n  readableTimeDifference(timeDifferenceInSeconds) {\n    const minutes = Math.floor(timeDifferenceInSeconds / SECONDS_PER_MINUTE);\n    const seconds = Math.round(timeDifferenceInSeconds - minutes * SECONDS_PER_MINUTE);\n    return `${minutes ? `${minutes}min ` : ''}${seconds ? `${seconds}s ` :''}ago`;\n  }\n}\n\nexport default History;"]}