philomena/lib/philomena_web/views/image_view.ex

86 lines
2.5 KiB
Elixir
Raw Normal View History

2019-08-18 18:17:05 +02:00
defmodule PhilomenaWeb.ImageView do
use PhilomenaWeb, :view
2019-10-05 02:27:26 +02:00
def thumb_urls(image, show_hidden) do
%{
thumb_tiny: thumb_url(image, show_hidden, :thumb_tiny),
thumb_small: thumb_url(image, show_hidden, :thumb_small),
thumb: thumb_url(image, show_hidden, :thumb),
small: thumb_url(image, show_hidden, :small),
medium: thumb_url(image, show_hidden, :medium),
large: thumb_url(image, show_hidden, :large),
full: thumb_url(image, show_hidden, :full)
}
end
2019-08-18 18:17:05 +02:00
def thumb_url(image, show_hidden, name) do
2019-08-18 20:14:36 +02:00
%{year: year, month: month, day: day} = image.created_at
deleted = image.hidden_from_users
2019-11-17 04:15:26 +01:00
format = String.downcase(image.image_format)
2019-08-18 20:14:36 +02:00
root = image_url_root()
id_fragment =
if deleted and show_hidden do
"#{image.id}-#{image.hidden_image_Key}"
else
"#{image.id}"
end
"#{root}/#{year}/#{month}/#{day}/#{id_fragment}/#{name}.#{format}"
end
def pretty_url(image, _short, download) do
%{year: year, month: month, day: day} = image.created_at
root = image_url_root()
view = if download, do: "download", else: "view"
filename = "#{image.id}"
2019-11-17 04:15:26 +01:00
format = String.downcase(image.image_format)
2019-08-18 20:14:36 +02:00
"#{root}/#{view}/#{year}/#{month}/#{day}/#{filename}.#{format}"
end
def image_url_root do
Application.get_env(:philomena, :image_url_root)
2019-08-18 18:17:05 +02:00
end
2019-10-11 03:47:13 +02:00
2019-11-12 01:31:22 +01:00
def image_container_data(image, size) do
[
2019-10-11 03:47:13 +02:00
image_id: image.id,
image_tags: Jason.encode!(Enum.map(image.tags, & &1.id)),
2019-11-16 06:09:02 +01:00
image_tag_aliases: image.tag_list_plus_alias_cache,
2019-10-11 03:47:13 +02:00
score: image.score,
faves: image.faves_count,
upvotes: image.upvotes_count,
downvotes: image.downvotes_count,
comment_count: image.comments_count,
created_at: NaiveDateTime.to_iso8601(image.created_at),
source_url: image.source_url,
uris: Jason.encode!(thumb_urls(image, false)),
width: image.image_width,
height: image.image_height,
aspect_ratio: image.image_aspect_ratio,
size: size
]
2019-11-12 01:31:22 +01:00
end
2019-10-11 03:47:13 +02:00
2019-11-12 01:31:22 +01:00
def image_container(image, size, block) do
content_tag(:div, block.(), class: "image-container #{size}", data: image_container_data(image, size))
2019-10-11 03:47:13 +02:00
end
2019-11-12 00:54:20 +01:00
def display_order(tags) do
tags
|> Enum.sort_by(&{
&1.category != "rating",
&1.category != "origin",
&1.category != "character",
&1.category != "oc",
&1.category != "species",
&1.category != "content-fanmade",
&1.category != "content-official",
&1.category != "spoiler",
2019-11-12 00:54:20 +01:00
&1.name
})
end
2019-08-18 18:17:05 +02:00
end