panel-redesign: links into Domain settings carry no anchor
Follows the design commit before it: the domain page's menu entries
Report address / Rate limit / Export, the DMARC record's note and the
delete page's "Export the domain" lead to /outbound/domains/{id}/settings
as it opens, not scrolled to a box.
go test -count=1 ./internal/web/...: ok
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -196,7 +196,7 @@ type DMARCRecordInput struct {
|
||||
// delivery, so the standing note says how to tighten it.
|
||||
func DMARCRecord(in DMARCRecordInput) Record {
|
||||
r := Record{Name: "DMARC", Host: in.Host, Type: "TXT", Value: in.Value,
|
||||
Note: Rich("Report address: ", Link(in.SettingsHref+"#reports", in.Source))}
|
||||
Note: Rich("Report address: ", Link(in.SettingsHref, in.Source))}
|
||||
reports := Rich("reports")
|
||||
if in.ReportsHref != "" {
|
||||
reports = Rich(Link(in.ReportsHref, "reports"))
|
||||
@@ -497,9 +497,9 @@ func (p *OutDomain) Menu() SideMenu {
|
||||
}
|
||||
settings := DomainHref(p.id) + "/settings"
|
||||
rare := MenuGroup{Label: "Rarely changed", Items: []MenuItem{
|
||||
{Label: "Report address", Icon: "ti-mail-forward", Href: settings + "#reports"},
|
||||
{Label: "Rate limit", Icon: "ti-gauge", Href: settings + "#limit", Tag: p.limitTag},
|
||||
{Label: "Export", Icon: "ti-file-export", Href: settings + "#export"},
|
||||
{Label: "Report address", Icon: "ti-mail-forward", Href: settings},
|
||||
{Label: "Rate limit", Icon: "ti-gauge", Href: settings, Tag: p.limitTag},
|
||||
{Label: "Export", Icon: "ti-file-export", Href: settings},
|
||||
}}
|
||||
if p.canDelete {
|
||||
rare.Items = append(rare.Items, MenuItem{Label: "Delete domain", Icon: "ti-trash", Href: DomainHref(p.id) + "/delete", Danger: true})
|
||||
@@ -748,7 +748,7 @@ func NewOutDomainDelete(m Meta, id int64, name string, logins []string) *OutDoma
|
||||
Confirm: "Delete " + name,
|
||||
KeepHref: href,
|
||||
Moving: Box{Icon: "ti-file-export", Title: "Moving it instead?"},
|
||||
MovingText: Rich(Link(href+"/settings#export", "Export the domain"),
|
||||
MovingText: Rich(Link(href+"/settings", "Export the domain"),
|
||||
" first. The file carries the key and the application passwords, so the new instance needs no DNS change."),
|
||||
}
|
||||
if n := appsPhrase(len(logins)); n != "" {
|
||||
|
||||
@@ -99,7 +99,7 @@ func TestOutDomainRecordsSayWhatDNSHolds(t *testing.T) {
|
||||
`sp2026._domainkey.example.org`, `<textarea class="textarea" rows="3" readonly>`,
|
||||
`<h3>SPF</h3>`, `<span class="tag is-danger is-light">mismatch</span>`, `v=spf1 ip4:203.0.113.25 ~all`,
|
||||
`In DNS now`, `v=spf1 include:_spf.google.com ~all`, `Shallow check: <code>include:</code> is not followed.`,
|
||||
`<h3>DMARC</h3>`, `Report address: <a href="/outbound/domains/1/settings#reports">example.org@dmarc.mail.example.org</a>`,
|
||||
`<h3>DMARC</h3>`, `Report address: <a href="/outbound/domains/1/settings">example.org@dmarc.mail.example.org</a>`,
|
||||
`<code>p=none</code> does not affect delivery.`, `<a href="/outbound/dmarc/domains/1">reports</a>`,
|
||||
)
|
||||
if got := strings.Count(out, `In DNS now`); got != 1 {
|
||||
@@ -180,7 +180,7 @@ func TestOutDomainMenuFollowsTheViewer(t *testing.T) {
|
||||
out := renderSignedIn(t, "out-domain", outDomainFixture())
|
||||
pageHas(t, "Domain", out,
|
||||
`href="#dns"`, `href="#apps"`, `href="#connection"`, `href="/outbound/log?domain=example.org"`, `href="/outbound/dmarc/domains/1"`,
|
||||
`href="/outbound/domains/1/settings#reports"`, `href="/outbound/domains/1/settings#limit"`, `href="/outbound/domains/1/settings#export"`,
|
||||
`href="/outbound/domains/1/settings"`, `href="/outbound/domains/1/settings"`, `href="/outbound/domains/1/settings"`,
|
||||
`href="/outbound/domains/1/delete"`, `id="dns"`, `id="apps"`, `id="connection"`,
|
||||
`class="sp-help" href="/help#dns"`, `class="sp-help" href="/help#apps"`,
|
||||
)
|
||||
@@ -437,7 +437,7 @@ func TestOutDomainDeleteNamesWhatGoesWithIt(t *testing.T) {
|
||||
`reload OpenDKIM so the domain is no longer signed.`, `Inbound domains are not touched.`,
|
||||
`<form method="post" action="/outbound/domains/1/delete">`, `class="button is-danger"`, `Delete example.org</button>`,
|
||||
`href="/outbound/domains/1">Keep it</a>`,
|
||||
`<h2>Moving it instead?</h2>`, `<a href="/outbound/domains/1/settings#export">Export the domain</a>`,
|
||||
`<h2>Moving it instead?</h2>`, `<a href="/outbound/domains/1/settings">Export the domain</a>`,
|
||||
)
|
||||
|
||||
// No applications: nothing to say about them.
|
||||
|
||||
Reference in New Issue
Block a user