import HTML import Saga func renderPage(context: ItemRenderingContext) -> Node { let section = Section(rawValue: context.item.metadata.section ?? "") assert(section != nil) return baseLayout( canocicalURL: context.item.url, section: section!, title: context.item.title, extraHeader: section == .home ? generateHeader(.home) : Node.fragment([]) ) { switch section { case .home: renderHome(body: context.item.body) case .notFound: let articles = context.allItems .compactMap { $0 as? Item } .prefix(10) render404(body: context.item.body, articles: Array(articles)) default: renderNonHome(body: context.item.body) } } } func renderHome(body: String) -> Node { div { div(class: "my-24 uppercase font-avenir text-[40px] leading-[1.25] font-thin text-center [&>h1>strong]:font-bold") { Node.raw(body) } } } func renderNonHome(body: String) -> Node { article { div(class: "font-avenir") { Node.raw(body) } } } func render404(body: String, articles: [Item]) -> Node { article(class: "prose") { Node.raw(body) ul { articles.map { article in li { a(href: article.url) { article.title } } } } div { a(href: "/articles/") { "› See all articles" } } } }