Packages
phoenix_kit
1.4.9
1.7.210
1.7.209
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
Current section
Files
lib/phoenix_kit_web/live/modules/blogging/preview.ex
defmodule PhoenixKitWeb.Live.Modules.Blogging.Preview do
@moduledoc """
Preview rendering for .phk blogging posts.
"""
use PhoenixKitWeb, :live_view
use Gettext, backend: PhoenixKitWeb.Gettext
alias Phoenix.HTML
alias PhoenixKitWeb.Live.Modules.Blogging
# alias PhoenixKitWeb.Live.Modules.Blogging.PageBuilder # COMMENTED OUT: Component system
alias PhoenixKit.Settings
alias PhoenixKit.Utils.Routes
@impl true
def mount(params, _session, socket) do
blog_slug = params["blog"] || params["category"] || params["type"]
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(:blog_slug, blog_slug)
|> assign(:blog_name, Blogging.blog_name(blog_slug) || blog_slug)
|> assign(
:current_path,
Routes.path("/admin/blogging/#{blog_slug}/preview", locale: locale)
)
|> assign(:rendered_content, nil)
|> assign(:error, nil)
{:ok, socket}
end
@impl true
def handle_params(%{"path" => path}, _uri, socket) do
blog_slug = socket.assigns.blog_slug
case Blogging.read_post(blog_slug, path) do
{:ok, post} ->
case render_markdown_content(post.content) do
{:ok, rendered_html} ->
{:noreply,
socket
|> assign(:post, post)
|> assign(:rendered_content, rendered_html)
|> assign(:error, nil)}
{:error, error_message} ->
{:noreply,
socket
|> assign(:post, post)
|> assign(:rendered_content, nil)
|> assign(:error, error_message)}
end
{:error, _reason} ->
{:noreply,
socket
|> put_flash(:error, gettext("Post not found"))
|> push_navigate(
to:
Routes.path("/admin/blogging/#{blog_slug}",
locale: socket.assigns.current_locale
)
)}
end
end
@impl true
def handle_event("back_to_editor", _params, socket) do
path = URI.encode(socket.assigns.post.path)
{:noreply,
push_navigate(socket,
to:
Routes.path(
"/admin/blogging/#{socket.assigns.blog_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/blogging/page_builder.ex
# ============================================================================
defp render_markdown_content(content) do
case Earmark.as_html(content) do
{:ok, html, _warnings} ->
{:ok, HTML.raw(html)}
{:error, _html, errors} ->
message =
errors
|> Enum.map_join("; ", &format_markdown_error/1)
|> 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