diff --git a/src/breadcrumb.ml b/src/breadcrumb.ml
index 057a25a..f3e0748 100644
--- a/src/breadcrumb.ml
+++ b/src/breadcrumb.ml
@@ -1,21 +1,56 @@
let gen in_path out_path =
+ let out_path = Fpath.to_string out_path in
+ let in_path = Fpath.to_string in_path in
let common_path =
- Utils.strings_common_suffix
- (Filename.dirname @@ Fpath.to_string in_path)
- (Filename.dirname @@ Fpath.to_string out_path)
+ Utils.strings_common_suffix (Filename.dirname in_path)
+ (Filename.dirname out_path)
in
let bread_crumb = String.split_on_char '/' common_path in
- let buff = Buffer.create 16 in
+ let buff = Buffer.create 512 in
+ let fmt = Format.formatter_of_buffer buff in
- let bread_crumb =
- List.map
- (fun name ->
- let path_to_root = Buffer.contents buff in
- Buffer.add_string buff "../";
- (name, path_to_root) )
- (List.rev bread_crumb)
- in
+ if bread_crumb <> [ "." ] then
+ let buff = Buffer.create 16 in
- List.rev bread_crumb
+ let bread_crumb =
+ List.map
+ (fun name ->
+ let path = Buffer.contents buff in
+ Buffer.add_string buff "../";
+ (name, path) )
+ (List.rev bread_crumb)
+ in
+
+ let bread_crumb = List.rev bread_crumb in
+
+ let root_name =
+ List.fold_left (fun acc _el -> Filename.dirname acc) out_path bread_crumb
+ in
+
+ let bread_crumb =
+ match bread_crumb with
+ | [] -> assert false
+ | [ (_name, path) ] -> [ (root_name, path) ]
+ | [ _h1; (_name, path) ] -> [ (root_name, path) ]
+ | (_name, path) :: t -> (root_name, path) :: t
+ in
+
+ List.iter
+ (fun (name, path) ->
+ Format.fprintf fmt {| %s /|}
+ (Html.url_encode path) (Html.sanitize name) )
+ bread_crumb
+ else begin
+ Format.printf "TODO";
+ Format.printf "lol"
+ end;
+
+ Format.fprintf fmt {| %s|} (Html.sanitize (Filename.basename out_path));
+
+ Format.fprintf fmt "
";
+
+ Format.pp_print_flush fmt ();
+
+ Buffer.contents buff
diff --git a/src/directory.ml b/src/directory.ml
index af48c9c..1fad55c 100644
--- a/src/directory.ml
+++ b/src/directory.ml
@@ -39,10 +39,13 @@ let rec gen in_path out_path =
([], []) content
in
- let content = Format.asprintf "%a" Html.pp_index (files, directories) in
+ let bread_crumb = Breadcrumb.gen in_path out_path in
+ let index_content =
+ Format.asprintf "%a" Html.pp_index (bread_crumb, files, directories)
+ in
let index_path = Fpath.append out_path (Fpath.v "index.html") in
- match Bos.OS.File.write index_path content with
+ match Bos.OS.File.write index_path index_content with
| Ok () -> ()
| Error _e ->
Utils.error
diff --git a/src/file.ml b/src/file.ml
index 617fb95..0937269 100644
--- a/src/file.ml
+++ b/src/file.ml
@@ -5,21 +5,6 @@ let gen in_path out_path =
let bread_crumb = Breadcrumb.gen in_path out_path in
- let buff = Buffer.create 512 in
- let fmt = Format.formatter_of_buffer buff in
-
- List.iter
- (fun (name, path) ->
- Format.fprintf fmt {|%s /|}
- (Html.url_encode path) (Html.sanitize name) )
- bread_crumb;
-
- Format.fprintf fmt "
";
-
- Format.pp_print_flush fmt ();
-
- let bread_crumb = Buffer.contents buff in
-
let content =
match Bos.OS.File.read in_path with
| Ok content ->
diff --git a/src/html.ml b/src/html.ml
index cfe21ed..4330032 100644
--- a/src/html.ml
+++ b/src/html.ml
@@ -33,7 +33,7 @@ let pp_unsafe fmt content =
let pp fmt content = pp_unsafe fmt (sanitize content)
-let pp_index fmt (files, directories) =
+let pp_index fmt (breadcrumb, files, directories) =
let to_string l =
List.map
(fun (filename, path) -> (Fpath.to_string filename, Fpath.to_string path))
@@ -63,8 +63,8 @@ let pp_index fmt (files, directories) =
let dir_len = List.length directories in
let fil_len = List.length files in
Format.asprintf
- {|@.%d files (%d directories, %d regular files)