Drawn icons throughout; file state and type as icons, no PENDING
- Every button's icon is drawn from one small SVG set (ICON), in bold strokes of the button's own colour, instead of font characters: ⟳ ⤓ ↗ and the like came out thin and tiny and differed from font to font. Static buttons name theirs with data-icon. Keep is a flag everywhere. - A file's state is an icon: a check when downloaded, a warning with the error in its tooltip when it failed, nothing while it waits. Its type (audio, video, image, pdf, torrent, other) is an icon with the word in its tooltip. The DOWNLOADED and PENDING chips are gone, which also fixes them being hard to read on Classic's blue selection. - Tests find state and type by their tooltips. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HdTEWQNrzyFULijigkmMn
This commit is contained in:
@@ -34,7 +34,12 @@ The long form, with what was wrong before and how it was found, is in
|
|||||||
- Buttons are icons, with the words in their tooltips: the Files pane (save, delete, view,
|
- Buttons are icons, with the words in their tooltips: the Files pane (save, delete, view,
|
||||||
download), an item's own buttons (mark read, keep, open the original), the feed header (scan,
|
download), an item's own buttons (mark read, keep, open the original), the feed header (scan,
|
||||||
download latest, mark all read, settings, unsubscribe), and the Settings, feed settings and
|
download latest, mark all read, settings, unsubscribe), and the Settings, feed settings and
|
||||||
Download latest dialogs (save, download, cancel).
|
Download latest dialogs (save, download, cancel). The icons are drawn, from one set, rather
|
||||||
|
than font characters: ⟳ ⤓ ↗ and the like came out thin and tiny and differed from font to
|
||||||
|
font. Keep is a flag everywhere, as it was in the original.
|
||||||
|
- A file's state and type are icons: a check when it is downloaded, a warning when it failed
|
||||||
|
(the error is in the tooltip), and nothing while it waits; audio, video, image, PDF, torrent
|
||||||
|
and other files each have their own. The DOWNLOADED and PENDING labels are gone.
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ test('the three panes are there and the item text lands in the bottom one', asyn
|
|||||||
|
|
||||||
// Only the downloaded one gets a player, and max_new_per_check is 1, so find it by
|
// Only the downloaded one gets a player, and max_new_per_check is 1, so find it by
|
||||||
// its chip rather than assuming which episode the daemon happened to fetch.
|
// its chip rather than assuming which episode the daemon happened to fetch.
|
||||||
const downloaded = page.locator('.ep', { hasText: 'downloaded' }).first();
|
const downloaded = page.locator('.ep', { has: page.locator('[title="Downloaded"]') }).first();
|
||||||
await downloaded.click();
|
await downloaded.click();
|
||||||
await expect(page.locator('#files audio')).toBeVisible();
|
await expect(page.locator('#files audio')).toBeVisible();
|
||||||
await expect(page.locator('#files .encbox [title="Save to this computer"]')).toBeVisible();
|
await expect(page.locator('#files .encbox [title="Save to this computer"]')).toBeVisible();
|
||||||
@@ -110,8 +110,9 @@ test('a downloaded file that is not audio gets no player', async ({ page }) => {
|
|||||||
|
|
||||||
await expect(page.locator('#detail .dt')).toHaveText('An Article');
|
await expect(page.locator('#detail .dt')).toHaveText('An Article');
|
||||||
await expect(page.locator('#files audio')).toHaveCount(0);
|
await expect(page.locator('#files audio')).toHaveCount(0);
|
||||||
await expect(page.locator('#files .encbox')).toContainText('image');
|
// What it is and that it is here, as icons with the words in their tooltips.
|
||||||
await expect(page.locator('#files .encbox')).toContainText('downloaded');
|
await expect(page.locator('#files .encbox [title="image"]')).toBeVisible();
|
||||||
|
await expect(page.locator('#files .encbox [title="Downloaded"]')).toBeVisible();
|
||||||
// Still offered as a file, just not as an episode: viewable and keepable.
|
// Still offered as a file, just not as an episode: viewable and keepable.
|
||||||
await expect(page.locator('#files [title="Save to this computer"]')).toBeVisible();
|
await expect(page.locator('#files [title="Save to this computer"]')).toBeVisible();
|
||||||
const view = page.locator('#files a[title="View in a new tab"]');
|
const view = page.locator('#files a[title="View in a new tab"]');
|
||||||
@@ -130,7 +131,7 @@ test('an item with several enclosures lists them all', async ({ page }) => {
|
|||||||
await row.click();
|
await row.click();
|
||||||
// The Files pane lists every one: the audio and the image.
|
// The Files pane lists every one: the audio and the image.
|
||||||
await expect(page.locator('#files .encbox')).toHaveCount(2);
|
await expect(page.locator('#files .encbox')).toHaveCount(2);
|
||||||
await expect(page.locator('#files .encbox').nth(1)).toContainText('image');
|
await expect(page.locator('#files .encbox').nth(1).locator('[title="image"]')).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('the filter tabs change what is listed', async ({ page }) => {
|
test('the filter tabs change what is listed', async ({ page }) => {
|
||||||
@@ -673,7 +674,7 @@ test('a deleted file looks as if it was never downloaded', async ({ page }) => {
|
|||||||
await page.locator('#files button[data-a="del"]').click();
|
await page.locator('#files button[data-a="del"]').click();
|
||||||
|
|
||||||
// No "reaped", no chip at all: just the way to get it again.
|
// No "reaped", no chip at all: just the way to get it again.
|
||||||
await expect(row).not.toContainText('downloaded');
|
await expect(row.locator('[title="Downloaded"]')).toHaveCount(0);
|
||||||
await expect(row).not.toContainText(/reaped/i);
|
await expect(row).not.toContainText(/reaped/i);
|
||||||
await row.click();
|
await row.click();
|
||||||
await expect(page.locator('#files')).not.toContainText(/reaped/i);
|
await expect(page.locator('#files')).not.toContainText(/reaped/i);
|
||||||
|
|||||||
166
web/index.html
166
web/index.html
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user