ToggleButtonController.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * ToggleButtonController.js
  3. *
  4. * @author realor
  5. */
  6. import { PanelController } from './PanelController.js'
  7. import { Controller } from './Controller.js'
  8. class ToggleButtonController extends PanelController {
  9. constructor(object, name) {
  10. super(object, name)
  11. this.output = 0
  12. this.valueOff = 0
  13. this.valueOn = 1
  14. this.buttonClass = 'toggle_button'
  15. this.height = 150
  16. this._onValueChange = this.onValueChange.bind(this)
  17. }
  18. createPanel() {
  19. super.createPanel('left', 150)
  20. let buttonElem = document.createElement('span')
  21. this.buttonElem = buttonElem
  22. buttonElem.setAttribute('role', 'button')
  23. let inputElem = document.createElement('input')
  24. this.inputElem = inputElem
  25. inputElem.type = 'checkbox'
  26. inputElem.checked = parseInt(this.output) === this.valueOn
  27. buttonElem.appendChild(inputElem)
  28. let labelElem = document.createElement('label')
  29. labelElem.setAttribute('data-off', 'OFF')
  30. labelElem.setAttribute('data-on', 'ON')
  31. buttonElem.appendChild(labelElem)
  32. this.panel.bodyElem.appendChild(buttonElem)
  33. inputElem.addEventListener('change', this._onValueChange, false)
  34. this.update()
  35. }
  36. onValueChange(event) {
  37. this.output = this.inputElem.checked ? this.valueOn : this.valueOff
  38. this.application.notifyObjectsChanged(this.object, this)
  39. }
  40. onNodeChanged(event) {
  41. if (event.type === 'nodeChanged' && this.hasChanged(event)) {
  42. this.update()
  43. }
  44. }
  45. update() {
  46. this.panel.title = this.title || ''
  47. this.buttonElem.className = this.buttonClass || 'toggle_button'
  48. let output = this.inputElem.checked ? this.valueOn : this.valueOff
  49. if (output !== this.output) {
  50. this.output = output
  51. this.application.notifyObjectsChanged(this.object, this)
  52. }
  53. }
  54. }
  55. Controller.addClass(ToggleButtonController)
  56. export { ToggleButtonController }