Arod_component.NetworkNetwork page component.
Unified chronological timeline grouped by month. Each month section shows collaborators (overlapping 36px avatar circles) then interleaves bushel entries and external feed entries chronologically. Paginated via infinite scrolling.
module Entry = Bushel.Entrymodule Paper = Bushel.Papermodule Contact = Sortal_schema.Contactmodule Feed = Sortal_schema.Feedmodule FeedEntry = Sortal_feed.Entrymodule Idea = Bushel.Ideamodule I = Arod.IconsNormalise a URL for matching: strip www. prefix from host, remove trailing slash.
val build_forward_index : unit -> (string, string list) Hashtbl.tBuild a reverse index from normalised external URL → source slugs, so we can find local entries that link TO a given feed entry URL.
type timeline_item = | Bushel of Entry.entry * int * int * int| Feed_item of Arod.Ctx.feed_item * int * int * intval timeline_date : timeline_item -> int * int * inttype month_section = {year : int;month : int;collaborators : Contact.t list;items : timeline_item list;}val month_collaborators :
ctx:Arod.Ctx.t ->
Bushel.Entry.entry list ->
Arod.Ctx.feed_item list ->
Contact.t listCompute collaborators for a given month, sorted by appearance count (most frequent first). Sources: 1.
val render_avatar : entries:Entry.t -> Contact.t -> Htmlit.El.htmlRender a collaborator avatar (36px overlapping circle).
val render_feed_item :
entries:Entry.t ->
forward_index:(string, string list) Hashtbl.t ->
idea_index:(string, (string * string) list) Hashtbl.t ->
Arod.Ctx.feed_item ->
(int * int * int) ->
Htmlit.El.htmlRender a feed entry row in the network timeline.
val render_month :
entries:Entry.t ->
forward_index:(string, string list) Hashtbl.t ->
idea_index:(string, (string * string) list) Hashtbl.t ->
month_section ->
Htmlit.El.htmlRender a single month section (feed items only, bushel entries skipped).
val compute_month_sections : ctx:Arod.Ctx.t -> month_section listval build_idea_index :
ctx:Arod.Ctx.t ->
(string, (string * string) list) Hashtbl.tBuild a reverse index from contact handle → list of (idea_slug, idea_title) for all ideas where the contact is a student.
val render_months_html : ctx:Arod.Ctx.t -> month_section list -> stringRender a slice of month sections as an HTML string for the pagination API.
val all_months : ctx:Arod.Ctx.t -> month_section listReturn all computed month sections for use by the pagination API.
val network_page : ctx:Arod.Ctx.t -> Htmlit.El.html * Htmlit.El.html