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 · 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/static/vole.css +34−4

@@ -2078,13 +2078,43 @@ article.comment.deleted {
2078 2078 .comment-menu-list form { margin: 0; }
2079 2079 .comment-menu-list .menu-danger { color: var(--bad); }
2080 2080 .comment-menu-list .menu-danger:hover { background: var(--bad-soft); }
2081 .comment-edit-form { padding: 10px 14px 12px; }
2082 .comment-edit-form[hidden] { display: none; }
2083 .comment-edit-form textarea { min-height: 6rem; max-width: none; }
2084 .comment-edit-form .form-actions { margin-top: 8px; }
2081 .comment-edit-form, .details-edit-form { padding: 10px 14px 12px; }
2082 .comment-edit-form[hidden], .details-edit-form[hidden] { display: none; }
2083 .comment-edit-form textarea, .details-edit-form textarea { min-height: 7rem; max-width: none; }
2084 .comment-edit-form .form-actions, .details-edit-form .form-actions { margin-top: 8px; }
2085 2085 article.comment.editing > .comment-body,
2086 2086 article.comment.editing > .comment-snippet { display: none; }
2087 2087
2088 /* The heading is one row: the number stays put, the title sits beside it, and
2089 the pencil opens a title-only form that takes the title's place. */
2090 .details-title { display: flex; align-items: baseline; flex-wrap: wrap; gap: 7px; margin: 0 0 4px; }
2091 .details-title .page-num { flex: 0 0 auto; margin-right: 0; }
2092 .details-title-view { min-width: 0; margin: 0; }
2093 .details-title-view[hidden], .title-edit-form[hidden], .title-edit-toggle[hidden] { display: none; }
2094 .title-edit-toggle {
2095 display: inline-grid;
2096 place-items: center;
2097 flex: 0 0 auto;
2098 width: 22px;
2099 height: 22px;
2100 border-radius: var(--radius);
2101 color: var(--fg-faint);
2102 }
2103 .title-edit-toggle:hover { background: var(--bg-hover); color: var(--accent); text-decoration: none; }
2104 .title-edit-toggle .icon { width: 14px; height: 14px; }
2105 .title-edit-form { display: flex; align-items: center; flex: 1 1 18rem; gap: 6px; min-width: 0; }
2106 .title-edit-form .details-title-input { flex: 1 1 auto; min-width: 8rem; }
2107 .title-edit-form button { flex: 0 0 auto; }
2108 .details-title-input {
2109 width: 100%;
2110 max-width: none;
2111 font-family: var(--font);
2112 font-size: calc(19.8px * var(--font-scale));
2113 font-weight: 600;
2114 line-height: 1.35;
2115 letter-spacing: -0.005em;
2116 }
2117
2088 2118 /* A thread keeps its root visible and lets the replies fold away. */
2089 2119 .thread-replies { margin: 0 0 10px 26px; }
2090 2120 .thread-replies > summary {