source: Klonkt/src/views/pages/auth-login.ejs@ 49f698b

main
Last change on this file since 49f698b was 4885eab, checked in by roboburr <roboburr@…>, 3 months ago

feat(i18n phase 6): remaining public + other pages translated (NL/EN/DE)

post-edit, account, newsletter, download, press kit /pers, fan-gate, link-in-bio,
my-site, password-reset (2), artists directory, auth-login Google error map,
user/hub-home/circle-feed+post/viewer-blocked/home/favourites/changelog/404/
type/tag/archive/prutter (inbox+conversation). embed-player skipped (no t
in that standalone route). 1026 view-keys cross-checked → 0 missing.

Co-Authored-By: Claude <noreply@…>

  • Property mode set to 100644
File size: 5.6 KB
RevLine 
[f4b7b6a]1<%
2 // adminLogin = de verborgen beheerders-loginpagina (/auth/admin): toont het
3 // gebruikersnaam/wachtwoord-formulier. De publieke /auth/login toont voor
4 // bezoekers ALLEEN Google-login (luisteraars/fans). Zo staat de admin-login
5 // niet zichtbaar op de plek waar bezoekers heen gestuurd worden.
6 var _admin = (typeof adminLogin !== 'undefined' && adminLogin);
7%>
[7bc636b]8<div class="container auth-page">
[137cca5]9 <h1><%= _admin ? t('auth.admin_login_title') : t('nav.login') %></h1>
[9e27d64]10 <% if (typeof success !== 'undefined' && success) { %><div class="alert alert-success"><%= success %></div><% } %>
[b919a67]11 <%
12 var GMAP = {
[4885eab]13 admin: { icon: '🔐', title: t('glog.admin_title'),
14 body: t('glog.admin_body'),
15 list: [t('glog.admin_li1'), t('glog.admin_li2'), t('glog.admin_li3')] },
16 session: { icon: '⏱️', title: t('glog.session_title'), body: t('glog.session_body') },
17 email: { icon: '✉️', title: t('glog.email_title'), body: t('glog.email_body') },
18 linked: { icon: '🔗', title: t('glog.linked_title'), body: t('glog.linked_body') },
19 unavailable: { icon: '🚫', title: t('glog.unavailable_title'), body: t('glog.unavailable_body') },
20 failed: { icon: '⚠️', title: t('glog.failed_title'), body: t('glog.failed_body') },
[b919a67]21 };
22 var _g = (typeof gerr !== 'undefined' && gerr && GMAP[gerr]) ? GMAP[gerr] : null;
23 %>
24 <% if (_g) { %>
[70679063]25 <div class="auth-notice">
[b919a67]26 <div class="auth-notice-icon"><%= _g.icon %></div>
27 <h2 class="auth-notice-title"><%= _g.title %></h2>
28 <p><%= _g.body %></p>
29 <% if (_g.list) { %><ul class="auth-notice-list"><% _g.list.forEach(function(li){ %><li><%- li %></li><% }); %></ul><% } %>
[70679063]30 </div>
31 <% } else if (error) { %><div class="alert alert-error"><%= error %></div><% } %>
[c80e78b]32
[f4b7b6a]33 <% if (_admin) { %>
34 <%# Verborgen beheerders-login (wachtwoord). %>
35 <form method="post" action="/auth/login" class="auth-form">
36 <% if (typeof next !== 'undefined' && next) { %>
37 <input type="hidden" name="next" value="<%= next %>">
38 <% } %>
39 <label>
[137cca5]40 <span><%= t('auth.username_or_email') %></span>
[f4b7b6a]41 <input type="text" name="username" value="<%= username %>" required autofocus autocomplete="username">
42 </label>
43 <label>
[137cca5]44 <span><%= t('auth.password') %></span>
[f4b7b6a]45 <input type="password" name="password" required autocomplete="current-password">
46 </label>
[137cca5]47 <button type="submit" class="btn btn-primary"><%= t('nav.login') %></button>
48 <p class="auth-link auth-link-muted"><a href="/auth/reset-request"><%= t('auth.forgot') %></a></p>
[f4b7b6a]49 </form>
50 <% } else if (googleReady) { %>
51 <%# Publieke login: alleen Google, voor luisteraars/fans. %>
[137cca5]52 <p class="auth-sub"><%= t('auth.public_sub') %></p>
[9e27d64]53 <a class="btn btn-google" href="/auth/google<%= (typeof next !== 'undefined' && next) ? '?next=' + encodeURIComponent(next) : '' %>">
54 <svg class="g-icon" width="18" height="18" viewBox="0 0 18 18" aria-hidden="true">
55 <path fill="#4285F4" d="M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.92c1.7-1.57 2.68-3.88 2.68-6.62z"/>
56 <path fill="#34A853" d="M9 18c2.43 0 4.47-.8 5.96-2.18l-2.92-2.26c-.8.54-1.84.86-3.04.86-2.34 0-4.32-1.58-5.03-3.7H.96v2.33A9 9 0 0 0 9 18z"/>
57 <path fill="#FBBC05" d="M3.97 10.72a5.4 5.4 0 0 1 0-3.44V4.95H.96a9 9 0 0 0 0 8.1l3.01-2.33z"/>
58 <path fill="#EA4335" d="M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58A9 9 0 0 0 .96 4.95l3.01 2.33C4.68 5.16 6.66 3.58 9 3.58z"/>
59 </svg>
[137cca5]60 <span><%= t('auth.google_btn') %></span>
[9e27d64]61 </a>
[f4b7b6a]62 <% } else { %>
[137cca5]63 <div class="alert"><%= t('auth.google_unavail') %></div>
[9e27d64]64 <% } %>
[77b6fca]65
66 <% if (!_admin) { %>
67 <%# Klikbare box voor de beheerder → naar de verborgen wachtwoord-login. %>
68 <a class="auth-admin-box" href="/auth/admin<%= (typeof next !== 'undefined' && next) ? '?next=' + encodeURIComponent(next) : '' %>">
69 <span class="auth-admin-box-icon" aria-hidden="true">🔑</span>
70 <span class="auth-admin-box-text">
[137cca5]71 <strong><%= t('auth.admin_box_q') %></strong>
72 <small><%= t('auth.admin_box_sub') %></small>
[77b6fca]73 </span>
74 <span class="auth-admin-box-arrow" aria-hidden="true">&rarr;</span>
75 </a>
76 <% } %>
[7bc636b]77</div>
[70679063]78
79<style>
80 .auth-notice { border: 1px solid rgba(128,128,128,.28); border-radius: 14px; padding: 18px 20px; margin-bottom: 18px; background: rgba(128,128,128,.06); }
81 .auth-notice-icon { font-size: 26px; }
82 .auth-notice-title { font-size: 17px; margin: 4px 0 8px; }
83 .auth-notice p { margin: 0 0 10px; line-height: 1.55; opacity: .9; }
84 .auth-notice-list { margin: 0; padding-left: 18px; line-height: 1.6; }
85 .auth-notice-list li { margin: 4px 0; }
[3fb8390]86 .auth-sub { color: var(--ink-muted); margin: 0 0 1rem; text-align: center; }
[36afccd]87 /* Google-knop is wit → tekst altijd donker houden, ook op hover (de globale
88 a.btn:hover-regel maakt 'm anders bijna-wit op wit = onleesbaar). */
89 a.btn-google, a.btn-google:hover { color: #1f1f1f; }
[77b6fca]90 .auth-admin-box {
91 display: flex; align-items: center; gap: .75rem;
92 margin-top: 1.25rem; padding: .8rem 1rem;
93 border: 1px solid var(--rule); border-radius: 12px;
94 background: var(--paper-2); color: var(--ink); text-decoration: none;
95 transition: border-color 120ms, background 120ms;
96 }
97 .auth-admin-box:hover { border-color: var(--accent); background: var(--paper); }
98 .auth-admin-box-icon { font-size: 1.3rem; }
99 .auth-admin-box-text { display: flex; flex-direction: column; line-height: 1.3; flex: 1; }
100 .auth-admin-box-text small { color: var(--ink-muted); font-size: .8rem; }
101 .auth-admin-box-arrow { color: var(--ink-muted); font-size: 1.1rem; }
[70679063]102</style>
Note: See TracBrowser for help on using the repository browser.