Allow a node to declare settings that should be exported

This commit is contained in:
Nick O'Leary 2017-03-01 15:01:07 +00:00
parent 4794fe495c
commit fca77a868f
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9
6 changed files with 48 additions and 6 deletions

View File

@ -216,6 +216,14 @@ module.exports = function(RED) {
credentials: {
user: {type:"text"},
password: {type: "password"}
},
settings: {
httpRequestColour: {
value: "red",
// validate: function(v) { return IT MUST BE A NUMBER },
// required: false,
exportable: true
}
}
});
}

View File

@ -48,6 +48,8 @@ module.exports = {
safeSettings.editorTheme.palette = safeSettings.editorTheme.palette || {};
safeSettings.editorTheme.palette.editable = false;
}
settings.exportNodeSettings(safeSettings);
res.json(safeSettings);
}

View File

@ -50,8 +50,13 @@ function registerType(nodeSet,type,constructor,opts) {
type = nodeSet;
nodeSet = "";
}
if (opts && opts.credentials) {
credentials.register(type,opts.credentials);
if (opts) {
if (opts.credentials) {
credentials.register(type,opts.credentials);
}
if (opts.settings) {
settings.registerNodeSettings(type,opts.settings);
}
}
registry.registerType(nodeSet,type,constructor);
}

View File

@ -21,6 +21,7 @@ var log = require("./log");
var userSettings = null;
var globalSettings = null;
var nodeSettings = null;
var storage = null;
var persistentSettings = {
@ -38,6 +39,7 @@ var persistentSettings = {
}
}
globalSettings = null;
nodeSettings = {};
},
load: function(_storage) {
storage = _storage;
@ -99,6 +101,26 @@ var persistentSettings = {
userSettings = null;
globalSettings = null;
storage = null;
},
registerNodeSettings: function(type, opts) {
//console.log(type,opts);
// 1. TODO: validate the option names are allowed for the node type
// 2. store this information against the node type
nodeSettings[type] = opts;
// TODO: remove the node settings if the node is disabled/removed from runtime
},
exportNodeSettings: function(safeSettings) {
// 1. forEach type in nodeSettings...
// 2. forEach setting for that type...
// 3. if globalSettings has a property with the required name...
// 4. set safeSettings.property to that value
// 5. else if the setting has a default 'value' provided
// 6. set safeSettings.property to that value
return safeSettings;
}
}

View File

@ -29,7 +29,7 @@ describe("api index", function() {
describe("disables editor", function() {
before(function() {
api.init({},{
settings:{httpNodeRoot:true, httpAdminRoot: true,disableEditor:true},
settings:{httpNodeRoot:true, httpAdminRoot: true,disableEditor:true, exportNodeSettings: function() {}},
events: {on:function(){},removeListener: function(){}},
log: {info:function(){},_:function(){}},
nodes: {paletteEditorEnabled: function(){return true}}

View File

@ -42,7 +42,10 @@ describe("info api", function() {
foo: 123,
httpNodeRoot: "testHttpNodeRoot",
version: "testVersion",
paletteCategories :["red","blue","green"]
paletteCategories :["red","blue","green"],
exportNodeSettings: function(obj) {
obj.testNodeSetting = "helloWorld";
}
},
nodes: {
paletteEditorEnabled: function() { return true; }
@ -59,7 +62,9 @@ describe("info api", function() {
res.body.should.have.property("version","testVersion");
res.body.should.have.property("paletteCategories",["red","blue","green"]);
res.body.should.have.property("editorTheme",{test:456});
res.body.should.have.property("testNodeSetting","helloWorld");
res.body.should.not.have.property("foo",123);
done();
});
});
@ -68,8 +73,8 @@ describe("info api", function() {
settings: {
httpNodeRoot: "testHttpNodeRoot",
version: "testVersion",
paletteCategories :["red","blue","green"]
paletteCategories :["red","blue","green"],
exportNodeSettings: function() {}
},
nodes: {
paletteEditorEnabled: function() { return false; }