Shine effect for significant anniversaries
This commit is contained in:
@@ -26,6 +26,7 @@
|
|||||||
"Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
|
"Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
|
||||||
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||||
--animate-shake: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
|
--animate-shake: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
|
||||||
|
--animate-shine: shine 3s ease infinite;
|
||||||
|
|
||||||
@keyframes shake {
|
@keyframes shake {
|
||||||
10%,
|
10%,
|
||||||
@@ -46,4 +47,16 @@
|
|||||||
transform: translate3d(4px, 0, 0);
|
transform: translate3d(4px, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@keyframes shine {
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
background-size: 200% 200%;
|
||||||
|
background-position: left center;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-size: 200% 200%;
|
||||||
|
background-position: right center;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,13 +128,7 @@ defmodule MusicLibraryWeb.StatsComponents do
|
|||||||
<h2 class="mt-1 flex font-semibold text-sm sm:text-base leading-5 text-zinc-700 dark:text-zinc-300 text-wrap">
|
<h2 class="mt-1 flex font-semibold text-sm sm:text-base leading-5 text-zinc-700 dark:text-zinc-300 text-wrap">
|
||||||
{record.title}
|
{record.title}
|
||||||
</h2>
|
</h2>
|
||||||
<p class="mt-1 text-xs leading-5 text-zinc-500 dark:text-zinc-400">
|
<.released_how_long_ago record={record} current_date={@current_date} />
|
||||||
{ngettext(
|
|
||||||
"1 year ago",
|
|
||||||
"%{count} years ago",
|
|
||||||
Records.Record.released_how_long_ago?(record, @current_date)
|
|
||||||
)}
|
|
||||||
</p>
|
|
||||||
<p class="sm:hidden mt-1 text-xs leading-5 text-zinc-500 dark:text-zinc-400">
|
<p class="sm:hidden mt-1 text-xs leading-5 text-zinc-500 dark:text-zinc-400">
|
||||||
{format_label(record.format)} · {type_label(record.type)}
|
{format_label(record.format)} · {type_label(record.type)}
|
||||||
<span :if={record.purchased_at}>
|
<span :if={record.purchased_at}>
|
||||||
@@ -166,6 +160,36 @@ defmodule MusicLibraryWeb.StatsComponents do
|
|||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
attr :record, Records.Record, required: true
|
||||||
|
attr :current_date, Date, required: true
|
||||||
|
|
||||||
|
defp released_how_long_ago(assigns) do
|
||||||
|
assigns =
|
||||||
|
assign(
|
||||||
|
assigns,
|
||||||
|
:years,
|
||||||
|
Records.Record.released_how_long_ago?(assigns.record, assigns.current_date)
|
||||||
|
)
|
||||||
|
|
||||||
|
~H"""
|
||||||
|
<p class={[
|
||||||
|
"mt-1 text-xs leading-5",
|
||||||
|
!special_year?(@years) && "text-zinc-500 dark:text-zinc-400",
|
||||||
|
special_year?(@years) &&
|
||||||
|
"font-semibold bg-gradient-to-r bg-clip-text text-transparent from-yellow-200 via-yellow-500 to-yellow-700 animate-shine"
|
||||||
|
]}>
|
||||||
|
{ngettext(
|
||||||
|
"1 year ago",
|
||||||
|
"%{count} years ago",
|
||||||
|
@years
|
||||||
|
)}
|
||||||
|
</p>
|
||||||
|
"""
|
||||||
|
end
|
||||||
|
|
||||||
|
defp special_year?(year) when year in [5, 10, 25, 50, 75], do: true
|
||||||
|
defp special_year?(_year), do: false
|
||||||
|
|
||||||
def tracked_record?(tracked_releases, release_id) do
|
def tracked_record?(tracked_releases, release_id) do
|
||||||
Enum.find_value(tracked_releases, fn tracked_release ->
|
Enum.find_value(tracked_releases, fn tracked_release ->
|
||||||
if tracked_release.release_id == release_id, do: tracked_release.record_id
|
if tracked_release.release_id == release_id, do: tracked_release.record_id
|
||||||
|
|||||||
Reference in New Issue
Block a user