Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Update the change page as live regions, not one sidebar swap

707dfd10f309461a77a4a8f73dcce74b07c91fd6 · Keenan Nemetz · 10d ago · parent 9f5efa3c

Update the change page as live regions, not one sidebar swap

The 20-second poll replaced the entire sidebar, so every new widget needed its own reason to opt out and live updates stopped while it was in use. The sidebar is now a set of regions: review status, changes, approvals, checks, and the combined result are data-only live regions returned with hx-swap-oob; the target picker, issue search, and composers are outside every polled swap. Approval and the other multi-region writes use the same out-of-band group, and the page action group refreshes from the write without replacing unrelated state.

server/web/static/vole.css +2−1

@@ -1395,6 +1395,7 @@ details[open] > summary .tree-chevron { transform: rotate(90deg); }
1395 1395 .request-issue form button:hover { color: var(--bad); }
1396 1396 .request-unlink { display: inline-grid; place-items: center; width: 22px; min-height: 22px; border-radius: var(--radius); }
1397 1397 .request-unlink:hover { background: var(--bg-hover); text-decoration: none; }
1398 #request-combined[hidden], #request-merge-note[hidden] { display: none; }
1398 1399 .request-issue-picker { position: relative; margin-top: 8px; }
1399 1400 .thread-side .request-issue-picker form { margin: 0; }
1400 1401 .request-issue-search input { width: 100%; font-size: calc(12.65px * var(--font-scale)); }
@@ -1697,7 +1698,7 @@ details[open] > summary .tree-chevron { transform: rotate(90deg); }
1697 1698 }
1698 1699 .thread-main { min-width: 0; }
1699 1700 .thread-side section { padding: 12px 0 14px; border-bottom: 1px solid var(--border); }
1700 .thread-side #request-sidebar > section:first-child { padding-top: 0; }
1701 .thread-side #request-sidebar > #request-review { padding-top: 0; }
1701 1702 .thread-side > section:last-child,
1702 1703 .thread-side #request-sidebar > section:last-child { border-bottom: 0; }
1703 1704 .thread-side h2 { margin: 0 0 8px; }