92 lines
3.8 KiB
JavaScript
92 lines
3.8 KiB
JavaScript
const statestore = require('../store/state.js')
|
|
|
|
module.exports = function (RED) {
|
|
function SliderNode (config) {
|
|
RED.nodes.createNode(this, config)
|
|
const node = this
|
|
|
|
// which group are we rendering this widget
|
|
const group = RED.nodes.getNode(config.group)
|
|
|
|
this.pt = config.passthru
|
|
this.state = [' ', ' ']
|
|
|
|
const thumbLabel = config.thumbLabel
|
|
if (thumbLabel === 'false') {
|
|
config.thumbLabel = false
|
|
} else if (thumbLabel === 'true') {
|
|
config.thumbLabel = true
|
|
}
|
|
|
|
const showTicks = config.showTicks
|
|
if (showTicks === 'false') {
|
|
config.showTicks = false
|
|
} else if (showTicks === 'true') {
|
|
config.showTicks = true
|
|
}
|
|
|
|
node.status({})
|
|
|
|
const evts = {
|
|
onChange: true,
|
|
beforeSend: function (msg) {
|
|
// backward compatibility for older selection type
|
|
|
|
if (typeof msg.payload !== 'undefined') {
|
|
if (!node.pt) {
|
|
node.state[0] = msg.payload
|
|
node.status({ shape: 'dot', fill: 'grey', text: node.state[0] + ' | ' + node.state[1] })
|
|
} else if (node._wireCount === 0) {
|
|
node.status({ shape: 'dot', fill: 'grey', text: msg.payload })
|
|
}
|
|
}
|
|
/**
|
|
* Dynamic Properties
|
|
* */
|
|
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.thumbLabel) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'thumbLabel', updates.thumbLabel)
|
|
}
|
|
if (typeof (updates.showTicks) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'showTicks', updates.showTicks)
|
|
}
|
|
if (typeof (updates.min) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'min', updates.min)
|
|
}
|
|
if (typeof (updates.step) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'step', updates.step)
|
|
}
|
|
if (typeof (updates.max) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'max', updates.max)
|
|
}
|
|
if (typeof (updates.iconPrepend) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'iconPrepend', updates.iconPrepend)
|
|
}
|
|
if (typeof (updates.iconAppend) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'iconAppend', updates.iconAppend)
|
|
}
|
|
if (typeof (updates.color) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'color', updates.color)
|
|
}
|
|
if (typeof (updates.colorTrack) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'colorTrack', updates.colorTrack)
|
|
}
|
|
if (typeof (updates.colorThumb) !== 'undefined') {
|
|
statestore.set(group.getBase(), node, msg, 'colorThumb', updates.colorThumb)
|
|
}
|
|
}
|
|
return msg
|
|
}
|
|
}
|
|
|
|
// inform the dashboard UI that we are adding this node
|
|
group.register(node, config, evts)
|
|
}
|
|
RED.nodes.registerType('ui-slider', SliderNode)
|
|
}
|