50 lines
1.7 KiB
Elixir
50 lines
1.7 KiB
Elixir
defmodule ToweropsWeb.ChangelogLive do
|
|
@moduledoc false
|
|
use ToweropsWeb, :live_view
|
|
|
|
@impl true
|
|
def mount(_params, _session, socket) do
|
|
entries = ToweropsWeb.ChangelogParser.parse()
|
|
{:ok, assign(socket, entries: entries, page_title: "What's New")}
|
|
end
|
|
|
|
@impl true
|
|
def render(assigns) do
|
|
~H"""
|
|
<Layouts.authenticated
|
|
flash={@flash}
|
|
current_scope={@current_scope}
|
|
active_page="changelog"
|
|
unresolved_alert_count={assigns[:unresolved_alert_count] || 0}
|
|
>
|
|
<div class="mx-auto max-w-3xl px-4 py-8">
|
|
<h1 class="text-3xl font-bold mb-2">What's New</h1>
|
|
<p class="text-gray-900/60 dark:text-gray-100/60 mb-8">
|
|
Latest updates and improvements to TowerOps.
|
|
</p>
|
|
|
|
<div class="space-y-8">
|
|
<div
|
|
:for={entry <- @entries}
|
|
class="relative pl-8 border-l-2 border-red-500/20 dark:border-red-600/20"
|
|
>
|
|
<div class="absolute -left-[9px] top-1 w-4 h-4 rounded-full bg-red-500 dark:bg-red-600 border-2 border-gray-50 dark:border-gray-900" />
|
|
<div class="mb-1">
|
|
<span class="badge text-gray-700 dark:text-gray-300 font-mono">
|
|
{Calendar.strftime(entry.date, "%b %d, %Y")}
|
|
</span>
|
|
</div>
|
|
<h2 :if={entry.title} class="text-lg font-semibold mb-2">{entry.title}</h2>
|
|
<ul
|
|
:if={entry.items != []}
|
|
class="list-disc list-inside space-y-1 text-gray-900/80 dark:text-gray-100/80 text-sm"
|
|
>
|
|
<li :for={item <- entry.items}>{item}</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Layouts.authenticated>
|
|
"""
|
|
end
|
|
end
|