fix: review round 1 — row press after a rename, related reset, dead items on removal, honest Prev/Next

- A press that begins while a field in the row is edited only ends the editing (rowOpen latches it
  at pointerdown); the card layout's row press is now tested.
- A related video reset in the player forgets the session's stored position.
- Removing the playing video passes over known-dead items and steps the way it went.
- Prev/Next off only because of dead items stay focusable and say why (HU/EN).
- The docked bar's scroller leaves room for focus rings.
- A focus-opened About card is not closed by its own scroll into view.
- EN "Clear watch progress" for the video reset, distinct from a page's "Reset view".
- The signed-out title read goes to the page yt-dlp read; the retitle writes are conditional.
- Tests: the cap of three errors, the bar's own Fullscreen, the group glyph, the backfill's reads.
This commit is contained in:
2026-11-01 05:36:59 +01:00
parent 245c0a2019
commit c910cf2f20
25 changed files with 411 additions and 63 deletions
+21
View File
@@ -10,6 +10,27 @@ const v = (id: string): Video => ({ id }) as Video;
const ids = (q: Video[]) => q.map((x) => x.id);
describe("afterRemoval", () => {
it("passes over a follower known dead, on the way it went", () => {
const q = [v("a"), v("b"), v("c"), v("d")];
const next = afterRemoval(q, 1, "b", new Set(["c"]));
expect(next).toMatchObject({ playingId: "d", way: 1 });
});
it("goes back over the dead ones when nothing playable followed", () => {
const q = [v("a"), v("b"), v("c")];
expect(afterRemoval(q, 2, "c", new Set(["b"]))).toMatchObject({ playingId: "a", way: -1 });
// The last one going, nothing dead: the one before it, and that is a step back.
expect(afterRemoval(q, 2, "c")).toMatchObject({ playingId: "b", way: -1 });
});
it("with none left that can play, takes the follower all the same", () => {
const q = [v("a"), v("b"), v("c")];
expect(afterRemoval(q, 0, "a", new Set(["b", "c"]))).toMatchObject({
playingId: "b",
way: 1,
});
});
it("plays the item that followed the one you removed", () => {
const q = [v("a"), v("b"), v("c")];
const next = afterRemoval(q, 1, "b");