refactor extract relative_time into shared Time_fmt module

Factor out the duplicated relative_time function from views/repo.ml and views/root.ml into a new views/time_fmt.ml module.

Commit
1c65aa38e931191ed783fe25063c3197c56fa885
Author
Claude Sonnet 4 <agent@anthropic.com>
Author date
Committer
Claude Sonnet 4 <agent@anthropic.com>
Committer date
Changed files
lib/views/repo.ml
index a4a86b1a..32a069ab 100644..100644
@@ -324,24 +324,6 @@
324 324 Printf.sprintf "%04d-%02d-%02d %02d:%02d" (tm.tm_year + 1900) (tm.tm_mon + 1)
325 325 tm.tm_mday tm.tm_hour tm.tm_min
326 326
327 Removed: let relative_time (date, _) =
328 Removed: let seconds = Unix.time () -. Int64.to_float date |> int_of_float in
329 Removed: let minutes = seconds / 60 in
330 Removed: let hours = minutes / 60 in
331 Removed: let days = hours / 24 in
332 Removed: let months = days / 30 in
333 Removed: let years = months / 12 in
334 Removed: let quantity value singular =
335 Removed: Printf.sprintf "%d %s%s ago" value singular (if value = 1 then "" else "s")
336 Removed: in
337 Removed: match seconds with
338 Removed: | s when s < 60 -> "just now"
339 Removed: | _ when minutes < 60 -> quantity minutes "minute"
340 Removed: | _ when hours < 24 -> quantity hours "hour"
341 Removed: | _ when days < 30 -> quantity days "day"
342 Removed: | _ when months < 12 -> quantity months "month"
343 Removed: | _ -> quantity years "year"
344 Removed:
345 327 let li_of_commit ?(hide_pill = false) repo (commit : Resolvers.Commit.t) =
346 328 let message = parse_commit_message commit.message in
347 329 let commit_type, commit_title = parse_conventional message.summary in
@@ -370,7 +352,7 @@
370 352 HTML.(
371 353 span
372 354 [ class_ "commit-ago" ]
373 Removed: [ txt "%s" (relative_time commit.author.date) ])
355 Added: [ txt "%s" (Time_fmt.relative_time commit.author.date) ])
374 356 in
375 357 HTML.(
376 358 li []
lib/views/root.ml
index eac9a70f..5c300895 100644..100644
@@ -2,31 +2,14 @@
2 2
3 3 open Dream_html
4 4
5 Removed: let relative_time (date, _) =
6 Removed: let seconds = Unix.time () -. Int64.to_float date |> int_of_float in
7 Removed: let minutes = seconds / 60 in
8 Removed: let hours = minutes / 60 in
9 Removed: let days = hours / 24 in
10 Removed: let months = days / 30 in
11 Removed: let years = months / 12 in
12 Removed: let quantity value singular =
13 Removed: Printf.sprintf "%d %s%s ago" value singular (if value = 1 then "" else "s")
14 Removed: in
15 Removed: match seconds with
16 Removed: | s when s < 60 -> "just now"
17 Removed: | _ when minutes < 60 -> quantity minutes "minute"
18 Removed: | _ when hours < 24 -> quantity hours "hour"
19 Removed: | _ when days < 30 -> quantity days "day"
20 Removed: | _ when months < 12 -> quantity months "month"
21 Removed: | _ -> quantity years "year"
22 Removed:
23 5 let render ~user ~root_title repositories =
24 6 let li_of_repo (repo_name, date) =
25 7 let ago_span =
26 8 match date with
27 9 | None -> HTML.null []
28 10 | Some d ->
29 Removed: HTML.(span [ class_ "commit-ago" ] [ txt "%s" (relative_time d) ])
11 Added: HTML.(
12 Added: span [ class_ "commit-ago" ] [ txt "%s" (Time_fmt.relative_time d) ])
30 13 in
31 14 HTML.(
32 15 li []
lib/views/time_fmt.ml
index 00000000..8238c94b 000000..100644
@@ -0,0 +1,21 @@
1 Added: (* -*- mode: tuareg; -*- *)
2 Added:
3 Added: (** Human-readable relative timestamps. *)
4 Added:
5 Added: let relative_time (date, _) =
6 Added: let seconds = Unix.time () -. Int64.to_float date |> int_of_float in
7 Added: let minutes = seconds / 60 in
8 Added: let hours = minutes / 60 in
9 Added: let days = hours / 24 in
10 Added: let months = days / 30 in
11 Added: let years = months / 12 in
12 Added: let quantity value singular =
13 Added: Printf.sprintf "%d %s%s ago" value singular (if value = 1 then "" else "s")
14 Added: in
15 Added: match seconds with
16 Added: | s when s < 60 -> "just now"
17 Added: | _ when minutes < 60 -> quantity minutes "minute"
18 Added: | _ when hours < 24 -> quantity hours "hour"
19 Added: | _ when days < 30 -> quantity days "day"
20 Added: | _ when months < 12 -> quantity months "month"
21 Added: | _ -> quantity years "year"