Log viewer: the caret does not collapse an event; clicking the row should toggle it #348

Open
opened 2026-09-29 11:34:51 +02:00 by clawbot · 1 comment
Collaborator

sneak, 2026-09-29 in chat (verbatim):

the expansion caret on the log viewer doesn't collapse the event. clicking anything in that row (such as the content type or uuid) should also expand/collapse it.

Definition of done, on the event log viewer:

  • Clicking the caret on an expanded event collapses it; clicking it again expands it.
  • Clicking anywhere else in the event's row (the content type, the UUID, any cell) toggles it the same way.
  • Selecting text in the row (e.g. to copy the UUID) does not toggle it; links or buttons inside the row keep their own action and do not toggle it.
  • The row can be toggled from the keyboard too (focusable, Enter or Space), and the caret shows the current state.
  • A browser test (headless Chrome) clicks the caret and a non-caret cell and checks that both expand and collapse.

Model: opus-5-5

sneak, 2026-09-29 in chat (verbatim): > the expansion caret on the log viewer doesn't collapse the event. clicking anything in that row (such as the content type or uuid) should also expand/collapse it. Definition of done, on the event log viewer: - Clicking the caret on an expanded event collapses it; clicking it again expands it. - Clicking anywhere else in the event's row (the content type, the UUID, any cell) toggles it the same way. - Selecting text in the row (e.g. to copy the UUID) does not toggle it; links or buttons inside the row keep their own action and do not toggle it. - The row can be toggled from the keyboard too (focusable, Enter or Space), and the caret shows the current state. - A browser test (headless Chrome) clicks the caret and a non-caret cell and checks that both expand and collapse. Model: opus-5-5
clawbot self-assigned this 2026-09-29 11:34:51 +02:00
Author
Collaborator

Plan. The event log viewer is templates/source_logs.html, with its handler in internal/handlers/source_management.go. The page uses Alpine.js.

  • Toggle: one Alpine state per row. The caret and the row both toggle it, and the caret reflects it (for example with aria-expanded).
  • Text selection: a click that ends a text selection does not toggle; check window.getSelection() for a non-empty selection.
  • Links and buttons: a click on a link or button inside the row does its own action and does not toggle.
  • Keyboard: the row is focusable, and Enter or Space toggles it.
  • Styling: static/css/tailwind.css is the compiled Tailwind stylesheet and is committed. A class the page uses must already be in that file. If it is not, prefer a small plain rule in static/css/style.css. Regenerate tailwind.css only through make css, and disclose it on the PR if you do (the unpinned tool is #231).
  • Browser checks: headless Chrome in a container, with a small data set built in batches (the standing RAM cap), the container named with webhooker and your role, removed afterwards. Publish no screenshots or logs on the tracker.
  • #349 changes the same view and runs after this lands.

Model: opus-5-5

Plan. The event log viewer is `templates/source_logs.html`, with its handler in `internal/handlers/source_management.go`. The page uses Alpine.js. - **Toggle:** one Alpine state per row. The caret and the row both toggle it, and the caret reflects it (for example with `aria-expanded`). - **Text selection:** a click that ends a text selection does not toggle; check `window.getSelection()` for a non-empty selection. - **Links and buttons:** a click on a link or button inside the row does its own action and does not toggle. - **Keyboard:** the row is focusable, and Enter or Space toggles it. - **Styling:** `static/css/tailwind.css` is the compiled Tailwind stylesheet and is committed. A class the page uses must already be in that file. If it is not, prefer a small plain rule in `static/css/style.css`. Regenerate `tailwind.css` only through `make css`, and disclose it on the PR if you do (the unpinned tool is https://git.eeqj.de/sneak/webhooker/issues/231). - **Browser checks:** headless Chrome in a container, with a small data set built in batches (the standing RAM cap), the container named with `webhooker` and your role, removed afterwards. Publish no screenshots or logs on the tracker. - https://git.eeqj.de/sneak/webhooker/issues/349 changes the same view and runs after this lands. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/webhooker#348