Zezoq8's picture
I would like you to develop a ComfyUI node that can load previously saved text files, display their contents, and provide functionality to edit and save the texts.
d36caae verified
Raw
History Blame Contribute Delete
3.11 kB
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);