damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

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:
Mdamus/Components/UserView.swift | 4+++-
Mdamus/Views/EventView.swift | 5+++++
Mdamus/Views/Events/EventProfile.swift | 2++
Mdamus/Views/ParticipantsView.swift | 4+++-
Mdamus/Views/Profile/ProfileView.swift | 12+++++++++---
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)