import Foundation struct PageHeadGenerator { static let linkPreviewDesiredImageWidth = 1600 let template: PageHeadTemplate init(factory: TemplateFactory) { self.template = factory.pageHead } func generate(page: Element, language: String) -> String { let metadata = page.localized(for: language) var content = [PageHeadTemplate.Key : String]() content[.author] = page.author content[.title] = metadata.linkPreviewTitle content[.description] = metadata.linkPreviewDescription if let image = page.linkPreviewImage(for: language) { // Note: Generate separate destination link for the image, // since we don't want a single large image for thumbnails. // Warning: Link preview source path must be relative to root let linkPreviewImageName = image.insert("-link", beforeLast: ".") let sourceImagePath = page.pathRelativeToRootForContainedInputFile(image) let destinationImagePath = page.pathRelativeToRootForContainedInputFile(linkPreviewImageName) files.requireImage( source: sourceImagePath, destination: destinationImagePath, width: PageHeadGenerator.linkPreviewDesiredImageWidth) content[.image] = "" } content[.customPageContent] = page.customHeadContent() return template.generate(content) } }