diff --git a/.gitignore b/.gitignore index a08eb58..f4899a5 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,4 @@ esy.lock/ *~ posts/*.blog posts/*.post -#* - +\#* \ No newline at end of file diff --git a/rawleydotxyz.ml b/rawleydotxyz.ml index 5246188..7b8659e 100644 --- a/rawleydotxyz.ml +++ b/rawleydotxyz.ml @@ -21,7 +21,7 @@ let () = Dream.get "/blog" Render.render_blog_index; Dream.scope "/blog" [] [ Dream.get "/rss.xml" Render.render_rss_feed; - Dream.get "/:post" Render.render_blog_post + Dream.get "/:post" (fun request -> Render.render_blog_post ~slug:(Dream.param request "post")) ]; Dream.get "/**" (fun _ -> Render.handle_not_found ()) ] diff --git a/render/blog_index.eml.ml b/render/blog_index.eml.ml new file mode 100644 index 0000000..e69de29 diff --git a/render/dune b/render/dune index 97b6f85..3c7235c 100644 --- a/render/dune +++ b/render/dune @@ -1,10 +1,12 @@ (library (name render) (public_name rawleydotxyz.render) - (libraries dream lwt database)) + (libraries dream lwt database) + (preprocess + (pps lwt_ppx))) (rule - (targets index.ml layout.ml) - (deps index.eml.ml layout.eml.ml) + (targets index.ml layout.ml post_layout.ml blog_index.ml) + (deps index.eml.ml layout.eml.ml post_layout.eml.ml blog_index.eml.ml) (action (run dream_eml %{deps} --workspace %{workspace_root}))) \ No newline at end of file diff --git a/render/layout.eml.ml b/render/layout.eml.ml index b68f65a..9549377 100644 --- a/render/layout.eml.ml +++ b/render/layout.eml.ml @@ -1,4 +1,4 @@ - let render body = +let render body = diff --git a/render/post_layout.eml.ml b/render/post_layout.eml.ml new file mode 100644 index 0000000..d3b0764 --- /dev/null +++ b/render/post_layout.eml.ml @@ -0,0 +1,48 @@ +let render ~title ~tags ~body = + let combine_tags lst = + List.fold_left (fun t a -> t ^ " " ^ a) "" lst + in + + + + + + <%s title %> + + + +
+

+ /home/rawley.xyz +

+ +
+
+

<%s title %>

+ <%s! body %> +
+ + + \ No newline at end of file diff --git a/render/render.ml b/render/render.ml index 270842a..019bdfa 100644 --- a/render/render.ml +++ b/render/render.ml @@ -105,20 +105,6 @@ let handle_error e = let handle_not_found () = Dream.html ?code:(Some 404) not_found_template -let render_blog_post request = - let slug = Dream.param request "post" in - let post_t = Database.get_blog_post_by_slug slug in - post_t >>= fun post -> - match post with - | Error e -> handle_error e - | Ok p_opt -> - match p_opt with - | None -> handle_not_found () - | Some p -> - Printf.sprintf "

%s

\r\n%s" p.title p.content - |> render_page - |> Dream.html - let render_blog_index (_ : Dream.request) = let buff = Buffer.create 512 in let () = Buffer.add_string buff "

Blog

I have an rss feed too." in @@ -168,5 +154,17 @@ let render_rss_feed (_ : Dream.request) = let render_simple (module R : SimpleRender) = R.render () |> Layout.render |> Dream.html +let render_blog_post ~slug = + let%lwt post = Database.get_blog_post_by_slug slug in + match post with + | Ok p_opt -> + begin match p_opt with + | None -> handle_not_found () + | Some p -> + Dream.html @@ Post_layout.render ~title:p.title ~body:p.content ~tags:[p.title] + end + | Error e -> handle_error e + + let render_index () = render_simple (module Index) diff --git a/render/render.mli b/render/render.mli deleted file mode 100644 index 8887f0f..0000000 --- a/render/render.mli +++ /dev/null @@ -1,18 +0,0 @@ -module BlogPost = Database.BlogPost -module type SimpleRender = sig val render : unit -> string end -val header_template : string -val footer_template : string -val replace_sequence : string -> string -> string -> string -val html_unescape : string -> string -val not_found_template : string -val error_template : string -val render_page : string -> string -val generate_link : BlogPost.t -> string -val generate_rss_item : BlogPost.t -> string -val handle_error : [< Caqti_error.t ] -> Dream.response Lwt.t -val handle_not_found : unit -> Dream.response Lwt.t -val render_blog_post : Dream.request -> Dream.response Lwt.t -val render_blog_index : Dream.request -> Dream.response Lwt.t -val render_rss_feed : Dream.request -> Dream.response Lwt.t -val render_simple : (module SimpleRender) -> Dream.response Lwt.t -val render_index : unit -> Dream.response Lwt.t