mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Starting to add scale factors & linearisation
Added breakpoints property to the node Building the breakpoints editor (nearly there!)
This commit is contained in:
parent
c6108cffb4
commit
68080df45e
@ -37,6 +37,16 @@
|
|||||||
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
||||||
<input type="text" id="node-input-name" placeholder="Name">
|
<input type="text" id="node-input-name" placeholder="Name">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
Input Scaling
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<div id="node-input-breakpoint-container-div" style="border-radius: 5px; height: 310px; padding: 5px; border: 1px solid #ccc; overflow-y:scroll;">
|
||||||
|
<ol id="node-input-breakpoint-container" style=" list-style-type:none; margin: 0;">
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
<a href="#" class="btn btn-mini" id="node-input-add-breakpoint" style="margin-top: 4px;"><i class="icon-plus"></i> Add Breakpoint</a>
|
||||||
|
</div>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- Add help text -->
|
<!-- Add help text -->
|
||||||
@ -58,6 +68,7 @@ analogue input in the range [0-1), or NaN if an read error occurs (errors are lo
|
|||||||
name: { value:"" }, // along with default values.
|
name: { value:"" }, // along with default values.
|
||||||
topic: { value:"", required:true },
|
topic: { value:"", required:true },
|
||||||
pin: { value:"", required:true },
|
pin: { value:"", required:true },
|
||||||
|
breakpoints: { value:[{input:0.0, output:0.0, mutable:false}, {input:1.0, output:1.0, mutable:false}] }
|
||||||
},
|
},
|
||||||
inputs:1, // set the number of inputs - only 0 or 1
|
inputs:1, // set the number of inputs - only 0 or 1
|
||||||
outputs:1, // set the number of outputs - 0 to n
|
outputs:1, // set the number of outputs - 0 to n
|
||||||
@ -67,6 +78,81 @@ analogue input in the range [0-1), or NaN if an read error occurs (errors are lo
|
|||||||
},
|
},
|
||||||
labelStyle: function() { // sets the class to apply to the label
|
labelStyle: function() { // sets the class to apply to the label
|
||||||
return this.name ? "node_label_italic" : "";
|
return this.name ? "node_label_italic" : "";
|
||||||
|
},
|
||||||
|
oneditprepare: function () {
|
||||||
|
function generateBreakpoint(i, breakpoint) {
|
||||||
|
var container = $('<li/>', {style:"margin:0; padding:8px 0px; border-bottom: 1px solid #ccc;"});
|
||||||
|
var row = $('<div/>').appendTo(container);
|
||||||
|
var row2 = $('<div/>', {style:"padding-top: 5px; text-align: right;"}).appendTo(container);
|
||||||
|
|
||||||
|
var breakpointField = $('<span/>').appendTo(row);
|
||||||
|
var inputValueField = $('<input/>',
|
||||||
|
{class:"node-input-breakpoint-input-value", type:"text", style:"margin-left:5px; margin-right:2px; width:36%;"}).appendTo(breakpointField);
|
||||||
|
breakpointField.append(" => ");
|
||||||
|
var outputValueField = $('<input/>',
|
||||||
|
{class:"node-input-breakpoint-output-value", type:"text", style:"margin-left:0px; width:36%;"}).appendTo(breakpointField);
|
||||||
|
var finalSpan = $('<span/>', {style:"float:right; margin-top:3px; margin-right:10px;"}).appendTo(row);
|
||||||
|
var mutableFlag = $('<span/>', {class:"node-input-breakpoint-mutable", style:"display:hide;"}).appendTo(row);
|
||||||
|
if (breakpoint.mutable) {
|
||||||
|
mutableFlag.attr("mutable", "true");
|
||||||
|
var deleteButton = $('<a/>', {href:"#", class:"btn btn-mini", style:"margin-left: 5px;"}).appendTo(finalSpan);
|
||||||
|
$('<i/>', {class:"icon-remove"}).appendTo(deleteButton);
|
||||||
|
|
||||||
|
deleteButton.click(function() {
|
||||||
|
container.css({"background":"#fee"});
|
||||||
|
container.fadeOut(300, function() {
|
||||||
|
$(this).remove();
|
||||||
|
$("#node-input-breakpoint-container").children().each(function (i) {
|
||||||
|
$(this).find(".node-input-breakpoint-index").html(i + 1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
mutableFlag.attr("mutable", "false");
|
||||||
|
}
|
||||||
|
inputValueField.val(breakpoint.input);
|
||||||
|
outputValueField.val(breakpoint.output);
|
||||||
|
$("#node-input-breakpoint-container").append(container);
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#node-input-add-breakpoint").click(function () {
|
||||||
|
generateBreakpoint($("#node-input-breakpoint-container").children().length + 1, {input:0, output:0, mutable:true});
|
||||||
|
$("#node-input-breakpoint-container-div").scrollTop($("#node-input-breakpoint-container-div").get(0).scrollHeight);
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var i = 0; i < this.breakpoints.length; i++) {
|
||||||
|
var breakpoint = this.breakpoints[i];
|
||||||
|
generateBreakpoint(i + 1, breakpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle resizing the Input Scaling div when the dialog is resized
|
||||||
|
function switchDialogResize(ev, ui) {
|
||||||
|
$("#node-input-breakpoint-container-div").css("height", (ui.size.height - 290) + "px");
|
||||||
|
};
|
||||||
|
|
||||||
|
$("#dialog").on("dialogresize", switchDialogResize);
|
||||||
|
$("#dialog").one("dialogopen", function (ev) {
|
||||||
|
var size = $("#dialog").dialog('option', 'sizeCache-switch');
|
||||||
|
if (size) {
|
||||||
|
switchDialogResize(null, { size:size });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#dialog").one("dialogclose", function(ev, ui) {
|
||||||
|
$("#dialog").off("dialogresize", switchDialogResize);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
oneditsave: function() {
|
||||||
|
var breakpoints = $("#node-input-breakpoint-container").children();
|
||||||
|
var node = this;
|
||||||
|
node.breakpoints = [];
|
||||||
|
breakpoints.each(function (i) {
|
||||||
|
var breakpoint = $(this);
|
||||||
|
var r = {};
|
||||||
|
r.input = breakpoint.find(".node-input-breakpoint-input-value").val() - 0
|
||||||
|
r.output = breakpoint.find(".node-input-breakpoint-output-value").val() - 0;
|
||||||
|
r.mutable = breakpoint.find(".node-input-breakpoint-mutable").attr("mutable") == "true";
|
||||||
|
node.breakpoints.push(r);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -32,11 +32,17 @@ function AnalogInputNode(n) {
|
|||||||
// Store local copies of the node configuration (as defined in the .html)
|
// Store local copies of the node configuration (as defined in the .html)
|
||||||
this.topic = n.topic;
|
this.topic = n.topic;
|
||||||
this.pin = n.pin;
|
this.pin = n.pin;
|
||||||
|
this.breakpoints = n.breakpoints;
|
||||||
|
|
||||||
// Define 'node' to allow us to access 'this' from within callbacks (the 'var' is essential -
|
// Define 'node' to allow us to access 'this' from within callbacks (the 'var' is essential -
|
||||||
// otherwise there is only one global 'node' for all instances of AnalogInputNode!)
|
// otherwise there is only one global 'node' for all instances of AnalogInputNode!)
|
||||||
var node = this;
|
var node = this;
|
||||||
|
|
||||||
|
node.log("breakpoints:");
|
||||||
|
for (var i = 0; i < node.breakpoints.length; i++) {
|
||||||
|
node.log(i + ": {input:" + node.breakpoints[i].input + ", output:" + node.breakpoints[i].output + ", mutable:" + node.breakpoints[i].mutable +"}");
|
||||||
|
}
|
||||||
|
|
||||||
// A callback function variable seems to be more reliable than a lambda ?!
|
// A callback function variable seems to be more reliable than a lambda ?!
|
||||||
var readCallback = function (x) {
|
var readCallback = function (x) {
|
||||||
var msg = {};
|
var msg = {};
|
||||||
|
Loading…
Reference in New Issue
Block a user