mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-30 14:57:59 +01:00
79 lines
2.5 KiB
Elixir
79 lines
2.5 KiB
Elixir
defmodule PhilomenaWeb.AppView do
|
|
use Phoenix.HTML
|
|
|
|
@time_strings %{
|
|
seconds: "less than a minute",
|
|
minute: "about a minute",
|
|
minutes: "%d minutes",
|
|
hour: "about an hour",
|
|
hours: "about %d hours",
|
|
day: "a day",
|
|
days: "%d days",
|
|
month: "about a month",
|
|
months: "%d months",
|
|
year: "about a year",
|
|
years: "%d years"
|
|
}
|
|
|
|
def pretty_time(time) do
|
|
seconds = NaiveDateTime.diff(NaiveDateTime.utc_now(), time, :second)
|
|
relation = if seconds < 0, do: "from now", else: "ago"
|
|
time = time |> DateTime.from_naive!("Etc/UTC") |> DateTime.to_iso8601()
|
|
|
|
seconds = abs(seconds)
|
|
minutes = abs(div(seconds, 60))
|
|
hours = abs(div(minutes, 60))
|
|
days = abs(div(hours, 24))
|
|
months = abs(div(days, 30))
|
|
years = abs(div(days, 365))
|
|
|
|
words =
|
|
cond do
|
|
seconds < 45 -> String.replace(@time_strings[:seconds], "%d", to_string(seconds))
|
|
seconds < 90 -> String.replace(@time_strings[:minute], "%d", to_string(1))
|
|
minutes < 45 -> String.replace(@time_strings[:minutes], "%d", to_string(minutes))
|
|
minutes < 90 -> String.replace(@time_strings[:hour], "%d", to_string(1))
|
|
hours < 24 -> String.replace(@time_strings[:hours], "%d", to_string(hours))
|
|
hours < 42 -> String.replace(@time_strings[:day], "%d", to_string(1))
|
|
days < 30 -> String.replace(@time_strings[:days], "%d", to_string(days))
|
|
days < 45 -> String.replace(@time_strings[:month], "%d", to_string(1))
|
|
days < 365 -> String.replace(@time_strings[:months], "%d", to_string(months))
|
|
days < 548 -> String.replace(@time_strings[:year], "%d", to_string(1))
|
|
true -> String.replace(@time_strings[:years], "%d", to_string(years))
|
|
end
|
|
|
|
content_tag(:time, "#{words} #{relation}", datetime: time, title: time)
|
|
end
|
|
|
|
def can?(conn, action, model) do
|
|
Canada.Can.can?(conn.assigns.current_user, action, model)
|
|
end
|
|
|
|
def number_with_delimiter(number) do
|
|
number
|
|
|> to_charlist()
|
|
|> Enum.reverse()
|
|
|> Enum.chunk_every(3)
|
|
|> Enum.map(&Enum.reverse(&1))
|
|
|> Enum.reverse()
|
|
|> Enum.join(",")
|
|
end
|
|
|
|
def pluralize(singular, plural, count) do
|
|
if count == 1 do
|
|
singular
|
|
else
|
|
plural
|
|
end
|
|
end
|
|
|
|
def button_to(text, route, args \\ []) do
|
|
method = Keyword.get(args, :method, "get")
|
|
class = Keyword.get(args, :class, nil)
|
|
data = Keyword.get(args, :data, [])
|
|
|
|
form_for(nil, route, [method: method, class: "button_to"], fn _f ->
|
|
submit text, class: class, data: data
|
|
end)
|
|
end
|
|
end
|