defmodule ChiyaWeb.PublicComponents do use Phoenix.Component use Phoenix.VerifiedRoutes, endpoint: ChiyaWeb.Endpoint, router: ChiyaWeb.Router, statics: ChiyaWeb.static_paths() import ChiyaWeb.Format import ChiyaWeb.Markdown, only: [render: 1] import Phoenix.HTML, only: [raw: 1] import ChiyaWeb.CoreComponents @doc """ Renders a middot as divider """ def dot(assigns), do: ~H""" · """ @doc """ Renders a horizontal line """ def line(assigns), do: ~H"""
""" attr :text, :string, default: "⌘" def divider(assigns) do ~H"""
<%= assigns.text %>
""" end @doc """ Renders a note-header with title. """ attr :class, :string, default: nil attr :inline, :boolean, default: false slot :inner_block, required: true slot :subtitle slot :actions def header(assigns) do ~H"""

<%= render_slot(@inner_block) %> <%= render_slot(@subtitle) %>

<%= render_slot(@subtitle) %>

<%= render_slot(@actions) %>
""" end attr :layout, :atom, default: :list attr :notes, :list, required: true def note_list(assigns) do case assigns.layout do :gallery -> ~H""" """ :microblog -> ~H"""
<%= for note <- assigns.notes do %>
<% image = main_image(note) %> <%= if image do %>
<% end %>
<%= raw(render(note.content)) %>
<.divider /> <% end %>
""" # default, show headings only _ -> ~H"""
<%= for note <- assigns.notes do %> <%= note.name %> <%= pretty_date(note.published_at) %> <% end %>
""" end end def comment_form(assigns) do ~H""" <.simple_form :let={f} for={@changeset} action={~p"/note/#{assigns.note.slug}/comment"} class="bg-theme-background -m-3" > <.error :if={@changeset.action}> Oops, something went wrong! Please check the errors below. <.input field={f[:author_name]} type="text" placeholder="Name" class="bg-theme-background dark:bg-theme-background border-theme-base/20 dark:border-theme-base/20 text-theme-base dark:text-theme-base placeholder-theme-base/40 dark:placeholder-theme-base/60 dark:focus:border-theme-base/60 dark:focus:border-theme-base/60" /> <.input field={f[:content]} type="textarea" placeholder="Content" rows="3" class="bg-theme-background dark:bg-theme-background border-theme-base/20 dark:border-theme-base/20 text-theme-base dark:text-theme-base placeholder-theme-base/60 dark:placeholder-theme-base/60 focus:border-theme-base/60 dark:focus:border-theme-base/60" /> <.input field={f[:note_id]} type="hidden" /> <:actions> <.button>Submit Comment """ end def comment_list(assigns) do ~H""" <%= if not Enum.empty?(assigns.note.comments) do %> <.line />

<%= Enum.count(assigns.note.comments) %> Comments

<% else %> <.line />

No comments yet.

<% end %> """ end defp gallery_name(note), do: "gallery-#{note.id}" defp main_image(note), do: note.images |> Enum.filter(fn image -> image.featured end) |> List.first() end