commit 0552c2410871a46d3f9eab2fe03263a30f8e625e
parent f9a572faa28422a4df30af98b26da155df96a0d0
Author: Terry Yiu <963907+tyiu@users.noreply.github.com>
Date: Thu, 25 May 2023 12:03:31 -0400
Add mention parsing and fine-grained text selection on description in ProfileView
Changelog-Added: Add mention parsing and fine-grained text selection on description in ProfileView
Closes: #1172
Diffstat:
5 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/damus/Components/UserView.swift b/damus/Components/UserView.swift
@@ -43,7 +43,9 @@ struct UserView: View {
let profile = damus_state.profiles.lookup(id: pubkey)
ProfileName(pubkey: pubkey, profile: profile, damus: damus_state, show_nip5_domain: false)
if let about = profile?.about {
- Text(about)
+ let blocks = parse_mentions(content: about, tags: [])
+ let about_string = render_blocks(blocks: blocks, profiles: damus_state.profiles).content.attributed
+ Text(about_string)
.lineLimit(3)
.font(.footnote)
}
diff --git a/damus/Views/EventView.swift b/damus/Views/EventView.swift
@@ -12,6 +12,7 @@ enum EventViewKind {
case small
case normal
case selected
+ case subheadline
}
struct EventView: View {
@@ -106,6 +107,8 @@ func eventviewsize_to_font(_ size: EventViewKind) -> Font {
return .body
case .selected:
return .custom("selected", size: 21.0)
+ case .subheadline:
+ return .subheadline
}
}
@@ -117,6 +120,8 @@ func eventviewsize_to_uifont(_ size: EventViewKind) -> UIFont {
return .preferredFont(forTextStyle: .body)
case .selected:
return .preferredFont(forTextStyle: .title2)
+ case .subheadline:
+ return .preferredFont(forTextStyle: .subheadline)
}
}
diff --git a/damus/Views/Events/EventProfile.swift b/damus/Views/Events/EventProfile.swift
@@ -15,6 +15,8 @@ func eventview_pfp_size(_ size: EventViewKind) -> CGFloat {
return PFP_SIZE
case .selected:
return PFP_SIZE
+ case .subheadline:
+ return PFP_SIZE * 0.5
}
}
diff --git a/damus/Views/ParticipantsView.swift b/damus/Views/ParticipantsView.swift
@@ -57,7 +57,9 @@ struct ParticipantsView: View {
let profile = damus_state.profiles.lookup(id: pubkey)
ProfileName(pubkey: pubkey, profile: profile, damus: damus_state, show_nip5_domain: false)
if let about = profile?.about {
- Text(FollowUserView.markdown.process(about))
+ let blocks = parse_mentions(content: about, tags: [])
+ let about_string = render_blocks(blocks: blocks, profiles: damus_state.profiles).content.attributed
+ Text(about_string)
.lineLimit(3)
.font(.footnote)
}
diff --git a/damus/Views/Profile/ProfileView.swift b/damus/Views/Profile/ProfileView.swift
@@ -370,9 +370,15 @@ struct ProfileView: View {
let profile_data = damus_state.profiles.lookup(id: profile.pubkey)
nameSection(profile_data: profile_data)
-
- Text(ProfileView.markdown.process(profile_data?.about ?? ""))
- .font(.subheadline).textSelection(.enabled)
+
+ if let about = profile_data?.about {
+ let blocks = parse_mentions(content: about, tags: [])
+ let about_string = render_blocks(blocks: blocks, profiles: damus_state.profiles).content.attributed
+ SelectableText(attributedString: about_string, size: .subheadline)
+ } else {
+ Text(verbatim: "")
+ .font(.subheadline)
+ }
if let url = profile_data?.website_url {
WebsiteLink(url: url)