mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 06:05:20 +00:00
UI: render self-authored messages in orange (sender and content); keep links/hashtags orange for self
This commit is contained in:
@@ -2658,13 +2658,14 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
var result = AttributedString()
|
var result = AttributedString()
|
||||||
|
|
||||||
let primaryColor = isDark ? Color.green : Color(red: 0, green: 0.5, blue: 0)
|
let primaryColor = isDark ? Color.green : Color(red: 0, green: 0.5, blue: 0)
|
||||||
|
let baseColor: Color = isSelf ? .orange : primaryColor
|
||||||
|
|
||||||
if message.sender != "system" {
|
if message.sender != "system" {
|
||||||
// Sender (at the beginning) with light-gray suffix styling if present
|
// Sender (at the beginning) with light-gray suffix styling if present
|
||||||
let (baseName, suffix) = splitSuffix(from: message.sender)
|
let (baseName, suffix) = splitSuffix(from: message.sender)
|
||||||
var senderStyle = AttributeContainer()
|
var senderStyle = AttributeContainer()
|
||||||
// Use consistent color for all senders
|
// Use consistent color for all senders
|
||||||
senderStyle.foregroundColor = primaryColor
|
senderStyle.foregroundColor = baseColor
|
||||||
// Bold the user's own nickname
|
// Bold the user's own nickname
|
||||||
let fontWeight: Font.Weight = isSelf ? .bold : .medium
|
let fontWeight: Font.Weight = isSelf ? .bold : .medium
|
||||||
senderStyle.font = .system(size: 14, weight: fontWeight, design: .monospaced)
|
senderStyle.font = .system(size: 14, weight: fontWeight, design: .monospaced)
|
||||||
@@ -2727,7 +2728,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
let beforeText = String(content[lastEnd..<nsRange.lowerBound])
|
let beforeText = String(content[lastEnd..<nsRange.lowerBound])
|
||||||
if !beforeText.isEmpty {
|
if !beforeText.isEmpty {
|
||||||
var beforeStyle = AttributeContainer()
|
var beforeStyle = AttributeContainer()
|
||||||
beforeStyle.foregroundColor = primaryColor
|
beforeStyle.foregroundColor = baseColor
|
||||||
beforeStyle.font = isSelf
|
beforeStyle.font = isSelf
|
||||||
? .system(size: 14, weight: .bold, design: .monospaced)
|
? .system(size: 14, weight: .bold, design: .monospaced)
|
||||||
: .system(size: 14, design: .monospaced)
|
: .system(size: 14, design: .monospaced)
|
||||||
@@ -2744,7 +2745,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
let (mBase, mSuffix) = splitSuffix(from: matchText.replacingOccurrences(of: "@", with: ""))
|
let (mBase, mSuffix) = splitSuffix(from: matchText.replacingOccurrences(of: "@", with: ""))
|
||||||
var mentionStyle = AttributeContainer()
|
var mentionStyle = AttributeContainer()
|
||||||
mentionStyle.font = .system(size: 14, weight: isSelf ? .bold : .semibold, design: .monospaced)
|
mentionStyle.font = .system(size: 14, weight: isSelf ? .bold : .semibold, design: .monospaced)
|
||||||
mentionStyle.foregroundColor = Color.orange
|
mentionStyle.foregroundColor = .orange
|
||||||
// Emit '@'
|
// Emit '@'
|
||||||
result.append(AttributedString("@").mergingAttributes(mentionStyle))
|
result.append(AttributedString("@").mergingAttributes(mentionStyle))
|
||||||
// Base name in orange
|
// Base name in orange
|
||||||
@@ -2758,11 +2759,12 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
} else {
|
} else {
|
||||||
var matchStyle = AttributeContainer()
|
var matchStyle = AttributeContainer()
|
||||||
matchStyle.font = .system(size: 14, weight: isSelf ? .bold : .semibold, design: .monospaced)
|
matchStyle.font = .system(size: 14, weight: isSelf ? .bold : .semibold, design: .monospaced)
|
||||||
|
// Self messages use orange for all tokens; others keep blue for links/hashtags
|
||||||
if type == "hashtag" {
|
if type == "hashtag" {
|
||||||
matchStyle.foregroundColor = Color.blue
|
matchStyle.foregroundColor = isSelf ? .orange : .blue
|
||||||
matchStyle.underlineStyle = .single
|
matchStyle.underlineStyle = .single
|
||||||
} else if type == "url" {
|
} else if type == "url" {
|
||||||
matchStyle.foregroundColor = Color.blue
|
matchStyle.foregroundColor = isSelf ? .orange : .blue
|
||||||
matchStyle.underlineStyle = .single
|
matchStyle.underlineStyle = .single
|
||||||
}
|
}
|
||||||
result.append(AttributedString(matchText).mergingAttributes(matchStyle))
|
result.append(AttributedString(matchText).mergingAttributes(matchStyle))
|
||||||
@@ -2775,7 +2777,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
if lastEnd < content.endIndex {
|
if lastEnd < content.endIndex {
|
||||||
let remainingText = String(content[lastEnd...])
|
let remainingText = String(content[lastEnd...])
|
||||||
var remainingStyle = AttributeContainer()
|
var remainingStyle = AttributeContainer()
|
||||||
remainingStyle.foregroundColor = primaryColor
|
remainingStyle.foregroundColor = baseColor
|
||||||
remainingStyle.font = isSelf
|
remainingStyle.font = isSelf
|
||||||
? .system(size: 14, weight: .bold, design: .monospaced)
|
? .system(size: 14, weight: .bold, design: .monospaced)
|
||||||
: .system(size: 14, design: .monospaced)
|
: .system(size: 14, design: .monospaced)
|
||||||
|
|||||||
Reference in New Issue
Block a user