Add command for pretty page links
This commit is contained in:
@ -119,6 +119,13 @@ extension Element {
|
||||
It can also be set to manually write a page.
|
||||
*/
|
||||
let externalUrl: String?
|
||||
|
||||
/**
|
||||
The text to display for content related to the current page.
|
||||
|
||||
This property is mandatory at root level, and is propagated to child elements.
|
||||
*/
|
||||
let relatedContentText: String
|
||||
}
|
||||
}
|
||||
|
||||
@ -162,6 +169,8 @@ extension Element.LocalizedMetadata {
|
||||
self.thumbnailSuffix = log.unused(data.thumbnailSuffix, "thumbnailSuffix", source: source)
|
||||
self.cornerText = log.unused(data.cornerText, "cornerText", source: source)
|
||||
self.externalUrl = log.unexpected(data.externalUrl, name: "externalUrl", source: source)
|
||||
self.relatedContentText = log
|
||||
.required(data.relatedContentText, name: "relatedContentText", source: source) ?? ""
|
||||
|
||||
guard isComplete else {
|
||||
return nil
|
||||
@ -197,6 +206,7 @@ extension Element.LocalizedMetadata {
|
||||
self.thumbnailSuffix = data.thumbnailSuffix
|
||||
self.cornerText = data.cornerText
|
||||
self.externalUrl = data.externalUrl
|
||||
self.relatedContentText = data.relatedContentText ?? parent.relatedContentText
|
||||
|
||||
guard isComplete else {
|
||||
return nil
|
||||
|
@ -421,6 +421,10 @@ extension Element {
|
||||
return pathRelativeToRootForContainedInputFile(thumbnailFile)
|
||||
}
|
||||
|
||||
/**
|
||||
The full url (relative to root) for the localized page
|
||||
- Parameter language: The language of the page where the url should point
|
||||
*/
|
||||
func fullPageUrl(for language: String) -> String {
|
||||
localized(for: language).externalUrl ?? localizedPath(for: language)
|
||||
}
|
||||
@ -611,4 +615,42 @@ extension Element {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var pathComponents: [String] {
|
||||
path.components(separatedBy: "/")
|
||||
}
|
||||
|
||||
var lastPathComponent: String {
|
||||
pathComponents.last!
|
||||
}
|
||||
|
||||
func find(elementWithFolder folder: String) -> Element? {
|
||||
elements.first { $0.lastPathComponent == folder }
|
||||
}
|
||||
|
||||
func makePath(language: String, from root: Element) -> [String] {
|
||||
let parts = pathComponents.dropLast()
|
||||
var result = [String]()
|
||||
var node = root
|
||||
for part in parts {
|
||||
guard let child = node.find(elementWithFolder: part) else {
|
||||
return result
|
||||
}
|
||||
result.append(child.title(for: language))
|
||||
node = child
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func findParent(from root: Element) -> Element? {
|
||||
let parts = pathComponents.dropLast()
|
||||
var node = root
|
||||
for part in pathComponents.dropLast() {
|
||||
guard let child = node.find(elementWithFolder: part) else {
|
||||
return node
|
||||
}
|
||||
node = child
|
||||
}
|
||||
return node
|
||||
}
|
||||
}
|
||||
|
@ -112,6 +112,13 @@ extension GenericMetadata {
|
||||
It can also be set to manually write a page.
|
||||
*/
|
||||
let externalUrl: String?
|
||||
|
||||
/**
|
||||
The text to display for content related to the current page.
|
||||
|
||||
This property is mandatory at root level, and is propagated to child elements.
|
||||
*/
|
||||
let relatedContentText: String?
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,6 +141,7 @@ extension GenericMetadata.LocalizedMetadata: Codable {
|
||||
.thumbnailSuffix,
|
||||
.cornerText,
|
||||
.externalUrl,
|
||||
.relatedContentText,
|
||||
]
|
||||
}
|
||||
|
||||
@ -163,7 +171,8 @@ extension GenericMetadata.LocalizedMetadata {
|
||||
titleSuffix: nil,
|
||||
thumbnailSuffix: nil,
|
||||
cornerText: nil,
|
||||
externalUrl: nil)
|
||||
externalUrl: nil,
|
||||
relatedContentText: nil)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -184,7 +193,8 @@ extension GenericMetadata.LocalizedMetadata {
|
||||
titleSuffix: nil,
|
||||
thumbnailSuffix: nil,
|
||||
cornerText: nil,
|
||||
externalUrl: nil)
|
||||
externalUrl: nil,
|
||||
relatedContentText: "")
|
||||
}
|
||||
|
||||
static var full: GenericMetadata.LocalizedMetadata {
|
||||
@ -202,6 +212,7 @@ extension GenericMetadata.LocalizedMetadata {
|
||||
titleSuffix: "",
|
||||
thumbnailSuffix: "",
|
||||
cornerText: "",
|
||||
externalUrl: "")
|
||||
externalUrl: "",
|
||||
relatedContentText: "")
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user