struct PageHeader: HtmlProducer { let language: ContentLanguage let iconUrl: String let languageButton: NavigationBar.Link let links: [NavigationBar.Link] let headers: [HeaderElement] let icons: Set init( language: ContentLanguage, title: String?, description: String?, image: String?, pageUrl: String, iconUrl: String, languageButton: NavigationBar.Link, links: [NavigationBar.Link], headers: Set, icons: Set) { self.language = language self.iconUrl = iconUrl self.languageButton = languageButton self.links = links self.icons = icons var headers = headers if let title { headers.insert(.title(title)) headers.insert(.ogTitle(title)) } if let description { headers.insert(.description(description)) headers.insert(.ogDescription(description)) } if let image { headers.insert(.ogImage(image)) } headers.insert(.ogUrl(pageUrl)) self.headers = headers.sorted() } func populate(_ result: inout String) { result += "" result += PageHead(items: headers).content result += "" result += NavigationBar(links: links, languageButton: languageButton, iconUrl: iconUrl).content result += symbols // Add the svg images required by the page as hidden elements result += "
" result += "" } private var symbols: String { guard !icons.isEmpty else { return "" } var result = "
" for icon in icons { result += icon.icon.content } result += "
" return result } }