diff --git a/Mac/MainWindow/Detail/DetailWebViewController.swift b/Mac/MainWindow/Detail/DetailWebViewController.swift
index bf047ea5b..942f4c0ff 100644
--- a/Mac/MainWindow/Detail/DetailWebViewController.swift
+++ b/Mac/MainWindow/Detail/DetailWebViewController.swift
@@ -199,6 +199,8 @@ extension DetailWebViewController: WKNavigationDelegate {
struct TemplateData: Codable {
let style: String
let body: String
+ let title: String
+ let baseURL: String
}
private extension DetailWebViewController {
@@ -227,7 +229,7 @@ private extension DetailWebViewController {
rendering = ArticleRenderer.articleHTML(article: article, extractedArticle: extractedArticle, style: style)
}
- let templateData = TemplateData(style: rendering.style, body: rendering.html)
+ let templateData = TemplateData(style: rendering.style, body: rendering.html, title: rendering.title, baseURL: rendering.baseURL)
let encoder = JSONEncoder()
var render = "error();"
diff --git a/Mac/MainWindow/Detail/page.html b/Mac/MainWindow/Detail/page.html
index b9cac098b..5ed1f5e46 100644
--- a/Mac/MainWindow/Detail/page.html
+++ b/Mac/MainWindow/Detail/page.html
@@ -1,11 +1,13 @@
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
diff --git a/Shared/Article Rendering/ArticleRenderer.swift b/Shared/Article Rendering/ArticleRenderer.swift
index e19adec0a..25a510907 100644
--- a/Shared/Article Rendering/ArticleRenderer.swift
+++ b/Shared/Article Rendering/ArticleRenderer.swift
@@ -13,7 +13,7 @@ import Account
struct ArticleRenderer {
- typealias Rendering = (style: String, html: String)
+ typealias Rendering = (style: String, html: String, title: String, baseURL: String)
typealias Page = (url: URL, baseURL: URL)
static var imageIconScheme = "nnwImageIcon"
@@ -49,27 +49,27 @@ struct ArticleRenderer {
static func articleHTML(article: Article, extractedArticle: ExtractedArticle? = nil, style: ArticleStyle) -> Rendering {
let renderer = ArticleRenderer(article: article, extractedArticle: extractedArticle, style: style)
- return (renderer.styleString(), renderer.articleHTML)
+ return (renderer.styleString(), renderer.articleHTML, renderer.title, renderer.baseURL ?? "")
}
static func multipleSelectionHTML(style: ArticleStyle) -> Rendering {
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, style: style)
- return (renderer.styleString(), renderer.multipleSelectionHTML)
+ return (renderer.styleString(), renderer.multipleSelectionHTML, renderer.title, renderer.baseURL ?? "")
}
static func loadingHTML(style: ArticleStyle) -> Rendering {
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, style: style)
- return (renderer.styleString(), renderer.loadingHTML)
+ return (renderer.styleString(), renderer.loadingHTML, renderer.title, renderer.baseURL ?? "")
}
static func noSelectionHTML(style: ArticleStyle) -> Rendering {
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, style: style)
- return (renderer.styleString(), renderer.noSelectionHTML)
+ return (renderer.styleString(), renderer.noSelectionHTML, renderer.title, renderer.baseURL ?? "")
}
static func noContentHTML(style: ArticleStyle) -> Rendering {
let renderer = ArticleRenderer(article: nil, extractedArticle: nil, style: style)
- return (renderer.styleString(), renderer.noContentHTML)
+ return (renderer.styleString(), renderer.noContentHTML, renderer.title, renderer.baseURL ?? "")
}
}
@@ -79,26 +79,26 @@ private extension ArticleRenderer {
private var articleHTML: String {
let body = try! MacroProcessor.renderedText(withTemplate: template(), substitutions: articleSubstitutions())
- return renderHTML(withBody: body)
+ return body
}
private var multipleSelectionHTML: String {
let body = "Multiple selection
"
- return renderHTML(withBody: body)
+ return body
}
private var loadingHTML: String {
let body = "Loading...
"
- return renderHTML(withBody: body)
+ return body
}
private var noSelectionHTML: String {
let body = "No selection
"
- return renderHTML(withBody: body)
+ return body
}
private var noContentHTML: String {
- return renderHTML(withBody: "")
+ return ""
}
static var defaultStyleSheet: String = {
@@ -225,17 +225,6 @@ private extension ArticleRenderer {
return dateFormatter.string(from: date)
}
- func renderHTML(withBody body: String) -> String {
- var s = ""
- if let baseURL = baseURL {
- s += ("")
- }
- s += title.htmlBySurroundingWithTag("title")
-
- s += body
- return s
- }
-
}
// MARK: - Article extension
diff --git a/Shared/Article Rendering/main.js b/Shared/Article Rendering/main.js
index ddfcf3e18..c99a7ece4 100644
--- a/Shared/Article Rendering/main.js
+++ b/Shared/Article Rendering/main.js
@@ -90,6 +90,13 @@ function error() {
function render(data, scrollY) {
document.getElementsByTagName("style")[0].innerHTML = data.style;
+
+ let title = document.getElementsByTagName("title")[0];
+ title.textContent = data.title
+
+ let base = document.getElementsByTagName("base")[0];
+ base.href = data.baseURL
+
document.body.innerHTML = data.body;
window.scrollTo(0, scrollY);
diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift
index b85f1dd40..71a7c37a1 100644
--- a/iOS/Article/WebViewController.swift
+++ b/iOS/Article/WebViewController.swift
@@ -437,6 +437,8 @@ extension WebViewController: UIScrollViewDelegate {
private struct TemplateData: Codable {
let style: String
let body: String
+ let title: String
+ let baseURL: String
}
private struct ImageClickMessage: Codable {
@@ -478,7 +480,7 @@ private extension WebViewController {
rendering = ArticleRenderer.noSelectionHTML(style: style)
}
- let templateData = TemplateData(style: rendering.style, body: rendering.html)
+ let templateData = TemplateData(style: rendering.style, body: rendering.html, title: rendering.title, baseURL: rendering.baseURL)
let encoder = JSONEncoder()
var render = "error();"
diff --git a/iOS/Resources/page.html b/iOS/Resources/page.html
index fae517747..22bc5881c 100644
--- a/iOS/Resources/page.html
+++ b/iOS/Resources/page.html
@@ -1,15 +1,17 @@
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+