Merge branch 'nodeSettings' into 0.17

This commit is contained in:
Nick O'Leary
2017-03-09 20:00:54 +00:00
12 changed files with 197 additions and 12 deletions

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

@@ -493,6 +493,7 @@ function enableNodeSet(typeOrId) {
delete config.err;
config.enabled = true;
nodeConfigCache = null;
settings.enableNodeSettings(config.types);
return saveNodeList().then(function() {
return filterNodeInfo(config);
});
@@ -515,6 +516,7 @@ function disableNodeSet(typeOrId) {
// TODO: persist setting
config.enabled = false;
nodeConfigCache = null;
settings.disableNodeSettings(config.types);
return saveNodeList().then(function() {
return filterNodeInfo(config);
});

View File

@@ -18,9 +18,12 @@ var when = require("when");
var clone = require("clone");
var assert = require("assert");
var log = require("./log");
var util = require("./util");
var userSettings = null;
var globalSettings = null;
var nodeSettings = null;
var disableNodeSettings = null;
var storage = null;
var persistentSettings = {
@@ -38,6 +41,8 @@ var persistentSettings = {
}
}
globalSettings = null;
nodeSettings = {};
disableNodeSettings = {};
},
load: function(_storage) {
storage = _storage;
@@ -99,6 +104,53 @@ var persistentSettings = {
userSettings = null;
globalSettings = null;
storage = null;
},
registerNodeSettings: function(type, opts) {
try {
for (var property in opts) {
if (opts.hasOwnProperty(property)) {
var normalisedType = util.normaliseNodeTypeName(type);
if (!property.startsWith(normalisedType)) {
throw new Error("The name of node setting property " + property + " must start with \"" + normalisedType + "\" (case sensitive).");
}
}
}
nodeSettings[type] = opts;
} catch (err) {
console.log(err.toString());
}
},
exportNodeSettings: function(safeSettings) {
safeSettings["nodeSettings"] = {};
for (var type in nodeSettings) {
if (nodeSettings.hasOwnProperty(type) && !disableNodeSettings[type]) {
var nodeTypeSettings = nodeSettings[type];
for (var property in nodeTypeSettings) {
if (nodeTypeSettings.hasOwnProperty(property)) {
var setting = nodeTypeSettings[property];
if (setting.exportable) {
if (userSettings.hasOwnProperty(property)) {
safeSettings["nodeSettings"][property] = userSettings[property];
} else {
safeSettings["nodeSettings"][property] = setting.value;
}
}
}
}
}
}
return safeSettings;
},
enableNodeSettings: function(types) {
types.forEach(function(type) {
disableNodeSettings[type] = false;
});
},
disableNodeSettings: function(types) {
types.forEach(function(type) {
disableNodeSettings[type] = true;
});
}
}

View File

@@ -328,6 +328,18 @@ function evaluateNodeProperty(value, type, node, msg) {
return value;
}
function normaliseNodeTypeName(name) {
var result = name.replace(/[^a-zA-Z0-9]/g, " ");
result = result.trim();
result = result.replace(/ +/g, " ");
result = result.replace(/ ./g,
function(s) {
return s.charAt(1).toUpperCase();
}
);
result = result.charAt(0).toLowerCase() + result.slice(1);
return result;
}
module.exports = {
ensureString: ensureString,
@@ -338,5 +350,6 @@ module.exports = {
getMessageProperty: getMessageProperty,
setMessageProperty: setMessageProperty,
evaluateNodeProperty: evaluateNodeProperty,
normalisePropertyExpression: normalisePropertyExpression
normalisePropertyExpression: normalisePropertyExpression,
normaliseNodeTypeName: normaliseNodeTypeName
};