2
0
Files
node-red-contrib-mi-devices/node-red-contrib-xiaomi-configurator/xiaomi-configurator.html
2017-07-02 23:49:12 +02:00

99 lines
4.5 KiB
HTML

<script type="text/javascript">
RED.nodes.registerType('xiaomi-configurator', {
category: 'config',
defaults: {
name: {value: ""},
deviceList: {value:[{ sid:"", desc:"", model:"plug"}]},
key: {value: ""}
},
label: function () {
return this.name || "xiaomi-configurator";
},
oneditprepare: function() {
var node = this;
var tw_sensor_ht = {value:"sensor_ht", label:"sensor ht", icon:"icons/sensor-ht-tw-icon.png"};
var tw_magnet = {value:"magnet", label:"contact", icon:"icons/magnet-tw-icon.png"};
var tw_motion = {value:"motion", label:"motion", icon:"icons/motion-tw-icon.png"};
var tw_plug = {value:"plug", label:"plug", icon:"icons/plug-tw-icon.png"};
var tw_switch = {value:"switch", label:"switch", icon:"icons/switch-tw-icon.png"};
$("#node-config-input-devices").css('min-height','250px').css('min-width','450px').editableList({
addItem: function(container, i, device) {
if (!device.hasOwnProperty('model')) {
device.model = 'sensor_ht';
}
var row = $('<div/>').appendTo(container);
$('<label/>',{for:"node-config-input-sid-"+i, style:"margin-left: 3px; width: 15px;vertical-align:middle"}).appendTo(row);
var sid = $('<input/>',{id:"node-config-input-sid-"+i,type:"text", style:"width:auto;vertical-align:top"}).appendTo(row);
sid.typedInput({
default: 'sensor_ht',
types: [tw_sensor_ht, tw_magnet, tw_motion, tw_plug, tw_switch]
});
$('<label/>',{for:"node-config-input-desc-"+i, style:"margin-left: 7px; width: 20px;vertical-align:middle"}).html('<i class="fa fa-pencil-square-o"></i>').appendTo(row);
var desc = $('<input/>',{id:"node-config-input-desc-"+i, type:"text", style:"width:auto;vertical-align:top"}).appendTo(row);
sid.typedInput('value', device.sid);
sid.typedInput('type', device.model);
desc.val(device.desc);
},
resize: function() {
console.log("got resized");
},
removeItem: function(opt) {
},
sortItems: function(rules) {
},
sortable: true,
removable: true
});
for (var i=0;i<this.deviceList.length;i++) {
var device = this.deviceList[i];
$("#node-config-input-devices").editableList('addItem', device);
}
var listHeight = $("#node-config-input-devices").editableList('items').size() * 51 + 50;
$("#node-config-input-devices").editableList('height', listHeight);
},
oneditsave: function() {
var devices = $("#node-config-input-devices").editableList('items');
var node = this;
var devicesArray = [];
devices.each(function(i) {
var deviceElement = $(this);
var sid = deviceElement.find("#node-config-input-sid-"+i).val();
var desc = deviceElement.find("#node-config-input-desc-"+i).val();
// var model = deviceElement.find("#node-config-input-model-"+i).val();
var model = deviceElement.find("#node-config-input-sid-"+i).typedInput('type').val();
var d = {};
d['sid']=sid;
d['desc']=desc;
d['model']=model;
devicesArray.push(d);
});
node.deviceList = devicesArray;
}
});
</script>
<script type="text/x-red" data-template-name="xiaomi-configurator">
<div class="form-row">
<label for="node-config-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-config-input-name" placeholder="Name">
</div>
<div class="form-row">
<label for="node-config-input-key"><i class="fa fa-ticket"></i> Key</label>
<input type="text" id="node-config-input-key" placeholder="Key">
</div>
<div class="form-row node-config-input-devices">
<ol id="node-config-input-devices"></ol>
</div>
</script>
<script type="text/x-red" data-help-name="xiaomi-configurator">
<p>Configuration node for a xiaomi gateway device</p>
</script>