From b601c181dd0c43ea731067a2ff07d1bf2b200597 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Tue, 24 Dec 2024 12:09:41 -0800 Subject: [PATCH] Rename Master* to Main*. --- Mac/AppAssets.swift | 2 +- NetNewsWire.xcodeproj/project.pbxproj | 75 +---------- Shared/Extensions/SmallIconProvider.swift | 2 +- iOS/AppAssets.swift | 4 +- iOS/Base.lproj/Main.storyboard | 6 +- iOS/IconView.swift | 2 +- iOS/MainFeed/Cell/MainFeedTableViewCell.swift | 4 +- iOS/MainFeed/MainFeedViewController.swift | 8 +- .../MainTimelineAccessibilityCellLayout.swift | 90 +++++++++++++ .../Cell/MainTimelineCellData.swift} | 4 +- .../Cell/MainTimelineCellLayout.swift} | 40 +++--- .../Cell/MainTimelineDefaultCellLayout.swift | 126 ++++++++++++++++++ .../Cell/MainTimelineTableViewCell.swift} | 40 +++--- .../Cell/MainUnreadIndicatorView.swift} | 4 +- .../Cell/MultilineUILabelSizer.swift | 0 .../Cell/SingleLineUILabelSizer.swift | 0 .../MainTimelineDataSource.swift} | 6 +- .../MainTimelineTitleView.swift} | 8 +- .../MainTimelineTitleView.xib} | 11 +- .../MainTimelineUnreadCountView.swift} | 4 +- .../MainTimelineViewController.swift} | 48 +++---- .../MarkAsReadAlertController.swift | 0 ...asterTimelineAccessibilityCellLayout.swift | 90 ------------- .../MasterTimelineDefaultCellLayout.swift | 126 ------------------ iOS/SceneCoordinator.swift | 84 ++++++------ iOS/Settings/Settings.storyboard | 40 +++--- .../TimelinePreviewTableViewController.swift | 10 +- .../ShareFolderPickerController.swift | 2 +- iOS/UIKit Extensions/NonIntrinsicLabel.swift | 2 +- 29 files changed, 385 insertions(+), 453 deletions(-) create mode 100644 iOS/MainTimeline/Cell/MainTimelineAccessibilityCellLayout.swift rename iOS/{MasterTimeline/Cell/MasterTimelineCellData.swift => MainTimeline/Cell/MainTimelineCellData.swift} (96%) rename iOS/{MasterTimeline/Cell/MasterTimelineCellLayout.swift => MainTimeline/Cell/MainTimelineCellLayout.swift} (61%) create mode 100644 iOS/MainTimeline/Cell/MainTimelineDefaultCellLayout.swift rename iOS/{MasterTimeline/Cell/MasterTimelineTableViewCell.swift => MainTimeline/Cell/MainTimelineTableViewCell.swift} (87%) rename iOS/{MasterTimeline/Cell/MasterUnreadIndicatorView.swift => MainTimeline/Cell/MainUnreadIndicatorView.swift} (78%) rename iOS/{MasterTimeline => MainTimeline}/Cell/MultilineUILabelSizer.swift (100%) rename iOS/{MasterTimeline => MainTimeline}/Cell/SingleLineUILabelSizer.swift (100%) rename iOS/{MasterTimeline/MasterTimelineDataSource.swift => MainTimeline/MainTimelineDataSource.swift} (50%) rename iOS/{MasterTimeline/MasterTimelineTitleView.swift => MainTimeline/MainTimelineTitleView.swift} (87%) rename iOS/{MasterTimeline/MasterTimelineTitleView.xib => MainTimeline/MainTimelineTitleView.xib} (93%) rename iOS/{MasterTimeline/MasterTimelineUnreadCountView.swift => MainTimeline/MainTimelineUnreadCountView.swift} (89%) rename iOS/{MasterTimeline/MasterTimelineViewController.swift => MainTimeline/MainTimelineViewController.swift} (94%) rename iOS/{MasterTimeline => MainTimeline}/MarkAsReadAlertController.swift (100%) delete mode 100644 iOS/MasterTimeline/Cell/MasterTimelineAccessibilityCellLayout.swift delete mode 100644 iOS/MasterTimeline/Cell/MasterTimelineDefaultCellLayout.swift diff --git a/Mac/AppAssets.swift b/Mac/AppAssets.swift index 88a00e350..dc8030b0a 100644 --- a/Mac/AppAssets.swift +++ b/Mac/AppAssets.swift @@ -145,7 +145,7 @@ struct AppAssets { return RSImage(named: "legacyArticleExtractorProgress4") }() - static var masterFolderImage: IconImage { + static var mainFolderImage: IconImage { if #available(macOS 11.0, *) { let image = NSImage(systemSymbolName: "folder", accessibilityDescription: nil)! let preferredColor = NSColor(named: "AccentColor")! diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 1bdc236a6..e273355ee 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -164,8 +164,6 @@ 5144EA40227A37EC00D19003 /* ImportOPMLWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA3E227A37EC00D19003 /* ImportOPMLWindowController.swift */; }; 5144EA51227B8E4500D19003 /* AccountsFeedbinWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA4F227B8E4500D19003 /* AccountsFeedbinWindowController.swift */; }; 5144EA52227B8E4500D19003 /* AccountsFeedbin.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5144EA50227B8E4500D19003 /* AccountsFeedbin.xib */; }; - 5148F44B2336DB4700F8CD8B /* MasterTimelineTitleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5148F44A2336DB4700F8CD8B /* MasterTimelineTitleView.xib */; }; - 5148F4552336DB7000F8CD8B /* MasterTimelineTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5148F4542336DB7000F8CD8B /* MasterTimelineTitleView.swift */; }; 514B7C8323205EFB00BAC947 /* RootSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514B7C8223205EFB00BAC947 /* RootSplitViewController.swift */; }; 514C16CE24D2E63F009A3AFA /* Account in Frameworks */ = {isa = PBXBuildFile; productRef = 514C16CD24D2E63F009A3AFA /* Account */; }; 514C16DE24D2EF15009A3AFA /* RSTree in Frameworks */ = {isa = PBXBuildFile; productRef = 514C16DD24D2EF15009A3AFA /* RSTree */; }; @@ -262,12 +260,6 @@ 51C45259226508D300C03939 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45255226507D200C03939 /* AppDefaults.swift */; }; 51C4525A226508D600C03939 /* UIStoryboard-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C4524E226506F400C03939 /* UIStoryboard-Extensions.swift */; }; 51C4525C226508DF00C03939 /* String-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45250226506F400C03939 /* String-Extensions.swift */; }; - 51C452762265091600C03939 /* MasterTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C4526E2265091600C03939 /* MasterTimelineViewController.swift */; }; - 51C452772265091600C03939 /* MultilineUILabelSizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452702265091600C03939 /* MultilineUILabelSizer.swift */; }; - 51C452782265091600C03939 /* MasterTimelineCellData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452712265091600C03939 /* MasterTimelineCellData.swift */; }; - 51C452792265091600C03939 /* MasterTimelineTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452722265091600C03939 /* MasterTimelineTableViewCell.swift */; }; - 51C4527B2265091600C03939 /* MasterUnreadIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452742265091600C03939 /* MasterUnreadIndicatorView.swift */; }; - 51C4527C2265091600C03939 /* MasterTimelineDefaultCellLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452752265091600C03939 /* MasterTimelineDefaultCellLayout.swift */; }; 51C4527F2265092C00C03939 /* ArticleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C4527E2265092C00C03939 /* ArticleViewController.swift */; }; 51C452862265093600C03939 /* Add.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 51C452822265093600C03939 /* Add.storyboard */; }; 51C452882265093600C03939 /* AddFeedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452842265093600C03939 /* AddFeedViewController.swift */; }; @@ -307,7 +299,6 @@ 51D0214626ED617100FF2E0F /* core.css in Resources */ = {isa = PBXBuildFile; fileRef = 51D0214526ED617100FF2E0F /* core.css */; }; 51D0214826ED617100FF2E0F /* core.css in Resources */ = {isa = PBXBuildFile; fileRef = 51D0214526ED617100FF2E0F /* core.css */; }; 51D5948722668EFA00DFC836 /* MarkStatusCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84702AA31FA27AC0006B8943 /* MarkStatusCommand.swift */; }; - 51D6A5BC23199C85001C27D8 /* MasterTimelineDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D6A5BB23199C85001C27D8 /* MasterTimelineDataSource.swift */; }; 51D87EE12311D34700E63F03 /* ActivityType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D87EE02311D34700E63F03 /* ActivityType.swift */; }; 51DC07982552083500A3F79F /* ArticleTextSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51DC07972552083500A3F79F /* ArticleTextSize.swift */; }; 51DC079A2552083500A3F79F /* ArticleTextSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51DC07972552083500A3F79F /* ArticleTextSize.swift */; }; @@ -332,8 +323,6 @@ 51EF0F77227716200050506E /* FaviconGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51EF0F76227716200050506E /* FaviconGenerator.swift */; }; 51EF0F79227716380050506E /* ColorHash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51EF0F78227716380050506E /* ColorHash.swift */; }; 51EF0F7A22771B890050506E /* ColorHash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51EF0F78227716380050506E /* ColorHash.swift */; }; - 51EF0F7E2277A57D0050506E /* MasterTimelineAccessibilityCellLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51EF0F7D2277A57D0050506E /* MasterTimelineAccessibilityCellLayout.swift */; }; - 51EF0F802277A8330050506E /* MasterTimelineCellLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51EF0F7F2277A8330050506E /* MasterTimelineCellLayout.swift */; }; 51EFDA1B24E6D16A0085C3D6 /* SafariExt.js in Resources */ = {isa = PBXBuildFile; fileRef = 515D4FCB2325815A00EE1167 /* SafariExt.js */; }; 51F85BEB22724CB600C787DC /* About.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 51F85BEA22724CB600C787DC /* About.rtf */; }; 51F85BEF2272520B00C787DC /* Thanks.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 51F85BEE2272520B00C787DC /* Thanks.rtf */; }; @@ -343,7 +332,6 @@ 51F85BF722749FA100C787DC /* UIFont-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F85BF622749FA100C787DC /* UIFont-Extensions.swift */; }; 51F85BF92274AA7B00C787DC /* UIBarButtonItem-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F85BF82274AA7B00C787DC /* UIBarButtonItem-Extensions.swift */; }; 51F85BFB2275D85000C787DC /* Array-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F85BFA2275D85000C787DC /* Array-Extensions.swift */; }; - 51F85BFD2275DCA800C787DC /* SingleLineUILabelSizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F85BFC2275DCA800C787DC /* SingleLineUILabelSizer.swift */; }; 51F9F3F723DF6DB200A314FD /* ArticleIconSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F9F3F623DF6DB200A314FD /* ArticleIconSchemeHandler.swift */; }; 51F9F3F923DFB16300A314FD /* UITableView-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F9F3F823DFB16300A314FD /* UITableView-Extensions.swift */; }; 51F9F3FB23DFB25700A314FD /* Animations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F9F3FA23DFB25700A314FD /* Animations.swift */; }; @@ -352,7 +340,6 @@ 51FA73A72332BE880090D516 /* ExtractedArticle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FA73A62332BE880090D516 /* ExtractedArticle.swift */; }; 51FA73A82332BE880090D516 /* ExtractedArticle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FA73A62332BE880090D516 /* ExtractedArticle.swift */; }; 51FA73B72332D5F70090D516 /* LegacyArticleExtractorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FA73B62332D5F70090D516 /* LegacyArticleExtractorButton.swift */; }; - 51FD413B2342BD0500880194 /* MasterTimelineUnreadCountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FD413A2342BD0500880194 /* MasterTimelineUnreadCountView.swift */; }; 51FE10032345529D0056195D /* UserNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FE10022345529D0056195D /* UserNotificationManager.swift */; }; 51FE10042345529D0056195D /* UserNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51FE10022345529D0056195D /* UserNotificationManager.swift */; }; 51FE10092346739D0056195D /* ActivityType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D87EE02311D34700E63F03 /* ActivityType.swift */; }; @@ -549,7 +536,6 @@ FF3ABF13232599810074C542 /* ArticleSorterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF3ABF09232599450074C542 /* ArticleSorterTests.swift */; }; FF3ABF1523259DDB0074C542 /* ArticleSorter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */; }; FF3ABF162325AF5D0074C542 /* ArticleSorter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */; }; - FFD43E412340F488009E5CA3 /* MarkAsReadAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -852,8 +838,6 @@ 5144EA3E227A37EC00D19003 /* ImportOPMLWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportOPMLWindowController.swift; sourceTree = ""; }; 5144EA4F227B8E4500D19003 /* AccountsFeedbinWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsFeedbinWindowController.swift; sourceTree = ""; }; 5144EA50227B8E4500D19003 /* AccountsFeedbin.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AccountsFeedbin.xib; sourceTree = ""; }; - 5148F44A2336DB4700F8CD8B /* MasterTimelineTitleView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MasterTimelineTitleView.xib; sourceTree = ""; }; - 5148F4542336DB7000F8CD8B /* MasterTimelineTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineTitleView.swift; sourceTree = ""; }; 514B7C8223205EFB00BAC947 /* RootSplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootSplitViewController.swift; sourceTree = ""; }; 515D4FCB2325815A00EE1167 /* SafariExt.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SafariExt.js; sourceTree = ""; }; 515D4FCD2325909200EE1167 /* NetNewsWire_iOS_ShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NetNewsWire_iOS_ShareExtension.entitlements; sourceTree = ""; }; @@ -915,12 +899,6 @@ 51C45250226506F400C03939 /* String-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String-Extensions.swift"; sourceTree = ""; }; 51C45254226507D200C03939 /* AppAssets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppAssets.swift; sourceTree = ""; }; 51C45255226507D200C03939 /* AppDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDefaults.swift; sourceTree = ""; }; - 51C4526E2265091600C03939 /* MasterTimelineViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterTimelineViewController.swift; sourceTree = ""; }; - 51C452702265091600C03939 /* MultilineUILabelSizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultilineUILabelSizer.swift; sourceTree = ""; }; - 51C452712265091600C03939 /* MasterTimelineCellData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterTimelineCellData.swift; sourceTree = ""; }; - 51C452722265091600C03939 /* MasterTimelineTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterTimelineTableViewCell.swift; sourceTree = ""; }; - 51C452742265091600C03939 /* MasterUnreadIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterUnreadIndicatorView.swift; sourceTree = ""; }; - 51C452752265091600C03939 /* MasterTimelineDefaultCellLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterTimelineDefaultCellLayout.swift; sourceTree = ""; }; 51C4527E2265092C00C03939 /* ArticleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArticleViewController.swift; sourceTree = ""; }; 51C452822265093600C03939 /* Add.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Add.storyboard; sourceTree = ""; }; 51C452842265093600C03939 /* AddFeedViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddFeedViewController.swift; sourceTree = ""; }; @@ -934,7 +912,6 @@ 51CD32C624D2DEF9009ABAEF /* Account */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Account; sourceTree = ""; }; 51CD32C724D2E06C009ABAEF /* Secrets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Secrets; sourceTree = ""; }; 51D0214526ED617100FF2E0F /* core.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = core.css; sourceTree = ""; }; - 51D6A5BB23199C85001C27D8 /* MasterTimelineDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineDataSource.swift; sourceTree = ""; }; 51D87EE02311D34700E63F03 /* ActivityType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityType.swift; sourceTree = ""; }; 51DC07972552083500A3F79F /* ArticleTextSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleTextSize.swift; sourceTree = ""; }; 51DC370A2405BC9A0095D371 /* PreloadedWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreloadedWebView.swift; sourceTree = ""; }; @@ -956,8 +933,6 @@ 51EC114B2149FE3300B296E3 /* FolderTreeMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FolderTreeMenu.swift; path = AddFeed/FolderTreeMenu.swift; sourceTree = ""; }; 51EF0F76227716200050506E /* FaviconGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconGenerator.swift; sourceTree = ""; }; 51EF0F78227716380050506E /* ColorHash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorHash.swift; sourceTree = ""; }; - 51EF0F7D2277A57D0050506E /* MasterTimelineAccessibilityCellLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineAccessibilityCellLayout.swift; sourceTree = ""; }; - 51EF0F7F2277A8330050506E /* MasterTimelineCellLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineCellLayout.swift; sourceTree = ""; }; 51F805D32428499E0022C792 /* NetNewsWire-dev.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "NetNewsWire-dev.entitlements"; sourceTree = ""; }; 51F805ED24284C1C0022C792 /* NetNewsWire-dev.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "NetNewsWire-dev.entitlements"; sourceTree = ""; }; 51F85BEA22724CB600C787DC /* About.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = About.rtf; sourceTree = ""; }; @@ -968,14 +943,12 @@ 51F85BF622749FA100C787DC /* UIFont-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont-Extensions.swift"; sourceTree = ""; }; 51F85BF82274AA7B00C787DC /* UIBarButtonItem-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIBarButtonItem-Extensions.swift"; sourceTree = ""; }; 51F85BFA2275D85000C787DC /* Array-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array-Extensions.swift"; sourceTree = ""; }; - 51F85BFC2275DCA800C787DC /* SingleLineUILabelSizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleLineUILabelSizer.swift; sourceTree = ""; }; 51F9F3F623DF6DB200A314FD /* ArticleIconSchemeHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleIconSchemeHandler.swift; sourceTree = ""; }; 51F9F3F823DFB16300A314FD /* UITableView-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableView-Extensions.swift"; sourceTree = ""; }; 51F9F3FA23DFB25700A314FD /* Animations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Animations.swift; sourceTree = ""; }; 51FA73A32332BE110090D516 /* ArticleExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleExtractor.swift; sourceTree = ""; }; 51FA73A62332BE880090D516 /* ExtractedArticle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtractedArticle.swift; sourceTree = ""; }; 51FA73B62332D5F70090D516 /* LegacyArticleExtractorButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyArticleExtractorButton.swift; sourceTree = ""; }; - 51FD413A2342BD0500880194 /* MasterTimelineUnreadCountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineUnreadCountView.swift; sourceTree = ""; }; 51FE10022345529D0056195D /* UserNotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserNotificationManager.swift; sourceTree = ""; }; 51FFF0C3235EE8E5002762AA /* VibrantButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VibrantButton.swift; sourceTree = ""; }; 55E15BC1229D65A900D6602A /* AccountsReaderAPI.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AccountsReaderAPI.xib; sourceTree = ""; }; @@ -1182,11 +1155,11 @@ DFD6AACD27ADE86E00463FAD /* NewsFax.nnwtheme */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = NewsFax.nnwtheme; sourceTree = ""; }; FF3ABF09232599450074C542 /* ArticleSorterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSorterTests.swift; sourceTree = ""; }; FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSorter.swift; sourceTree = ""; }; - FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkAsReadAlertController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ 84352B8A2D1B446D0002B64E /* MainFeed */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = MainFeed; sourceTree = ""; }; + 84A6CE4F2D1B457500F23315 /* MainTimeline */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = MainTimeline; sourceTree = ""; }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1570,35 +1543,6 @@ path = "UIKit Extensions"; sourceTree = ""; }; - 51C4526D2265091600C03939 /* MasterTimeline */ = { - isa = PBXGroup; - children = ( - 51C4526E2265091600C03939 /* MasterTimelineViewController.swift */, - 51D6A5BB23199C85001C27D8 /* MasterTimelineDataSource.swift */, - 5148F4542336DB7000F8CD8B /* MasterTimelineTitleView.swift */, - 5148F44A2336DB4700F8CD8B /* MasterTimelineTitleView.xib */, - 51FD413A2342BD0500880194 /* MasterTimelineUnreadCountView.swift */, - FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */, - 51C4526F2265091600C03939 /* Cell */, - ); - path = MasterTimeline; - sourceTree = ""; - }; - 51C4526F2265091600C03939 /* Cell */ = { - isa = PBXGroup; - children = ( - 51EF0F7D2277A57D0050506E /* MasterTimelineAccessibilityCellLayout.swift */, - 51C452712265091600C03939 /* MasterTimelineCellData.swift */, - 51EF0F7F2277A8330050506E /* MasterTimelineCellLayout.swift */, - 51C452752265091600C03939 /* MasterTimelineDefaultCellLayout.swift */, - 51C452722265091600C03939 /* MasterTimelineTableViewCell.swift */, - 51C452742265091600C03939 /* MasterUnreadIndicatorView.swift */, - 51C452702265091600C03939 /* MultilineUILabelSizer.swift */, - 51F85BFC2275DCA800C787DC /* SingleLineUILabelSizer.swift */, - ); - path = Cell; - sourceTree = ""; - }; 51C4527D2265092C00C03939 /* Article */ = { isa = PBXGroup; children = ( @@ -2159,7 +2103,7 @@ C5A6ED5123C9AF4300AB6BE2 /* TitleActivityItemSource.swift */, 51B62E67233186730085F949 /* IconView.swift */, 84352B8A2D1B446D0002B64E /* MainFeed */, - 51C4526D2265091600C03939 /* MasterTimeline */, + 84A6CE4F2D1B457500F23315 /* MainTimeline */, 51C4527D2265092C00C03939 /* Article */, 516A093E236123A800EAE89B /* Account */, 51C452802265093600C03939 /* Add */, @@ -2471,6 +2415,7 @@ ); fileSystemSynchronizedGroups = ( 84352B8A2D1B446D0002B64E /* MainFeed */, + 84A6CE4F2D1B457500F23315 /* MainTimeline */, ); name = "NetNewsWire-iOS"; packageProductDependencies = ( @@ -2721,7 +2666,6 @@ files = ( 5137C2E626F3F52D009EFEDB /* Sepia.nnwtheme in Resources */, 517630052336215100E15FFF /* main.js in Resources */, - 5148F44B2336DB4700F8CD8B /* MasterTimelineTitleView.xib in Resources */, 511D43D0231FA62500FB1562 /* TimelineKeyboardShortcuts.plist in Resources */, 51C452862265093600C03939 /* Add.storyboard in Resources */, 511D43EF231FBDE900FB1562 /* LaunchScreenPad.storyboard in Resources */, @@ -3087,7 +3031,6 @@ 518ED21D23D0F26000E0A862 /* UIViewController-Extensions.swift in Sources */, 51A9A5F52380F6A60033AADF /* ModalNavigationController.swift in Sources */, 51EAED96231363EF00A9EEE3 /* NonIntrinsicButton.swift in Sources */, - 51C4527B2265091600C03939 /* MasterUnreadIndicatorView.swift in Sources */, 5186A635235EF3A800C97195 /* VibrantLabel.swift in Sources */, 51F85BF92274AA7B00C787DC /* UIBarButtonItem-Extensions.swift in Sources */, 51B62E68233186730085F949 /* IconView.swift in Sources */, @@ -3096,14 +3039,11 @@ 51C45291226509C800C03939 /* SmartFeed.swift in Sources */, 51C452A722650A3D00C03939 /* RSImage-Extensions.swift in Sources */, 511B9807237DCAC90028BCAA /* UserInfoKey.swift in Sources */, - 51F85BFD2275DCA800C787DC /* SingleLineUILabelSizer.swift in Sources */, 517630232336657E00E15FFF /* WebViewProvider.swift in Sources */, 51E43962238037C400015C31 /* AddFeedFolderViewController.swift in Sources */, 51C4528F226509BD00C03939 /* UnreadFeed.swift in Sources */, - 51FD413B2342BD0500880194 /* MasterTimelineUnreadCountView.swift in Sources */, 513146B2235A81A400387FDC /* AddWebFeedIntentHandler.swift in Sources */, 51D87EE12311D34700E63F03 /* ActivityType.swift in Sources */, - 51C452772265091600C03939 /* MultilineUILabelSizer.swift in Sources */, 51C452A522650A2D00C03939 /* SmallIconProvider.swift in Sources */, 51AB8AB323B7F4C6008F147D /* WebViewController.swift in Sources */, 516A09392360A2AE00EAE89B /* SettingsComboTableViewCell.swift in Sources */, @@ -3120,7 +3060,6 @@ FF3ABF162325AF5D0074C542 /* ArticleSorter.swift in Sources */, 51C4525C226508DF00C03939 /* String-Extensions.swift in Sources */, 51F9F3F923DFB16300A314FD /* UITableView-Extensions.swift in Sources */, - 51C452792265091600C03939 /* MasterTimelineTableViewCell.swift in Sources */, 5126EE97226CB48A00C22AFC /* SceneCoordinator.swift in Sources */, 84CAFCB022BC8C35007694F0 /* FetchRequestOperation.swift in Sources */, 51EF0F77227716200050506E /* FaviconGenerator.swift in Sources */, @@ -3151,7 +3090,6 @@ 516244E3241E19F000B61C47 /* ColorPaletteTableViewController.swift in Sources */, 51C45258226508CF00C03939 /* AppAssets.swift in Sources */, 51FA73A82332BE880090D516 /* ExtractedArticle.swift in Sources */, - 51C4527C2265091600C03939 /* MasterTimelineDefaultCellLayout.swift in Sources */, 51E4398023805EBC00015C31 /* AddComboTableViewCell.swift in Sources */, 51C4529A22650A0400C03939 /* ArticleTheme.swift in Sources */, 51C4527F2265092C00C03939 /* ArticleViewController.swift in Sources */, @@ -3160,7 +3098,6 @@ 51A9A60A2382FD240033AADF /* PoppableGestureRecognizerDelegate.swift in Sources */, 51DC079A2552083500A3F79F /* ArticleTextSize.swift in Sources */, 51C4529922650A0000C03939 /* ArticleThemesManager.swift in Sources */, - 51EF0F802277A8330050506E /* MasterTimelineCellLayout.swift in Sources */, 51F85BF722749FA100C787DC /* UIFont-Extensions.swift in Sources */, 51C452AF2265108300C03939 /* ArticleArray.swift in Sources */, 51C4528E2265099C00C03939 /* SmartFeedsController.swift in Sources */, @@ -3184,10 +3121,8 @@ 5110C37D2373A8D100A9C04F /* InspectorIconHeaderView.swift in Sources */, 51F85BFB2275D85000C787DC /* Array-Extensions.swift in Sources */, 51C452AC22650FD200C03939 /* AppNotifications.swift in Sources */, - 51EF0F7E2277A57D0050506E /* MasterTimelineAccessibilityCellLayout.swift in Sources */, 51A1699B235E10D700EB091F /* AccountInspectorViewController.swift in Sources */, 512D554423C804DE0023FFFA /* OpenInSafariActivity.swift in Sources */, - 51C452762265091600C03939 /* MasterTimelineViewController.swift in Sources */, 5108F6D823763094001ABC45 /* TickMarkSlider.swift in Sources */, 51C452882265093600C03939 /* AddFeedViewController.swift in Sources */, 51B5C8C023F3866C00032075 /* ExtensionFeedAddRequestFile.swift in Sources */, @@ -3213,18 +3148,14 @@ 51C4529F22650A1900C03939 /* AuthorAvatarDownloader.swift in Sources */, 5108F6D22375EED2001ABC45 /* TimelineCustomizerViewController.swift in Sources */, 519E743D22C663F900A78E47 /* SceneDelegate.swift in Sources */, - FFD43E412340F488009E5CA3 /* MarkAsReadAlertController.swift in Sources */, 51C4528D2265095F00C03939 /* AddFolderViewController.swift in Sources */, 8413C1382D050A1E002E3D0F /* UniformTypeIdentifiers+Extras.swift in Sources */, - 51C452782265091600C03939 /* MasterTimelineCellData.swift in Sources */, - 5148F4552336DB7000F8CD8B /* MasterTimelineTitleView.swift in Sources */, 51FFF0C4235EE8E5002762AA /* VibrantButton.swift in Sources */, 51C45259226508D300C03939 /* AppDefaults.swift in Sources */, 510FFAB326EEA22C00F32265 /* ArticleThemesTableViewController.swift in Sources */, 511D4419231FC02D00FB1562 /* KeyboardManager.swift in Sources */, 51A1699D235E10D700EB091F /* SettingsViewController.swift in Sources */, 51C45293226509C800C03939 /* StarredFeedDelegate.swift in Sources */, - 51D6A5BC23199C85001C27D8 /* MasterTimelineDataSource.swift in Sources */, 769F2ED513DA03EE75B993A8 /* NewsBlurAccountViewController.swift in Sources */, 51BC4B01247277E0000A6ED8 /* URL-Extensions.swift in Sources */, ); diff --git a/Shared/Extensions/SmallIconProvider.swift b/Shared/Extensions/SmallIconProvider.swift index a26b83fb6..292d84f36 100644 --- a/Shared/Extensions/SmallIconProvider.swift +++ b/Shared/Extensions/SmallIconProvider.swift @@ -37,6 +37,6 @@ extension WebFeed: SmallIconProvider { extension Folder: SmallIconProvider { var smallIcon: IconImage? { - AppAssets.masterFolderImage + AppAssets.mainFolderImage } } diff --git a/iOS/AppAssets.swift b/iOS/AppAssets.swift index 4f709e7ff..7a2255e8e 100644 --- a/iOS/AppAssets.swift +++ b/iOS/AppAssets.swift @@ -147,11 +147,11 @@ struct AppAssets { return UIImage(systemName: "arrowtriangle.up.circle")! }() - static var masterFolderImage: IconImage = { + static var mainFolderImage: IconImage = { return IconImage(UIImage(systemName: "folder.fill")!, isSymbol: true, isBackgroundSupressed: true, preferredColor: AppAssets.secondaryAccentColor.cgColor) }() - static var masterFolderImageNonIcon: UIImage = { + static var mainFolderImageNonIcon: UIImage = { return UIImage(systemName: "folder.fill")!.withRenderingMode(.alwaysOriginal).withTintColor(.secondaryLabel) }() diff --git a/iOS/Base.lproj/Main.storyboard b/iOS/Base.lproj/Main.storyboard index 4d05018e1..beb42c639 100644 --- a/iOS/Base.lproj/Main.storyboard +++ b/iOS/Base.lproj/Main.storyboard @@ -113,13 +113,13 @@ - + - + @@ -173,7 +173,7 @@ - + diff --git a/iOS/IconView.swift b/iOS/IconView.swift index 90c61b150..7d1e841e5 100644 --- a/iOS/IconView.swift +++ b/iOS/IconView.swift @@ -77,7 +77,7 @@ final class IconView: UIView { private extension IconView { func commonInit() { - layer.cornerRadius = MasterTimelineDefaultCellLayout.iconCornerRadius + layer.cornerRadius = MainTimelineDefaultCellLayout.iconCornerRadius clipsToBounds = true addSubview(imageView) } diff --git a/iOS/MainFeed/Cell/MainFeedTableViewCell.swift b/iOS/MainFeed/Cell/MainFeedTableViewCell.swift index 54fc3ffd7..5671cb712 100644 --- a/iOS/MainFeed/Cell/MainFeedTableViewCell.swift +++ b/iOS/MainFeed/Cell/MainFeedTableViewCell.swift @@ -12,7 +12,7 @@ import Account import RSTree protocol MainFeedTableViewCellDelegate: AnyObject { - func masterFeedTableViewCellDisclosureDidToggle(_ sender: MainFeedTableViewCell, expanding: Bool) + func mainFeedTableViewCellDisclosureDidToggle(_ sender: MainFeedTableViewCell, expanding: Bool) } class MainFeedTableViewCell : VibrantTableViewCell { @@ -149,7 +149,7 @@ class MainFeedTableViewCell : VibrantTableViewCell { @objc func buttonPressed(_ sender: UIButton) { if isDisclosureAvailable { setDisclosure(isExpanded: !isDisclosureExpanded, animated: true) - delegate?.masterFeedTableViewCellDisclosureDidToggle(self, expanding: isDisclosureExpanded) + delegate?.mainFeedTableViewCellDisclosureDidToggle(self, expanding: isDisclosureExpanded) } } diff --git a/iOS/MainFeed/MainFeedViewController.swift b/iOS/MainFeed/MainFeedViewController.swift index a18cc5eeb..5ddef3479 100644 --- a/iOS/MainFeed/MainFeedViewController.swift +++ b/iOS/MainFeed/MainFeedViewController.swift @@ -549,7 +549,7 @@ class MainFeedViewController: UITableViewController, UndoableCommandRunner { // MARK: API func restoreSelectionIfNecessary(adjustScroll: Bool) { - if let indexPath = coordinator.masterFeedIndexPathForCurrentTimeline() { + if let indexPath = coordinator.mainFeedIndexPathForCurrentTimeline() { if adjustScroll { tableView.selectRowAndScrollIfNotVisible(at: indexPath, animations: []) } else { @@ -722,7 +722,7 @@ extension MainFeedViewController: UIContextMenuInteractionDelegate { } } -// MARK: MasterFeedTableViewSectionHeaderDelegate +// MARK: MainFeedTableViewSectionHeaderDelegate extension MainFeedViewController: MainFeedTableViewSectionHeaderDelegate { @@ -732,11 +732,11 @@ extension MainFeedViewController: MainFeedTableViewSectionHeaderDelegate { } -// MARK: MasterTableViewCellDelegate +// MARK: MainTableViewCellDelegate extension MainFeedViewController: MainFeedTableViewCellDelegate { - func masterFeedTableViewCellDisclosureDidToggle(_ sender: MainFeedTableViewCell, expanding: Bool) { + func mainFeedTableViewCellDisclosureDidToggle(_ sender: MainFeedTableViewCell, expanding: Bool) { if expanding { expand(sender) } else { diff --git a/iOS/MainTimeline/Cell/MainTimelineAccessibilityCellLayout.swift b/iOS/MainTimeline/Cell/MainTimelineAccessibilityCellLayout.swift new file mode 100644 index 000000000..c72345ae1 --- /dev/null +++ b/iOS/MainTimeline/Cell/MainTimelineAccessibilityCellLayout.swift @@ -0,0 +1,90 @@ +// +// MainTimelineAccessibilityCellLayout.swift +// NetNewsWire-iOS +// +// Created by Maurice Parker on 4/29/19. +// Copyright © 2019 Ranchero Software. All rights reserved. +// + +import UIKit +import RSCore + +struct MainTimelineAccessibilityCellLayout: MainTimelineCellLayout { + + let height: CGFloat + let unreadIndicatorRect: CGRect + let starRect: CGRect + let iconImageRect: CGRect + let titleRect: CGRect + let summaryRect: CGRect + let feedNameRect: CGRect + let dateRect: CGRect + + init(width: CGFloat, insets: UIEdgeInsets, cellData: MainTimelineCellData) { + + var currentPoint = CGPoint.zero + currentPoint.x = MainTimelineDefaultCellLayout.cellPadding.left + insets.left + MainTimelineDefaultCellLayout.unreadCircleMarginLeft + currentPoint.y = MainTimelineDefaultCellLayout.cellPadding.top + + // Unread Indicator and Star + self.unreadIndicatorRect = MainTimelineAccessibilityCellLayout.rectForUnreadIndicator(currentPoint) + self.starRect = MainTimelineAccessibilityCellLayout.rectForStar(currentPoint) + + // Start the point at the beginning position of the main block + currentPoint.x += MainTimelineDefaultCellLayout.unreadCircleDimension + MainTimelineDefaultCellLayout.unreadCircleMarginRight + + // Icon Image + if cellData.showIcon { + self.iconImageRect = MainTimelineAccessibilityCellLayout.rectForIconView(currentPoint, iconSize: cellData.iconSize) + currentPoint.y = self.iconImageRect.maxY + } else { + self.iconImageRect = CGRect.zero + } + + let textAreaWidth = width - (currentPoint.x + MainTimelineDefaultCellLayout.cellPadding.right + insets.right) + + // Title Text Block + let (titleRect, numberOfLinesForTitle) = MainTimelineAccessibilityCellLayout.rectForTitle(cellData, currentPoint, textAreaWidth) + self.titleRect = titleRect + + // Summary Text Block + if self.titleRect != CGRect.zero { + currentPoint.y = self.titleRect.maxY + MainTimelineDefaultCellLayout.titleBottomMargin + } + self.summaryRect = MainTimelineAccessibilityCellLayout.rectForSummary(cellData, currentPoint, textAreaWidth, numberOfLinesForTitle) + + currentPoint.y = [self.titleRect, self.summaryRect].maxY() + + if cellData.showFeedName != .none { + self.feedNameRect = MainTimelineAccessibilityCellLayout.rectForFeedName(cellData, currentPoint, textAreaWidth) + currentPoint.y = self.feedNameRect.maxY + } else { + self.feedNameRect = CGRect.zero + } + + // Feed Name and Pub Date + self.dateRect = MainTimelineAccessibilityCellLayout.rectForDate(cellData, currentPoint, textAreaWidth) + + self.height = self.dateRect.maxY + MainTimelineDefaultCellLayout.cellPadding.bottom + + } + +} + +// MARK: - Calculate Rects + +private extension MainTimelineAccessibilityCellLayout { + + static func rectForDate(_ cellData: MainTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> CGRect { + + var r = CGRect.zero + + let size = SingleLineUILabelSizer.size(for: cellData.dateString, font: MainTimelineDefaultCellLayout.dateFont) + r.size = size + r.origin = point + + return r + + } + +} diff --git a/iOS/MasterTimeline/Cell/MasterTimelineCellData.swift b/iOS/MainTimeline/Cell/MainTimelineCellData.swift similarity index 96% rename from iOS/MasterTimeline/Cell/MasterTimelineCellData.swift rename to iOS/MainTimeline/Cell/MainTimelineCellData.swift index 4d30eb5bf..397f60409 100644 --- a/iOS/MasterTimeline/Cell/MasterTimelineCellData.swift +++ b/iOS/MainTimeline/Cell/MainTimelineCellData.swift @@ -1,5 +1,5 @@ // -// MasterTimelineCellData.swift +// MainTimelineCellData.swift // NetNewsWire // // Created by Brent Simmons on 2/6/16. @@ -9,7 +9,7 @@ import UIKit import Articles -struct MasterTimelineCellData { +struct MainTimelineCellData { private static let noText = NSLocalizedString("(No Text)", comment: "No Text") diff --git a/iOS/MasterTimeline/Cell/MasterTimelineCellLayout.swift b/iOS/MainTimeline/Cell/MainTimelineCellLayout.swift similarity index 61% rename from iOS/MasterTimeline/Cell/MasterTimelineCellLayout.swift rename to iOS/MainTimeline/Cell/MainTimelineCellLayout.swift index 6913a3989..5d8ba6b69 100644 --- a/iOS/MasterTimeline/Cell/MasterTimelineCellLayout.swift +++ b/iOS/MainTimeline/Cell/MainTimelineCellLayout.swift @@ -1,5 +1,5 @@ // -// MasterTimelineCellLayout.swift +// MainTimelineCellLayout.swift // NetNewsWire-iOS // // Created by Maurice Parker on 4/29/19. @@ -8,8 +8,8 @@ import UIKit -protocol MasterTimelineCellLayout { - +protocol MainTimelineCellLayout { + var height: CGFloat {get} var unreadIndicatorRect: CGRect {get} var starRect: CGRect {get} @@ -21,11 +21,11 @@ protocol MasterTimelineCellLayout { } -extension MasterTimelineCellLayout { - +extension MainTimelineCellLayout { + static func rectForUnreadIndicator(_ point: CGPoint) -> CGRect { var r = CGRect.zero - r.size = CGSize(width: MasterTimelineDefaultCellLayout.unreadCircleDimension, height: MasterTimelineDefaultCellLayout.unreadCircleDimension) + r.size = CGSize(width: MainTimelineDefaultCellLayout.unreadCircleDimension, height: MainTimelineDefaultCellLayout.unreadCircleDimension) r.origin.x = point.x r.origin.y = point.y + 5 return r @@ -34,9 +34,9 @@ extension MasterTimelineCellLayout { static func rectForStar(_ point: CGPoint) -> CGRect { var r = CGRect.zero - r.size.width = MasterTimelineDefaultCellLayout.starDimension - r.size.height = MasterTimelineDefaultCellLayout.starDimension - r.origin.x = floor(point.x - ((MasterTimelineDefaultCellLayout.starDimension - MasterTimelineDefaultCellLayout.unreadCircleDimension) / 2.0)) + r.size.width = MainTimelineDefaultCellLayout.starDimension + r.size.height = MainTimelineDefaultCellLayout.starDimension + r.origin.x = floor(point.x - ((MainTimelineDefaultCellLayout.starDimension - MainTimelineDefaultCellLayout.unreadCircleDimension) / 2.0)) r.origin.y = point.y + 3 return r } @@ -49,8 +49,8 @@ extension MasterTimelineCellLayout { return r } - static func rectForTitle(_ cellData: MasterTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> (CGRect, Int) { - + static func rectForTitle(_ cellData: MainTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> (CGRect, Int) { + var r = CGRect.zero if cellData.title.isEmpty { return (r, 0) @@ -58,8 +58,8 @@ extension MasterTimelineCellLayout { r.origin = point - let sizeInfo = MultilineUILabelSizer.size(for: cellData.title, font: MasterTimelineDefaultCellLayout.titleFont, numberOfLines: cellData.numberOfLines, width: Int(textAreaWidth)) - + let sizeInfo = MultilineUILabelSizer.size(for: cellData.title, font: MainTimelineDefaultCellLayout.titleFont, numberOfLines: cellData.numberOfLines, width: Int(textAreaWidth)) + r.size.width = textAreaWidth r.size.height = sizeInfo.size.height if sizeInfo.numberOfLinesUsed < 1 { @@ -70,8 +70,8 @@ extension MasterTimelineCellLayout { } - static func rectForSummary(_ cellData: MasterTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat, _ linesUsed: Int) -> CGRect { - + static func rectForSummary(_ cellData: MainTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat, _ linesUsed: Int) -> CGRect { + let linesLeft = cellData.numberOfLines - linesUsed var r = CGRect.zero @@ -81,8 +81,8 @@ extension MasterTimelineCellLayout { r.origin = point - let sizeInfo = MultilineUILabelSizer.size(for: cellData.summary, font: MasterTimelineDefaultCellLayout.summaryFont, numberOfLines: linesLeft, width: Int(textAreaWidth)) - + let sizeInfo = MultilineUILabelSizer.size(for: cellData.summary, font: MainTimelineDefaultCellLayout.summaryFont, numberOfLines: linesLeft, width: Int(textAreaWidth)) + r.size.width = textAreaWidth r.size.height = sizeInfo.size.height if sizeInfo.numberOfLinesUsed < 1 { @@ -93,13 +93,13 @@ extension MasterTimelineCellLayout { } - static func rectForFeedName(_ cellData: MasterTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> CGRect { - + static func rectForFeedName(_ cellData: MainTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> CGRect { + var r = CGRect.zero r.origin = point let feedName = cellData.showFeedName == .feed ? cellData.feedName : cellData.byline - let size = SingleLineUILabelSizer.size(for: feedName, font: MasterTimelineDefaultCellLayout.feedNameFont) + let size = SingleLineUILabelSizer.size(for: feedName, font: MainTimelineDefaultCellLayout.feedNameFont) r.size = size if r.size.width > textAreaWidth { diff --git a/iOS/MainTimeline/Cell/MainTimelineDefaultCellLayout.swift b/iOS/MainTimeline/Cell/MainTimelineDefaultCellLayout.swift new file mode 100644 index 000000000..e85f43ef7 --- /dev/null +++ b/iOS/MainTimeline/Cell/MainTimelineDefaultCellLayout.swift @@ -0,0 +1,126 @@ +// +// MainTimelineDefaultCellLayout.swift +// NetNewsWire +// +// Created by Brent Simmons on 2/6/16. +// Copyright © 2016 Ranchero Software, LLC. All rights reserved. +// + +import UIKit +import RSCore + +struct MainTimelineDefaultCellLayout: MainTimelineCellLayout { + + static let cellPadding = UIEdgeInsets(top: 12, left: 8, bottom: 12, right: 20) + + static let unreadCircleMarginLeft = CGFloat(integerLiteral: 0) + static let unreadCircleDimension = CGFloat(integerLiteral: 12) + static let unreadCircleSize = CGSize(width: MainTimelineDefaultCellLayout.unreadCircleDimension, height: MainTimelineDefaultCellLayout.unreadCircleDimension) + static let unreadCircleMarginRight = CGFloat(integerLiteral: 8) + + static let starDimension = CGFloat(integerLiteral: 16) + static let starSize = CGSize(width: MainTimelineDefaultCellLayout.starDimension, height: MainTimelineDefaultCellLayout.starDimension) + + static let iconMarginRight = CGFloat(integerLiteral: 8) + static let iconCornerRadius = CGFloat(integerLiteral: 4) + + static var titleFont: UIFont { + return UIFont.preferredFont(forTextStyle: .headline) + } + static let titleBottomMargin = CGFloat(integerLiteral: 1) + + static var feedNameFont: UIFont { + return UIFont.preferredFont(forTextStyle: .footnote) + } + static let feedRightMargin = CGFloat(integerLiteral: 8) + + static var dateFont: UIFont { + return UIFont.preferredFont(forTextStyle: .footnote) + } + static let dateMarginBottom = CGFloat(integerLiteral: 1) + + static var summaryFont: UIFont { + return UIFont.preferredFont(forTextStyle: .body) + } + + let height: CGFloat + let unreadIndicatorRect: CGRect + let starRect: CGRect + let iconImageRect: CGRect + let titleRect: CGRect + let summaryRect: CGRect + let feedNameRect: CGRect + let dateRect: CGRect + + init(width: CGFloat, insets: UIEdgeInsets, cellData: MainTimelineCellData) { + + var currentPoint = CGPoint.zero + currentPoint.x = MainTimelineDefaultCellLayout.cellPadding.left + insets.left + MainTimelineDefaultCellLayout.unreadCircleMarginLeft + currentPoint.y = MainTimelineDefaultCellLayout.cellPadding.top + + // Unread Indicator and Star + self.unreadIndicatorRect = MainTimelineDefaultCellLayout.rectForUnreadIndicator(currentPoint) + self.starRect = MainTimelineDefaultCellLayout.rectForStar(currentPoint) + + // Start the point at the beginning position of the main block + currentPoint.x += MainTimelineDefaultCellLayout.unreadCircleDimension + MainTimelineDefaultCellLayout.unreadCircleMarginRight + + // Icon Image + if cellData.showIcon { + self.iconImageRect = MainTimelineDefaultCellLayout.rectForIconView(currentPoint, iconSize: cellData.iconSize) + currentPoint.x = self.iconImageRect.maxX + MainTimelineDefaultCellLayout.iconMarginRight + } else { + self.iconImageRect = CGRect.zero + } + + let textAreaWidth = width - (currentPoint.x + MainTimelineDefaultCellLayout.cellPadding.right + insets.right) + + // Title Text Block + let (titleRect, numberOfLinesForTitle) = MainTimelineDefaultCellLayout.rectForTitle(cellData, currentPoint, textAreaWidth) + self.titleRect = titleRect + + // Summary Text Block + if self.titleRect != CGRect.zero { + currentPoint.y = self.titleRect.maxY + MainTimelineDefaultCellLayout.titleBottomMargin + } + self.summaryRect = MainTimelineDefaultCellLayout.rectForSummary(cellData, currentPoint, textAreaWidth, numberOfLinesForTitle) + + var y = [self.titleRect, self.summaryRect].maxY() + if y == 0 { + y = iconImageRect.origin.y + iconImageRect.height + // Necessary calculation of either feed name or date since we are working with dynamic font-sizes + let tmp = MainTimelineDefaultCellLayout.rectForDate(cellData, currentPoint, textAreaWidth) + y -= tmp.height + } + currentPoint.y = y + + // Feed Name and Pub Date + self.dateRect = MainTimelineDefaultCellLayout.rectForDate(cellData, currentPoint, textAreaWidth) + + let feedNameWidth = textAreaWidth - (MainTimelineDefaultCellLayout.feedRightMargin + self.dateRect.size.width) + self.feedNameRect = MainTimelineDefaultCellLayout.rectForFeedName(cellData, currentPoint, feedNameWidth) + + self.height = [self.iconImageRect, self.feedNameRect].maxY() + MainTimelineDefaultCellLayout.cellPadding.bottom + + } + +} + +// MARK: - Calculate Rects + +extension MainTimelineDefaultCellLayout { + + static func rectForDate(_ cellData: MainTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> CGRect { + + var r = CGRect.zero + + let size = SingleLineUILabelSizer.size(for: cellData.dateString, font: MainTimelineDefaultCellLayout.dateFont) + r.size = size + r.origin.x = (point.x + textAreaWidth) - size.width + r.origin.y = point.y + + return r + + } + +} diff --git a/iOS/MasterTimeline/Cell/MasterTimelineTableViewCell.swift b/iOS/MainTimeline/Cell/MainTimelineTableViewCell.swift similarity index 87% rename from iOS/MasterTimeline/Cell/MasterTimelineTableViewCell.swift rename to iOS/MainTimeline/Cell/MainTimelineTableViewCell.swift index 2ec879473..f508029b0 100644 --- a/iOS/MasterTimeline/Cell/MasterTimelineTableViewCell.swift +++ b/iOS/MainTimeline/Cell/MainTimelineTableViewCell.swift @@ -1,5 +1,5 @@ // -// MasterTimelineTableViewCell.swift +// MainTimelineTableViewCell.swift // NetNewsWire // // Created by Brent Simmons on 8/31/15. @@ -9,14 +9,14 @@ import UIKit import RSCore -class MasterTimelineTableViewCell: VibrantTableViewCell { - - private let titleView = MasterTimelineTableViewCell.multiLineUILabel() - private let summaryView = MasterTimelineTableViewCell.multiLineUILabel() - private let unreadIndicatorView = MasterUnreadIndicatorView(frame: CGRect.zero) - private let dateView = MasterTimelineTableViewCell.singleLineUILabel() - private let feedNameView = MasterTimelineTableViewCell.singleLineUILabel() - +class MainTimelineTableViewCell: VibrantTableViewCell { + + private let titleView = MainTimelineTableViewCell.multiLineUILabel() + private let summaryView = MainTimelineTableViewCell.multiLineUILabel() + private let unreadIndicatorView = MainUnreadIndicatorView(frame: CGRect.zero) + private let dateView = MainTimelineTableViewCell.singleLineUILabel() + private let feedNameView = MainTimelineTableViewCell.singleLineUILabel() + private lazy var iconView = IconView() private lazy var starView = { @@ -26,7 +26,7 @@ class MasterTimelineTableViewCell: VibrantTableViewCell { private var unreadIndicatorPropertyAnimator: UIViewPropertyAnimator? private var starViewPropertyAnimator: UIViewPropertyAnimator? - var cellData: MasterTimelineCellData! { + var cellData: MainTimelineCellData! { didSet { updateSubviews() } @@ -106,8 +106,8 @@ class MasterTimelineTableViewCell: VibrantTableViewCell { // MARK: - Private -private extension MasterTimelineTableViewCell { - +private extension MainTimelineTableViewCell { + static func singleLineUILabel() -> UILabel { let label = NonIntrinsicLabel() label.lineBreakMode = .byTruncatingTail @@ -153,28 +153,28 @@ private extension MasterTimelineTableViewCell { addSubviewAtInit(starView, hidden: true) } - func updatedLayout(width: CGFloat) -> MasterTimelineCellLayout { + func updatedLayout(width: CGFloat) -> MainTimelineCellLayout { if UIApplication.shared.preferredContentSizeCategory.isAccessibilityCategory { - return MasterTimelineAccessibilityCellLayout(width: width, insets: safeAreaInsets, cellData: cellData) + return MainTimelineAccessibilityCellLayout(width: width, insets: safeAreaInsets, cellData: cellData) } else { - return MasterTimelineDefaultCellLayout(width: width, insets: safeAreaInsets, cellData: cellData) + return MainTimelineDefaultCellLayout(width: width, insets: safeAreaInsets, cellData: cellData) } } func updateTitleView() { - titleView.font = MasterTimelineDefaultCellLayout.titleFont + titleView.font = MainTimelineDefaultCellLayout.titleFont titleView.textColor = labelColor updateTextFieldAttributedText(titleView, cellData?.attributedTitle) } func updateSummaryView() { - summaryView.font = MasterTimelineDefaultCellLayout.summaryFont + summaryView.font = MainTimelineDefaultCellLayout.summaryFont summaryView.textColor = labelColor updateTextFieldText(summaryView, cellData?.summary) } func updateDateView() { - dateView.font = MasterTimelineDefaultCellLayout.dateFont + dateView.font = MainTimelineDefaultCellLayout.dateFont dateView.textColor = secondaryLabelColor updateTextFieldText(dateView, cellData.dateString) } @@ -204,12 +204,12 @@ private extension MasterTimelineTableViewCell { switch cellData.showFeedName { case .feed: showView(feedNameView) - feedNameView.font = MasterTimelineDefaultCellLayout.feedNameFont + feedNameView.font = MainTimelineDefaultCellLayout.feedNameFont feedNameView.textColor = secondaryLabelColor updateTextFieldText(feedNameView, cellData.feedName) case .byline: showView(feedNameView) - feedNameView.font = MasterTimelineDefaultCellLayout.feedNameFont + feedNameView.font = MainTimelineDefaultCellLayout.feedNameFont feedNameView.textColor = secondaryLabelColor updateTextFieldText(feedNameView, cellData.byline) case .none: diff --git a/iOS/MasterTimeline/Cell/MasterUnreadIndicatorView.swift b/iOS/MainTimeline/Cell/MainUnreadIndicatorView.swift similarity index 78% rename from iOS/MasterTimeline/Cell/MasterUnreadIndicatorView.swift rename to iOS/MainTimeline/Cell/MainUnreadIndicatorView.swift index 32205f0f9..d0473d95f 100644 --- a/iOS/MasterTimeline/Cell/MasterUnreadIndicatorView.swift +++ b/iOS/MainTimeline/Cell/MainUnreadIndicatorView.swift @@ -1,5 +1,5 @@ // -// MasterUnreadIndicatorView.swift +// MainUnreadIndicatorView.swift // NetNewsWire // // Created by Brent Simmons on 2/16/16. @@ -8,7 +8,7 @@ import UIKit -class MasterUnreadIndicatorView: UIView { +class MainUnreadIndicatorView: UIView { override func layoutSubviews() { super.layoutSubviews() diff --git a/iOS/MasterTimeline/Cell/MultilineUILabelSizer.swift b/iOS/MainTimeline/Cell/MultilineUILabelSizer.swift similarity index 100% rename from iOS/MasterTimeline/Cell/MultilineUILabelSizer.swift rename to iOS/MainTimeline/Cell/MultilineUILabelSizer.swift diff --git a/iOS/MasterTimeline/Cell/SingleLineUILabelSizer.swift b/iOS/MainTimeline/Cell/SingleLineUILabelSizer.swift similarity index 100% rename from iOS/MasterTimeline/Cell/SingleLineUILabelSizer.swift rename to iOS/MainTimeline/Cell/SingleLineUILabelSizer.swift diff --git a/iOS/MasterTimeline/MasterTimelineDataSource.swift b/iOS/MainTimeline/MainTimelineDataSource.swift similarity index 50% rename from iOS/MasterTimeline/MasterTimelineDataSource.swift rename to iOS/MainTimeline/MainTimelineDataSource.swift index 3647a93ae..f5c6d2b85 100644 --- a/iOS/MasterTimeline/MasterTimelineDataSource.swift +++ b/iOS/MainTimeline/MainTimelineDataSource.swift @@ -1,5 +1,5 @@ // -// MasterTimelineDataSource.swift +// MainTimelineDataSource.swift // NetNewsWire-iOS // // Created by Maurice Parker on 8/30/19. @@ -8,8 +8,8 @@ import UIKit -class MasterTimelineDataSource: UITableViewDiffableDataSource where SectionIdentifierType : Hashable, ItemIdentifierType : Hashable { - +class MainTimelineDataSource: UITableViewDiffableDataSource where SectionIdentifierType : Hashable, ItemIdentifierType : Hashable { + override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } diff --git a/iOS/MasterTimeline/MasterTimelineTitleView.swift b/iOS/MainTimeline/MainTimelineTitleView.swift similarity index 87% rename from iOS/MasterTimeline/MasterTimelineTitleView.swift rename to iOS/MainTimeline/MainTimelineTitleView.swift index 9c81ac7ee..cefab3da3 100644 --- a/iOS/MasterTimeline/MasterTimelineTitleView.swift +++ b/iOS/MainTimeline/MainTimelineTitleView.swift @@ -1,5 +1,5 @@ // -// MasterFeedTitleView.swift +// MainTimelineTitleView.swift // NetNewsWire-iOS // // Created by Maurice Parker on 9/21/19. @@ -8,11 +8,11 @@ import UIKit -class MasterTimelineTitleView: UIView { +class MainTimelineTitleView: UIView { @IBOutlet weak var iconView: IconView! @IBOutlet weak var label: UILabel! - @IBOutlet weak var unreadCountView: MasterTimelineUnreadCountView! + @IBOutlet weak var unreadCountView: MainTimelineUnreadCountView! @available(iOS 13.4, *) private lazy var pointerInteraction: UIPointerInteraction = { @@ -50,7 +50,7 @@ class MasterTimelineTitleView: UIView { } -extension MasterTimelineTitleView: UIPointerInteractionDelegate { +extension MainTimelineTitleView: UIPointerInteractionDelegate { @available(iOS 13.4, *) func pointerInteraction(_ interaction: UIPointerInteraction, styleFor region: UIPointerRegion) -> UIPointerStyle? { diff --git a/iOS/MasterTimeline/MasterTimelineTitleView.xib b/iOS/MainTimeline/MainTimelineTitleView.xib similarity index 93% rename from iOS/MasterTimeline/MasterTimelineTitleView.xib rename to iOS/MainTimeline/MainTimelineTitleView.xib index 7d5b53ce6..9ea9ed250 100644 --- a/iOS/MasterTimeline/MasterTimelineTitleView.xib +++ b/iOS/MainTimeline/MainTimelineTitleView.xib @@ -1,15 +1,16 @@ - + - + + - + @@ -19,7 +20,7 @@ - + @@ -32,6 +33,7 @@ + @@ -45,7 +47,6 @@ - diff --git a/iOS/MasterTimeline/MasterTimelineUnreadCountView.swift b/iOS/MainTimeline/MainTimelineUnreadCountView.swift similarity index 89% rename from iOS/MasterTimeline/MasterTimelineUnreadCountView.swift rename to iOS/MainTimeline/MainTimelineUnreadCountView.swift index fd377b2d4..6a0f99e3b 100644 --- a/iOS/MasterTimeline/MasterTimelineUnreadCountView.swift +++ b/iOS/MainTimeline/MainTimelineUnreadCountView.swift @@ -1,5 +1,5 @@ // -// MasterTimelineUnreadCountView.swift +// MainTimelineUnreadCountView.swift // NetNewsWire-iOS // // Created by Maurice Parker on 9/30/19. @@ -8,7 +8,7 @@ import UIKit -class MasterTimelineUnreadCountView: MainFeedUnreadCountView { +class MainTimelineUnreadCountView: MainFeedUnreadCountView { override var padding: UIEdgeInsets { return UIEdgeInsets(top: 2.0, left: 9.0, bottom: 2.0, right: 9.0) diff --git a/iOS/MasterTimeline/MasterTimelineViewController.swift b/iOS/MainTimeline/MainTimelineViewController.swift similarity index 94% rename from iOS/MasterTimeline/MasterTimelineViewController.swift rename to iOS/MainTimeline/MainTimelineViewController.swift index 0bfc4f0be..5bfcbb777 100644 --- a/iOS/MasterTimeline/MasterTimelineViewController.swift +++ b/iOS/MainTimeline/MainTimelineViewController.swift @@ -1,5 +1,5 @@ // -// MasterTimelineViewController.swift +// MainTimelineViewController.swift // NetNewsWire // // Created by Maurice Parker on 4/8/19. @@ -11,7 +11,7 @@ import RSCore import Account import Articles -class MasterTimelineViewController: UITableViewController, UndoableCommandRunner { +class MainTimelineViewController: UITableViewController, UndoableCommandRunner { private var numberOfTextLines = 0 private var iconSize = IconSize.medium @@ -86,7 +86,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner iconSize = AppDefaults.shared.timelineIconSize resetEstimatedRowHeight() - if let titleView = Bundle.main.loadNibNamed("MasterTimelineTitleView", owner: self, options: nil)?[0] as? MasterTimelineTitleView { + if let titleView = Bundle.main.loadNibNamed("MainTimelineTitleView", owner: self, options: nil)?[0] as? MainTimelineTitleView { navigationItem.titleView = titleView } @@ -444,7 +444,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner for article in visibleUpdatedArticles { if let indexPath = dataSource.indexPath(for: article) { - if let cell = tableView.cellForRow(at: indexPath) as? MasterTimelineTableViewCell { + if let cell = tableView.cellForRow(at: indexPath) as? MainTimelineTableViewCell { configure(cell, article: article) } } @@ -453,7 +453,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner @objc func webFeedIconDidBecomeAvailable(_ note: Notification) { - if let titleView = navigationItem.titleView as? MasterTimelineTitleView { + if let titleView = navigationItem.titleView as? MainTimelineTitleView { titleView.iconView.iconImage = coordinator.timelineIconImage } @@ -464,7 +464,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner guard let article = dataSource.itemIdentifier(for: indexPath) else { return } - if article.webFeed == feed, let cell = tableView.cellForRow(at: indexPath) as? MasterTimelineTableViewCell, let image = iconImageFor(article) { + if article.webFeed == feed, let cell = tableView.cellForRow(at: indexPath) as? MainTimelineTableViewCell, let image = iconImageFor(article) { cell.setIconImage(image) } } @@ -479,7 +479,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner return } for author in authors { - if author.avatarURL == avatarURL, let cell = tableView.cellForRow(at: indexPath) as? MasterTimelineTableViewCell, let image = iconImageFor(article) { + if author.avatarURL == avatarURL, let cell = tableView.cellForRow(at: indexPath) as? MainTimelineTableViewCell, let image = iconImageFor(article) { cell.setIconImage(image) } } @@ -487,7 +487,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner } @objc func faviconDidBecomeAvailable(_ note: Notification) { - if let titleView = navigationItem.titleView as? MasterTimelineTitleView { + if let titleView = navigationItem.titleView as? MainTimelineTitleView { titleView.iconView.iconImage = coordinator.timelineIconImage } if coordinator.showIcons { @@ -512,7 +512,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner } @objc func displayNameDidChange(_ note: Notification) { - if let titleView = navigationItem.titleView as? MasterTimelineTitleView { + if let titleView = navigationItem.titleView as? MainTimelineTitleView { titleView.label.text = coordinator.timelineFeed?.nameForDisplay } } @@ -554,13 +554,13 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner let status = ArticleStatus(articleID: prototypeID, read: false, starred: false, dateArrived: Date()) let prototypeArticle = Article(accountID: prototypeID, articleID: prototypeID, webFeedID: prototypeID, uniqueID: prototypeID, title: longTitle, contentHTML: nil, contentText: nil, url: nil, externalURL: nil, summary: nil, imageURL: nil, datePublished: nil, dateModified: nil, authors: nil, status: status) - let prototypeCellData = MasterTimelineCellData(article: prototypeArticle, showFeedName: .feed, feedName: "Prototype Feed Name", byline: nil, iconImage: nil, showIcon: false, numberOfLines: numberOfTextLines, iconSize: iconSize) - + let prototypeCellData = MainTimelineCellData(article: prototypeArticle, showFeedName: .feed, feedName: "Prototype Feed Name", byline: nil, iconImage: nil, showIcon: false, numberOfLines: numberOfTextLines, iconSize: iconSize) + if UIApplication.shared.preferredContentSizeCategory.isAccessibilityCategory { - let layout = MasterTimelineAccessibilityCellLayout(width: tableView.bounds.width, insets: tableView.safeAreaInsets, cellData: prototypeCellData) + let layout = MainTimelineAccessibilityCellLayout(width: tableView.bounds.width, insets: tableView.safeAreaInsets, cellData: prototypeCellData) tableView.estimatedRowHeight = layout.height } else { - let layout = MasterTimelineDefaultCellLayout(width: tableView.bounds.width, insets: tableView.safeAreaInsets, cellData: prototypeCellData) + let layout = MainTimelineDefaultCellLayout(width: tableView.bounds.width, insets: tableView.safeAreaInsets, cellData: prototypeCellData) tableView.estimatedRowHeight = layout.height } @@ -570,7 +570,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner // MARK: Searching -extension MasterTimelineViewController: UISearchControllerDelegate { +extension MainTimelineViewController: UISearchControllerDelegate { func willPresentSearchController(_ searchController: UISearchController) { coordinator.beginSearching() @@ -584,7 +584,7 @@ extension MasterTimelineViewController: UISearchControllerDelegate { } -extension MasterTimelineViewController: UISearchResultsUpdating { +extension MainTimelineViewController: UISearchResultsUpdating { func updateSearchResults(for searchController: UISearchController) { let searchScope = SearchScope(rawValue: searchController.searchBar.selectedScopeButtonIndex)! @@ -593,7 +593,7 @@ extension MasterTimelineViewController: UISearchResultsUpdating { } -extension MasterTimelineViewController: UISearchBarDelegate { +extension MainTimelineViewController: UISearchBarDelegate { func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) { let searchScope = SearchScope(rawValue: selectedScope)! coordinator.searchArticles(searchBar.text!, searchScope) @@ -602,7 +602,7 @@ extension MasterTimelineViewController: UISearchBarDelegate { // MARK: Private -private extension MasterTimelineViewController { +private extension MainTimelineViewController { func configureToolbar() { guard !(splitViewController?.isCollapsed ?? true) else { @@ -622,7 +622,7 @@ private extension MasterTimelineViewController { title = coordinator.timelineFeed?.nameForDisplay ?? "Timeline" - if let titleView = navigationItem.titleView as? MasterTimelineTitleView { + if let titleView = navigationItem.titleView as? MainTimelineTitleView { let timelineIconImage = coordinator.timelineIconImage titleView.iconView.iconImage = timelineIconImage if let preferredColor = timelineIconImage?.preferredColor { @@ -693,7 +693,7 @@ private extension MasterTimelineViewController { } func updateTitleUnreadCount() { - if let titleView = navigationItem.titleView as? MasterTimelineTitleView { + if let titleView = navigationItem.titleView as? MainTimelineTitleView { titleView.unreadCountView.unreadCount = coordinator.timelineUnreadCount } } @@ -717,8 +717,8 @@ private extension MasterTimelineViewController { func makeDataSource() -> UITableViewDiffableDataSource { let dataSource: UITableViewDiffableDataSource = - MasterTimelineDataSource(tableView: tableView, cellProvider: { [weak self] tableView, indexPath, article in - let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MasterTimelineTableViewCell + MainTimelineDataSource(tableView: tableView, cellProvider: { [weak self] tableView, indexPath, article in + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MainTimelineTableViewCell self?.configure(cell, article: article) return cell }) @@ -726,13 +726,13 @@ private extension MasterTimelineViewController { return dataSource } - func configure(_ cell: MasterTimelineTableViewCell, article: Article) { - + func configure(_ cell: MainTimelineTableViewCell, article: Article) { + let iconImage = iconImageFor(article) let showFeedNames = coordinator.showFeedNames let showIcon = coordinator.showIcons && iconImage != nil - cell.cellData = MasterTimelineCellData(article: article, showFeedName: showFeedNames, feedName: article.webFeed?.nameForDisplay, byline: article.byline(), iconImage: iconImage, showIcon: showIcon, numberOfLines: numberOfTextLines, iconSize: iconSize) + cell.cellData = MainTimelineCellData(article: article, showFeedName: showFeedNames, feedName: article.webFeed?.nameForDisplay, byline: article.byline(), iconImage: iconImage, showIcon: showIcon, numberOfLines: numberOfTextLines, iconSize: iconSize) } diff --git a/iOS/MasterTimeline/MarkAsReadAlertController.swift b/iOS/MainTimeline/MarkAsReadAlertController.swift similarity index 100% rename from iOS/MasterTimeline/MarkAsReadAlertController.swift rename to iOS/MainTimeline/MarkAsReadAlertController.swift diff --git a/iOS/MasterTimeline/Cell/MasterTimelineAccessibilityCellLayout.swift b/iOS/MasterTimeline/Cell/MasterTimelineAccessibilityCellLayout.swift deleted file mode 100644 index 7441e5ae8..000000000 --- a/iOS/MasterTimeline/Cell/MasterTimelineAccessibilityCellLayout.swift +++ /dev/null @@ -1,90 +0,0 @@ -// -// MasterTimelineAccessibilityCellLayout.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 4/29/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import UIKit -import RSCore - -struct MasterTimelineAccessibilityCellLayout: MasterTimelineCellLayout { - - let height: CGFloat - let unreadIndicatorRect: CGRect - let starRect: CGRect - let iconImageRect: CGRect - let titleRect: CGRect - let summaryRect: CGRect - let feedNameRect: CGRect - let dateRect: CGRect - - init(width: CGFloat, insets: UIEdgeInsets, cellData: MasterTimelineCellData) { - - var currentPoint = CGPoint.zero - currentPoint.x = MasterTimelineDefaultCellLayout.cellPadding.left + insets.left + MasterTimelineDefaultCellLayout.unreadCircleMarginLeft - currentPoint.y = MasterTimelineDefaultCellLayout.cellPadding.top - - // Unread Indicator and Star - self.unreadIndicatorRect = MasterTimelineAccessibilityCellLayout.rectForUnreadIndicator(currentPoint) - self.starRect = MasterTimelineAccessibilityCellLayout.rectForStar(currentPoint) - - // Start the point at the beginning position of the main block - currentPoint.x += MasterTimelineDefaultCellLayout.unreadCircleDimension + MasterTimelineDefaultCellLayout.unreadCircleMarginRight - - // Icon Image - if cellData.showIcon { - self.iconImageRect = MasterTimelineAccessibilityCellLayout.rectForIconView(currentPoint, iconSize: cellData.iconSize) - currentPoint.y = self.iconImageRect.maxY - } else { - self.iconImageRect = CGRect.zero - } - - let textAreaWidth = width - (currentPoint.x + MasterTimelineDefaultCellLayout.cellPadding.right + insets.right) - - // Title Text Block - let (titleRect, numberOfLinesForTitle) = MasterTimelineAccessibilityCellLayout.rectForTitle(cellData, currentPoint, textAreaWidth) - self.titleRect = titleRect - - // Summary Text Block - if self.titleRect != CGRect.zero { - currentPoint.y = self.titleRect.maxY + MasterTimelineDefaultCellLayout.titleBottomMargin - } - self.summaryRect = MasterTimelineAccessibilityCellLayout.rectForSummary(cellData, currentPoint, textAreaWidth, numberOfLinesForTitle) - - currentPoint.y = [self.titleRect, self.summaryRect].maxY() - - if cellData.showFeedName != .none { - self.feedNameRect = MasterTimelineAccessibilityCellLayout.rectForFeedName(cellData, currentPoint, textAreaWidth) - currentPoint.y = self.feedNameRect.maxY - } else { - self.feedNameRect = CGRect.zero - } - - // Feed Name and Pub Date - self.dateRect = MasterTimelineAccessibilityCellLayout.rectForDate(cellData, currentPoint, textAreaWidth) - - self.height = self.dateRect.maxY + MasterTimelineDefaultCellLayout.cellPadding.bottom - - } - -} - -// MARK: - Calculate Rects - -private extension MasterTimelineAccessibilityCellLayout { - - static func rectForDate(_ cellData: MasterTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> CGRect { - - var r = CGRect.zero - - let size = SingleLineUILabelSizer.size(for: cellData.dateString, font: MasterTimelineDefaultCellLayout.dateFont) - r.size = size - r.origin = point - - return r - - } - -} diff --git a/iOS/MasterTimeline/Cell/MasterTimelineDefaultCellLayout.swift b/iOS/MasterTimeline/Cell/MasterTimelineDefaultCellLayout.swift deleted file mode 100644 index 6b2ce58ad..000000000 --- a/iOS/MasterTimeline/Cell/MasterTimelineDefaultCellLayout.swift +++ /dev/null @@ -1,126 +0,0 @@ -// -// MasterTimelineDefaultCellLayout.swift -// NetNewsWire -// -// Created by Brent Simmons on 2/6/16. -// Copyright © 2016 Ranchero Software, LLC. All rights reserved. -// - -import UIKit -import RSCore - -struct MasterTimelineDefaultCellLayout: MasterTimelineCellLayout { - - static let cellPadding = UIEdgeInsets(top: 12, left: 8, bottom: 12, right: 20) - - static let unreadCircleMarginLeft = CGFloat(integerLiteral: 0) - static let unreadCircleDimension = CGFloat(integerLiteral: 12) - static let unreadCircleSize = CGSize(width: MasterTimelineDefaultCellLayout.unreadCircleDimension, height: MasterTimelineDefaultCellLayout.unreadCircleDimension) - static let unreadCircleMarginRight = CGFloat(integerLiteral: 8) - - static let starDimension = CGFloat(integerLiteral: 16) - static let starSize = CGSize(width: MasterTimelineDefaultCellLayout.starDimension, height: MasterTimelineDefaultCellLayout.starDimension) - - static let iconMarginRight = CGFloat(integerLiteral: 8) - static let iconCornerRadius = CGFloat(integerLiteral: 4) - - static var titleFont: UIFont { - return UIFont.preferredFont(forTextStyle: .headline) - } - static let titleBottomMargin = CGFloat(integerLiteral: 1) - - static var feedNameFont: UIFont { - return UIFont.preferredFont(forTextStyle: .footnote) - } - static let feedRightMargin = CGFloat(integerLiteral: 8) - - static var dateFont: UIFont { - return UIFont.preferredFont(forTextStyle: .footnote) - } - static let dateMarginBottom = CGFloat(integerLiteral: 1) - - static var summaryFont: UIFont { - return UIFont.preferredFont(forTextStyle: .body) - } - - let height: CGFloat - let unreadIndicatorRect: CGRect - let starRect: CGRect - let iconImageRect: CGRect - let titleRect: CGRect - let summaryRect: CGRect - let feedNameRect: CGRect - let dateRect: CGRect - - init(width: CGFloat, insets: UIEdgeInsets, cellData: MasterTimelineCellData) { - - var currentPoint = CGPoint.zero - currentPoint.x = MasterTimelineDefaultCellLayout.cellPadding.left + insets.left + MasterTimelineDefaultCellLayout.unreadCircleMarginLeft - currentPoint.y = MasterTimelineDefaultCellLayout.cellPadding.top - - // Unread Indicator and Star - self.unreadIndicatorRect = MasterTimelineDefaultCellLayout.rectForUnreadIndicator(currentPoint) - self.starRect = MasterTimelineDefaultCellLayout.rectForStar(currentPoint) - - // Start the point at the beginning position of the main block - currentPoint.x += MasterTimelineDefaultCellLayout.unreadCircleDimension + MasterTimelineDefaultCellLayout.unreadCircleMarginRight - - // Icon Image - if cellData.showIcon { - self.iconImageRect = MasterTimelineDefaultCellLayout.rectForIconView(currentPoint, iconSize: cellData.iconSize) - currentPoint.x = self.iconImageRect.maxX + MasterTimelineDefaultCellLayout.iconMarginRight - } else { - self.iconImageRect = CGRect.zero - } - - let textAreaWidth = width - (currentPoint.x + MasterTimelineDefaultCellLayout.cellPadding.right + insets.right) - - // Title Text Block - let (titleRect, numberOfLinesForTitle) = MasterTimelineDefaultCellLayout.rectForTitle(cellData, currentPoint, textAreaWidth) - self.titleRect = titleRect - - // Summary Text Block - if self.titleRect != CGRect.zero { - currentPoint.y = self.titleRect.maxY + MasterTimelineDefaultCellLayout.titleBottomMargin - } - self.summaryRect = MasterTimelineDefaultCellLayout.rectForSummary(cellData, currentPoint, textAreaWidth, numberOfLinesForTitle) - - var y = [self.titleRect, self.summaryRect].maxY() - if y == 0 { - y = iconImageRect.origin.y + iconImageRect.height - // Necessary calculation of either feed name or date since we are working with dynamic font-sizes - let tmp = MasterTimelineDefaultCellLayout.rectForDate(cellData, currentPoint, textAreaWidth) - y -= tmp.height - } - currentPoint.y = y - - // Feed Name and Pub Date - self.dateRect = MasterTimelineDefaultCellLayout.rectForDate(cellData, currentPoint, textAreaWidth) - - let feedNameWidth = textAreaWidth - (MasterTimelineDefaultCellLayout.feedRightMargin + self.dateRect.size.width) - self.feedNameRect = MasterTimelineDefaultCellLayout.rectForFeedName(cellData, currentPoint, feedNameWidth) - - self.height = [self.iconImageRect, self.feedNameRect].maxY() + MasterTimelineDefaultCellLayout.cellPadding.bottom - - } - -} - -// MARK: - Calculate Rects - -extension MasterTimelineDefaultCellLayout { - - static func rectForDate(_ cellData: MasterTimelineCellData, _ point: CGPoint, _ textAreaWidth: CGFloat) -> CGRect { - - var r = CGRect.zero - - let size = SingleLineUILabelSizer.size(for: cellData.dateString, font: MasterTimelineDefaultCellLayout.dateFont) - r.size = size - r.origin.x = (point.x + textAreaWidth) - size.width - r.origin.y = point.y - - return r - - } - -} diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 5a33daca3..a071288bf 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -52,8 +52,8 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { private var rootSplitViewController: RootSplitViewController! - private var masterFeedViewController: MainFeedViewController! - private var masterTimelineViewController: MasterTimelineViewController? + private var mainFeedViewController: MainFeedViewController! + private var mainTimelineViewController: MainTimelineViewController? private var articleViewController: ArticleViewController? private let fetchAndMergeArticlesQueue = CoalescingQueue(name: "Fetch and Merge Articles", interval: 0.5) @@ -280,13 +280,13 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { super.init() - self.masterFeedViewController = rootSplitViewController.viewController(for: .primary) as? MainFeedViewController - self.masterFeedViewController.coordinator = self - self.masterFeedViewController?.navigationController?.delegate = self + self.mainFeedViewController = rootSplitViewController.viewController(for: .primary) as? MainFeedViewController + self.mainFeedViewController.coordinator = self + self.mainFeedViewController?.navigationController?.delegate = self - self.masterTimelineViewController = rootSplitViewController.viewController(for: .supplementary) as? MasterTimelineViewController - self.masterTimelineViewController?.coordinator = self - self.masterTimelineViewController?.navigationController?.delegate = self + self.mainTimelineViewController = rootSplitViewController.viewController(for: .supplementary) as? MainTimelineViewController + self.mainTimelineViewController?.coordinator = self + self.mainTimelineViewController?.navigationController?.delegate = self self.articleViewController = rootSplitViewController.viewController(for: .secondary) as? ArticleViewController self.articleViewController?.coordinator = self @@ -370,9 +370,9 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { func resetFocus() { if currentArticle != nil { - masterTimelineViewController?.focus() + mainTimelineViewController?.focus() } else { - masterFeedViewController?.focus() + mainFeedViewController?.focus() } } @@ -389,7 +389,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { selectFeed(indexPath: nil) { self.rootSplitViewController.show(.supplementary) DispatchQueue.main.asyncAfter(deadline: .now()) { - self.masterTimelineViewController!.showSearchAll() + self.mainTimelineViewController!.showSearchAll() } } } @@ -422,7 +422,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { @objc func containerChildrenDidChange(_ note: Notification) { if timelineFetcherContainsAnyPseudoFeed() || timelineFetcherContainsAnyFolder() { fetchAndMergeArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) + self.mainTimelineViewController?.reinitializeArticles(resetScroll: false) self.rebuildBackingStores() } } else { @@ -441,7 +441,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { @objc func accountStateDidChange(_ note: Notification) { if timelineFetcherContainsAnyPseudoFeed() { fetchAndMergeArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) + self.mainTimelineViewController?.reinitializeArticles(resetScroll: false) self.rebuildBackingStores() } } else { @@ -459,7 +459,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { if timelineFetcherContainsAnyPseudoFeed() { fetchAndMergeArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) + self.mainTimelineViewController?.reinitializeArticles(resetScroll: false) self.rebuildBackingStores(updateExpandedNodes: expandNewAccount) } } else { @@ -477,7 +477,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { if timelineFetcherContainsAnyPseudoFeed() { fetchAndMergeArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) + self.mainTimelineViewController?.reinitializeArticles(resetScroll: false) self.rebuildBackingStores(updateExpandedNodes: cleanupAccount) } } else { @@ -562,7 +562,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { treeControllerDelegate.isReadFiltered = true } rebuildBackingStores() - masterFeedViewController?.updateUI() + mainFeedViewController?.updateUI() } func toggleReadArticlesFilter() { @@ -644,7 +644,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { exceptionArticleFetcher = SingleArticleFetcher(account: account, articleID: article.articleID) } fetchAndReplaceArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles(resetScroll: resetScroll) + self.mainTimelineViewController?.reinitializeArticles(resetScroll: resetScroll) } } @@ -717,7 +717,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { clearTimelineIfNoLongerAvailable() } - func masterFeedIndexPathForCurrentTimeline() -> IndexPath? { + func mainFeedIndexPathForCurrentTimeline() -> IndexPath? { guard let node = treeController.rootNode.descendantNodeRepresentingObject(timelineFeed as AnyObject) else { return nil } @@ -742,7 +742,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { } currentFeedIndexPath = indexPath - masterFeedViewController.updateFeedSelection(animations: animations) + mainFeedViewController.updateFeedSelection(animations: animations) if deselectArticle { selectArticle(nil) @@ -815,7 +815,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { if article == nil { rootSplitViewController.show(.supplementary) - masterTimelineViewController?.updateArticleSelection(animations: animations) + mainTimelineViewController?.updateArticleSelection(animations: animations) return } @@ -824,7 +824,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { // Mark article as read before navigating to it, so the read status does not flash unread/read on display markArticles(Set([article!]), statusKey: .read, flag: true) - masterTimelineViewController?.updateArticleSelection(animations: animations) + mainTimelineViewController?.updateArticleSelection(animations: animations) articleViewController?.article = article if let isShowingExtractedArticle = isShowingExtractedArticle, let articleWindowScrollY = articleWindowScrollY { articleViewController?.restoreScrollPosition = (isShowingExtractedArticle, articleWindowScrollY) @@ -844,7 +844,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { if let oldTimelineFeed = preSearchTimelineFeed { emptyTheTimeline() timelineFeed = oldTimelineFeed - masterTimelineViewController?.reinitializeArticles(resetScroll: true) + mainTimelineViewController?.reinitializeArticles(resetScroll: true) replaceArticles(with: savedSearchArticles!, animated: true) } else { setTimelineFeed(nil, animated: true) @@ -857,7 +857,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { savedSearchArticles = nil isSearching = false selectArticle(nil) - masterTimelineViewController?.focus() + mainTimelineViewController?.focus() } func searchArticles(_ searchString: String, _ searchScope: SearchScope) { @@ -955,7 +955,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { } if self.isSearching { - self.masterTimelineViewController?.hideSearch() + self.mainTimelineViewController?.hideSearch() } selectNextUnreadFeed() { @@ -1067,7 +1067,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { func discloseWebFeed(_ webFeed: WebFeed, initialLoad: Bool = false, animations: Animations = [], completion: (() -> Void)? = nil) { if isSearching { - masterTimelineViewController?.hideSearch() + mainTimelineViewController?.hideSearch() } guard let account = webFeed.account else { @@ -1163,14 +1163,14 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { addNavViewController.modalPresentationStyle = .formSheet addNavViewController.preferredContentSize = AddFeedViewController.preferredContentSizeForFormSheetDisplay - masterFeedViewController.present(addNavViewController, animated: true) + mainFeedViewController.present(addNavViewController, animated: true) } func showAddFolder() { let addNavViewController = UIStoryboard.add.instantiateViewController(withIdentifier: "AddFolderViewControllerNav") as! UINavigationController addNavViewController.modalPresentationStyle = .formSheet addNavViewController.preferredContentSize = AddFolderViewController.preferredContentSizeForFormSheetDisplay - masterFeedViewController.present(addNavViewController, animated: true) + mainFeedViewController.present(addNavViewController, animated: true) } func showFullScreenImage(image: UIImage, imageTitle: String?, transitioningDelegate: UIViewControllerTransitioningDelegate) { @@ -1219,12 +1219,12 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { articleViewController?.openInAppBrowser() } else { - masterFeedViewController.openInAppBrowser() + mainFeedViewController.openInAppBrowser() } } func navigateToFeeds() { - masterFeedViewController?.focus() + mainFeedViewController?.focus() selectArticle(nil) } @@ -1232,7 +1232,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { if currentArticle == nil && articles.count > 0 { selectArticle(articles[0]) } - masterTimelineViewController?.focus() + mainTimelineViewController?.focus() } func navigateToDetail() { @@ -1266,7 +1266,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { /// `SFSafariViewController` or `SettingsViewController`, /// otherwise, this function does nothing. func dismissIfLaunchingFromExternalAction() { - guard let presentedController = masterFeedViewController.presentedViewController else { return } + guard let presentedController = mainFeedViewController.presentedViewController else { return } if presentedController.isKind(of: SFSafariViewController.self) { presentedController.dismiss(animated: true, completion: nil) @@ -1320,7 +1320,7 @@ extension SceneCoordinator: UINavigationControllerDelegate { } // If we are showing the Feeds and only the feeds start clearing stuff - if viewController === masterFeedViewController && !isTimelineViewControllerPending { + if viewController === mainFeedViewController && !isTimelineViewControllerPending { activityManager.invalidateCurrentActivities() selectFeed(nil, animations: [.scroll, .select, .navigation]) return @@ -1330,9 +1330,9 @@ extension SceneCoordinator: UINavigationControllerDelegate { // Don't clear it if we have pushed an ArticleViewController, but don't yet see it on the navigation stack. // This happens when we are going to the next unread and we need to grab another timeline to continue. The // ArticleViewController will be pushed, but we will briefly show the Timeline. Don't clear things out when that happens. - if viewController === masterTimelineViewController && rootSplitViewController.isCollapsed && !isArticleViewControllerPending { + if viewController === mainTimelineViewController && rootSplitViewController.isCollapsed && !isArticleViewControllerPending { currentArticle = nil - masterTimelineViewController?.updateArticleSelection(animations: [.scroll, .select, .navigation]) + mainTimelineViewController?.updateArticleSelection(animations: [.scroll, .select, .navigation]) activityManager.invalidateReading() // Restore any bars hidden by the article controller @@ -1442,7 +1442,7 @@ private extension SceneCoordinator { updateExpandedNodes?() let changes = rebuildShadowTable() - masterFeedViewController.reloadFeeds(initialLoad: initialLoad, changes: changes, completion: completion) + mainFeedViewController.reloadFeeds(initialLoad: initialLoad, changes: changes, completion: completion) } } @@ -1577,7 +1577,7 @@ private extension SceneCoordinator { timelineFeed = feed fetchAndReplaceArticlesAsync(animated: animated) { - self.masterTimelineViewController?.reinitializeArticles(resetScroll: true) + self.mainTimelineViewController?.reinitializeArticles(resetScroll: true) completion?() } } @@ -1891,7 +1891,7 @@ private extension SceneCoordinator { articles = sortedArticles updateShowNamesAndIcons() updateUnreadCount() - masterTimelineViewController?.reloadArticles(animated: animated) + mainTimelineViewController?.reloadArticles(animated: animated) } } @@ -1901,8 +1901,8 @@ private extension SceneCoordinator { @objc func fetchAndMergeArticlesAsync() { fetchAndMergeArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) - self.masterTimelineViewController?.restoreSelectionIfNecessary(adjustScroll: false) + self.mainTimelineViewController?.reinitializeArticles(resetScroll: false) + self.mainTimelineViewController?.restoreSelectionIfNecessary(adjustScroll: false) } } @@ -2051,7 +2051,7 @@ private extension SceneCoordinator { self.treeControllerDelegate.resetFilterExceptions() if let indexPath = self.indexPathFor(smartFeed) { self.selectFeed(indexPath: indexPath) { - self.masterFeedViewController.focus() + self.mainFeedViewController.focus() } } }) @@ -2072,7 +2072,7 @@ private extension SceneCoordinator { if let folderNode = self.findFolderNode(folderName: folderName, beginningAt: accountNode), let indexPath = self.indexPathFor(folderNode) { self.selectFeed(indexPath: indexPath) { - self.masterFeedViewController.focus() + self.mainFeedViewController.focus() } } }) @@ -2085,7 +2085,7 @@ private extension SceneCoordinator { } self.discloseWebFeed(webFeed, initialLoad: true) { - self.masterFeedViewController.focus() + self.mainFeedViewController.focus() } } } diff --git a/iOS/Settings/Settings.storyboard b/iOS/Settings/Settings.storyboard index ca1717121..b36c015b1 100644 --- a/iOS/Settings/Settings.storyboard +++ b/iOS/Settings/Settings.storyboard @@ -1,9 +1,9 @@ - + - + @@ -343,26 +343,26 @@ - + - + -