48 lines
1.5 KiB
Swift
48 lines
1.5 KiB
Swift
final class PageGenerator {
|
|
|
|
private let content: Content
|
|
|
|
private let imageGenerator: ImageGenerator
|
|
|
|
private let navigationBarData: NavigationBarData
|
|
|
|
let results = GenerationResultsHandler()
|
|
|
|
init(content: Content, imageGenerator: ImageGenerator, navigationBarData: NavigationBarData) {
|
|
self.content = content
|
|
self.imageGenerator = imageGenerator
|
|
self.navigationBarData = navigationBarData
|
|
}
|
|
|
|
func generate(page: Page, language: ContentLanguage) throws -> String {
|
|
let contentGenerator = PageContentParser(
|
|
page: page,
|
|
content: content,
|
|
language: language,
|
|
results: results,
|
|
imageGenerator: imageGenerator)
|
|
|
|
let rawPageContent = try content.storage.pageContent(for: page.id, language: language)
|
|
|
|
let pageContent = contentGenerator.generatePage(from: rawPageContent)
|
|
|
|
let localized = page.localized(in: language)
|
|
|
|
let tags: [FeedEntryData.Tag] = page.tags.map { tag in
|
|
.init(name: tag.localized(in: language).name,
|
|
url: content.tagLink(tag, language: language))
|
|
}
|
|
|
|
return ContentPage(
|
|
language: language,
|
|
dateString: page.dateText(in: language),
|
|
title: localized.title,
|
|
tags: tags,
|
|
linkTitle: localized.linkPreviewTitle ?? localized.title,
|
|
description: localized.linkPreviewDescription ?? "",
|
|
navigationBarData: navigationBarData,
|
|
pageContent: pageContent)
|
|
.content
|
|
}
|
|
}
|