Import current Voyager console

This commit is contained in:
2026-07-14 22:17:52 -04:00
commit 7795a1d8ad
10 changed files with 1509 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
async function loadConfig() {
const response = await fetch('config/services.json', { cache: 'no-store' });
if (!response.ok) throw new Error(`Config load failed: ${response.status}`);
return response.json();
}
function renderStatus(items) {
const grid = document.getElementById('status-grid');
grid.innerHTML = items.map(item => `
<article class="status-card">
<div class="status-top">
<span class="status-name">${item.name}</span>
<span class="status-state ${item.state}">
<span class="status-dot"></span>${item.label}
</span>
</div>
<div class="status-value">${item.value}</div>
<div class="status-detail">${item.detail}</div>
</article>
`).join('');
}
function renderServices(targetId, items, disabled = false) {
const grid = document.getElementById(targetId);
grid.innerHTML = items.map(item => {
const classes = `service-card${disabled ? ' disabled' : ''}`;
const tag = disabled ? 'div' : 'a';
const href = disabled ? '' : ` href="${item.url}"`;
return `
<${tag} class="${classes}"${href}>
<div class="service-icon">${item.icon}</div>
<h3>${item.name}</h3>
<p>${item.description}</p>
<div class="service-foot">
<span>${item.category}</span>
<span>${disabled ? 'Pending' : 'Open ↗'}</span>
</div>
</${tag}>
`;
}).join('');
}
loadConfig()
.then(config => {
renderStatus(config.status);
renderServices('service-grid', config.services);
renderServices('home-grid', config.home, true);
})
.catch(error => {
console.error(error);
document.getElementById('status-grid').innerHTML =
'<article class="status-card"><div class="status-name">Configuration</div><div class="status-value">Unavailable</div><div class="status-detail">Could not load services.json</div></article>';
});
+53
View File
@@ -0,0 +1,53 @@
async function loadConfig() {
const response = await fetch('config/services.json', { cache: 'no-store' });
if (!response.ok) throw new Error(`Config load failed: ${response.status}`);
return response.json();
}
function renderStatus(items) {
const grid = document.getElementById('status-grid');
grid.innerHTML = items.map(item => `
<article class="status-card">
<div class="status-top">
<span class="status-name">${item.name}</span>
<span class="status-state ${item.state}">
<span class="status-dot"></span>${item.label}
</span>
</div>
<div class="status-value">${item.value}</div>
<div class="status-detail">${item.detail}</div>
</article>
`).join('');
}
function renderServices(targetId, items, disabled = false) {
const grid = document.getElementById(targetId);
grid.innerHTML = items.map(item => {
const classes = `service-card${disabled ? ' disabled' : ''}`;
const tag = disabled ? 'div' : 'a';
const href = disabled ? '' : ` href="${item.url}"`;
return `
<${tag} class="${classes}"${href}>
<div class="service-icon">${item.icon}</div>
<h3>${item.name}</h3>
<p>${item.description}</p>
<div class="service-foot">
<span>${item.category}</span>
<span>${disabled ? 'Pending' : 'Open ↗'}</span>
</div>
</${tag}>
`;
}).join('');
}
loadConfig()
.then(config => {
renderStatus(config.status);
renderServices('service-grid', config.services);
renderServices('home-grid', config.home, true);
})
.catch(error => {
console.error(error);
document.getElementById('status-grid').innerHTML =
'<article class="status-card"><div class="status-name">Configuration</div><div class="status-value">Unavailable</div><div class="status-detail">Could not load services.json</div></article>';
});