feat show first 16 items per directory with overflow count

Remove the hard cutoff that refused to expand directories with ≥10 items. All directories are now expanded, and the view handles truncation: the first 16 entries are displayed, followed by an 'X more items…' link to the full directory if there are more. This replaces the previous 'Directory contains more than 10 items…' teaser that showed zero items.

Commit
fd3d2278ce898c1237354bea8932f3a9a9f59cdf
Author
Claude Sonnet 4 <claude@anthropic.invalid>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
lib/resolvers.ml
index b8d7c416..32741139 100644..100644
@@ -433,16 +433,12 @@
433 433 let combined_name = prefix ^ "/" ^ single.name in
434 434 collapse_single_subdirs combined_name single.hash
435 435 | _ ->
436 Removed: let count = List.length entries in
437 436 let collapsed_entry =
438 437 { Entry.hash = hash_hex; name = prefix; perm = Entry.Dir }
439 438 in
440 Removed: if count >= 10 then
441 Removed: Lwt_result.return { entry = collapsed_entry; children = Some [] }
442 Removed: else
443 Removed: let* children = expand_entries entries in
444 Removed: Lwt_result.return
445 Removed: { entry = collapsed_entry; children = Some children }
439 Added: let* children = expand_entries entries in
440 Added: Lwt_result.return
441 Added: { entry = collapsed_entry; children = Some children }
446 442 and expand_entries entries =
447 443 let is_hidden (e : Entry.t) =
448 444 String.length e.name > 0 && e.name.[0] = '.'
lib/views/repo.ml
index a9b10793..9c53fccb 100644..100644
@@ -450,37 +450,28 @@
450 450 li
451 451 [ class_ "tree-file%s" hidden_class ]
452 452 [ Routes.link_to route (txt "%s" entry.name) ])
453 Removed: | Some [] ->
454 Removed: (* Directory with 10+ items — show teaser *)
455 Removed: HTML.(
456 Removed: li
457 Removed: [ class_ "tree-dir%s" hidden_class ]
458 Removed: [
459 Removed: details []
460 Removed: [
461 Removed: summary
462 Removed: [ class_ "tree-toggle" ]
463 Removed: [
464 Removed: span [ class_ "tree-chevron" ] [ txt "\xe2\x80\xba" ];
465 Removed: Routes.link_to route
466 Removed: ~other_attrs:[ class_ "tree-link" ]
467 Removed: (txt "%s/" entry.name);
468 Removed: ];
469 Removed: ul
470 Removed: [ class_ "tree-nested" ]
471 Removed: [
472 Removed: li
473 Removed: [ class_ "tree-overflow" ]
474 Removed: [
475 Removed: Routes.link_to route
476 Removed: (txt
477 Removed: "Directory contains more than 10 items\xe2\x80\xa6");
478 Removed: ];
479 Removed: ];
480 Removed: ];
481 Removed: ])
482 453 | Some children ->
483 Removed: (* Directory with <10 items — fully expanded *)
454 Added: let max_display = 16 in
455 Added: let total = List.length children in
456 Added: let displayed, overflow =
457 Added: if total <= max_display then (children, 0)
458 Added: else
459 Added: ( List.filteri (fun i _ -> i < max_display) children,
460 Added: total - max_display )
461 Added: in
462 Added: let overflow_item =
463 Added: if overflow = 0 then []
464 Added: else
465 Added: HTML.
466 Added: [
467 Added: li
468 Added: [ class_ "tree-overflow" ]
469 Added: [
470 Added: Routes.link_to route
471 Added: (txt "%d more items\xe2\x80\xa6" overflow);
472 Added: ];
473 Added: ]
474 Added: in
484 475 HTML.(
485 476 li
486 477 [ class_ "tree-dir%s" hidden_class ]
@@ -497,7 +488,7 @@
497 488 ];
498 489 ul
499 490 [ class_ "tree-nested" ]
500 Removed: (List.map (li_of_tree_node repo) children);
491 Added: (List.map (li_of_tree_node repo) displayed @ overflow_item);
501 492 ];
502 493 ])
503 494