import Foundation final class FeedPageGenerator { let results: PageGenerationResults let content: Content init(content: Content, results: PageGenerationResults) { self.content = content self.results = results } private func includeSwiper(in headers: inout Set) { if let swiperCss = content.settings.posts.swiperCssFile { headers.insert(.css(file: swiperCss, order: HeaderElement.swiperCssFileOrder)) results.require(file: swiperCss) } if let swiperJs = content.settings.posts.swiperJsFile { headers.insert(.js(file: swiperJs, defer: true)) results.require(file: swiperJs) } } func generatePage(language: ContentLanguage, posts: [FeedEntryData], title: String, description: String?, showTitle: Bool, pageNumber: Int, totalPages: Int, languageButtonUrl: String) -> String { var headers = content.defaultPageHeaders var footer = "" if posts.contains(where: { $0.images.count > 1 }) { // Sort swiper style sheet before default style sheet includeSwiper(in: &headers) footer = swiperInitScript(posts: posts) } let iconUrl = content.settings.navigation.localized(in: language).rootUrl let languageButton = NavigationBar.Link( text: language.next.rawValue, url: languageButtonUrl) let pageHeader = PageHeader( language: language, title: title, description: description, iconUrl: iconUrl, languageButton: languageButton, links: content.navigationBar(in: language), headers: headers, icons: []) let page = GenericPage( header: pageHeader, additionalFooter: footer) { content in if showTitle { content += "

\(title)

" } for post in posts { content += FeedEntry(data: post).content } if totalPages > 1 { content += PostFeedPageNavigation(currentPage: pageNumber, numberOfPages: totalPages, language: language).content } } return page.content } func swiperInitScript(posts: [FeedEntryData]) -> String { var result = "" return result } }