2024-12-13 11:26:34 +01:00

52 lines
1.9 KiB
Swift

final class PageGenerator {
private let content: Content
private let imageGenerator: ImageGenerator
private let navigationBarLinks: [NavigationBar.Link]
init(content: Content, imageGenerator: ImageGenerator, navigationBarLinks: [NavigationBar.Link]) {
self.content = content
self.imageGenerator = imageGenerator
self.navigationBarLinks = navigationBarLinks
}
func generate(page: Page, language: ContentLanguage) throws -> (page: String, results: PageGenerationResults) {
let contentGenerator = PageContentParser(
content: content,
language: language)
let rawPageContent = try content.storage.pageContent(for: page.id, language: language)
let pageContent = contentGenerator.generatePage(from: rawPageContent)
contentGenerator.requestImages(imageGenerator)
let localized = page.localized(in: language)
let tags: [FeedEntryData.Tag] = page.tags.map { tag in
.init(name: tag.localized(in: language).name,
url: content.absoluteUrlToTag(tag, language: language))
}
let headers = AdditionalPageHeaders(
headers: contentGenerator.results.requiredHeaders,
assetPath: content.settings.pages.javascriptFilesPath)
let fullPage = ContentPage(
language: language,
dateString: page.dateText(in: language),
title: localized.title,
tags: tags,
linkTitle: localized.linkPreviewTitle ?? localized.title,
description: localized.linkPreviewDescription ?? "",
navigationBarLinks: navigationBarLinks,
pageContent: pageContent,
headers: headers.content,
footers: contentGenerator.results.requiredFooters.sorted())
.content
return (fullPage, contentGenerator.results)
}
}