Finish most recent and featured section
This commit is contained in:
@@ -140,6 +140,18 @@ extension Element {
|
||||
This property is mandatory at root level, and is propagated to child elements.
|
||||
*/
|
||||
let navigationTextAsPreviousPage: String
|
||||
|
||||
/**
|
||||
The text to display above a slideshow for most recent items.
|
||||
Only used for elements that define `showMostRecentSection = true`
|
||||
*/
|
||||
let mostRecentTitle: String?
|
||||
|
||||
/**
|
||||
The text to display above a slideshow for featured items.
|
||||
Only used for elements that define `showFeaturedSection = true`
|
||||
*/
|
||||
let featuredTitle: String?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,6 +183,8 @@ extension Element.LocalizedMetadata {
|
||||
self.relatedContentText = log.required(data.relatedContentText, name: "relatedContentText", source: source, &isValid)
|
||||
self.navigationTextAsNextPage = log.required(data.navigationTextAsNextPage, name: "navigationTextAsNextPage", source: source, &isValid)
|
||||
self.navigationTextAsPreviousPage = log.required(data.navigationTextAsPreviousPage, name: "navigationTextAsPreviousPage", source: source, &isValid)
|
||||
self.mostRecentTitle = data.mostRecentTitle
|
||||
self.featuredTitle = data.featuredTitle
|
||||
|
||||
guard isValid else {
|
||||
return nil
|
||||
@@ -202,6 +216,8 @@ extension Element.LocalizedMetadata {
|
||||
self.relatedContentText = data.relatedContentText ?? parent.relatedContentText
|
||||
self.navigationTextAsPreviousPage = data.navigationTextAsPreviousPage ?? parent.navigationTextAsPreviousPage
|
||||
self.navigationTextAsNextPage = data.navigationTextAsNextPage ?? parent.navigationTextAsNextPage
|
||||
self.mostRecentTitle = data.mostRecentTitle ?? parent.mostRecentTitle
|
||||
self.featuredTitle = data.featuredTitle ?? parent.featuredTitle
|
||||
|
||||
guard isValid else {
|
||||
return nil
|
||||
|
@@ -132,6 +132,13 @@ struct Element {
|
||||
*/
|
||||
let showMostRecentSection: Bool
|
||||
|
||||
/**
|
||||
Indicate that the overview section should contain a `Featured Content` section before the other sections.
|
||||
The elements are the page ids of the elements contained in the feature.
|
||||
- Note: If not specified, this property defaults to `false`
|
||||
*/
|
||||
let featuredPages: [String]
|
||||
|
||||
/**
|
||||
The localized metadata for each language.
|
||||
*/
|
||||
@@ -190,6 +197,7 @@ struct Element {
|
||||
self.overviewItemCount = metadata.overviewItemCount ?? Element.overviewItemCountDefault
|
||||
self.headerType = log.cast(metadata.headerType, "headerType", source: source)
|
||||
self.showMostRecentSection = metadata.showMostRecentSection ?? false
|
||||
self.featuredPages = metadata.featuredPages ?? []
|
||||
self.languages = log.required(metadata.languages, name: "languages", source: source, &isValid)
|
||||
.compactMap { language in
|
||||
.init(atRoot: folder, data: language, log: log)
|
||||
@@ -252,6 +260,7 @@ struct Element {
|
||||
self.overviewItemCount = metadata.overviewItemCount ?? parent.overviewItemCount
|
||||
self.headerType = log.cast(metadata.headerType, "headerType", source: source)
|
||||
self.showMostRecentSection = metadata.showMostRecentSection ?? false
|
||||
self.featuredPages = metadata.featuredPages ?? []
|
||||
self.languages = parent.languages.compactMap { parentData in
|
||||
guard let data = metadata.languages?.first(where: { $0.language == parentData.language }) else {
|
||||
log.warning("Language '\(parentData.language)' not found", source: source)
|
||||
@@ -285,8 +294,25 @@ struct Element {
|
||||
return nil
|
||||
}
|
||||
|
||||
//files.add(page: path, id: id)
|
||||
self.readElements(in: folder, source: path, log: log)
|
||||
|
||||
if showMostRecentSection {
|
||||
if elements.isEmpty {
|
||||
log.error("Page has no children", source: source)
|
||||
}
|
||||
languages.filter { $0.mostRecentTitle == nil }.forEach {
|
||||
log.error("'showMostRecentSection' = true, but 'mostRecentTitle' not set for language '\($0.language)'", source: source)
|
||||
}
|
||||
}
|
||||
|
||||
if !featuredPages.isEmpty {
|
||||
if elements.isEmpty {
|
||||
log.error("'featuredPages' contains elements, but page has no children", source: source)
|
||||
}
|
||||
languages.filter { $0.featuredTitle == nil }.forEach {
|
||||
log.error("'featuredPages' contains elements, but 'featuredTitle' not set for language '\($0.language)'", source: source)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getExternalPageMap(language: String) -> [String : String] {
|
||||
@@ -307,6 +333,10 @@ struct Element {
|
||||
private func getExternalLink(for language: String) -> String? {
|
||||
languages.first { $0.language == language }?.externalUrl
|
||||
}
|
||||
|
||||
var needsFirstSection: Bool {
|
||||
showMostRecentSection || !featuredPages.isEmpty
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Paths
|
||||
@@ -349,6 +379,7 @@ extension Element {
|
||||
}
|
||||
let all = shownItems
|
||||
.reduce(into: [Element]()) { $0 += $1.mostRecentElements(count) }
|
||||
.filter { $0.thumbnailStyle == .large }
|
||||
.filter { $0.date != nil }
|
||||
.sorted { $0.date! > $1.date! }
|
||||
return Array(all.prefix(count))
|
||||
|
@@ -133,6 +133,18 @@ extension GenericMetadata {
|
||||
This property is mandatory at root level, and is propagated to child elements.
|
||||
*/
|
||||
let navigationTextAsNextPage: String?
|
||||
|
||||
/**
|
||||
The text to display above a slideshow for most recent items.
|
||||
Only used for elements that define `showMostRecentSection = true`
|
||||
*/
|
||||
let mostRecentTitle: String?
|
||||
|
||||
/**
|
||||
The text to display above a slideshow for featured items.
|
||||
Only used for elements that define `showFeaturedSection = true`
|
||||
*/
|
||||
let featuredTitle: String?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,6 +170,8 @@ extension GenericMetadata.LocalizedMetadata: Codable {
|
||||
.relatedContentText,
|
||||
.navigationTextAsPreviousPage,
|
||||
.navigationTextAsNextPage,
|
||||
.mostRecentTitle,
|
||||
.featuredTitle,
|
||||
]
|
||||
}
|
||||
|
||||
@@ -190,7 +204,9 @@ extension GenericMetadata.LocalizedMetadata {
|
||||
externalUrl: nil,
|
||||
relatedContentText: nil,
|
||||
navigationTextAsPreviousPage: nil,
|
||||
navigationTextAsNextPage: nil)
|
||||
navigationTextAsNextPage: nil,
|
||||
mostRecentTitle: nil,
|
||||
featuredTitle: nil)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,7 +230,9 @@ extension GenericMetadata.LocalizedMetadata {
|
||||
externalUrl: nil,
|
||||
relatedContentText: "",
|
||||
navigationTextAsPreviousPage: "",
|
||||
navigationTextAsNextPage: "")
|
||||
navigationTextAsNextPage: "",
|
||||
mostRecentTitle: nil,
|
||||
featuredTitle: nil)
|
||||
}
|
||||
|
||||
static var full: GenericMetadata.LocalizedMetadata {
|
||||
@@ -235,6 +253,8 @@ extension GenericMetadata.LocalizedMetadata {
|
||||
externalUrl: "",
|
||||
relatedContentText: "",
|
||||
navigationTextAsPreviousPage: "",
|
||||
navigationTextAsNextPage: "")
|
||||
navigationTextAsNextPage: "",
|
||||
mostRecentTitle: "",
|
||||
featuredTitle: "")
|
||||
}
|
||||
}
|
||||
|
@@ -131,6 +131,13 @@ struct GenericMetadata {
|
||||
*/
|
||||
let showMostRecentSection: Bool?
|
||||
|
||||
/**
|
||||
Indicate that the overview section should contain a `Featured Content` section before the other sections.
|
||||
The elements are the page ids of the elements contained in the feature.
|
||||
- Note: If not specified, this property defaults to `false`
|
||||
*/
|
||||
let featuredPages: [String]?
|
||||
|
||||
/**
|
||||
The localized metadata for each language.
|
||||
*/
|
||||
@@ -157,6 +164,7 @@ extension GenericMetadata: Codable {
|
||||
.overviewItemCount,
|
||||
.headerType,
|
||||
.showMostRecentSection,
|
||||
.featuredPages,
|
||||
.languages,
|
||||
]
|
||||
}
|
||||
@@ -229,6 +237,7 @@ extension GenericMetadata {
|
||||
overviewItemCount: 6,
|
||||
headerType: "left",
|
||||
showMostRecentSection: false,
|
||||
featuredPages: [],
|
||||
languages: [.full])
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user