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.

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/templates/chrome.html +2−2

@@ -45,7 +45,7 @@
45 45 {{if .LoggedIn}}
46 46 <details class="account-menu">
47 47 <summary>
48 {{icon "user"}}<span class="account-name">{{.User}}</span>
48 {{template "avatar" (avatar .User)}}<span class="account-name">{{.User}}</span>
49 49 {{if .DevLogin}}<span class="label" title="Development sign-in">dev</span>{{end}}
50 50 <span class="account-caret">{{icon "chevron-right"}}</span>
51 51 </summary>
@@ -177,7 +177,7 @@
177 177 that leads to a 404. Use `who` instead where a link would be wrong: inside
178 178 another link, inside a button, in an <option>, or in an attribute. */}}
179 179 {{define "userlink"}}{{if .Known}}<a class="user" href="{{.Href}}">{{.Name}}</a>{{else}}{{.Name}}{{end}}{{end}}
180 {{define "avatar"}}{{if .Href}}<a class="avatar c{{.Tone}}" href="{{.Href}}" tabindex="-1" aria-hidden="true" data-avatar="{{.Name}}">{{.Initial}}</a>{{else}}<span class="avatar c{{.Tone}}" aria-hidden="true" data-avatar="{{.Name}}">{{.Initial}}</span>{{end}}{{end}}
180 {{define "avatar"}}{{if .Href}}<a class="avatar c{{.Tone}}" href="{{.Href}}" data-avatar="{{.Name}}"{{if .Label}} aria-label="{{.Label}}"{{else}} tabindex="-1" aria-hidden="true"{{end}}>{{.Initial}}</a>{{else}}<span class="avatar c{{.Tone}}" data-avatar="{{.Name}}"{{if .Label}} role="img" aria-label="{{.Label}}"{{else}} aria-hidden="true"{{end}}>{{.Initial}}</span>{{end}}{{end}}
181 181
182 182 {{/* The command palette's initial state and the rows HTMX swaps in. The dialog
183 183 shell above carries both, so they live beside the chrome that owns them. */}}