From 2d5980ff2abaa0837f7a4af0fe57c192ee41b3f2 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 11 May 2018 22:30:57 +0100 Subject: [PATCH] Split node html to isolate bad nodes when loading --- editor/js/main.js | 29 +++++++++++++++++-- red/api/editor/locales/en-US/editor.json | 3 +- red/runtime/nodes/registry/registry.js | 3 +- .../runtime/nodes/registry/registry_spec.js | 8 ++--- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/editor/js/main.js b/editor/js/main.js index b900fd28f..cf295e7e7 100644 --- a/editor/js/main.js +++ b/editor/js/main.js @@ -15,6 +15,25 @@ **/ (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 @@ 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 @@ addedTypes = addedTypes.concat(m.types); RED.i18n.loadCatalog(id, function() { $.get('nodes/'+id, function(data) { - $("body").append(data); + appendNodeConfig(data); }); }); }); @@ -324,7 +347,7 @@ 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/nodes/registry/registry.js b/red/runtime/nodes/registry/registry.js index 84f3f8504..94c0e57d6 100644 --- a/red/runtime/nodes/registry/registry.js +++ b/red/runtime/nodes/registry/registry.js @@ -426,6 +426,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; @@ -448,7 +449,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/nodes/registry/registry_spec.js b/test/red/runtime/nodes/registry/registry_spec.js index ce761c012..cdfba8c45 100644 --- a/test/red/runtime/nodes/registry/registry_spec.js +++ b/test/red/runtime/nodes/registry/registry_spec.js @@ -364,8 +364,8 @@ describe("red/nodes/registry/registry",function() { config: "configA", types: [ "test-a","test-b"] }, "0.0.1"); - typeRegistry.getNodeConfig("test-module/test-name").should.eql('configAHEtest-nameLP'); - typeRegistry.getAllNodeConfigs().should.eql('configAHEtest-nameLP'); + typeRegistry.getNodeConfig("test-module/test-name").should.eql('\nconfigAHEtest-nameLP'); + typeRegistry.getAllNodeConfigs().should.eql('\n\nconfigAHEtest-nameLP'); typeRegistry.addNodeSet("test-module/test-name-2",{ id: "test-module/test-name-2", @@ -376,8 +376,8 @@ describe("red/nodes/registry/registry",function() { config: "configB", types: [ "test-c","test-d"] }, "0.0.1"); - 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-2").should.eql('\nconfigBHEtest-name-2LP'); + typeRegistry.getAllNodeConfigs().should.eql('\n\nconfigAHEtest-nameLP\n\nconfigBHEtest-name-2LP'); }); }); describe('#getModuleInfo', function() {