diff --git a/Zotero/Scenes/Detail/PDF/PDFCoordinator.swift b/Zotero/Scenes/Detail/PDF/PDFCoordinator.swift index f8b9c53d5..fde63cf28 100644 --- a/Zotero/Scenes/Detail/PDF/PDFCoordinator.swift +++ b/Zotero/Scenes/Detail/PDF/PDFCoordinator.swift @@ -27,6 +27,7 @@ protocol PdfReaderCoordinatorDelegate: AnyObject { func show(error: PDFDocumentExporter.Error) func share(url: URL, barButton: UIBarButtonItem) func share(text: String, rect: CGRect, view: UIView, userInterfaceStyle: UIUserInterfaceStyle) + func lookup(text: String, rect: CGRect, view: UIView, userInterfaceStyle: UIUserInterfaceStyle) func showDeletedAlertForPdf(completion: @escaping (Bool) -> Void) func showSettings(with settings: PDFSettings, sender: UIBarButtonItem) -> ViewModel func showReader(document: Document, userInterfaceStyle: UIUserInterfaceStyle) @@ -303,6 +304,18 @@ extension PDFCoordinator: PdfReaderCoordinatorDelegate { self.share(item: text, sourceView: .view(view, rect), userInterfaceStyle: userInterfaceStyle) } + func lookup(text: String, rect: CGRect, view: UIView, userInterfaceStyle: UIUserInterfaceStyle) { + DDLogInfo("PDFCoordinator: show lookup") + // When presented as a popover, UIReferenceLibraryViewController ignores overrideUserInterfaceStyle, so we wrap it in a navigation controller to force it. + let controller = UINavigationController(rootViewController: UIReferenceLibraryViewController(term: text)) + controller.setNavigationBarHidden(true, animated: false) + controller.overrideUserInterfaceStyle = userInterfaceStyle + controller.modalPresentationStyle = .popover + controller.popoverPresentationController?.sourceView = view + controller.popoverPresentationController?.sourceRect = rect + self.navigationController?.present(controller, animated: true, completion: nil) + } + func show(error: PDFReaderState.Error) { let title: String let message: String diff --git a/Zotero/Scenes/Detail/PDF/Views/PDFDocumentViewController.swift b/Zotero/Scenes/Detail/PDF/Views/PDFDocumentViewController.swift index a2dca3f06..339d6efca 100644 --- a/Zotero/Scenes/Detail/PDF/Views/PDFDocumentViewController.swift +++ b/Zotero/Scenes/Detail/PDF/Views/PDFDocumentViewController.swift @@ -782,6 +782,9 @@ extension PDFDocumentViewController: PDFViewControllerDelegate { return action } + case .PSPDFKit.accessibility: + return action + case .share: guard action.identifier == .PSPDFKit.share else { return nil } return action.replacing(handler: { [weak self] _ in @@ -796,6 +799,17 @@ extension PDFDocumentViewController: PDFViewControllerDelegate { case .pspdfkitActions: switch action.identifier { + case .PSPDFKit.define: + return action.replacing(title: L10n.lookUp, handler: { [weak self] _ in + guard let self else { return } + coordinatorDelegate?.lookup( + text: glyphs.text, + rect: pageView.convert(glyphs.boundingBox, from: pageView.pdfCoordinateSpace), + view: pageView, + userInterfaceStyle: viewModel.state.settings.appearanceMode.userInterfaceStyle + ) + }) + case .PSPDFKit.searchDocument: return action.replacing(handler: { [weak self] _ in guard let self, let pdfController else { return }