pipekit/pipekit/web/templates/modules_index.html
Paul Trowbridge 583dc16c9b web: tighten module list column widths and fix form input overflow
- Size all table columns to fit content (em-based) rather than loose percentages
- Add white-space:nowrap to groups header and last-run cells
- Sticky topbar and panel header so New Module button stays visible while scrolling
- Scope min-width:0 to label.field inputs so they don't blow past two-col grid borders

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-06-04 10:52:23 -04:00

74 lines
3.5 KiB
HTML

{% extends "base.html" %}
{% set section = "modules" %}
{% block title %}Modules — Pipekit{% endblock %}
{% block content %}
<div class="panel">
<header>
Modules
<span class="subtitle">{{ total }} total · grouped by source connection</span>
<span style="margin-left:auto">
<a class="btn" href="/wizard">New module…</a>
</span>
</header>
<div class="body tight">
{% if grouped %}
{% for conn_name, driver_label, modules in grouped %}
<div class="group-head">{{ conn_name }} <span style="opacity:.7">({{ driver_label }})</span></div>
<table class="grid">
<thead>
<tr>
<th style="width:12em">name</th>
<th style="width:7em">strategy</th>
<th style="width:14em">dest</th>
<th style="width:13em">groups</th>
<th style="width:11em;white-space:nowrap">last run</th>
<th style="width:8em">status</th>
<th style="width:6em">rows</th>
<th style="width:12em"></th>
</tr>
</thead>
<tbody>
{% for m in modules %}
<tr>
<td><a href="/modules/{{ m.id }}"><strong>{{ m.name }}</strong></a></td>
<td class="mono">{{ m.merge_strategy }}</td>
<td class="mono">{{ m.dest_table }}</td>
<td>
{% for g in m.groups %}
<a href="/groups/{{ g.group_id }}" class="tag">{{ g.group_name }}</a>
{% endfor %}
</td>
<td class="mono" style="white-space:nowrap">{{ m.last_run_at | localtime }}</td>
{% with module=m %}{% include "_module_status_pill.html" %}{% endwith %}
<td class="mono">{{ m.last_row_count if m.last_row_count is not none else "—" }}</td>
<td style="text-align:right">
<form class="inline"
hx-post="/modules/{{ m.id }}/run"
hx-target="#module-status-{{ m.id }}"
hx-swap="outerHTML">
<button type="submit">Run</button>
</form>
<form class="inline"
hx-post="/modules/{{ m.id }}/run"
hx-target="#module-status-{{ m.id }}"
hx-swap="outerHTML">
<input type="hidden" name="dry_run" value="1">
<button type="submit" class="ghost">Dry run</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
{% else %}
<div class="empty">
No modules yet.<br>
<a class="btn" href="/wizard" style="margin-top:0.7rem; display:inline-block">Create one</a>
</div>
{% endif %}
</div>
</div>
{% endblock %}