Spaces:
Running
Running
| class TextFile { | |
| constructor(name, content) { | |
| this.name = name; | |
| this.content = content; | |
| this.lastModified = new Date(); | |
| } | |
| updateContent(newContent) { | |
| this.content = newContent; | |
| this.lastModified = new Date(); | |
| } | |
| } | |
| class FileManager { | |
| constructor() { | |
| this.files = []; | |
| this.currentFile = null; | |
| } | |
| addFile(file) { | |
| this.files.push(file); | |
| } | |
| getFileByName(name) { | |
| return this.files.find(file => file.name === name); | |
| } | |
| removeFile(name) { | |
| this.files = this.files.filter(file => file.name !== name); | |
| } | |
| saveCurrentFile(content) { | |
| if (this.currentFile) { | |
| this.currentFile.updateContent(content); | |
| return true; | |
| } | |
| return false; | |
| } | |
| } | |
| const fileManager = new FileManager(); | |
| // Demo files | |
| fileManager.addFile(new TextFile('Example File 1', 'This is an example text file.\nYou can edit this content.')); | |
| fileManager.addFile(new TextFile('Example File 2', 'Another example file with some text.\nEdit me!')); | |
| function initFileManager() { | |
| const fileList = document.querySelector('#file-list'); | |
| const editor = document.querySelector('#editor'); | |
| const saveBtn = document.querySelector('#save-btn'); | |
| const newFileBtn = document.querySelector('#new-file-btn'); | |
| function loadFileIntoEditor(file) { | |
| fileManager.currentFile = file; | |
| editor.value = file.content; | |
| } | |
| function refreshFileList() { | |
| fileList.innerHTML = ''; | |
| fileManager.files.forEach(file => { | |
| const fileItem = document.createElement('div'); | |
| fileItem.className = 'p-3 hover:bg-gray-100 rounded cursor-pointer'; | |
| fileItem.innerHTML = ` | |
| <div class="flex items-center"> | |
| <i data-feather="file-text" class="mr-2 text-gray-500"></i> | |
| <span>${file.name}</span> | |
| </div> | |
| <div class="text-xs text-gray-500 mt-1"> | |
| Last modified: ${file.lastModified.toLocaleString()} | |
| </div> | |
| `; | |
| fileItem.addEventListener('click', () => loadFileIntoEditor(file)); | |
| fileList.appendChild(fileItem); | |
| }); | |
| feather.replace(); | |
| } | |
| saveBtn.addEventListener('click', () => { | |
| if (fileManager.currentFile) { | |
| fileManager.saveCurrentFile(editor.value); | |
| refreshFileList(); | |
| alert('File saved successfully!'); | |
| } else { | |
| alert('No file selected!'); | |
| } | |
| }); | |
| newFileBtn.addEventListener('click', () => { | |
| const fileName = prompt('Enter new file name:'); | |
| if (fileName) { | |
| const newFile = new TextFile(fileName, ''); | |
| fileManager.addFile(newFile); | |
| loadFileIntoEditor(newFile); | |
| refreshFileList(); | |
| } | |
| }); | |
| refreshFileList(); | |
| if (fileManager.files.length > 0) { | |
| loadFileIntoEditor(fileManager.files[0]); | |
| } | |
| } | |
| document.addEventListener('DOMContentLoaded', initFileManager); |