diff --git a/internal/webserver/handler_messages.go b/internal/webserver/handler_messages.go index 11afa11..81e3387 100644 --- a/internal/webserver/handler_messages.go +++ b/internal/webserver/handler_messages.go @@ -15,6 +15,7 @@ type MessageData struct { persistence.DMChatView LatestPollingTimestamp int ScrollBottom bool + UnreadRoomIDs map[scraper.DMChatRoomID]bool } func (app *Application) Messages(w http.ResponseWriter, r *http.Request) { @@ -34,6 +35,10 @@ func (app *Application) Messages(w http.ResponseWriter, r *http.Request) { } chat_view_data := MessageData{DMChatView: app.Profile.GetChatRoomsPreview(app.ActiveUser.ID)} // Get message list previews + chat_view_data.UnreadRoomIDs = make(map[scraper.DMChatRoomID]bool) + for _, room_id := range app.Profile.GetUnreadConversations(app.ActiveUser.ID) { + chat_view_data.UnreadRoomIDs[room_id] = true + } global_data := PageGlobalData{TweetTrove: chat_view_data.DMChatView.TweetTrove} if room_id != "" { diff --git a/internal/webserver/static/styles.css b/internal/webserver/static/styles.css index 44d36db..fec7a97 100644 --- a/internal/webserver/static/styles.css +++ b/internal/webserver/static/styles.css @@ -1195,11 +1195,33 @@ main { white-space: nowrap; cursor: default; /* TODO: redundancy check `.author-info` */ } + .chat-list-entry__preview-and-unread-container { + justify-content: space-between; + } .chat-list-entry__message-preview { font-size: 0.9em; color: var(--color-twitter-text-gray); padding: 0 1em; border-left: 1px solid var(--color-outline-gray); + + .chat-list-entry--unread & { + font-weight: bold; + } + } + .chat-list-entry__unread-indicator { + display: none; + background-color: var(--color-twitter-blue); + height: 0.5em; + width: 0.5em; + border-radius: 50%; + flex: auto 0 0; /* Otherwise it gets squished if the message preview is long */ + + .chat-list-entry--unread & { + display: revert; + } + } + .chat-list-entry__preview-no-text { + font-style: italic; } .posted-at__text { @@ -1273,6 +1295,7 @@ main { .dm-message__embedded-image, .dm-message__embedded-video { max-width: 100%; height: auto; /* preserve aspect ratio */ + cursor: pointer; } .dm-message__text-content { display: inline-block; diff --git a/internal/webserver/tpl/tweet_page_includes/chat_list.tpl b/internal/webserver/tpl/tweet_page_includes/chat_list.tpl index 856702e..9a42127 100644 --- a/internal/webserver/tpl/tweet_page_includes/chat_list.tpl +++ b/internal/webserver/tpl/tweet_page_includes/chat_list.tpl @@ -1,7 +1,12 @@ {{define "chat-list"}}