Spinner.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import Plugin from './Plugin'
  2. /**
  3. * Spinner
  4. *
  5. */
  6. export default class Spinner extends Plugin {
  7. constructor (core, opts) {
  8. super(core, opts)
  9. this.type = 'progressindicator'
  10. // set default options
  11. const defaultOptions = {}
  12. // merge default options with the ones set by user
  13. this.opts = Object.assign({}, defaultOptions, opts)
  14. }
  15. setProgress (percentage) {
  16. if (percentage !== 100) {
  17. this.spinnerEl.classList.add('is-spinning')
  18. } else {
  19. this.spinnerEl.classList.remove('is-spinning')
  20. }
  21. }
  22. initSpinner () {
  23. const spinnerContainer = document.querySelector(this.target)
  24. spinnerContainer.innerHTML = '<div class="UppySpinner"></div>'
  25. this.spinnerEl = document.querySelector(`${this.target} .UppySpinner`)
  26. }
  27. initEvents () {
  28. this.core.emitter.on('progress', (data) => {
  29. const percentage = data.percentage
  30. const plugin = data.plugin
  31. this.core.log(
  32. `progress is: ${percentage}, set by ${plugin.constructor.name}`
  33. )
  34. this.setProgress(percentage)
  35. })
  36. }
  37. install () {
  38. const caller = this
  39. this.target = this.getTarget(this.opts.target, caller)
  40. this.initSpinner()
  41. this.initEvents()
  42. return
  43. }
  44. }