fix: hide technical workbench metadata
This commit is contained in:
parent
41aeefc182
commit
3d78e0deaf
|
|
@ -175,10 +175,10 @@ test.describe('F: Default Editor Plugin', () => {
|
||||||
const workbench = page.locator('.workbench-host');
|
const workbench = page.locator('.workbench-host');
|
||||||
await expect(workbench).toBeVisible({ timeout: 10000 });
|
await expect(workbench).toBeVisible({ timeout: 10000 });
|
||||||
const title = workbench.locator('.workbench-title');
|
const title = workbench.locator('.workbench-title');
|
||||||
await expect(title).toHaveText('Docs/readme.md');
|
await expect(title).toHaveText('readme.md');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('open .md with notes context routes to highest-priority provider', async ({ page }) => {
|
test('opening a note uses its title rather than its technical path', async ({ page }) => {
|
||||||
await page.evaluate(async () => {
|
await page.evaluate(async () => {
|
||||||
const [result, err] = await window.go.api.App.OpenWorkbenchResource('verstak.platform-test', {
|
const [result, err] = await window.go.api.App.OpenWorkbenchResource('verstak.platform-test', {
|
||||||
kind: 'vault-file',
|
kind: 'vault-file',
|
||||||
|
|
@ -193,7 +193,7 @@ test.describe('F: Default Editor Plugin', () => {
|
||||||
const workbench = page.locator('.workbench-host');
|
const workbench = page.locator('.workbench-host');
|
||||||
await expect(workbench).toBeVisible({ timeout: 10000 });
|
await expect(workbench).toBeVisible({ timeout: 10000 });
|
||||||
const title = workbench.locator('.workbench-title');
|
const title = workbench.locator('.workbench-title');
|
||||||
await expect(title).toHaveText('Notes/Overview.md');
|
await expect(title).toHaveText('Overview');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('default-editor plugin is listed as loaded in plugin manager', async ({ page }) => {
|
test('default-editor plugin is listed as loaded in plugin manager', async ({ page }) => {
|
||||||
|
|
|
||||||
|
|
@ -513,7 +513,7 @@ test.describe('G: Files Plugin', () => {
|
||||||
|
|
||||||
const workbench = page.locator('.workbench-host');
|
const workbench = page.locator('.workbench-host');
|
||||||
await expect(workbench).toBeVisible({ timeout: 10000 });
|
await expect(workbench).toBeVisible({ timeout: 10000 });
|
||||||
await expect(workbench.locator('.workbench-title')).toHaveText('Docs/readme.md');
|
await expect(workbench.locator('.workbench-title')).toHaveText('readme.md');
|
||||||
|
|
||||||
const preview = page.locator('.de-preview');
|
const preview = page.locator('.de-preview');
|
||||||
await expect(preview).toBeVisible({ timeout: 10000 });
|
await expect(preview).toBeVisible({ timeout: 10000 });
|
||||||
|
|
@ -535,7 +535,7 @@ test.describe('G: Files Plugin', () => {
|
||||||
|
|
||||||
const workbench = page.locator('.workbench-host');
|
const workbench = page.locator('.workbench-host');
|
||||||
await expect(workbench).toBeVisible({ timeout: 10000 });
|
await expect(workbench).toBeVisible({ timeout: 10000 });
|
||||||
await expect(workbench.locator('.workbench-title')).toHaveText('Notes/Overview.md');
|
await expect(workbench.locator('.workbench-title')).toHaveText('Overview');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('files plugin card shows openProviders in contributions', async ({ page }) => {
|
test('files plugin card shows openProviders in contributions', async ({ page }) => {
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ test.describe('D: Plugin API bridge', () => {
|
||||||
|
|
||||||
const workbench = page.locator('.workbench-host');
|
const workbench = page.locator('.workbench-host');
|
||||||
await expect(workbench).toBeVisible({ timeout: 10000 });
|
await expect(workbench).toBeVisible({ timeout: 10000 });
|
||||||
await expect(workbench.locator('.workbench-title')).toHaveText('Notes/Overview.md');
|
await expect(workbench.locator('.workbench-title')).toHaveText('Overview');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('workbench routes markdown files to default-editor provider', async ({ page }) => {
|
test('workbench routes markdown files to default-editor provider', async ({ page }) => {
|
||||||
|
|
@ -76,7 +76,7 @@ test.describe('D: Plugin API bridge', () => {
|
||||||
const workbench = page.locator('.workbench-host');
|
const workbench = page.locator('.workbench-host');
|
||||||
await expect(workbench).toBeVisible({ timeout: 10000 });
|
await expect(workbench).toBeVisible({ timeout: 10000 });
|
||||||
const title = workbench.locator('.workbench-title');
|
const title = workbench.locator('.workbench-title');
|
||||||
await expect(title).toHaveText('Docs/readme.md');
|
await expect(title).toHaveText('readme.md');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('workbench shows no-provider fallback when no provider matches', async ({ page }) => {
|
test('workbench shows no-provider fallback when no provider matches', async ({ page }) => {
|
||||||
|
|
@ -91,8 +91,10 @@ test.describe('D: Plugin API bridge', () => {
|
||||||
window.dispatchEvent(new CustomEvent('verstak:workbench-opened', { detail: result }));
|
window.dispatchEvent(new CustomEvent('verstak:workbench-opened', { detail: result }));
|
||||||
});
|
});
|
||||||
|
|
||||||
await expect(page.locator('[data-workbench-status="no-provider"]')).toBeVisible();
|
const fallback = page.locator('[data-workbench-status="no-provider"]');
|
||||||
await expect(page.locator('[data-workbench-status="no-provider"]')).toContainText('No viewer/editor available');
|
await expect(fallback).toBeVisible();
|
||||||
|
await expect(fallback).toContainText('No viewer/editor available');
|
||||||
|
await expect(fallback).not.toContainText('generic-text');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('sync plugin API routes through mocked Wails bridge', async ({ page }) => {
|
test('sync plugin API routes through mocked Wails bridge', async ({ page }) => {
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
$: requestContext = openedResource?.request?.context?.notesMode || openedResource?.request?.context?.isInsideNotesFolder
|
$: requestContext = openedResource?.request?.context?.notesMode || openedResource?.request?.context?.isInsideNotesFolder
|
||||||
? 'notes-markdown'
|
? 'notes-markdown'
|
||||||
: ((openedResource?.request?.extension === '.md' || openedResource?.request?.extension === '.markdown') ? 'generic-markdown' : 'generic-text');
|
: ((openedResource?.request?.extension === '.md' || openedResource?.request?.extension === '.markdown') ? 'generic-markdown' : 'generic-text');
|
||||||
|
$: resourceTitle = resourceDisplayTitle(resourcePath, requestContext);
|
||||||
$: componentProps = openedResource || {};
|
$: componentProps = openedResource || {};
|
||||||
$: mountKey = [
|
$: mountKey = [
|
||||||
providerPluginId,
|
providerPluginId,
|
||||||
|
|
@ -31,6 +32,11 @@
|
||||||
requestContext,
|
requestContext,
|
||||||
].join(':');
|
].join(':');
|
||||||
|
|
||||||
|
function resourceDisplayTitle(path, context) {
|
||||||
|
const fileName = String(path || '').split('/').filter(Boolean).pop() || String(path || '');
|
||||||
|
return context === 'notes-markdown' ? fileName.replace(/\.(md|markdown)$/i, '') : fileName;
|
||||||
|
}
|
||||||
|
|
||||||
function closeWorkbench() {
|
function closeWorkbench() {
|
||||||
window.dispatchEvent(new CustomEvent('verstak:close-workbench', { cancelable: true }));
|
window.dispatchEvent(new CustomEvent('verstak:close-workbench', { cancelable: true }));
|
||||||
}
|
}
|
||||||
|
|
@ -41,7 +47,7 @@
|
||||||
<div class="workbench-host vt-page">
|
<div class="workbench-host vt-page">
|
||||||
{#if openedResource?.status === 'no-provider'}
|
{#if openedResource?.status === 'no-provider'}
|
||||||
<div class="workbench-header vt-page-header">
|
<div class="workbench-header vt-page-header">
|
||||||
<span class="workbench-title vt-page-title">{resourcePath}</span>
|
<span class="workbench-title vt-page-title">{resourceTitle}</span>
|
||||||
<span class="workbench-provider vt-badge">{tr('workbench.noProvider')}</span>
|
<span class="workbench-provider vt-badge">{tr('workbench.noProvider')}</span>
|
||||||
<button class="close-btn btn-ghost btn-icon" type="button" title={tr('common.close')} aria-label={tr('common.close')} on:click={closeWorkbench}>
|
<button class="close-btn btn-ghost btn-icon" type="button" title={tr('common.close')} aria-label={tr('common.close')} on:click={closeWorkbench}>
|
||||||
<Icon name="x" size={18} />
|
<Icon name="x" size={18} />
|
||||||
|
|
@ -49,11 +55,13 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="workbench-empty no-provider vt-empty-state" data-workbench-status="no-provider">
|
<div class="workbench-empty no-provider vt-empty-state" data-workbench-status="no-provider">
|
||||||
<p class="vt-empty-title">{tr('workbench.noViewer')}</p>
|
<p class="vt-empty-title">{tr('workbench.noViewer')}</p>
|
||||||
<p class="workbench-meta">{requestMode} · {requestContext}</p>
|
{#if debug.isEnabled()}
|
||||||
|
<p class="workbench-meta">{requestMode} · {requestContext}</p>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{:else if openedResource}
|
{:else if openedResource}
|
||||||
<div class="workbench-header vt-page-header">
|
<div class="workbench-header vt-page-header">
|
||||||
<span class="workbench-title vt-page-title">{resourcePath}</span>
|
<span class="workbench-title vt-page-title">{resourceTitle}</span>
|
||||||
{#if debug.isEnabled() && providerId}
|
{#if debug.isEnabled() && providerId}
|
||||||
<span class="workbench-provider vt-badge accent" data-debug-provider>{providerId}</span>
|
<span class="workbench-provider vt-badge accent" data-debug-provider>{providerId}</span>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue