Generate open graph meta tags
This commit is contained in:
@ -24,9 +24,11 @@ final class FeedPageGenerator {
|
||||
|
||||
func generatePage(language: ContentLanguage,
|
||||
posts: [FeedEntryData],
|
||||
title: String,
|
||||
title: String?,
|
||||
description: String?,
|
||||
showTitle: Bool,
|
||||
image: FileResource?,
|
||||
pageUrl: String,
|
||||
pageTitle: String?,
|
||||
pageNumber: Int,
|
||||
totalPages: Int,
|
||||
languageButtonUrl: String,
|
||||
@ -44,10 +46,14 @@ final class FeedPageGenerator {
|
||||
text: language.next.rawValue,
|
||||
url: languageButtonUrl)
|
||||
|
||||
let imageUrl = image?.linkPreviewImage(results: results)
|
||||
|
||||
let pageHeader = PageHeader(
|
||||
language: language,
|
||||
title: title,
|
||||
title: title ?? pageTitle,
|
||||
description: description,
|
||||
image: imageUrl,
|
||||
pageUrl: pageUrl,
|
||||
iconUrl: iconUrl,
|
||||
languageButton: languageButton,
|
||||
links: content.navigationBar(in: language),
|
||||
@ -57,8 +63,8 @@ final class FeedPageGenerator {
|
||||
let page = GenericPage(
|
||||
header: pageHeader,
|
||||
additionalFooter: footer) { content in
|
||||
if showTitle {
|
||||
content += "<h1 class='separated-headline'>\(title)</h1>"
|
||||
if let pageTitle {
|
||||
content += "<h1 class='separated-headline'>\(pageTitle)</h1>"
|
||||
}
|
||||
for post in posts {
|
||||
content += FeedEntry(data: post).content
|
||||
|
@ -25,7 +25,7 @@ final class PageGenerator {
|
||||
text: settings.emptyPageText).content
|
||||
}
|
||||
|
||||
func generate(page: Page, language: ContentLanguage, results: PageGenerationResults) -> String? {
|
||||
func generate(page: Page, language: ContentLanguage, results: PageGenerationResults, pageUrl: String) -> String? {
|
||||
let contentGenerator = PageContentParser(
|
||||
content: content,
|
||||
language: language, results: results)
|
||||
@ -51,7 +51,7 @@ final class PageGenerator {
|
||||
}
|
||||
|
||||
let headers = makeHeaders(requiredItems: results.requiredHeaders, results: results)
|
||||
results.require(files: headers.compactMap { $0.file })
|
||||
results.require(files: headers.compactMap { $0.requiredFile })
|
||||
|
||||
let iconUrl = content.settings.navigation.localized(in: language).rootUrl
|
||||
let languageUrl = page.absoluteUrl(in: language.next)
|
||||
@ -59,10 +59,14 @@ final class PageGenerator {
|
||||
text: language.next.rawValue,
|
||||
url: languageUrl)
|
||||
|
||||
let imageUrl = localized.linkPreview.image?.linkPreviewImage(results: results)
|
||||
|
||||
let pageHeader = PageHeader(
|
||||
language: language,
|
||||
title: localized.linkPreview.title ?? localized.title,
|
||||
description: localized.linkPreview.description,
|
||||
image: imageUrl,
|
||||
pageUrl: pageUrl,
|
||||
iconUrl: iconUrl,
|
||||
languageButton: languageButton,
|
||||
links: content.navigationBar(in: language),
|
||||
|
@ -34,22 +34,45 @@ private struct TagHeaderContent {
|
||||
|
||||
let description: String?
|
||||
|
||||
let image: String?
|
||||
|
||||
let iconUrl: String
|
||||
|
||||
let links: [NavigationBar.Link]
|
||||
|
||||
let headers: Set<HeaderElement>
|
||||
|
||||
let baseUrl: String
|
||||
let basePath: String
|
||||
|
||||
let websiteUrl: String
|
||||
|
||||
let localizedBaseUrl: String
|
||||
|
||||
private func url(pageNumber: Int) -> String {
|
||||
baseUrl + "/\(pageNumber)"
|
||||
/**
|
||||
The path (relative to the output folder) for the html file
|
||||
*/
|
||||
func filePath(pageNumber: Int) -> String {
|
||||
basePath + "/\(pageNumber).html"
|
||||
}
|
||||
|
||||
func fileUrl(pageNumber: Int) -> String {
|
||||
url(pageNumber: pageNumber) + ".html"
|
||||
/**
|
||||
The absolute url (without domain) for the language button of the page
|
||||
*/
|
||||
private func languageButtonUrl(page: Int) -> String {
|
||||
guard page > 1 else {
|
||||
return localizedBaseUrl
|
||||
}
|
||||
return localizedBaseUrl + "/\(page)"
|
||||
}
|
||||
|
||||
/**
|
||||
The full url (including domain) to the page.
|
||||
*/
|
||||
private func pageUrl(page: Int) -> String {
|
||||
guard page > 1 else {
|
||||
return websiteUrl + basePath
|
||||
}
|
||||
return websiteUrl + basePath + "/\(page)"
|
||||
}
|
||||
|
||||
func pageHeader(pageNumber: Int) -> PageHeader {
|
||||
@ -57,10 +80,12 @@ private struct TagHeaderContent {
|
||||
language: language,
|
||||
title: title,
|
||||
description: description,
|
||||
image: image,
|
||||
pageUrl: pageUrl(page: pageNumber),
|
||||
iconUrl: iconUrl,
|
||||
languageButton: .init(
|
||||
text: language.next.rawValue,
|
||||
url: localizedBaseUrl + "/\(pageNumber)"),
|
||||
url: languageButtonUrl(page: pageNumber)),
|
||||
links: links,
|
||||
headers: headers,
|
||||
icons: [])
|
||||
@ -83,14 +108,19 @@ final class TagOverviewGenerator {
|
||||
|
||||
func generatePages(tags: [Tag], overview: Tag) {
|
||||
let localized = overview.localized(in: language)
|
||||
|
||||
let imageUrl = localized.linkPreview.image?.linkPreviewImage(results: results)
|
||||
|
||||
let header = TagHeaderContent(
|
||||
language: language,
|
||||
title: localized.linkPreview.title ?? localized.title,
|
||||
description: localized.linkPreview.description,
|
||||
image: imageUrl,
|
||||
iconUrl: content.settings.navigation.localized(in: language).rootUrl,
|
||||
links: content.navigationBar(in: language),
|
||||
headers: content.postPageHeaders,
|
||||
baseUrl: overview.absoluteUrl(in: language),
|
||||
basePath: overview.absoluteUrl(in: language),
|
||||
websiteUrl: content.settings.general.url,
|
||||
localizedBaseUrl: overview.absoluteUrl(in: language.next))
|
||||
|
||||
// Sort tags by title
|
||||
@ -140,16 +170,16 @@ final class TagOverviewGenerator {
|
||||
}
|
||||
if totalPages > 1 {
|
||||
content += PostFeedPageNavigation(
|
||||
linkPrefix: header.baseUrl,
|
||||
linkPrefix: header.basePath,
|
||||
currentPage: pageNumber,
|
||||
numberOfPages: totalPages).content
|
||||
}
|
||||
}
|
||||
let fileContent = page.content
|
||||
let url = header.fileUrl(pageNumber: pageNumber)
|
||||
let filePath = header.filePath(pageNumber: pageNumber)
|
||||
|
||||
guard content.storage.write(fileContent, to: url) else {
|
||||
results.unsavedOutput(url, source: .tagOverview)
|
||||
guard content.storage.write(fileContent, to: filePath) else {
|
||||
results.unsavedOutput(filePath, source: .tagOverview)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user