diff --git a/editor/js/nodes.js b/editor/js/nodes.js index 76be6c5f4..5e2c7ca1d 100644 --- a/editor/js/nodes.js +++ b/editor/js/nodes.js @@ -1035,8 +1035,8 @@ RED.nodes = (function() { node.outputs = n.outputs||node._def.outputs; // If 'wires' is longer than outputs, clip wires if (node.hasOwnProperty('wires') && node.wires.length > node.outputs) { + console.log("Warning: node.wires longer than node.outputs - trimming wires:",node.id," wires:",node.wires.length," outputs:",node.outputs); node.wires = node.wires.slice(0,node.outputs); - wireClippedNodes.push(node); } for (d in node._def.defaults) { if (node._def.defaults.hasOwnProperty(d)) { diff --git a/editor/js/red.js b/editor/js/red.js index ff629f378..060e38610 100644 --- a/editor/js/red.js +++ b/editor/js/red.js @@ -15,6 +15,25 @@ **/ var RED = (function() { + function appendNodeConfig(nodeConfig) { + var m = //.exec(nodeConfig.trim()); + var moduleId; + if (m) { + moduleId = m[1]; + } else { + moduleId = "unknown"; + } + try { + $("body").append(nodeConfig); + } catch(err) { + RED.notify(RED._("notification.errors.failedToAppendNode",{module:moduleId, error:err.toString()}),{ + type: "error", + timeout: 10000 + }); + console.log("["+moduleId+"] "+err.toString()); + } + } + function loadNodeList() { $.ajax({ headers: { @@ -55,7 +74,11 @@ var RED = (function() { cache: false, url: 'nodes', success: function(data) { - $("body").append(data); + var configs = data.trim().split(/(?=)/); + configs.forEach(function(data) { + appendNodeConfig(data); + }); + $("body").i18n(); $("#palette > .palette-spinner").hide(); $(".palette-scroll").removeClass("hide"); @@ -296,7 +319,7 @@ var RED = (function() { addedTypes = addedTypes.concat(m.types); RED.i18n.loadNodeCatalog(id, function() { $.get('nodes/'+id, function(data) { - $("body").append(data); + appendNodeConfig(data); }); }); }); @@ -324,7 +347,7 @@ var RED = (function() { RED.notify(RED._("palette.event.nodeEnabled", {count:msg.types.length})+typeList,"success"); } else { $.get('nodes/'+msg.id, function(data) { - $("body").append(data); + appendNodeConfig(data); typeList = ""; RED.notify(RED._("palette.event.nodeAdded", {count:msg.types.length})+typeList,"success"); }); diff --git a/red/api/editor/locales/en-US/editor.json b/red/api/editor/locales/en-US/editor.json index ed74b8232..d827ba092 100644 --- a/red/api/editor/locales/en-US/editor.json +++ b/red/api/editor/locales/en-US/editor.json @@ -106,7 +106,8 @@ "lostConnectionTry": "Try now", "cannotAddSubflowToItself": "Cannot add subflow to itself", "cannotAddCircularReference": "Cannot add subflow - circular reference detected", - "unsupportedVersion": "Using an unsupported version of Node.js
You should upgrade to the latest Node.js LTS release" + "unsupportedVersion": "

Using an unsupported version of Node.js

You should upgrade to the latest Node.js LTS release

", + "failedToAppendNode": "

Failed to load '__module__'

__error__

" } }, "clipboard": { diff --git a/red/runtime-registry/registry.js b/red/runtime-registry/registry.js index 339936084..fa5fc6ae3 100644 --- a/red/runtime-registry/registry.js +++ b/red/runtime-registry/registry.js @@ -395,6 +395,7 @@ function getAllNodeConfigs(lang) { var id = nodeList[i]; var config = moduleConfigs[getModule(id)].nodes[getNode(id)]; if (config.enabled && !config.err) { + result += "\n\n"; result += config.config; result += loader.getNodeHelp(config,lang||"en-US")||""; //script += config.script; @@ -417,7 +418,7 @@ function getNodeConfig(id,lang) { } config = config.nodes[getNode(id)]; if (config) { - var result = config.config; + var result = "\n"+config.config; result += loader.getNodeHelp(config,lang||"en-US") //if (config.script) { diff --git a/test/red/runtime-registry/registry_spec.js b/test/red/runtime-registry/registry_spec.js index f1af29f86..80923d5f6 100644 --- a/test/red/runtime-registry/registry_spec.js +++ b/test/red/runtime-registry/registry_spec.js @@ -381,9 +381,9 @@ describe("red/nodes/registry/registry",function() { types: [ "test-c","test-d"] } }}); - typeRegistry.getNodeConfig("test-module/test-name").should.eql('configAHEtest-nameLP'); - typeRegistry.getNodeConfig("test-module/test-name-2").should.eql('configBHEtest-name-2LP'); - typeRegistry.getAllNodeConfigs().should.eql('configAHEtest-nameLPconfigBHEtest-name-2LP'); + typeRegistry.getNodeConfig("test-module/test-name").should.eql('\nconfigAHEtest-nameLP'); + typeRegistry.getNodeConfig("test-module/test-name-2").should.eql('\nconfigBHEtest-name-2LP'); + typeRegistry.getAllNodeConfigs().should.eql('\n\nconfigAHEtest-nameLP\n\nconfigBHEtest-name-2LP'); }); }); describe('#getModuleInfo', function() {