W12 family names keep their accents, login made without them; W9 banner link colour; W10 recovery-code page one plain line; W11/W24 remote page hides provider login and key fields behind Haladó; unreleased
gates / gates (push) Successful in 1m33s

This commit is contained in:
2026-10-21 22:35:24 +02:00
parent 37b79caad9
commit 8c1e290f63
33 changed files with 1278 additions and 93 deletions
@@ -504,25 +504,31 @@ function openDialog(opts){
<div id="family-list" class="settings-grid"></div>
<p id="family-none" class="form-hint" style="display:none">Még nincs családtag.</p>
<div id="family-pw" class="alert alert-info" style="display:none">
A jelszó csak most látszik. Írd fel, vagy add át a családtagnak: <strong id="family-pw-name"></strong> — <span id="family-pw-value" class="mono"></span>
A jelszó csak most látszik. Írd fel, vagy add át a családtagnak: belépési név: <strong id="family-pw-name" class="mono"></strong> — <span id="family-pw-value" class="mono"></span>
</div>
<form id="family-add" class="inline-form" onsubmit="familyAct(event, 'add', document.getElementById('family-new').value)">
<input type="text" id="family-new" class="form-control" placeholder="pl. anna" autocapitalize="none" required>
<input type="text" id="family-new" class="form-control" placeholder="pl. Ödön" required>
<button type="submit" class="btn btn-sm btn-primary">Családtag hozzáadása</button>
</form>
<p class="form-hint">Írd be a nevet úgy, ahogy szeretnéd, ékezettel is. A belépési név ebből készül: ékezet nélkül, kisbetűvel. A listában látod.</p>
<span id="family-err" class="form-hint" style="display:none;color:var(--red)"></span>
</div>
<script>
(function () {
var T = {reset: 'Új jelszó', remove: 'Eltávolítás',
var T = {reset: 'Új jelszó', remove: 'Eltávolítás', login: 'belépési név:',
cReset: 'Új jelszót adsz? A régi azonnal megszűnik.', cRemove: 'Eltávolítod? A belépései azonnal megszűnnek.', err: 'Nem sikerült. Próbáld újra.'};
function render(members) {
var list = document.getElementById('family-list');
list.textContent = '';
document.getElementById('family-none').style.display = members.length ? 'none' : '';
members.forEach(function (n) {
members.forEach(function (p) {
var n = p.login;
var row = document.createElement('div'); row.className = 'settings-row'; row.setAttribute('data-family-member', n);
var label = document.createElement('span'); label.className = 'settings-label mono'; label.textContent = n;
var label = document.createElement('span'); label.className = 'settings-label'; label.textContent = p.display;
var login = document.createElement('span'); login.className = 'form-hint'; login.textContent = ' ' + T.login + ' ';
var code = document.createElement('span'); code.className = 'mono'; code.textContent = n;
login.appendChild(code); label.appendChild(login);
var val = document.createElement('span'); val.className = 'settings-value';
[['reset', T.reset, T.cReset, 'btn-outline'], ['remove', T.remove, T.cRemove, 'btn-danger']].forEach(function (a) {
var b = document.createElement('button'); b.type = 'button'; b.className = 'btn btn-xs ' + a[3]; b.textContent = a[1];
@@ -540,7 +546,7 @@ function openDialog(opts){
headers: {'X-CSRF-Token': 'tok', 'Content-Type': 'application/x-www-form-urlencoded'}, body: body})
.then(function (r) { return r.json(); }).then(function (j) {
if (!j.ok) { err.textContent = j.error || T.err; err.style.display = 'inline'; return; }
render(j.data.members || []);
render(j.data.people || []);
var box = document.getElementById('family-pw');
if (j.data.password) {
document.getElementById('family-pw-name').textContent = j.data.name;
@@ -551,7 +557,7 @@ function openDialog(opts){
}).catch(function () { err.textContent = T.err; err.style.display = 'inline'; });
};
fetch('/family/members', {credentials: 'same-origin'}).then(function (r) { return r.json(); })
.then(function (j) { if (j.ok) render(j.data.members || []); });
.then(function (j) { if (j.ok) render(j.data.people || []); });
})();
</script>