node-red/packages/node_modules/@node-red/nodes/core/function/10-function.html

135 lines
5.6 KiB
HTML
Raw Normal View History

2013-09-05 16:02:48 +02:00
<script type="text/x-red" data-template-name="function">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
<div style="display: inline-block; width: calc(100% - 105px)"><input type="text" id="node-input-name" data-i18n="[placeholder]common.label.name"></div>
2013-09-05 16:02:48 +02:00
</div>
2014-11-13 18:21:12 +01:00
<div class="form-row" style="margin-bottom: 0px;">
2015-05-26 22:11:14 +02:00
<label for="node-input-func"><i class="fa fa-wrench"></i> <span data-i18n="function.label.function"></span></label>
<input type="hidden" id="node-input-func" autofocus="autofocus">
<input type="hidden" id="node-input-noerr">
2014-11-13 18:21:12 +01:00
</div>
<div class="form-row node-text-editor-row" style="position:relative">
2019-05-17 11:42:43 +02:00
<div style="position: absolute; right:0; bottom:calc(100% + 3px);"><button id="node-function-expand-js" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button></div>
<div style="height: 250px; min-height:150px;" class="node-text-editor" id="node-input-func-editor" ></div>
2013-09-05 16:02:48 +02:00
</div>
<div class="form-row" style="margin-bottom: 0px">
2015-05-26 22:11:14 +02:00
<label for="node-input-outputs"><i class="fa fa-random"></i> <span data-i18n="function.label.outputs"></span></label>
2016-02-14 12:52:33 +01:00
<input id="node-input-outputs" style="width: 60px;" value="1">
2013-09-05 16:02:48 +02:00
</div>
</script>
<script type="text/javascript">
RED.nodes.registerType('function',{
color:"#fdd0a2",
category: 'function',
defaults: {
name: {value:""},
func: {value:"\nreturn msg;"},
outputs: {value:1},
2019-05-08 19:51:16 +02:00
noerr: {value:0,required:true,validate:function(v) { return !v; }}
2013-09-05 16:02:48 +02:00
},
inputs:1,
outputs:1,
icon: "function.svg",
2013-09-05 16:02:48 +02:00
label: function() {
return this.name||this._("function.function");
2013-09-05 16:02:48 +02:00
},
labelStyle: function() {
return this.name?"node_label_italic":"";
},
2013-09-05 16:02:48 +02:00
oneditprepare: function() {
2015-02-13 01:15:07 +01:00
var that = this;
2013-09-05 16:02:48 +02:00
$( "#node-input-outputs" ).spinner({
2019-09-30 10:54:05 +02:00
min:0,
change: function(event, ui) {
var value = this.value;
if (!value.match(/^\d+$/)) { value = 1; }
else if (value < this.min) { value = this.min; }
if (value !== this.value) { $(this).spinner("value", value); }
}
2013-09-05 16:02:48 +02:00
});
this.editor = RED.editor.createEditor({
id: 'node-input-func-editor',
mode: 'ace/mode/nrjavascript',
value: $("#node-input-func").val(),
globals: {
msg:true,
context:true,
RED: true,
util: true,
flow: true,
global: true,
console: true,
Buffer: true,
setTimeout: true,
clearTimeout: true,
setInterval: true,
clearInterval: true
}
});
2015-02-13 01:15:07 +01:00
RED.library.create({
url:"functions", // where to get the data from
type:"function", // the type of object the library is for
editor:this.editor, // the field name the main text body goes to
mode:"ace/mode/nrjavascript",
fields:['name','outputs'],
ext:"js"
2013-09-05 16:02:48 +02:00
});
this.editor.focus();
RED.popover.tooltip($("#node-function-expand-js"), RED._("node-red:common.label.expand"));
$("#node-function-expand-js").on("click", function(e) {
e.preventDefault();
var value = that.editor.getValue();
RED.editor.editJavaScript({
value: value,
width: "Infinity",
cursor: that.editor.getCursorPosition(),
mode: "ace/mode/nrjavascript",
complete: function(v,cursor) {
that.editor.setValue(v, -1);
that.editor.gotoLine(cursor.row+1,cursor.column,false);
setTimeout(function() {
that.editor.focus();
},300);
}
})
})
2013-09-05 16:02:48 +02:00
},
oneditsave: function() {
var annot = this.editor.getSession().getAnnotations();
this.noerr = 0;
$("#node-input-noerr").val(0);
for (var k=0; k < annot.length; k++) {
//console.log(annot[k].type,":",annot[k].text, "on line", annot[k].row);
if (annot[k].type === "error") {
$("#node-input-noerr").val(annot.length);
this.noerr = annot.length;
}
}
2015-02-13 01:15:07 +01:00
$("#node-input-func").val(this.editor.getValue());
this.editor.destroy();
2013-09-05 16:02:48 +02:00
delete this.editor;
2016-01-04 17:53:32 +01:00
},
oneditcancel: function() {
this.editor.destroy();
delete this.editor;
},
2016-01-04 17:53:32 +01:00
oneditresize: function(size) {
var rows = $("#dialog-form>div:not(.node-text-editor-row)");
var height = $("#dialog-form").height();
for (var i=0; i<rows.length; i++) {
2016-01-04 17:53:32 +01:00
height -= $(rows[i]).outerHeight(true);
}
var editorRow = $("#dialog-form>div.node-text-editor-row");
height -= (parseInt(editorRow.css("marginTop"))+parseInt(editorRow.css("marginBottom")));
$(".node-text-editor").css("height",height+"px");
this.editor.resize();
2013-09-05 16:02:48 +02:00
}
});
</script>