mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +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