From bb12ec702a9611bf500e1e02f78e143a261620ea Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Fri, 24 Jan 2020 18:20:14 +0000 Subject: [PATCH 1/5] Add second output to trigger node and add tests --- .../nodes/core/function/89-trigger.html | 19 +++- .../nodes/core/function/89-trigger.js | 7 +- .../nodes/locales/en-US/messages.json | 1 + test/nodes/core/function/89-trigger_spec.js | 102 ++++++++++++------ 4 files changed, 91 insertions(+), 38 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html index 28bf0cdeb..7c97f44f7 100644 --- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html +++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html @@ -14,7 +14,7 @@ limitations under the License. --> - diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js index 5dfe45fee..d0a350e6a 100644 --- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js +++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js @@ -25,6 +25,7 @@ module.exports = function(RED) { this.op1type = n.op1type || "str"; this.op2type = n.op2type || "str"; this.second = n.second || false; + this.property = n.property || "topic"; if (this.op1type === 'val') { if (this.op1 === 'true' || this.op1 === 'false') { @@ -112,7 +113,7 @@ module.exports = function(RED) { }); var processMessage = function(msg) { - var topic = msg.topic || "_none"; + var topic = RED.util.getMessageProperty(msg,node.property) || "_none"; var promise; if (node.bytopic === "all") { topic = "_none"; } node.topics[topic] = node.topics[topic] || {}; diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/function/89-trigger.html b/packages/node_modules/@node-red/nodes/locales/en-US/function/89-trigger.html index 836cabc6f..3caa0ab0a 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/function/89-trigger.html +++ b/packages/node_modules/@node-red/nodes/locales/en-US/function/89-trigger.html @@ -14,7 +14,7 @@ limitations under the License. --> - diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json index 5eb83f9d1..5774d5dac 100755 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -302,7 +302,7 @@ "wait-for": "wait for", "wait-loop": "resend it every", "for": "Handling", - "bytopics": "each msg.topic independently", + "bytopics": "each", "alltopics": "all messages", "duration": { "ms": "Milliseconds", diff --git a/packages/node_modules/@node-red/nodes/locales/ja/messages.json b/packages/node_modules/@node-red/nodes/locales/ja/messages.json index adc033390..be98d50e3 100755 --- a/packages/node_modules/@node-red/nodes/locales/ja/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/ja/messages.json @@ -302,7 +302,7 @@ "wait-for": "指定した時間待機", "wait-loop": "指定した時間間隔毎に送信を繰り返す", "for": "処理対象", - "bytopics": "msg.topic毎", + "bytopics": "毎", "alltopics": "全メッセージ", "duration": { "ms": "ミリ秒", diff --git a/test/nodes/core/function/89-trigger_spec.js b/test/nodes/core/function/89-trigger_spec.js index ebf1c8db9..063fec47c 100644 --- a/test/nodes/core/function/89-trigger_spec.js +++ b/test/nodes/core/function/89-trigger_spec.js @@ -378,6 +378,51 @@ describe('trigger node', function() { }); }); + it('should handle multiple other properties individually if asked to do so', function(done) { + var flow = [{"id":"n1", "type":"trigger", "name":"triggerNode", bytopic:"topic", property:"foo", op1:"1", op2:"0", op1type:"num", op2type:"num", duration:"30", wires:[["n2"]] }, + {id:"n2", type:"helper"} ]; + helper.load(triggerNode, flow, function() { + var n1 = helper.getNode("n1"); + var n2 = helper.getNode("n2"); + var c = 0; + n2.on("input", function(msg) { + try { + c += 1; + if (c === 1) { + msg.should.have.a.property("payload", 1); + msg.should.have.a.property("foo", "A"); + } + else if (c === 2) { + msg.should.have.a.property("payload", 1); + msg.should.have.a.property("foo", "B"); + } + else if (c === 3) { + msg.should.have.a.property("payload", 1); + msg.should.have.a.property("foo", "C"); + } + else if (c === 4) { + msg.should.have.a.property("payload", 0); + msg.should.have.a.property("foo", "A"); + } + else if (c === 5) { + msg.should.have.a.property("payload", 0); + msg.should.have.a.property("foo", "B"); + } + else if (c === 6) { + msg.should.have.a.property("payload", 0); + msg.should.have.a.property("foo", "C"); + done(); + } + } catch(err) { + done(err); + } + }); + n1.emit("input", {payload:1,foo:"A"}); + n1.emit("input", {payload:2,foo:"B"}); + n1.emit("input", {payload:3,foo:"C"}); + }); + }); + it('should be able to return things from flow and global context variables', function(done) { var spy = sinon.stub(RED.util, 'evaluateNodeProperty', function(arg1, arg2, arg3, arg4, arg5) { if (arg5) { arg5(null, arg1) } else { return arg1; } } From 87aacb4270f1db52952e6257e115cc359f8350f9 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Thu, 30 Jan 2020 22:20:55 +0000 Subject: [PATCH 3/5] change property name to leave space if we want to also do main payload property --- .../@node-red/nodes/core/function/89-trigger.html | 10 +++++----- .../@node-red/nodes/core/function/89-trigger.js | 4 ++-- test/nodes/core/function/89-trigger_spec.js | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html index 5e250be28..187a87190 100644 --- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html +++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html @@ -66,8 +66,8 @@ - - + +
@@ -93,7 +93,7 @@ reset: {value:""}, bytopic: {value:"all"}, outputs: {value:1}, - property: {value:"topic",required:true} + topic: {value:"topic",required:true} }, inputs:1, outputs:1, @@ -121,9 +121,9 @@ $("#node-input-bytopic").on("change", function() { console.log("BYT",$("#node-input-bytopic").val()); if ($("#node-input-bytopic").val() === "all") { - $("#node-trigger-property").hide(); + $("#node-stream-topic").hide(); } else { - $("#node-trigger-property").show(); + $("#node-stream-topic").show(); } }); diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js index d0a350e6a..dab7a83ab 100644 --- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js +++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js @@ -25,7 +25,7 @@ module.exports = function(RED) { this.op1type = n.op1type || "str"; this.op2type = n.op2type || "str"; this.second = n.second || false; - this.property = n.property || "topic"; + this.topic = n.topic || "topic"; if (this.op1type === 'val') { if (this.op1 === 'true' || this.op1 === 'false') { @@ -113,7 +113,7 @@ module.exports = function(RED) { }); var processMessage = function(msg) { - var topic = RED.util.getMessageProperty(msg,node.property) || "_none"; + var topic = RED.util.getMessageProperty(msg,node.topic) || "_none"; var promise; if (node.bytopic === "all") { topic = "_none"; } node.topics[topic] = node.topics[topic] || {}; diff --git a/test/nodes/core/function/89-trigger_spec.js b/test/nodes/core/function/89-trigger_spec.js index 063fec47c..582b47904 100644 --- a/test/nodes/core/function/89-trigger_spec.js +++ b/test/nodes/core/function/89-trigger_spec.js @@ -379,7 +379,7 @@ describe('trigger node', function() { }); it('should handle multiple other properties individually if asked to do so', function(done) { - var flow = [{"id":"n1", "type":"trigger", "name":"triggerNode", bytopic:"topic", property:"foo", op1:"1", op2:"0", op1type:"num", op2type:"num", duration:"30", wires:[["n2"]] }, + var flow = [{"id":"n1", "type":"trigger", "name":"triggerNode", bytopic:"topic", topic:"foo", op1:"1", op2:"0", op1type:"num", op2type:"num", duration:"30", wires:[["n2"]] }, {id:"n2", type:"helper"} ]; helper.load(triggerNode, flow, function() { var n1 = helper.getNode("n1"); From 88e729664afa71b275c0f1ce38ede42adc81ef2b Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Fri, 31 Jan 2020 17:56:06 +0000 Subject: [PATCH 4/5] complete tidy up of trigger node remove unnecessary console.log --- .../@node-red/nodes/core/function/89-trigger.html | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html index 187a87190..79b022519 100644 --- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html +++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html @@ -92,8 +92,8 @@ units: {value:"ms"}, reset: {value:""}, bytopic: {value:"all"}, - outputs: {value:1}, - topic: {value:"topic",required:true} + topic: {value:"topic",required:true}, + outputs: {value:1} }, inputs:1, outputs:1, @@ -114,12 +114,9 @@ }, oneditprepare: function() { var that = this; - if (this.property === undefined) { - $("#node-input-property").val("topic"); - } - $("#node-input-property").typedInput({default:'msg',types:['msg']}); + if (this.topic === undefined) { $("#node-input-topic").val("topic"); } + $("#node-input-topic").typedInput({default:'msg',types:['msg']}); $("#node-input-bytopic").on("change", function() { - console.log("BYT",$("#node-input-bytopic").val()); if ($("#node-input-bytopic").val() === "all") { $("#node-stream-topic").hide(); } else { From 127b3619795970cb52f9378adddba46125e63d71 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Fri, 14 Feb 2020 20:13:37 -0500 Subject: [PATCH 5/5] change PR to only use a single property for the 2nd output --- .../@node-red/nodes/core/function/89-trigger.html | 4 +++- .../node_modules/@node-red/nodes/core/function/89-trigger.js | 2 +- test/nodes/core/function/89-trigger_spec.js | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html index 79b022519..8917f81d8 100644 --- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.html +++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.html @@ -88,7 +88,6 @@ op2type: {value:"val"}, duration: {value:"250",required:true,validate:RED.validators.number()}, extend: {value:"false"}, - second: {value:false}, units: {value:"ms"}, reset: {value:""}, bytopic: {value:"all"}, @@ -123,6 +122,9 @@ $("#node-stream-topic").show(); } }); + + if (this.outputs == 2) { $("#node-input-second").prop('checked', true) } + else { $("#node-input-second").prop('checked', false) } $("#node-input-second").change(function() { if ($("#node-input-second").is(":checked")) { diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js index dab7a83ab..e3fca00aa 100644 --- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js +++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js @@ -24,7 +24,7 @@ module.exports = function(RED) { this.op2 = n.op2 || "0"; this.op1type = n.op1type || "str"; this.op2type = n.op2type || "str"; - this.second = n.second || false; + this.second = (n.outputs == 2) ? true : false; this.topic = n.topic || "topic"; if (this.op1type === 'val') { diff --git a/test/nodes/core/function/89-trigger_spec.js b/test/nodes/core/function/89-trigger_spec.js index 582b47904..f13e23a5e 100644 --- a/test/nodes/core/function/89-trigger_spec.js +++ b/test/nodes/core/function/89-trigger_spec.js @@ -827,7 +827,7 @@ describe('trigger node', function() { }); it('should be able to send 2nd message to a 2nd output', function(done) { - var flow = [{"id":"n1", "type":"trigger", "name":"triggerNode", op1type:"val", op2type:"val", op1:"hello", op2:"world", duration:"50", second:true, wires:[["n2"],["n3"]] }, + var flow = [{"id":"n1", "type":"trigger", "name":"triggerNode", op1type:"val", op2type:"val", op1:"hello", op2:"world", duration:"50", outputs:2, wires:[["n2"],["n3"]] }, {id:"n2", type:"helper"}, {id:"n3", type:"helper"} ]; helper.load(triggerNode, flow, function() { var n1 = helper.getNode("n1");