vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
Show a spinner while a form post is in flight
3a068983ae40271962428eff5e2568446b36299d · Keenan Nemetz · 11d ago · parent 628d4523
server/web/static/vole.css +18
| @@ -490,6 +490,22 @@ button, .button { | |||
| 490 | 490 | } | |
| 491 | 491 | button:hover, .button:hover { filter: brightness(1.08); text-decoration: none; } | |
| 492 | 492 | button:disabled { opacity: 0.5; cursor: default; } | |
| 493 | |||
| 494 | /* A POST form that is still in flight keeps its button in place: it is disabled | ||
| 495 | and, after a short delay added by app.js, its icon becomes a spinner. */ | ||
| 496 | button[data-loading] { cursor: progress; } | ||
| 497 | button.spinning > .icon { display: none; } | ||
| 498 | .spinner { | ||
| 499 | width: 14px; | ||
| 500 | height: 14px; | ||
| 501 | flex: 0 0 auto; | ||
| 502 | border: 2px solid currentColor; | ||
| 503 | border-right-color: transparent; | ||
| 504 | border-radius: 50%; | ||
| 505 | animation: spin 0.7s linear infinite; | ||
| 506 | } | ||
| 507 | @keyframes spin { to { transform: rotate(1turn); } } | ||
| 508 | |||
| 493 | 509 | .button.secondary, button.secondary { | |
| 494 | 510 | background: var(--bg-raised); | |
| 495 | 511 | color: var(--fg); | |
| @@ -2263,6 +2279,8 @@ textarea:focus-visible { | |||
| 2263 | 2279 | ||
| 2264 | 2280 | @media (prefers-reduced-motion: reduce) { | |
| 2265 | 2281 | *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; } | |
| 2282 | /* The ring still marks the waiting button, but it does not turn. */ | ||
| 2283 | .spinner { animation: none; } | ||
| 2266 | 2284 | } | |
| 2267 | 2285 | ||
| 2268 | 2286 | @media (max-width: 720px) { | |