2.0 KiB · text 5af55d9
defmodule GitGudWeb.WikiLive.Show do
use GitGudWeb, :live_view
alias GitGud.Repositories
alias GitGud.Repositories.Storage
alias GitGud.Wikis
@impl true
def mount(%{"owner" => owner, "name" => name, "slug" => slug}, _session, socket) do
repo =
Repositories.get_repository_by_path!(owner, name)
|> GitGud.Repo.preload([:owner, :organization])
body = Wikis.get_page(repo, slug)
if is_nil(body) do
{:ok,
socket
|> put_flash(:info, "Page does not exist yet.")
|> push_navigate(to: ~p"/r/#{Storage.repo_handle(repo)}/#{repo.name}/wiki/_edit/#{slug}")}
else
{:ok,
socket
|> assign(:repo, repo)
|> assign(:handle, Storage.repo_handle(repo))
|> GitGudWeb.RepoLive.Header.assign_chrome(repo)
|> assign(:slug, slug)
|> assign(:body, body)
|> assign(:page_title, "Wiki: #{slug}")}
end
end
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash} current_scope={@current_scope}>
<div class="space-y-4">
<GitGudWeb.RepoLive.Header.header
repo={@repo}
handle={@handle}
current_scope={@current_scope}
has_packages?={@has_packages?}
can_admin?={@can_admin?}
latest_run={@latest_run}
/>
<nav class="text-sm font-mono">
<.link navigate={~p"/r/#{@handle}/#{@repo.name}/wiki"} class="link link-hover">
Wiki
</.link>
<span class="opacity-50"> / </span>
<span>{@slug}</span>
</nav>
<div class="flex justify-end gap-2">
<.link
navigate={~p"/r/#{@handle}/#{@repo.name}/wiki/_edit/#{@slug}"}
class="btn btn-sm btn-ghost"
>
Edit
</.link>
</div>
<article class="prose max-w-none">
{Phoenix.HTML.raw(render_md(@body, @editor_theme))}
</article>
</div>
</Layouts.app>
"""
end
defp render_md(body, theme), do: GitGud.Markdown.to_html(body, theme: theme)
end