// settings.js — extracted from settings.html
// Data injected via window.__DATA__
// Active sidebar link on scroll
(function() {
var sections = document.querySelectorAll('.card[id]');
var links = document.querySelectorAll('.settings-sidebar a[href^="#"]');
if (!sections.length || !links.length) return;
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
links.forEach(function(link) {
link.classList.remove('active');
if (link.getAttribute('href') === '#' + entry.target.id) {
link.classList.add('active');
}
});
}
});
}, { rootMargin: '-20% 0px -60% 0px' });
sections.forEach(function(section) { observer.observe(section); });
// Smooth scroll on sidebar click
links.forEach(function(link) {
link.addEventListener('click', function(e) {
var target = document.querySelector(this.getAttribute('href'));
if (target) {
e.preventDefault();
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
});
});
// Magic login toggle — AJAX with optimistic UI
var toggle = document.getElementById('magicLoginToggle');
if (toggle) {
toggle.addEventListener('change', function() {
var targetState = this.checked;
fetch('/settings/security/magic-login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ enabled: targetState })
}).then(function(r) { return r.json(); }).then(function(data) {
if (data.status !== 'ok') {
// Revert on failure
toggle.checked = !targetState;
alert('Failed to update magic login preference.');
}
}).catch(function() {
toggle.checked = !targetState;
alert('Failed to update magic login preference.');
});
});
}
})();