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.

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 {