[OCaml] Mobile-friendly clone of cgit.
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.
Changed files
lib/resolvers.ml
@@ -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
@@ -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