From 192919628779156f9f8d25d9852dd0f38d1d77f2 Mon Sep 17 00:00:00 2001 From: Peter van Arkel Date: Thu, 21 May 2026 13:53:10 +0200 Subject: [PATCH] (ui) Group host detail actions by context Move host-level actions out of the page header and into the panels where operators expect them: configuration, connection preflight, and snapshot storage. This keeps the host control page calmer while preserving the same actions. Refs #26 --- .../templates/pobsync_backend/base.html | 10 +- .../pobsync_backend/host_detail.html | 104 +++++++++--------- 2 files changed, 58 insertions(+), 56 deletions(-) diff --git a/src/pobsync_backend/templates/pobsync_backend/base.html b/src/pobsync_backend/templates/pobsync_backend/base.html index 31b3ecd..8f70d1b 100644 --- a/src/pobsync_backend/templates/pobsync_backend/base.html +++ b/src/pobsync_backend/templates/pobsync_backend/base.html @@ -241,6 +241,13 @@ .stack { display: grid; gap: 5px; } .stack.spaced { margin-bottom: 14px; } .two-col { display: grid; gap: 18px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } + .panel-grid { + display: grid; + gap: 18px; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + margin-bottom: 18px; + } + .panel-grid .panel { margin-bottom: 0; } .actions { align-items: center; display: flex; @@ -676,7 +683,8 @@ display: grid; } .page-header .actions { justify-content: flex-start; } - .two-col { grid-template-columns: 1fr; } + .two-col, + .panel-grid { grid-template-columns: 1fr; } .dashboard-priority-grid { grid-template-columns: 1fr; } .host-control-grid { grid-template-columns: 1fr; } .schedule-row { grid-template-columns: 1fr; } diff --git a/src/pobsync_backend/templates/pobsync_backend/host_detail.html b/src/pobsync_backend/templates/pobsync_backend/host_detail.html index 899762b..1ffd285 100644 --- a/src/pobsync_backend/templates/pobsync_backend/host_detail.html +++ b/src/pobsync_backend/templates/pobsync_backend/host_detail.html @@ -9,27 +9,6 @@

{{ host.host }}

{{ host.address }} · {{ host.enabled|yesno:"enabled,disabled" }}
-
- Edit config -
- {% csrf_token %} - -
- Plan retention - Edit schedule -
- {% csrf_token %} - -
-
- {% csrf_token %} - -
-
- {% csrf_token %} - -
-
{% if retention_warning.has_warning %} @@ -144,7 +123,7 @@
-

Schedule Edit

+

Schedule Edit schedule

{% if schedule %}
Schedule expression{{ schedule.cron_expr }}
@@ -272,39 +251,7 @@ - {% if last_preflight %} -
-

Connection Preflight

-
-
Status: {% if last_preflight.ok %}ok{% else %}failed{% endif %}
-
Target: {{ last_preflight.target }}
-
Backup source: {{ last_preflight.source_root }}
-
Remote rsync: {{ last_preflight.rsync_binary }}
-
- - - - - - - - - - - {% for check in last_preflight.checks %} - - - - - - - {% endfor %} - -
StatusCheckMessageDetail
{% if check.ok %}ok{% else %}failed{% endif %}{{ check.name }}{{ check.message }}{{ check.detail }}
-
- {% endif %} - -
+

Configuration

@@ -316,9 +263,56 @@
+
+

Connection Preflight & SSH

+ {% if last_preflight %} +
+
+ Preflight + + + {% if last_preflight.ok %}ok{% else %}failed{% endif %} + + +
+
Target{{ last_preflight.target }}
+
Backup source{{ last_preflight.source_root }}
+
Remote rsync{{ last_preflight.rsync_binary }}
+
+ {% else %} +

No connection preflight recorded yet.

+ {% endif %} +
+
+ {% csrf_token %} + +
+
+ {% csrf_token %} + +
+
+ {% if last_preflight.checks %} +
+ {% for check in last_preflight.checks %} +
+ + {% if check.ok %}ok{% else %}failed{% endif %} + + + {{ check.name }} + {{ check.message }}{% if check.detail %} · {{ check.detail }}{% endif %} + +
+ {% endfor %} +
+ {% endif %} +
+

Snapshot Storage