diff --git a/src/migration/migrations/2024-06-18T022536Z_RemoveDarkTheme.go b/src/migration/migrations/2024-06-18T022536Z_RemoveDarkTheme.go
new file mode 100644
index 00000000..8494bd8c
--- /dev/null
+++ b/src/migration/migrations/2024-06-18T022536Z_RemoveDarkTheme.go
@@ -0,0 +1,47 @@
+package migrations
+
+import (
+ "context"
+ "time"
+
+ "git.handmade.network/hmn/hmn/src/migration/types"
+ "github.com/jackc/pgx/v5"
+)
+
+func init() {
+ registerMigration(RemoveDarkTheme{})
+}
+
+type RemoveDarkTheme struct{}
+
+func (m RemoveDarkTheme) Version() types.MigrationVersion {
+ return types.MigrationVersion(time.Date(2024, 6, 18, 2, 25, 36, 0, time.UTC))
+}
+
+func (m RemoveDarkTheme) Name() string {
+ return "RemoveDarkTheme"
+}
+
+func (m RemoveDarkTheme) Description() string {
+ return "Remove the darktheme field from users"
+}
+
+func (m RemoveDarkTheme) Up(ctx context.Context, tx pgx.Tx) error {
+ _, err := tx.Exec(ctx,
+ `
+ ALTER TABLE hmn_user
+ DROP COLUMN darktheme;
+ `,
+ )
+ return err
+}
+
+func (m RemoveDarkTheme) Down(ctx context.Context, tx pgx.Tx) error {
+ _, err := tx.Exec(ctx,
+ `
+ ALTER TABLE hmn_user
+ ADD COLUMN darktheme BOOLEAN NOT NULL DEFAULT FALSE;
+ `,
+ )
+ return err
+}
diff --git a/src/models/user.go b/src/models/user.go
index d838324f..d971b0c1 100644
--- a/src/models/user.go
+++ b/src/models/user.go
@@ -38,8 +38,7 @@ type User struct {
Signature string `db:"signature"`
AvatarAssetID *uuid.UUID `db:"avatar_asset_id"`
- DarkTheme bool `db:"darktheme"`
- Timezone string `db:"timezone"`
+ Timezone string `db:"timezone"`
ShowEmail bool `db:"showemail"`
diff --git a/src/rawdata/bgdark.png b/src/rawdata/bgdark.png
deleted file mode 100644
index 52fe9688..00000000
Binary files a/src/rawdata/bgdark.png and /dev/null differ
diff --git a/src/rawdata/bglight.png b/src/rawdata/bglight.png
deleted file mode 100644
index 4cd84a9d..00000000
Binary files a/src/rawdata/bglight.png and /dev/null differ
diff --git a/src/templates/mapping.go b/src/templates/mapping.go
index f8c22b3f..390061ef 100644
--- a/src/templates/mapping.go
+++ b/src/templates/mapping.go
@@ -14,7 +14,7 @@ import (
"git.handmade.network/hmn/hmn/src/models"
)
-func PostToTemplate(p *models.Post, author *models.User, currentTheme string) Post {
+func PostToTemplate(p *models.Post, author *models.User) Post {
return Post{
ID: p.ID,
@@ -23,7 +23,7 @@ func PostToTemplate(p *models.Post, author *models.User, currentTheme string) Po
Preview: p.Preview,
ReadOnly: p.ReadOnly,
- Author: UserToTemplate(author, currentTheme),
+ Author: UserToTemplate(author),
// No content. A lot of the time we don't have this handy and don't need it. See AddContentVersion.
PostDate: p.PostDate,
}
@@ -34,7 +34,7 @@ func (p *Post) AddContentVersion(ver models.PostVersion, editor *models.User) {
p.IP = maybeIp(ver.IP)
if editor != nil {
- editorTmpl := UserToTemplate(editor, "theme not required here")
+ editorTmpl := UserToTemplate(editor)
p.Editor = &editorTmpl
p.EditDate = ver.Date
p.EditReason = ver.EditReason
@@ -61,15 +61,13 @@ var LifecycleBadgeStrings = map[models.ProjectLifecycle]string{
models.ProjectLifecycleLTS: "Complete",
}
-func ProjectLogoUrl(p *models.Project, lightAsset *models.Asset, darkAsset *models.Asset, theme string) string {
- if theme == "dark" {
- if darkAsset != nil {
- return hmnurl.BuildS3Asset(darkAsset.S3Key)
- }
- } else {
- if lightAsset != nil {
- return hmnurl.BuildS3Asset(lightAsset.S3Key)
- }
+// TODO(redesign): Remove one or the other of these from the database entirely.
+func ProjectLogoUrl(p *models.Project, lightAsset *models.Asset, darkAsset *models.Asset) string {
+ if lightAsset != nil {
+ return hmnurl.BuildS3Asset(lightAsset.S3Key)
+ }
+ if darkAsset != nil {
+ return hmnurl.BuildS3Asset(darkAsset.S3Key)
}
return ""
}
@@ -100,11 +98,11 @@ func ProjectToTemplate(
}
}
-func ProjectAndStuffToTemplate(p *hmndata.ProjectAndStuff, url string, theme string) Project {
+func ProjectAndStuffToTemplate(p *hmndata.ProjectAndStuff, url string) Project {
res := ProjectToTemplate(&p.Project, url)
- res.Logo = ProjectLogoUrl(&p.Project, p.LogoLightAsset, p.LogoDarkAsset, theme)
+ res.Logo = ProjectLogoUrl(&p.Project, p.LogoLightAsset, p.LogoDarkAsset)
for _, o := range p.Owners {
- res.Owners = append(res.Owners, UserToTemplate(o, theme))
+ res.Owners = append(res.Owners, UserToTemplate(o))
}
if p.HeaderImage != nil {
res.HeaderImage = hmnurl.BuildS3Asset(p.HeaderImage.S3Key)
@@ -133,11 +131,10 @@ func ProjectToProjectSettings(
owners []*models.User,
tag string,
lightLogo, darkLogo, headerImage *models.Asset,
- currentTheme string,
) ProjectSettings {
ownerUsers := make([]User, 0, len(owners))
for _, owner := range owners {
- ownerUsers = append(ownerUsers, UserToTemplate(owner, currentTheme))
+ ownerUsers = append(ownerUsers, UserToTemplate(owner))
}
return ProjectSettings{
Name: p.Name,
@@ -187,28 +184,23 @@ func ThreadToTemplate(t *models.Thread) Thread {
}
}
-func UserAvatarDefaultUrl(currentTheme string) string {
- return hmnurl.BuildTheme("empty-avatar.svg", currentTheme, true)
+func UserAvatarDefaultUrl(theme string) string {
+ return hmnurl.BuildTheme("empty-avatar.svg", theme, true)
}
-func UserAvatarUrl(u *models.User, currentTheme string) string {
- if currentTheme == "" {
- currentTheme = "light"
- }
+func UserAvatarUrl(u *models.User) string {
avatar := ""
if u != nil && u.AvatarAsset != nil {
avatar = hmnurl.BuildS3Asset(u.AvatarAsset.S3Key)
- } else {
- avatar = UserAvatarDefaultUrl(currentTheme)
}
return avatar
}
-func UserToTemplate(u *models.User, currentTheme string) User {
+func UserToTemplate(u *models.User) User {
if u == nil {
return User{
Name: "Deleted user",
- AvatarUrl: UserAvatarUrl(nil, currentTheme),
+ AvatarUrl: UserAvatarUrl(nil),
}
}
@@ -231,10 +223,9 @@ func UserToTemplate(u *models.User, currentTheme string) User {
Signature: u.Signature,
DateJoined: u.DateJoined,
ProfileUrl: hmnurl.BuildUserProfile(u.Username),
- AvatarUrl: UserAvatarUrl(u, currentTheme),
+ AvatarUrl: UserAvatarUrl(u),
- DarkTheme: u.DarkTheme,
- Timezone: u.Timezone,
+ Timezone: u.Timezone,
DiscordSaveShowcase: u.DiscordSaveShowcase,
DiscordDeleteSnippetOnMessageDelete: u.DiscordDeleteSnippetOnMessageDelete,
@@ -246,7 +237,7 @@ func UserToTemplate(u *models.User, currentTheme string) User {
var UnknownUser = User{
Name: "Unknown User",
- AvatarUrl: UserAvatarUrl(nil, ""),
+ AvatarUrl: UserAvatarUrl(nil),
}
// An online site/service for which we recognize the link
diff --git a/src/templates/src/fishbowl.html b/src/templates/src/fishbowl.html
index d04aecff..63e171a6 100644
--- a/src/templates/src/fishbowl.html
+++ b/src/templates/src/fishbowl.html
@@ -1,7 +1,9 @@
{{ template "base.html" . }}
{{ define "extrahead" }}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
Unknown User
+
Unknown Time
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unknown description
+
+
+
+
+
{{ svg "close" }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/templates/src/layouts/base.html b/src/templates/src/layouts/base.html
index 1e492e38..57cb2ce7 100644
--- a/src/templates/src/layouts/base.html
+++ b/src/templates/src/layouts/base.html
@@ -21,26 +21,6 @@
-
- {{/* TODO: These are the base64 encodings of bglight.png and bgdark.png. Rather than manually putting the encoding here, it would be nice to automatically calculate it when the server starts up and pass it in. */}}
- {{ $bglight := "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAEGGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjcyIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNzIiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iNzIiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjcyIgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSI5Ni4wIgogICB0aWZmOllSZXNvbHV0aW9uPSI5Ni4wIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMy0xMVQyMToyMjozMC0wNjowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMy0xMVQyMToyMjozMC0wNjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjcuMSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0wMy0xMVQyMToyMjozMC0wNjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+NRFFrAAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZG/S0JRFMc/amGUYZBDQ4NENVmUgdTSoJQF1WAG/Vr05Y9A7fGeEdIatAoFUUu/hvoLag2ag6AogmgLmotaSl7n+QQl8l7OOZ/7vfcc7j0X7NGMktUbBiCby2uRcNA7v7Dodb7iwCXmwRNTdHV6djxK3fH1gM2Md31mrfrn/h0tKwldAVuT8KiiannhCeGpjbxq8q6wR0nHVoTPhX2aXFD43tTjFr+ZnLL4x2QtGgmBvU3Ym6rheA0raS0rLC+nO5tZVyr3MV/iSuTmZiV2iXWiEyFMEC+TjBEiwCAj4gP04adfVtTJHyjnz7AmuYp4lQIaq6RIk8cn6rpUT0hMip6QmaFg9v9vX/XkkN+q7gpC44thfPSAcwdKRcP4PjaM0gk4nuEqV81fO4LhT9GLVa37ENxbcHFd1eJ7cLkNHU9qTIuVJYeYPZmE9zNoXYD2W2hesnpW2ef0EaKb8lU3sH8AvXLevfwLEU5nv19tQRgAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJOSURBVHic7ZtRksMgCIaTPOcI3v9MPYBHyHv2obOZTlIVFeSHyltnm38QCehXdo0xnkulHcex7Pue/OxJZ20JUE7Um86W+wKHM1w6IYRVw59sBqHtagihO+Nr/Xlk0GeE930nRTzlBIfOZ+bEGE9KJnH68wjQ/eHWxXHp3IPSGqRWf64A5R6uWRyXTi4oNUHq9ecKUOlh6uK4dEpBoQap159H0UM7m9wLc2uhbvVn1qCCJXdjtvi3JQ+K1AiXdpOqU/oONXNKOrX+dO2K1q6O1Nl6DnD34tnrzP9nJJ3NYmcZqfP1oJizUnBqDnC5RdUcTCV1tm9/TBklOJRMoiyK4s8InfX1ep3zNUvrzBpU0Olu095bfRdRpATHOpk0RRQ1ri3wRFGbTMLf5rWpACxRRCGTsEQRhUzCE0VtMjlrUMHMEEUtMtlNFLkJnrROLZnsuiagZQcUUUQngapEEa1DQRFFKySQS6eKKFoigVw6zUTRwuuhRhTRFwVFFJFbNIdO8qCoNROIppPNIO+8mWKPDNKeCUTTeQRIex4HTecKEMpMIJrOFSCUmUA0nUcR/qVfTSk6swYVLJkds8W/LXlQ1JoJ7NXhnpl0RRQlst4NUZSamXRxm5fsvOaJovTMpGmiOGJm0g1RlHrNZg0q+OOOKHK3evH/eh5JJiVmJofMKFq+tojNKHohk2LzQV6oAPuMojcyyT6j6I1Mis0oeiGTswYVTHxG0XKLX5YBM4pWyaRLoiih44YoSum4uM1L6pgnitI6poniCB03RFFK5w8yFS9yPecAUAAAAABJRU5ErkJggg==" }}
- {{ $bgdark := "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAEGGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjcyIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNzIiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iNzIiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjcyIgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSI5Ni4wIgogICB0aWZmOllSZXNvbHV0aW9uPSI5Ni4wIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjcuMSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+87tjqAAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZG/S0JRFMc/amGUYZBDQ4NENVmUgdTSoJQF1WAG/Vr05Y9A7fGeEdIatAoFUUu/hvoLag2ag6AogmgLmotaSl7n+QQl8l7OOZ/7vfcc7j0X7NGMktUbBiCby2uRcNA7v7Dodb7iwCXmwRNTdHV6djxK3fH1gM2Md31mrfrn/h0tKwldAVuT8KiiannhCeGpjbxq8q6wR0nHVoTPhX2aXFD43tTjFr+ZnLL4x2QtGgmBvU3Ym6rheA0raS0rLC+nO5tZVyr3MV/iSuTmZiV2iXWiEyFMEC+TjBEiwCAj4gP04adfVtTJHyjnz7AmuYp4lQIaq6RIk8cn6rpUT0hMip6QmaFg9v9vX/XkkN+q7gpC44thfPSAcwdKRcP4PjaM0gk4nuEqV81fO4LhT9GLVa37ENxbcHFd1eJ7cLkNHU9qTIuVJYeYPZmE9zNoXYD2W2hesnpW2ef0EaKb8lU3sH8AvXLevfwLEU5nv19tQRgAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJSSURBVHic7ZvBbsMgDIaTHKbtnNO0vf/bcW7VS3uoFlWhgAEb//bwrVrzyxjHhq/euu/7fam0z4+v5Xq7JD970llbApQT9aaz5b7A4QyXTghh1fAnm0FouxpC6M74Wn+iDHqN8PV2IUU85QSHzmvm7Pt+p2QSpz9RgM4Pty6OS+cclNYgtfpzBCj3cM3iuHRyQakJUq8/R4BKD1MXx6VTCgo1SL3+REUP7WxyLsythbrVn1mDCpbcjdnin5Y8KFIjXNpNqk7pO9TMKenU+tO1K1q7OlJn6znAnYtnrzN/n5F0NoudZaTO24NizkrBqTnA5RZVczCV1Nne/TFllOBQMomyKIo/I3TWn+/f+3zN0jqzBhV0utu091bfRRQpwbFOJk0RRY1rCzxR1CaT8Ld5bSoASxRRyCQsUUQhk/BEUZtMzhpUMDNEUYtMdhNFboInrVNLJruuCWjZAUUU0UmgKlFE61BQRNEKCeTSqSKKlkggl04zUbTweqgRRfRFQRFF5BbNoZM8KGrNBKLpZDPIO2+mWJRB2jOBaDpRgLTncdB0jgChzASi6RwBQpkJRNOJivB/+tWUojNrUMGS2TFb/NOSB0WtmcBeHe6ZSVdEUSLr3RBFqZlJF7d5yc5rnihKz0yaJoojZibdEEWp12zWoII/7ogid6sX/6/nkWRSYmZyyIyi5WuL2IyiFzIpNh/khQqwzyh6I5PsM4reyKTYjKIXMjlrUMHEZxQtt/hlGTCjaJVMuiSKEjpuiKKUjovbvKSOeaIorWOaKI7QcUMUpXQe+31Pc6xeN0AAAAAASUVORK5CYII=" }}
-
diff --git a/src/templates/src/layouts/jam_2023_visibility_base.html b/src/templates/src/layouts/jam_2023_visibility_base.html
index 01c42002..d742aab6 100644
--- a/src/templates/src/layouts/jam_2023_visibility_base.html
+++ b/src/templates/src/layouts/jam_2023_visibility_base.html
@@ -37,14 +37,15 @@
/* Copy-paste from project.css yay */
{{ $c := hex2color "C8217E" }}
- {{ $themeDim := eq .Theme "dark" | ternary (lightness 0.35 $c) (lightness 0.75 $c) | color2css }}
- {{ $themeDimmer := eq .Theme "dark" | ternary (lightness 0.3 $c) (lightness 0.8 $c) | color2css }}
- {{ $themeDimmest := eq .Theme "dark" | ternary (lightness 0.2 $c) (lightness 0.85 $c) | color2css }}
+ {{/* In the 2024 redesign, these were all forced to use the dark theme variants. */}}
+ {{ $themeDim := lightness 0.35 $c | color2css }}
+ {{ $themeDimmer := lightness 0.3 $c | color2css }}
+ {{ $themeDimmest := lightness 0.2 $c | color2css }}
- {{ $themeDark := eq .Theme "dark" | ternary (lightness 0.30 $c) (lightness 0.35 $c) | color2css }}
+ {{ $themeDark := lightness 0.30 $c | color2css }}
- {{ $linkColor := eq .Theme "dark" | ternary (lightness 0.55 $c) (lightness 0.35 $c) | color2css }}
- {{ $linkHoverColor := eq .Theme "dark" | ternary (lightness 0.65 $c) (lightness 0.45 $c) | color2css }}
+ {{ $linkColor := lightness 0.55 $c | color2css }}
+ {{ $linkHoverColor := lightness 0.65 $c | color2css }}
:root {
--content-background: #f8f8f8;
diff --git a/src/templates/src/layouts/wheeljam_2022_base.html b/src/templates/src/layouts/wheeljam_2022_base.html
index b55c2549..42ca4beb 100644
--- a/src/templates/src/layouts/wheeljam_2022_base.html
+++ b/src/templates/src/layouts/wheeljam_2022_base.html
@@ -37,14 +37,15 @@
/* Copy-paste from project.css yay */
{{ $c := hex2color "346ba6" }}
- {{ $themeDim := eq .Theme "dark" | ternary (lightness 0.35 $c) (lightness 0.75 $c) | color2css }}
- {{ $themeDimmer := eq .Theme "dark" | ternary (lightness 0.3 $c) (lightness 0.8 $c) | color2css }}
- {{ $themeDimmest := eq .Theme "dark" | ternary (lightness 0.2 $c) (lightness 0.85 $c) | color2css }}
+ {{/* In the 2024 redesign, these were all forced to use the dark theme variants. */}}
+ {{ $themeDim := lightness 0.35 $c | color2css }}
+ {{ $themeDimmer := lightness 0.3 $c | color2css }}
+ {{ $themeDimmest := lightness 0.2 $c | color2css }}
- {{ $themeDark := eq .Theme "dark" | ternary (lightness 0.30 $c) (lightness 0.35 $c) | color2css }}
+ {{ $themeDark := lightness 0.30 $c | color2css }}
- {{ $linkColor := eq .Theme "dark" | ternary (lightness 0.55 $c) (lightness 0.35 $c) | color2css }}
- {{ $linkHoverColor := eq .Theme "dark" | ternary (lightness 0.65 $c) (lightness 0.45 $c) | color2css }}
+ {{ $linkColor := lightness 0.55 $c | color2css }}
+ {{ $linkHoverColor := lightness 0.65 $c | color2css }}
:root {
--content-background: #f8f8f8;
diff --git a/src/templates/src/layouts/wheeljam_2023_base.html b/src/templates/src/layouts/wheeljam_2023_base.html
index 38665806..38274787 100644
--- a/src/templates/src/layouts/wheeljam_2023_base.html
+++ b/src/templates/src/layouts/wheeljam_2023_base.html
@@ -38,14 +38,15 @@
{{/* {{ $c := hex2color "23CE76" }} */}}
{{ $c := hex2color "1DB768" }}{{/* modified for contrast reasons */}}
- {{ $themeDim := eq .Theme "dark" | ternary (lightness 0.35 $c) (lightness 0.75 $c) | color2css }}
- {{ $themeDimmer := eq .Theme "dark" | ternary (lightness 0.3 $c) (lightness 0.8 $c) | color2css }}
- {{ $themeDimmest := eq .Theme "dark" | ternary (lightness 0.2 $c) (lightness 0.85 $c) | color2css }}
+ {{/* In the 2024 redesign, these were all forced to use the dark theme variants. */}}
+ {{ $themeDim := lightness 0.35 $c | color2css }}
+ {{ $themeDimmer := lightness 0.3 $c | color2css }}
+ {{ $themeDimmest := lightness 0.2 $c | color2css }}
- {{ $themeDark := eq .Theme "dark" | ternary (lightness 0.30 $c) (lightness 0.35 $c) | color2css }}
+ {{ $themeDark := lightness 0.30 $c | color2css }}
- {{ $linkColor := eq .Theme "dark" | ternary (lightness 0.55 $c) (lightness 0.35 $c) | color2css }}
- {{ $linkHoverColor := eq .Theme "dark" | ternary (lightness 0.65 $c) (lightness 0.45 $c) | color2css }}
+ {{ $linkColor := lightness 0.55 $c | color2css }}
+ {{ $linkHoverColor := lightness 0.65 $c | color2css }}
:root {
--content-background: #f8f8f8;
diff --git a/src/templates/src/user_settings.html b/src/templates/src/user_settings.html
index e8deae12..f9c073f7 100644
--- a/src/templates/src/user_settings.html
+++ b/src/templates/src/user_settings.html
@@ -33,13 +33,6 @@
-
Avatar:
@@ -52,7 +45,6 @@
document.querySelector("#user_form"),
avatarMaxFileSize,
document.querySelector(".user_avatar"),
- {{ .DefaultAvatarUrl }}
);
diff --git a/src/templates/types.go b/src/templates/types.go
index badf4542..bc85aad0 100644
--- a/src/templates/types.go
+++ b/src/templates/types.go
@@ -10,7 +10,6 @@ type BaseData struct {
CanonicalLink string
OpenGraphItems []OpenGraphItem
BackgroundImage BackgroundImage
- Theme string
BodyClasses []string
Breadcrumbs []Breadcrumb
Notices []Notice
@@ -205,7 +204,6 @@ type User struct {
AvatarUrl string
ProfileUrl string
- DarkTheme bool
ShowEmail bool
Timezone string
diff --git a/src/website/admin.go b/src/website/admin.go
index 918350e8..0d7c2c81 100644
--- a/src/website/admin.go
+++ b/src/website/admin.go
@@ -83,7 +83,6 @@ func AdminAtomFeed(c *RequestContext) ResponseData {
&post.Author,
false,
true,
- c.Theme,
)
postItem.PostTypePrefix = fmt.Sprintf("ADMIN::UNAPPROVED: %s", postItem.PostTypePrefix)
@@ -177,7 +176,7 @@ func AdminApprovalQueue(c *RequestContext) ResponseData {
userData = unapprovedUsers[idx]
} else {
userData = &unapprovedUserData{
- User: templates.UserToTemplate(s.Owner, c.Theme),
+ User: templates.UserToTemplate(s.Owner),
UserLinks: make([]templates.Link, 0, 10),
}
unapprovedUsers = append(unapprovedUsers, userData)
@@ -187,7 +186,7 @@ func AdminApprovalQueue(c *RequestContext) ResponseData {
if s.Snippet.When.After(userData.Date) {
userData.Date = s.Snippet.When
}
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
timelineItem.OwnerAvatarUrl = ""
timelineItem.SmallInfo = true
userData.Timeline = append(userData.Timeline, timelineItem)
@@ -199,7 +198,7 @@ func AdminApprovalQueue(c *RequestContext) ResponseData {
userData = unapprovedUsers[idx]
} else {
userData = &unapprovedUserData{
- User: templates.UserToTemplate(&p.Author, c.Theme),
+ User: templates.UserToTemplate(&p.Author),
UserLinks: make([]templates.Link, 0, 10),
}
unapprovedUsers = append(unapprovedUsers, userData)
@@ -209,7 +208,7 @@ func AdminApprovalQueue(c *RequestContext) ResponseData {
if p.Post.PostDate.After(userData.Date) {
userData.Date = p.Post.PostDate
}
- timelineItem := PostToTimelineItem(hmndata.UrlContextForProject(&p.Project), lineageBuilder, &p.Post, &p.Thread, &p.Author, c.Theme)
+ timelineItem := PostToTimelineItem(hmndata.UrlContextForProject(&p.Project), lineageBuilder, &p.Post, &p.Thread, &p.Author)
timelineItem.OwnerAvatarUrl = ""
timelineItem.SmallInfo = true
timelineItem.Description = template.HTML(p.CurrentVersion.TextParsed)
@@ -222,7 +221,7 @@ func AdminApprovalQueue(c *RequestContext) ResponseData {
userData = unapprovedUsers[idx]
} else {
userData = &unapprovedUserData{
- User: templates.UserToTemplate(p.User, c.Theme),
+ User: templates.UserToTemplate(p.User),
UserLinks: make([]templates.Link, 0, 10),
}
unapprovedUsers = append(unapprovedUsers, userData)
@@ -237,7 +236,7 @@ func AdminApprovalQueue(c *RequestContext) ResponseData {
userData.Date = p.ProjectAndStuff.Project.DateCreated
}
userData.ProjectsWithLinks = append(userData.ProjectsWithLinks, projectWithLinks{
- Project: templates.ProjectAndStuffToTemplate(p.ProjectAndStuff, hmndata.UrlContextForProject(&p.ProjectAndStuff.Project).BuildHomepage(), c.Theme),
+ Project: templates.ProjectAndStuffToTemplate(p.ProjectAndStuff, hmndata.UrlContextForProject(&p.ProjectAndStuff.Project).BuildHomepage()),
Links: projectLinks,
})
}
diff --git a/src/website/base_data.go b/src/website/base_data.go
index c3f13168..4b5f1e38 100644
--- a/src/website/base_data.go
+++ b/src/website/base_data.go
@@ -24,7 +24,7 @@ func getBaseData(c *RequestContext, title string, breadcrumbs []templates.Breadc
var templateUser *templates.User
var templateSession *templates.Session
if c.CurrentUser != nil {
- u := templates.UserToTemplate(c.CurrentUser, c.Theme)
+ u := templates.UserToTemplate(c.CurrentUser)
s := templates.SessionToTemplate(c.CurrentSession)
templateUser = &u
templateSession = &s
@@ -44,7 +44,6 @@ func getBaseData(c *RequestContext, title string, breadcrumbs []templates.Breadc
}
baseData := templates.BaseData{
- Theme: c.Theme,
Title: title,
Breadcrumbs: breadcrumbs,
diff --git a/src/website/blogs.go b/src/website/blogs.go
index 9b18a39e..03695357 100644
--- a/src/website/blogs.go
+++ b/src/website/blogs.go
@@ -67,7 +67,7 @@ func BlogIndex(c *RequestContext) ResponseData {
entries = append(entries, blogIndexEntry{
Title: thread.Thread.Title,
Url: c.UrlContext.BuildBlogThread(thread.Thread.ID, thread.Thread.Title),
- Author: templates.UserToTemplate(thread.FirstPostAuthor, c.Theme),
+ Author: templates.UserToTemplate(thread.FirstPostAuthor),
Date: thread.FirstPost.PostDate,
Content: template.HTML(thread.FirstPostCurrentVersion.TextParsed),
})
@@ -140,12 +140,12 @@ func BlogThread(c *RequestContext) ResponseData {
var templatePosts []templates.Post
for _, p := range posts {
- post := templates.PostToTemplate(&p.Post, p.Author, c.Theme)
+ post := templates.PostToTemplate(&p.Post, p.Author)
post.AddContentVersion(p.CurrentVersion, p.Editor)
addBlogUrlsToPost(c.UrlContext, &post, &p.Thread, p.Post.ID)
if p.ReplyPost != nil {
- reply := templates.PostToTemplate(p.ReplyPost, p.ReplyAuthor, c.Theme)
+ reply := templates.PostToTemplate(p.ReplyPost, p.ReplyAuthor)
addBlogUrlsToPost(c.UrlContext, &reply, &p.Thread, p.Post.ID)
post.ReplyPost = &reply
}
@@ -403,7 +403,7 @@ func BlogPostReply(c *RequestContext) ResponseData {
BlogThreadBreadcrumbs(c.UrlContext, &post.Thread),
)
- replyPost := templates.PostToTemplate(&post.Post, post.Author, c.Theme)
+ replyPost := templates.PostToTemplate(&post.Post, post.Author)
replyPost.AddContentVersion(post.CurrentVersion, post.Editor)
editData := getEditorDataForNew(c.UrlContext, c.CurrentUser, baseData, &replyPost)
@@ -479,7 +479,7 @@ func BlogPostDelete(c *RequestContext) ResponseData {
BlogThreadBreadcrumbs(c.UrlContext, &post.Thread),
)
- templatePost := templates.PostToTemplate(&post.Post, post.Author, c.Theme)
+ templatePost := templates.PostToTemplate(&post.Post, post.Author)
templatePost.AddContentVersion(post.CurrentVersion, post.Editor)
type blogPostDeleteData struct {
diff --git a/src/website/common.go b/src/website/common.go
index b37914fb..7c954f0f 100644
--- a/src/website/common.go
+++ b/src/website/common.go
@@ -49,7 +49,7 @@ func loadCommonData(h Handler) Handler {
})
if err == nil {
c.CurrentProject = &dbProject.Project
- c.CurrentProjectLogoUrl = templates.ProjectLogoUrl(&dbProject.Project, dbProject.LogoLightAsset, dbProject.LogoDarkAsset, c.Theme)
+ c.CurrentProjectLogoUrl = templates.ProjectLogoUrl(&dbProject.Project, dbProject.LogoLightAsset, dbProject.LogoDarkAsset)
owners = dbProject.Owners
} else {
if errors.Is(err, db.NotFound) {
@@ -69,7 +69,7 @@ func loadCommonData(h Handler) Handler {
panic(oops.New(err, "failed to fetch HMN project"))
}
c.CurrentProject = &dbProject.Project
- c.CurrentProjectLogoUrl = templates.ProjectLogoUrl(&dbProject.Project, dbProject.LogoLightAsset, dbProject.LogoDarkAsset, c.Theme)
+ c.CurrentProjectLogoUrl = templates.ProjectLogoUrl(&dbProject.Project, dbProject.LogoLightAsset, dbProject.LogoDarkAsset)
}
if c.CurrentProject == nil {
@@ -80,11 +80,6 @@ func loadCommonData(h Handler) Handler {
c.UrlContext = hmndata.UrlContextForProject(c.CurrentProject)
}
-
- c.Theme = "light"
- if c.CurrentUser != nil && c.CurrentUser.DarkTheme {
- c.Theme = "dark"
- }
}
c.Perf.EndBlock()
diff --git a/src/website/feed.go b/src/website/feed.go
index 07186554..d4ab9203 100644
--- a/src/website/feed.go
+++ b/src/website/feed.go
@@ -168,7 +168,7 @@ func AtomFeed(c *RequestContext) ResponseData {
templateProject := templates.ProjectToTemplate(&p.Project, hmndata.UrlContextForProject(&p.Project).BuildHomepage())
templateProject.UUID = uuid.NewSHA1(uuid.NameSpaceURL, []byte(templateProject.Url)).URN()
for _, owner := range p.Owners {
- templateProject.Owners = append(templateProject.Owners, templates.UserToTemplate(owner, ""))
+ templateProject.Owners = append(templateProject.Owners, templates.UserToTemplate(owner))
}
feedData.Projects = append(feedData.Projects, templateProject)
@@ -216,7 +216,6 @@ func fetchAllPosts(c *RequestContext, offset int, limit int) ([]templates.PostLi
postAndStuff.Author,
postAndStuff.Unread,
true,
- c.Theme,
)
postItem.UUID = uuid.NewSHA1(uuid.NameSpaceURL, []byte(postItem.Url)).URN()
diff --git a/src/website/following.go b/src/website/following.go
index 7f7d5ca5..4d7ce870 100644
--- a/src/website/following.go
+++ b/src/website/following.go
@@ -10,7 +10,7 @@ import (
)
func FollowingTest(c *RequestContext) ResponseData {
- timelineItems, err := FetchFollowTimelineForUser(c, c.Conn, c.CurrentUser, c.Theme)
+ timelineItems, err := FetchFollowTimelineForUser(c, c.Conn, c.CurrentUser)
if err != nil {
return c.ErrorResponse(http.StatusInternalServerError, err)
}
diff --git a/src/website/forums.go b/src/website/forums.go
index 14904a15..1d46d285 100644
--- a/src/website/forums.go
+++ b/src/website/forums.go
@@ -124,9 +124,9 @@ func Forum(c *RequestContext) ResponseData {
return templates.ThreadListItem{
Title: row.Thread.Title,
Url: c.UrlContext.BuildForumThread(cd.LineageBuilder.GetSubforumLineageSlugs(*row.Thread.SubforumID), row.Thread.ID, row.Thread.Title, 1),
- FirstUser: templates.UserToTemplate(row.FirstPostAuthor, c.Theme),
+ FirstUser: templates.UserToTemplate(row.FirstPostAuthor),
FirstDate: row.FirstPost.PostDate,
- LastUser: templates.UserToTemplate(row.LastPostAuthor, c.Theme),
+ LastUser: templates.UserToTemplate(row.LastPostAuthor),
LastDate: row.LastPost.PostDate,
Unread: row.Unread,
}
@@ -391,12 +391,12 @@ func ForumThread(c *RequestContext) ResponseData {
var posts []templates.Post
for _, p := range postsAndStuff {
- post := templates.PostToTemplate(&p.Post, p.Author, c.Theme)
+ post := templates.PostToTemplate(&p.Post, p.Author)
post.AddContentVersion(p.CurrentVersion, p.Editor)
addForumUrlsToPost(c.UrlContext, &post, currentSubforumSlugs, thread.ID, post.ID)
if p.ReplyPost != nil {
- reply := templates.PostToTemplate(p.ReplyPost, p.ReplyAuthor, c.Theme)
+ reply := templates.PostToTemplate(p.ReplyPost, p.ReplyAuthor)
addForumUrlsToPost(c.UrlContext, &reply, currentSubforumSlugs, thread.ID, reply.ID)
post.ReplyPost = &reply
}
@@ -587,7 +587,7 @@ func ForumPostReply(c *RequestContext) ResponseData {
ForumThreadBreadcrumbs(c.UrlContext, cd.LineageBuilder, &post.Thread),
)
- replyPost := templates.PostToTemplate(&post.Post, post.Author, c.Theme)
+ replyPost := templates.PostToTemplate(&post.Post, post.Author)
replyPost.AddContentVersion(post.CurrentVersion, post.Editor)
editData := getEditorDataForNew(c.UrlContext, c.CurrentUser, baseData, &replyPost)
@@ -779,7 +779,7 @@ func ForumPostDelete(c *RequestContext) ResponseData {
ForumThreadBreadcrumbs(c.UrlContext, cd.LineageBuilder, &post.Thread),
)
- templatePost := templates.PostToTemplate(&post.Post, post.Author, c.Theme)
+ templatePost := templates.PostToTemplate(&post.Post, post.Author)
templatePost.AddContentVersion(post.CurrentVersion, post.Editor)
type forumPostDeleteData struct {
diff --git a/src/website/jam.go b/src/website/jam.go
index 75c3a809..b0f1e580 100644
--- a/src/website/jam.go
+++ b/src/website/jam.go
@@ -57,7 +57,7 @@ func JamSaveTheDate(c *RequestContext) ResponseData {
tmpl := TemplateData{
BaseData: getBaseDataAutocrumb(c, "Upcoming Jams"),
- UserAvatarUrl: templates.UserAvatarUrl(c.CurrentUser, "dark"),
+ UserAvatarUrl: templates.UserAvatarUrl(c.CurrentUser),
JamsUrl: hmnurl.BuildJamsIndex(),
Visibility2023Url: hmnurl.BuildJamIndex2023_Visibility(),
WRJ2023Url: hmnurl.BuildJamIndex2023(),
@@ -221,7 +221,7 @@ func getLJ2024BaseData(c *RequestContext) (JamBaseDataLJ2024, error) {
}
if c.CurrentUser != nil {
- tmpl.UserAvatarUrl = templates.UserAvatarUrl(c.CurrentUser, "dark")
+ tmpl.UserAvatarUrl = templates.UserAvatarUrl(c.CurrentUser)
projects, err := hmndata.FetchProjects(c, c.Conn, c.CurrentUser, hmndata.ProjectsQuery{
OwnerIDs: []int{c.CurrentUser.ID},
JamSlugs: []string{hmndata.LJ2024.Slug},
@@ -252,7 +252,7 @@ func getLJ2024FeedData(c *RequestContext, maxTimelineItems int) (JamFeedDataLJ20
for _, jp := range jamProjects {
urlContext := hmndata.UrlContextForProject(&jp.Project)
projectUrl := urlContext.BuildHomepage()
- projects = append(projects, templates.ProjectAndStuffToTemplate(&jp, projectUrl, c.Theme))
+ projects = append(projects, templates.ProjectAndStuffToTemplate(&jp, projectUrl))
}
projectIds := make([]int, 0, len(jamProjects))
@@ -272,7 +272,7 @@ func getLJ2024FeedData(c *RequestContext, maxTimelineItems int) (JamFeedDataLJ20
timelineItems = make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
timelineItem.SmallInfo = true
timelineItems = append(timelineItems, timelineItem)
}
@@ -367,7 +367,7 @@ func JamIndex2023(c *RequestContext) ResponseData {
pageProjects := make([]templates.Project, 0, len(jamProjects))
for _, p := range jamProjects {
- pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
+ pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage()))
}
projectIds := make([]int, 0, len(jamProjects))
@@ -385,7 +385,7 @@ func JamIndex2023(c *RequestContext) ResponseData {
}
showcaseItems = make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
if timelineItem.CanShowcase {
showcaseItems = append(showcaseItems, timelineItem)
}
@@ -452,7 +452,7 @@ func JamFeed2023(c *RequestContext) ResponseData {
timelineItems = make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
timelineItem.SmallInfo = true
timelineItems = append(timelineItems, timelineItem)
}
@@ -460,7 +460,7 @@ func JamFeed2023(c *RequestContext) ResponseData {
pageProjects := make([]templates.Project, 0, len(jamProjects))
for _, p := range jamProjects {
- pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
+ pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage()))
}
type JamFeedData struct {
@@ -553,7 +553,7 @@ func JamIndex2023_Visibility(c *RequestContext) ResponseData {
pageProjects := make([]templates.Project, 0, len(jamProjects))
for _, p := range jamProjects {
- pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
+ pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage()))
}
projectIds := make([]int, 0, len(jamProjects))
@@ -571,7 +571,7 @@ func JamIndex2023_Visibility(c *RequestContext) ResponseData {
}
showcaseItems = make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
if timelineItem.CanShowcase {
showcaseItems = append(showcaseItems, timelineItem)
}
@@ -620,7 +620,7 @@ func JamFeed2023_Visibility(c *RequestContext) ResponseData {
timelineItems = make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
timelineItem.SmallInfo = true
timelineItems = append(timelineItems, timelineItem)
}
@@ -628,7 +628,7 @@ func JamFeed2023_Visibility(c *RequestContext) ResponseData {
pageProjects := make([]templates.Project, 0, len(jamProjects))
for _, p := range jamProjects {
- pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
+ pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage()))
}
type JamFeedData struct {
@@ -681,7 +681,7 @@ func JamRecap2023_Visibility(c *RequestContext) ResponseData {
var ben templates.User
benUser, err := hmndata.FetchUserByUsername(c, c.Conn, c.CurrentUser, "bvisness", hmndata.UsersQuery{})
if err == nil {
- ben = templates.UserToTemplate(benUser, c.Theme)
+ ben = templates.UserToTemplate(benUser)
} else if err == db.NotFound {
ben = templates.UnknownUser
} else {
@@ -767,7 +767,7 @@ func JamIndex2022(c *RequestContext) ResponseData {
pageProjects := make([]templates.Project, 0, len(jamProjects))
for _, p := range jamProjects {
- pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
+ pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage()))
}
projectIds := make([]int, 0, len(jamProjects))
@@ -785,7 +785,7 @@ func JamIndex2022(c *RequestContext) ResponseData {
}
showcaseItems = make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
if timelineItem.CanShowcase {
showcaseItems = append(showcaseItems, timelineItem)
}
@@ -833,7 +833,7 @@ func JamFeed2022(c *RequestContext) ResponseData {
timelineItems = make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
timelineItem.SmallInfo = true
timelineItems = append(timelineItems, timelineItem)
}
@@ -841,7 +841,7 @@ func JamFeed2022(c *RequestContext) ResponseData {
pageProjects := make([]templates.Project, 0, len(jamProjects))
for _, p := range jamProjects {
- pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
+ pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage()))
}
type JamFeedData struct {
@@ -901,7 +901,7 @@ func JamIndex2021(c *RequestContext) ResponseData {
}
showcaseItems := make([]templates.TimelineItem, 0, len(snippets))
for _, s := range snippets {
- timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
+ timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, false)
if timelineItem.CanShowcase {
showcaseItems = append(showcaseItems, timelineItem)
}
diff --git a/src/website/landing.go b/src/website/landing.go
index bcd273b3..d2ebda90 100644
--- a/src/website/landing.go
+++ b/src/website/landing.go
@@ -40,6 +40,8 @@ func Index(c *RequestContext) ResponseData {
var timelineItems []templates.TimelineItem
+ FetchFollowTimelineForUser(c, c.Conn, c.CurrentUser)
+
// This is essentially an alternate for feed page 1.
posts, err := hmndata.FetchPosts(c, c.Conn, c.CurrentUser, hmndata.PostsQuery{
ThreadTypes: feedThreadTypes,
@@ -54,7 +56,7 @@ func Index(c *RequestContext) ResponseData {
continue // ignore news posts et. al.
}
- item := PostToTimelineItem(hmndata.UrlContextForProject(&p.Project), lineageBuilder, &p.Post, &p.Thread, p.Author, c.Theme)
+ item := PostToTimelineItem(hmndata.UrlContextForProject(&p.Project), lineageBuilder, &p.Post, &p.Thread, p.Author)
if p.Thread.Type == models.ThreadTypeProjectBlogPost && p.Post.ID == p.Thread.FirstID {
// blog post
item.Description = template.HTML(p.CurrentVersion.TextParsed)
@@ -75,7 +77,7 @@ func Index(c *RequestContext) ResponseData {
var newsPostItem *templates.TimelineItem
if len(newsThreads) > 0 {
t := newsThreads[0]
- item := PostToTimelineItem(hmndata.UrlContextForProject(&t.Project), lineageBuilder, &t.FirstPost, &t.Thread, t.FirstPostAuthor, c.Theme)
+ item := PostToTimelineItem(hmndata.UrlContextForProject(&t.Project), lineageBuilder, &t.FirstPost, &t.Thread, t.FirstPostAuthor)
item.Breadcrumbs = nil
item.TypeTitle = ""
item.AllowTitleWrap = true
diff --git a/src/website/post_helper.go b/src/website/post_helper.go
index 33931ec0..6afe4ee0 100644
--- a/src/website/post_helper.go
+++ b/src/website/post_helper.go
@@ -85,14 +85,13 @@ func MakePostListItem(
user *models.User,
unread bool,
includeBreadcrumbs bool,
- currentTheme string,
) templates.PostListItem {
var result templates.PostListItem
urlContext := hmndata.UrlContextForProject(project)
result.Title = thread.Title
- result.User = templates.UserToTemplate(user, currentTheme)
+ result.User = templates.UserToTemplate(user)
result.Date = post.PostDate
result.Unread = unread
result.Url = UrlForGenericPost(urlContext, thread, post, lineageBuilder)
diff --git a/src/website/projects.go b/src/website/projects.go
index 05669d58..5b50dfa5 100644
--- a/src/website/projects.go
+++ b/src/website/projects.go
@@ -238,7 +238,7 @@ func getShuffledOfficialProjects(c *RequestContext) ([]templates.Project, error)
var restProjects []templates.Project
now := time.Now()
for _, p := range official {
- templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme)
+ templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage())
if p.Project.Slug == "hero" {
// NOTE(asaf): Handmade Hero gets special treatment. Must always be first in the list.
@@ -297,7 +297,7 @@ func getPersonalProjects(c *RequestContext, jamSlug string) ([]templates.Project
var personalProjects []templates.Project
for _, p := range projects {
- templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme)
+ templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage())
personalProjects = append(personalProjects, templateProject)
}
@@ -410,9 +410,9 @@ func ProjectHomepage(c *RequestContext) ResponseData {
if err != nil {
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch project details"))
}
- templateData.Project = templates.ProjectAndStuffToTemplate(&p, c.UrlContext.BuildHomepage(), c.Theme)
+ templateData.Project = templates.ProjectAndStuffToTemplate(&p, c.UrlContext.BuildHomepage())
for _, owner := range owners {
- templateData.Owners = append(templateData.Owners, templates.UserToTemplate(owner, c.Theme))
+ templateData.Owners = append(templateData.Owners, templates.UserToTemplate(owner))
}
if c.CurrentProject.Hidden {
@@ -467,7 +467,7 @@ func ProjectHomepage(c *RequestContext) ResponseData {
}
}
- templateData.RecentActivity, err = FetchTimeline(c, c.Conn, c.CurrentUser, c.Theme, TimelineQuery{
+ templateData.RecentActivity, err = FetchTimeline(c, c.Conn, c.CurrentUser, TimelineQuery{
ProjectIDs: []int{c.CurrentProject.ID},
})
if err != nil {
@@ -486,12 +486,12 @@ func ProjectHomepage(c *RequestContext) ResponseData {
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch user projects"))
}
templateProjects := make([]templates.Project, 0, len(userProjects))
- templateProjects = append(templateProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
+ templateProjects = append(templateProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage()))
for _, p := range userProjects {
if p.Project.ID == c.CurrentProject.ID {
continue
}
- templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme)
+ templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage())
templateProjects = append(templateProjects, templateProject)
}
templateData.SnippetEdit = templates.SnippetEdit{
@@ -550,7 +550,7 @@ func ProjectNew(c *RequestContext) ResponseData {
}
var project templates.ProjectSettings
- project.Owners = append(project.Owners, templates.UserToTemplate(c.CurrentUser, c.Theme))
+ project.Owners = append(project.Owners, templates.UserToTemplate(c.CurrentUser))
project.Personal = true
var currentJam *hmndata.Jam
@@ -696,7 +696,6 @@ func ProjectEdit(c *RequestContext) ResponseData {
p.Owners,
p.TagText(),
p.LogoLightAsset, p.LogoDarkAsset, p.HeaderImage,
- c.Theme,
)
projectSettings.LinksJSON = string(utils.Must1(json.Marshal(templates.LinksToTemplate(projectLinks))))
diff --git a/src/website/requesthandling.go b/src/website/requesthandling.go
index 02a74820..f6a8a36a 100644
--- a/src/website/requesthandling.go
+++ b/src/website/requesthandling.go
@@ -190,7 +190,6 @@ type RequestContext struct {
CurrentProjectLogoUrl string
CurrentUser *models.User
CurrentSession *models.Session
- Theme string
UrlContext *hmnurl.UrlContext
CurrentUserCanEditCurrentProject bool
diff --git a/src/website/snippet.go b/src/website/snippet.go
index 45caf44b..3aa8116c 100644
--- a/src/website/snippet.go
+++ b/src/website/snippet.go
@@ -57,7 +57,7 @@ func Snippet(c *RequestContext) ResponseData {
c.Perf.EndBlock()
canEdit := (c.CurrentUser != nil && (c.CurrentUser.IsStaff || c.CurrentUser.ID == s.Owner.ID))
- snippet := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, canEdit)
+ snippet := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, canEdit)
snippet.SmallInfo = true
opengraph := []templates.OpenGraphItem{
@@ -114,7 +114,7 @@ func Snippet(c *RequestContext) ResponseData {
}
templateProjects := make([]templates.Project, 0, len(userProjects))
for _, p := range userProjects {
- templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme)
+ templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage())
templateProjects = append(templateProjects, templateProject)
}
snippetEdit = templates.SnippetEdit{
diff --git a/src/website/timeline_helper.go b/src/website/timeline_helper.go
index 687b6274..2fffc45f 100644
--- a/src/website/timeline_helper.go
+++ b/src/website/timeline_helper.go
@@ -20,7 +20,7 @@ import (
"git.handmade.network/hmn/hmn/src/templates"
)
-func FetchFollowTimelineForUser(ctx context.Context, conn db.ConnOrTx, user *models.User, theme string) ([]templates.TimelineItem, error) {
+func FetchFollowTimelineForUser(ctx context.Context, conn db.ConnOrTx, user *models.User) ([]templates.TimelineItem, error) {
perf := perf.ExtractPerf(ctx)
type Follower struct {
UserID int `db:"user_id"`
@@ -50,7 +50,7 @@ func FetchFollowTimelineForUser(ctx context.Context, conn db.ConnOrTx, user *mod
}
}
- timelineItems, err := FetchTimeline(ctx, conn, user, theme, TimelineQuery{
+ timelineItems, err := FetchTimeline(ctx, conn, user, TimelineQuery{
UserIDs: userIDs,
ProjectIDs: projectIDs,
})
@@ -64,7 +64,7 @@ type TimelineQuery struct {
ProjectIDs []int
}
-func FetchTimeline(ctx context.Context, conn db.ConnOrTx, currentUser *models.User, theme string, q TimelineQuery) ([]templates.TimelineItem, error) {
+func FetchTimeline(ctx context.Context, conn db.ConnOrTx, currentUser *models.User, q TimelineQuery) ([]templates.TimelineItem, error) {
perf := perf.ExtractPerf(ctx)
var users []*models.User
var projects []hmndata.ProjectAndStuff
@@ -159,7 +159,6 @@ func FetchTimeline(ctx context.Context, conn db.ConnOrTx, currentUser *models.Us
&post.Post,
&post.Thread,
post.Author,
- theme,
))
}
}
@@ -171,7 +170,6 @@ func FetchTimeline(ctx context.Context, conn db.ConnOrTx, currentUser *models.Us
s.DiscordMessage,
s.Projects,
s.Owner,
- theme,
false,
)
item.SmallInfo = true
@@ -188,7 +186,7 @@ func FetchTimeline(ctx context.Context, conn db.ConnOrTx, currentUser *models.Us
if streamer.UserID != nil {
for _, u := range users {
if u.ID == *streamer.UserID {
- ownerAvatarUrl = templates.UserAvatarUrl(u, theme)
+ ownerAvatarUrl = templates.UserAvatarUrl(u)
ownerName = u.BestName()
ownerUrl = hmnurl.BuildUserProfile(u.Username)
break
@@ -197,7 +195,7 @@ func FetchTimeline(ctx context.Context, conn db.ConnOrTx, currentUser *models.Us
} else if streamer.ProjectID != nil {
for _, p := range projects {
if p.Project.ID == *streamer.ProjectID {
- ownerAvatarUrl = templates.ProjectLogoUrl(&p.Project, p.LogoLightAsset, p.LogoDarkAsset, theme)
+ ownerAvatarUrl = templates.ProjectLogoUrl(&p.Project, p.LogoLightAsset, p.LogoDarkAsset)
ownerName = p.Project.Name
ownerUrl = hmndata.UrlContextForProject(&p.Project).BuildHomepage()
}
@@ -207,9 +205,6 @@ func FetchTimeline(ctx context.Context, conn db.ConnOrTx, currentUser *models.Us
break
}
}
- if ownerAvatarUrl == "" {
- ownerAvatarUrl = templates.UserAvatarDefaultUrl(theme)
- }
item := TwitchStreamToTimelineItem(s, ownerAvatarUrl, ownerName, ownerUrl)
timelineItems = append(timelineItems, item)
}
@@ -241,7 +236,6 @@ func PostToTimelineItem(
post *models.Post,
thread *models.Thread,
owner *models.User,
- currentTheme string,
) templates.TimelineItem {
item := templates.TimelineItem{
Date: post.PostDate,
@@ -249,7 +243,7 @@ func PostToTimelineItem(
Breadcrumbs: GenericThreadBreadcrumbs(urlContext, lineageBuilder, thread),
Url: UrlForGenericPost(urlContext, thread, post, lineageBuilder),
- OwnerAvatarUrl: templates.UserAvatarUrl(owner, currentTheme),
+ OwnerAvatarUrl: templates.UserAvatarUrl(owner),
OwnerName: owner.BestName(),
OwnerUrl: hmnurl.BuildUserProfile(owner.Username),
}
@@ -313,7 +307,6 @@ func SnippetToTimelineItem(
discordMessage *models.DiscordMessage,
projects []*hmndata.ProjectAndStuff,
owner *models.User,
- currentTheme string,
editable bool,
) templates.TimelineItem {
item := templates.TimelineItem{
@@ -322,7 +315,7 @@ func SnippetToTimelineItem(
FilterTitle: "Snippets",
Url: hmnurl.BuildSnippet(snippet.ID),
- OwnerAvatarUrl: templates.UserAvatarUrl(owner, currentTheme),
+ OwnerAvatarUrl: templates.UserAvatarUrl(owner),
OwnerName: owner.BestName(),
OwnerUrl: hmnurl.BuildUserProfile(owner.Username),
@@ -366,7 +359,7 @@ func SnippetToTimelineItem(
return projects[i].Project.Name < projects[j].Project.Name
})
for _, proj := range projects {
- item.Projects = append(item.Projects, templates.ProjectAndStuffToTemplate(proj, hmndata.UrlContextForProject(&proj.Project).BuildHomepage(), currentTheme))
+ item.Projects = append(item.Projects, templates.ProjectAndStuffToTemplate(proj, hmndata.UrlContextForProject(&proj.Project).BuildHomepage()))
}
return item
diff --git a/src/website/user.go b/src/website/user.go
index c23ac708..47f8ebab 100644
--- a/src/website/user.go
+++ b/src/website/user.go
@@ -106,7 +106,7 @@ func UserProfile(c *RequestContext) ResponseData {
templateProjects := make([]templates.Project, 0, len(projectsAndStuff))
numPersonalProjects := 0
for _, p := range projectsAndStuff {
- templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme)
+ templateProject := templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage())
templateProjects = append(templateProjects, templateProject)
if p.Project.Personal {
@@ -115,14 +115,14 @@ func UserProfile(c *RequestContext) ResponseData {
}
c.Perf.EndBlock()
- timelineItems, err := FetchTimeline(c, c.Conn, c.CurrentUser, c.Theme, TimelineQuery{
+ timelineItems, err := FetchTimeline(c, c.Conn, c.CurrentUser, TimelineQuery{
UserIDs: []int{profileUser.ID},
})
if err != nil {
return c.ErrorResponse(http.StatusInternalServerError, err)
}
- templateUser := templates.UserToTemplate(profileUser, c.Theme)
+ templateUser := templates.UserToTemplate(profileUser)
baseData := getBaseDataAutocrumb(c, templateUser.Name)
@@ -183,7 +183,6 @@ func UserSettings(c *RequestContext) ResponseData {
templates.BaseData
AvatarMaxFileSize int
- DefaultAvatarUrl string
User templates.User
Avatar *templates.Asset
@@ -254,14 +253,13 @@ func UserSettings(c *RequestContext) ResponseData {
}
}
- templateUser := templates.UserToTemplate(c.CurrentUser, c.Theme)
+ templateUser := templates.UserToTemplate(c.CurrentUser)
baseData := getBaseDataAutocrumb(c, templateUser.Name)
res.MustWriteTemplate("user_settings.html", UserSettingsTemplateData{
BaseData: baseData,
AvatarMaxFileSize: UserAvatarMaxFileSize,
- DefaultAvatarUrl: templates.UserAvatarDefaultUrl(c.Theme),
User: templateUser,
Avatar: templates.AssetToTemplate(c.CurrentUser.AvatarAsset),
Email: c.CurrentUser.Email,
@@ -319,7 +317,6 @@ func UserSettingsSave(c *RequestContext) ResponseData {
}
showEmail := form.Get("showemail") != ""
- darkTheme := form.Get("darktheme") != ""
blurb := form.Get("shortbio")
signature := form.Get("signature")
@@ -336,7 +333,6 @@ func UserSettingsSave(c *RequestContext) ResponseData {
name = $?,
email = $?,
showemail = $?,
- darktheme = $?,
blurb = $?,
signature = $?,
bio = $?
@@ -344,7 +340,6 @@ func UserSettingsSave(c *RequestContext) ResponseData {
name,
email,
showEmail,
- darkTheme,
blurb,
signature,
bio,
diff --git a/todo-styles.md b/todo-styles.md
index aa400c72..26c70d1c 100644
--- a/todo-styles.md
+++ b/todo-styles.md
@@ -53,4 +53,6 @@
- GitHub
- Threads?
- TikTok?
- - Trello?
\ No newline at end of file
+ - Trello?
+- [ ] Handle empty avatar URLs correctly in various places (render as theme-dependent default)
+- [ ] Resolve TODO(redesign) comments