ControllerDialog.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * ControllerDialog.js
  3. *
  4. * @author realor
  5. */
  6. import { Dialog } from './Dialog.js'
  7. import { Controls } from './Controls.js'
  8. import { Controller } from '../controllers/Controller.js'
  9. import { I18N } from '../i18n/I18N.js'
  10. class ControllerDialog extends Dialog {
  11. constructor(application, object) {
  12. super('title.add_controller')
  13. this.application = application
  14. this.object = object
  15. this.setI18N(this.application.i18n)
  16. this.setSize(500, 420)
  17. this.nameElem = this.addTextField('controller_name', 'label.name')
  18. let listElem = document.createElement('ul')
  19. listElem.className = 'controller_list'
  20. this.bodyElem.appendChild(listElem)
  21. let first = true
  22. for (let className in Controller.classes) {
  23. let inputElem = this.addItem(className, listElem)
  24. if (first) {
  25. inputElem.checked = true
  26. first = false
  27. }
  28. }
  29. this.addButton('accept', 'button.accept', () => {
  30. this.onAccept()
  31. })
  32. this.addButton('cancel', 'button.cancel', () => {
  33. this.onCancel()
  34. })
  35. }
  36. addItem(className, listElem) {
  37. let id = Controls.getNextId()
  38. let itemElem = document.createElement('li')
  39. listElem.appendChild(itemElem)
  40. let labelElem = document.createElement('label')
  41. labelElem.htmlFor = id
  42. itemElem.appendChild(labelElem)
  43. let inputElem = document.createElement('input')
  44. inputElem.type = 'radio'
  45. inputElem.name = 'controllerClass'
  46. inputElem.value = className
  47. inputElem.id = id
  48. labelElem.appendChild(inputElem)
  49. let nameSpanElem = document.createElement('span')
  50. nameSpanElem.className = 'type'
  51. nameSpanElem.innerHTML = className
  52. labelElem.appendChild(nameSpanElem)
  53. const controllerClass = Controller.classes[className]
  54. let descSpanElem = document.createElement('span')
  55. I18N.set(descSpanElem, 'innerHTML', controllerClass.getDescription())
  56. labelElem.appendChild(descSpanElem)
  57. return inputElem
  58. }
  59. onShow() {
  60. this.nameElem.focus()
  61. }
  62. onAccept() {
  63. let className = document.querySelector('input[name="controllerClass"]:checked').value
  64. let controllerClass = Controller.classes[className]
  65. let name = this.nameElem.value
  66. this.application.createController(controllerClass, this.object, name)
  67. this.hide()
  68. }
  69. onCancel() {
  70. this.hide()
  71. }
  72. }
  73. export { ControllerDialog }