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

Commit
1b4d91891c45571f0b525027e50891b3a7d84c75
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
lib/handlers.ml
index 3a8f9235..b7d3247b 100644..100644
@@ -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
index 0972dece..0ce294b4 100644..100644
@@ -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 =