Generate external link buttons
This commit is contained in:
parent
d635431d52
commit
107fa2f877
@ -62,6 +62,13 @@ struct HTMLElementsGenerator {
|
|||||||
return flexParagraph(content)
|
return flexParagraph(content)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func externalButtons(_ buttons: [(url: String, text: String)]) -> String {
|
||||||
|
let content = buttons
|
||||||
|
.map { externalLink(url: $0.url, text: $0.text) }
|
||||||
|
.joined(separator: "\n")
|
||||||
|
return flexParagraph(content)
|
||||||
|
}
|
||||||
|
|
||||||
private func flexParagraph(_ content: String) -> String {
|
private func flexParagraph(_ content: String) -> String {
|
||||||
"""
|
"""
|
||||||
<p style="display: flex">
|
<p style="display: flex">
|
||||||
@ -73,7 +80,7 @@ struct HTMLElementsGenerator {
|
|||||||
private func button(file: String, text: String) -> String {
|
private func button(file: String, text: String) -> String {
|
||||||
"""
|
"""
|
||||||
<a class="download-button" href="\(file)">
|
<a class="download-button" href="\(file)">
|
||||||
\(text)<span class="icon-download"></span>
|
\(text)<span class="icon icon-download"></span>
|
||||||
</a>
|
</a>
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
@ -81,9 +88,16 @@ struct HTMLElementsGenerator {
|
|||||||
private func button(file: String, text: String, downloadName: String) -> String {
|
private func button(file: String, text: String, downloadName: String) -> String {
|
||||||
"""
|
"""
|
||||||
<a class="download-button" href="\(file)" download="\(downloadName)">
|
<a class="download-button" href="\(file)" download="\(downloadName)">
|
||||||
\(text)<span class="icon-download"></span>
|
\(text)<span class="icon icon-download"></span>
|
||||||
</a>
|
</a>
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
|
private func externalLink(url: String, text: String) -> String {
|
||||||
|
"""
|
||||||
|
<a class="download-button" href="\(url)">
|
||||||
|
\(text)<span class="icon icon-download icon-rotate"></span>
|
||||||
|
</a>
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +60,9 @@ struct PageContentGenerator {
|
|||||||
if alt == "download" {
|
if alt == "download" {
|
||||||
return handleDownloadButtons(page: page, content: fileAndTitle)
|
return handleDownloadButtons(page: page, content: fileAndTitle)
|
||||||
}
|
}
|
||||||
|
if alt == "external" {
|
||||||
|
return handleExternalButtons(page: page, content: fileAndTitle)
|
||||||
|
}
|
||||||
|
|
||||||
let file = fileAndTitle.dropAfterFirst(" ")
|
let file = fileAndTitle.dropAfterFirst(" ")
|
||||||
let title = fileAndTitle.contains(" ") ? fileAndTitle.dropBeforeFirst(" ").nonEmpty : nil
|
let title = fileAndTitle.contains(" ") ? fileAndTitle.dropBeforeFirst(" ").nonEmpty : nil
|
||||||
@ -163,4 +166,21 @@ struct PageContentGenerator {
|
|||||||
}
|
}
|
||||||
return factory.html.downloadButtons(buttons)
|
return factory.html.downloadButtons(buttons)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func handleExternalButtons(page: Element, content: String) -> String {
|
||||||
|
let buttons = content
|
||||||
|
.components(separatedBy: ";")
|
||||||
|
.compactMap { button -> (url: String, text: String)? in
|
||||||
|
let parts = button.components(separatedBy: ",")
|
||||||
|
guard parts.count == 2 else {
|
||||||
|
log.add(warning: "Invalid external link definition", source: page.path)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
let url = parts[0].trimmed
|
||||||
|
let title = parts[1].trimmed
|
||||||
|
|
||||||
|
return (url, title)
|
||||||
|
}
|
||||||
|
return factory.html.externalButtons(buttons)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user