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?, 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 headers.insert(.title(title)) if let description { headers.insert(.description(description)) } 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 } }