UI: move logout to top-right, hide header Admin link; add global 'Made by Ruslan' watermark with handwriting font; inject <title> from page name; move page overlay Admin button to top-right
This commit is contained in:
18
app.py
18
app.py
@@ -168,10 +168,26 @@ def create_app():
|
||||
abort(404)
|
||||
# Show a floating admin button for authenticated users, otherwise serve raw HTML
|
||||
html: str = row["html"]
|
||||
# Inject <title> tag for better page naming
|
||||
try:
|
||||
page_title = row["title"]
|
||||
except Exception:
|
||||
page_title = ""
|
||||
if page_title:
|
||||
lower = html.lower()
|
||||
if "</head>" in lower:
|
||||
i = lower.rfind("</head>")
|
||||
html = html[:i] + f"<title>{page_title}</title>" + html[i:]
|
||||
elif "<html" in lower:
|
||||
if "<body" in lower:
|
||||
j = lower.find("<body")
|
||||
html = html[:j] + f"<head><meta charset=\"utf-8\"><title>{page_title}</title></head>" + html[j:]
|
||||
else:
|
||||
html = f"<head><meta charset=\"utf-8\"><title>{page_title}</title></head>" + html
|
||||
if is_logged_in():
|
||||
admin_url = url_for("admin")
|
||||
toolbar = (
|
||||
'<div style="position:fixed;top:16px;left:16px;z-index:2147483647;">'
|
||||
'<div style="position:fixed;top:16px;right:16px;z-index:2147483647;">'
|
||||
f'<a href="{admin_url}" '
|
||||
'style="background:linear-gradient(135deg,#111,#333);color:#fff;padding:10px 14px;'
|
||||
'border-radius:10px;box-shadow:0 8px 20px rgba(0,0,0,0.25);'
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Pacifico&display=swap" rel="stylesheet">
|
||||
<title>{{ title or 'Админка' }}</title>
|
||||
<style>
|
||||
:root {
|
||||
@@ -34,7 +37,7 @@
|
||||
header {
|
||||
position: sticky; top: 0; z-index: 1000;
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
padding: 14px 18px 14px 140px; margin: 0 0 18px 0;
|
||||
padding: 14px 18px; margin: 0 0 18px 0;
|
||||
background: linear-gradient(180deg, rgba(18,24,37,.85), rgba(18,24,37,.65));
|
||||
backdrop-filter: saturate(1.2) blur(8px);
|
||||
border: 1px solid rgba(255,255,255,.06);
|
||||
@@ -42,7 +45,7 @@
|
||||
box-shadow: 0 10px 30px rgba(0,0,0,.35);
|
||||
}
|
||||
|
||||
header nav { position: absolute; top: 14px; left: 18px; }
|
||||
header nav { position: absolute; top: 14px; right: 18px; }
|
||||
|
||||
.card {
|
||||
background: var(--card);
|
||||
@@ -83,6 +86,15 @@
|
||||
tbody tr:hover { background: rgba(255,255,255,.02); }
|
||||
|
||||
nav a { margin-left: 10px; }
|
||||
/* Hide global Admin button in header; use page overlay instead */
|
||||
header nav a[href*="/admin"] { display: none !important; }
|
||||
/* Replace garbled logout text with a visible label */
|
||||
header nav form button.btn { position: relative; }
|
||||
header nav form button.btn::after { content: 'Выйти'; }
|
||||
|
||||
.watermark { position: fixed; bottom: 14px; right: 16px; z-index: 1000;
|
||||
font-family: 'Pacifico', cursive; font-size: 20px; color: rgba(255,255,255,.85);
|
||||
text-shadow: 0 2px 8px rgba(0,0,0,.35); user-select: none; pointer-events: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -111,5 +123,6 @@
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="watermark">Made by Ruslan</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user