ProgressBar.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /**
  2. * ProgressBar.js
  3. *
  4. * @author realor
  5. */
  6. class ProgressBar {
  7. constructor(element) {
  8. this.element = element
  9. this.element.className = 'progress_bar'
  10. this.messageElem = document.createElement('div')
  11. this.element.appendChild(this.messageElem)
  12. this.messageElem.className = 'message'
  13. this.barElem = document.createElement('div')
  14. this.element.appendChild(this.barElem)
  15. this.barElem.className = 'bar'
  16. this.progressElem = document.createElement('div')
  17. this.barElem.appendChild(this.progressElem)
  18. this.progressElem.className = 'progress'
  19. this.percentElem = document.createElement('div')
  20. this.barElem.appendChild(this.percentElem)
  21. this.percentElem.className = 'percent'
  22. this._progress = undefined
  23. this._message = null
  24. this.visible = false
  25. }
  26. get visible() {
  27. return this._visible
  28. }
  29. set visible(value) {
  30. this._visible = value
  31. this.element.style.display = value ? 'block' : 'none'
  32. }
  33. get progress() {
  34. return this._progress
  35. }
  36. set progress(progress) {
  37. this._progress = progress
  38. if (progress === undefined) {
  39. this.progressElem.innerHTML = ''
  40. this.element.classList.add('undeterminate')
  41. this.percentElem.style.display = 'none'
  42. } else {
  43. progress = Math.round(progress)
  44. this.element.classList.remove('undeterminate')
  45. this.progressElem.style.width = progress + '%'
  46. this.percentElem.style.display = 'block'
  47. this.percentElem.innerHTML = progress + '%'
  48. }
  49. }
  50. get message() {
  51. return this._message
  52. }
  53. set message(message) {
  54. this._message = message
  55. this.messageElem.innerHTML = message ? message : ''
  56. }
  57. }
  58. export { ProgressBar }