Packages

phoenix_kit

1.4.7
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit_web live modules publishing preview.ex
Raw

lib/phoenix_kit_web/live/modules/publishing/preview.ex

defmodule PhoenixKitWeb.Live.Modules.Publishing.Preview do
@moduledoc """
Preview rendering for .phk publishing entries.
"""
use PhoenixKitWeb, :live_view
use Gettext, backend: PhoenixKitWeb.Gettext
alias Phoenix.HTML
alias PhoenixKitWeb.Live.Modules.Publishing
# alias PhoenixKitWeb.Live.Modules.Publishing.PageBuilder # COMMENTED OUT: Component system
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Routes
def mount(%{"type" => type_slug} = params, _session, socket) do
locale = params["locale"] || socket.assigns[:current_locale] || "en"
Gettext.put_locale(PhoenixKitWeb.Gettext, locale)
Process.put(:phoenix_kit_current_locale, locale)
socket =
socket
|> assign(:current_locale, locale)
|> assign(:project_title, Settings.get_setting("project_title", "PhoenixKit"))
|> assign(:page_title, "Preview")
|> assign(:type_slug, type_slug)
|> assign(:type_name, Publishing.type_name(type_slug) || type_slug)
|> assign(
:current_path,
Routes.path("/admin/publishing/#{type_slug}/preview", locale: locale)
)
|> assign(:rendered_content, nil)
|> assign(:error, nil)
{:ok, socket}
end
def handle_params(%{"path" => path}, _uri, socket) do
type_slug = socket.assigns.type_slug
case Publishing.read_entry(type_slug, path) do
{:ok, entry} ->
case render_markdown_content(entry.content) do
{:ok, rendered_html} ->
{:noreply,
socket
|> assign(:entry, entry)
|> assign(:rendered_content, rendered_html)
|> assign(:error, nil)}
{:error, error_message} ->
{:noreply,
socket
|> assign(:entry, entry)
|> assign(:rendered_content, nil)
|> assign(:error, error_message)}
end
{:error, _reason} ->
{:noreply,
socket
|> put_flash(:error, gettext("Entry not found"))
|> push_navigate(
to:
Routes.path("/admin/publishing/#{type_slug}",
locale: socket.assigns.current_locale
)
)}
end
end
def handle_event("back_to_editor", _params, socket) do
path = URI.encode(socket.assigns.entry.path)
{:noreply,
push_navigate(socket,
to:
Routes.path(
"/admin/publishing/#{socket.assigns.type_slug}/edit?path=#{path}",
locale: socket.assigns.current_locale
)
)}
end
# ============================================================================
# COMMENTED OUT: Component-based rendering system - Preview assigns builder
# ============================================================================
# This was used to build sample data for the component rendering system.
# Related to: lib/phoenix_kit/publishing/page_builder.ex
# ============================================================================
# Build sample assigns for preview rendering
# defp build_preview_assigns(_socket) do
# %{
# user: %{
# name: "Preview User",
# greeting_time: "Today"
# },
# stats: %{
# total_users: "1,000",
# active_projects: 5
# },
# framework: "Phoenix"
# }
# end
defp render_markdown_content(content) do
trimmed = content || ""
case Earmark.as_html(trimmed) do
{:ok, html, _warnings} ->
{:ok, HTML.raw(html)}
{:error, _html, errors} ->
message =
errors
|> Enum.map(&format_markdown_error/1)
|> Enum.join("; ")
|> case do
"" -> gettext("An unknown error occurred while rendering markdown.")
err -> gettext("Failed to render markdown: %{message}", message: err)
end
{:error, message}
end
end
defp format_markdown_error({severity, line, message})
when is_atom(severity) and is_integer(line) and is_binary(message) do
"#{severity} (line #{line}): #{message}"
end
defp format_markdown_error(%{line: line, message: message})
when is_integer(line) and is_binary(message) do
"line #{line}: #{message}"
end
defp format_markdown_error(other), do: inspect(other)
end