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.
Edit issue and change details in place
802e0e52533746522b3e65b953e5cc0141aa70b9 · Keenan Nemetz · 4d ago · parent 90f1ab59
Edit issue and change details in place Put the title pencil beside the heading and the description menu on its card, matching the comment editor. Each control saves only its own field: the title response is the heading and the description response is the card, so an open draft in the other field is not replaced. The standalone /edit page stays as the fallback. Prefilled edit fields size themselves to their content and remain vertically resizable. Prose copied from a menu is query-escaped in the attribute, so untrusted markdown in an issue or comment cannot appear verbatim in the page.
server/web/request_view.go +6−1
| @@ -179,7 +179,11 @@ type requestSidebarView struct { | |||
| 179 | 179 | // one poll can update several places without replacing a form or a picker. | |
| 180 | 180 | Live bool | |
| 181 | 181 | ContributorCI *requestCI | |
| 182 | Error string | ||
| 182 | // Details is the in-place edit state. A full page leaves it zero; an HTMX | ||
| 183 | // edit response fills it so the title and description come back in the mode | ||
| 184 | // the reader left them in. | ||
| 185 | Details detailsEdit | ||
| 186 | Error string | ||
| 183 | 187 | } | |
| 184 | 188 | ||
| 185 | 189 | // withLanding returns the same sidebar with the landing facts a full page or a | |
| @@ -650,6 +654,7 @@ func (w *Web) renderRequestPage(rw http.ResponseWriter, r *http.Request, errMsg | |||
| 650 | 654 | comments := w.requestComments(m, req) | |
| 651 | 655 | sidebar := w.requestSidebar(r, m, req, "", errMsg). | |
| 652 | 656 | withLanding(w.landingFrom(m, req, w.reviewDiff(m, req))) | |
| 657 | sidebar.Details.Inline = true | ||
| 653 | 658 | if r.URL.Query().Get("merging") == "1" { | |
| 654 | 659 | sidebar.Notice = "Merging when the combined result passes. Use Cancel merge to stop waiting." | |
| 655 | 660 | } | |