From ba6209ba54b0ea8ddf3a5633fe4fdecb799b9383 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Sat, 8 Jul 2017 17:29:41 +0100 Subject: [PATCH] Replace Unknown nodes with their real versions when node loaded --- editor/js/main.js | 3 +-- editor/js/nodes.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/editor/js/main.js b/editor/js/main.js index 13f021dc5..83749d310 100644 --- a/editor/js/main.js +++ b/editor/js/main.js @@ -253,13 +253,12 @@ RED.deploy.init(RED.settings.theme("deployButton",null)); RED.actions.add("core:show-about", showAbout); - + RED.nodes.init(); RED.comms.connect(); $("#main-container").show(); $(".header-toolbar").show(); - loadNodeList(); } diff --git a/editor/js/nodes.js b/editor/js/nodes.js index 2d806ad90..d83f162eb 100644 --- a/editor/js/nodes.js +++ b/editor/js/nodes.js @@ -1217,6 +1217,50 @@ RED.nodes = (function() { } return { + init: function() { + RED.events.on("registry:node-type-added",function(type) { + var def = registry.getNodeType(type); + var replaced = false; + var replaceNodes = []; + RED.nodes.eachNode(function(n) { + if (n.type === "unknown" && n.name === type) { + replaceNodes.push(n); + } + }); + RED.nodes.eachConfig(function(n) { + if (n.type === "unknown" && n.name === type) { + replaceNodes.push(n); + } + }); + + if (replaceNodes.length > 0) { + var reimportList = []; + replaceNodes.forEach(function(n) { + if (configNodes.hasOwnProperty(n.id)) { + delete configNodes[n.id]; + } else { + nodes.splice(nodes.indexOf(n),1); + } + reimportList.push(convertNode(n)); + }); + RED.view.redraw(true); + var result = importNodes(reimportList,false); + var newNodeMap = {}; + result[0].forEach(function(n) { + newNodeMap[n.id] = n; + }); + RED.nodes.eachLink(function(l) { + if (newNodeMap.hasOwnProperty(l.source.id)) { + l.source = newNodeMap[l.source.id]; + } + if (newNodeMap.hasOwnProperty(l.target.id)) { + l.target = newNodeMap[l.target.id]; + } + }); + RED.view.redraw(true); + } + }); + }, registry:registry, setNodeList: registry.setNodeList,