2024-12-13 11:26:34 +01:00

72 lines
1.8 KiB
Swift

import Foundation
struct PageInFeed {
private let swiperStyleSheetPath = "/assets/swiper/swiper-bundle.min.css"
private let swiperJsPath = "/assets/swiper/swiper-bundle.min.js"
let language: ContentLanguage
let title: String
let showTitle: Bool
let description: String
let navigationBarLinks: [NavigationBar.Link]
let pageNumber: Int
let totalPages: Int
let posts: [FeedEntryData]
private var swiperHeader: String {
"<link rel='stylesheet' href='\(swiperStyleSheetPath)' />"
}
private var swiperIsNeeded: Bool {
posts.contains(where: { $0.images.count > 1 })
}
private var headers: String {
swiperIsNeeded ? swiperHeader : ""
}
var content: String {
let footer = swiperIsNeeded ? swiperInits : ""
return GenericPage(
language: language,
title: title,
description: description,
links: navigationBarLinks,
additionalHeaders: headers,
additionalFooter: footer) { content in
if showTitle {
content += "<h1>\(title)</h1>"
}
for post in posts {
content += FeedEntry(data: post).content
}
if totalPages > 1 {
content += PostFeedPageNavigation(currentPage: pageNumber, numberOfPages: totalPages, language: language).content
}
}.content
}
private var swiperInits: String {
var result = "<script src='\(swiperJsPath)'></script><script>"
for post in posts {
guard post.images.count > 1 else {
continue
}
result += ImageGallery.swiperInit(id: post.entryId)
}
result += "</script>"
return result
}
}