Adds history menu

This commit is contained in:
James Magahern
2023-01-27 13:46:23 -08:00
parent 6f41caff62
commit 748023d330
3 changed files with 35 additions and 12 deletions

View File

@@ -32,6 +32,26 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
return UISceneConfiguration(name: "Browser", sessionRole: connectingSceneSession.role)
}
private func historyMenu() -> UIMenu {
let historyItems = BrowserHistory.shared.allHistory(limit: 50).map { item in
let title = (item.title.count > 0) ? item.title : item.url.absoluteString
return UIAction(title: title) { action in
UIApplication.shared.sendAction(#selector(ShortcutResponder.handleOpenURL), to: nil, from: action, for: OpenURLEvent(url: item.url))
}
}
return UIMenu(title: "History", children: [
UIKeyCommand(
modifiers: [ .command ],
input: "y",
title: "Show All History…",
action: #selector(ShortcutResponder.showHistory)
),
UIMenu(options: .displayInline, children: historyItems)
])
}
override var keyCommands: [UIKeyCommand]? {
get { KeyboardShortcuts.allKeyCommands() }
}
@@ -68,6 +88,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// Go
builder.insertSibling(UIMenu(title: "Go", children: KeyboardShortcuts.menu(for: .go)), beforeMenu: .view)
// History
builder.insertSibling(historyMenu(), beforeMenu: .view)
// View
builder.replaceChildren(ofMenu: .view) { children in
KeyboardShortcuts.menu(for: .view) + children

View File

@@ -168,13 +168,13 @@ extension BrowserViewController: ShortcutResponder
showReaderWindow()
}
func handleOpenURL(_ sender: Any?, url: URL?) {
guard let url else { return }
func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?) {
guard let event else { return }
if tab.url == nil {
tab.beginLoadingURL(url)
tab.beginLoadingURL(event.url)
} else {
createNewTab(withURL: url)
createNewTab(withURL: event.url)
}
}
}

View File

@@ -55,7 +55,14 @@ protocol ShortcutResponder: AnyObject {
optional func showHistory(_ sender: Any?)
@objc
optional func handleOpenURL(_ sender: Any?, url: URL?)
optional func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?)
}
public class OpenURLEvent: UIEvent {
let url: URL
public init(url: URL) {
self.url = url
}
}
fileprivate extension Array {
@@ -172,13 +179,6 @@ public class KeyboardShortcuts {
title: "Go Forward",
action: #selector(ShortcutResponder.goForward)
),
UIKeyCommand(
modifiers: [.command, .shift],
input: "h",
title: "Show History…",
action: #selector(ShortcutResponder.showHistory)
),
]),
// Tab Navigation