Arod_component.LinksLinks page component.
Shows all outbound external links ordered by date (newest first), with enriched display: GitHub shortnames, arxiv IDs, contact associations, karakeep titles, and favicons. Paginated via infinite scrolling.
module Entry = Bushel.Entrymodule Contact = Sortal_schema.Contactmodule I = Arod.Iconsval string_of_kind : link_kind -> stringShared platforms that should not be contact-matched.
Build a domain-to-contact hashtable with path prefixes. Each domain maps to a list of (path_prefix, contact) pairs so that e.g. cl.cam.ac.uk/~sv440/ does not match cl.cam.ac.uk/~avsm2/.
Find a contact for a URL by matching domain and longest path prefix.
val classify_url :
contact_by_domain:(String.t, (String.t * Contact.t) list) Hashtbl.t ->
doi_entries:Bushel.Doi_entry.t list ->
ctx:Arod.Ctx.t ->
string ->
link_displayClassify a URL into a structured display.
Filter categories for the sidebar infobox.
val string_of_filter_kind : filter_kind -> stringval filter_of_kind : link_kind -> filter_kindMap fine-grained display kind to filter category.
val kind_badge : entries:Entry.t -> link_display -> Htmlit.El.htmlval compute_groups : ctx:Arod.Ctx.t -> link_group listCompute all link groups sorted by entry date descending.
val render_group :
contact_by_domain:(String.t, (String.t * Contact.t) list) Hashtbl.t ->
doi_entries:Bushel.Doi_entry.t list ->
entries:Entry.t ->
ctx:Arod.Ctx.t ->
link_group ->
Htmlit.El.htmlRender a single link group with a data-month-id for scroll tracking.
val render_groups_html : ctx:Arod.Ctx.t -> link_group list -> stringRender a slice of link groups as an HTML string for the pagination API.
val all_groups : ctx:Arod.Ctx.t -> link_group listReturn all computed groups for use by the pagination API.
val links_list : ctx:Arod.Ctx.t -> Htmlit.El.html * Htmlit.El.html