Packages
phoenix_kit
1.7.44
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/modules/publishing/web/post_show.html.heex
<PhoenixKitWeb.Layouts.dashboard {dashboard_assigns(assigns)}>
<%= if @post do %>
<div class="max-w-4xl mx-auto p-4 md:p-6">
<%!-- Breadcrumb --%>
<div class="text-sm breadcrumbs mb-4">
<ul>
<li>
<.pk_link navigate="/admin/publishing">{gettext("Publishing")}</.pk_link>
</li>
<li>
<.pk_link navigate={"/admin/publishing/#{@group_slug}"}>{@group_name}</.pk_link>
</li>
<li>{@post.metadata.title || gettext("Untitled")}</li>
</ul>
</div>
<%!-- Header with title and actions --%>
<div class="flex items-start justify-between gap-4 mb-6">
<div class="min-w-0">
<h1 class="text-2xl font-bold text-base-content truncate">
{@post.metadata.title || gettext("Untitled post")}
</h1>
<div class="flex items-center gap-2 mt-1">
<span class={"badge #{version_status_badge_class(@post.metadata[:status] || "draft")}"}>
{@post.metadata[:status] || "draft"}
</span>
<span class="text-sm text-base-content/60">
{gettext("Slug")}: <code class="font-mono">{@post.slug}</code>
</span>
</div>
</div>
<div class="flex gap-2 shrink-0">
<.pk_link
navigate={"/admin/publishing/#{@group_slug}/#{@post_uuid}/edit"}
class="btn btn-primary btn-sm"
>
<span class="hero-pencil-square w-4 h-4" />{gettext("Edit")}
</.pk_link>
<.pk_link
navigate={"/admin/publishing/#{@group_slug}/#{@post_uuid}/preview"}
class="btn btn-ghost btn-sm"
>
<span class="hero-eye w-4 h-4" />{gettext("Preview")}
</.pk_link>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<%!-- Versions card --%>
<div class="card bg-base-100 border border-base-200 shadow-sm">
<div class="card-body p-4">
<h2 class="card-title text-base">{gettext("Versions")}</h2>
<div class="space-y-2 mt-2">
<%= for version <- @post.available_versions do %>
<% status = Map.get(@post.version_statuses || %{}, version, "draft") %>
<% date = Map.get(@post.version_dates || %{}, version) %>
<.pk_link
navigate={"/admin/publishing/#{@group_slug}/#{@post_uuid}/edit?v=#{version}"}
class="flex items-center justify-between p-2 rounded-lg hover:bg-base-200 transition-colors"
>
<div class="flex items-center gap-2">
<span class="font-mono text-sm">v{version}</span>
<span class={"badge badge-xs #{version_status_badge_class(status)}"}>
{status}
</span>
</div>
<%= if date do %>
<span class="text-xs text-base-content/50">{date}</span>
<% end %>
</.pk_link>
<% end %>
</div>
</div>
</div>
<%!-- Languages card --%>
<div class="card bg-base-100 border border-base-200 shadow-sm">
<div class="card-body p-4">
<h2 class="card-title text-base">{gettext("Languages")}</h2>
<div class="flex flex-wrap gap-2 mt-2">
<%= for lang <- @post.available_languages do %>
<% status = Map.get(@post.language_statuses || %{}, lang) %>
<% is_primary = lang == @post.primary_language %>
<.pk_link
navigate={"/admin/publishing/#{@group_slug}/#{@post_uuid}/edit?lang=#{lang}"}
class={
if is_primary,
do:
"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg transition-colors bg-primary/10 border border-primary/20 hover:bg-primary/20",
else:
"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg transition-colors bg-base-200 hover:bg-base-300"
}
>
<span class={"rounded-full inline-block w-2 h-2 #{language_status_color(status)}"} />
<span class="text-sm font-medium">{lang}</span>
<%= if is_primary do %>
<span class="text-xs text-primary/70">{gettext("Primary")}</span>
<% end %>
</.pk_link>
<% end %>
</div>
</div>
</div>
<%!-- Metadata card --%>
<div class="card bg-base-100 border border-base-200 shadow-sm">
<div class="card-body p-4">
<h2 class="card-title text-base">{gettext("Details")}</h2>
<dl class="space-y-2 mt-2 text-sm">
<div class="flex justify-between">
<dt class="text-base-content/60">{gettext("Mode")}</dt>
<dd class="font-medium">{@post.mode}</dd>
</div>
<%= if @post[:date] do %>
<div class="flex justify-between">
<dt class="text-base-content/60">{gettext("Date")}</dt>
<dd class="font-medium font-mono">{Date.to_iso8601(@post.date)}</dd>
</div>
<% end %>
<div class="flex justify-between">
<dt class="text-base-content/60">{gettext("Primary Language")}</dt>
<dd class="font-medium">{@post.primary_language}</dd>
</div>
<%= if @post.metadata[:description] do %>
<div>
<dt class="text-base-content/60 mb-1">{gettext("Description")}</dt>
<dd class="text-base-content/80">{@post.metadata.description}</dd>
</div>
<% end %>
</dl>
</div>
</div>
<%!-- Future stats placeholder --%>
<div class="card bg-base-100 border border-base-200 shadow-sm">
<div class="card-body p-4">
<h2 class="card-title text-base">{gettext("Stats")}</h2>
<p class="text-sm text-base-content/50 mt-2">
{gettext("Post analytics will appear here.")}
</p>
</div>
</div>
</div>
</div>
<% end %>
</PhoenixKitWeb.Layouts.dashboard>