ChWebsiteApp/CHDataManagement/Pages/ContentPage.swift
2024-12-26 15:01:01 +01:00

88 lines
2.4 KiB
Swift

import Foundation
struct ContentPage: HtmlProducer {
private let linkTitle: String
private let description: String
private let language: ContentLanguage
private let dateString: String
private let title: String
private let showTitle: Bool
private let tags: [FeedEntryData.Tag]
private let navigationBarLinks: [NavigationBar.Link]
private let pageContent: String
private let headers: [HeaderElement]
private let footers: String
private let icons: Set<PageIcon>
init(language: ContentLanguage,
dateString: String,
title: String,
showTitle: Bool,
tags: [FeedEntryData.Tag],
linkTitle: String,
description: String,
navigationBarLinks: [NavigationBar.Link],
pageContent: String,
headers: Set<HeaderElement>,
footers: [String], icons: Set<PageIcon>) {
self.language = language
self.dateString = dateString
self.title = title
self.showTitle = showTitle
self.tags = tags
self.linkTitle = linkTitle
self.description = description
self.navigationBarLinks = navigationBarLinks
self.pageContent = pageContent
self.headers = headers.union([.title(title), .description(description)]).sorted()
self.footers = footers.joined()
self.icons = icons
}
func populate(_ result: inout String) {
// TODO: Add headers and footers from page content
result += "<!DOCTYPE html><html lang=\"\(language.rawValue)\">"
result += PageHead(items: headers).content
result += "<body>"
result += NavigationBar(links: navigationBarLinks).content
result += "<main><article>"
result += "<div style=\"height: 70px;\"></div>"
if showTitle {
result += "<h3>\(dateString)</h3>"
result += "<h1>\(title)</h1>"
result += TagList(tags: tags).content
}
result += symbols
result += pageContent
result += "</article></main>"
result += footers
result += "</body></html>" // Close content
}
private var symbols: String {
guard !icons.isEmpty else {
return ""
}
var result = "<div style='display:none'>"
for icon in icons {
result += icon.icon.content
}
result += "</div>"
return result
}
}