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.

Edit issue and change details in place

802e0e52533746522b3e65b953e5cc0141aa70b9 · Keenan Nemetz · 5d 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/templates/components.html +2−2

@@ -87,7 +87,7 @@
87 87 <button type="button" class="comment-menu-toggle" data-comment-menu-toggle aria-haspopup="menu" aria-expanded="false" aria-label="Comment actions">&#8943;</button>
88 88 <div class="comment-menu-list" data-comment-menu-list role="menu" hidden>
89 89 {{if .CanReply}}<button type="button" role="menuitem" data-reply-to="{{.ID}}" data-reply-author="{{who .Author}}">Reply</button>{{end}}
90 <button type="button" role="menuitem" data-copy="{{.Source}}">Copy text</button>
90 <button type="button" role="menuitem" data-copy-query="{{urlquery .Source}}">Copy text</button>
91 91 <button type="button" role="menuitem" data-copy-link="{{.ID}}">Copy link</button>
92 92 {{if .CanEdit}}<button type="button" role="menuitem" data-comment-edit>Edit</button>{{end}}
93 93 {{if .CanDelete}}
@@ -115,7 +115,7 @@
115 115 {{if .CanEdit}}
116 116 <form class="comment-edit-form" data-comment-edit-form hidden method="post" action="{{.EditURL}}" hx-post="{{.EditURL}}" hx-target="{{.Target}}" hx-swap="outerHTML" hx-disabled-elt="find button[type='submit']">
117 117 <input type="hidden" name="csrf" value="{{.CSRF}}">
118 <textarea name="body" required>{{.Source}}</textarea>
118 <textarea name="body" required data-autosize>{{.Source}}</textarea>
119 119 <div class="form-actions">
120 120 <button class="secondary" type="button" data-comment-edit-cancel>Cancel</button>
121 121 <button type="submit">Save</button>