Make links clickable in follow user view

This commit is contained in:
Lionello Lunesu
2022-12-28 23:01:40 -08:00
parent 75c67bc1e9
commit a4eaa50ba7
4 changed files with 12 additions and 17 deletions

View File

@@ -15,7 +15,7 @@ public struct Markdown {
return url.contains("://") ? url : "https://" + url
}
static func parseMarkdown(content: String) -> AttributedString {
public static func parse(content: String) -> AttributedString {
// Similar to the parsing in NoteContentView
let md_opts: AttributedString.MarkdownParsingOptions =
.init(interpretedSyntax: .inlineOnlyPreservingWhitespace)
@@ -38,6 +38,6 @@ public struct Markdown {
output.replaceSubrange(range, with: "[\(url)](\(Markdown.withScheme(url)))")
}
// TODO: escape unintentional markdown
return Markdown.parseMarkdown(content: output)
return Markdown.parse(content: output)
}
}

View File

@@ -10,7 +10,9 @@ import SwiftUI
struct FollowUserView: View {
let target: FollowTarget
let damus_state: DamusState
static let markdown = Markdown()
var body: some View {
HStack(alignment: .top) {
let pmodel = ProfileModel(pubkey: target.pubkey, damus: damus_state)
@@ -23,8 +25,8 @@ struct FollowUserView: View {
VStack(alignment: .leading) {
let profile = damus_state.profiles.lookup(id: target.pubkey)
ProfileName(pubkey: target.pubkey, profile: profile, contacts: damus_state.contacts, show_friend_confirmed: false)
if let about = profile.flatMap { $0.about } {
Text(about)
if let about = profile?.about {
Text(FollowUserView.markdown.process(about))
}
}

View File

@@ -60,17 +60,10 @@ struct NoteContentView: View {
let size: EventViewKind
func MainContent() -> some View {
let md_opts: AttributedString.MarkdownParsingOptions =
.init(interpretedSyntax: .inlineOnlyPreservingWhitespace)
return VStack(alignment: .leading) {
if let txt = try? AttributedString(markdown: artifacts.content, options: md_opts) {
Text(txt)
.font(eventviewsize_to_font(size))
} else {
Text(artifacts.content)
.font(eventviewsize_to_font(size))
}
Text(Markdown.parse(content: artifacts.content))
.font(eventviewsize_to_font(size))
if show_images && artifacts.images.count > 0 {
ImageCarousel(urls: artifacts.images)
}

View File

@@ -144,7 +144,7 @@ struct ProfileView: View {
}
}
static let markdownHelper = Markdown()
static let markdown = Markdown()
var DMButton: some View {
let dm_model = damus_state.dms.lookup_or_create(profile.pubkey)
@@ -197,7 +197,7 @@ struct ProfileView: View {
ProfileNameView(pubkey: profile.pubkey, profile: data, contacts: damus_state.contacts)
.padding(.bottom)
Text(ProfileView.markdownHelper.process(data?.about ?? ""))
Text(ProfileView.markdown.process(data?.about ?? ""))
.font(.subheadline)
Divider()