diff --git a/Shared/Article Rendering/ArticleRenderer.swift b/Shared/Article Rendering/ArticleRenderer.swift index 2af9c6283..5851217ea 100644 --- a/Shared/Article Rendering/ArticleRenderer.swift +++ b/Shared/Article Rendering/ArticleRenderer.swift @@ -41,6 +41,69 @@ struct ArticleRenderer { private let title: String private let body: String private let baseURL: String? + + private static let longDateTimeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .long + formatter.timeStyle = .medium + return formatter + }() + + private static let mediumDateTimeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .short + return formatter + }() + + private static let shortDateTimeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .short + formatter.timeStyle = .short + return formatter + }() + + private static let longDateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .long + formatter.timeStyle = .none + return formatter + }() + + private static let mediumDateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .none + return formatter + }() + + private static let shortDateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .short + formatter.timeStyle = .none + return formatter + }() + + private static let longTimeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .none + formatter.timeStyle = .long + return formatter + }() + + private static let mediumTimeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .none + formatter.timeStyle = .medium + return formatter + }() + + private static let shortTimeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .none + formatter.timeStyle = .short + return formatter + }() private init(article: Article?, extractedArticle: ExtractedArticle?, theme: ArticleTheme) { self.article = article @@ -135,13 +198,6 @@ private extension ArticleRenderer { return articleTheme.template ?? ArticleRenderer.defaultTemplate } - func titleOrTitleLink() -> String { - if let link = article?.preferredLink { - return title.htmlByAddingLink(link) - } - return title - } - func articleSubstitutions() -> [String: String] { var d = [String: String]() @@ -150,15 +206,16 @@ private extension ArticleRenderer { return d } - let title = titleOrTitleLink() d["title"] = title + d["preferred_link"] = article.preferredLink ?? "" if let externalLink = article.externalURL, externalLink != article.preferredLink { - let displayLink = externalLink.strippingHTTPOrHTTPSScheme - let regarding = NSLocalizedString("Link", comment: "Link") - let externalLinkString = "\(regarding): \(displayLink)" - d["external_link"] = externalLinkString + d["external_link_label"] = NSLocalizedString("Link:", comment: "Link") + d["external_link_stripped"] = externalLink.strippingHTTPOrHTTPSScheme + d["external_link"] = externalLink } else { + d["external_link_label"] = "" + d["external_link_stripped"] = "" d["external_link"] = "" } @@ -175,7 +232,7 @@ private extension ArticleRenderer { d["avatar_src"] = imageIconURLString } else { - d["avatars"] = "" + d["avatar_src"] = "" } if self.title.isEmpty { @@ -184,33 +241,22 @@ private extension ArticleRenderer { d["dateline_style"] = "articleDateline" } - var feedLink = "" - if let feedTitle = article.webFeed?.nameForDisplay { - feedLink = feedTitle - if let feedURL = article.webFeed?.homePageURL { - feedLink = feedLink.htmlByAddingLink(feedURL, className: "feedLink") - } - } - d["feedlink"] = feedLink - - let datePublished = article.logicalDatePublished - let longDate = dateString(datePublished, .long, .medium) - let mediumDate = dateString(datePublished, .medium, .short) - let shortDate = dateString(datePublished, .short, .short) - - if let permalink = article.url { - d["date_long"] = longDate.htmlByAddingLink(permalink) - d["date_medium"] = mediumDate.htmlByAddingLink(permalink) - d["date_short"] = shortDate.htmlByAddingLink(permalink) - } - else { - d["date_long"] = longDate - d["date_medium"] = mediumDate - d["date_short"] = shortDate - } + d["feed_link_title"] = article.webFeed?.nameForDisplay ?? "" + d["feed_link"] = article.webFeed?.homePageURL ?? "" d["byline"] = byline() + let datePublished = article.logicalDatePublished + d["datetime_long"] = Self.longDateTimeFormatter.string(from: datePublished) + d["datetime_medium"] = Self.mediumDateTimeFormatter.string(from: datePublished) + d["datetime_short"] = Self.shortDateTimeFormatter.string(from: datePublished) + d["date_long"] = Self.longDateFormatter.string(from: datePublished) + d["date_medium"] = Self.mediumDateFormatter.string(from: datePublished) + d["date_short"] = Self.shortDateFormatter.string(from: datePublished) + d["time_long"] = Self.longTimeFormatter.string(from: datePublished) + d["time_medium"] = Self.mediumTimeFormatter.string(from: datePublished) + d["time_short"] = Self.shortTimeFormatter.string(from: datePublished) + return d } @@ -265,13 +311,6 @@ private extension ArticleRenderer { return byline } - func dateString(_ date: Date, _ dateStyle: DateFormatter.Style, _ timeStyle: DateFormatter.Style) -> String { - let dateFormatter = DateFormatter() - dateFormatter.dateStyle = dateStyle - dateFormatter.timeStyle = timeStyle - return dateFormatter.string(from: date) - } - #if os(iOS) func styleSubstitutions() -> [String: String] { var d = [String: String]() diff --git a/Shared/Article Rendering/template.html b/Shared/Article Rendering/template.html index 2e14ed119..a8bbed925 100644 --- a/Shared/Article Rendering/template.html +++ b/Shared/Article Rendering/template.html @@ -1,15 +1,47 @@ + +
- +
[[feedlink]]
[[byline]]
[[feed_link_title]]
[[byline]]
-

[[title]]

-
[[date_medium]]
- +

[[title]]

+
[[datetime_medium]]
+
[[body]]
diff --git a/Shared/Resources/Sepia.nnwtheme/template.html b/Shared/Resources/Sepia.nnwtheme/template.html index 2e14ed119..2b6461013 100644 --- a/Shared/Resources/Sepia.nnwtheme/template.html +++ b/Shared/Resources/Sepia.nnwtheme/template.html @@ -1,15 +1,15 @@
- +
[[feedlink]]
[[byline]]
[[feed_link_title]]
[[byline]]
-

[[title]]

-
[[date_medium]]
- +

[[title]]

+
[[datetime_medium]]
+
[[body]]