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.
Show people as portraits in the lists and the bar
0fbeca853d0174030973a4019bd54071cafa77dd · Keenan Nemetz · 7d ago · parent aceaabbf
Show people as portraits in the lists and the bar The account menu now carries the signed-in account's mark instead of a generic user icon, and the issue and change tables show the person rather than the name: the author is one portrait, and an issue's assignees are the portraits beside it. The issue's assignee labels moved out of the title cell, so a row is title plus people. A table cell is the one place where the portrait is not decoration — there is no printed name beside it — so those calls use avatarOnly: it keeps the profile link and the aria-label, and does not hide itself from a screen reader the way an avatar beside a name does. The contributor list already used the shared avatar template, so it picked up the new marks with the rest; checked in a browser rather than assumed.
server/web/static/vole.css +6
| @@ -335,6 +335,9 @@ img { max-width: 100%; } | |||
| 335 | 335 | .account-menu > summary:hover { background: var(--bg-hover); color: var(--fg); } | |
| 336 | 336 | .account-menu[open] > summary { background: var(--bg-raised); color: var(--fg); } | |
| 337 | 337 | .account-name { max-width: 12rem; overflow: hidden; text-overflow: ellipsis; } | |
| 338 | /* The account menu shows the same mark as the rest of the page, a little smaller | ||
| 339 | than the default so the bar keeps its height. */ | ||
| 340 | .account-menu > summary .avatar { width: 18px; height: 18px; } | ||
| 338 | 341 | .account-caret { display: inline-flex; color: var(--fg-faint); } | |
| 339 | 342 | .account-caret .icon { width: 12px; height: 12px; transform: rotate(90deg); transition: transform 0.12s ease; } | |
| 340 | 343 | .account-menu[open] .account-caret .icon { transform: rotate(-90deg); } | |
| @@ -1880,6 +1883,9 @@ details[open] > summary .tree-chevron { transform: rotate(90deg); } | |||
| 1880 | 1883 | color: var(--fg-faint); | |
| 1881 | 1884 | } | |
| 1882 | 1885 | .row-meta .label { margin-left: 0; } | |
| 1886 | /* A column of people rather than a column of names: the avatars sit on one line | ||
| 1887 | and wrap only when a list runs past the cell. */ | ||
| 1888 | .avatar-stack { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; } | ||
| 1883 | 1889 | ||
| 1884 | 1890 | /* A search snippet is the sentence the query matched, with the matched words | |
| 1885 | 1891 | marked. It sits under the row title, quieter than the title and smaller than | |