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.
Give the issue list the same status shape as the change list
6813339b80d1e54e171e110f115ace68bba608a9 · Keenan Nemetz · 4d ago · parent 5899ae25
Give the issue list the same status shape as the change list The two lists sat side by side with different status treatments: changes had an icon and a sentence, issues had an uppercase pill. The issue list now uses the same markup and class, so the shared style is called row-status rather than pointing at one of the pages that happens to use it. Closed issues keep a check rather than the change list's cross: closed is where an issue ends, not where a change was dropped. The page headers keep the state pill, as they do on both detail pages, so those two still agree.
server/web/static/vole.css +13−11
| @@ -1864,9 +1864,10 @@ details[open] > summary .tree-chevron { transform: rotate(90deg); } | |||
| 1864 | 1864 | color: var(--fg-faint); | |
| 1865 | 1865 | } | |
| 1866 | 1866 | ||
| 1867 | /* The one word a change list says about where a change is. The icon carries the | ||
| 1868 | colour, the label the meaning, and the title attribute the reason. */ | ||
| 1869 | .change-status { | ||
| 1867 | /* The one word a list says about where a row is: a change's waiting state, or an | ||
| 1868 | issue's open/closed. The icon carries the colour, the label the meaning, and, | ||
| 1869 | where there is one, the title attribute the reason. */ | ||
| 1870 | .row-status { | ||
| 1870 | 1871 | display: inline-flex; | |
| 1871 | 1872 | align-items: center; | |
| 1872 | 1873 | gap: 5px; | |
| @@ -1874,14 +1875,15 @@ details[open] > summary .tree-chevron { transform: rotate(90deg); } | |||
| 1874 | 1875 | color: var(--fg-muted); | |
| 1875 | 1876 | white-space: nowrap; | |
| 1876 | 1877 | } | |
| 1877 | .change-status .icon { width: 13px; height: 13px; flex: 0 0 auto; } | ||
| 1878 | .change-status.merged { color: var(--merged); } | ||
| 1879 | .change-status.ready { color: var(--good); } | ||
| 1880 | .change-status.failed, | ||
| 1881 | .change-status.conflict { color: var(--bad); } | ||
| 1882 | .change-status.waiting, | ||
| 1883 | .change-status.review { color: var(--warn); } | ||
| 1884 | .change-status.closed { color: var(--fg-faint); } | ||
| 1878 | .row-status .icon { width: 13px; height: 13px; flex: 0 0 auto; } | ||
| 1879 | .row-status.open, | ||
| 1880 | .row-status.ready { color: var(--good); } | ||
| 1881 | .row-status.merged { color: var(--merged); } | ||
| 1882 | .row-status.failed, | ||
| 1883 | .row-status.conflict { color: var(--bad); } | ||
| 1884 | .row-status.waiting, | ||
| 1885 | .row-status.review { color: var(--warn); } | ||
| 1886 | .row-status.closed { color: var(--fg-faint); } | ||
| 1885 | 1887 | ||
| 1886 | 1888 | /* A search snippet is the sentence the query matched, with the matched words | |
| 1887 | 1889 | marked. It sits under the row title, quieter than the title and smaller than | |