Generate open graph meta tags

This commit is contained in:
Christoph Hagen
2025-01-15 22:04:48 +01:00
parent 4b448f3415
commit f6b868502d
21 changed files with 324 additions and 109 deletions

View File

@ -7,20 +7,28 @@ struct FeedGeneratorSource: PostListPageGeneratorSource {
let results: PageGenerationResults
var showTitle: Bool {
false
}
var postsPerPage: Int {
content.settings.posts.postsPerPage
}
var pageTitle: String {
content.settings.posts.localized(in: language).title
var pageTitle: String? {
nil // Don't show title in page
}
var pageDescription: String {
content.settings.posts.localized(in: language).description
private var linkPreview: LinkPreview {
content.settings.posts.localized(in: language).linkPreview
}
var linkTitle: String? {
linkPreview.title
}
var linkDescription: String? {
linkPreview.description
}
var linkImage: FileResource? {
linkPreview.image
}
/**

View File

@ -17,7 +17,15 @@ final class PostListPageGenerator {
}
private func pageUrl(in language: ContentLanguage, pageNumber: Int) -> String {
"\(source.pageUrlPrefix(for: language))/\(pageNumber)"
let base = source.content.settings.general.url + source.pageUrlPrefix(for: language)
guard pageNumber > 1 else {
return base
}
return base + "/\(pageNumber)"
}
private func filePath(in language: ContentLanguage, pageNumber: Int) -> String {
"\(source.pageUrlPrefix(for: language))/\(pageNumber).html"
}
func createPages(for posts: [Post]) {
@ -82,18 +90,23 @@ final class PostListPageGenerator {
// Includes leading slash
let languageButtonUrl = pageUrl(in: language.next, pageNumber: pageIndex)
// Includes leading slash
let pageUrl = pageUrl(in: language, pageNumber: pageIndex)
let fileContent = feedPageGenerator.generatePage(
language: language,
posts: posts,
title: source.pageTitle,
description: source.pageDescription,
showTitle: source.showTitle,
title: source.linkTitle,
description: source.linkDescription,
image: source.linkImage,
pageUrl: pageUrl,
pageTitle: source.pageTitle,
pageNumber: pageIndex,
totalPages: pageCount,
languageButtonUrl: languageButtonUrl,
linkPrefix: source.pageUrlPrefix(for: language))
// Includes leading slash
let filePath = pageUrl(in: language, pageNumber: pageIndex) + ".html"
let filePath = self.filePath(in: language, pageNumber: pageIndex)
guard save(fileContent, to: filePath) else {
source.results.unsavedOutput(filePath, source: .feed)
return

View File

@ -7,11 +7,13 @@ protocol PostListPageGeneratorSource {
var results: PageGenerationResults { get }
var showTitle: Bool { get }
var pageTitle: String? { get }
var pageTitle: String { get }
var linkTitle: String? { get }
var pageDescription: String { get }
var linkDescription: String? { get }
var linkImage: FileResource? { get }
/**
The url to the page, including a leading slash

View File

@ -9,20 +9,28 @@ struct TagPageGeneratorSource: PostListPageGeneratorSource {
let tag: Tag
var showTitle: Bool {
true
}
var postsPerPage: Int {
content.settings.posts.postsPerPage
}
var pageTitle: String {
tag.localized(in: language).name
var pageTitle: String? {
linkPreview.title ?? tag.localized(in: language).name
}
var pageDescription: String {
tag.localized(in: language).linkPreview.description ?? ""
private var linkPreview: LinkPreview {
tag.localized(in: language).linkPreview
}
var linkTitle: String? {
linkPreview.title
}
var linkDescription: String? {
linkPreview.description
}
var linkImage: FileResource? {
linkPreview.image
}
func pageUrlPrefix(for language: ContentLanguage) -> String {