#let page( title: none, subtitle: none, description: none, author: none, date: none, collection: none, path: none, pdf: auto, preview: auto, ) = ( title: title, subtitle: subtitle, description: description, author: author, date: date, collection: collection, path: path, pdf: pdf, preview: preview, ) #let post(collection: "blog", ..args) = page(collection: collection, ..args) #let authors(author) = { let entries = if author == none { () } else if type(author) == array { author } else { (author,) } entries.map(entry => if type(entry) == str { (name: entry, url: none) } else { (name: entry.name, url: entry.at("url", default: none)) }) } #let normalize-page(entry, defaults) = { let result = entry for (key, value) in defaults { if result.at(key, default: none) in (none, auto) { result.insert(key, value) } } result.by = authors(result.author) result.author = result.by.map(author => author.name) result } #let author-text(author) = context { for (i, entry) in authors(author).enumerate() { if i > 0 { [, ] } if entry.url == none { entry.name } else if target() == "html" { html.a(class: "author-link", href: entry.url, entry.name) } else { link(entry.url, entry.name) } } } #let format-date(date) = date.display("[month repr:long] [year]") #let date-key(entry) = if entry.date == none { "" } else { entry.date.display("[year]-[month padding:zero]-[day padding:zero]") }