|
|
@@ -5,6 +5,7 @@ import WebKit
|
|
|
struct RedditWebView: NSViewRepresentable {
|
|
|
let url: URL
|
|
|
let reloadTrigger: Int
|
|
|
+ var isDarkMode: Bool
|
|
|
var goBackTrigger: Int = 0
|
|
|
var onCanGoBackChange: (Bool) -> Void = { _ in }
|
|
|
var onAuthError: (String) -> Void = { _ in }
|
|
|
@@ -22,7 +23,9 @@ struct RedditWebView: NSViewRepresentable {
|
|
|
container.webView.uiDelegate = context.coordinator
|
|
|
context.coordinator.container = container
|
|
|
context.coordinator.lastReloadTrigger = reloadTrigger
|
|
|
+ context.coordinator.lastAppliedDarkMode = isDarkMode
|
|
|
context.coordinator.startObservingNavigation(in: container.webView)
|
|
|
+ container.applyUnderPageBackground(isDarkMode: isDarkMode)
|
|
|
container.load(url: url)
|
|
|
return container
|
|
|
}
|
|
|
@@ -30,6 +33,11 @@ struct RedditWebView: NSViewRepresentable {
|
|
|
func updateNSView(_ container: RedditWebViewContainer, context: Context) {
|
|
|
context.coordinator.onCanGoBackChange = onCanGoBackChange
|
|
|
|
|
|
+ if context.coordinator.lastAppliedDarkMode != isDarkMode {
|
|
|
+ context.coordinator.lastAppliedDarkMode = isDarkMode
|
|
|
+ container.applyUnderPageBackground(isDarkMode: isDarkMode)
|
|
|
+ }
|
|
|
+
|
|
|
if context.coordinator.lastGoBackTrigger != goBackTrigger {
|
|
|
context.coordinator.lastGoBackTrigger = goBackTrigger
|
|
|
if container.webView.canGoBack {
|
|
|
@@ -50,6 +58,7 @@ struct RedditWebView: NSViewRepresentable {
|
|
|
weak var container: RedditWebViewContainer?
|
|
|
var lastReloadTrigger = -1
|
|
|
var lastGoBackTrigger = 0
|
|
|
+ var lastAppliedDarkMode: Bool?
|
|
|
var lastLoadedURL: URL?
|
|
|
private var prefillWorkItem: DispatchWorkItem?
|
|
|
private var canGoBackObservation: NSKeyValueObservation?
|
|
|
@@ -291,4 +300,10 @@ final class RedditWebViewContainer: NSView {
|
|
|
pendingURL = nil
|
|
|
webView.load(URLRequest(url: url))
|
|
|
}
|
|
|
+
|
|
|
+ func applyUnderPageBackground(isDarkMode: Bool) {
|
|
|
+ let color = AppearanceManager.webUnderPageBackgroundColor(isDarkMode: isDarkMode)
|
|
|
+ RedditWebViewManager.applyUnderPageBackground(to: webView, isDarkMode: isDarkMode)
|
|
|
+ layer?.backgroundColor = color.cgColor
|
|
|
+ }
|
|
|
}
|