fix: Make layout tags work correctly
This commit is contained in:
parent
7e10ac28f4
commit
3768256834
1 changed files with 9 additions and 33 deletions
|
@ -1,39 +1,15 @@
|
|||
defmodule AppWeb.LayoutView do
|
||||
use AppWeb, :view
|
||||
|
||||
def title(view_module, template, assigns) do
|
||||
delegate_with_default(view_module, :title, [view_module, template, assigns], Legendary.I18n.t!("en", "site.title"))
|
||||
end
|
||||
def title(_, _, _) do
|
||||
Legendary.I18n.t!("en", "site.title")
|
||||
end
|
||||
|
||||
def excerpt(view_module, template, assigns) do
|
||||
delegate_with_default(view_module, :excerpt, [view_module, template, assigns], Legendary.I18n.t!("en", "site.excerpt"))
|
||||
end
|
||||
def excerpt(_, _, _) do
|
||||
Legendary.I18n.t!("en", "site.excerpt")
|
||||
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
|
||||
def feed_tag(_, _, _, _) do
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue