legendary-doc-site/apps/content/lib/content_web/views/layout_view.ex

92 lines
2.5 KiB
Elixir

defmodule Content.LayoutView do
use Content, :view
alias Content.{Option, Options}
def title(Content.PostsView, "index.html", assigns) do
"Page #{assigns.page} | #{title(nil, nil, nil)}"
end
def title(Content.FeedsView, "index.rss", %{category: category}) do
"#{category} | #{title(nil, nil, nil)}"
end
def title(Content.PostsView, "show.html", assigns) do
(assigns.post.post_title |> HtmlSanitizeEx.strip_tags()) <> " | " <> title(nil, nil, nil)
end
def title(_, _, _) do
case Options.get("blogname") do
opt = %Option{} ->
opt.option_value
_ ->
I18n.t! "en", "site.title"
end
end
def excerpt(Content.PostsView, "show.html", assigns) do
assigns.post.post_excerpt
|> HtmlSanitizeEx.strip_tags()
end
def excerpt(Content.FeedsView, "index.rss", %{category: category}) do
"#{category} | #{excerpt(nil, nil, nil)}"
end
def excerpt(_, _, _) do
case Options.get("blogdescription") do
opt = %Option{} ->
opt.option_value
_ ->
I18n.t! "en", "site.excerpt"
end
end
def author(Content.PostsView, "show.html", assigns) do
case assigns do
%{author: %{display_name: name}} ->
name
_ ->
"Anonymous"
end
end
def author(_, _, _) do
"Anonymous"
end
def corresponding_feed_url(conn, _, _, %{category: nil}) do
Routes.index_feed_url(conn, :index)
end
def corresponding_feed_url(conn, Content.PostsView, "index.html", %{category: category}) do
Routes.category_feed_url(conn, :index, category)
end
def corresponding_feed_url(conn, _, _, _) do
Routes.index_feed_url(conn, :index)
end
def menu_markup(menu_items, conn), do: menu_markup(menu_items, conn, 0)
def menu_markup(nil, _, _), do: ""
def menu_markup([], _, _), do: ""
def menu_markup(menu_items, conn, level) do
~E"""
<ul style="--menu-level: <%= level %>;">
<%= for item <- menu_items do %>
<li>
<label>
<%= case item[:type] do %>
<% "category" -> %>
<%= link item[:related_item].title, to: Routes.category_path(conn, :index_posts, item[:related_item].slug) %>
<% _ -> %>
<%= link item[:related_item].title, to: Routes.posts_path(conn, :show, item[:related_item].slug) %>
<% end %>
<%= menu_markup(item[:children], conn, level + 1) %>
</label>
</li>
<% end %>
</ul>
"""
end
end