Packages

phoenix_kit

1.4.2
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 pages view.ex
Raw

lib/phoenix_kit_web/live/modules/pages/view.ex

defmodule PhoenixKitWeb.Live.Modules.Pages.View do
@moduledoc """
Rendered view for Pages markdown files.
Displays markdown content with GitHub-style formatting.
"""
use PhoenixKitWeb, :live_view
use Gettext, backend: PhoenixKitWeb.Gettext
alias PhoenixKit.Pages
alias PhoenixKit.Pages.FileOperations
alias PhoenixKit.Pages.Metadata
alias PhoenixKit.Utils.Routes
def mount(_params, _session, socket) do
# Set locale
locale = socket.assigns[:current_locale] || "en"
Gettext.put_locale(PhoenixKitWeb.Gettext, locale)
# Check if module is enabled
if Pages.enabled?() do
socket =
socket
|> assign(:page_title, "View Page")
|> assign(:file_path, nil)
|> assign(:file_content, "")
|> assign(:rendered_html, "")
|> assign(:metadata, nil)
|> assign(:project_title, PhoenixKit.Settings.get_setting("project_title", "PhoenixKit"))
|> assign(:current_locale, locale)
{:ok, socket}
else
socket =
socket
|> put_flash(:error, "Pages module is not enabled")
|> redirect(to: Routes.path("/admin/modules"))
{:ok, socket}
end
end
def handle_params(%{"path" => path}, _uri, socket) do
case FileOperations.read_file(path) do
{:ok, content} ->
# Parse metadata and content
{metadata, markdown_content} =
case Metadata.parse(content) do
{:ok, meta, stripped} -> {meta, stripped}
{:error, :no_metadata} -> {nil, content}
end
# Render markdown to HTML
rendered_html =
case Earmark.as_html(markdown_content) do
{:ok, html, _} -> html
{:error, _, _} -> "<p>Error rendering markdown</p>"
end
socket =
socket
|> assign(:file_path, path)
|> assign(:file_content, markdown_content)
|> assign(:rendered_html, rendered_html)
|> assign(:metadata, metadata)
|> assign(:page_title, get_page_title(metadata, path))
{:noreply, socket}
{:error, _reason} ->
socket =
socket
|> put_flash(:error, "File not found: #{path}")
|> redirect(to: Routes.path("/admin/pages"))
{:noreply, socket}
end
end
def handle_params(_params, _uri, socket) do
# No path provided, redirect to file list
socket =
socket
|> put_flash(:error, "No file path provided")
|> redirect(to: Routes.path("/admin/pages"))
{:noreply, socket}
end
## Private Helpers
defp get_page_title(nil, path), do: "View: #{Path.basename(path)}"
defp get_page_title(metadata, _path), do: "View: #{metadata.title}"
end