Skip to content

Commit d5be95d

Browse files
committed
improve file-tree
1 parent b0ff9c5 commit d5be95d

File tree

2 files changed

+57
-14
lines changed

2 files changed

+57
-14
lines changed

app/static/js/file_tree.js

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,23 +64,63 @@ function renderFileTree() {
6464

6565
treeContainer.innerHTML = '';
6666

67+
// Add simple CSS for tree lines if not already added
68+
if (!document.getElementById('tree-lines-style')) {
69+
const style = document.createElement('style');
70+
style.id = 'tree-lines-style';
71+
style.textContent = `
72+
.tree-item {
73+
position: relative;
74+
padding-left: 4px;
75+
}
76+
.tree-item.level-1 { padding-left: 24px; }
77+
.tree-item.level-2 { padding-left: 44px; }
78+
.tree-item.level-3 { padding-left: 64px; }
79+
.tree-item.level-4 { padding-left: 84px; }
80+
.tree-item.level-5 { padding-left: 104px; }
81+
`;
82+
document.head.appendChild(style);
83+
}
84+
6785
const state = window.workspaceManager?.getState();
6886
const hasFiles = state && Object.keys(state.files).length > 0;
6987

7088
if (!hasFiles) {
7189
if (emptyStateEl) {
7290
emptyStateEl.classList.remove('hidden');
7391
}
92+
// Still show the root folder even when empty
93+
const rootDiv = document.createElement('div');
94+
rootDiv.innerHTML = `
95+
<div class="flex items-center p-1 text-gray-400 pointer-events-none" style="padding-left: 4px;">
96+
<div class="flex items-center gap-1">
97+
<span class="mdi mdi-folder-open text-gray-400 text-base"></span>
98+
<span class="font-medium">/your-repo</span>
99+
</div>
100+
</div>
101+
`;
102+
treeContainer.appendChild(rootDiv);
74103
return;
75104
} else {
76105
if (emptyStateEl) {
77106
emptyStateEl.classList.add('hidden');
78107
}
79108
}
80109

110+
// Add root folder styled like other folders but greyed out
111+
const rootDiv = document.createElement('div');
112+
rootDiv.innerHTML = `
113+
<div class="flex items-center p-1 text-gray-400 pointer-events-none" style="padding-left: 4px;">
114+
<div class="flex items-center gap-1">
115+
<span class="mdi mdi-folder-open text-gray-400 text-base"></span>
116+
<span class="font-medium">/your-repo</span>
117+
</div>
118+
</div>
119+
`;
120+
treeContainer.appendChild(rootDiv);
121+
81122
function renderNode(node, level = 0) {
82123
const div = document.createElement('div');
83-
div.style.paddingLeft = `${level * 16}px`;
84124

85125
if (node.type === 'folder') {
86126
const state = window.workspaceManager?.getState();
@@ -90,6 +130,8 @@ function renderFileTree() {
90130
isExpanded = false;
91131
}
92132
const folderIcon = isExpanded ? 'mdi-folder-open' : 'mdi-folder';
133+
134+
div.className = `tree-item level-${level}`;
93135
div.innerHTML = `
94136
<div class="flex items-center justify-between p-1 hover:bg-gray-100 group">
95137
<div class="flex items-center gap-1 cursor-pointer folder-toggle" data-path="${node.path}">
@@ -123,10 +165,11 @@ function renderFileTree() {
123165
// File node
124166
const state = window.workspaceManager?.getState();
125167
const isSelected = state && state.selectedFile === node.path;
168+
169+
div.className = `tree-item level-${level}`;
126170
div.innerHTML = `
127171
<div class="flex items-center justify-between p-1 hover:bg-gray-100 cursor-pointer file-item ${isSelected ? 'bg-cyan-100 font-medium' : ''}" data-path="${node.path}">
128172
<div class="flex items-center gap-1">
129-
<span class="w-3"></span>
130173
<span class="mdi mdi-file-document-outline text-gray-600 text-sm"></span>
131174
<span>${node.name}</span>
132175
</div>
@@ -146,7 +189,7 @@ function renderFileTree() {
146189

147190
// Generate and render dynamic tree
148191
const fileTreeData = generateFileTreeData();
149-
fileTreeData.forEach(node => renderNode(node));
192+
fileTreeData.forEach(node => renderNode(node, 0));
150193

151194
// Add event listeners
152195
treeContainer.addEventListener('click', handleTreeClick);

app/templates/components/styles.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,26 +94,26 @@
9494
gap: 0; /* No gaps - panels share borders */
9595
}
9696

97-
/* FileTree panel (left) - 20% of container width */
97+
/* FileTree panel (left) - 24% of container width */
9898
.workspace-sidebar {
99-
flex: 1 1 20%; /* Takes 20% of available width */
100-
min-width: 220px; /* Minimum: 220px */
101-
max-width: 350px; /* Maximum: 350px */
99+
flex: 1.2 1 24%; /* Takes 24% of available width */
100+
min-width: 240px; /* Minimum: 240px */
101+
max-width: 380px; /* Maximum: 380px */
102102
overflow: auto;
103103
}
104104

105-
/* Editor panel (center) - 60% of container width */
105+
/* Editor panel (center) - 52% of container width */
106106
.workspace-center {
107-
flex: 3 1 60%; /* Takes 60% of available width (3x side panels) */
108-
min-width: 400px; /* Minimum: 400px */
107+
flex: 2.2 1 52%; /* Takes 52% of available width */
108+
min-width: 380px; /* Minimum: 380px */
109109
overflow: hidden;
110110
}
111111

112-
/* QuickActions panel (right) - 20% of container width */
112+
/* QuickActions panel (right) - 24% of container width */
113113
.workspace-actions {
114-
flex: 1 1 20%; /* Takes 20% of available width */
115-
min-width: 220px; /* Minimum: 220px */
116-
max-width: 350px; /* Maximum: 350px */
114+
flex: 1.2 1 24%; /* Takes 24% of available width */
115+
min-width: 240px; /* Minimum: 240px */
116+
max-width: 380px; /* Maximum: 380px */
117117
overflow: auto;
118118
}
119119

0 commit comments

Comments
 (0)