158 lines
3.6 KiB
JavaScript
158 lines
3.6 KiB
JavaScript
const _ = require('lodash')
|
|
const m = require('mithril')
|
|
const createModule = require('../module')
|
|
const socket = require('../../socket')
|
|
|
|
const Graphic = createModule({
|
|
init: function() {
|
|
this.monitor('graphic', 'graphic.single', {}, m.route.param('id'))
|
|
this.monitor('presets', 'preset.all', [], m.route.param('id'))
|
|
|
|
this.currentView = 'view'
|
|
this.current = {}
|
|
this.newProperty = m.prop('')
|
|
this.newTextField = m.prop('')
|
|
},
|
|
|
|
updated: function(name, variable, control) {
|
|
if (!control) {
|
|
control = variable
|
|
variable = 'graphic'
|
|
}
|
|
_.set(this[variable], name, control.target.value)
|
|
|
|
if (variable === 'graphic') {
|
|
socket.emit('graphic.update', this.graphic)
|
|
}
|
|
},
|
|
|
|
addDataField: function(type, name) {
|
|
if (!name) {
|
|
return 'Please type in proper name'
|
|
}
|
|
|
|
if (this.graphic.settings[type].includes(name)) {
|
|
return 'A property with that name already exists'
|
|
}
|
|
|
|
this.graphic.settings[type].push(name)
|
|
|
|
socket.emit('graphic.update', this.graphic)
|
|
|
|
return null
|
|
},
|
|
|
|
addProperty: function() {
|
|
this.error = this.addDataField('properties', this.newProperty())
|
|
|
|
if (!this.error) {
|
|
this.newProperty('')
|
|
|
|
if (!this.graphic.settings.main) {
|
|
this.graphic.settings.main = this.graphic.settings.properties[0]
|
|
socket.emit('graphic.update', this.graphic)
|
|
}
|
|
}
|
|
},
|
|
|
|
addTextField: function() {
|
|
this.error = this.addDataField('textfields', this.newTextField())
|
|
|
|
if (!this.error) {
|
|
this.newTextField('')
|
|
}
|
|
},
|
|
|
|
removeDataField: function(type, name) {
|
|
this.graphic.settings[type].splice(
|
|
this.graphic.settings[type].indexOf(name), 1)
|
|
socket.emit('graphic.update', this.graphic)
|
|
},
|
|
|
|
removeProperty: function(prop) {
|
|
this.removeDataField('properties', prop)
|
|
},
|
|
|
|
cleanCurrent: function() {
|
|
if (this.graphic.engine === 'countdown') {
|
|
this.current.text = this.graphic.settings.text
|
|
this.current.countdown = this.graphic.settings.countdown
|
|
this.current.finished = this.graphic.settings.finished
|
|
|
|
if (!this.current.countdown) {
|
|
this.error = 'Count to had to be defined'
|
|
}
|
|
else {
|
|
let test = new Date(this.current.countdown.replace(' ', 'T'))
|
|
if (!test.getTime()) {
|
|
this.error = 'Count to has to be valid date and time'
|
|
}
|
|
}
|
|
} else {
|
|
this.graphic.settings.properties.forEach(prop => {
|
|
if (!this.current[prop]) {
|
|
this.current[prop] = ''
|
|
}
|
|
})
|
|
}
|
|
if (this.graphic.settings.main &&
|
|
!this.current[this.graphic.settings.main]) {
|
|
this.error = `Property "${this.graphic.settings.main}" cannot be empty`
|
|
return
|
|
}
|
|
},
|
|
|
|
addPreset: function() {
|
|
this.error = ''
|
|
|
|
this.cleanCurrent()
|
|
|
|
if (this.error) return
|
|
|
|
socket.emit('preset.add', {
|
|
graphic_id: this.graphic.id,
|
|
values: this.current,
|
|
})
|
|
},
|
|
|
|
removePreset: function(preset) {
|
|
socket.emit('preset.remove', preset)
|
|
},
|
|
|
|
remove: function() {
|
|
socket.emit('graphic.remove', this.graphic)
|
|
m.route('/')
|
|
},
|
|
|
|
displayPreset: function(preset) {
|
|
socket.emit('content.display', {
|
|
graphic: this.graphic,
|
|
data: preset.values,
|
|
})
|
|
},
|
|
|
|
displayCurrent: function() {
|
|
this.error = ''
|
|
|
|
this.cleanCurrent()
|
|
|
|
if (this.error) return
|
|
|
|
socket.emit('content.display', {
|
|
graphic: this.graphic,
|
|
data: this.current,
|
|
})
|
|
},
|
|
|
|
switchView: function() {
|
|
if (Graphic.vm.currentView === 'view') {
|
|
Graphic.vm.currentView = 'settings'
|
|
return
|
|
}
|
|
Graphic.vm.currentView = 'view'
|
|
},
|
|
})
|
|
|
|
module.exports = Graphic
|
|
|
|
require('./view')
|