72 lines
1.8 KiB
Swift
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
|
|
}
|
|
}
|