struct WallpaperSlider: HtmlProducer { static let frameHeight = 585 static let frameWidth = 270 static let imageWidth = 250 static let imageHeight = 500 let frame: Frame let images: [Image] let id: String struct Frame { let alt: String let x1: ImageVersion let x2: ImageVersion init(frame: FileResource, language: ContentLanguage, results: PageGenerationResults) { self.x1 = frame.imageVersion( width: WallpaperSlider.frameWidth * 2, height: WallpaperSlider.frameHeight * 2, type: frame.type) self.x2 = frame.imageVersion( width: WallpaperSlider.frameWidth * 2, height: WallpaperSlider.frameHeight * 2, type: frame.type) self.alt = frame.localized(in: language) ?? "A frame" results.require(image: x1) results.require(image: x2) } } struct Image { let display: ImageSet let wide: DownloadImage let tall: DownloadImage struct DownloadImage { let url: String let button: String } init(tall: FileResource, wide: FileResource, language: ContentLanguage, results: PageGenerationResults) { self.display = tall.imageSet( width: WallpaperSlider.imageWidth, height: WallpaperSlider.imageHeight, language: language) let wideButton = language == .english ? "Wide" : "Breit" self.wide = .init(url: wide.absoluteUrl, button: wideButton) let tallButton = language == .english ? "Tall" : "Hoch" self.tall = .init(url: tall.absoluteUrl, button: tallButton) results.require(imageSet: display) results.require(file: wide) results.require(file: tall) results.require(icon: .buttonDownload) } } func populate(_ result: inout String) { let icon: PageIcon = .buttonDownload result += "