Cover Files breadcrumb segment navigation

This commit is contained in:
mirivlad 2026-07-01 08:17:45 +08:00
parent 03dbede414
commit 05bfe1d993
2 changed files with 37 additions and 2 deletions

View File

@ -156,6 +156,29 @@ test.describe('G: Files Plugin', () => {
await expect(page.locator('[data-file-name="CutMe"]')).toHaveCount(0); await expect(page.locator('[data-file-name="CutMe"]')).toHaveCount(0);
}); });
test('files explorer navigates by clicking breadcrumb segments', async ({ page }) => {
await page.locator('.wt-label').filter({ hasText: 'Project' }).click();
await openFilesTool(page);
await expect(page.locator('.files-breadcrumb')).toContainText('Project', { timeout: 10000 });
await page.locator('[data-files-action="new-folder"]').click();
await page.locator('[data-files-create-input]').fill('BreadcrumbParent');
await page.locator('[data-files-create-confirm]').click();
await page.locator('[data-file-name="BreadcrumbParent"]').dblclick();
await expect(page.locator('.files-breadcrumb')).toContainText('BreadcrumbParent');
await page.locator('[data-files-action="new-folder"]').click();
await page.locator('[data-files-create-input]').fill('BreadcrumbChild');
await page.locator('[data-files-create-confirm]').click();
await page.locator('[data-file-name="BreadcrumbChild"]').dblclick();
await expect(page.locator('.files-breadcrumb')).toContainText('BreadcrumbChild');
await page.locator('.files-breadcrumb-item').filter({ hasText: 'BreadcrumbParent' }).click();
await expect(page.locator('.files-breadcrumb')).toContainText('BreadcrumbParent');
await expect(page.locator('.files-breadcrumb')).not.toContainText('BreadcrumbChild');
await expect(page.locator('[data-file-name="BreadcrumbChild"]')).toBeVisible();
});
test('files explorer duplicates a file from the context menu', async ({ page }) => { test('files explorer duplicates a file from the context menu', async ({ page }) => {
await page.locator('.wt-label').filter({ hasText: 'Project' }).click(); await page.locator('.wt-label').filter({ hasText: 'Project' }).click();
await openFilesTool(page); await openFilesTool(page);

View File

@ -787,8 +787,20 @@
function firstSelected() { return selectedEntries()[0] || null; } function firstSelected() { return selectedEntries()[0] || null; }
function updateBreadcrumb() { function updateBreadcrumb() {
breadcrumb.innerHTML = ''; breadcrumb.innerHTML = '';
breadcrumb.appendChild(e('span', { className: 'files-breadcrumb-item', onClick: function () { nav(''); } }, [workspaceName])); breadcrumb.appendChild(e('span', { className: current ? 'files-breadcrumb-item' : 'files-breadcrumb-current', onClick: function () { nav(''); } }, [workspaceName]));
if (current) breadcrumb.appendChild(e('span', { className: 'files-breadcrumb-current' }, [' / ' + current])); if (!current) return;
var parts = current.split('/');
var path = '';
parts.forEach(function (part, index) {
path = path ? path + '/' + part : part;
breadcrumb.appendChild(e('span', { className: 'files-breadcrumb-sep' }, [' / ']));
var target = path;
var isCurrent = index === parts.length - 1;
breadcrumb.appendChild(e('span', {
className: isCurrent ? 'files-breadcrumb-current' : 'files-breadcrumb-item',
onClick: function () { if (!isCurrent) nav(target); }
}, [part]));
});
} }
function visible() { function visible() {
return entries.filter(function (item) { return !item.isHidden && !item.isReserved && (!filter || item.name.toLowerCase().indexOf(filter) !== -1); }).sort(function (a, b) { return entries.filter(function (item) { return !item.isHidden && !item.isReserved && (!filter || item.name.toLowerCase().indexOf(filter) !== -1); }).sort(function (a, b) {