philomena/lib/philomena_web/views/layout_view.ex

113 lines
3.4 KiB
Elixir
Raw Normal View History

2019-08-15 02:32:32 +02:00
defmodule PhilomenaWeb.LayoutView do
use PhilomenaWeb, :view
2019-08-16 02:28:12 +02:00
2019-12-04 02:56:39 +01:00
alias PhilomenaWeb.ImageView
2019-11-17 23:51:14 +01:00
def layout_class(conn) do
conn.assigns[:layout_class] || "layout--narrow"
end
2019-11-30 23:40:53 +01:00
def container_class(%{use_centered_layout: true}), do: "layout--center-aligned"
def container_class(_user), do: nil
2019-08-16 02:28:12 +02:00
def render_time(conn) do
(Time.diff(Time.utc_now(), conn.assigns[:start_time], :microsecond) / 1000.0)
|> Float.round(3)
|> Float.to_string()
end
2019-08-18 02:43:44 +02:00
def hostname() do
{:ok, host} = :inet.gethostname()
2019-08-18 18:17:05 +02:00
2019-08-18 02:43:44 +02:00
host |> to_string
end
2019-10-11 03:47:13 +02:00
def clientside_data(conn) do
extra = Map.get(conn.assigns, :clientside_data, [])
interactions = Map.get(conn.assigns, :interactions, [])
user = conn.assigns.current_user
filter = conn.assigns.current_filter
data = [
filter_id: filter.id,
hidden_tag_list: Jason.encode!(filter.hidden_tag_ids),
hidden_filter: Search.String.normalize(filter.hidden_complex_str || ""),
spoilered_tag_list: Jason.encode!(filter.spoilered_tag_ids),
spoilered_filter: Search.String.normalize(filter.spoilered_complex_str || ""),
user_id: if(user, do: user.id, else: nil),
user_name: if(user, do: user.name, else: nil),
user_slug: if(user, do: user.slug, else: nil),
user_is_signed_in: !!user,
user_can_edit_filter: if(user, do: filter.user_id == user.id, else: false),
spoiler_type: if(user, do: user.spoiler_type, else: "static"),
watched_tag_list: Jason.encode!(if(user, do: user.watched_tag_ids, else: [])),
fancy_tag_edit: if(user, do: user.fancy_tag_field_on_edit, else: true),
fancy_tag_upload: if(user, do: user.fancy_tag_field_on_upload, else: true),
interactions: Jason.encode!(interactions),
ignored_tag_list: "[]"
]
data = Keyword.merge(data, extra)
tag(:div, class: "js-datastore", data: data)
end
2019-11-16 01:59:28 +01:00
2019-11-29 18:03:39 +01:00
def footer_data do
case Application.get_env(:philomena, :footer) do
nil ->
footer = Jason.decode!(Application.get_env(:philomena, :footer_json))
Application.put_env(:philomena, :footer, footer)
footer
footer ->
footer
end
end
2019-11-16 01:59:28 +01:00
def stylesheet_path(conn, %{theme: "dark"}),
do: Routes.static_path(conn, "/css/dark.css")
def stylesheet_path(conn, %{theme: "red"}),
do: Routes.static_path(conn, "/css/red.css")
def stylesheet_path(conn, _user),
do: Routes.static_path(conn, "/css/default.css")
2019-12-04 02:56:39 +01:00
2019-12-16 03:35:07 +01:00
def theme_name(%{theme: theme}), do: theme
def theme_name(_user), do: "default"
2019-12-04 02:56:39 +01:00
def artist_tags(tags),
do: Enum.filter(tags, & &1.namespace == "artist")
2019-12-04 22:47:46 +01:00
def opengraph?(conn),
do: !is_nil(conn.assigns[:image]) and conn.assigns.image.__meta__.state == :loaded and is_list(conn.assigns.image.tags)
2019-12-14 21:15:35 +01:00
def manages_site_notices?(conn),
do: can?(conn, :index, Philomena.SiteNotices.SiteNotice)
def manages_tags?(conn),
do: can?(conn, :index, Philomena.Tags.Tag)
def manages_users?(conn),
do: can?(conn, :index, Philomena.Users.User)
def manages_forums?(conn),
do: conn.assigns.current_user.role == "admin"
def manages_ads?(conn),
do: conn.assigns.current_user.role == "admin"
def manages_badges?(conn),
do: can?(conn, :index, Philomena.Badges.Badge)
def manages_static_pages?(conn),
do: conn.assigns.current_user.role == "admin"
def manages_mod_notes?(conn),
do: conn.assigns.current_user.role in ["admin", "moderator"]
def manages_bans?(conn),
do: conn.assigns.current_user.role in ["admin", "moderator"]
2019-08-15 02:32:32 +02:00
end