Add labels to posts
This commit is contained in:
@ -1,12 +1,5 @@
|
||||
|
||||
struct ContentLabel {
|
||||
|
||||
let icon: PageIcon
|
||||
|
||||
let value: String
|
||||
}
|
||||
|
||||
struct ContentLabels {
|
||||
struct ContentLabels: HtmlProducer {
|
||||
|
||||
private let labels: [ContentLabel]
|
||||
|
||||
@ -14,15 +7,14 @@ struct ContentLabels {
|
||||
self.labels = labels
|
||||
}
|
||||
|
||||
var content: String {
|
||||
func populate(_ result: inout String) {
|
||||
guard !labels.isEmpty else {
|
||||
return ""
|
||||
return
|
||||
}
|
||||
var result = "<div class='labels-container'>"
|
||||
result += "<div class='labels-container'>"
|
||||
for label in labels {
|
||||
result += "<div><svg><use href='#\(label.icon.icon.name)'></use></svg>\(label.value)</div>"
|
||||
}
|
||||
result += "</div>"
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,15 @@
|
||||
|
||||
protocol HtmlProducer {
|
||||
|
||||
func populate(_ result: inout String)
|
||||
}
|
||||
|
||||
extension HtmlProducer {
|
||||
|
||||
var content: String {
|
||||
var result = ""
|
||||
populate(&result)
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
@ -84,6 +84,14 @@ enum PageIcon: String, CaseIterable {
|
||||
case .leftRightArrow:return Icon.LeftRightArrow.self
|
||||
}
|
||||
}
|
||||
|
||||
var svgString: String {
|
||||
icon.content
|
||||
}
|
||||
|
||||
var name: String {
|
||||
icon.name
|
||||
}
|
||||
}
|
||||
|
||||
extension PageIcon: Hashable {
|
||||
|
@ -1,17 +1,3 @@
|
||||
protocol HtmlProducer {
|
||||
|
||||
func populate(_ result: inout String)
|
||||
}
|
||||
|
||||
extension HtmlProducer {
|
||||
|
||||
var content: String {
|
||||
var result = ""
|
||||
populate(&result)
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
struct TagList: HtmlProducer {
|
||||
|
||||
let tags: [FeedEntryData.Tag]
|
||||
|
@ -32,7 +32,8 @@ struct FeedEntry {
|
||||
if let title = data.title {
|
||||
result += "<h2>\(title.htmlEscaped())</h2>"
|
||||
}
|
||||
result += TagList(tags: data.tags).content
|
||||
TagList(tags: data.tags).populate(&result)
|
||||
ContentLabels(labels: data.labels).populate(&result)
|
||||
|
||||
for paragraph in data.text {
|
||||
result += "<p>\(paragraph)</p>"
|
||||
|
@ -11,16 +11,19 @@ struct FeedEntryData {
|
||||
|
||||
let tags: [Tag]
|
||||
|
||||
let labels: [ContentLabel]
|
||||
|
||||
let text: [String]
|
||||
|
||||
let media: Media?
|
||||
|
||||
init(entryId: String, title: String?, textAboveTitle: String, link: Link?, tags: [Tag], text: [String], media: Media?) {
|
||||
init(entryId: String, title: String?, textAboveTitle: String, link: Link?, tags: [Tag], labels: [ContentLabel], text: [String], media: Media?) {
|
||||
self.entryId = entryId
|
||||
self.title = title
|
||||
self.textAboveTitle = textAboveTitle
|
||||
self.link = link
|
||||
self.tags = tags
|
||||
self.labels = labels
|
||||
self.text = text
|
||||
self.media = media
|
||||
}
|
||||
|
Reference in New Issue
Block a user