diff options
Diffstat (limited to 'modules/ext/editor.js')
| -rw-r--r-- | modules/ext/editor.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/modules/ext/editor.js b/modules/ext/editor.js new file mode 100644 index 0000000..571a535 --- /dev/null +++ b/modules/ext/editor.js @@ -0,0 +1,70 @@ +class EditorModule { + constructor() { + this.commands = {}; + this.terminal = null; + this._vfsPath = null; + } + + requirements() { + return { met: true, missing: [] }; + } + + getHelpInfo() { + return { + 'edit': 'Open the code editor for a VFS file (usage: edit <path>)', + }; + } + + registerCommands() { + this.commands['edit'] = (args) => this.edit(args); + } + edit(args) { + if (!args[0]) return this.terminal.print('Usage: edit <path>', 'warning'); + const path = args.join(' '); + const modal = document.getElementById('code-editor'); + const title = document.getElementById('code-editor-title'); + const textarea = document.getElementById('code-editor-textarea'); + if (!modal || !textarea) return this.terminal.print('Editor modal not found', 'error'); + // Read existing file content or use empty for new files + const content = this.terminal.fs.readFile(path); + const fileContent = (content !== null && content !== false) ? content : ''; + // Set up modal + this._vfsPath = path; + title.textContent = '📝 Editing: ' + path; + textarea.value = fileContent; + modal.style.display = 'flex'; + textarea.focus(); + // Override save button to write back to VFS + const saveBtn = modal.querySelector('.modal-footer .btn:last-child'); + const cancelBtn = modal.querySelector('.modal-footer .btn-danger'); + if (saveBtn) { + saveBtn._origOnclick = saveBtn.onclick; + saveBtn.onclick = async () => { + const code = textarea.value; + const ok = this.terminal.fs.writeFile(this._vfsPath, code); + if (ok) { + this.terminal.print('✅ Saved to ' + this._vfsPath, 'success'); + } else { + this.terminal.print('❌ Failed to save ' + this._vfsPath, 'error'); + } + modal.style.display = 'none'; + this._vfsPath = null; + // Restore original onclick handler + if (saveBtn._origOnclick) saveBtn.onclick = saveBtn._origOnclick; + delete saveBtn._origOnclick; + }; + } + if (cancelBtn) { + cancelBtn._origOnclick = cancelBtn.onclick; + cancelBtn.onclick = () => { + modal.style.display = 'none'; + this._vfsPath = null; + if (cancelBtn._origOnclick) cancelBtn.onclick = cancelBtn._origOnclick; + delete cancelBtn._origOnclick; + }; + } + } +} +if (typeof window.webx11 !== 'undefined' && window.webx11) { + webx11.moduleManager.registerModule(new EditorModule(), 'https://webx11.duckdns.org/spaces/chatstudio/newos4/modules/editor.js'); +} |