Add scroll or go to next unread keyboard shortcut
This commit is contained in:
parent
18d442d901
commit
a2dda5f0f8
@ -184,8 +184,33 @@ class DetailViewController: UIViewController {
|
|||||||
webView.becomeFirstResponder()
|
webView.becomeFirstResponder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func finalScrollPosition() -> CGFloat {
|
||||||
|
return webView.scrollView.contentSize.height - webView.scrollView.bounds.size.height + webView.scrollView.contentInset.bottom
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func canScrollDown() -> Bool {
|
||||||
|
return webView.scrollView.contentOffset.y < finalScrollPosition()
|
||||||
|
}
|
||||||
|
|
||||||
|
func scrollPageDown() {
|
||||||
|
let scrollToY: CGFloat = {
|
||||||
|
let fullScroll = webView.scrollView.contentOffset.y + webView.scrollView.bounds.size.height
|
||||||
|
let final = finalScrollPosition()
|
||||||
|
if fullScroll < final {
|
||||||
|
return fullScroll
|
||||||
|
} else {
|
||||||
|
return final
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
let convertedPoint = self.view.convert(CGPoint(x: 0, y: 0), to: webView.scrollView)
|
||||||
|
let scrollToPoint = CGPoint(x: convertedPoint.x, y: scrollToY)
|
||||||
|
webView.scrollView.setContentOffset(scrollToPoint, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//print("\(candidateY) : \(webView.scrollView.contentSize.height)")
|
||||||
|
|
||||||
class ArticleActivityItemSource: NSObject, UIActivityItemSource {
|
class ArticleActivityItemSource: NSObject, UIActivityItemSource {
|
||||||
|
|
||||||
private let url: URL
|
private let url: URL
|
||||||
|
@ -60,7 +60,7 @@ private extension KeyboardManager {
|
|||||||
|
|
||||||
switch(key) {
|
switch(key) {
|
||||||
case "[space]":
|
case "[space]":
|
||||||
return " "
|
return "\u{0020}"
|
||||||
case "[uparrow]":
|
case "[uparrow]":
|
||||||
return UIKeyCommand.inputUpArrow
|
return UIKeyCommand.inputUpArrow
|
||||||
case "[downarrow]":
|
case "[downarrow]":
|
||||||
|
@ -19,7 +19,9 @@ class RootSplitViewController: UISplitViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Keyboard Shortcuts
|
// MARK: Keyboard Shortcuts
|
||||||
|
|
||||||
@objc func scrollOrGoToNextUnread(_ sender: Any?) {
|
@objc func scrollOrGoToNextUnread(_ sender: Any?) {
|
||||||
|
coordinator.scrollOrGoToNextUnread()
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func goToPreviousUnread(_ sender: Any?) {
|
@objc func goToPreviousUnread(_ sender: Any?) {
|
||||||
|
@ -753,6 +753,14 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func scrollOrGoToNextUnread() {
|
||||||
|
if detailViewController?.canScrollDown() ?? false {
|
||||||
|
detailViewController?.scrollPageDown()
|
||||||
|
} else {
|
||||||
|
selectNextUnread()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func markAllAsRead(_ articles: [Article]) {
|
func markAllAsRead(_ articles: [Article]) {
|
||||||
guard let undoManager = undoManager, let markReadCommand = MarkStatusCommand(initialArticles: articles, markingRead: true, undoManager: undoManager) else {
|
guard let undoManager = undoManager, let markReadCommand = MarkStatusCommand(initialArticles: articles, markingRead: true, undoManager: undoManager) else {
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user