auto-git:
[change] main.js [change] preload.js [change] renderer.js
This commit is contained in:
64
renderer.js
64
renderer.js
@@ -410,4 +410,68 @@ folders.forEach(folderObj => {
|
||||
commitBtn.textContent = 'Commit';
|
||||
});
|
||||
|
||||
|
||||
const folderTitleDrop = document.getElementById('folderTitleDrop');
|
||||
const folderTitleArrow = document.getElementById('folderTitleArrow');
|
||||
const folderHierarchyDropdown = document.getElementById('folderHierarchyDropdown');
|
||||
const titleEl = document.getElementById('currentTitle');
|
||||
let isDropdownOpen = false;
|
||||
|
||||
folderTitleDrop.addEventListener('click', async () => {
|
||||
if (isDropdownOpen) {
|
||||
closeDropdown();
|
||||
return;
|
||||
}
|
||||
const selected = await window.electronAPI.getSelected();
|
||||
if (!selected || !selected.path) return;
|
||||
|
||||
// Lade die aktuelle Ordnerhierarchie
|
||||
folderHierarchyDropdown.innerHTML = '<div class="text-gray-400 italic">Lade Verzeichnis...</div>';
|
||||
folderHierarchyDropdown.classList.remove('hidden');
|
||||
folderHierarchyDropdown.classList.add('open');
|
||||
folderTitleArrow.classList.add('open');
|
||||
isDropdownOpen = true;
|
||||
|
||||
const tree = await window.electronAPI.getFolderTree(selected.path);
|
||||
folderHierarchyDropdown.innerHTML = renderFolderTree(tree);
|
||||
});
|
||||
|
||||
function closeDropdown() {
|
||||
folderHierarchyDropdown.classList.add('hidden');
|
||||
folderHierarchyDropdown.classList.remove('open');
|
||||
folderTitleArrow.classList.remove('open');
|
||||
isDropdownOpen = false;
|
||||
}
|
||||
|
||||
// KEIN automatisches Schließen beim Klick außerhalb!
|
||||
|
||||
function renderFolderTree(tree, level = 0) {
|
||||
if (!Array.isArray(tree)) return '';
|
||||
return `<ul class="${level === 0 ? 'font-mono text-[0.98rem] space-y-1' : 'pl-4 space-y-1'}">` + tree.map(node => {
|
||||
if (node.type === 'dir') {
|
||||
return `
|
||||
<li>
|
||||
<span class="inline-flex items-center font-semibold text-blue-700">
|
||||
<svg class="h-4 w-4 mr-1 inline-block" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M3 7a2 2 0 012-2h4l2 2h6a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V7"/>
|
||||
</svg>
|
||||
${node.name}
|
||||
</span>
|
||||
${renderFolderTree(node.children, level + 1)}
|
||||
</li>
|
||||
`;
|
||||
} else {
|
||||
return `
|
||||
<li class="flex items-center text-gray-800">
|
||||
<svg class="h-4 w-4 mr-1 opacity-60" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M9 17v-6a2 2 0 012-2h6"/>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M7 17a2 2 0 002 2h6a2 2 0 002-2V7a2 2 0 00-2-2h-6a2 2 0 00-2 2v10z"/>
|
||||
</svg>
|
||||
<span>${node.name}</span>
|
||||
</li>
|
||||
`;
|
||||
}
|
||||
}).join('') + '</ul>';
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user