Skip to content

Commit 2555512

Browse files
fix: pages
1 parent c53ee50 commit 2555512

3 files changed

Lines changed: 57 additions & 85 deletions

File tree

pythoncms/app.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -315,18 +315,19 @@ def setup_theme_paths(app):
315315
def inject_global_vars(app, global_template_variables):
316316
@app.context_processor
317317
def inject_global_vars():
318-
APP_NAME = os.environ.get('APP_NAME', 'Demo')
318+
import datetime
319+
from flask_login import current_user
320+
from shopyo.api.assets import get_static
321+
from shopyo_theme.helpers import get_active_front_theme, get_active_back_theme
322+
323+
APP_NAME = os.environ.get('APP_NAME', 'PythonCMS')
319324
def get_setting(env_var):
320325
return os.environ.get(env_var)
321326

322-
from shopyo_theme.helpers import get_active_front_theme, get_active_back_theme
323-
324327
def get_url_prefix(parts=None, as_str=False):
325328
from flask import request
326329
prefix = "/" + request.path.split("/")[1]
327330
if parts == 1 and as_str:
328-
# This is a bit of a hack to match the template usage
329-
# which expects something like /contact/dashboard
330331
return request.path
331332
return prefix
332333

@@ -351,6 +352,8 @@ def get_modules_info():
351352

