node-red-contrib-deconz
Version:
deCONZ connectivity nodes for node-red
99 lines (89 loc) • 3.86 kB
HTML
<script type="text/x-red" data-template-name="deconz-get">
<link rel="stylesheet" href="deconz/static/css/multiple-select.css" type="text/css" />
<link rel="stylesheet" href="deconz/static/css/common.css" type="text/css" />
<div class="form-row">
<label for="node-input-name" class="l-width"><i class="icon-tag"></i> <span data-i18n="label.name"></span></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]placeholder.name">
</div>
<div class="form-row">
<label for="node-input-server" class="l-width"><i class="fa fa-globe"></i> <span data-i18n="label.server"></span></label>
<input type="text" id="node-input-server">
</div>
<div class="form-row">
<label for="node-input-device" class="l-width"><i class="fa fa-crosshairs"></i> <span data-i18n="label.device"></span></label>
<select id="node-input-device" class="s-width" data-i18n="[placeholder]multiselect.none_selected"></select>
</div>
<div class="form-row">
<label for="force-refresh" class="l-width"><i class="fa fa-refresh"></i> <span data-i18n="label.refresh"></span></label>
<a class="red-ui-button s-width" id="force-refresh" name="force-refresh"><span data-i18n="label.refresh_devices_list"></span></a>
</div>
<div class="form-row">
<label for="node-input-state" class="l-width"><i class="fa fa-tag"></i> <span data-i18n="label.state"></span></label>
<select id="node-input-state" class="s-width" data-i18n="[placeholder]multiselect.complete_payload"></select>
</div>
</script>
<script type='text/javascript'>
RED.nodes.registerType('deconz-get', {
category: 'deCONZ',
color: '#f7aa3f',
defaults: {
name: {
value: ""
},
server: {
type: "deconz-server",
required: true
},
device: {
value: null,
required: true
},
device_name: {
value: null
},
state: {
value: ""
}
},
inputs: 1,
outputs: 1,
outputLabels: ["state"],
paletteLabel: 'get',
icon: "deconz.png",
label: function () {
var label = 'deconz-get';
if (this.name) {
label = this.name;
} else if (typeof(this.device_name) == 'string' && this.device_name.length) {
label = this.device_name;
} else if (typeof(this.device) == 'string' && this.device.length) {
label = this.device;
}
return label;
},
oneditprepare: function () {
var node = this;
setTimeout(function(){
var $deviceInput = $('#node-input-device');
deconz_getItemList(node.device, '#node-input-device', {allowEmpty:true, groups:true});
$deviceInput.on('change', function(){
deconz_getItemStateList(0, '#node-input-state', {groups:true});
});
setTimeout(function () {
deconz_getItemStateList(node.state, '#node-input-state', {groups:true});
},100);
}, 100); //we need small timeout, too fire change event for server select
},
oneditsave: function () {
var selectedOptions = $('#node-input-device option:selected');
if (selectedOptions) {
this.device = selectedOptions.map(function () {
return $(this).val();
});
this.device_name = deconz_filterDeviceName(selectedOptions.text());
} else {
this.device_name = this.device = null;
}
}
});
</script>