import Foundation struct PageHeadGenerator { static let linkPreviewDesiredImageWidth = 1600 let factory: TemplateFactory init(factory: TemplateFactory) { self.factory = factory } 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] = factory.html.linkPreviewImage(file: linkPreviewImageName) } content[.customPageContent] = page.customHeadContent() return factory.pageHead.generate(content) } }