|
|
|
@ -16,12 +16,8 @@ final class PostListPageGenerator {
|
|
|
|
|
source.content.settings.posts.contentWidth
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private var postsPerPage: Int {
|
|
|
|
|
source.content.settings.posts.postsPerPage
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func pageUrl(in language: ContentLanguage, pageNumber: Int) -> String {
|
|
|
|
|
"\(source.pageUrlPrefix(for: language))/\(pageNumber).html"
|
|
|
|
|
"\(source.pageUrlPrefix(for: language))/\(pageNumber)"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func createPages(for posts: [Post]) {
|
|
|
|
@ -29,6 +25,7 @@ final class PostListPageGenerator {
|
|
|
|
|
guard totalCount > 0 else {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
let postsPerPage = source.postsPerPage
|
|
|
|
|
|
|
|
|
|
let numberOfPages = (totalCount + postsPerPage - 1) / postsPerPage // Round up
|
|
|
|
|
for pageIndex in 1...numberOfPages {
|
|
|
|
@ -43,10 +40,11 @@ final class PostListPageGenerator {
|
|
|
|
|
let posts: [FeedEntryData] = posts.map { post in
|
|
|
|
|
let localized: LocalizedPost = post.localized(in: language)
|
|
|
|
|
|
|
|
|
|
#warning("Add post link text to settings or to each post")
|
|
|
|
|
let linkUrl = post.linkedPage.map {
|
|
|
|
|
FeedEntryData.Link(
|
|
|
|
|
url: $0.absoluteUrl(in: language),
|
|
|
|
|
text: language == .english ? "View" : "Anzeigen") // TODO: Add to settings
|
|
|
|
|
text: language == .english ? "View" : "Anzeigen")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let tags: [FeedEntryData.Tag] = post.tags.filter { $0.isVisible }.map { tag in
|
|
|
|
@ -54,7 +52,10 @@ final class PostListPageGenerator {
|
|
|
|
|
url: tag.absoluteUrl(in: language))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let images = localized.images.map(createFeedImage)
|
|
|
|
|
let images = localized.images.map { image in
|
|
|
|
|
image.imageSet(width: mainContentMaximumWidth, height: mainContentMaximumWidth, language: language)
|
|
|
|
|
}
|
|
|
|
|
images.forEach(source.results.require)
|
|
|
|
|
|
|
|
|
|
return FeedEntryData(
|
|
|
|
|
entryId: post.id,
|
|
|
|
@ -68,7 +69,7 @@ final class PostListPageGenerator {
|
|
|
|
|
|
|
|
|
|
let feedPageGenerator = FeedPageGenerator(content: source.content, results: source.results)
|
|
|
|
|
|
|
|
|
|
let languageButtonUrl = pageUrl(in: language.next, pageNumber: pageIndex)
|
|
|
|
|
let languageButtonUrl = "/" + pageUrl(in: language.next, pageNumber: pageIndex)
|
|
|
|
|
|
|
|
|
|
let fileContent = feedPageGenerator.generatePage(
|
|
|
|
|
language: language,
|
|
|
|
@ -78,23 +79,15 @@ final class PostListPageGenerator {
|
|
|
|
|
showTitle: source.showTitle,
|
|
|
|
|
pageNumber: pageIndex,
|
|
|
|
|
totalPages: pageCount,
|
|
|
|
|
languageButtonUrl: languageButtonUrl)
|
|
|
|
|
let filePath = pageUrl(in: language, pageNumber: pageIndex)
|
|
|
|
|
languageButtonUrl: languageButtonUrl,
|
|
|
|
|
linkPrefix: "/" + source.pageUrlPrefix(for: language) + "/")
|
|
|
|
|
let filePath = pageUrl(in: language, pageNumber: pageIndex) + ".html"
|
|
|
|
|
guard save(fileContent, to: filePath) else {
|
|
|
|
|
source.results.unsavedOutput(filePath, source: .feed)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func createFeedImage(for image: FileResource) -> FeedEntryData.Image {
|
|
|
|
|
source.results.requireImageSet(for: image, size: mainContentMaximumWidth)
|
|
|
|
|
return .init(
|
|
|
|
|
rawImagePath: image.absoluteUrl,
|
|
|
|
|
width: mainContentMaximumWidth,
|
|
|
|
|
height: mainContentMaximumWidth,
|
|
|
|
|
altText: image.localized(in: language))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func save(_ content: String, to relativePath: String) -> Bool {
|
|
|
|
|
source.content.storage.write(content, to: relativePath)
|
|
|
|
|
}
|
|
|
|
|