| import { EStatus, ProgressBarUIBase } from './progressBarUIBase.js'; | |
| export class ProgressBarUI extends ProgressBarUIBase { | |
| constructor(rootElement, showSectionFlag, centerNode) { | |
| super('crystools-progressBar-root', rootElement); | |
| Object.defineProperty(this, "rootElement", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: rootElement | |
| }); | |
| Object.defineProperty(this, "showSectionFlag", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: showSectionFlag | |
| }); | |
| Object.defineProperty(this, "centerNode", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: centerNode | |
| }); | |
| Object.defineProperty(this, "htmlProgressSliderRef", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: void 0 | |
| }); | |
| Object.defineProperty(this, "htmlProgressLabelRef", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: void 0 | |
| }); | |
| Object.defineProperty(this, "currentStatus", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: void 0 | |
| }); | |
| Object.defineProperty(this, "timeStart", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: void 0 | |
| }); | |
| Object.defineProperty(this, "currentProgress", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: void 0 | |
| }); | |
| Object.defineProperty(this, "showProgressBarFlag", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: void 0 | |
| }); | |
| Object.defineProperty(this, "createDOM", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: () => { | |
| this.rootElement.setAttribute('title', 'click to see the current working node'); | |
| this.rootElement.addEventListener('click', this.centerNode); | |
| const progressBar = document.createElement('div'); | |
| progressBar.classList.add('crystools-progress-bar'); | |
| this.rootElement.append(progressBar); | |
| const progressSlider = document.createElement('div'); | |
| this.htmlProgressSliderRef = progressSlider; | |
| progressSlider.classList.add('crystools-slider'); | |
| progressBar.append(this.htmlProgressSliderRef); | |
| const progressLabel = document.createElement('div'); | |
| progressLabel.classList.add('crystools-label'); | |
| progressLabel.innerHTML = '0%'; | |
| this.htmlProgressLabelRef = progressLabel; | |
| progressBar.append(this.htmlProgressLabelRef); | |
| } | |
| }); | |
| Object.defineProperty(this, "updateDisplay", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: (currentStatus, timeStart, currentProgress) => { | |
| if (!(this.showSectionFlag && this.showProgressBarFlag)) { | |
| return; | |
| } | |
| if (!(this.htmlProgressLabelRef && this.htmlProgressSliderRef)) { | |
| console.error('htmlProgressLabelRef or htmlProgressSliderRef is undefined'); | |
| return; | |
| } | |
| this.currentStatus = currentStatus; | |
| this.timeStart = timeStart; | |
| this.currentProgress = currentProgress; | |
| if (currentStatus === EStatus.executed) { | |
| this.htmlProgressLabelRef.innerHTML = 'cached'; | |
| const timeElapsed = Date.now() - timeStart; | |
| if (timeStart > 0 && timeElapsed > 0) { | |
| this.htmlProgressLabelRef.innerHTML = new Date(timeElapsed).toISOString().substr(11, 8); | |
| } | |
| this.htmlProgressSliderRef.style.width = '0'; | |
| } | |
| else if (currentStatus === EStatus.execution_error) { | |
| this.htmlProgressLabelRef.innerHTML = 'ERROR'; | |
| this.htmlProgressSliderRef.style.backgroundColor = 'var(--error-text)'; | |
| } | |
| else if (currentStatus === EStatus.executing) { | |
| this.htmlProgressLabelRef.innerHTML = `${currentProgress}%`; | |
| this.htmlProgressSliderRef.style.width = this.htmlProgressLabelRef.innerHTML; | |
| this.htmlProgressSliderRef.style.backgroundColor = 'green'; | |
| } | |
| } | |
| }); | |
| Object.defineProperty(this, "showSection", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: (value) => { | |
| this.showSectionFlag = value; | |
| this.displaySection(); | |
| } | |
| }); | |
| Object.defineProperty(this, "showProgressBar", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: (value) => { | |
| this.showProgressBarFlag = value; | |
| this.displaySection(); | |
| } | |
| }); | |
| Object.defineProperty(this, "displaySection", { | |
| enumerable: true, | |
| configurable: true, | |
| writable: true, | |
| value: () => { | |
| this.rootElement.style.display = (this.showSectionFlag && this.showProgressBarFlag) ? 'block' : 'none'; | |
| } | |
| }); | |
| this.createDOM(); | |
| } | |
| } | |