Create new web view controllers when the JavaScript setting changes, so that the effect of the change is immediate and apparent.
This commit is contained in:
parent
faaf1baba9
commit
ee26aadb82
@ -5,6 +5,7 @@
|
|||||||
// Created by Brent Simmons on 9/22/17.
|
// Created by Brent Simmons on 9/22/17.
|
||||||
// Copyright © 2017 Ranchero Software. All rights reserved.
|
// Copyright © 2017 Ranchero Software. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppKit
|
import AppKit
|
||||||
|
|
||||||
enum FontSize: Int {
|
enum FontSize: Int {
|
||||||
@ -18,8 +19,7 @@ final class AppDefaults {
|
|||||||
|
|
||||||
static let defaultThemeName = "Default"
|
static let defaultThemeName = "Default"
|
||||||
|
|
||||||
static var shared = AppDefaults()
|
static let shared = AppDefaults()
|
||||||
private init() {}
|
|
||||||
|
|
||||||
struct Key {
|
struct Key {
|
||||||
static let firstRunDate = "firstRunDate"
|
static let firstRunDate = "firstRunDate"
|
||||||
|
@ -35,4 +35,10 @@ final class DetailContainerView: NSView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func draw(_ dirtyRect: NSRect) {
|
||||||
|
NSColor.controlBackgroundColor.set()
|
||||||
|
let r = NSIntersectionRect(dirtyRect, bounds)
|
||||||
|
r.fill()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,15 +25,10 @@ final class DetailViewController: NSViewController, WKUIDelegate {
|
|||||||
@IBOutlet var containerView: DetailContainerView!
|
@IBOutlet var containerView: DetailContainerView!
|
||||||
@IBOutlet var statusBarView: DetailStatusBarView!
|
@IBOutlet var statusBarView: DetailStatusBarView!
|
||||||
|
|
||||||
lazy var regularWebViewController = {
|
private lazy var regularWebViewController = createWebViewController()
|
||||||
return createWebViewController()
|
private var searchWebViewController: DetailWebViewController?
|
||||||
}()
|
|
||||||
|
|
||||||
lazy var searchWebViewController = {
|
private var currentWebViewController: DetailWebViewController! {
|
||||||
return createWebViewController()
|
|
||||||
}()
|
|
||||||
|
|
||||||
var currentWebViewController: DetailWebViewController! {
|
|
||||||
didSet {
|
didSet {
|
||||||
let webview = currentWebViewController.view
|
let webview = currentWebViewController.view
|
||||||
if containerView.contentView === webview {
|
if containerView.contentView === webview {
|
||||||
@ -44,18 +39,44 @@ final class DetailViewController: NSViewController, WKUIDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var currentSourceMode: TimelineSourceMode = .regular {
|
||||||
|
didSet {
|
||||||
|
currentWebViewController = webViewController(for: currentSourceMode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var detailStateForRegular: DetailState = .noSelection {
|
||||||
|
didSet {
|
||||||
|
webViewController(for: .regular).state = detailStateForRegular
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var detailStateForSearch: DetailState = .noSelection {
|
||||||
|
didSet {
|
||||||
|
webViewController(for: .search).state = detailStateForSearch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var isArticleContentJavascriptEnabled = AppDefaults.shared.isArticleContentJavascriptEnabled
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
currentWebViewController = regularWebViewController
|
currentWebViewController = regularWebViewController
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange(_:)), name: UserDefaults.didChangeNotification, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - API
|
// MARK: - API
|
||||||
|
|
||||||
func setState(_ state: DetailState, mode: TimelineSourceMode) {
|
func setState(_ state: DetailState, mode: TimelineSourceMode) {
|
||||||
webViewController(for: mode).state = state
|
switch mode {
|
||||||
|
case .regular:
|
||||||
|
detailStateForRegular = state
|
||||||
|
case .search:
|
||||||
|
detailStateForSearch = state
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func showDetail(for mode: TimelineSourceMode) {
|
func showDetail(for mode: TimelineSourceMode) {
|
||||||
currentWebViewController = webViewController(for: mode)
|
currentSourceMode = mode
|
||||||
}
|
}
|
||||||
|
|
||||||
func stopMediaPlayback() {
|
func stopMediaPlayback() {
|
||||||
@ -130,7 +151,32 @@ private extension DetailViewController {
|
|||||||
case .regular:
|
case .regular:
|
||||||
return regularWebViewController
|
return regularWebViewController
|
||||||
case .search:
|
case .search:
|
||||||
return searchWebViewController
|
if searchWebViewController == nil {
|
||||||
|
searchWebViewController = createWebViewController()
|
||||||
|
}
|
||||||
|
return searchWebViewController!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func userDefaultsDidChange(_ : Notification) {
|
||||||
|
if AppDefaults.shared.isArticleContentJavascriptEnabled != isArticleContentJavascriptEnabled {
|
||||||
|
isArticleContentJavascriptEnabled = AppDefaults.shared.isArticleContentJavascriptEnabled
|
||||||
|
createNewWebViewsAndRestoreState()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func createNewWebViewsAndRestoreState() {
|
||||||
|
|
||||||
|
regularWebViewController = createWebViewController()
|
||||||
|
currentWebViewController = regularWebViewController
|
||||||
|
regularWebViewController.state = detailStateForRegular
|
||||||
|
|
||||||
|
searchWebViewController = nil
|
||||||
|
|
||||||
|
if currentSourceMode == .search {
|
||||||
|
searchWebViewController = createWebViewController()
|
||||||
|
currentWebViewController = searchWebViewController
|
||||||
|
searchWebViewController!.state = detailStateForSearch
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user