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.
Refresh the repository tab counts while the page is open
a2ec95616f4216c743cb1ae358ef8e9449ad8d1f · Keenan Nemetz · 9d ago · parent 0789f22e
Refresh the repository tab counts while the page is open
The header's open counts were only as fresh as the page load, so a reader
watching a repository had to reload to find out that an issue or a change had
been opened.
The tabs now poll /r/{name}/counts every 30s while the page is visible. The
response is the two badges as out-of-band updates, so the current tab, the
clone menu and anything the reader has typed stay where they are. A badge that
moves keeps one short ring, because a number changing elsewhere on the screen
is easy to miss. The endpoint answers 404 for a repository the viewer cannot
read, like every other page under /r/{name}.
server/web/static/vole.css +12
| @@ -589,6 +589,18 @@ img { max-width: 100%; } | |||
| 589 | 589 | .tabs .chip-count { margin-left: 0; } | |
| 590 | 590 | .tabs a.active .chip-count { color: var(--fg-muted); } | |
| 591 | 591 | ||
| 592 | /* A count that moved while the reader was looking elsewhere keeps one short | ||
| 593 | ring, so the change is noticed; the number itself is the answer. app.js adds | ||
| 594 | the class when a poll changes a badge and drops it when the animation ends. */ | ||
| 595 | .tabs .chip-count.count-changed { | ||
| 596 | border-radius: 999px; | ||
| 597 | animation: count-changed 1.8s ease-out; | ||
| 598 | } | ||
| 599 | @keyframes count-changed { | ||
| 600 | from { color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); } | ||
| 601 | to { box-shadow: 0 0 0 3px transparent; } | ||
| 602 | } | ||
| 603 | |||
| 592 | 604 | /* ---------- panels and tables ---------- */ | |
| 593 | 605 | ||
| 594 | 606 | .panel { | |