summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dune4
-rw-r--r--lib/routes.ml30
-rw-r--r--lib/views.ml59
3 files changed, 55 insertions, 38 deletions
diff --git a/lib/dune b/lib/dune
index 0b351c0..8a23695 100644
--- a/lib/dune
+++ b/lib/dune
@@ -2,4 +2,6 @@
(library
(name ogit)
- (libraries dream dream-html git-unix toml))
+ (libraries dream dream-html git-unix toml)
+ (preprocess (pps dream-html.ppx)))
+
diff --git a/lib/routes.ml b/lib/routes.ml
new file mode 100644
index 0000000..0778c18
--- /dev/null
+++ b/lib/routes.ml
@@ -0,0 +1,30 @@
+(* -*- mode: tuareg; -*- *)
+
+open Dream_html
+open HTML
+
+type t =
+ | Root
+ | Repo of string
+ | Tag of string * string
+ | Commit of string * string
+ | Tree of string * string * string
+ | Blob of string * string * string
+
+let%path root_path = "/"
+let%path repo_path = "/%s"
+let%path tag_path = "/%s/refs/%s"
+let%path commit_path = "/%s/commit/%s"
+let%path tree_path = "/%s/tree/%s/%s"
+let%path blob_path = "/%s/blob/%s/%s"
+
+let path_attr = function
+ | Root -> path_attr href root_path
+ | Repo repo -> path_attr href repo_path repo
+ | Tag (repo, branch) -> path_attr href tag_path repo branch
+ | Commit (repo, commit) -> path_attr href commit_path repo commit
+ | Tree (repo, commit, path) -> path_attr href tree_path repo commit path
+ | Blob (repo, commit, path) -> path_attr href blob_path repo commit path
+
+let link_to label route = a [ path_attr route ] [ txt "%s" label ]
+let li_of_repo repo = li [] [ link_to repo (Repo repo) ]
diff --git a/lib/views.ml b/lib/views.ml
index 986aa35..33654ea 100644
--- a/lib/views.ml
+++ b/lib/views.ml
@@ -82,10 +82,8 @@ let root () =
Sys.readdir config.git_project_root
|> Array.to_list |> List.sort String.compare
in
- let li_of_repo repo =
- HTML.(li [] [ a [ href "%s/" repo ] [ txt "%s" repo ] ])
- in
- HTML.(div [ id "repositories" ] [ ul [] @@ List.map li_of_repo repos ])
+ HTML.(
+ div [ id "repositories" ] [ ul [] @@ List.map Routes.li_of_repo repos ])
in
let body_data =
{
@@ -100,25 +98,25 @@ let root () =
module Repo = struct
let page_title repo = Printf.sprintf "%s — %s" repo (repo_description repo)
+ let li_of_branch repo branch =
+ HTML.(li [] [ Routes.link_to branch.name (Tag (repo, branch.name)) ])
+
+ let li_of_commit repo commit =
+ match commit.message with
+ | Some msg ->
+ HTML.(
+ li []
+ [
+ Routes.link_to
+ (commit.short_hash ^ " - " ^ msg)
+ (Commit (repo, commit.hash));
+ ])
+ | None -> HTML.(li [] [ txt "%s" commit.short_hash ])
+
let summary repo branches commits authors =
- let li_of_branch branch =
- HTML.(li [] [ a [ href "%s" branch.name ] [ txt "%s" branch.name ] ])
- in
- let li_of_commit commit =
- match commit.message with
- | Some msg ->
- HTML.(
- li []
- [
- a
- [ href "commit/?id=%s" commit.hash ]
- [ txt "%s %s" commit.short_hash msg ];
- ])
- | None -> HTML.(li [] [ a [ href "" ] [ txt "caca!!" ] ])
- in
- let li_of_author author =
- HTML.(li [] [ a [ href "" ] [ txt "%s" author ] ])
- in
+ let li_of_branch = li_of_branch repo in
+ let li_of_commit = li_of_commit repo in
+ let li_of_author author = HTML.(li [] [ txt "%s" author ]) in
let content =
HTML.
[
@@ -139,9 +137,7 @@ module Repo = struct
}
let refs repo branches =
- let li_of_branch branch =
- HTML.(li [] [ a [ href "%s" branch.name ] [ txt "%s" branch.name ] ])
- in
+ let li_of_branch = li_of_branch repo in
let content =
HTML.[ h3 [] [ txt "Branches" ]; ul [] (List.map li_of_branch branches) ]
in
@@ -154,18 +150,7 @@ module Repo = struct
}
let log repo commits =
- let li_of_commit commit =
- match commit.message with
- | Some msg ->
- HTML.(
- li []
- [
- a
- [ href "commit/?id=%s" commit.hash ]
- [ txt "%s %s" commit.short_hash msg ];
- ])
- | None -> HTML.(li [] [ a [ href "" ] [ txt "caca!!" ] ])
- in
+ let li_of_commit = li_of_commit repo in
let content =
HTML.
[ h3 [] [ txt "All commits" ]; ul [] (List.map li_of_commit commits) ]
Copyright 2019--2025 Marius PETER