mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			187 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			7.9 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 the <code>msg.payload</code> in various ways to create multiple messages out.</p>
 | 
						|
    <p><ul>
 | 
						|
        <li>splits an <b>array</b> into individual messages, one element per message.</li>
 | 
						|
        <li>splits a <b>string</b> on a character - default is <code>""</code>, split on every character. A typical
 | 
						|
        use would be <code>\n</code> to split on line breaks. Split is actually a regex value so use <code>\.</code> to
 | 
						|
        split on a full stop .</li>
 | 
						|
        <li>splits an <b>object</b> into individual messages, promoting each property value to the <code>msg.payload</code>,
 | 
						|
        and saving each property key name as <code>msg.parts.key</code>.
 | 
						|
    </ul></p>
 | 
						|
</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>
 |