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.

Make the change request sidebar compact and live

d3dcf54d8b7eb81fcc2b944296329098db7f14f4 · Keenan Nemetz · 11d ago · parent 7137f372

Make the change request sidebar compact and live

Move the review and approval explanations into tooltips, show only the state in each section, and use the overview's run rows for checks. The aside now polls a new fragment endpoint so approvals, checks and landing facts appear without a reload.

server/issues_changes_test.go +10

@@ -392,6 +392,16 @@ func TestRequestSidebarAndDiscussionUpdateWithHtmx(t *testing.T) {
392 392 t.Fatalf("approval response is not the expected sidebar (%d):\n%s", resp.StatusCode, body)
393 393 }
394 394
395 // The page's poll replaces the whole aside: the landing block and the
396 // sidebar come back together, without a page shell.
397 resp, body = f.htmxGet(t, "/r/"+f.repo+"/requests/"+id+"/aside", writerCookie)
398 if resp.StatusCode != http.StatusOK || strings.Contains(body, "<!doctype html>") ||
399 !strings.Contains(body, `id="request-aside"`) || !strings.Contains(body, `id="request-sidebar"`) ||
400 !strings.Contains(body, `hx-trigger="every 20s`) || !strings.Contains(body, `class="help"`) ||
401 !strings.Contains(body, "What would land") || !strings.Contains(body, "1 of 1 required approval(s).") {
402 t.Fatalf("aside poll is not the expected fragment (%d):\n%s", resp.StatusCode, body)
403 }
404
395 405 // Posting a comment replaces only the discussion fragment.
396 406 resp, body = f.htmxPost(t, "/r/"+f.repo+"/requests/"+id+"/comments", ownerCookie, url.Values{
397 407 "csrf": {ownerSess.CSRF}, "body": {"Review note over HTMX.\n"},