diff --git a/Mac/MainWindow/Detail/DetailWebViewController.swift b/Mac/MainWindow/Detail/DetailWebViewController.swift index 876523e4e..43d9ed835 100644 --- a/Mac/MainWindow/Detail/DetailWebViewController.swift +++ b/Mac/MainWindow/Detail/DetailWebViewController.swift @@ -161,6 +161,7 @@ extension DetailWebViewController: WKNavigationDelegate { if waitingForFirstReload { assert(webView.isHidden) waitingForFirstReload = false + reloadHTML() // Waiting for the first navigation to complete isn't long enough to avoid the flash of white. // A hard coded value is awful, but 5/100th of a second seems to be enough. @@ -173,6 +174,7 @@ extension DetailWebViewController: WKNavigationDelegate { // MARK: - Private struct TemplateData: Codable { + let style: String let body: String } @@ -180,20 +182,20 @@ private extension DetailWebViewController { func reloadHTML() { let style = ArticleStylesManager.shared.currentStyle - let html: String + let rendering: ArticleRendering switch state { case .noSelection: - html = ArticleRenderer.noSelectionHTML(style: style) + rendering = ArticleRenderer.noSelectionHTML(style: style) case .multipleSelection: - html = ArticleRenderer.multipleSelectionHTML(style: style) + rendering = ArticleRenderer.multipleSelectionHTML(style: style) case .article(let article): - html = ArticleRenderer.articleHTML(article: article, style: style) + rendering = ArticleRenderer.articleHTML(article: article, style: style) case .extracted(let article, let extractedArticle): - html = ArticleRenderer.articleHTML(article: article, extractedArticle: extractedArticle, style: style) + rendering = ArticleRenderer.articleHTML(article: article, extractedArticle: extractedArticle, style: style) } - let templateData = TemplateData(body: html) + let templateData = TemplateData(style: rendering.style, body: rendering.html) let encoder = JSONEncoder() var render = "error();" diff --git a/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift b/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift index 4f55cd110..5d6b9493d 100644 --- a/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift +++ b/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift @@ -20,7 +20,8 @@ import RSCore static let articleUTIInternalType = NSPasteboard.PasteboardType(rawValue: articleUTIInternal) private lazy var renderedHTML: String = { - return ArticleRenderer.articleHTML(article: article, style: ArticleStylesManager.shared.currentStyle) + let rendering = ArticleRenderer.articleHTML(article: article, style: ArticleStylesManager.shared.currentStyle) + return rendering.html }() init(article: Article) { diff --git a/Shared/Article Rendering/ArticleRenderer.swift b/Shared/Article Rendering/ArticleRenderer.swift index 140acbb6f..5903b69f1 100644 --- a/Shared/Article Rendering/ArticleRenderer.swift +++ b/Shared/Article Rendering/ArticleRenderer.swift @@ -11,6 +11,8 @@ import RSCore import Articles import Account +typealias ArticleRendering = (style: String, html: String) + struct ArticleRenderer { private let article: Article? @@ -36,24 +38,24 @@ struct ArticleRenderer { // MARK: - API - static func articleHTML(article: Article, extractedArticle: ExtractedArticle? = nil, style: ArticleStyle) -> String { + static func articleHTML(article: Article, extractedArticle: ExtractedArticle? = nil, style: ArticleStyle) -> ArticleRendering { let renderer = ArticleRenderer(article: article, extractedArticle: extractedArticle, style: style) - return renderer.articleHTML + return (renderer.styleString(), renderer.articleHTML) } - static func multipleSelectionHTML(style: ArticleStyle) -> String { + static func multipleSelectionHTML(style: ArticleStyle) -> ArticleRendering { let renderer = ArticleRenderer(article: nil, extractedArticle: nil, style: style) - return renderer.multipleSelectionHTML + return (renderer.styleString(), renderer.multipleSelectionHTML) } - static func noSelectionHTML(style: ArticleStyle) -> String { + static func noSelectionHTML(style: ArticleStyle) -> ArticleRendering { let renderer = ArticleRenderer(article: nil, extractedArticle: nil, style: style) - return renderer.noSelectionHTML + return (renderer.styleString(), renderer.noSelectionHTML) } - static func noContentHTML(style: ArticleStyle) -> String { + static func noContentHTML(style: ArticleStyle) -> ArticleRendering { let renderer = ArticleRenderer(article: nil, extractedArticle: nil, style: style) - return renderer.noContentHTML + return (renderer.styleString(), renderer.noContentHTML) } } diff --git a/Shared/Article Rendering/page.html b/Shared/Article Rendering/page.html index 78d2b6e69..8178a7548 100644 --- a/Shared/Article Rendering/page.html +++ b/Shared/Article Rendering/page.html @@ -1,175 +1,6 @@