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.
Stack the change request target fields
b74cb029a397c46ecf418e64b5d9d4d47a7c4028 · Keenan Nemetz · 11d ago · parent d69be4df
Stack the change request target fields The base and head selects now sit on their own labelled rows, so long branch names are readable instead of being squeezed beside the arrow and update control. The current head and Update action share the row below.
server/web/static/vole.css +18−13
| @@ -1822,30 +1822,35 @@ article.comment.editing > .comment-snippet { display: none; } | |||
| 1822 | 1822 | .meta-list dt { color: var(--fg-faint); } | |
| 1823 | 1823 | .meta-list dd { margin: 0; min-width: 0; overflow-wrap: anywhere; } | |
| 1824 | 1824 | ||
| 1825 | /* The request target is one row: base, head, update. The selects carry the | ||
| 1826 | current values, so the sidebar needs no separate labels above them. */ | ||
| 1825 | /* The request target is two stacked fields, not one crowded row: the sidebar is | ||
| 1826 | narrow, so each branch name gets the full width and a visible label. */ | ||
| 1827 | 1827 | .request-target { margin: 2px 0 0; } | |
| 1828 | .request-target .target-row { | ||
| 1829 | display: grid; | ||
| 1830 | grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto; | ||
| 1831 | align-items: center; | ||
| 1832 | gap: 6px; | ||
| 1833 | } | ||
| 1828 | .target-fields { display: grid; gap: 8px; } | ||
| 1829 | .target-field { display: grid; gap: 3px; min-width: 0; } | ||
| 1830 | .target-label { color: var(--fg-muted); font-size: calc(12.1px * var(--font-scale)); } | ||
| 1834 | 1831 | .request-target select { | |
| 1835 | 1832 | min-width: 0; | |
| 1836 | 1833 | width: 100%; | |
| 1837 | min-height: 28px; | ||
| 1838 | padding: 3px 6px; | ||
| 1834 | min-height: 30px; | ||
| 1835 | padding: 4px 7px; | ||
| 1839 | 1836 | font-size: calc(13.2px * var(--font-scale)); | |
| 1840 | 1837 | } | |
| 1841 | .request-target button { | ||
| 1838 | .target-actions { | ||
| 1839 | display: flex; | ||
| 1840 | flex-wrap: wrap; | ||
| 1841 | align-items: center; | ||
| 1842 | gap: 6px 10px; | ||
| 1843 | margin-top: 8px; | ||
| 1844 | } | ||
| 1845 | .target-actions button { | ||
| 1842 | 1846 | display: inline-flex; | |
| 1843 | 1847 | align-items: center; | |
| 1844 | 1848 | justify-content: center; | |
| 1845 | 1849 | min-height: 28px; | |
| 1846 | padding: 3px 7px; | ||
| 1850 | margin-left: auto; | ||
| 1851 | padding: 3px 9px; | ||
| 1847 | 1852 | } | |
| 1848 | .request-target p { margin: 6px 0 0; font-size: calc(12.65px * var(--font-scale)); } | ||
| 1853 | .request-target p { margin: 0; font-size: calc(12.65px * var(--font-scale)); } | ||
| 1849 | 1854 | .target-summary { | |
| 1850 | 1855 | display: flex; | |
| 1851 | 1856 | flex-wrap: wrap; | |