<script type="text/x-red" data-template-name="range"> <div class="form-row"> <label for="node-input-property"><i class="fa fa-ellipsis-h"></i> <span data-i18n="common.label.property"></span></label> <input type="text" id="node-input-property" style="width:calc(70% - 1px)"/> </div> <div class="form-row"> <label for="node-input-action"><i class="fa fa-dot-circle-o"></i> <span data-i18n="range.label.action"></span></label> <select id="node-input-action" style="width:70%;"> <option value="scale" data-i18n="range.scale.payload"></option> <option value="clamp" data-i18n="range.scale.limit"></option> <option value="roll" data-i18n="range.scale.wrap"></option> </select> </div> <br/> <div class="form-row"><i class="fa fa-sign-in"></i> <span data-i18n="range.label.inputrange"></span>:</div> <div class="form-row"><label></label> <span data-i18n="range.label.from"></span>: <input type="text" id="node-input-minin" data-i18n="[placeholder]range.placeholder.min" style="width:100px;"/> <span data-i18n="range.label.to"></span>: <input type="text" id="node-input-maxin" data-i18n="[placeholder]range.placeholder.maxin" style="width:100px;"/> </div> <div class="form-row"><i class="fa fa-sign-out"></i> <span data-i18n="range.label.resultrange"></span>:</div> <div class="form-row"><label></label> <span data-i18n="range.label.from"></span>: <input type="text" id="node-input-minout" data-i18n="[placeholder]range.placeholder.min" style="width:100px;"/> <span data-i18n="range.label.to"></span>: <input type="text" id="node-input-maxout" data-i18n="[placeholder]range.placeholder.maxout" style="width:100px;"/> </div> <br/> <div class="form-row"><label></label> <input type="checkbox" id="node-input-round" style="display: inline-block; width: auto; vertical-align: top;"> <label style="width: auto;" for="node-input-round"><span data-i18n="range.label.roundresult"></span></label></input> </div> <br/> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label> <input type="text" id="node-input-name" data-i18n="[placeholder]common.label.name"> </div> <div class="form-tips" id="node-tip"><span data-i18n="range.tip"></span></div> </script> <script type="text/x-red" data-help-name="range"> <p>Maps a numeric value to a different range.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">number</span></dt> <dd>The payload <i>must</i> be a number. Anything else will try to be parsed into a number and rejected if that fails.</dd> </dl> <h3>Outputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">number</span></dt> <dd>The value mapped to the new range.</dd> </dl> <h3>Details</h3> <p>This node will linearly scale the received value. By default, the result is not constrained to the range defined in the node.</p> <p><i>Scale and limit to target range</i> means that the result will never be outside the range specified within the result range.</p> <p><i>Scale and wrap within the target range</i> means that the result will be wrapped within the result range.</p> </script> <script type="text/javascript"> RED.nodes.registerType('range', { color: "#E2D96E", category: 'function', defaults: { minin: {value:"",required:true,validate:RED.validators.number()}, maxin: {value:"",required:true,validate:RED.validators.number()}, minout: {value:"",required:true,validate:RED.validators.number()}, maxout: {value:"",required:true,validate:RED.validators.number()}, action: {value:"scale"}, round: {value:false}, property: {value:"payload",required:true}, name: {value:""} }, inputs: 1, outputs: 1, icon: "range.png", label: function() { if (this.minout !== "" && this.maxout !== "") { return this.name||this.minout + " - " + this.maxout; } else { return this.name||this._("range.range"); } }, labelStyle: function() { return this.name ? "node_label_italic" : ""; }, oneditprepare: function() { if (this.property === undefined) { $("#node-input-property").val("payload"); } $("#node-input-property").typedInput({default:'msg',types:['msg']}); } }); </script>