Determine elements for news section

This commit is contained in:
Christoph Hagen
2022-12-01 15:39:39 +01:00
parent 92d832dc44
commit 6e24c27fdc
3 changed files with 41 additions and 1 deletions

View File

@ -126,6 +126,12 @@ struct Element {
*/
let headerType: HeaderType
/**
Indicate that the overview section should contain a `Newest Content` section before the other sections.
- Note: If not specified, this property defaults to `false`
*/
let showMostRecentSection: Bool
/**
The localized metadata for each language.
*/
@ -318,6 +324,17 @@ extension Element {
}
}
func mostRecentElements(_ count: Int) -> [Element] {
guard self.containsElements else {
return [self]
}
let all = shownItems
.reduce(into: [Element]()) { $0 += $1.mostRecentElements(count) }
.filter { $0.date != nil }
.sorted { $0.date! > $1.date! }
return Array(all.prefix(count))
}
var sortedItems: [Element] {
if useManualSorting {
return shownItems.sorted { $0.sortIndex! < $1.sortIndex! }
@ -365,7 +382,7 @@ extension Element {
// The relative path needs to go down to the first common folder,
// before going up to the target page
let allParts = [String](repeating: "..", count: ownParts.count-index)
+ pageParts.dropFirst(index)
+ pageParts.dropFirst(index)
return allParts.joined(separator: "/")
}

View File

@ -125,6 +125,12 @@ struct GenericMetadata {
*/
let headerType: String?
/**
Indicate that the overview section should contain a `Newest Content` section before the other sections.
- Note: If not specified, this property defaults to `false`
*/
let showMostRecentSection: Bool?
/**
The localized metadata for each language.
*/
@ -150,6 +156,7 @@ extension GenericMetadata: Codable {
.useManualSorting,
.overviewItemCount,
.headerType,
.showMostRecentSection,
.languages,
]
}
@ -221,6 +228,7 @@ extension GenericMetadata {
useManualSorting: false,
overviewItemCount: 6,
headerType: "left",
showMostRecentSection: false,
languages: [.full])
}
}