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.

Move Clone and Site into the repository header

816cc543d34ab52df01c62cfd8878ae70327a21f · Keenan Nemetz · 11d ago · parent a196e404

Move Clone and Site into the repository header

The repository header now carries the controls that act on the repository as a whole. Clone appears once beside the name on every tab, with a copy button for the HTTPS URL and one for the SSH command. Site joins it only when a site would answer: pages are enabled, the repository is public, and its pages branch exists.

The per-tab Clone popovers and the Overview/Code Site buttons are gone, so a tab's page header holds only that tab's own actions. Copy feedback now restores innerHTML, keeping the icon on an icon-only button and surviving a repeated click.

server/web/static/app.js +10−2

@@ -27,9 +27,17 @@ const copyText = (value, done) => {
27 27 if (!value) return;
28 28 event.preventDefault();
29 29 copyText(value, () => {
30 const original = button.textContent;
30 // innerHTML, not textContent: a copy button may carry an icon, and
31 // restoring textContent would drop it. The original markup is kept on the
32 // element so a second copy before the label resets cannot capture
33 // "Copied" as the label to restore.
34 let original = button.dataset.copyLabel;
35 if (original === undefined) {
36 original = button.innerHTML;
37 button.dataset.copyLabel = original;
38 }
31 39 button.textContent = 'Copied';
32 setTimeout(() => { button.textContent = original; }, 1200);
40 setTimeout(() => { button.innerHTML = original; }, 1200);
33 41 });
34 42 });
35 43