mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 17:16:14 +01:00
feat: autocomplete for activate/reset
useless features™️
This commit is contained in:
@@ -25,6 +25,9 @@ async function activate(plugin) {
|
|||||||
// Allow omission of `nodebb-plugin-`
|
// Allow omission of `nodebb-plugin-`
|
||||||
plugin = `nodebb-plugin-${plugin}`;
|
plugin = `nodebb-plugin-${plugin}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugin = await plugins.autocomplete(plugin);
|
||||||
|
|
||||||
const isInstalled = await plugins.isInstalled(plugin);
|
const isInstalled = await plugins.isInstalled(plugin);
|
||||||
if (!isInstalled) {
|
if (!isInstalled) {
|
||||||
throw new Error('plugin not installed');
|
throw new Error('plugin not installed');
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ exports.reset = async function (options) {
|
|||||||
themeId = `nodebb-theme-${themeId}`;
|
themeId = `nodebb-theme-${themeId}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
themeId = await plugins.autocomplete(themeId);
|
||||||
await resetTheme(themeId);
|
await resetTheme(themeId);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -38,6 +39,7 @@ exports.reset = async function (options) {
|
|||||||
pluginId = `nodebb-plugin-${pluginId}`;
|
pluginId = `nodebb-plugin-${pluginId}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pluginId = await plugins.autocomplete(pluginId);
|
||||||
await resetPlugin(pluginId);
|
await resetPlugin(pluginId);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const winston = require('winston');
|
const winston = require('winston');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs').promises;
|
||||||
const nconf = require('nconf');
|
const nconf = require('nconf');
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
const cproc = require('child_process');
|
const cproc = require('child_process');
|
||||||
@@ -137,7 +137,7 @@ module.exports = function (Plugins) {
|
|||||||
Plugins.isInstalled = async function (id) {
|
Plugins.isInstalled = async function (id) {
|
||||||
const pluginDir = path.join(paths.nodeModules, id);
|
const pluginDir = path.join(paths.nodeModules, id);
|
||||||
try {
|
try {
|
||||||
const stats = await fs.promises.stat(pluginDir);
|
const stats = await fs.stat(pluginDir);
|
||||||
return stats.isDirectory();
|
return stats.isDirectory();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return false;
|
return false;
|
||||||
@@ -151,4 +151,12 @@ module.exports = function (Plugins) {
|
|||||||
Plugins.getActive = async function () {
|
Plugins.getActive = async function () {
|
||||||
return await db.getSortedSetRange('plugins:active', 0, -1);
|
return await db.getSortedSetRange('plugins:active', 0, -1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Plugins.autocomplete = async (fragment) => {
|
||||||
|
const pluginDir = paths.nodeModules;
|
||||||
|
const plugins = (await fs.readdir(pluginDir)).filter(filename => filename.startsWith(fragment));
|
||||||
|
|
||||||
|
// Autocomplete only if single match
|
||||||
|
return plugins.length === 1 ? plugins.pop() : fragment;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user