61 lines
2.2 KiB
JavaScript
61 lines
2.2 KiB
JavaScript
|
const statestore = require('../store/state.js')
|
||
|
|
||
|
module.exports = function (RED) {
|
||
|
function TextNode (config) {
|
||
|
const node = this
|
||
|
|
||
|
RED.nodes.createNode(this, config)
|
||
|
|
||
|
let style = ''
|
||
|
if (config.style) {
|
||
|
if (config.color) {
|
||
|
style += `color: ${config.color};`
|
||
|
}
|
||
|
if (config.fontSize) {
|
||
|
style += `font-size: ${config.fontSize}px;`
|
||
|
style += `line-height: ${config.fontSize}px;`
|
||
|
}
|
||
|
if (config.font) {
|
||
|
style += `font-family: ${config.font};`
|
||
|
}
|
||
|
config.style = style
|
||
|
}
|
||
|
|
||
|
const beforeSend = function (msg) {
|
||
|
const updates = msg.ui_update
|
||
|
if (updates) {
|
||
|
if (typeof updates.label !== 'undefined') {
|
||
|
// dynamically set "label" property
|
||
|
statestore.set(group.getBase(), node, msg, 'label', updates.label)
|
||
|
}
|
||
|
if (typeof updates.layout !== 'undefined') {
|
||
|
// dynamically set "label" property
|
||
|
statestore.set(group.getBase(), node, msg, 'layout', updates.layout)
|
||
|
}
|
||
|
if (typeof updates.font !== 'undefined') {
|
||
|
// dynamically set "label" property
|
||
|
statestore.set(group.getBase(), node, msg, 'font', updates.font)
|
||
|
}
|
||
|
if (typeof updates.fontSize !== 'undefined') {
|
||
|
// dynamically set "label" property
|
||
|
statestore.set(group.getBase(), node, msg, 'fontSize', updates.fontSize)
|
||
|
}
|
||
|
if (typeof updates.color !== 'undefined') {
|
||
|
// dynamically set "label" property
|
||
|
statestore.set(group.getBase(), node, msg, 'color', updates.color)
|
||
|
}
|
||
|
}
|
||
|
return msg
|
||
|
}
|
||
|
|
||
|
// which group are we rendering this widget
|
||
|
const group = RED.nodes.getNode(config.group)
|
||
|
// inform the dashboard UI that we are adding this node
|
||
|
group.register(node, config, {
|
||
|
beforeSend
|
||
|
})
|
||
|
}
|
||
|
|
||
|
RED.nodes.registerType('ui-text', TextNode)
|
||
|
}
|