2020-07-30 16:05:09 +00:00
|
|
|
defmodule AppWeb.LayoutView do
|
|
|
|
use AppWeb, :view
|
2020-09-30 20:10:17 +00:00
|
|
|
|
|
|
|
def title(view_module, template, assigns) do
|
2021-03-19 19:32:18 +00:00
|
|
|
delegate_with_default(view_module, :title, [view_module, template, assigns], Legendary.I18n.t!("en", "site.title"))
|
2020-09-30 20:10:17 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def excerpt(view_module, template, assigns) do
|
2021-03-19 19:32:18 +00:00
|
|
|
delegate_with_default(view_module, :excerpt, [view_module, template, assigns], Legendary.I18n.t!("en", "site.excerpt"))
|
2020-09-30 20:10:17 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def feed_tag(conn, view_module, view_template, assigns) do
|
|
|
|
delegate_with_default(view_module, :feed_tag, [conn, view_module, view_template, assigns], nil)
|
|
|
|
end
|
|
|
|
|
|
|
|
defp delegate_with_default(nil, _, _, default), do: default
|
|
|
|
defp delegate_with_default(view_module, function_name, args, default) do
|
|
|
|
sibling_layout = sibling_layout_view(view_module)
|
|
|
|
if function_exported?(sibling_layout, function_name, args |> Enum.count()) do
|
|
|
|
apply(sibling_layout, function_name, args)
|
|
|
|
else
|
|
|
|
default
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
defp sibling_layout_view(view_module) do
|
|
|
|
view_module
|
|
|
|
|> parent_module()
|
|
|
|
|> Module.concat("LayoutView")
|
|
|
|
end
|
|
|
|
|
|
|
|
defp parent_module(mod) do
|
|
|
|
[_|tail] = Module.split(mod) |> Enum.reverse()
|
|
|
|
|
|
|
|
tail
|
|
|
|
|> Enum.reverse()
|
|
|
|
|> Module.concat()
|
|
|
|
end
|
2020-07-30 16:05:09 +00:00
|
|
|
end
|