{
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.publications.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.publications.files}/${type}/${id}"
)))
];
in
dd [
(citeWith "BibLaTeX" "biblatex")
(citeWith "BibTeX" "bibtex")
(citeWith "CSL JSON" "csljson")
])
]
)
)
])
])
]))