import Foundation final class FeedPageGenerator { let content: Content init(content: Content) { self.content = content } func navigationBar(in language: ContentLanguage) -> [NavigationBar.Link] { content.settings.navigationItems.map { .init(text: $0.title(in: language), url: $0.absoluteUrl(in: language)) } } var swiperIncludes: [HeaderElement] { var result = [HeaderElement]() if let swiperCss = content.settings.posts.swiperCssFile { result.append(.css(swiperCss)) } else { #warning("Add warning message") } if let swiperJs = content.settings.posts.swiperJsFile { result.append(.js(file: swiperJs, defer: true)) } else { #warning("Add warning message") } return result } var defaultHeaders: [HeaderElement] { if let header = content.settings.posts.defaultCssFile { return [.css(header)] } else { #warning("Add warning message") return [] } } func generatePage(language: ContentLanguage, posts: [FeedEntryData], title: String, description: String, showTitle: Bool, pageNumber: Int, totalPages: Int) -> String { var headers = defaultHeaders var footer = "" if posts.contains(where: { $0.images.count > 1 }) { headers += swiperIncludes footer = swiperInitScript(posts: posts) } let page = GenericPage( language: language, title: title, description: description, links: navigationBar(in: language), headers: headers, 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 } }