2017-05-27 19:43:27 +02:00
|
|
|
//
|
|
|
|
// DetailViewController.swift
|
2018-08-29 07:18:24 +02:00
|
|
|
// NetNewsWire
|
2017-05-27 19:43:27 +02:00
|
|
|
//
|
|
|
|
// Created by Brent Simmons on 7/26/15.
|
|
|
|
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import WebKit
|
|
|
|
import RSCore
|
2018-07-24 03:29:08 +02:00
|
|
|
import Articles
|
2017-12-03 21:13:44 +01:00
|
|
|
import RSWeb
|
2017-05-27 19:43:27 +02:00
|
|
|
|
2019-02-13 07:57:19 +01:00
|
|
|
enum DetailState: Equatable {
|
|
|
|
case noSelection
|
|
|
|
case multipleSelection
|
|
|
|
case article(Article)
|
|
|
|
}
|
|
|
|
|
2018-02-19 06:49:46 +01:00
|
|
|
final class DetailViewController: NSViewController, WKUIDelegate {
|
2017-11-06 05:31:50 +01:00
|
|
|
|
2017-12-16 19:18:02 +01:00
|
|
|
@IBOutlet var containerView: DetailContainerView!
|
2019-02-11 06:39:11 +01:00
|
|
|
@IBOutlet var statusBarView: DetailStatusBarView!
|
2017-12-03 21:38:44 +01:00
|
|
|
|
2019-02-13 07:57:19 +01:00
|
|
|
lazy var regularWebViewController = {
|
|
|
|
return createWebViewController()
|
|
|
|
}()
|
|
|
|
|
|
|
|
lazy var searchWebViewController = {
|
|
|
|
return createWebViewController()
|
|
|
|
}()
|
|
|
|
|
|
|
|
var currentWebViewController: DetailWebViewController! {
|
2018-02-19 06:49:46 +01:00
|
|
|
didSet {
|
2019-02-13 07:57:19 +01:00
|
|
|
let webview = currentWebViewController.view
|
|
|
|
if containerView.contentView === webview {
|
2018-02-19 06:49:46 +01:00
|
|
|
return
|
|
|
|
}
|
2019-02-11 06:39:11 +01:00
|
|
|
statusBarView.mouseoverLink = nil
|
2019-02-13 07:57:19 +01:00
|
|
|
containerView.contentView = webview
|
2018-02-19 06:49:46 +01:00
|
|
|
}
|
|
|
|
}
|
2019-02-11 06:46:53 +01:00
|
|
|
|
2017-05-27 19:43:27 +02:00
|
|
|
override func viewDidLoad() {
|
2019-02-13 07:57:19 +01:00
|
|
|
currentWebViewController = regularWebViewController
|
2017-05-27 19:43:27 +02:00
|
|
|
}
|
|
|
|
|
2019-02-13 07:57:19 +01:00
|
|
|
// MARK: - API
|
2019-02-12 07:36:31 +01:00
|
|
|
|
2019-02-14 06:33:50 +01:00
|
|
|
func showState(_ state: DetailState, mode: TimelineSourceMode) {
|
2019-02-13 07:57:19 +01:00
|
|
|
// TODO: also to-do is caller
|
|
|
|
}
|
2017-12-20 22:39:31 +01:00
|
|
|
|
|
|
|
func canScrollDown(_ callback: @escaping (Bool) -> Void) {
|
2019-02-13 07:57:19 +01:00
|
|
|
currentWebViewController.canScrollDown(callback)
|
2017-12-20 22:39:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override func scrollPageDown(_ sender: Any?) {
|
2019-02-13 07:57:19 +01:00
|
|
|
currentWebViewController.scrollPageDown(sender)
|
2017-05-27 19:43:27 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-13 07:57:19 +01:00
|
|
|
// MARK: - DetailWebViewControllerDelegate
|
2019-02-13 03:12:12 +01:00
|
|
|
|
|
|
|
extension DetailViewController: DetailWebViewControllerDelegate {
|
2017-11-06 05:31:50 +01:00
|
|
|
|
2019-02-13 03:12:12 +01:00
|
|
|
func mouseDidEnter(_ link: String) {
|
2019-02-11 06:39:11 +01:00
|
|
|
guard !link.isEmpty else {
|
2017-11-06 05:31:50 +01:00
|
|
|
return
|
|
|
|
}
|
2019-02-11 06:39:11 +01:00
|
|
|
statusBarView.mouseoverLink = link
|
2017-11-06 05:31:50 +01:00
|
|
|
}
|
|
|
|
|
2019-02-13 03:12:12 +01:00
|
|
|
func mouseDidExit(_ link: String) {
|
2019-02-11 06:39:11 +01:00
|
|
|
statusBarView.mouseoverLink = nil
|
2017-11-06 05:31:50 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-13 07:57:19 +01:00
|
|
|
// MARK: - Private
|
2018-02-19 06:49:46 +01:00
|
|
|
|
2017-12-20 22:39:31 +01:00
|
|
|
private extension DetailViewController {
|
|
|
|
|
2019-02-13 07:57:19 +01:00
|
|
|
func createWebViewController() -> DetailWebViewController {
|
|
|
|
let controller = DetailWebViewController()
|
|
|
|
controller.delegate = self
|
|
|
|
controller.state = .noSelection
|
|
|
|
return controller
|
2017-12-20 22:39:31 +01:00
|
|
|
}
|
|
|
|
}
|