Merge remote-tracking branch 'upstream/swiftui' into swiftui
This commit is contained in:
commit
ff6fd64557
@ -1,5 +1,5 @@
|
||||
//
|
||||
// AddWebFeedViewModel.swift
|
||||
// AddWebFeedModel.swift
|
||||
// NetNewsWire
|
||||
//
|
||||
// Created by Stuart Breckenridge on 4/7/20.
|
||||
@ -30,7 +30,7 @@ enum AddWebFeedError: LocalizedError {
|
||||
|
||||
}
|
||||
|
||||
class AddWebFeedViewModel: ObservableObject {
|
||||
class AddWebFeedModel: ObservableObject {
|
||||
|
||||
@Published var shouldDismiss: Bool = false
|
||||
@Published var providedURL: String = ""
|
@ -14,7 +14,7 @@ import RSCore
|
||||
struct AddWebFeedView: View {
|
||||
|
||||
@Environment(\.presentationMode) private var presentationMode
|
||||
@ObservedObject private var viewModel = AddWebFeedViewModel()
|
||||
@ObservedObject private var viewModel = AddWebFeedModel()
|
||||
|
||||
@ViewBuilder var body: some View {
|
||||
#if os(iOS)
|
||||
|
@ -13,70 +13,102 @@ import Account
|
||||
struct AppAssets {
|
||||
|
||||
static var accountLocalMacImage: RSImage! = {
|
||||
return RSImage(named: "accountLocalMac")
|
||||
return RSImage(named: "AccountLocalMac")
|
||||
}()
|
||||
|
||||
static var accountLocalPadImage: RSImage = {
|
||||
return RSImage(named: "accountLocalPad")!
|
||||
return RSImage(named: "AccountLocalPad")!
|
||||
}()
|
||||
|
||||
static var accountLocalPhoneImage: RSImage = {
|
||||
return RSImage(named: "accountLocalPhone")!
|
||||
return RSImage(named: "AccountLocalPhone")!
|
||||
}()
|
||||
|
||||
static var accountCloudKitImage: RSImage = {
|
||||
return RSImage(named: "accountCloudKit")!
|
||||
return RSImage(named: "AccountCloudKit")!
|
||||
}()
|
||||
|
||||
static var accountFeedbinImage: RSImage = {
|
||||
return RSImage(named: "accountFeedbin")!
|
||||
return RSImage(named: "AccountFeedbin")!
|
||||
}()
|
||||
|
||||
static var accountFeedlyImage: RSImage = {
|
||||
return RSImage(named: "accountFeedly")!
|
||||
return RSImage(named: "AccountFeedly")!
|
||||
}()
|
||||
|
||||
static var accountFeedWranglerImage: RSImage = {
|
||||
return RSImage(named: "accountFeedWrangler")!
|
||||
return RSImage(named: "AccountFeedWrangler")!
|
||||
}()
|
||||
|
||||
static var accountFreshRSSImage: RSImage = {
|
||||
return RSImage(named: "accountFreshRSS")!
|
||||
return RSImage(named: "AccountFreshRSS")!
|
||||
}()
|
||||
|
||||
static var accountNewsBlurImage: RSImage = {
|
||||
return RSImage(named: "accountNewsBlur")!
|
||||
return RSImage(named: "AccountNewsBlur")!
|
||||
}()
|
||||
|
||||
static var addMenuImage: Image = {
|
||||
return Image(systemName: "plus")
|
||||
}()
|
||||
|
||||
static var extensionPointMarsEdit: RSImage = {
|
||||
return RSImage(named: "extensionPointMarsEdit")!
|
||||
return RSImage(named: "ExtensionPointMarsEdit")!
|
||||
}()
|
||||
|
||||
static var extensionPointMicroblog: RSImage = {
|
||||
return RSImage(named: "extensionPointMicroblog")!
|
||||
return RSImage(named: "ExtensionPointMicroblog")!
|
||||
}()
|
||||
|
||||
static var extensionPointReddit: RSImage = {
|
||||
return RSImage(named: "extensionPointReddit")!
|
||||
return RSImage(named: "ExtensionPointReddit")!
|
||||
}()
|
||||
|
||||
static var extensionPointTwitter: RSImage = {
|
||||
return RSImage(named: "extensionPointTwitter")!
|
||||
return RSImage(named: "ExtensionPointTwitter")!
|
||||
}()
|
||||
|
||||
static var faviconTemplateImage: RSImage = {
|
||||
return RSImage(named: "faviconTemplateImage")!
|
||||
return RSImage(named: "FaviconTemplateImage")!
|
||||
}()
|
||||
|
||||
static var masterFolderImage: IconImage = {
|
||||
static var settingsImage: Image = {
|
||||
return Image(systemName: "gear")
|
||||
}()
|
||||
|
||||
static var masterFolderImage: IconImage {
|
||||
#if os(macOS)
|
||||
return IconImage(NSImage(systemSymbolName: "folder.fill", accessibilityDescription: nil)!)
|
||||
let image = NSImage(systemSymbolName: "folder.fill", accessibilityDescription: nil)!
|
||||
let coloredImage = image.tinted(with: NSColor(named: "AccentColor")!)
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
#if os(iOS)
|
||||
return IconImage(UIImage(systemName: "folder.fill")!)
|
||||
let image = UIImage(systemName: "folder.fill")!
|
||||
let coloredImage = image.tinted(color: UIColor(named: "AccentColor")!)!
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
}
|
||||
|
||||
static var markAllAsReadImage: Image = {
|
||||
return Image("MarkAllAsRead")
|
||||
}()
|
||||
|
||||
static var markAllAsReadImagePDF: Image = {
|
||||
return Image("MarkAllAsReadPDF")
|
||||
}()
|
||||
|
||||
static var nextUnreadArticleImage: Image = {
|
||||
return Image(systemName: "chevron.down.circle")
|
||||
}()
|
||||
|
||||
static var openInBrowserImage: Image = {
|
||||
return Image(systemName: "safari")
|
||||
}()
|
||||
|
||||
static var refreshImage: Image = {
|
||||
return Image(systemName: "arrow.clockwise")
|
||||
}()
|
||||
|
||||
static var searchFeedImage: IconImage = {
|
||||
#if os(macOS)
|
||||
return IconImage(NSImage(systemSymbolName: "magnifyingglass", accessibilityDescription: nil)!)
|
||||
@ -86,6 +118,18 @@ struct AppAssets {
|
||||
#endif
|
||||
}()
|
||||
|
||||
static var sidebarUnreadCountBackground: Color = {
|
||||
return Color("SidebarUnreadCountBackground")
|
||||
}()
|
||||
|
||||
static var sidebarUnreadCountForeground: Color = {
|
||||
return Color("SidebarUnreadCountForeground")
|
||||
}()
|
||||
|
||||
static var shareImage: Image = {
|
||||
Image(systemName: "square.and.arrow.up")
|
||||
}()
|
||||
|
||||
static var smartFeedImage: RSImage = {
|
||||
#if os(macOS)
|
||||
return NSImage(systemSymbolName: "gear", accessibilityDescription: nil)!
|
||||
@ -97,40 +141,76 @@ struct AppAssets {
|
||||
|
||||
static var starredFeedImage: IconImage = {
|
||||
#if os(macOS)
|
||||
return IconImage(NSImage(systemSymbolName: "star.fill", accessibilityDescription: nil)!)
|
||||
let image = NSImage(systemSymbolName: "star.fill", accessibilityDescription: nil)!
|
||||
let coloredImage = image.tinted(with: NSColor(named: "StarColor")!)
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
#if os(iOS)
|
||||
return IconImage(UIImage(systemName: "star.fill")!)
|
||||
let image = UIImage(systemName: "star.fill")!
|
||||
let coloredImage = image.tinted(color: UIColor(named: "StarColor")!)!
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
}()
|
||||
|
||||
static var timelineStarred: Image = {
|
||||
return Image(systemName: "star.fill")
|
||||
|
||||
#if os(macOS)
|
||||
let image = NSImage(systemSymbolName: "star.fill", accessibilityDescription: nil)!
|
||||
let coloredImage = image.tinted(with: NSColor(named: "StarColor")!)
|
||||
return Image(nsImage: coloredImage)
|
||||
#endif
|
||||
#if os(iOS)
|
||||
let image = UIImage(systemName: "star.fill")!
|
||||
let coloredImage = image.tinted(color: UIColor(named: "StarColor")!)!
|
||||
return Image(uiImage: coloredImage)
|
||||
#endif
|
||||
}()
|
||||
|
||||
static var timelineUnread: Image = {
|
||||
return Image(systemName: "circle.fill")
|
||||
|
||||
}()
|
||||
static var timelineUnread: Image {
|
||||
#if os(macOS)
|
||||
let image = NSImage(systemSymbolName: "circle.fill", accessibilityDescription: nil)!
|
||||
let coloredImage = image.tinted(with: NSColor(named: "AccentColor")!)
|
||||
return Image(nsImage: coloredImage)
|
||||
#endif
|
||||
#if os(iOS)
|
||||
let image = UIImage(systemName: "circle.fill")!
|
||||
let coloredImage = image.tinted(color: UIColor(named: "AccentColor")!)!
|
||||
return Image(uiImage: coloredImage)
|
||||
#endif
|
||||
}
|
||||
|
||||
static var todayFeedImage: IconImage = {
|
||||
#if os(macOS)
|
||||
return IconImage(NSImage(systemSymbolName: "sun.max.fill", accessibilityDescription: nil)!)
|
||||
let image = NSImage(systemSymbolName: "sun.max.fill", accessibilityDescription: nil)!
|
||||
let coloredImage = image.tinted(with: .orange)
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
#if os(iOS)
|
||||
return IconImage(UIImage(systemName: "sun.max.fill")!)
|
||||
let image = UIImage(systemName: "sun.max.fill")!
|
||||
let coloredImage = image.tinted(color: .orange)!
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
}()
|
||||
|
||||
static var unreadFeedImage: IconImage = {
|
||||
|
||||
static var toggleStarred: Image = {
|
||||
return Image(systemName: "star.fill")
|
||||
}()
|
||||
|
||||
static var toggleRead: Image = {
|
||||
return Image(systemName: "largecircle.fill.circle")
|
||||
}()
|
||||
|
||||
static var unreadFeedImage: IconImage {
|
||||
#if os(macOS)
|
||||
return IconImage(NSImage(systemSymbolName: "largecircle.fill.circle", accessibilityDescription: nil)!)
|
||||
let image = NSImage(systemSymbolName: "largecircle.fill.circle", accessibilityDescription: nil)!
|
||||
let coloredImage = image.tinted(with: NSColor(named: "AccentColor")!)
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
#if os(iOS)
|
||||
return IconImage(UIImage(systemName: "largecircle.fill.circle")!)
|
||||
let image = UIImage(systemName: "largecircle.fill.circle")!
|
||||
let coloredImage = image.tinted(color: UIColor(named: "AccentColor")!)!
|
||||
return IconImage(coloredImage)
|
||||
#endif
|
||||
}()
|
||||
}
|
||||
|
||||
static func image(for accountType: AccountType) -> RSImage? {
|
||||
switch accountType {
|
||||
|
@ -23,9 +23,9 @@
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0.945",
|
||||
"green" : "0.502",
|
||||
"red" : "0.176"
|
||||
"blue" : "0.957",
|
||||
"green" : "0.620",
|
||||
"red" : "0.369"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
|
16
Multiplatform/Shared/Assets.xcassets/MarkAllAsReadPDF.imageset/Contents.json
vendored
Normal file
16
Multiplatform/Shared/Assets.xcassets/MarkAllAsReadPDF.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "MarkAllAsReadPDF.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true,
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
BIN
Multiplatform/Shared/Assets.xcassets/MarkAllAsReadPDF.imageset/MarkAllAsReadPDF.pdf
vendored
Normal file
BIN
Multiplatform/Shared/Assets.xcassets/MarkAllAsReadPDF.imageset/MarkAllAsReadPDF.pdf
vendored
Normal file
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "0.500",
|
||||
"blue" : "0.000",
|
||||
"green" : "0.000",
|
||||
"red" : "0.000"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "0.900",
|
||||
"blue" : "1.000",
|
||||
"green" : "1.000",
|
||||
"red" : "1.000"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0.204",
|
||||
"green" : "0.776",
|
||||
"red" : "0.976"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="3300px" height="2200px" viewBox="0 0 3300 2200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 60.1 (88133) - https://sketch.com -->
|
||||
<title>Untitled</title>
|
||||
<!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
|
||||
<title>markAllAsRead</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="markAllAsRead">
|
||||
@ -136,6 +136,11 @@
|
||||
<path d="M50.45587,25 C77.70197,25 100.30977,47.6074 100.30977,74.8047 C100.30977,74.870144 100.30964,74.935561 100.30938,75.0009507 L99.8322178,75.0006156 C97.6995557,51.580586 76.5280991,33.3008 50.4213361,33.3008 C24.3145732,33.3008 3.24806132,51.580586 1.17616722,75.0006156 L0.701,75 L0.7,74.8047 C0.7,47.879373 22.8096545,25.452607 49.6413605,25.0067642 Z" id="Combined-Shape"></path>
|
||||
<path d="M50.45587,-1.77635684e-14 C77.70197,-1.77635684e-14 100.30977,22.6074 100.30977,49.8047 C100.30977,49.870144 100.30964,49.935561 100.30938,50.0009507 L99.8322178,50.0006156 C97.6995557,26.580586 76.5280991,8.3008 50.4213361,8.3008 C24.3145732,8.3008 3.24806132,26.580586 1.17616722,50.0006156 L0.701,50 L0.7,49.8047 C0.7,22.879373 22.8096545,0.45260699 49.6413605,0.0067642025 Z" id="Combined-Shape"></path>
|
||||
</g>
|
||||
<g id="Medium-M" transform="translate(0.300000, 0.000000)">
|
||||
<path d="M50.50467,149.611301 C77.75077,149.611301 100.30977,127.052691 100.30977,99.8066015 C100.30977,72.6093015 77.70197,50.0019015 50.45587,50.0019015 C23.25857,50.0019015 0.7,72.6093015 0.7,99.8066015 C0.7,127.052691 23.30747,149.611301 50.50467,149.611301 Z M50.50467,141.310501 C27.45777,141.310501 9.04957,122.853501 9.04957,99.8066015 C9.04957,76.8085015 27.40897,58.3027015 50.45587,58.3027015 C73.50277,58.3027015 91.95977,76.8085015 92.0088671,99.8066015 C92.05777,122.853501 73.55157,141.310501 50.50467,141.310501 Z" id="Shape"></path>
|
||||
<path d="M50.45587,25.0009507 C77.70197,25.0009507 100.30977,47.6083507 100.30977,74.8056507 C100.30977,74.8710948 100.30964,74.9365118 100.30938,75.0019015 L99.8322178,75.0015664 C97.6995557,51.5815367 76.5280991,33.3017507 50.4213361,33.3017507 C24.3145732,33.3017507 3.24806132,51.5815367 1.17616722,75.0015664 L0.701,75.0009507 L0.7,74.8056507 C0.7,47.8803237 22.8096545,25.4535577 49.6413605,25.0077149 Z" id="Combined-Shape"></path>
|
||||
<path d="M50.45587,-1.77635684e-14 C77.70197,-1.77635684e-14 100.30977,22.6074 100.30977,49.8047 C100.30977,49.870144 100.30964,49.935561 100.30938,50.0009507 L99.8322178,50.0006156 C97.6995557,26.580586 76.5280991,8.3008 50.4213361,8.3008 C24.3145732,8.3008 3.24806132,26.580586 1.17616722,50.0006156 L0.701,50 L0.7,49.8047 C0.7,22.879373 22.8096545,0.45260699 49.6413605,0.0067642025 Z" id="Combined-Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
@ -34,61 +34,65 @@ struct MainApp: App {
|
||||
}
|
||||
.toolbar {
|
||||
|
||||
ToolbarItem {
|
||||
Button(action: { showSheet = true }, label: {
|
||||
Image(systemName: "plus").foregroundColor(.secondary)
|
||||
}).help("Add Feed")
|
||||
ToolbarItem() {
|
||||
Menu {
|
||||
Button("Add Web Feed", action: { showSheet = true })
|
||||
Button("Add Reddit Feed", action: { })
|
||||
Button("Add Twitter Feed", action: { })
|
||||
Button("Add Folder", action: { })
|
||||
} label : {
|
||||
AppAssets.addMenuImage
|
||||
}
|
||||
}
|
||||
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "folder.fill.badge.plus").foregroundColor(.pink)
|
||||
}).help("New Folder")
|
||||
}
|
||||
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "arrow.clockwise").foregroundColor(.secondary)
|
||||
AppAssets.refreshImage
|
||||
}).help("Refresh").padding(.trailing, 40)
|
||||
}
|
||||
|
||||
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "circle.dashed").foregroundColor(.orange)
|
||||
AppAssets.markAllAsReadImagePDF
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
}).help("Mark All as Read")
|
||||
}
|
||||
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "arrow.triangle.turn.up.right.circle.fill").foregroundColor(.purple)
|
||||
}).help("Go to Next Unread")
|
||||
MacSearchField()
|
||||
.frame(width: 200)
|
||||
}
|
||||
|
||||
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "star.fill").foregroundColor(.yellow)
|
||||
AppAssets.nextUnreadArticleImage
|
||||
}).help("Go to Next Unread").padding(.trailing, 40)
|
||||
}
|
||||
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
AppAssets.toggleStarred
|
||||
}).help("Mark as Starred")
|
||||
}
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "checkmark.circle.fill").foregroundColor(.green)
|
||||
AppAssets.toggleRead
|
||||
}).help("Mark as Unread")
|
||||
}
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "safari").foregroundColor(.blue)
|
||||
AppAssets.openInBrowserImage
|
||||
}).help("Open in Browser")
|
||||
}
|
||||
ToolbarItem {
|
||||
Button(action: {}, label: {
|
||||
Image(systemName: "square.and.arrow.up")
|
||||
AppAssets.shareImage
|
||||
}).help("Share")
|
||||
}
|
||||
|
||||
ToolbarItem {
|
||||
MacSearchField()
|
||||
.frame(width: 300)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.commands {
|
||||
@ -199,20 +203,3 @@ struct MainApp: App {
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
struct PreferredColorSchemeModifier: ViewModifier {
|
||||
|
||||
var preferredColorScheme: UserInterfaceColorPalette
|
||||
|
||||
@ViewBuilder
|
||||
func body(content: Content) -> some View {
|
||||
switch preferredColorScheme {
|
||||
case .automatic:
|
||||
content
|
||||
case .dark:
|
||||
content.preferredColorScheme(.dark)
|
||||
case .light:
|
||||
content.preferredColorScheme(.light)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,19 +22,14 @@ fileprivate class SidebarToolbarViewModel: ObservableObject {
|
||||
}
|
||||
@Published var showActionSheet: Bool = false
|
||||
@Published var showAddSheet: Bool = false
|
||||
|
||||
}
|
||||
|
||||
|
||||
struct SidebarToolbar: View {
|
||||
|
||||
@EnvironmentObject private var appSettings: AppDefaults
|
||||
@StateObject private var viewModel = SidebarToolbarViewModel()
|
||||
|
||||
|
||||
var addActionSheetButtons = [
|
||||
Button(action: {}, label: { Text("Add Feed") })
|
||||
]
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
Divider()
|
||||
@ -42,7 +37,7 @@ struct SidebarToolbar: View {
|
||||
Button(action: {
|
||||
viewModel.sheetToShow = .settings
|
||||
}, label: {
|
||||
Image(systemName: "gear")
|
||||
AppAssets.settingsImage
|
||||
.font(.title3)
|
||||
.foregroundColor(.accentColor)
|
||||
}).help("Settings")
|
||||
@ -58,7 +53,7 @@ struct SidebarToolbar: View {
|
||||
Button(action: {
|
||||
viewModel.showActionSheet = true
|
||||
}, label: {
|
||||
Image(systemName: "plus")
|
||||
AppAssets.addMenuImage
|
||||
.font(.title3)
|
||||
.foregroundColor(.accentColor)
|
||||
})
|
||||
|
@ -14,10 +14,12 @@ struct UnreadCountView: View {
|
||||
|
||||
var body: some View {
|
||||
Text(verbatim: String(count))
|
||||
.font(.footnote)
|
||||
.font(.caption)
|
||||
.fontWeight(.bold)
|
||||
.padding(.horizontal, 7)
|
||||
.padding(.vertical, 1)
|
||||
.background(SwiftUI.Color.gray.opacity(0.5))
|
||||
.background(AppAssets.sidebarUnreadCountBackground)
|
||||
.foregroundColor(AppAssets.sidebarUnreadCountForeground)
|
||||
.cornerRadius(8)
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,27 @@
|
||||
//
|
||||
// PreferredColorSchemeModifier.swift
|
||||
// NetNewsWire
|
||||
//
|
||||
// Created by Maurice Parker on 7/3/20.
|
||||
// Copyright © 2020 Ranchero Software. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct PreferredColorSchemeModifier: ViewModifier {
|
||||
|
||||
var preferredColorScheme: UserInterfaceColorPalette
|
||||
|
||||
@ViewBuilder
|
||||
func body(content: Content) -> some View {
|
||||
switch preferredColorScheme {
|
||||
case .automatic:
|
||||
content.preferredColorScheme(nil)
|
||||
case .dark:
|
||||
content.preferredColorScheme(.dark)
|
||||
case .light:
|
||||
content.preferredColorScheme(.light)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -19,12 +19,10 @@ struct TimelineItemStatusView: View {
|
||||
.resizable()
|
||||
.frame(width: 8, height: 8, alignment: .center)
|
||||
.padding(.all, 2)
|
||||
.foregroundColor(.accentColor)
|
||||
case .showStar:
|
||||
AppAssets.timelineStarred
|
||||
.resizable()
|
||||
.frame(width: 10, height: 10, alignment: .center)
|
||||
.foregroundColor(.yellow)
|
||||
case .showNone:
|
||||
AppAssets.timelineUnread
|
||||
.resizable()
|
||||
|
@ -14,7 +14,14 @@ struct TimelineItemView: View {
|
||||
@StateObject var articleIconImageLoader = ArticleIconImageLoader()
|
||||
|
||||
var timelineItem: TimelineItem
|
||||
|
||||
|
||||
#if os(macOS)
|
||||
var verticalPadding: CGFloat = 10
|
||||
#endif
|
||||
#if os(iOS)
|
||||
var verticalPadding: CGFloat = 0
|
||||
#endif
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
HStack(alignment: .top) {
|
||||
@ -46,6 +53,7 @@ struct TimelineItemView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.vertical, verticalPadding)
|
||||
.onAppear {
|
||||
articleIconImageLoader.loadImage(for: timelineItem.article)
|
||||
}
|
||||
|
@ -27,8 +27,8 @@
|
||||
17930ED524AF10EE00A9BA52 /* AddWebFeedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17930ED324AF10EE00A9BA52 /* AddWebFeedView.swift */; };
|
||||
179DB1DFBCF9177104B12E0F /* AccountsNewsBlurWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */; };
|
||||
179DB3CE822BFCC2D774D9F4 /* AccountsNewsBlurWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */; };
|
||||
17D232A824AFF10A0005F075 /* AddWebFeedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedViewModel.swift */; };
|
||||
17D232A924AFF10A0005F075 /* AddWebFeedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedViewModel.swift */; };
|
||||
17D232A824AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; };
|
||||
17D232A924AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; };
|
||||
3B3A32A5238B820900314204 /* FeedWranglerAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A328B238B820900314204 /* FeedWranglerAccountViewController.swift */; };
|
||||
3B826DCB2385C84800FC1ADB /* AccountsFeedWrangler.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3B826DB02385C84800FC1ADB /* AccountsFeedWrangler.xib */; };
|
||||
3B826DCC2385C84800FC1ADB /* AccountsFeedWranglerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B826DCA2385C84800FC1ADB /* AccountsFeedWranglerWindowController.swift */; };
|
||||
@ -220,6 +220,8 @@
|
||||
517A757A24451C0700B553B9 /* OAuthSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 517A755524451BD500B553B9 /* OAuthSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
517A757B24451C1500B553B9 /* OAuthSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 517A755324451BD500B553B9 /* OAuthSwift.framework */; };
|
||||
517A757C24451C1500B553B9 /* OAuthSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 517A755324451BD500B553B9 /* OAuthSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
5181C5AD24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5181C5AC24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift */; };
|
||||
5181C5AE24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5181C5AC24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift */; };
|
||||
5183CCD0226E1E880010922C /* NonIntrinsicLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCCF226E1E880010922C /* NonIntrinsicLabel.swift */; };
|
||||
5183CCDA226E31A50010922C /* NonIntrinsicImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCD9226E31A50010922C /* NonIntrinsicImageView.swift */; };
|
||||
5183CCE5226F4DFA0010922C /* RefreshInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */; };
|
||||
@ -1728,7 +1730,7 @@
|
||||
17930ED324AF10EE00A9BA52 /* AddWebFeedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWebFeedView.swift; sourceTree = "<group>"; };
|
||||
179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsNewsBlurWindowController.swift; sourceTree = "<group>"; };
|
||||
17B223DB24AC24D2001E4592 /* TimelineLayoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineLayoutView.swift; sourceTree = "<group>"; };
|
||||
17D232A724AFF10A0005F075 /* AddWebFeedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWebFeedViewModel.swift; sourceTree = "<group>"; };
|
||||
17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWebFeedModel.swift; sourceTree = "<group>"; };
|
||||
3B3A328B238B820900314204 /* FeedWranglerAccountViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedWranglerAccountViewController.swift; sourceTree = "<group>"; };
|
||||
3B826DB02385C84800FC1ADB /* AccountsFeedWrangler.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AccountsFeedWrangler.xib; sourceTree = "<group>"; };
|
||||
3B826DCA2385C84800FC1ADB /* AccountsFeedWranglerWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsFeedWranglerWindowController.swift; sourceTree = "<group>"; };
|
||||
@ -1845,6 +1847,7 @@
|
||||
517630222336657E00E15FFF /* WebViewProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewProvider.swift; sourceTree = "<group>"; };
|
||||
517A745A2443665000B553B9 /* UIPageViewController-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIPageViewController-Extensions.swift"; sourceTree = "<group>"; };
|
||||
517A754424451BD500B553B9 /* OAuthSwift.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OAuthSwift.xcodeproj; path = submodules/OAuthSwift/OAuthSwift.xcodeproj; sourceTree = "<group>"; };
|
||||
5181C5AC24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferredColorSchemeModifier.swift; sourceTree = "<group>"; };
|
||||
5183CCCF226E1E880010922C /* NonIntrinsicLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonIntrinsicLabel.swift; sourceTree = "<group>"; };
|
||||
5183CCD9226E31A50010922C /* NonIntrinsicImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonIntrinsicImageView.swift; sourceTree = "<group>"; };
|
||||
5183CCE4226F4DFA0010922C /* RefreshInterval.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshInterval.swift; sourceTree = "<group>"; };
|
||||
@ -2408,7 +2411,7 @@
|
||||
17930ED224AF10CD00A9BA52 /* Add */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
17D232A724AFF10A0005F075 /* AddWebFeedViewModel.swift */,
|
||||
17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */,
|
||||
17930ED324AF10EE00A9BA52 /* AddWebFeedView.swift */,
|
||||
);
|
||||
path = Add;
|
||||
@ -2578,6 +2581,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
514E6C0524AD2B5F00AC6F6E /* Image-Extensions.swift */,
|
||||
5181C5AC24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift */,
|
||||
);
|
||||
path = "SwiftUI Extensions";
|
||||
sourceTree = "<group>";
|
||||
@ -3968,46 +3972,46 @@
|
||||
TargetAttributes = {
|
||||
51314636235A7BBE00387FDC = {
|
||||
CreatedOnToolsVersion = 11.2;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
LastSwiftMigration = 1120;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
513C5CE5232571C2003D4054 = {
|
||||
CreatedOnToolsVersion = 11.0;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
518B2ED12351B3DD00400001 = {
|
||||
CreatedOnToolsVersion = 11.2;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
TestTargetID = 840D617B2029031C009BC708;
|
||||
};
|
||||
51C0513C24A77DF800194D5E = {
|
||||
CreatedOnToolsVersion = 12.0;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
51C0514324A77DF800194D5E = {
|
||||
CreatedOnToolsVersion = 12.0;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
6581C73220CED60000F4AD34 = {
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
65ED3FA2235DEF6C0081F399 = {
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
65ED4090235DEF770081F399 = {
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
840D617B2029031C009BC708 = {
|
||||
CreatedOnToolsVersion = 9.3;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
SystemCapabilities = {
|
||||
com.apple.BackgroundModes = {
|
||||
@ -4017,7 +4021,7 @@
|
||||
};
|
||||
849C645F1ED37A5D003D8FC0 = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
SystemCapabilities = {
|
||||
com.apple.HardenedRuntime = {
|
||||
@ -4027,7 +4031,7 @@
|
||||
};
|
||||
849C64701ED37A5D003D8FC0 = {
|
||||
CreatedOnToolsVersion = 8.2.1;
|
||||
DevelopmentTeam = FQLBNX3GP7;
|
||||
DevelopmentTeam = SHJK2V3AJG;
|
||||
ProvisioningStyle = Automatic;
|
||||
TestTargetID = 849C645F1ED37A5D003D8FC0;
|
||||
};
|
||||
@ -4832,6 +4836,7 @@
|
||||
51E4996924A8760C00B667CB /* ArticleStylesManager.swift in Sources */,
|
||||
51E498F324A8085D00B667CB /* PseudoFeed.swift in Sources */,
|
||||
51A5769624AE617200078888 /* ArticleContainerView.swift in Sources */,
|
||||
5181C5AD24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift in Sources */,
|
||||
51E4996B24A8762D00B667CB /* ArticleExtractor.swift in Sources */,
|
||||
51E49A0324A91FF600B667CB /* SceneNavigationView.swift in Sources */,
|
||||
51E4990124A808BB00B667CB /* FaviconURLFinder.swift in Sources */,
|
||||
@ -4840,7 +4845,7 @@
|
||||
51A576BE24AE637400078888 /* ArticleView.swift in Sources */,
|
||||
51E4995324A8734D00B667CB /* RedditFeedProvider-Extensions.swift in Sources */,
|
||||
172199C924AB228900A31D04 /* SettingsView.swift in Sources */,
|
||||
17D232A824AFF10A0005F075 /* AddWebFeedViewModel.swift in Sources */,
|
||||
17D232A824AFF10A0005F075 /* AddWebFeedModel.swift in Sources */,
|
||||
51E4994224A8713C00B667CB /* ArticleStatusSyncTimer.swift in Sources */,
|
||||
51E498F624A8085D00B667CB /* SearchFeedDelegate.swift in Sources */,
|
||||
51E498F224A8085D00B667CB /* SmartFeedsController.swift in Sources */,
|
||||
@ -4915,12 +4920,13 @@
|
||||
51E4992224A8095600B667CB /* URL-Extensions.swift in Sources */,
|
||||
51E4990424A808C300B667CB /* WebFeedIconDownloader.swift in Sources */,
|
||||
51E498CB24A8085D00B667CB /* TodayFeedDelegate.swift in Sources */,
|
||||
17D232A924AFF10A0005F075 /* AddWebFeedViewModel.swift in Sources */,
|
||||
17D232A924AFF10A0005F075 /* AddWebFeedModel.swift in Sources */,
|
||||
51E4993324A867E700B667CB /* AppNotifications.swift in Sources */,
|
||||
51E4990624A808C300B667CB /* ImageDownloader.swift in Sources */,
|
||||
51E4994F24A8734C00B667CB /* TwitterFeedProvider-Extensions.swift in Sources */,
|
||||
51E498CA24A8085D00B667CB /* SmartFeedDelegate.swift in Sources */,
|
||||
51E4990524A808C300B667CB /* FeaturedImageDownloader.swift in Sources */,
|
||||
5181C5AE24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift in Sources */,
|
||||
51E4991624A8090300B667CB /* ArticleUtilities.swift in Sources */,
|
||||
51919FF224AB864A00541E64 /* TimelineModel.swift in Sources */,
|
||||
51E4991A24A8090F00B667CB /* IconImage.swift in Sources */,
|
||||
|
@ -12,7 +12,6 @@ import RSParser
|
||||
import AppKit
|
||||
typealias Font = NSFont
|
||||
typealias FontDescriptor = NSFontDescriptor
|
||||
typealias Color = NSColor
|
||||
|
||||
private let boldTrait = NSFontDescriptor.SymbolicTraits.bold
|
||||
private let italicTrait = NSFontDescriptor.SymbolicTraits.italic
|
||||
@ -21,7 +20,6 @@ private let monoSpaceTrait = NSFontDescriptor.SymbolicTraits.monoSpace
|
||||
import UIKit
|
||||
typealias Font = UIFont
|
||||
typealias FontDescriptor = UIFontDescriptor
|
||||
typealias Color = UIColor
|
||||
|
||||
private let boldTrait = UIFontDescriptor.SymbolicTraits.traitBold
|
||||
private let italicTrait = UIFontDescriptor.SymbolicTraits.traitItalic
|
||||
|
@ -1,23 +1,18 @@
|
||||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
},
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"red" : "0x08",
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xEE",
|
||||
"green" : "0x6A"
|
||||
"green" : "0x6A",
|
||||
"red" : "0x08"
|
||||
}
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
@ -27,12 +22,17 @@
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"red" : "0x5E",
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xF4",
|
||||
"green" : "0x9E"
|
||||
"green" : "0x9E",
|
||||
"red" : "0x5E"
|
||||
}
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
@ -1,20 +1,20 @@
|
||||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
},
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"red" : "249",
|
||||
"alpha" : "1.000",
|
||||
"blue" : "52",
|
||||
"green" : "198"
|
||||
"green" : "198",
|
||||
"red" : "249"
|
||||
}
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user