diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a4aaaf..96fab89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,12 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version stays open as before, with *In DNS now* where it differs. A `
` block, no script; *Re-check DNS* draws the page again, so a record that has just turned right comes back folded. +- **Server › Settings: *Save settings* sits under the fields it saves** + (settings-save-row): the form is the left column - Log retention, + Notifications, the button - and the right column holds what is not a + field, Notification mail and the read-only Sending rate limits. Before, + the button stood under both columns, after a long gap whenever the + records of the server's own name were open. ## [2.8.0] - 2026-10-16 diff --git a/docs/roadmap.md b/docs/roadmap.md index 96bced1..183cec6 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -39,7 +39,7 @@ in `git log` and [CHANGELOG.md](../CHANGELOG.md). | password-reset | Password reset by e-mail | agreed (2026-10-13) | — | — | | local-time | The panel shows time, and counts its days, in a time zone other than UTC | agreed (2026-10-13; design questions open) | — | — | | notification-mail-recheck | The Notification mail records on Server › Settings can be checked again from where they are shown | agreed (2026-10-15) | — | — | -| settings-save-row | Server › Settings: the Save button no longer stands alone under a long right column | agreed (2026-10-15) | — | — | +| settings-save-row | Server › Settings: the Save button no longer stands alone under a long right column | done 2026-10-16, unreleased | — | — | | dns-record-collapse | A DNS record that is right is shown folded: its name and its tag, the values on request | done 2026-10-16, unreleased | — | — | | go-milter-upstream | Prepare an issue and a PR for go-milter: its header map outlives a message and is unbounded | prepared 2026-10-16, the owner posts | — | [third_party/go-milter/PATCHES.md](../third_party/go-milter/PATCHES.md) | | own-mta-builds | Analysis: build Postfix and OpenDKIM ourselves, patched, instead of Debian's packages | analysed 2026-10-15: no own builds; three rows proposed instead | — | [own-mta-builds-2026-10-15.md](own-mta-builds-2026-10-15.md) | @@ -887,6 +887,15 @@ form's columns, or the button nearer its fields. Decide with the mockup, after dns-record-collapse, on a page whose records are missing as well as on one whose records are right. +**Done (2026-10-16):** shown both layouts in both states, the owner chose +"Вариант 2: форма в левой колонке, кнопка под своими полями." Folding alone +closed the gap only while the records are right. The form is now the left +column - 01 Log retention, 02 Notifications, *Save settings* - and the +right column, outside it, holds 03 Notification mail and 04 Sending rate +limits. It also leaves room for +[notification-mail-recheck](#notification-mail-recheck): a *Re-check DNS* +form in the Notification mail box is no longer a form inside a form. + ## go-milter-upstream **Problem (owner, 2026-10-16):** the panel builds go-milter v0.4.1 patched diff --git a/internal/web/view/account.go b/internal/web/view/account.go index c5a867d..b3ed47e 100644 --- a/internal/web/view/account.go +++ b/internal/web/view/account.go @@ -95,15 +95,15 @@ func NewSettings(m Meta, retention, level1 string) *Settings { }, Retention: Box{No: "01", Title: "Log retention", Help: topicLink(HelpSettings, "How long rows are kept")}, RetentionDays: retention, - RateLimits: Box{No: "02", Title: "Sending rate limits", ID: "rate-limits", End: Plain("Read-only"), Help: topicLink(HelpLimits, "Levels 1 and 2")}, + RateLimits: Box{No: "04", Title: "Sending rate limits", ID: "rate-limits", End: Plain("Read-only"), Help: topicLink(HelpLimits, "Levels 1 and 2")}, RateFacts: []Fact{ {Label: "Level 1 · per client IP", Value: Plain(level1), Big: true, Note: Rich("Set in ", Code(".env"), "; restart to change. Nothing below may exceed it.")}, {Label: "Level 2 · domain, application", Value: Rich("Set on each ", Link("/outbound/domains", "domain"), " and on each application of a domain.")}, }, - Notifications: Box{No: "03", Title: "Notifications", ID: "notifications", Help: topicLink(HelpNotifications, "What is sent and when")}, - Mail: Box{No: "04", Title: "Notification mail", ID: "notification-mail", End: Plain("DNS records of the server's own name"), + Notifications: Box{No: "02", Title: "Notifications", ID: "notifications", Help: topicLink(HelpNotifications, "What is sent and when")}, + Mail: Box{No: "03", Title: "Notification mail", ID: "notification-mail", End: Plain("DNS records of the server's own name"), Help: topicLink(HelpNotifications, "What the panel sends and what makes it arrive")}, } } diff --git a/internal/web/view/templates/settings.html b/internal/web/view/templates/settings.html index 2f395e1..44fe4c8 100644 --- a/internal/web/view/templates/settings.html +++ b/internal/web/view/templates/settings.html @@ -1,15 +1,16 @@ {{/* Server > Settings (mockup settings.html): what holds for the whole instance. - One form, one Save button; the rate limits are read-only facts, and the - records of the server's own name are the ones notifications are signed and - authorised with. A user's own name, e-mail, password and DMARC address are on - Account (account.html). */}} + One form, in the left column, with its Save button under its fields; the + right column holds what is not a field - the records of the server's own + name, the ones notifications are signed and authorised with, and the + read-only rate limits. A user's own name, e-mail, password and DMARC + address are on Account (account.html). */}} {{define "content"}} {{template "page_head" .Head}} {{if .Flash}}{{template "flash" .Flash}}{{end}} -
-
-
+
+
+ {{template "box_open" .Retention}} {{template "body_open"}}
@@ -22,26 +23,26 @@ {{template "body_close"}} {{template "box_close"}} - {{template "box_open" .RateLimits}} - {{template "body_open"}} - {{template "facts" .RateFacts}} - {{template "body_close"}} - {{template "box_close"}} -
- -
{{template "box_open" .Notifications}} {{template "body_open"}}

{{template "inline" .NotifyNote}}

{{template "body_close"}} {{template "box_close"}} - - {{template "box_open" .Mail}} - {{range .MailRecords}}{{template "dns_record" .}} - {{end}}{{template "box_close"}} -
+
+
-
- + +
+ {{template "box_open" .Mail}} + {{range .MailRecords}}{{template "dns_record" .}} + {{end}}{{template "box_close"}} + + {{template "box_open" .RateLimits}} + {{template "body_open"}} + {{template "facts" .RateFacts}} + {{template "body_close"}} + {{template "box_close"}} +
+
{{end}}