Packages
phoenix_kit
1.7.34
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/posts/web/settings.html.heex
<PhoenixKitWeb.Components.LayoutWrapper.app_layout
flash={@flash}
phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
page_title="Posts Settings"
current_path={@url_path}
project_title={@project_title}
>
<div class="container flex flex-col mx-auto px-4 py-6">
<%!-- Header Section --%>
<header class="w-full relative mb-6">
<%!-- Back Button (Left aligned) --%>
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings")}
class="btn btn-outline btn-primary btn-sm absolute left-0 top-0 -mb-12"
>
<PhoenixKitWeb.Components.Core.Icons.icon_arrow_left /> Back to Settings
</.link>
<%!-- Title Section --%>
<div class="text-center">
<h1 class="text-4xl font-bold text-base-content mb-3">Posts Settings</h1>
<p class="text-lg text-base-content">
Configure posts module behavior, limits, and features
</p>
</div>
</header>
<%!-- Main Content --%>
<div class="max-w-4xl mx-auto space-y-8">
<.form for={%{}} phx-submit="save">
<%!-- Content Limits Card --%>
<div class="card bg-base-100 shadow-xl mb-6">
<div class="card-body">
<h2 class="card-title text-2xl mb-4">
<.icon name="hero-adjustments-horizontal" class="w-6 h-6" /> Content Limits
</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<%!-- Max Media --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Max Media Per Post</span>
</label>
<input
name="settings[posts_max_media]"
type="number"
value={@posts_max_media}
class="input input-bordered focus:input-primary"
min="0"
max="50"
/>
<label class="label">
<span class="label-text-alt text-base-content/70">
Maximum number of images/media files per post (0-50)
</span>
</label>
</div>
<%!-- Max Title Length --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Max Title Length</span>
</label>
<input
name="settings[posts_max_title_length]"
type="number"
value={@posts_max_title_length}
class="input input-bordered focus:input-primary"
min="10"
max="500"
/>
<label class="label">
<span class="label-text-alt text-base-content/70">
Maximum characters for post title (10-500)
</span>
</label>
</div>
<%!-- Max Subtitle Length --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Max Subtitle Length</span>
</label>
<input
name="settings[posts_max_subtitle_length]"
type="number"
value={@posts_max_subtitle_length}
class="input input-bordered focus:input-primary"
min="10"
max="1000"
/>
<label class="label">
<span class="label-text-alt text-base-content/70">
Maximum characters for post subtitle/tagline (10-1000)
</span>
</label>
</div>
<%!-- Max Content Length --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Max Content Length</span>
</label>
<input
name="settings[posts_max_content_length]"
type="number"
value={@posts_max_content_length}
class="input input-bordered focus:input-primary"
min="100"
max="100000"
/>
<label class="label">
<span class="label-text-alt text-base-content/70">
Maximum characters for post content (100-100000)
</span>
</label>
</div>
<%!-- Max Mentions --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Max Mentions</span>
</label>
<input
name="settings[posts_max_mentions]"
type="number"
value={@posts_max_mentions}
class="input input-bordered focus:input-primary"
min="0"
max="50"
/>
<label class="label">
<span class="label-text-alt text-base-content/70">
Maximum user mentions per post (0-50)
</span>
</label>
</div>
<%!-- Max Tags --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Max Tags</span>
</label>
<input
name="settings[posts_max_tags]"
type="number"
value={@posts_max_tags}
class="input input-bordered focus:input-primary"
min="0"
max="100"
/>
<label class="label">
<span class="label-text-alt text-base-content/70">
Maximum hashtags per post (0-100)
</span>
</label>
</div>
</div>
</div>
</div>
<%!-- Module Configuration Card --%>
<div class="card bg-base-100 shadow-xl mb-6">
<div class="card-body">
<h2 class="card-title text-2xl mb-4">
<.icon name="hero-cog-6-tooth" class="w-6 h-6" /> Module Configuration
</h2>
<div class="space-y-4">
<%!-- Posts Per Page --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Posts Per Page</span>
</label>
<input
name="settings[posts_per_page]"
type="number"
value={@posts_per_page}
class="input input-bordered focus:input-primary w-full max-w-xs"
min="5"
max="100"
/>
<label class="label">
<span class="label-text-alt text-base-content/70">
Number of posts to display per page (5-100)
</span>
</label>
</div>
<div class="divider"></div>
<%!-- Default Status --%>
<div class="form-control">
<label class="label">
<span class="label-text font-medium">Default Post Status</span>
</label>
<select
name="settings[posts_default_status]"
class="select select-bordered focus:select-primary w-full max-w-xs"
>
<option value="draft" selected={@posts_default_status == "draft"}>
Draft
</option>
<option value="public" selected={@posts_default_status == "public"}>
Public
</option>
<option value="unlisted" selected={@posts_default_status == "unlisted"}>
Unlisted
</option>
</select>
<label class="label">
<span class="label-text-alt text-base-content/70">
Default visibility status for new posts
</span>
</label>
</div>
</div>
</div>
</div>
<%!-- Feature Toggles Card --%>
<div class="card bg-base-100 shadow-xl mb-6">
<div class="card-body">
<h2 class="card-title text-2xl mb-4">
<.icon name="hero-check-circle" class="w-6 h-6" /> Feature Toggles
</h2>
<div class="space-y-4">
<%!-- Likes Enabled --%>
<div class="form-control">
<label class="label cursor-pointer">
<span class="label-text text-lg">
<span class="font-semibold">Enable Likes</span>
<div class="text-sm text-base-content/70 mt-1">
Allow users to like/favorite posts
</div>
</span>
<input type="hidden" name="settings[posts_likes_enabled]" value="false" />
<input
type="checkbox"
name="settings[posts_likes_enabled]"
value="true"
class="toggle toggle-secondary"
checked={@posts_likes_enabled == "true"}
/>
</label>
</div>
<div class="divider"></div>
<%!-- Allow Scheduling --%>
<div class="form-control">
<label class="label cursor-pointer">
<span class="label-text text-lg">
<span class="font-semibold">Allow Scheduling</span>
<div class="text-sm text-base-content/70 mt-1">
Enable scheduling posts for future publication
</div>
</span>
<input type="hidden" name="settings[posts_allow_scheduling]" value="false" />
<input
type="checkbox"
name="settings[posts_allow_scheduling]"
value="true"
class="toggle toggle-accent"
checked={@posts_allow_scheduling == "true"}
/>
</label>
</div>
<div class="divider"></div>
<%!-- Allow Groups --%>
<div class="form-control">
<label class="label cursor-pointer">
<span class="label-text text-lg">
<span class="font-semibold">Allow Groups</span>
<div class="text-sm text-base-content/70 mt-1">
Enable user-specific post collections (Pinterest-style)
</div>
</span>
<input type="hidden" name="settings[posts_allow_groups]" value="false" />
<input
type="checkbox"
name="settings[posts_allow_groups]"
value="true"
class="toggle toggle-accent"
checked={@posts_allow_groups == "true"}
/>
</label>
</div>
<div class="divider"></div>
<%!-- Allow Reposts --%>
<div class="form-control">
<label class="label cursor-pointer">
<span class="label-text text-lg">
<span class="font-semibold">Allow Reposts</span>
<div class="text-sm text-base-content/70 mt-1">
Enable sharing/reposting of other users' posts
</div>
</span>
<input type="hidden" name="settings[posts_allow_reposts]" value="false" />
<input
type="checkbox"
name="settings[posts_allow_reposts]"
value="true"
class="toggle toggle-accent"
checked={@posts_allow_reposts == "true"}
/>
</label>
</div>
<div class="divider"></div>
<%!-- SEO Auto Slug --%>
<div class="form-control">
<label class="label cursor-pointer">
<span class="label-text text-lg">
<span class="font-semibold">Auto-generate SEO Slugs</span>
<div class="text-sm text-base-content/70 mt-1">
Automatically create URL-friendly slugs from post titles
</div>
</span>
<input type="hidden" name="settings[posts_seo_auto_slug]" value="false" />
<input
type="checkbox"
name="settings[posts_seo_auto_slug]"
value="true"
class="toggle toggle-info"
checked={@posts_seo_auto_slug == "true"}
/>
</label>
</div>
<div class="divider"></div>
<%!-- Show View Count --%>
<div class="form-control">
<label class="label cursor-pointer">
<span class="label-text text-lg">
<span class="font-semibold">Show View Count</span>
<div class="text-sm text-base-content/70 mt-1">
Display view counter on posts
</div>
</span>
<input type="hidden" name="settings[posts_show_view_count]" value="false" />
<input
type="checkbox"
name="settings[posts_show_view_count]"
value="true"
class="toggle toggle-info"
checked={@posts_show_view_count == "true"}
/>
</label>
</div>
</div>
</div>
</div>
<%!-- Moderation Card --%>
<div class="card bg-base-100 shadow-xl mb-6">
<div class="card-body">
<h2 class="card-title text-2xl mb-4">
<.icon name="hero-shield-check" class="w-6 h-6" /> Moderation
</h2>
<div class="space-y-4">
<%!-- Require Approval --%>
<div class="form-control">
<label class="label cursor-pointer">
<span class="label-text text-lg">
<span class="font-semibold">Require Post Approval</span>
<div class="text-sm text-base-content/70 mt-1">
All new posts must be approved by an admin before going public
</div>
</span>
<input type="hidden" name="settings[posts_require_approval]" value="false" />
<input
type="checkbox"
name="settings[posts_require_approval]"
value="true"
class="toggle toggle-warning"
checked={@posts_require_approval == "true"}
/>
</label>
</div>
</div>
<div class="alert alert-info mt-4">
<.icon name="hero-information-circle" class="w-5 h-5" />
<div>
<h3 class="font-bold">Moderation Tips</h3>
<p class="text-sm mt-1">
Enable these features for tighter content control. Moderation can help prevent spam and inappropriate content from appearing on your platform.
</p>
</div>
</div>
</div>
</div>
<%!-- Action Buttons --%>
<div class="flex flex-col sm:flex-row gap-4 justify-end">
<button
type="button"
phx-click="reset_defaults"
class="btn btn-ghost btn-outline"
data-confirm="Are you sure you want to reset all settings to defaults?"
>
<.icon name="hero-arrow-path" class="w-4 h-4 mr-2" /> Reset to Defaults
</button>
<button
type="submit"
class={["btn btn-primary", if(@saving, do: "loading", else: "")]}
disabled={@saving}
>
<%= if @saving do %>
Saving...
<% else %>
<.icon name="hero-check" class="w-4 h-4 mr-2" /> Save Settings
<% end %>
</button>
</div>
</.form>
</div>
</div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>