{
html,
data,
lib,
...
}:
let
attrValsOpt =
attrs: attrSet: lib.attrVals (builtins.filter (attr: lib.hasAttr attr attrSet) attrs) attrSet;
concatStringsPrefix =
prefix: strings: lib.concatStrings (builtins.map (string: prefix + string) strings);
concatStringsSuffix =
suffix: strings: lib.concatStrings (builtins.map (string: string + suffix) strings);
format =
publication:
with html;
with publication;
{
inherit
id
title
url
year
abstract
cite
;
}
// (
let
authorsOther = lib.remove "${data.basics.name.first} ${data.basics.name.last}" (
builtins.map (author: "${author.given} ${author.family}") author
);
in
lib.optionalAttrs (authorsOther != [ ]) {
authors = "With ${lib.concatStringsSep ", " authorsOther}";
}
)
// lib.optionalAttrs (publication ? note) {
note = publication.note;
}
// lib.optionalAttrs (publication ? container-title) {
published =
"In ${em container-title}"
+ concatStringsPrefix ", " (attrValsOpt [ "volume" "issue" "publisher" ] publication);
}
// lib.optionalAttrs (publication ? event-title) {
published = "At ${em event-title}";
}
// lib.optionalAttrs (publication ? DOI) {
doi = "${small "DOI"}: ${href "https://doi.org/${DOI}" (code DOI)}";
};
listResearch =
collection:
with html;
section [
(dl (
for (sort.reverse.byPath [ "issued" "date-parts" ] collection) (
publication:
let
formatted = format publication;
in
with formatted;
lines [
(dt { id = "Writings#${id}"; } "${href { target = "_blank"; } url (em title)} (${year})")
(dd [
(concatStringsSuffix ". " (attrValsOpt [ "authors" "note" "published" "doi" ] formatted))
(details [
(summary "More")
(dl [
(dt "Abstract.")
(dd (blockquote abstract))
(dt "Cite.")
(
let
citeWith =
title: type:
details [
(summary title)
(pre (code (lib.readFile "${data.files}/biblio/${type}/${id}")))
];
in
dd [
(citeWith "BibLaTeX" "biblatex")
(citeWith "BibTeX" "bibtex")
(citeWith "CSL JSON" "csljson")
]
)
])
])
])
]
)
))
];
in
{
conferences = listResearch data.research.conferences;
journals = listResearch data.research.journals;
misc = listResearch data.research.misc;
reports = listResearch data.research.reports;
}