package main
import (
"bytes"
"context"
"fmt"
"git.dev.alexdunmow.com/block/core/templates"
)
// NoirEmailWrapper wraps body content in a pure black 600px canvas with a
// Tenor Sans masthead and a mono caption strip above the footer.
func NoirEmailWrapper(body string, emailCtx templates.EmailContext) string {
var buf bytes.Buffer
_ = noirEmailTemplate(emailCtx, body).Render(context.Background(), &buf)
return buf.String()
}
// noirEmailTemplate renders the inline-styled HTML email wrapper.
templ noirEmailTemplate(emailCtx templates.EmailContext, body string) {
{ emailCtx.SiteSettings.SiteName }
if emailCtx.PreviewText != "" {
{ emailCtx.PreviewText }
}
|
if emailCtx.SiteSettings.SiteName != "" {
{ emailCtx.SiteSettings.SiteName }
}
|
if emailCtx.SiteSettings.LogoURL != "" {
|
}
|
@templ.Raw(body)
|
|
if emailCtx.SiteSettings.SiteName != "" {
{ "© " + emailCtx.SiteSettings.SiteName }
}
|
if emailCtx.UnsubscribeURL != "" {
Unsubscribe
}
|
|
|
if emailCtx.SiteSettings.SiteURL != "" {
{ emailCtx.SiteSettings.SiteURL }
}
|
|
}
// noirEmailBg returns the canvas colour (pure black per spec) with a fallback
// derived from the EmailContext.
func noirEmailBg(emailCtx templates.EmailContext) string {
if emailCtx.Colors.Background != "" {
return emailCtx.Colors.Background
}
return "#000000"
}
func noirEmailCard(emailCtx templates.EmailContext) string {
if emailCtx.Colors.Card != "" {
return emailCtx.Colors.Card
}
return "#0a0a0a"
}
func noirEmailFg(emailCtx templates.EmailContext) string {
if emailCtx.Colors.Foreground != "" {
return emailCtx.Colors.Foreground
}
return "#f5f5f5"
}
func noirEmailMutedFg(emailCtx templates.EmailContext) string {
if emailCtx.Colors.MutedForeground != "" {
return emailCtx.Colors.MutedForeground
}
return "#8c8c8c"
}
func noirEmailBorder(emailCtx templates.EmailContext) string {
if emailCtx.Colors.Border != "" {
return emailCtx.Colors.Border
}
return "#1f1f1f"
}