Merge metadata menu item builders
This commit is contained in:
1
AUDIT.md
1
AUDIT.md
@@ -18,6 +18,7 @@ after each item.
|
|||||||
- [x] `rendering/post_rendering.ex`
|
- [x] `rendering/post_rendering.ex`
|
||||||
- [x] `rendering/list_archive.ex`
|
- [x] `rendering/list_archive.ex`
|
||||||
- [x] `rendering/template_selection.ex`
|
- [x] `rendering/template_selection.ex`
|
||||||
|
- [x] `rendering/metadata.ex`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ defmodule BDS.Rendering.Metadata do
|
|||||||
alias BDS.Posts.Translation
|
alias BDS.Posts.Translation
|
||||||
alias BDS.Tags.Tag
|
alias BDS.Tags.Tag
|
||||||
|
|
||||||
|
@menu_item_path_segments %{
|
||||||
|
page: [],
|
||||||
|
category_archive: ["category"]
|
||||||
|
}
|
||||||
|
|
||||||
@spec project_metadata(String.t()) :: map()
|
@spec project_metadata(String.t()) :: map()
|
||||||
def project_metadata(project_id) do
|
def project_metadata(project_id) do
|
||||||
{:ok, metadata} = ProjectMetadata.get_project_metadata(project_id)
|
{:ok, metadata} = ProjectMetadata.get_project_metadata(project_id)
|
||||||
@@ -23,17 +28,19 @@ defmodule BDS.Rendering.Metadata do
|
|||||||
@spec menu_items(String.t()) :: [map()]
|
@spec menu_items(String.t()) :: [map()]
|
||||||
def menu_items(project_id) do
|
def menu_items(project_id) do
|
||||||
{:ok, %{items: items}} = Menu.get_menu(project_id)
|
{:ok, %{items: items}} = Menu.get_menu(project_id)
|
||||||
Enum.map(items, &to_template_menu_item/1)
|
template_menu_items(items)
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec menu_items_from_raw([map()]) :: [map()]
|
@spec menu_items_from_raw([map()]) :: [map()]
|
||||||
def menu_items_from_raw(items) when is_list(items) do
|
def menu_items_from_raw(items) when is_list(items) do
|
||||||
Enum.map(items, &to_template_menu_item/1)
|
template_menu_items(items)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp template_menu_items(items), do: Enum.map(items, &to_template_menu_item/1)
|
||||||
|
|
||||||
defp to_template_menu_item(item) do
|
defp to_template_menu_item(item) do
|
||||||
kind = Map.get(item, :kind)
|
kind = Map.get(item, :kind)
|
||||||
children = Enum.map(Map.get(item, :children, []), &to_template_menu_item/1)
|
children = template_menu_items(Map.get(item, :children, []))
|
||||||
|
|
||||||
%{
|
%{
|
||||||
title: Map.get(item, :label, ""),
|
title: Map.get(item, :label, ""),
|
||||||
@@ -46,13 +53,13 @@ defmodule BDS.Rendering.Metadata do
|
|||||||
|
|
||||||
defp menu_item_href(%{kind: :home}), do: "/"
|
defp menu_item_href(%{kind: :home}), do: "/"
|
||||||
|
|
||||||
defp menu_item_href(%{kind: :page, slug: slug}) when is_binary(slug) and slug != "",
|
defp menu_item_href(%{kind: kind, slug: slug}) when is_binary(slug) and slug != "" do
|
||||||
do: "/#{URI.encode(slug)}/"
|
case Map.get(@menu_item_path_segments, kind) do
|
||||||
|
nil -> "#"
|
||||||
|
path_segments -> "/" <> Path.join(path_segments ++ [URI.encode(slug)]) <> "/"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp menu_item_href(%{kind: :category_archive, slug: slug}) when is_binary(slug) and slug != "",
|
|
||||||
do: "/category/#{URI.encode(slug)}/"
|
|
||||||
|
|
||||||
defp menu_item_href(%{kind: :submenu}), do: "#"
|
|
||||||
defp menu_item_href(_item), do: "#"
|
defp menu_item_href(_item), do: "#"
|
||||||
|
|
||||||
@spec blog_languages(map(), String.t()) :: [map()]
|
@spec blog_languages(map(), String.t()) :: [map()]
|
||||||
|
|||||||
Reference in New Issue
Block a user