100 lines
3.6 KiB
Plaintext
100 lines
3.6 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>Asteroid Radio - Status</title>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="stylesheet" type="text/css" href="/asteroid/static/asteroid.css">
|
|
<script src="/asteroid/static/js/auth-ui.js"></script>
|
|
<script>
|
|
// Handle logout without navigation
|
|
function handleLogout() {
|
|
fetch('/asteroid/logout', {
|
|
method: 'GET',
|
|
redirect: 'manual'
|
|
})
|
|
.then(() => {
|
|
// Reload the current page content to show logged-out state
|
|
fetch(window.location.href)
|
|
.then(response => response.text())
|
|
.then(html => {
|
|
document.open();
|
|
document.write(html);
|
|
document.close();
|
|
});
|
|
})
|
|
.catch(error => {
|
|
console.error('Logout failed:', error);
|
|
});
|
|
}
|
|
|
|
// Load content via AJAX to prevent audio interruption
|
|
function loadInFrame(link) {
|
|
const url = link.href;
|
|
console.log('Loading via AJAX:', url);
|
|
|
|
// Clear all intervals to prevent old page scripts from running
|
|
const highestId = window.setTimeout(() => {}, 0);
|
|
for (let i = 0; i < highestId; i++) {
|
|
window.clearInterval(i);
|
|
window.clearTimeout(i);
|
|
}
|
|
|
|
fetch(url)
|
|
.then(response => response.text())
|
|
.then(html => {
|
|
document.open();
|
|
document.write(html);
|
|
document.close();
|
|
|
|
// Execute scripts in the new content
|
|
const scripts = document.querySelectorAll('script');
|
|
scripts.forEach(oldScript => {
|
|
const newScript = document.createElement('script');
|
|
if (oldScript.src) {
|
|
newScript.src = oldScript.src;
|
|
} else {
|
|
newScript.textContent = oldScript.textContent;
|
|
}
|
|
oldScript.parentNode.replaceChild(newScript, oldScript);
|
|
});
|
|
|
|
// Re-initialize spectrum analyzer after navigation
|
|
if (window.initializeSpectrumAnalyzer) {
|
|
setTimeout(() => window.initializeSpectrumAnalyzer(), 100);
|
|
}
|
|
|
|
if (window.history && window.history.pushState) {
|
|
window.history.pushState({}, '', url);
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error('Failed to load content:', error);
|
|
return true;
|
|
});
|
|
|
|
return false;
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<h1>📡 SYSTEM STATUS</h1>
|
|
<div class="nav">
|
|
<a href="/asteroid/content" target="content-frame" onclick="return loadInFrame(this)">Home</a>
|
|
<a href="/asteroid/player-content" target="content-frame" onclick="return loadInFrame(this)">Player</a>
|
|
<a href="/asteroid/profile-content" target="content-frame" data-show-if-logged-in onclick="return loadInFrame(this)">Profile</a>
|
|
<a href="/asteroid/admin-content" target="content-frame" data-show-if-admin onclick="return loadInFrame(this)">Admin</a>
|
|
<a href="/asteroid/login-content" target="content-frame" data-show-if-logged-out onclick="return loadInFrame(this)">Login</a>
|
|
<a href="/asteroid/logout" data-show-if-logged-in class="btn-logout" onclick="handleLogout(); return false;">Logout</a>
|
|
</div>
|
|
|
|
<div class="admin-section">
|
|
<h2>Server Status</h2>
|
|
<p>Status page coming soon...</p>
|
|
<p>For now, administrators can view detailed status information in the <a href="/asteroid/admin-content" target="content-frame" onclick="return loadInFrame(this)">Admin Dashboard</a>.</p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|