{
html,
data,
lib,
...
}:
let
matchFirst =
regexp: str:
let
results = builtins.match regexp str;
in
if results == null then null else builtins.head results;
join =
url: name:
with html;
lib.optionalString (url != null) " ยท ${href url "${icon "las la-paperclip"} ${name}"}";
talks = data.research.talks;
in
with html;
dl (
for (sort.reverse.byPath [ "issued" "date-parts" ] talks) (
item:
with item;
let
date-parts = builtins.head issued.date-parts;
date = {
year = builtins.elemAt date-parts 0;
month = builtins.elemAt date-parts 1;
day = builtins.elemAt date-parts 2;
};
extra = if item ? note then note else "";
abstractURL = matchFirst ".*abstract: ([^\n ]*).*" extra;
slidesURL = matchFirst ".*slides: ([^\n ]*).*" extra;
# broken because of tabs
# paperURL = let
# paperId = matchFirst "([A-z0-9]*[0-9]{4})[a-z]" id;
# in
# if paperId == null
# then null
# else "#Writings#${paperId}";
in
[
(dt [
((if abstractURL == null then (x: x) else href abstractURL) (em title))
])
(dd [
(with (makeDate date); tag pretty)
"@ ${href url event-title}, ${publisher-place}"
(join slidesURL "slides")
# broken because of tabs
# (join paperURL "paper")
(details [
(summary "More")
(dl (
lib.optionals (item ? abstract) [
(dt "Abstract.")
(dd (blockquote abstract))
]
++ [
(dt "Cite.")
(
let
citeWith =
title: type:
details [
(summary title)
(pre (code (lib.readFile "${data.research.files}/${type}/${id}")))
];
in
dd [
(citeWith "BibLaTeX" "biblatex")
(citeWith "BibTeX" "bibtex")
(citeWith "CSL JSON" "csljson")
]
)
]
))
])
])
]
)
)