simplify access to Ymd module via inclusion in Entry

This commit is contained in:
Stavros Polymenis 2017-01-12 22:12:13 +00:00
parent 2f446e0abd
commit 4a21adca7b
3 changed files with 15 additions and 15 deletions

View File

@ -39,10 +39,10 @@ let of_ymd ?(header_tpl=None) ?(text_tpl=None) blog_url lgrn ymd =
|> to_string |> to_string
let article_link entry = let article_link entry =
let module E = Logarion.Entry in let open Logarion.Entry in
let u = "/text/" ^ Filename.(entry.E.filepath |> basename |> chop_extension) in let u = "/text/" ^ Filename.(entry.filepath |> basename |> chop_extension) in
li [a ~a:[a_href (uri_of_string u)] li [a ~a:[a_href (uri_of_string u)]
[Unsafe.data (Ymd.(entry.E.meta.Ymd.title) ^ Ymd.Date.(pretty_date @@ last entry.E.meta.Ymd.date)) ] [Unsafe.data (entry.meta.title ^ Date.(pretty_date @@ last entry.meta.date)) ]
] ]
let of_entries ?(header_tpl=None) ?(listing_tpl=None) ?(entry_tpl=None) blog_url lgrn = let of_entries ?(header_tpl=None) ?(listing_tpl=None) ?(entry_tpl=None) blog_url lgrn =

View File

@ -52,6 +52,7 @@ let title_path repo title = titledir repo ^ Ymd.filename_of_title title ^ extens
let uuid_path repo ymd = uuiddir repo ^ Ymd.(Id.to_string ymd.meta.uuid) ^ extension let uuid_path repo ymd = uuiddir repo ^ Ymd.(Id.to_string ymd.meta.uuid) ^ extension
module Entry = struct module Entry = struct
include Ymd
type t = { filepath : string; meta : Ymd.meta; body : string option } type t = { filepath : string; meta : Ymd.meta; body : string option }
let of_file s = let of_file s =
@ -99,16 +100,16 @@ module Archive = struct
let add config ymd = let add config ymd =
let open Lwt.Infix in let open Lwt.Infix in
Entry.to_file config ymd >>= fun () -> let open Entry in
let open Ymd in to_file config ymd >>= fun () ->
if not (categorised [Category.Draft] ymd) && ymd.meta.title <> "" then if not (categorised [Category.Draft] ymd) && ymd.meta.title <> "" then
let archive_path = config.Configuration.repository in let archive_path = config.Configuration.repository in
let archive = of_repo archive_path in let archive = of_repo archive_path in
let dir = titledir archive_path in let dir = titledir archive_path in
begin try begin try
let entry = List.find (fun entry -> entry.Entry.meta.uuid = ymd.meta.uuid) archive in let entry = List.find (fun entry -> entry.meta.uuid = ymd.meta.uuid) archive in
if slug_of_filename entry.Entry.filepath <> (Ymd.filename ymd) then if slug_of_filename entry.filepath <> filename ymd then
let found_filepath = dir ^ entry.Entry.filepath in let found_filepath = dir ^ entry.filepath in
Lwt_unix.rename found_filepath (next_semantic_filepath dir ymd); Lwt_unix.rename found_filepath (next_semantic_filepath dir ymd);
else Lwt.return () else Lwt.return ()
with Not_found -> with Not_found ->
@ -124,7 +125,7 @@ module Archive = struct
if not (List.exists p ts) then unique_entry (List.cons h ts) t else unique_entry ts t if not (List.exists p ts) then unique_entry (List.cons h ts) t else unique_entry ts t
| [] -> ts | [] -> ts
in in
let unique_topics ts x = unique_entry ts x.Entry.meta.Ymd.topics in let unique_topics ts x = unique_entry ts Entry.(x.meta.topics) in
List.fold_left unique_topics [] archive List.fold_left unique_topics [] archive
end end
@ -134,11 +135,11 @@ let latest_entry config fragment =
let repo = Configuration.(config.repository) in let repo = Configuration.(config.repository) in
let latest p entry' = let latest p entry' =
let open Entry in let open Entry in
if not @@ BatString.exists (entry'.Entry.meta.Ymd.title) fragment then None if not @@ BatString.exists (entry'.meta.title) fragment then None
else else
match p with match p with
| Some entry -> | Some entry ->
if entry.meta.Ymd.date.Ymd.Date.published < entry'.meta.Ymd.date.Ymd.Date.published if entry.meta.date.Date.published < entry'.meta.date.Date.published
then Some entry' else p then Some entry' else p
| None -> Some entry' in | None -> Some entry' in
ListLabels.fold_left ~f:latest ~init:(None) (Archive.of_repo repo) ListLabels.fold_left ~f:latest ~init:(None) (Archive.of_repo repo)

View File

@ -1,5 +1,3 @@
open Ymd
type t = Mustache.t type t = Mustache.t
type header = Header of t type header = Header of t
@ -26,6 +24,7 @@ let comment c = c
let concat l = String.concat "" l let concat l = String.concat "" l
let fold_text ymd = let fold_text ymd =
let open Ymd in
let escaped e = match e with let escaped e = match e with
| "title" -> ymd.meta.title | "title" -> ymd.meta.title
| "abstract" -> ymd.meta.abstract | "abstract" -> ymd.meta.abstract
@ -39,7 +38,7 @@ let fold_text ymd =
| "categories" -> CategorySet.to_csv ymd.meta.categories; | "categories" -> CategorySet.to_csv ymd.meta.categories;
| "keywords" -> String.concat ", " ymd.meta.keywords; | "keywords" -> String.concat ", " ymd.meta.keywords;
| "series" -> String.concat ", " ymd.meta.series; | "series" -> String.concat ", " ymd.meta.series;
| "body" -> Omd.to_html (Omd.of_string Ymd.(ymd.body)) | "body" -> Omd.to_html @@ Omd.of_string ymd.body
| "uuid" -> Id.to_string ymd.meta.uuid | "uuid" -> Id.to_string ymd.meta.uuid
| _ -> prerr_endline ("unknown tag: " ^ e); "" in | _ -> prerr_endline ("unknown tag: " ^ e); "" in
Mustache.fold ~string ~section ~escaped ~unescaped ~partial ~comment ~concat Mustache.fold ~string ~section ~escaped ~unescaped ~partial ~comment ~concat
@ -76,7 +75,7 @@ let fold_index ?(entry_tpl=None) lgrn =
let open Logarion.Entry in let open Logarion.Entry in
let simple entry = let simple entry =
"<li><a href=\"/text/" ^ Filename.(entry.filepath |> basename |> chop_extension) ^ "\">" "<li><a href=\"/text/" ^ Filename.(entry.filepath |> basename |> chop_extension) ^ "\">"
^ entry.meta.title ^ " ~ " ^ Ymd.Date.(pretty_date @@ last entry.meta.date) ^ "</a></li>" in ^ entry.meta.title ^ " ~ " ^ Date.(pretty_date @@ last entry.meta.date) ^ "</a></li>" in
let fold_entry tpl entry = fold_entry entry tpl in let fold_entry tpl entry = fold_entry entry tpl in
let entry = match entry_tpl with Some (Listing_entry e) -> fold_entry e | None -> simple in let entry = match entry_tpl with Some (Listing_entry e) -> fold_entry e | None -> simple in
let escaped e = match e with let escaped e = match e with