fix: rename Browser workspace tool
This commit is contained in:
parent
5cad11f3f9
commit
2da414fb3b
|
|
@ -1,7 +1,7 @@
|
||||||
import { test, expect } from '@playwright/test';
|
import { test, expect } from '@playwright/test';
|
||||||
import { waitForAppReady, setupConsoleCollector, resetMockState } from './helpers.js';
|
import { waitForAppReady, setupConsoleCollector, resetMockState } from './helpers.js';
|
||||||
|
|
||||||
test.describe('Browser Inbox workflow', () => {
|
test.describe('Browser workflow', () => {
|
||||||
let consoleCollector;
|
let consoleCollector;
|
||||||
|
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
|
|
@ -16,14 +16,14 @@ test.describe('Browser Inbox workflow', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('global inbox explains empty capture flow and exposes assignment filters', async ({ page }) => {
|
test('global inbox explains empty capture flow and exposes assignment filters', async ({ page }) => {
|
||||||
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser Inbox' }).click();
|
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser' }).click();
|
||||||
|
|
||||||
const inbox = page.locator('.browser-inbox-root');
|
const inbox = page.locator('.browser-inbox-root');
|
||||||
await expect(inbox).toBeVisible({ timeout: 10000 });
|
await expect(inbox).toBeVisible({ timeout: 10000 });
|
||||||
await expect(inbox.locator('.browser-inbox-title')).toContainText('Browser Inbox');
|
await expect(inbox.locator('.browser-inbox-title')).toHaveText('Browser');
|
||||||
await expect(inbox.locator('.browser-inbox-count')).toHaveText('0 items');
|
await expect(inbox.locator('.browser-inbox-count')).toHaveText('0 items');
|
||||||
await expect(inbox.locator('.browser-inbox-empty')).toContainText('No browser captures yet');
|
await expect(inbox.locator('.browser-inbox-empty')).toContainText('No browser materials yet');
|
||||||
await expect(inbox.locator('.browser-inbox-empty')).toContainText('send a page, selection, link, or file from the browser extension');
|
await expect(inbox.locator('.browser-inbox-empty')).toContainText('Send a page, selection, or link from the extension');
|
||||||
await expect(inbox.locator('[data-browser-inbox-filter="status"]')).toBeVisible();
|
await expect(inbox.locator('[data-browser-inbox-filter="status"]')).toBeVisible();
|
||||||
await expect(inbox.locator('[data-browser-inbox-filter="workspace"]')).toBeVisible();
|
await expect(inbox.locator('[data-browser-inbox-filter="workspace"]')).toBeVisible();
|
||||||
await expect(inbox.locator('[data-browser-inbox-action="clear"]')).toBeDisabled();
|
await expect(inbox.locator('[data-browser-inbox-action="clear"]')).toBeDisabled();
|
||||||
|
|
@ -47,7 +47,7 @@ test.describe('Browser Inbox workflow', () => {
|
||||||
}],
|
}],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
await page.getByRole('tab', { name: 'Browser Inbox' }).click();
|
await page.getByRole('tab', { name: 'Browser' }).click();
|
||||||
|
|
||||||
const inbox = page.locator('.browser-inbox-root');
|
const inbox = page.locator('.browser-inbox-root');
|
||||||
await expect(inbox.locator('.browser-inbox-count')).toHaveText('1 item');
|
await expect(inbox.locator('.browser-inbox-count')).toHaveText('1 item');
|
||||||
|
|
@ -94,7 +94,7 @@ test.describe('Browser Inbox workflow', () => {
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser Inbox' }).click();
|
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser' }).click();
|
||||||
|
|
||||||
const inbox = page.locator('.browser-inbox-root');
|
const inbox = page.locator('.browser-inbox-root');
|
||||||
await expect(inbox.locator('.browser-inbox-count')).toHaveText('3 items');
|
await expect(inbox.locator('.browser-inbox-count')).toHaveText('3 items');
|
||||||
|
|
|
||||||
|
|
@ -30,23 +30,23 @@ test.describe('B: Sidebar opens plugin view by item.view', () => {
|
||||||
test('Sidebar item exists with correct label', async ({ page }) => {
|
test('Sidebar item exists with correct label', async ({ page }) => {
|
||||||
await expect(page.locator('.sidebar .nav-item').filter({ hasText: 'Plugin Manager' })).not.toBeVisible();
|
await expect(page.locator('.sidebar .nav-item').filter({ hasText: 'Plugin Manager' })).not.toBeVisible();
|
||||||
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Activity' })).toBeVisible();
|
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Activity' })).toBeVisible();
|
||||||
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser Inbox' })).toBeVisible();
|
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser' })).toBeVisible();
|
||||||
|
|
||||||
const sidebarItem = page.locator('.sidebar .plugin-item').filter({ hasText: 'Platform Test' });
|
const sidebarItem = page.locator('.sidebar .plugin-item').filter({ hasText: 'Platform Test' });
|
||||||
await expect(sidebarItem).toBeVisible();
|
await expect(sidebarItem).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Global Activity and Browser Inbox sidebar items open plugin views', async ({ page }) => {
|
test('Global Activity and Browser sidebar items open plugin views', async ({ page }) => {
|
||||||
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Activity' }).click();
|
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Activity' }).click();
|
||||||
await expect(page.locator('.view-container .view-header h2')).toHaveText('Activity', { timeout: 10000 });
|
await expect(page.locator('.view-container .view-header h2')).toHaveText('Activity', { timeout: 10000 });
|
||||||
|
|
||||||
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser Inbox' }).click();
|
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser' }).click();
|
||||||
await expect(page.locator('.view-container .view-header h2')).toHaveText('Browser Inbox', { timeout: 10000 });
|
await expect(page.locator('.view-container .view-header h2')).toHaveText('Browser', { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
test('selected global tool remains visibly active through navigation and sidebar reloads', async ({ page }) => {
|
test('selected global tool remains visibly active through navigation and sidebar reloads', async ({ page }) => {
|
||||||
const activity = page.locator('.sidebar .plugin-item').filter({ hasText: 'Activity' });
|
const activity = page.locator('.sidebar .plugin-item').filter({ hasText: 'Activity' });
|
||||||
const browserInbox = page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser Inbox' });
|
const browserInbox = page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser' });
|
||||||
|
|
||||||
await activity.click();
|
await activity.click();
|
||||||
await expect(activity).toHaveAttribute('aria-current', 'page');
|
await expect(activity).toHaveAttribute('aria-current', 'page');
|
||||||
|
|
@ -62,7 +62,7 @@ test.describe('B: Sidebar opens plugin view by item.view', () => {
|
||||||
detail: { viewId: 'verstak.browser-inbox.view', pluginId: 'verstak.browser-inbox' },
|
detail: { viewId: 'verstak.browser-inbox.view', pluginId: 'verstak.browser-inbox' },
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
await expect(page.locator('.view-container .view-header h2')).toHaveText('Browser Inbox', { timeout: 10000 });
|
await expect(page.locator('.view-container .view-header h2')).toHaveText('Browser', { timeout: 10000 });
|
||||||
await expect(browserInbox).toHaveAttribute('aria-current', 'page');
|
await expect(browserInbox).toHaveAttribute('aria-current', 'page');
|
||||||
await expect(browserInbox).toHaveClass(/is-active/);
|
await expect(browserInbox).toHaveClass(/is-active/);
|
||||||
await expect(activity).not.toHaveAttribute('aria-current', 'page');
|
await expect(activity).not.toHaveAttribute('aria-current', 'page');
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ test.describe('UX follow-up fixes', () => {
|
||||||
await expect(search).toBeVisible();
|
await expect(search).toBeVisible();
|
||||||
await expect(page.locator('.sidebar [data-global-search-input]')).toBeVisible();
|
await expect(page.locator('.sidebar [data-global-search-input]')).toBeVisible();
|
||||||
|
|
||||||
await page.locator('.sidebar .nav-item').filter({ hasText: 'Browser Inbox' }).click();
|
await page.locator('.sidebar .nav-item').filter({ hasText: 'Browser' }).click();
|
||||||
await expect(page.locator('.browser-inbox-root')).toBeVisible({ timeout: 10000 });
|
await expect(page.locator('.browser-inbox-root')).toBeVisible({ timeout: 10000 });
|
||||||
await expect(search).toBeVisible();
|
await expect(search).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
@ -67,7 +67,7 @@ test.describe('UX follow-up fixes', () => {
|
||||||
|
|
||||||
const search = page.locator('[data-global-search-input]');
|
const search = page.locator('[data-global-search-input]');
|
||||||
await search.fill('Research Search Result');
|
await search.fill('Research Search Result');
|
||||||
const result = page.locator('[data-global-search-result-type="Browser Inbox"]').filter({ hasText: 'Research Search Result' });
|
const result = page.locator('[data-global-search-result-type="Browser"]').filter({ hasText: 'Research Search Result' });
|
||||||
await expect(result).toBeVisible({ timeout: 10000 });
|
await expect(result).toBeVisible({ timeout: 10000 });
|
||||||
await result.click();
|
await result.click();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ test.describe('UX Overview workspace flow', () => {
|
||||||
await page.getByRole('tab', { name: 'Overview' }).click();
|
await page.getByRole('tab', { name: 'Overview' }).click();
|
||||||
await overview.locator('[data-overview-summary="captures"]').click();
|
await overview.locator('[data-overview-summary="captures"]').click();
|
||||||
|
|
||||||
await expect(page.getByRole('tab', { name: 'Browser Inbox' })).toHaveAttribute('aria-selected', 'true');
|
await expect(page.getByRole('tab', { name: 'Browser' })).toHaveAttribute('aria-selected', 'true');
|
||||||
await expect(page.locator('.browser-inbox-root')).toBeVisible({ timeout: 10000 });
|
await expect(page.locator('.browser-inbox-root')).toBeVisible({ timeout: 10000 });
|
||||||
|
|
||||||
await page.getByRole('tab', { name: 'Overview' }).click();
|
await page.getByRole('tab', { name: 'Overview' }).click();
|
||||||
|
|
@ -70,7 +70,7 @@ test.describe('UX Overview workspace flow', () => {
|
||||||
|
|
||||||
await page.getByRole('tab', { name: 'Overview' }).click();
|
await page.getByRole('tab', { name: 'Overview' }).click();
|
||||||
await overview.locator('[data-overview-summary="attention"]').click();
|
await overview.locator('[data-overview-summary="attention"]').click();
|
||||||
await expect(page.getByRole('tab', { name: 'Browser Inbox' })).toHaveAttribute('aria-selected', 'true');
|
await expect(page.getByRole('tab', { name: 'Browser' })).toHaveAttribute('aria-selected', 'true');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Overview keeps the Notes total factual when the Files plugin is unavailable', async ({ page }) => {
|
test('Overview keeps the Notes total factual when the Files plugin is unavailable', async ({ page }) => {
|
||||||
|
|
@ -80,13 +80,13 @@ test.describe('UX Overview workspace flow', () => {
|
||||||
await expect(page.locator('[data-overview-summary="notes"]')).toContainText('1 total');
|
await expect(page.locator('[data-overview-summary="notes"]')).toContainText('1 total');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Overview hides Browser Inbox cards and actions when the current Deal does not include it', async ({ page }) => {
|
test('Overview hides Browser cards and actions when the current Deal does not include it', async ({ page }) => {
|
||||||
await page.locator('button[title="New workspace"]').click();
|
await page.locator('button[title="New Deal"]').click();
|
||||||
const modal = page.locator('[data-workspace-create-modal]');
|
const modal = page.locator('[data-workspace-create-modal]');
|
||||||
await modal.locator('[data-workspace-name]').fill('MinimalOverview');
|
await modal.locator('[data-workspace-name]').fill('MinimalOverview');
|
||||||
await modal.locator('[data-workspace-template]').selectOption('minimal');
|
await modal.locator('[data-workspace-template]').selectOption('minimal');
|
||||||
await modal.getByRole('button', { name: 'Create workspace' }).click();
|
await modal.getByRole('button', { name: 'Create Deal' }).click();
|
||||||
await expect(page.getByRole('tab', { name: 'Browser Inbox' })).toHaveCount(0);
|
await expect(page.getByRole('tab', { name: 'Browser' })).toHaveCount(0);
|
||||||
|
|
||||||
await page.evaluate(async () => {
|
await page.evaluate(async () => {
|
||||||
await window.go.api.App.WritePluginSettings('verstak.browser-inbox', {
|
await window.go.api.App.WritePluginSettings('verstak.browser-inbox', {
|
||||||
|
|
@ -107,7 +107,7 @@ test.describe('UX Overview workspace flow', () => {
|
||||||
await expect(overview).not.toContainText('Inbox material must stay hidden');
|
await expect(overview).not.toContainText('Inbox material must stay hidden');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Overview refreshes when Browser Inbox is disabled through plugin state changes', async ({ page }) => {
|
test('Overview refreshes when Browser is disabled through plugin state changes', async ({ page }) => {
|
||||||
await page.evaluate(async () => {
|
await page.evaluate(async () => {
|
||||||
await window.go.api.App.WritePluginSettings('verstak.browser-inbox', {
|
await window.go.api.App.WritePluginSettings('verstak.browser-inbox', {
|
||||||
'captures:global': [{
|
'captures:global': [{
|
||||||
|
|
@ -123,7 +123,7 @@ test.describe('UX Overview workspace flow', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const overview = page.locator('[data-overview-root]');
|
const overview = page.locator('[data-overview-root]');
|
||||||
await expect(page.getByRole('tab', { name: 'Browser Inbox' })).toHaveCount(0);
|
await expect(page.getByRole('tab', { name: 'Browser' })).toHaveCount(0);
|
||||||
await expect(overview.locator('[data-overview-summary="captures"]')).toHaveCount(0);
|
await expect(overview.locator('[data-overview-summary="captures"]')).toHaveCount(0);
|
||||||
await expect(overview.locator('[data-overview-action="browser-inbox"]')).toHaveCount(0);
|
await expect(overview.locator('[data-overview-action="browser-inbox"]')).toHaveCount(0);
|
||||||
});
|
});
|
||||||
|
|
@ -264,7 +264,7 @@ test.describe('UX Overview workspace flow', () => {
|
||||||
await expect(candidates.nth(3)).toContainText('Changed file "draft.md"');
|
await expect(candidates.nth(3)).toContainText('Changed file "draft.md"');
|
||||||
await candidates.nth(0).click();
|
await candidates.nth(0).click();
|
||||||
|
|
||||||
await expect(page.getByRole('tab', { name: 'Browser Inbox' })).toHaveAttribute('aria-selected', 'true');
|
await expect(page.getByRole('tab', { name: 'Browser' })).toHaveAttribute('aria-selected', 'true');
|
||||||
await expect(page.locator('.browser-inbox-root')).toBeVisible({ timeout: 10000 });
|
await expect(page.locator('.browser-inbox-root')).toBeVisible({ timeout: 10000 });
|
||||||
|
|
||||||
await page.getByRole('tab', { name: 'Overview' }).click();
|
await page.getByRole('tab', { name: 'Overview' }).click();
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ test.describe('Workspace templates', () => {
|
||||||
await expect(templateSelect).toHaveValue('default');
|
await expect(templateSelect).toHaveValue('default');
|
||||||
await expect(templateSelect).toHaveCSS('appearance', 'none');
|
await expect(templateSelect).toHaveCSS('appearance', 'none');
|
||||||
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Notes');
|
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Notes');
|
||||||
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Browser Inbox');
|
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Browser');
|
||||||
|
|
||||||
await modal.getByRole('button', { name: 'Create Deal' }).click();
|
await modal.getByRole('button', { name: 'Create Deal' }).click();
|
||||||
await expect(modal.locator('[data-workspace-create-error]')).toContainText('Name is required');
|
await expect(modal.locator('[data-workspace-create-error]')).toContainText('Name is required');
|
||||||
|
|
@ -74,7 +74,7 @@ test.describe('Workspace templates', () => {
|
||||||
await expect(page.getByRole('tab', { name: 'Journal' })).toHaveCount(0);
|
await expect(page.getByRole('tab', { name: 'Journal' })).toHaveCount(0);
|
||||||
await expect(page.getByRole('tab', { name: 'Secrets' })).toHaveCount(0);
|
await expect(page.getByRole('tab', { name: 'Secrets' })).toHaveCount(0);
|
||||||
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Todos' })).toBeVisible();
|
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Todos' })).toBeVisible();
|
||||||
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser Inbox' })).toBeVisible();
|
await expect(page.locator('.sidebar .plugin-item').filter({ hasText: 'Browser' })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('template explains an unavailable plugin and warns after incomplete creation', async ({ page }) => {
|
test('template explains an unavailable plugin and warns after incomplete creation', async ({ page }) => {
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ export default {
|
||||||
'command.openOverview': 'Open Overview',
|
'command.openOverview': 'Open Overview',
|
||||||
'command.openFiles': 'Open Files',
|
'command.openFiles': 'Open Files',
|
||||||
'command.openActivity': 'Open Activity',
|
'command.openActivity': 'Open Activity',
|
||||||
'command.openBrowserInbox': 'Open Browser Inbox',
|
'command.openBrowserInbox': 'Open Browser',
|
||||||
'command.createMarkdown': 'Create Markdown File',
|
'command.createMarkdown': 'Create Markdown File',
|
||||||
'command.createText': 'Create Text File',
|
'command.createText': 'Create Text File',
|
||||||
'command.syncNow': 'Sync Now',
|
'command.syncNow': 'Sync Now',
|
||||||
|
|
@ -172,7 +172,7 @@ export default {
|
||||||
'search.type.folder': 'Folder',
|
'search.type.folder': 'Folder',
|
||||||
'search.type.file': 'File',
|
'search.type.file': 'File',
|
||||||
'search.type.journal': 'Journal',
|
'search.type.journal': 'Journal',
|
||||||
'search.type.browserInbox': 'Browser Inbox',
|
'search.type.browserInbox': 'Browser',
|
||||||
'search.type.activity': 'Activity',
|
'search.type.activity': 'Activity',
|
||||||
'workbench.noProvider': 'No provider',
|
'workbench.noProvider': 'No provider',
|
||||||
'workbench.noViewer': 'No viewer/editor available',
|
'workbench.noViewer': 'No viewer/editor available',
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ export default {
|
||||||
'command.openOverview': 'Открыть обзор',
|
'command.openOverview': 'Открыть обзор',
|
||||||
'command.openFiles': 'Открыть файлы',
|
'command.openFiles': 'Открыть файлы',
|
||||||
'command.openActivity': 'Открыть активность',
|
'command.openActivity': 'Открыть активность',
|
||||||
'command.openBrowserInbox': 'Открыть входящие из браузера',
|
'command.openBrowserInbox': 'Открыть Браузер',
|
||||||
'command.createMarkdown': 'Создать файл Markdown',
|
'command.createMarkdown': 'Создать файл Markdown',
|
||||||
'command.createText': 'Создать текстовый файл',
|
'command.createText': 'Создать текстовый файл',
|
||||||
'command.syncNow': 'Синхронизировать сейчас',
|
'command.syncNow': 'Синхронизировать сейчас',
|
||||||
|
|
@ -172,7 +172,7 @@ export default {
|
||||||
'search.type.folder': 'Папка',
|
'search.type.folder': 'Папка',
|
||||||
'search.type.file': 'Файл',
|
'search.type.file': 'Файл',
|
||||||
'search.type.journal': 'Журнал',
|
'search.type.journal': 'Журнал',
|
||||||
'search.type.browserInbox': 'Входящие из браузера',
|
'search.type.browserInbox': 'Браузер',
|
||||||
'search.type.activity': 'Активность',
|
'search.type.activity': 'Активность',
|
||||||
'workbench.noProvider': 'Нет обработчика',
|
'workbench.noProvider': 'Нет обработчика',
|
||||||
'workbench.noViewer': 'Нет доступного средства просмотра или редактора',
|
'workbench.noViewer': 'Нет доступного средства просмотра или редактора',
|
||||||
|
|
|
||||||
|
|
@ -242,19 +242,19 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
manifest: {
|
manifest: {
|
||||||
schemaVersion: 1,
|
schemaVersion: 1,
|
||||||
id: 'verstak.browser-inbox',
|
id: 'verstak.browser-inbox',
|
||||||
name: 'Browser Inbox',
|
name: 'Browser',
|
||||||
version: '0.1.0',
|
version: '0.1.0',
|
||||||
apiVersion: '0.1.0',
|
apiVersion: '0.1.0',
|
||||||
description: 'Global browser capture queue with explicit workspace assignment.',
|
description: 'Global browser materials with explicit Deal assignment.',
|
||||||
source: 'official',
|
source: 'official',
|
||||||
icon: 'inbox',
|
icon: 'inbox',
|
||||||
provides: ['browser.inbox'],
|
provides: ['browser.inbox'],
|
||||||
permissions: ['events.subscribe', 'files.read', 'storage.namespace', 'ui.register'],
|
permissions: ['events.subscribe', 'files.read', 'storage.namespace', 'ui.register'],
|
||||||
frontend: { entry: 'frontend/dist/index.js' },
|
frontend: { entry: 'frontend/dist/index.js' },
|
||||||
contributes: {
|
contributes: {
|
||||||
views: [{ id: 'verstak.browser-inbox.view', title: 'Browser Inbox', icon: 'inbox', component: 'BrowserInboxView' }],
|
views: [{ id: 'verstak.browser-inbox.view', title: 'Browser', icon: 'inbox', component: 'BrowserInboxView' }],
|
||||||
sidebarItems: [{ id: 'verstak.browser-inbox.sidebar', title: 'Browser Inbox', icon: 'inbox', view: 'verstak.browser-inbox.view', position: 30 }],
|
sidebarItems: [{ id: 'verstak.browser-inbox.sidebar', title: 'Browser', icon: 'inbox', view: 'verstak.browser-inbox.view', position: 30 }],
|
||||||
workspaceItems: [{ id: 'verstak.browser-inbox.workspace', title: 'Browser Inbox', icon: 'inbox', component: 'BrowserInboxView' }]
|
workspaceItems: [{ id: 'verstak.browser-inbox.workspace', title: 'Browser', icon: 'inbox', component: 'BrowserInboxView' }]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
rootPath: '/tmp/verstak-test/plugins/browser-inbox',
|
rootPath: '/tmp/verstak-test/plugins/browser-inbox',
|
||||||
|
|
@ -297,7 +297,7 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
'verstak.sync': 'Синхронизация',
|
'verstak.sync': 'Синхронизация',
|
||||||
'verstak.activity': 'Активность',
|
'verstak.activity': 'Активность',
|
||||||
'verstak.journal': 'Журнал',
|
'verstak.journal': 'Журнал',
|
||||||
'verstak.browser-inbox': 'Входящие из браузера',
|
'verstak.browser-inbox': 'Браузер',
|
||||||
'verstak.search': 'Поиск',
|
'verstak.search': 'Поиск',
|
||||||
'verstak.trash': 'Корзина',
|
'verstak.trash': 'Корзина',
|
||||||
'verstak.todo': 'Задачи',
|
'verstak.todo': 'Задачи',
|
||||||
|
|
@ -2456,7 +2456,7 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
}
|
}
|
||||||
|
|
||||||
function title(capture) {
|
function title(capture) {
|
||||||
return capture.title || capture.fileName || capture.url || capture.captureId || 'Untitled capture';
|
return capture.title || capture.fileName || capture.url || capture.captureId || 'Untitled material';
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderBrowserInbox(containerEl, props, api) {
|
function renderBrowserInbox(containerEl, props, api) {
|
||||||
|
|
@ -2473,7 +2473,7 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
containerEl.innerHTML = '';
|
containerEl.innerHTML = '';
|
||||||
var root = el('div', { className: 'browser-inbox-root', 'data-plugin-id': PLUGIN_ID });
|
var root = el('div', { className: 'browser-inbox-root', 'data-plugin-id': PLUGIN_ID });
|
||||||
var toolbar = el('div', { className: 'browser-inbox-toolbar' });
|
var toolbar = el('div', { className: 'browser-inbox-toolbar' });
|
||||||
var titleEl = el('span', { className: 'browser-inbox-title', textContent: rootPath ? 'Browser Inbox · ' + rootPath : 'Browser Inbox' });
|
var titleEl = el('span', { className: 'browser-inbox-title', textContent: rootPath ? 'Browser · ' + rootPath : 'Browser' });
|
||||||
var countEl = el('span', { className: 'browser-inbox-count' });
|
var countEl = el('span', { className: 'browser-inbox-count' });
|
||||||
var statusEl = el('span', { className: 'browser-inbox-status' });
|
var statusEl = el('span', { className: 'browser-inbox-status' });
|
||||||
var filtersEl = el('div', { className: 'browser-inbox-filters' });
|
var filtersEl = el('div', { className: 'browser-inbox-filters' });
|
||||||
|
|
@ -2557,7 +2557,7 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
function renderWorkspaceFilterOptions() {
|
function renderWorkspaceFilterOptions() {
|
||||||
if (rootPath) return;
|
if (rootPath) return;
|
||||||
workspaceFilterEl.innerHTML = '';
|
workspaceFilterEl.innerHTML = '';
|
||||||
workspaceFilterEl.appendChild(option('', 'All workspaces'));
|
workspaceFilterEl.appendChild(option('', 'All Deals'));
|
||||||
workspaceRoots().forEach(function (workspace) {
|
workspaceRoots().forEach(function (workspace) {
|
||||||
workspaceFilterEl.appendChild(option(workspace, workspace));
|
workspaceFilterEl.appendChild(option(workspace, workspace));
|
||||||
});
|
});
|
||||||
|
|
@ -2630,7 +2630,7 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
}) : captures).map(function (capture) { return capture.captureId; });
|
}) : captures).map(function (capture) { return capture.captureId; });
|
||||||
captures = captures.filter(function (capture) { return ids.indexOf(capture.captureId) === -1; });
|
captures = captures.filter(function (capture) { return ids.indexOf(capture.captureId) === -1; });
|
||||||
selectedId = '';
|
selectedId = '';
|
||||||
statusText = rootPath ? 'Workspace captures cleared' : 'Inbox cleared';
|
statusText = rootPath ? 'Deal materials cleared' : 'Inbox cleared';
|
||||||
return persist();
|
return persist();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2672,7 +2672,7 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
listEl.appendChild(el('div', {
|
listEl.appendChild(el('div', {
|
||||||
className: 'browser-inbox-empty',
|
className: 'browser-inbox-empty',
|
||||||
textContent: captures.length === 0
|
textContent: captures.length === 0
|
||||||
? 'No browser captures yet. Keep this view open, then send a page, selection, link, or file from the browser extension.'
|
? 'No browser materials yet. Send a page, selection, or link from the extension.'
|
||||||
: 'No captures match the current filters.'
|
: 'No captures match the current filters.'
|
||||||
}));
|
}));
|
||||||
return;
|
return;
|
||||||
|
|
@ -2717,7 +2717,7 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
el('div', { className: 'browser-inbox-meta-value', textContent: capture.domain || '-' }),
|
el('div', { className: 'browser-inbox-meta-value', textContent: capture.domain || '-' }),
|
||||||
el('div', { className: 'browser-inbox-meta-label', textContent: 'Browser' }),
|
el('div', { className: 'browser-inbox-meta-label', textContent: 'Browser' }),
|
||||||
el('div', { className: 'browser-inbox-meta-value', textContent: capture.browserName || capture.source || '-' }),
|
el('div', { className: 'browser-inbox-meta-value', textContent: capture.browserName || capture.source || '-' }),
|
||||||
el('div', { className: 'browser-inbox-meta-label', textContent: 'Workspace' }),
|
el('div', { className: 'browser-inbox-meta-label', textContent: 'Deal' }),
|
||||||
el('div', { className: 'browser-inbox-meta-value', textContent: capture.workspaceRootPath || 'Unassigned' }),
|
el('div', { className: 'browser-inbox-meta-value', textContent: capture.workspaceRootPath || 'Unassigned' }),
|
||||||
el('div', { className: 'browser-inbox-meta-label', textContent: 'Status' }),
|
el('div', { className: 'browser-inbox-meta-label', textContent: 'Status' }),
|
||||||
el('div', { className: 'browser-inbox-meta-value', textContent: capture.processed ? 'Processed' : 'Unprocessed' })
|
el('div', { className: 'browser-inbox-meta-value', textContent: capture.processed ? 'Processed' : 'Unprocessed' })
|
||||||
|
|
@ -4196,19 +4196,19 @@ import journalSource from '../../../../../verstak-official-plugins/plugins/journ
|
||||||
manifest: {
|
manifest: {
|
||||||
schemaVersion: 1,
|
schemaVersion: 1,
|
||||||
id: 'verstak.browser-inbox',
|
id: 'verstak.browser-inbox',
|
||||||
name: 'Browser Inbox',
|
name: 'Browser',
|
||||||
version: '0.1.0',
|
version: '0.1.0',
|
||||||
apiVersion: '0.1.0',
|
apiVersion: '0.1.0',
|
||||||
description: 'Global browser capture queue with explicit workspace assignment.',
|
description: 'Global browser materials with explicit Deal assignment.',
|
||||||
source: 'official',
|
source: 'official',
|
||||||
icon: 'inbox',
|
icon: 'inbox',
|
||||||
provides: ['browser.inbox'],
|
provides: ['browser.inbox'],
|
||||||
permissions: ['events.subscribe', 'files.read', 'storage.namespace', 'ui.register'],
|
permissions: ['events.subscribe', 'files.read', 'storage.namespace', 'ui.register'],
|
||||||
frontend: { entry: 'frontend/dist/index.js' },
|
frontend: { entry: 'frontend/dist/index.js' },
|
||||||
contributes: {
|
contributes: {
|
||||||
views: [{ id: 'verstak.browser-inbox.view', title: 'Browser Inbox', icon: 'inbox', component: 'BrowserInboxView' }],
|
views: [{ id: 'verstak.browser-inbox.view', title: 'Browser', icon: 'inbox', component: 'BrowserInboxView' }],
|
||||||
sidebarItems: [{ id: 'verstak.browser-inbox.sidebar', title: 'Browser Inbox', icon: 'inbox', view: 'verstak.browser-inbox.view', position: 30 }],
|
sidebarItems: [{ id: 'verstak.browser-inbox.sidebar', title: 'Browser', icon: 'inbox', view: 'verstak.browser-inbox.view', position: 30 }],
|
||||||
workspaceItems: [{ id: 'verstak.browser-inbox.workspace', title: 'Browser Inbox', icon: 'inbox', component: 'BrowserInboxView' }]
|
workspaceItems: [{ id: 'verstak.browser-inbox.workspace', title: 'Browser', icon: 'inbox', component: 'BrowserInboxView' }]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
rootPath: '/tmp/verstak-test/plugins/browser-inbox',
|
rootPath: '/tmp/verstak-test/plugins/browser-inbox',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue