...
This commit is contained in:
@@ -25,7 +25,7 @@ class FileTree {
|
||||
const isDir = node.dataset.isdir === 'true';
|
||||
|
||||
// Toggle folder
|
||||
if (e.target.closest('.tree-toggle')) {
|
||||
if (e.target.closest('.tree-node-toggle')) {
|
||||
this.toggleFolder(node);
|
||||
return;
|
||||
}
|
||||
@@ -83,21 +83,23 @@ class FileTree {
|
||||
}
|
||||
|
||||
createNodeElement(node, level) {
|
||||
const nodeWrapper = document.createElement('div');
|
||||
nodeWrapper.className = 'tree-node-wrapper';
|
||||
nodeWrapper.style.marginLeft = `${level * 12}px`;
|
||||
|
||||
const div = document.createElement('div');
|
||||
div.className = 'tree-node';
|
||||
div.dataset.path = node.path;
|
||||
div.dataset.isdir = node.isDirectory;
|
||||
div.style.paddingLeft = `${level * 20 + 10}px`;
|
||||
|
||||
// Toggle arrow for folders
|
||||
if (node.isDirectory) {
|
||||
const toggle = document.createElement('span');
|
||||
toggle.className = 'tree-toggle';
|
||||
toggle.innerHTML = '<i class="bi bi-chevron-right"></i>';
|
||||
toggle.className = 'tree-node-toggle';
|
||||
toggle.innerHTML = '▶';
|
||||
div.appendChild(toggle);
|
||||
} else {
|
||||
const spacer = document.createElement('span');
|
||||
spacer.className = 'tree-spacer';
|
||||
spacer.style.width = '16px';
|
||||
spacer.style.display = 'inline-block';
|
||||
div.appendChild(spacer);
|
||||
@@ -105,45 +107,47 @@ class FileTree {
|
||||
|
||||
// Icon
|
||||
const icon = document.createElement('i');
|
||||
if (node.isDirectory) {
|
||||
icon.className = 'bi bi-folder-fill';
|
||||
icon.style.color = '#dcb67a';
|
||||
} else {
|
||||
icon.className = 'bi bi-file-earmark-text';
|
||||
icon.style.color = '#6a9fb5';
|
||||
}
|
||||
icon.className = `bi ${node.isDirectory ? 'bi-folder-fill' : 'bi-file-earmark-text'} tree-node-icon`;
|
||||
div.appendChild(icon);
|
||||
|
||||
// Content wrapper
|
||||
const contentWrapper = document.createElement('div');
|
||||
contentWrapper.className = 'tree-node-content';
|
||||
|
||||
// Name
|
||||
const name = document.createElement('span');
|
||||
name.className = 'tree-name';
|
||||
name.className = 'tree-node-name';
|
||||
name.textContent = node.name;
|
||||
div.appendChild(name);
|
||||
name.title = node.name; // Tooltip on hover
|
||||
contentWrapper.appendChild(name);
|
||||
|
||||
// Size for files
|
||||
if (!node.isDirectory && node.size) {
|
||||
const size = document.createElement('span');
|
||||
size.className = 'tree-size';
|
||||
size.className = 'file-size-badge';
|
||||
size.textContent = this.formatSize(node.size);
|
||||
div.appendChild(size);
|
||||
contentWrapper.appendChild(size);
|
||||
}
|
||||
|
||||
return div;
|
||||
div.appendChild(contentWrapper);
|
||||
nodeWrapper.appendChild(div);
|
||||
|
||||
return nodeWrapper;
|
||||
}
|
||||
|
||||
toggleFolder(nodeElement) {
|
||||
const childContainer = nodeElement.querySelector('.tree-children');
|
||||
if (!childContainer) return;
|
||||
|
||||
const toggle = nodeElement.querySelector('.tree-toggle i');
|
||||
const toggle = nodeElement.querySelector('.tree-node-toggle');
|
||||
const isExpanded = childContainer.style.display !== 'none';
|
||||
|
||||
if (isExpanded) {
|
||||
childContainer.style.display = 'none';
|
||||
toggle.className = 'bi bi-chevron-right';
|
||||
toggle.innerHTML = '▶';
|
||||
} else {
|
||||
childContainer.style.display = 'block';
|
||||
toggle.className = 'bi bi-chevron-down';
|
||||
toggle.innerHTML = '▼';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user