Registrierung: Hundepassphrase-Generator (3 Wörter + Zahl, 60+ Hundewörter), SW by-v367
This commit is contained in:
parent
6064a1d750
commit
af4b1a4a55
2 changed files with 93 additions and 1 deletions
|
|
@ -9,6 +9,44 @@ window.Page_settings = (() => {
|
|||
let _appState = null;
|
||||
let _mode = 'login'; // 'login' | 'register'
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// HUNDEPASSPHRASE — sicheres Passwort aus Hundewelt
|
||||
// ----------------------------------------------------------
|
||||
const _PW_WOERTER = [
|
||||
// Rassen
|
||||
'Labrador','Pudel','Beagle','Husky','Dackel','Spitz','Mops','Boxer',
|
||||
'Collie','Setter','Pointer','Retriever','Shepherd','Terrier','Welpe',
|
||||
// Körper & Natur
|
||||
'Pfote','Schwanz','Schnauze','Schnurrbart','Fell','Nase','Ohr',
|
||||
// Aktivität
|
||||
'Gassi','Laufen','Bellen','Springen','Graben','Schnüffeln','Spielen',
|
||||
'Apportieren','Schwimmen','Hecheln','Wackeln','Toben',
|
||||
// Gegenstände
|
||||
'Leckerli','Leine','Halsband','Ball','Napf','Knochen','Frisbee',
|
||||
'Körbchen','Bürste','Leine','Stöckchen','Kauspielzeug',
|
||||
// Orte & Personen
|
||||
'Wiese','Wald','Park','Bach','Pfütze','Tierarzt','Züchter',
|
||||
// Eigenschaften
|
||||
'Treu','Tapfer','Mutig','Flauschig','Verspielt','Neugierig',
|
||||
'Wachsam','Flink','Sanft','Lieb',
|
||||
// Geräusche & Aktionen
|
||||
'Wuff','Jaulen','Schnuppern','Wedeln','Gähnen','Strecken',
|
||||
// Futter
|
||||
'Trockenfutter','Nassfutter','Kausnack','Futternapf',
|
||||
];
|
||||
|
||||
function _genPassphrase() {
|
||||
const pick = () => _PW_WOERTER[Math.floor(Math.random() * _PW_WOERTER.length)];
|
||||
const num = Math.floor(Math.random() * 90) + 10; // 2-stellig
|
||||
// 3 zufällige Wörter + Zahl, mit Bindestrich
|
||||
const words = [];
|
||||
while (words.length < 3) {
|
||||
const w = pick();
|
||||
if (!words.includes(w)) words.push(w);
|
||||
}
|
||||
return words.join('-') + '-' + num;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// INIT / REFRESH
|
||||
// ----------------------------------------------------------
|
||||
|
|
@ -749,6 +787,34 @@ window.Page_settings = (() => {
|
|||
<svg class="ph-icon" aria-hidden="true"><use href="/icons/phosphor.svg#eye"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<!-- Hundepassphrase-Generator -->
|
||||
<div id="pw-gen-box" style="margin-top:var(--space-2);padding:var(--space-3);
|
||||
background:var(--c-surface-2);border-radius:var(--radius-md);
|
||||
border-left:3px solid var(--c-primary)">
|
||||
<div style="display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)">
|
||||
<span style="font-size:var(--text-xs);font-weight:700;color:var(--c-text-secondary);
|
||||
text-transform:uppercase;letter-spacing:.05em">🐾 Passwort-Vorschlag</span>
|
||||
<button type="button" id="pw-gen-new"
|
||||
style="margin-left:auto;font-size:var(--text-xs);color:var(--c-primary);
|
||||
background:none;border:none;cursor:pointer;padding:0;font-weight:600">
|
||||
↺ neu
|
||||
</button>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:var(--space-2)">
|
||||
<code id="pw-gen-phrase"
|
||||
style="flex:1;font-size:var(--text-sm);font-weight:700;
|
||||
color:var(--c-text);letter-spacing:.02em;word-break:break-all"></code>
|
||||
<button type="button" id="pw-gen-use"
|
||||
style="flex-shrink:0;font-size:var(--text-xs);font-weight:600;
|
||||
padding:4px 10px;border-radius:var(--radius-md);
|
||||
background:var(--c-primary);color:#fff;border:none;cursor:pointer">
|
||||
Übernehmen
|
||||
</button>
|
||||
</div>
|
||||
<div style="font-size:10px;color:var(--c-text-muted);margin-top:var(--space-1)">
|
||||
Sichere Passphrase aus der Hundewelt — leicht zu merken, schwer zu knacken.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-full" style="margin-top:var(--space-2)">
|
||||
Konto erstellen
|
||||
|
|
@ -816,6 +882,32 @@ window.Page_settings = (() => {
|
|||
|
||||
function _bindRegisterForm() {
|
||||
_bindPwToggle('register-pw', 'register-pw-toggle');
|
||||
|
||||
// Hundepassphrase-Generator initialisieren
|
||||
const phraseEl = document.getElementById('pw-gen-phrase');
|
||||
const pwInput = document.getElementById('register-pw');
|
||||
if (phraseEl) {
|
||||
const _refresh = () => { phraseEl.textContent = _genPassphrase(); };
|
||||
_refresh();
|
||||
document.getElementById('pw-gen-new')?.addEventListener('click', _refresh);
|
||||
document.getElementById('pw-gen-use')?.addEventListener('click', () => {
|
||||
const phrase = phraseEl.textContent;
|
||||
pwInput.value = phrase;
|
||||
pwInput.type = 'text'; // sichtbar machen
|
||||
document.getElementById('register-pw-toggle')
|
||||
?.querySelector('use')
|
||||
?.setAttribute('href', '/icons/phosphor.svg#eye-slash');
|
||||
// kurzes visuelles Feedback
|
||||
const btn = document.getElementById('pw-gen-use');
|
||||
btn.textContent = '✓ Übernommen';
|
||||
btn.style.background = 'var(--c-success)';
|
||||
setTimeout(() => {
|
||||
btn.textContent = 'Übernehmen';
|
||||
btn.style.background = 'var(--c-primary)';
|
||||
}, 1500);
|
||||
});
|
||||
}
|
||||
|
||||
document.getElementById('auth-form')?.addEventListener('submit', async e => {
|
||||
e.preventDefault();
|
||||
const btn = e.target.querySelector('[type="submit"]');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue