92 lines
2.5 KiB
Elixir
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
|