Spaces:
Running
Running
File size: 3,106 Bytes
d36caae | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | 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); |