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
This commit is contained in:
2023-05-25 12:03:31 -04:00
committed by William Casarin
parent f9a572faa2
commit 0552c24108
5 changed files with 22 additions and 5 deletions

View File

@@ -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)
}

View File

@@ -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)
}
}

View File

@@ -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
}
}

View File

@@ -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)
}

View File

@@ -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)