feat: Add invite token-based user registration and an admin interface for token management.

This commit is contained in:
x
2026-01-24 16:01:40 +01:00
parent 1b1867332b
commit 16da3ac9d0
8 changed files with 298 additions and 5 deletions

View File

@@ -2204,7 +2204,7 @@ body[type='login'] {
align-items: center;
padding: 20px 20px;
background: rgba(0, 0, 0, 0.8);
border-radius: 10px;
border-radius: 0;
border: 1px solid var(--accent);
}
@@ -3365,7 +3365,8 @@ input#s_avatar {
}
/* Login Modal */
#login-modal {
#login-modal,
#register-modal {
position: fixed;
top: 0;
left: 0;
@@ -3437,7 +3438,8 @@ input#s_avatar {
filter: brightness(1.1);
}
#login-modal-close {
#login-modal-close,
#register-modal-close {
position: absolute;
top: 10px;
right: 15px;
@@ -3449,7 +3451,8 @@ input#s_avatar {
opacity: 0.7;
}
#login-modal-close:hover {
#login-modal-close:hover,
#register-modal-close:hover {
opacity: 1;
color: var(--accent);
}

View File

@@ -71,6 +71,38 @@ window.requestAnimFrame = (function () {
});
}
// Register Modal Logic
const registerBtn = document.getElementById('nav-register-btn');
const registerModal = document.getElementById('register-modal');
const registerClose = document.getElementById('register-modal-close');
if (registerBtn && registerModal) {
registerBtn.addEventListener('click', (e) => {
e.preventDefault();
registerModal.style.display = 'flex';
// Close dropdown
if (visitorMenu) visitorMenu.classList.remove('show');
});
if (registerClose) {
registerClose.addEventListener('click', () => {
registerModal.style.display = 'none';
});
}
registerModal.addEventListener('click', (e) => {
if (e.target === registerModal) {
registerModal.style.display = 'none';
}
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && registerModal.style.display === 'flex') {
registerModal.style.display = 'none';
}
});
}
// Initialize background preference
if (localStorage.getItem('background') == undefined) {
localStorage.setItem('background', 'true');