[OCaml] Mobile-friendly clone of cgit.
Display breadcrumbs on individual file pages
- Extract breadcrumb rendering into shared helper - Pass path trail to Views.Repo.file from file_id handler - Breadcrumbs show on both directory listings and file views
Changed files
lib/handlers.ml
@@ -48,7 +48,9 @@
48
48
| `Tree tree ->
49
49
let* trail = Resolvers.Tree.find_path repo id in
50
50
Views.Repo.files repo trail tree
51
Removed:
| `Blob blob -> Views.Repo.file repo blob
51
Added:
| `Blob blob ->
52
Added:
let* trail = Resolvers.Tree.find_path repo id in
53
Added:
Views.Repo.file repo trail blob
52
54
53
55
let branches repo =
54
56
let* branches = Resolvers.Reference.branches repo in
@@ -60,7 +62,7 @@
60
62
61
63
let readme repo =
62
64
let* readme = Resolvers.Repo.readme repo in
63
Removed:
Views.Repo.file repo
65
Added:
Views.Repo.file repo []
64
66
@@
65
67
match readme with
66
68
| None -> { content = "README does not exist for " ^ repo }
lib/views.ml
@@ -214,23 +214,23 @@
214
214
content = HTML.[ ul [] @@ List.map (li_of_commit repo) commits ];
215
215
}
216
216
217
Removed:
let files repo (trail : (string * string) list) (tree : Resolvers.Tree.t) =
218
Removed:
let breadcrumbs =
219
Removed:
let root_link = Routes.link_to (Files repo) (txt "/") in
220
Removed:
let crumbs =
221
Removed:
List.map
222
Removed:
(fun (name, hash) ->
223
Removed:
Routes.link_to (File (repo, hash)) (txt "%s" name))
224
Removed:
trail
225
Removed:
in
226
Removed:
let separator = txt " / " in
227
Removed:
let rec interleave = function
228
Removed:
| [] -> []
229
Removed:
| [ x ] -> [ x ]
230
Removed:
| x :: rest -> x :: separator :: interleave rest
231
Removed:
in
232
Removed:
HTML.(nav [ class_ "breadcrumbs" ] (interleave (root_link :: crumbs)))
217
Added:
let breadcrumbs repo (trail : (string * string) list) =
218
Added:
let root_link = Routes.link_to (Files repo) (txt "/") in
219
Added:
let crumbs =
220
Added:
List.map
221
Added:
(fun (name, hash) ->
222
Added:
Routes.link_to (File (repo, hash)) (txt "%s" name))
223
Added:
trail
233
224
in
225
Added:
let separator = txt " / " in
226
Added:
let rec interleave = function
227
Added:
| [] -> []
228
Added:
| [ x ] -> [ x ]
229
Added:
| x :: rest -> x :: separator :: interleave rest
230
Added:
in
231
Added:
HTML.(nav [ class_ "breadcrumbs" ] (interleave (root_link :: crumbs)))
232
Added:
233
Added:
let files repo (trail : (string * string) list) (tree : Resolvers.Tree.t) =
234
234
respond
235
235
@@ Page.render ~page_title:(page_title repo)
236
236
{
@@ -238,10 +238,10 @@
238
238
title = repo;
239
239
subtitle = Resolvers.repo_description repo;
240
240
active = Files;
241
Removed:
content = HTML.[ breadcrumbs; ul [] @@ List.map (li_of_entry repo) tree.entries ];
241
Added:
content = HTML.[ breadcrumbs repo trail; ul [] @@ List.map (li_of_entry repo) tree.entries ];
242
242
}
243
243
244
Removed:
let file repo (blob : Resolvers.Blob.t) =
244
Added:
let file repo (trail : (string * string) list) (blob : Resolvers.Blob.t) =
245
245
let to_numbered_line number line =
246
246
let n = number + 1 in
247
247
HTML.
@@ -261,7 +261,7 @@
261
261
title = repo;
262
262
subtitle = Resolvers.repo_description repo;
263
263
active = Files;
264
Removed:
content = HTML.[ div [ id "blob" ] formatted_blob ];
264
Added:
content = HTML.[ breadcrumbs repo trail; div [ id "blob" ] formatted_blob ];
265
265
}
266
266
267
267
let commit repo (commit : Resolvers.Commit.t) diff =