From 8cfe4f8ff3f78989cdf984afdfdf78a11ed57b20 Mon Sep 17 00:00:00 2001 From: andrew Date: Tue, 16 Jun 2026 15:44:15 -0400 Subject: [PATCH] add: article card prepend --- prepends/article_card.typ | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 prepends/article_card.typ diff --git a/prepends/article_card.typ b/prepends/article_card.typ new file mode 100644 index 0000000..7962791 --- /dev/null +++ b/prepends/article_card.typ @@ -0,0 +1,38 @@ +#let article_card(path) = { + let file-path = path + "index.typ" + let content = read(file-path) + + let title = none + for line in content.split("\n") { + let trimmed = line.trim() + if trimmed.starts-with("= ") { + title = trimmed.slice(2).trim() + break + } + } + if title == none { + panic("No level-1 heading found in " + file-path) + } + + let img-match = content.match(regex("image\(\s*\"([^\"]+)\"")) + let image-path = if img-match != none { img-match.captures.at(0) } else { none } + + let resolved-image = if image-path == none { + none + } else if image-path.starts-with("/") { + image-path + } else { + path + image-path + } + + block(link(path)[ + #html.elem("div", attrs: (style: + "display:flex; align-items:center; gap:0.8em; border:1px solid #ccc; border-radius:6px; padding:0.6em; margin:0.5rem 0;" + ))[ + #if resolved-image != none [ + #image(resolved-image, width: 4em, height: 4em, fit: "cover") + ] + #strong(title) + ] + ]) +}