352353
base_context = {
353354
"APP_NAME": APP_NAME,
355+
"OUR_APP_NAME": APP_NAME,
356+
"current_year": datetime.datetime.now().year,
354357
"len": len,
355358
"current_user": current_user,
356359
"get_static": get_static,

pythoncms/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def start(name, run):
7777

7878
env_content = f"""ACTIVE_FRONT_THEME = 'editorial'
7979
ACTIVE_BACK_THEME = 'sneat'
80-
APP_NAME = 'Demo'
80+
APP_NAME = 'PythonCMS'
8181
ACTIVE_ICONSET = 'boxicons'
8282
SITE_TITLE = 'Site title'
8383
SITE_DESCRIPTION = 'Site title'

pythoncms/modules/contact/templates/contact/dashboard.html

Lines changed: 48 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -3,57 +3,56 @@
33
{% block title %}Contact Messages{% endblock %}
44

55
{% block content %}
6-
<div class="space-y-8" x-data="{ selectedMessage: null, modalOpen: false }">
6+
<div class="space-y-6" x-data="{ selectedMessage: null, modalOpen: false }">
77
<!-- Header -->
8-
<div class="flex flex-col md:flex-row justify-between items-end md:items-center gap-4 border-b border-slate-100 dark:border-slate-800 pb-8">
8+
<div class="flex flex-col md:flex-row justify-between items-center gap-4 pb-6 border-b border-slate-200 dark:border-slate-800">
99
<div>
10-
<h1 class="text-3xl font-black text-slate-900 dark:text-white tracking-tight uppercase">Contact Messages</h1>
11-
<p class="text-slate-500 dark:text-slate-400 font-medium text-xs uppercase tracking-widest mt-1">Manage inquiries from your website</p>
10+
<h1 class="text-2xl font-extrabold text-slate-900 dark:text-white tracking-tight">Contact Messages</h1>
11+
<p class="text-slate-500 dark:text-slate-400 text-sm">Manage inquiries from your website visitors</p>
1212
</div>
1313
</div>
1414

15-
<!-- Table -->
16-
<div class="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-3xl overflow-hidden shadow-sm">
17-
<div class="overflow-x-auto">
18-
<table class="w-full text-left border-collapse">
15+
<!-- Table Container -->
16+
<div class="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl overflow-hidden shadow-sm">
17+
<div class="overflow-x-auto p-4">
18+
<table class="w-full text-left border-collapse border border-slate-200 dark:border-slate-700 rounded-lg overflow-hidden">
1919
<thead>
20-
<tr class="bg-slate-50/50 dark:bg-slate-800/50 border-b border-slate-100 dark:border-slate-800">
21-
<th class="px-6 py-4 text-[10px] font-black text-slate-400 uppercase tracking-[0.2em]">Name</th>
22-
<th class="px-6 py-4 text-[10px] font-black text-slate-400 uppercase tracking-[0.2em]">Email</th>
23-
<th class="px-6 py-4 text-[10px] font-black text-slate-400 uppercase tracking-[0.2em]">Date</th>
24-
<th class="px-6 py-4 text-[10px] font-black text-slate-400 uppercase tracking-[0.2em] text-right">Actions</th>
20+
<tr class="bg-slate-100 dark:bg-slate-800 text-[11px] font-bold text-slate-600 dark:text-slate-300 uppercase tracking-wider">
21+
<th class="px-6 py-4 border border-slate-200 dark:border-slate-700">Sender</th>
22+
<th class="px-6 py-4 border border-slate-200 dark:border-slate-700">Email Address</th>
23+
<th class="px-6 py-4 border border-slate-200 dark:border-slate-700">Received On</th>
24+
<th class="px-6 py-4 border border-slate-200 dark:border-slate-700 text-right">Actions</th>
2525
</tr>
2626
</thead>
27-
<tbody class="divide-y divide-slate-100 dark:divide-slate-800">
27+
<tbody class="divide-y divide-slate-200 dark:divide-slate-700 text-sm">
2828
{% for message in messages.items %}
29-
<tr class="hover:bg-slate-50/50 dark:hover:bg-slate-800/30 transition-colors group">
30-
<td class="px-6 py-4">
31-
<span class="text-xs font-bold text-slate-900 dark:text-white">{{ message.name }}</span>
29+
<tr class="hover:bg-slate-50 dark:hover:bg-slate-800/50 transition-colors">
30+
<td class="px-6 py-4 border border-slate-200 dark:border-slate-700 font-semibold text-slate-900 dark:text-white">
31+
{{ message.name }}
3232
</td>
33-
<td class="px-6 py-4 text-xs text-slate-500 dark:text-slate-400">
33+
<td class="px-6 py-4 border border-slate-200 dark:border-slate-700 text-slate-600 dark:text-slate-400">
3434
{{ message.email }}
3535
</td>
36-
<td class="px-6 py-4 text-[10px] font-bold text-slate-400 uppercase tracking-wider">
37-
{{ message.created_date.strftime('%Y-%m-%d %H:%M') if message.created_date else '' }}
36+
<td class="px-6 py-4 border border-slate-200 dark:border-slate-700 text-slate-500 dark:text-slate-500 tabular-nums">
37+
{{ message.created_date.strftime('%Y-%m-%d %H:%M') if message.created_date else '-' }}
3838
</td>
39-
<td class="px-6 py-4 text-right">
39+
<td class="px-6 py-4 border border-slate-200 dark:border-slate-700 text-right">
4040
<button
41-
@click="selectedMessage = { name: '{{ message.name }}', email: '{{ message.email }}', content: `{{ message.message | replace('\n', '<br>') | safe }}` }; modalOpen = true"
42-
class="inline-flex items-center gap-2 px-4 py-2 rounded-xl bg-primary/10 text-primary hover:bg-primary hover:text-white text-[10px] font-black uppercase tracking-widest transition-all">
43-
<i class="fas fa-eye"></i>
44-
View
41+
@click="selectedMessage = { name: {{ message.name|tojson }}, email: {{ message.email|tojson }}, content: {{ message.message|tojson }} }; modalOpen = true"
42+
class="inline-flex items-center px-3 py-1.5 rounded-lg bg-indigo-600 text-white hover:bg-indigo-700 transition-all font-bold text-xs shadow-sm">
43+
<i class="fas fa-envelope-open-text mr-2"></i>
44+
View Message
4545
</button>
4646
</td>
4747
</tr>
4848
{% endfor %}
49+
4950
{% if not messages.items %}
5051
<tr>
51-
<td colspan="4" class="px-6 py-12 text-center">
52-
<div class="flex flex-col items-center">
53-
<div class="w-12 h-12 rounded-2xl bg-slate-50 dark:bg-slate-800 flex items-center justify-center text-slate-300 dark:text-slate-600 text-xl mb-4">
54-
<i class="fas fa-inbox"></i>
55-
</div>
56-
<p class="text-xs font-bold text-slate-400 uppercase tracking-widest">No messages found</p>
52+
<td colspan="4" class="px-6 py-16 text-center text-slate-400">
53+
<div class="flex flex-col items-center gap-2">
54+
<i class="fas fa-inbox text-3xl opacity-20"></i>
55+
<p class="font-medium">No messages found in your inbox</p>
5756
</div>
5857
</td>
5958
</tr>
@@ -64,74 +63,44 @@ <h1 class="text-3xl font-black text-slate-900 dark:text-white tracking-tight upp
6463

6564
<!-- Pagination -->
6665
{% if messages.pages > 1 %}
67-
<div class="px-6 py-4 bg-slate-50/50 dark:bg-slate-800/50 border-t border-slate-100 dark:border-slate-800 flex justify-between items-center">
68-
<div class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">
69-
Page {{ messages.page }} of {{ messages.pages }}
70-
</div>
66+
<div class="px-6 py-4 bg-slate-50 dark:bg-slate-800/30 border-t border-slate-200 dark:border-slate-800 flex items-center justify-between">
67+
<span class="text-xs text-slate-500 font-medium">Page {{ messages.page }} of {{ messages.pages }}</span>
7168
<div class="flex gap-2">
7269
{% if messages.has_prev %}
73-
<a href="{{ url_for('contact.dashboard', page=messages.prev_num) }}" class="px-3 py-1 rounded-lg border border-slate-200 dark:border-slate-700 text-[10px] font-black uppercase tracking-widest hover:bg-white dark:hover:bg-slate-900 transition-all text-slate-600 dark:text-slate-300">Prev</a>
70+
<a href="{{ url_for('contact.dashboard', page=messages.prev_num) }}" class="px-3 py-1 rounded-md border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 text-xs font-bold text-slate-600 dark:text-slate-300 hover:bg-slate-50">Previous</a>
7471
{% endif %}
7572
{% if messages.has_next %}
76-
<a href="{{ url_for('contact.dashboard', page=messages.next_num) }}" class="px-3 py-1 rounded-lg border border-slate-200 dark:border-slate-700 text-[10px] font-black uppercase tracking-widest hover:bg-white dark:hover:bg-slate-900 transition-all text-slate-600 dark:text-slate-300">Next</a>
73+
<a href="{{ url_for('contact.dashboard', page=messages.next_num) }}" class="px-3 py-1 rounded-md border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 text-xs font-bold text-slate-600 dark:text-slate-300 hover:bg-slate-50">Next</a>
7774
{% endif %}
7875
</div>
7976
</div>
8077
{% endif %}
8178
</div>
8279

83-
<!-- Alpine Modal -->
84-
<div
85-
x-show="modalOpen"
86-
class="fixed inset-0 z-50 overflow-y-auto"
87-
x-cloak
88-
>
89-
<div class="flex items-center justify-center min-h-screen px-4 pt-4 pb-20 text-center sm:block sm:p-0">
90-
<!-- Overlay -->
91-
<div
92-
x-show="modalOpen"
93-
x-transition:enter="ease-out duration-300"
94-
x-transition:enter-start="opacity-0"
95-
x-transition:enter-end="opacity-100"
96-
x-transition:leave="ease-in duration-200"
97-
x-transition:leave-start="opacity-100"
98-
x-transition:leave-end="opacity-0"
99-
@click="modalOpen = false"
100-
class="fixed inset-0 transition-opacity bg-slate-950/60 backdrop-blur-sm"
101-
></div>
102-
103-
<!-- Modal Panel -->
104-
<div
105-
x-show="modalOpen"
106-
x-transition:enter="ease-out duration-300"
107-
x-transition:enter-start="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
108-
x-transition:enter-end="opacity-100 translate-y-0 sm:scale-100"
109-
x-transition:leave="ease-in duration-200"
110-
x-transition:leave-start="opacity-100 translate-y-0 sm:scale-100"
111-
x-transition:leave-end="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
112-
class="inline-block w-full max-w-xl p-8 my-8 overflow-hidden text-left align-middle transition-all transform bg-white dark:bg-slate-900 shadow-2xl rounded-3xl border border-slate-100 dark:border-slate-800"
113-
>
114-
<div class="flex justify-between items-start mb-6">
80+
<!-- Modal -->
81+
<template x-if="modalOpen">
82+
<div class="fixed inset-0 z-50 flex items-center justify-center p-4">
83+
<div class="absolute inset-0 bg-slate-900/60 backdrop-blur-sm" @click="modalOpen = false"></div>
84+
<div class="relative bg-white dark:bg-slate-900 w-full max-w-lg rounded-2xl shadow-2xl overflow-hidden border border-slate-200 dark:border-slate-800 animate-in zoom-in duration-200">
85+
<div class="p-6 border-b border-slate-100 dark:border-slate-800 flex justify-between items-start">
11586
<div>
116-
<h3 class="text-xl font-black text-slate-900 dark:text-white uppercase tracking-tight" x-text="selectedMessage?.name"></h3>
117-
<p class="text-[10px] font-bold text-primary uppercase tracking-widest mt-1" x-text="selectedMessage?.email"></p>
87+
<h3 class="text-lg font-bold text-slate-900 dark:text-white" x-text="selectedMessage.name"></h3>
88+
<p class="text-xs text-indigo-600 dark:text-indigo-400 font-medium" x-text="selectedMessage.email"></p>
11889
</div>
119-
<button @click="modalOpen = false" class="text-slate-400 hover:text-slate-600 dark:hover:text-white transition-colors">
90+
<button @click="modalOpen = false" class="text-slate-400 hover:text-slate-600 dark:hover:text-white">
12091
<i class="fas fa-times"></i>
12192
</button>
12293
</div>
123-
124-
<div class="bg-slate-50 dark:bg-slate-800/50 rounded-2xl p-6 border border-slate-100 dark:border-slate-700/50">
125-
<div class="text-sm text-slate-600 dark:text-slate-300 leading-relaxed whitespace-pre-wrap" x-html="selectedMessage?.content"></div>
94+
<div class="p-6 bg-slate-50/50 dark:bg-slate-800/20">
95+
<div class="text-sm text-slate-700 dark:text-slate-300 whitespace-pre-wrap leading-relaxed" x-text="selectedMessage.content"></div>
12696
</div>
127-
128-
<div class="mt-8 flex justify-end">
129-
<button @click="modalOpen = false" class="px-6 py-3 rounded-2xl bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 text-[10px] font-black uppercase tracking-[0.2em] hover:bg-slate-200 dark:hover:bg-slate-700 transition-all">
97+
<div class="p-4 bg-slate-50 dark:bg-slate-800/50 flex justify-end">
98+
<button @click="modalOpen = false" class="px-4 py-2 rounded-lg bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 text-xs font-bold text-slate-600 dark:text-slate-300 shadow-sm hover:bg-slate-50 transition-all">
13099
Close
131100
</button>
132101
</div>
133102
</div>
134103
</div>
135-
</div>
104+
</template>
136105
</div>
137106
{% endblock %}

0 commit comments

Comments
 (0)