Add recipe share links with configurable validity, public guest access, and revocation
This commit is contained in:
+991
-399
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||||
<title>Link nicht mehr gültig – Mein Kochbuch</title>
|
||||
<link rel="stylesheet" href="/static/cookbook.css?v=4.7.1">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>⏳</text></svg>">
|
||||
<style>
|
||||
.expired-page-wrapper {
|
||||
min-height: 80vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 24px 16px;
|
||||
}
|
||||
.expired-card {
|
||||
background: var(--creme, #faf6f0);
|
||||
border: 2.5px solid var(--schwarz, #2a2a2a);
|
||||
border-radius: 16px;
|
||||
box-shadow: 6px 6px 0px rgba(30, 77, 59, 0.4);
|
||||
max-width: 520px;
|
||||
width: 100%;
|
||||
padding: 36px 28px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
.expired-icon {
|
||||
font-size: 3.5rem;
|
||||
margin-bottom: 16px;
|
||||
display: inline-block;
|
||||
animation: float-gentle 3s ease-in-out infinite;
|
||||
}
|
||||
.expired-title {
|
||||
font-family: var(--font-hand, 'Caveat', cursive);
|
||||
font-size: 2.2rem;
|
||||
color: var(--tannengruen, #1e4d3b);
|
||||
margin: 0 0 14px 0;
|
||||
line-height: 1.2;
|
||||
}
|
||||
.expired-desc {
|
||||
font-size: 1.05rem;
|
||||
color: #4a4a4a;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.expired-meta-box {
|
||||
background: rgba(30, 77, 59, 0.07);
|
||||
border: 1.5px dashed var(--tannengruen, #1e4d3b);
|
||||
border-radius: 10px;
|
||||
padding: 12px 16px;
|
||||
font-size: 0.92rem;
|
||||
color: var(--tannengruen, #1e4d3b);
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
.expired-actions {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 12px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
@keyframes float-gentle {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-6px); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="cookbook-body">
|
||||
|
||||
<header class="cb-nav">
|
||||
<div class="cb-nav-brand">
|
||||
<span class="cb-brand-icon">📖</span>
|
||||
<h1 class="cb-nav-title">Mein Kochbuch</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="expired-page-wrapper">
|
||||
<div class="expired-card">
|
||||
<div class="expired-icon">
|
||||
{% if reason == 'revoked' %}🔒{% else %}⏳{% endif %}
|
||||
</div>
|
||||
|
||||
<h2 class="expired-title">
|
||||
{% if reason == 'revoked' %}
|
||||
Freigabe wurde deaktiviert
|
||||
{% elif reason == 'expired' %}
|
||||
Rezept-Link ist abgelaufen
|
||||
{% else %}
|
||||
Link nicht gefunden
|
||||
{% endif %}
|
||||
</h2>
|
||||
|
||||
<p class="expired-desc">
|
||||
{% if reason == 'revoked' %}
|
||||
Dieser Share-Link wurde vom Ersteller des Rezepts vorzeitig zurückgezogen.
|
||||
{% elif reason == 'expired' %}
|
||||
Die zeitliche Gültigkeit für diesen geteilten Rezept-Link ist leider abgelaufen. Bitte frage die Person, die das Rezept geteilt hat, nach einem neuen Link.
|
||||
{% else %}
|
||||
Der aufgerufene Share-Link ist ungültig oder existiert nicht mehr.
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
{% if share and share.expires_at_formatted and reason == 'expired' %}
|
||||
<div class="expired-meta-box">
|
||||
Ablaufzeitpunkt: <strong>{{ share.expires_at_formatted }} Uhr</strong>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="expired-actions">
|
||||
<a href="/login" class="cb-btn cb-btn-green">
|
||||
<span>📖</span> <span>Zum Kochbuch / Anmelden</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user