From fde77cec5dc3a0e8359e7be0743b1f1489be7808 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 7 Aug 2014 13:46:03 +0100 Subject: [PATCH] Add rest endpoint for add/remove and send updates to editor --- public/red/main.js | 21 ++++++++++++++++++++ public/red/ui/palette.js | 42 ++++++++++++++++++++++++---------------- red/server.js | 31 +++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 17 deletions(-) diff --git a/public/red/main.js b/public/red/main.js index c634e78c6..f2c387492 100644 --- a/public/red/main.js +++ b/public/red/main.js @@ -176,6 +176,27 @@ var RED = function() { } } }); + RED.comms.subscribe("node/#",function(topic,msg) { + if (topic == "node/added") { + for (var i=0;i
  • ")+"
  • "; + 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
  • ")+"
  • "; + RED.notify("Node"+(msg.types.length!=1 ? "s":"")+" removed from palette:"+typeList,"success"); + } + } + }); }); } diff --git a/public/red/ui/palette.js b/public/red/ui/palette.js index a6754e2ec..28e4445d0 100644 --- a/public/red/ui/palette.js +++ b/public/red/ui/palette.js @@ -21,27 +21,31 @@ RED.palette = function() { function createCategoryContainer(category){ - $("#palette-container").append('\ -
    \ -
    '+category+'
    \ -
    \ -
    \ -
    \ -
    \ -
    \ -
    '); + $("#palette-container").append('
    '+ + '
    '+category+'
    '+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + '
    '); } 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('\ -
    '); + if ($("#palette-"+def.category).length == 0) { + $("#palette-base-category-"+category[0]).append('
    '); } - + $("#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 }; }(); diff --git a/red/server.js b/red/server.js index 2fa15bb07..5961b96ac 100644 --- a/red/server.js +++ b/red/server.js @@ -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() {