From 56d43f8f2d16bf0ca1179b22f3059e466d25704d Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Wed, 20 Nov 2019 18:16:54 -0600 Subject: [PATCH] Do a full reload of the article when rearranging the UI to accommodate for split screen color changes. --- Mac/MainWindow/Detail/DetailWebViewController.swift | 2 +- Shared/Article Rendering/main.js | 4 ++-- iOS/Article/ArticleViewController.swift | 13 ++++++++++++- iOS/SceneCoordinator.swift | 4 ++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Mac/MainWindow/Detail/DetailWebViewController.swift b/Mac/MainWindow/Detail/DetailWebViewController.swift index 9ae240bfc..1ef693fbe 100644 --- a/Mac/MainWindow/Detail/DetailWebViewController.swift +++ b/Mac/MainWindow/Detail/DetailWebViewController.swift @@ -221,7 +221,7 @@ private extension DetailWebViewController { var render = "error();" if let data = try? encoder.encode(templateData) { let json = String(data: data, encoding: .utf8)! - render = "render(\(json));" + render = "render(\(json), 0);" } webView.evaluateJavaScript(render) diff --git a/Shared/Article Rendering/main.js b/Shared/Article Rendering/main.js index 22a7a8442..4ecf8eb5f 100644 --- a/Shared/Article Rendering/main.js +++ b/Shared/Article Rendering/main.js @@ -30,11 +30,11 @@ function error() { document.body.innerHTML = "error"; } -function render(data) { +function render(data, scrollY) { document.getElementsByTagName("style")[0].innerHTML = data.style; document.body.innerHTML = data.body; - window.scrollTo(0, 0); + window.scrollTo(0, scrollY); wrapFrames() stripStyles() diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index 3f8689d9c..5f67abd26 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -59,6 +59,8 @@ class ArticleViewController: UIViewController { } } + var restoreOffset = 0 + var currentArticle: Article? { switch state { case .article(let article): @@ -190,9 +192,11 @@ class ArticleViewController: UIViewController { var render = "error();" if let data = try? encoder.encode(templateData) { let json = String(data: data, encoding: .utf8)! - render = "render(\(json));" + render = "render(\(json), \(restoreOffset));" } + restoreOffset = 0 + ArticleViewControllerWebViewProvider.shared.articleIconSchemeHandler.currentArticle = currentArticle webView?.scrollView.setZoomScale(1.0, animated: false) webView?.evaluateJavaScript(render) @@ -319,6 +323,13 @@ class ArticleViewController: UIViewController { webView?.evaluateJavaScript("showClickedImage();") } + func fullReload() { + if let offset = webView?.scrollView.contentOffset.y { + restoreOffset = Int(offset) + webView?.reload() + } + } + } // MARK: WKNavigationDelegate diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 9a18ae7e5..7e89ea43f 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -1572,6 +1572,10 @@ private extension SceneCoordinator { rootSplitViewController.showDetailViewController(controller, sender: self) } + // We have to do a full reload when installing an article controller. We may have changed color contexts + // and need to update the article colors. An example is in dark mode. Split screen doesn't use true black + // like darkmode usually does. + articleController.fullReload() return articleController }