From ddb7eb6ee11cc986df29bb4ef704e0543c13a7c7 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Mon, 10 Sep 2018 13:39:41 -0500 Subject: [PATCH] Enabled body css class to follow system appearance changes between light and dark modes. Issue #404 & Issue #405 --- NetNewsWire/MainWindow/Detail/ArticleRenderer.swift | 12 ++++++++---- .../MainWindow/Detail/DetailViewController.swift | 4 +++- NetNewsWire/MainWindow/Detail/DetailWebView.swift | 6 ++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/NetNewsWire/MainWindow/Detail/ArticleRenderer.swift b/NetNewsWire/MainWindow/Detail/ArticleRenderer.swift index 9f7764b48..13b50167b 100644 --- a/NetNewsWire/MainWindow/Detail/ArticleRenderer.swift +++ b/NetNewsWire/MainWindow/Detail/ArticleRenderer.swift @@ -20,6 +20,8 @@ class ArticleRenderer { let article: Article let articleStyle: ArticleStyle + let appearance: NSAppearance? + static var faviconImgTagCache = [Feed: String]() static var feedIconImgTagCache = [Feed: String]() @@ -87,10 +89,12 @@ class ArticleRenderer { return renderedHTML() } - init(article: Article, style: ArticleStyle) { + init(article: Article, style: ArticleStyle, appearance: NSAppearance? = nil) { self.article = article self.articleStyle = style + self.appearance = appearance + } // MARK: Private @@ -472,9 +476,9 @@ class ArticleRenderer { """ - - s += "\n\n\n\n" - + + let appearanceClass = appearance?.isDarkMode ?? false ? "dark" : "light" + s += "\n\n\n\n" s += RSMacroProcessor.renderedText(withTemplate: template(), substitutions: substitutions(), macroStart: "[[", macroEnd: "]]") diff --git a/NetNewsWire/MainWindow/Detail/DetailViewController.swift b/NetNewsWire/MainWindow/Detail/DetailViewController.swift index 1db0a4c1f..0013c6ff0 100644 --- a/NetNewsWire/MainWindow/Detail/DetailViewController.swift +++ b/NetNewsWire/MainWindow/Detail/DetailViewController.swift @@ -195,7 +195,9 @@ private extension DetailViewController { func reloadHTML() { if let article = article { - let articleRenderer = ArticleRenderer(article: article, style: ArticleStylesManager.shared.currentStyle) + let articleRenderer = ArticleRenderer(article: article, + style: ArticleStylesManager.shared.currentStyle, + appearance: self.view.effectiveAppearance) webview.loadHTMLString(articleRenderer.html, baseURL: articleRenderer.baseURL) } else { diff --git a/NetNewsWire/MainWindow/Detail/DetailWebView.swift b/NetNewsWire/MainWindow/Detail/DetailWebView.swift index 82b560d01..a23634d0d 100644 --- a/NetNewsWire/MainWindow/Detail/DetailWebView.swift +++ b/NetNewsWire/MainWindow/Detail/DetailWebView.swift @@ -30,6 +30,12 @@ final class DetailWebView: WKWebView { super.willOpenMenu(menu, with: event) } + + override func viewDidChangeEffectiveAppearance() { + let bodyClass = effectiveAppearance.isDarkMode ? "dark" : "light" + evaluateJavaScript("document.getElementById('bodyId').className = '\(bodyClass)'") + } + } private extension NSUserInterfaceItemIdentifier {