Add rest endpoint for add/remove and send updates to editor

This commit is contained in:
Nick O'Leary 2014-08-07 13:46:03 +01:00
parent 15494dda84
commit fde77cec5d
3 changed files with 77 additions and 17 deletions

View File

@ -176,6 +176,27 @@ var RED = function() {
}
}
});
RED.comms.subscribe("node/#",function(topic,msg) {
if (topic == "node/added") {
for (var i=0;i<msg.length;i++) {
var m = msg[i];
var id = m.id;
$.get('nodes/'+id, function(data) {
$("body").append(data);
var typeList = "<ul><li>"+m.types.join("</li><li>")+"</li></ul>";
RED.notify("Node"+(m.types.length!=1 ? "s":"")+" added to palette:"+typeList,"success");
});
}
} else if (topic == "node/removed") {
if (msg.types) {
for (var i=0;i<msg.types.length;i++) {
RED.palette.remove(msg.types[i]);
}
var typeList = "<ul><li>"+msg.types.join("</li><li>")+"</li></ul>";
RED.notify("Node"+(msg.types.length!=1 ? "s":"")+" removed from palette:"+typeList,"success");
}
}
});
});
}

View File

@ -21,27 +21,31 @@ RED.palette = function() {
function createCategoryContainer(category){
$("#palette-container").append('\
<div class="palette-category">\
<div id="header-'+category+'" class="palette-header"><i class="expanded icon-chevron-down"></i><span>'+category+'</span></div>\
<div class="palette-content" id="palette-base-category-'+category+'">\
<div id="palette-'+category+'-input"></div>\
<div id="palette-'+category+'-output"></div>\
<div id="palette-'+category+'-function"></div>\
</div>\
</div>');
$("#palette-container").append('<div class="palette-category">'+
'<div id="header-'+category+'" class="palette-header"><i class="expanded icon-chevron-down"></i><span>'+category+'</span></div>'+
'<div class="palette-content" id="palette-base-category-'+category+'">'+
'<div id="palette-'+category+'-input"></div>'+
'<div id="palette-'+category+'-output"></div>'+
'<div id="palette-'+category+'-function"></div>'+
'</div>'+
'</div>');
}
core.forEach(createCategoryContainer);
function addNodeType(nt,def) {
if ($("#palette_node_"+nt).length) {
return;
}
if (exclusion.indexOf(def.category)===-1) {
var category = def.category.split("-");
var d = document.createElement("div");
d.id = "pn_"+nt;
d.id = "palette_node_"+nt;
d.type = nt;
var label = /^(.*?)([ -]in|[ -]out)?$/.exec(nt)[1];
@ -71,15 +75,14 @@ RED.palette = function() {
d.appendChild(port);
}
if($("#palette-base-category-"+category[0]).length == 0){
createCategoryContainer(category[0]);
if ($("#palette-base-category-"+category[0]).length == 0){
createCategoryContainer(category[0]);
}
if($("#palette-"+def.category).length == 0){
$("#palette-base-category-"+category[0]).append('\
<div id="palette-'+def.category+'"></div>');
if ($("#palette-"+def.category).length == 0) {
$("#palette-base-category-"+category[0]).append('<div id="palette-'+def.category+'"></div>');
}
$("#palette-"+def.category).append(d);
d.onmousedown = function(e) { e.preventDefault(); }
@ -111,6 +114,10 @@ RED.palette = function() {
}
}
function removeNodeType(type) {
$("#palette_node_"+type).remove();
}
function filterChange() {
var val = $("#palette-search-input").val();
if (val == "") {
@ -155,6 +162,7 @@ RED.palette = function() {
});
return {
add:addNodeType
add:addNodeType,
remove:removeNodeType
};
}();

View File

@ -59,6 +59,37 @@ function createServer(_server,_settings) {
res.send(400,"Invalid Flow");
}
);
app.post("/nodes",
express.json(),
function(req,res) {
var node = req.body;
if (!node.file && !node.module) {
res.send(400,"Invalid request");
return;
}
redNodes.addNode(node).then(function(info) {
comms.publish("node/added",info,false);
res.json(info);
}).otherwise(function(err) {
res.send(400,err.toString());
});
},
function(err,req,res,next) {
res.send(400,err);
}
);
app.get("/nodes/:id", function(req,res) {
var type = req.params.id;
var config = redNodes.getNodeConfig(id);
if (config) {
res.send(config);
} else {
res.send(404);
}
});
}
function start() {