2025-01-26 20:59:38 +01:00

49 lines
1.3 KiB
Swift

struct ContentButtons {
struct Item {
let icon: PageIcon
let filePath: String?
let text: String
let downloadFileName: String?
let onClickText: String?
init(icon: PageIcon, filePath: String?, text: String, downloadFileName: String? = nil, onClickText: String? = nil) {
self.icon = icon
self.filePath = filePath
self.text = text
self.downloadFileName = downloadFileName
self.onClickText = onClickText
}
}
let items: [Item]
init(items: [Item]) {
self.items = items
}
var content: String {
var result = "<p class='tags tag-buttons'>"
for item in items {
addButton(of: item, to: &result)
}
result += "</p>"
return result
}
private func addButton(of item: Item, to result: inout String) {
let downloadText = item.downloadFileName.map { " download='\($0)'" } ?? ""
let linkText = item.filePath.map { " href='\($0)'" } ?? ""
let onClickText = item.onClickText.map { " onClick='\($0)'" } ?? ""
result += "<a class='tag'\(linkText)\(downloadText)\(onClickText)>"
result += "\(item.icon.usageString)\(item.text)"
result += "</a>"
}
}