aboutsummaryrefslogtreecommitdiff
path: root/modules/core/module-modmgr.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/module-modmgr.js')
-rw-r--r--modules/core/module-modmgr.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/modules/core/module-modmgr.js b/modules/core/module-modmgr.js
new file mode 100644
index 0000000..1104883
--- /dev/null
+++ b/modules/core/module-modmgr.js
@@ -0,0 +1,40 @@
+// Extracted from newOS4 index.html — ModuleManagerModule
+ class ModuleManagerModule {
+ constructor() { this.commands = {}; this.terminal = null; }
+ getHelpInfo() {
+ return {
+ 'modules': 'modules — Open the module manager GUI',
+ 'listmods': 'listmods — List all loaded modules with status',
+ 'loadmod': 'loadmod <url> — Load a module from a URL',
+ 'removemod': 'removemod <name> — Remove a loaded module by name',
+ 'startup-modules': 'startup-modules — Open the startup modules selector',
+ 'load-local': 'load-local <path> — Load a module from VFS or URL',
+ 'loadlocal': 'loadlocal <path> — Alias for load-local',
+ };
+ }
+ registerCommands() {
+ this.commands['modules'] = () => { this.terminal.openModuleManager(); };
+ this.commands['loadmod'] = async (args) => {
+ if(!args[0]) return this.terminal.print("Usage: loadmod <url>", 'warning');
+ await this.terminal.moduleManager.loadModuleFromURL(args[0]);
+ this.terminal.renderModuleList();
+ };
+ this.commands['removemod'] = (args) => {
+ if(!args[0]) return this.terminal.print("Usage: removemod <name>", 'warning');
+ if(this.terminal.moduleManager.unregisterModule(args[0])) {
+ this.terminal.print(`Module '${args[0]}' removed`, 'success');
+ } else {
+ this.terminal.print(`Module not found: ${args[0]}`, 'error');
+ }
+ };
+ this.commands['listmods'] = () => {
+ const mods = this.terminal.moduleManager.getModuleList();
+ if(mods.length === 0) return this.terminal.print("No modules loaded");
+ mods.forEach(m => {
+ const status = m.loaded ? '✓' : '✗';
+ const badge = m.url ? '' : ' [Built-in]';
+ this.terminal.print(`${status} ${m.name}${badge}`);
+ });
+ };
+ }
+ }