import SwiftUI import Brief struct UpdateDetailView: View { @EnvironmentObject var updater: UpdaterType let update: Release var body: some View { VStack { Text("update_version_name_\(update.name)").font(.title) GroupBox(label: Text("update_release_notes_title")) { ScrollView { attributedBody } } HStack { if !update.critical { Button("update_ignore_button") { updater.ignore(release: update) } Spacer() } Button("update_update_button") { NSWorkspace.shared.open(update.html_url) } .keyboardShortcut(.defaultAction) } } .padding() .frame(maxWidth: 500) } var attributedBody: Text { var text = Text(verbatim: "") for line in update.body.split(whereSeparator: \.isNewline) { let attributed: Text let split = line.split(separator: " ") let unprefixed = split.dropFirst().joined(separator: " ") if let prefix = split.first { switch prefix { case "#": attributed = Text(unprefixed).font(.title) + Text("\n") case "##": attributed = Text(unprefixed).font(.title2) + Text("\n") case "###": attributed = Text(unprefixed).font(.title3) + Text("\n") default: attributed = Text(line) + Text("\n\n") } } else { attributed = Text(line) + Text("\n\n") } text = text + attributed } return text } }