CHGenerator/Sources/Generator/Generators/OverviewSectionGenerator.swift

68 lines
2.7 KiB
Swift
Raw Normal View History

2022-08-16 10:39:05 +02:00
import Foundation
struct OverviewSectionGenerator {
private let multipleSectionsTemplate: OverviewSectionTemplate
private let singleSectionsTemplate: OverviewSectionCleanTemplate
private let generator: ThumbnailListGenerator
2022-12-04 19:15:22 +01:00
init(factory: TemplateFactory, results: GenerationResultsHandler) {
2022-08-16 10:39:05 +02:00
self.multipleSectionsTemplate = factory.overviewSection
self.singleSectionsTemplate = factory.overviewSectionClean
2022-12-04 19:15:22 +01:00
self.generator = ThumbnailListGenerator(factory: factory, results: results)
2022-08-16 10:39:05 +02:00
}
func generate(sections: [Element], in parent: Element, language: String, sectionItemCount: Int) -> String {
2022-12-01 15:39:39 +01:00
let content = sectionsContent(sections, in: parent, language: language, sectionItemCount: sectionItemCount)
if parent.showMostRecentSection {
let news = newsSectionContent(for: parent, language: language, sectionItemCount: sectionItemCount)
return news + "\n" + content
} else {
return content
}
}
private func newsSectionContent(for element: Element, language: String, sectionItemCount: Int) -> String {
2022-12-04 19:15:22 +01:00
// let shownElements = element.mostRecentElements(sectionItemCount)
2022-12-01 15:39:39 +01:00
return ""
2022-12-04 19:15:22 +01:00
// return generator.generateContent(
// items: shownElements,
// parent: element,
// language: language,
// style: element.thumbnailStyle)
2022-12-01 15:39:39 +01:00
}
private func sectionsContent(_ sections: [Element], in parent: Element, language: String, sectionItemCount: Int) -> String {
sections.map { section in
2022-08-16 10:39:05 +02:00
let metadata = section.localized(for: language)
let fullUrl = section.fullPageUrl(for: language)
let relativeUrl = parent.relativePathToFileWithPath(fullUrl)
var content = [OverviewSectionTemplate.Key : String]()
content[.url] = relativeUrl
content[.title] = metadata.title
2022-08-26 22:29:32 +02:00
content[.items] = generator.generateContent(
items: section.itemsForOverview(sectionItemCount),
parent: parent,
language: language,
style: section.thumbnailStyle)
content[.more] = metadata.moreLinkText
2022-08-16 10:39:05 +02:00
return multipleSectionsTemplate.generate(content)
}
.joined(separator: "\n")
}
func generate(section: Element, language: String) -> String {
2022-08-16 10:39:05 +02:00
var content = [OverviewSectionCleanTemplate.Key : String]()
2022-08-26 22:29:32 +02:00
content[.items] = generator.generateContent(
items: section.itemsForOverview(),
parent: section,
language: language,
style: section.thumbnailStyle)
2022-08-26 22:29:32 +02:00
return singleSectionsTemplate.generate(content)
2022-08-16 10:39:05 +02:00
}
}