mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Add partial implementation of adding library sources via editor
This adds lots of commented out code that provides a settings panel to add new library sources. It is incomplete as it doesn't actually add/update the library sources on the runtime. For 1.3, I'm focussing on allowing additional sources get added via the settings file only. I've done enough work on the editor side to convince myself more work is needed than I can justify at this time on what is otherwise not going to be a widely used feature.
This commit is contained in:
committed by
Nick O'Leary
parent
8a076c01ab
commit
3f9a29730f
@@ -25,6 +25,27 @@ var api = module.exports = {
|
||||
runtime = _runtime;
|
||||
},
|
||||
|
||||
// /* *
|
||||
// * Gets the configuration of a library source.
|
||||
// * @param {Object} opts
|
||||
// * @param {User} opts.user - the user calling the api
|
||||
// * @param {String} opts.library - the library
|
||||
// * @param {Object} opts.req - the request to log (optional)
|
||||
// * @return {Promise<String|Object>} - resolves when complete
|
||||
// * @memberof @node-red/runtime_library
|
||||
// */
|
||||
// getConfig: async function(opts) {
|
||||
// runtime.log.audit({event: "library.getConfig",library:opts.library}, opts.req);
|
||||
// try {
|
||||
// return runtime.library.getConfig(opts.library)
|
||||
// } catch(err) {
|
||||
// var error = new Error();
|
||||
// error.code = "not_found";
|
||||
// error.status = 404;
|
||||
// throw error;
|
||||
// }
|
||||
// },
|
||||
|
||||
/**
|
||||
* Gets an entry from the library.
|
||||
* @param {Object} opts
|
||||
|
@@ -95,7 +95,11 @@ function getEntry(type,path) {
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
name: '_examples_',
|
||||
id: "examples",
|
||||
label: "editor:library.types.examples",
|
||||
icon: "font-awesome/fa-life-ring",
|
||||
types: ["flows"],
|
||||
readOnly: true,
|
||||
init: init,
|
||||
getEntry: getEntry
|
||||
}
|
||||
|
@@ -18,6 +18,7 @@
|
||||
const {events} = require("@node-red/util")
|
||||
const knownTypes = {};
|
||||
const libraries = {};
|
||||
const libraryConfigs = {};
|
||||
const libraryPlugins = {};
|
||||
|
||||
// Libraries defined in the settings file. Their configurations
|
||||
@@ -37,7 +38,9 @@ function init(runtime) {
|
||||
runtimeLibraries.forEach(library => {
|
||||
if (library.type === id) {
|
||||
library.local = false;
|
||||
libraryConfigs[library.id] = library;
|
||||
libraries[library.id] = new plugin.class(library)
|
||||
libraryConfigs[library.id].type = id;
|
||||
if (libraries[library.id].init) {
|
||||
libraries[library.id].init();
|
||||
}
|
||||
@@ -49,11 +52,13 @@ function init(runtime) {
|
||||
})
|
||||
|
||||
knownTypes.flows = 'node-red';
|
||||
libraries["local"] = require("./local");
|
||||
libraries["local"].init(runtime);
|
||||
libraryConfigs["local"] = libraries["local"]
|
||||
|
||||
libraries["examples"] = require("./examples");
|
||||
libraries["examples"].init(runtime);
|
||||
libraries["local"] = require("./local");
|
||||
libraries["local"].init(runtime);
|
||||
libraryConfigs["examples"] = libraries["examples"]
|
||||
|
||||
try {
|
||||
runtimeLibraries = runtime.settings.editorTheme.library.sources;
|
||||
@@ -100,42 +105,58 @@ function saveEntry(library,type,path,meta,body) {
|
||||
}
|
||||
|
||||
function getLibraries() {
|
||||
const libraryList = [
|
||||
{
|
||||
id: "local",
|
||||
label: "editor:library.types.local",
|
||||
user: false,
|
||||
icon: "fa fa-bath"
|
||||
},
|
||||
{
|
||||
id: "examples",
|
||||
label: "editor:library.types.examples",
|
||||
user: false,
|
||||
readOnly: true,
|
||||
types: ['flows']
|
||||
}
|
||||
];
|
||||
|
||||
const libraryList = []
|
||||
for (let id in libraries) {
|
||||
if (libraries.hasOwnProperty(id)) {
|
||||
if (id !== 'local' && id !== 'examples') {
|
||||
libraryList.push({
|
||||
id: id,
|
||||
label: libraries[id].name || id,
|
||||
user: false,
|
||||
icon: libraries[id].icon
|
||||
})
|
||||
var config = getConfig(id);
|
||||
// Don't include the full configuration of each library when providing
|
||||
// the list of all libraries
|
||||
delete config.config;
|
||||
libraryList.push(config);
|
||||
}
|
||||
}
|
||||
return libraryList;
|
||||
}
|
||||
|
||||
function getConfig(id) {
|
||||
var lib = {
|
||||
id: id,
|
||||
label: libraryConfigs[id].label || id,
|
||||
user: false,
|
||||
icon: libraryConfigs[id].icon
|
||||
}
|
||||
if (libraryConfigs[id].types) {
|
||||
lib.types = libraryConfigs[id].types
|
||||
}
|
||||
if (libraryConfigs[id].readOnly) {
|
||||
lib.readOnly = libraryConfigs[id].readOnly
|
||||
}
|
||||
|
||||
if (libraryConfigs[id].type) {
|
||||
lib.type = libraryConfigs[id].type;
|
||||
|
||||
var def = libraryPlugins[lib.type];
|
||||
if (def && def.defaults) {
|
||||
lib.config = {};
|
||||
for (var d in def.defaults) {
|
||||
if (def.defaults.hasOwnProperty(d)) {
|
||||
if (def.defaults[d].type !== 'password') {
|
||||
lib.config[d] = libraryConfigs[id][d];
|
||||
} else if (!!libraryConfigs[id][d]) {
|
||||
lib.config["has_"+d] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return libraryList;
|
||||
return lib;
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
init: init,
|
||||
getLibraries: getLibraries,
|
||||
// getConfig: getConfig,
|
||||
register: registerType,
|
||||
getEntry: getEntry,
|
||||
saveEntry: saveEntry
|
||||
|
@@ -30,7 +30,9 @@ function saveEntry(type,path,meta,body) {
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
name: 'local',
|
||||
id: "local",
|
||||
label: "editor:library.types.local",
|
||||
icon: "font-awesome/fa-hdd-o",
|
||||
init: init,
|
||||
getEntry: getEntry,
|
||||
saveEntry: saveEntry
|
||||
|
Reference in New Issue
Block a user