Добавлен frontend workspace engine
Этот коммит содержится в:
@@ -0,0 +1,70 @@
|
||||
async function workspaceApi(url, payload = {}) {
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
|
||||
return await response.json();
|
||||
}
|
||||
|
||||
async function loadWorkspaceTree() {
|
||||
const workspace = document.getElementById('workspacePath').value;
|
||||
|
||||
const data = await workspaceApi('/api/files/tree', {
|
||||
path: workspace
|
||||
});
|
||||
|
||||
renderTree(data.tree || []);
|
||||
}
|
||||
|
||||
function renderTree(tree, level = 0) {
|
||||
const container = document.getElementById('fileTree');
|
||||
|
||||
if (level === 0) {
|
||||
container.innerHTML = '';
|
||||
}
|
||||
|
||||
tree.forEach(node => {
|
||||
const item = document.createElement('div');
|
||||
|
||||
item.className = 'tree-node';
|
||||
item.style.paddingLeft = `${level * 16}px`;
|
||||
|
||||
if (node.type === 'directory') {
|
||||
item.innerHTML = `📁 ${node.name}`;
|
||||
container.appendChild(item);
|
||||
|
||||
renderTree(node.children || [], level + 1);
|
||||
} else {
|
||||
item.innerHTML = `📄 ${node.name}`;
|
||||
item.onclick = () => openFile(node.path);
|
||||
container.appendChild(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function openFile(path) {
|
||||
const data = await workspaceApi('/api/files/read', {
|
||||
path
|
||||
});
|
||||
|
||||
document.getElementById('editorPath').innerText = path;
|
||||
document.getElementById('editor').value = data.content || '';
|
||||
}
|
||||
|
||||
async function saveCurrentFile() {
|
||||
const path = document.getElementById('editorPath').innerText;
|
||||
const content = document.getElementById('editor').value;
|
||||
|
||||
const data = await workspaceApi('/api/files/save', {
|
||||
path,
|
||||
content
|
||||
});
|
||||
|
||||
document.getElementById('editorStatus').innerText = data.success
|
||||
? 'Файл сохранен'
|
||||
: 'Ошибка сохранения';
|
||||
}
|
||||
Ссылка в новой задаче
Block a user