Copy required files for pages

This commit is contained in:
Christoph Hagen
2022-08-16 12:26:45 +02:00
parent 14b935249f
commit 02a3dd4007
13 changed files with 85 additions and 46 deletions

View File

@@ -20,7 +20,7 @@ struct IndexPageGenerator {
private let factory: LocalizedSiteTemplate
init(factory: LocalizedSiteTemplate, imageProcessor: ImageProcessor) {
init(factory: LocalizedSiteTemplate) {
self.factory = factory
}

View File

@@ -3,10 +3,10 @@ import Ink
struct PageContentGenerator {
private let imageProcessor: ImageProcessor
private let files: FileProcessor
init(imageProcessor: ImageProcessor) {
self.imageProcessor = imageProcessor
init(files: FileProcessor) {
self.files = files
}
func generate(page: Page, language: String, at url: URL) throws -> String {
@@ -71,7 +71,7 @@ struct PageContentGenerator {
let size: NSSize
let imagePath = page.pathRelativeToRootForContainedInputFile(file)
do {
size = try imageProcessor.requireImage(
size = try files.requireImage(
source: imagePath,
destination: imagePath,
width: pageImageWidth,

View File

@@ -6,9 +6,9 @@ struct OverviewPageGenerator {
let outputFolder: URL
init(factory: LocalizedSiteTemplate, imageProcessor: ImageProcessor) {
init(factory: LocalizedSiteTemplate, files: FileProcessor) {
self.factory = factory
self.outputFolder = imageProcessor.outputFolder
self.outputFolder = files.outputFolder
}
func generate(

View File

@@ -6,15 +6,15 @@ struct OverviewSectionGenerator {
private let singleSectionsTemplate: OverviewSectionCleanTemplate
let imageProcessor: ImageProcessor
let files: FileProcessor
private let generator: ThumbnailListGenerator
init(factory: TemplateFactory, imageProcessor: ImageProcessor) {
init(factory: TemplateFactory, files: FileProcessor) {
self.multipleSectionsTemplate = factory.overviewSection
self.singleSectionsTemplate = factory.overviewSectionClean
self.imageProcessor = imageProcessor
self.generator = ThumbnailListGenerator(factory: factory, imageProcessor: imageProcessor)
self.files = files
self.generator = ThumbnailListGenerator(factory: factory, files: files)
}
func generate(sections: [Section], in parent: SiteElement, language: String, sectionItemCount: Int) throws -> String {

View File

@@ -12,11 +12,11 @@ struct PageGenerator {
private let factory: LocalizedSiteTemplate
private let imageProcessor: ImageProcessor
private let files: FileProcessor
init(factory: LocalizedSiteTemplate, imageProcessor: ImageProcessor) {
init(factory: LocalizedSiteTemplate, files: FileProcessor) {
self.factory = factory
self.imageProcessor = imageProcessor
self.files = files
}
func generate(page: Page, language: String, backText: String, nextPage: NavigationLink?, previousPage: NavigationLink?) throws {
@@ -45,8 +45,8 @@ struct PageGenerator {
content[.nextPageUrl] = nextPage?.link
content[.footer] = try page.customFooterContent()
let url = imageProcessor.outputFolder.appendingPathComponent(path)
try factory.contentPage.generate(content, to: url)
let url = files.outputFolder.appendingPathComponent(path)
}
private func makeContent(page: Page, language: String, url: URL) throws -> String {
@@ -55,7 +55,7 @@ struct PageGenerator {
return factory.placeholder
}
print("Generated page \(page.path)")
return try PageContentGenerator(imageProcessor: imageProcessor).generate(page: page, language: language, at: url)
return try PageContentGenerator(files: files).generate(page: page, language: language, at: url)
}
private func makeHead(page: Page, language: String) throws -> String {

View File

@@ -30,11 +30,11 @@ struct PageHeadGenerator {
let template: PageHeadTemplate
let imageProcessor: ImageProcessor
let files: FileProcessor
init(factory: TemplateFactory, imageProcessor: ImageProcessor) {
init(factory: TemplateFactory, files: FileProcessor) {
self.template = factory.pageHead
self.imageProcessor = imageProcessor
self.files = files
}
func generate(page: PageHeadInfoProvider) throws -> String {
@@ -47,7 +47,7 @@ struct PageHeadGenerator {
// since we don't want a single large image for thumbnails.
// Warning: Link preview source path must be relative to root
let linkPreviewImagePath = image.insert("-link", beforeLast: ".")
try imageProcessor.requireImage(
try files.requireImage(
source: image,
destination: linkPreviewImagePath,
width: Site.linkPreviewDesiredImageWidth)

View File

@@ -6,17 +6,17 @@ struct SiteGenerator {
let templates: TemplateFactory
private let imageProcessor: ImageProcessor
private let files: FileProcessor
private var outputFolder: URL {
imageProcessor.outputFolder
files.outputFolder
}
init(site: Site, imageProcessor: ImageProcessor) throws {
init(site: Site, files: FileProcessor) throws {
self.site = site
let templatesFolder = site.inputFolder.appendingPathComponent("templates")
self.templates = try TemplateFactory(templateFolder: templatesFolder)
self.imageProcessor = imageProcessor
self.files = files
}
func generate() throws {
@@ -26,12 +26,12 @@ struct SiteGenerator {
factory: templates,
language: language,
site: site,
imageProcessor: imageProcessor)
files: files)
// Generate sections
let overviewGenerator = OverviewPageGenerator(factory: template, imageProcessor: imageProcessor)
let pageGenerator = PageGenerator(factory: template, imageProcessor: imageProcessor)
let overviewGenerator = OverviewPageGenerator(factory: template, files: files)
let pageGenerator = PageGenerator(factory: template, files: files)
let backLinkText = try site.backLinkText(for: language)
var elementsToProcess: [(element: SiteElement, backText: String?)] = site.elements.map { ($0, backLinkText) }
while let (element, backText) = elementsToProcess.popLast() {
@@ -52,12 +52,14 @@ struct SiteGenerator {
backText: backText ?? metadata.defaultBackLinkText,
nextPage: nil,
previousPage: nil)
for file in page.metadata.requiredFiles {
let relativePath = page.path + "/" + file
files.require(file: relativePath)
}
}
}
let generator = IndexPageGenerator(
factory: template,
imageProcessor: imageProcessor)
let generator = IndexPageGenerator(factory: template)
// Generate front page
let relativeUrl = site.localizedPath(for: language)

View File

@@ -4,11 +4,11 @@ struct ThumbnailListGenerator {
private let factory: TemplateFactory
let imageProcessor: ImageProcessor
let files: FileProcessor
init(factory: TemplateFactory, imageProcessor: ImageProcessor) {
init(factory: TemplateFactory, files: FileProcessor) {
self.factory = factory
self.imageProcessor = imageProcessor
self.files = files
}
func generateContent(items: [ThumbnailInfo], style: ThumbnailStyle) throws -> String {
@@ -26,7 +26,7 @@ struct ThumbnailListGenerator {
factory.largeThumbnail.makeCorner(text: $0)
}
try imageProcessor.requireImage(
try files.requireImage(
source: thumbnail.imageFilePath,
destination: thumbnail.imageFilePath,
width: style.width,