52 lines
1.9 KiB
Swift
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)
|
|
}
|
|
}
|