mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
185 lines
7.8 KiB
HTML
185 lines
7.8 KiB
HTML
<!DOCTYPE html>
|
|
<!--
|
|
Copyright 2016 IBM Corp.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<script type="text/x-red" data-template-name="split">
|
|
<div class="form-row">
|
|
<label for="node-input-splt"><i class="fa fa-scissors"></i> Split</label>
|
|
<input type="text" id="node-input-splt" placeholder="character to split strings on : e.g. \n">
|
|
</div>
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="split">
|
|
<p>A function that splits <code>msg.payload</code> into multiple messages.</p>
|
|
<p>The behaviour is determined by the type of <code>msg.payload</code>:</p>
|
|
<ul>
|
|
<li><b>string</b> - a message is sent for each part of the string after it is split using the specified character, by default a newline (<code>\n</code>).
|
|
<li><b>array</b> - a message is sent for each element of the array</li>
|
|
<li><b>object</b> - a message is sent for each key/value pair of the object. <code>msg.parts.key</code> is set to the key of the property.</li>
|
|
</ul>
|
|
</script>
|
|
|
|
<script type="text/javascript">
|
|
RED.nodes.registerType('split',{
|
|
category: 'function',
|
|
color:"#E2D96E",
|
|
defaults: {
|
|
name: {value:""},
|
|
splt: {value:"\\n"}
|
|
},
|
|
inputs:1,
|
|
outputs:1,
|
|
icon: "switch.png",
|
|
align: "right",
|
|
label: function() {
|
|
return this.name||"split";
|
|
},
|
|
labelStyle: function() {
|
|
return this.name?"node_label_italic":"";
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<script type="text/x-red" data-template-name="join">
|
|
<div class="form-row">
|
|
<label>Mode</label>
|
|
<select id="node-input-mode" style="width:200px;">
|
|
<option value="auto">automatic</option>
|
|
<option value="custom">manual</option>
|
|
</select>
|
|
</div>
|
|
<div class="node-row-custom">
|
|
<div class="form-row node-row-property">
|
|
<label>Join each </label>
|
|
<input type="text" id="node-input-property" style="width:300px;">
|
|
<input type="hidden" id="node-input-propertyType">
|
|
</div>
|
|
<div class="form-row">
|
|
<label>to create </label>
|
|
<select id="node-input-build" style="width:200px;">
|
|
<option id="node-input-build-string" value="string">a String</option>
|
|
<option value="array">an Array</option>
|
|
<option value="object">an Object</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-row node-row-key">
|
|
<label style="vertical-align: top; margin-top: 7px;">using</label>
|
|
<div style="display:inline-block">
|
|
<input type="text" id="node-input-key" style="width:300px;">
|
|
<div style="margin-top: 7px;">as the property key</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-row node-row-joiner">
|
|
<label for="node-input-joiner">joined using</label>
|
|
<input type="text" id="node-input-joiner" style="width: 40px">
|
|
</div>
|
|
|
|
<div class="form-row node-row-trigger">
|
|
<label style="width: auto;">Send the message:</label>
|
|
<ul>
|
|
<li style="height: 40px;">
|
|
<label style="width: 280px;" for="node-input-count">After a fixed number of messages:</label> <input id="node-input-count" placeholder="count" type="text" style="width: 75px;">
|
|
</li>
|
|
<li style="height: 40px;">
|
|
<label style="width: 280px;" for="node-input-timeout">After a timeout following the first message:</label> <input id="node-input-timeout" placeholder="seconds" type="text" style="width: 75px;">
|
|
</li>
|
|
<li style="height: 40px;">
|
|
<label style="width: auto; padding-top: 6px;">After a message with the <code>msg.complete</code> property set</label>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="form-tips form-tips-auto hide">This mode assumes this node is either
|
|
paired with a <i>split</i> node or the received messages will have a properly
|
|
configured <code>msg.parts</code> property.</div>
|
|
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="join">
|
|
<p>A function that joins <code>msg.payload</code> from multiple msgs to create a single msg out.</p>
|
|
<p>Other properties of the msg are not guaranteed as they could come from any of the incoming msgs.</p>
|
|
<p>An optional <i>count</i> can be set that waits for that many <code>payload</code> to arrive before passing on the new message.</p>
|
|
<p>An optional <i>timeout</i> can be set that can then send the incomplete message, drop the message or raise a catchable error.</p>
|
|
<p>An optional <i>join character</i> can be set that can be used for joining multiple payloads together and returns a
|
|
string rather than an array.</p>
|
|
<p>When used with a <b>split</b> node the <i>count</i> and <i>join character</i> are automatically set - but can be
|
|
overridden by values in the configuration.</p>
|
|
<p>Messages can be joined into an <i>array</i> or <i>object</i>. To be joined into an object the incoming message must
|
|
have either a <code>msg.key</code> or <code>msg.topic</code> property - or <code>msg.payload</code> should
|
|
be an object with properties.</p>
|
|
</script>
|
|
|
|
<script type="text/javascript">
|
|
RED.nodes.registerType('join',{
|
|
category: 'function',
|
|
color:"#E2D96E",
|
|
defaults: {
|
|
name: {value:""},
|
|
mode: {value:"auto"},
|
|
build: { value:"string"},
|
|
property: { value: "payload"},
|
|
propertyType: { value:"msg"},
|
|
key: {value:"topic"},
|
|
joiner: { value:"\\n"},
|
|
timeout: {value:""},
|
|
count: {value:""}
|
|
},
|
|
inputs:1,
|
|
outputs:1,
|
|
icon: "join.png",
|
|
label: function() {
|
|
return this.name||"join";
|
|
},
|
|
labelStyle: function() {
|
|
return this.name?"node_label_italic":"";
|
|
},
|
|
oneditprepare: function() {
|
|
$("#node-input-mode").change(function(e) {
|
|
var val = $(this).val();
|
|
$(".node-row-custom").toggle(val==='custom');
|
|
$(".form-tips-auto").toggle(val==='auto');
|
|
});
|
|
|
|
$("#node-input-build").change(function(e) {
|
|
var val = $(this).val();
|
|
$(".node-row-key").toggle(val==='object');
|
|
$(".node-row-joiner").toggle(val==='string');
|
|
$(".node-row-trigger").toggle(val!=='auto');
|
|
if (val === 'string') {
|
|
$("#node-input-property").typedInput('types',['msg']);
|
|
} else {
|
|
$("#node-input-property").typedInput('types',['msg', {value:"full",label:"complete message",hasValue:false}]);
|
|
}
|
|
})
|
|
|
|
$("#node-input-property").typedInput({
|
|
typeField: $("#node-input-propertyType"),
|
|
types:['msg', {value:"full",label:"complete message",hasValue:false}]
|
|
})
|
|
$("#node-input-key").typedInput({
|
|
types:['msg']
|
|
})
|
|
|
|
$("#node-input-build").change();
|
|
$("#node-input-mode").change();
|
|
}
|
|
});
|
|
</script>
|