From 45b05bab2f192cd94a8b8a8c23ed6c4c5f29da84 Mon Sep 17 00:00:00 2001 From: Gwyneth Llewelyn Date: Fri, 7 Nov 2025 11:57:43 +0000 Subject: [PATCH] Style: new: show all notifications & offline IMs --- feed-messages.go | 28 ++++++++++++++++------------ offline-messages.go | 13 ++++++++----- templates/footer.tpl | 13 +++++++------ templates/tables.tpl | 40 ++++++++++++++++++++-------------------- 4 files changed, 51 insertions(+), 43 deletions(-) diff --git a/feed-messages.go b/feed-messages.go index 440ec5d..a7fbb4a 100644 --- a/feed-messages.go +++ b/feed-messages.go @@ -6,6 +6,7 @@ package main import ( "database/sql" "encoding/gob" + "fmt" "html/template" "net/http" "strconv" @@ -20,7 +21,7 @@ type FeedMessage struct { PostParentID string `json:"PostParentID"` PosterID string `json:"PosterID"` // UUID of poster. Feed messages are seen by everyone. PostID string `json:"PostID"` // primary key - Username string `json:"Username"` // will be constructed by getting it from the UserAccounts table + Username template.HTML `json:"Username"` // will be constructed by getting it from the UserAccounts table and adding a bit of HTML Libravatar string `json:"Libravatar"` PostMarkup template.HTML `json:"PostMarkup"` // actual message. May contain HTML. Chronostamp string `json:"Chronostamp"` @@ -95,8 +96,9 @@ func GetTopFeedMessages(c *gin.Context) { &email, ) oneMessage.PostMarkup = template.HTML(bluemondaySafeHTML.Sanitize(unsafeMessage)) - oneMessage.Username = firstName + " " + lastName - oneMessage.Libravatar = getLibravatar(email, oneMessage.Username, 60) + username := firstName + " " + lastName + oneMessage.Username = template.HTML(bluemondaySafeHTML.Sanitize(fmt.Sprintf("%s", oneMessage.PosterID, username))) + oneMessage.Libravatar = getLibravatar(email, username, 60) // do something to the time if messageTimeStamp.Valid { oneMessage.Chronostamp = humanize.Time(messageTimeStamp.Time) @@ -180,8 +182,10 @@ func getFeedMessages(c *gin.Context) { &email, ) oneMessage.PostMarkup = template.HTML(bluemondaySafeHTML.Sanitize(unsafeMessage)) - oneMessage.Username = firstName + " " + lastName - oneMessage.Libravatar = getLibravatar(email, oneMessage.Username, 60) + username := firstName + " " + lastName + oneMessage.Username = template.HTML(bluemondaySafeHTML.Sanitize(fmt.Sprintf("%s", oneMessage.PosterID, username))) + oneMessage.Libravatar = getLibravatar(email, username, 60) + // do something to the time if messageTimeStamp.Valid { // No need to humanize timestamps here. @@ -200,13 +204,13 @@ func getFeedMessages(c *gin.Context) { config.LogTracef("getFeedMessages(): All messages for user %q: %+v\n", username, messages) // now call the template c.HTML(http.StatusOK, "tables.tpl", environment(c, gin.H{ - "needsTables": true, - "needsMap": false, - "moreValidation": true, - "Debug": *config["ginMode"] == "debug" || *config["ginMode"] == "trace", - "titleCommon": *config["titleCommon"] + "Feed Messages for: " + username, - "feedMessages": messages, - "numberMessages": numberFeedMessages, // for debug + "needsTables": true, + "needsMap": false, + "moreValidation": true, + "Debug": *config["ginMode"] == "debug" || *config["ginMode"] == "trace", + "titleCommon": *config["titleCommon"] + "Feed Messages for: " + username, + "feedMessages": messages, + "numberFeedMessages": numberFeedMessages, // for debug })) return } diff --git a/offline-messages.go b/offline-messages.go index 9700feb..a7a3956 100644 --- a/offline-messages.go +++ b/offline-messages.go @@ -17,7 +17,7 @@ import ( type OfflineIM struct { ID string `json:"ID"` PrincipalID string `json:"PrincipalID"` - Username string `json:"Username"` // will be constructed by getting it from the UserAccounts table + Username template.HTML `json:"Username"` // will be constructed by getting it from the UserAccounts table with some HTML (so, sanitize first!) Libravatar string `json:"Libravatar"` FromID string `json:"FromID"` Message template.HTML `json:"Message"` // may contain HTML, so it will be sanitised later on (gwyneth 20200815) @@ -83,8 +83,9 @@ func GetTopOfflineMessages(c *gin.Context) { &email, ) oneMessage.Message = template.HTML(bluemondaySafeHTML.Sanitize(unsafeMessage)) - oneMessage.Username = firstName + " " + lastName - oneMessage.Libravatar = getLibravatar(email, oneMessage.Username, 60) + username := firstName + " " + lastName + oneMessage.Username = template.HTML(bluemondaySafeHTML.Sanitize(fmt.Sprintf("%s", oneMessage.FromID, username))) + oneMessage.Libravatar = getLibravatar(email, username, 60) // do something to the time if messageTimeStamp.Valid { oneMessage.TMStamp = humanize.Time(messageTimeStamp.Time) @@ -165,8 +166,9 @@ func getOfflineMessages(c *gin.Context) { &email, ) oneMessage.Message = template.HTML(bluemondaySafeHTML.Sanitize(unsafeMessage)) - oneMessage.Username = firstName + " " + lastName - oneMessage.Libravatar = getLibravatar(email, oneMessage.Username, 60) + username := firstName + " " + lastName + oneMessage.Username = template.HTML(bluemondaySafeHTML.Sanitize(fmt.Sprintf("%s", oneMessage.FromID, username))) + oneMessage.Libravatar = getLibravatar(email, username, 60) // do something to the time if messageTimeStamp.Valid { // No need to humanize timestamps here. @@ -192,6 +194,7 @@ func getOfflineMessages(c *gin.Context) { "moreValidation": true, "titleCommon": *config["titleCommon"] + "Offline Messages for: " + username, "offlineMessages": messages, + "numberMessages": numberMessages, "Debug": *config["ginMode"] == "debug" || *config["ginMode"] == "trace", "BoxTitle": "Debug info:", "BoxContent": fmt.Sprintf("

Number of messages: %d

", numberMessages), // for debug diff --git a/templates/footer.tpl b/templates/footer.tpl index 94b062b..093dfa4 100644 --- a/templates/footer.tpl +++ b/templates/footer.tpl @@ -110,12 +110,12 @@ ], "columns": [ { "data": "ID" }, - { "data": "FromID" }, { "data": "Username" }, { - "data": "Avatar", - render: function (data, type, row, meta) { - return '' + target[2] + ''; + "data": "Libravatar", + "render": function (data, type, row, meta) { + return ''; + } }, { "data": "Message" }, { "data": "TMStamp" }, @@ -137,8 +137,9 @@ { "data": "Username" }, { "data": "Libravatar", - render: function (data, type, row, meta) { - return '' + target[2] + ''; + "render": function (data, type, row, meta) { + return ''; + } }, { "data": "PostMarkup" }, { "data": "Chronostamp" }, diff --git a/templates/tables.tpl b/templates/tables.tpl index da00e70..cb5fbd0 100644 --- a/templates/tables.tpl +++ b/templates/tables.tpl @@ -25,22 +25,20 @@ ID - FromID Username Avatar Message - TMStamp + Date - {{- if gt .offlineMessages 20 -}} + {{- if gt .numberMessages 20 -}} ID - FromID Username Avatar Message - TMStamp + Date {{- end -}} @@ -52,29 +50,31 @@ PosterID PostID Username - PostMarkup - Chronostamp - Visibility - Comment - Commentlock - Editlock - Feedgroup + Avatar + Message + Date + Visibility + Comment + Commentlock + Editlock + Feedgroup - {{- if gt .feedMessages 20 -}} + {{- if gt .numberFeedMessages 20 -}} PostParentID PosterID PostID Username - PostMarkup - Chronostamp - Visibility - Comment - Commentlock - Editlock - Feedgroup + Avatar + Message + Date + Visibility + Comment + Commentlock + Editlock + Feedgroup {{- end -}}