diff --git a/lib/alchemy_pub/engine.ex b/lib/alchemy_pub/engine.ex index bf49dc0..816e3f6 100644 --- a/lib/alchemy_pub/engine.ex +++ b/lib/alchemy_pub/engine.ex @@ -1,4 +1,5 @@ defmodule AlchemyPub.Engine do + @moduledoc false use GenServer alias Phoenix.PubSub @@ -117,7 +118,9 @@ defmodule AlchemyPub.Engine do {:error, _} -> {%{}, File.read!(path)} end - rank = frontmatter |> Map.get("rank", nil) + is_deck = frontmatter |> Map.get("deck", false) + rank = frontmatter |> Map.get("rank", (is_deck && :deck) || nil) + tags = frontmatter |> Map.get("tags", []) |> List.wrap() date = with d when is_binary(d) <- frontmatter |> Map.get("date"), @@ -135,9 +138,7 @@ defmodule AlchemyPub.Engine do meta = frontmatter - |> Map.put("title", title) - |> Map.put("date", date) - |> Map.update("tags", [], fn t -> t || [] end) + |> Map.merge(%{"title" => title, "date" => date, "rank" => rank, "tags" => tags}) post = {urlify(filename), rank, date, meta, content} :ets.insert(@ets, post) diff --git a/lib/alchemy_pub_web/page_live.ex b/lib/alchemy_pub_web/page_live.ex index d541935..6f4c72c 100644 --- a/lib/alchemy_pub_web/page_live.ex +++ b/lib/alchemy_pub_web/page_live.ex @@ -130,13 +130,30 @@ defmodule AlchemyPubWeb.PageLive do ) end - {pages, posts} = + {pages, posts, decks} = case connected?(socket) do - true -> {pages |> filter_hidden(), posts |> filter_hidden()} - false -> {pages |> filter_robot(), posts |> filter_robot()} + true -> + visible_pages = pages |> filter_hidden() + + {visible_pages |> filter_rank(), posts |> filter_hidden(), + visible_pages |> filter_rank(:deck)} + + false -> + visible_pages = pages |> filter_robot() + + {visible_pages |> filter_rank(), posts |> filter_robot(), + visible_pages |> filter_rank(:deck)} end - socket |> assign(posts: posts, pages: pages, tags: tags, params: params) + socket |> assign(posts: posts, pages: pages, decks: decks, tags: tags, params: params) + end + + defp filter_rank(pages, type) when is_atom(type) do + pages |> Enum.filter(fn [_, rank | _] -> rank == type end) + end + + defp filter_rank(pages) do + pages |> Enum.filter(fn [_, rank | _] -> is_integer(rank) end) end defp filter_hidden(pages) do diff --git a/lib/alchemy_pub_web/page_live.html.heex b/lib/alchemy_pub_web/page_live.html.heex index f755c48..18af22a 100644 --- a/lib/alchemy_pub_web/page_live.html.heex +++ b/lib/alchemy_pub_web/page_live.html.heex @@ -48,6 +48,22 @@ <% end %> +
  • + + +