conductor

CI task system
git clone git://git.finwo.net/app/conductor
Log | Files | Refs | README | LICENSE

commit d10a890139b04cb925828f405f8fad565ef7f3ca
parent 30ee5697965dc7b0355f15803effda18bd14f2b1
Author: finwo <finwo@pm.me>
Date:   Mon, 28 Sep 2026 20:17:47 +0200

Space out row actions and give them a button of their own

Diffstat:
Mweb/src/global.css | 11+++++++++++
Mweb/src/screen/project.tsx | 28+++++++++++++++-------------
Mweb/src/screen/users.tsx | 26++++++++++++++------------
3 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/web/src/global.css b/web/src/global.css @@ -165,6 +165,17 @@ button.link { text-decoration: underline; } +button.quiet { + padding: 0.3rem 0.7rem; + background: none; + color: var(--fg); + border: 1px solid var(--line); +} + +button.quiet:hover { border-color: var(--accent); color: var(--accent); } + +.rowactions { display: flex; flex-wrap: wrap; gap: 0.4rem; } + .actions { display: flex; align-items: center; gap: 0.75rem; margin: 1rem 0; } .pager { display: flex; align-items: center; gap: 1rem; margin-top: 1rem; color: var(--muted); } diff --git a/web/src/screen/project.tsx b/web/src/screen/project.tsx @@ -208,19 +208,21 @@ export const Project: m.Component = { {vnode.state.shown[v.name] ? vnode.state.values[v.name] : '***'} </td> <td> - <button class="link" onclick={() => toggleValue(v.name)}> - {vnode.state.shown[v.name] ? 'hide' : 'view'} - </button> - <button class="link" onclick={() => copyValue(v.name)}>copy</button> - <button - class="link" - onclick={async () => { - await del(`/projects/${id}/variables/${encodeURIComponent(v.name)}`); - await vnode.state.load(); - }} - > - remove - </button> + <div class="rowactions"> + <button class="quiet" onclick={() => toggleValue(v.name)}> + {vnode.state.shown[v.name] ? 'hide' : 'view'} + </button> + <button class="quiet" onclick={() => copyValue(v.name)}>copy</button> + <button + class="quiet" + onclick={async () => { + await del(`/projects/${id}/variables/${encodeURIComponent(v.name)}`); + await vnode.state.load(); + }} + > + remove + </button> + </div> </td> </tr> ))} diff --git a/web/src/screen/users.tsx b/web/src/screen/users.tsx @@ -114,17 +114,19 @@ export const Users: m.Component = { <td><When at={u.last_login_at} /></td> <td> {admin && u.id !== session.user?.id - ? [ - <button class="link" onclick={() => change(u.id, { disabled: !u.disabled })}> - {u.disabled ? 'enable' : 'disable'} - </button>, - <button - class="link" - onclick={async () => { await del(`/users/${u.id}`); await vnode.state.load(); }} - > - remove - </button>, - ] + ? ( + <div class="rowactions"> + <button class="quiet" onclick={() => change(u.id, { disabled: !u.disabled })}> + {u.disabled ? 'enable' : 'disable'} + </button> + <button + class="quiet" + onclick={async () => { await del(`/users/${u.id}`); await vnode.state.load(); }} + > + remove + </button> + </div> + ) : null} </td> </tr> @@ -185,7 +187,7 @@ export const Sessions: m.Component = { <td><When at={s.expires_at} /></td> <td> <button - class="link" + class="quiet" onclick={async () => { await del(`/sessions/${s.id}`); await vnode.state.load(); }} > revoke