52 lines
1.5 KiB
HTML
52 lines
1.5 KiB
HTML
<!DOCTYPE html>
|
|||
|
|
<html lang="en">
|
||
|
|
<head>
|
||
|
|
<meta charset="UTF-8">
|
||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
|
<title>Version Control · Infosec</title>
|
||
|
|
<link rel="stylesheet" href="/css/style.css">
|
||
|
|
</head>
|
||
|
|
<body>
|
||
|
|
<script src="/js/app.js"></script>
|
||
|
|
<script>
|
||
|
|
(async () => {
|
||
|
|
const shell = await buildShell('version'); if (!shell) return;
|
||
|
|
const { isAdmin, content } = shell;
|
||
|
|
|
||
|
|
function entryHtml(e) {
|
||
|
|
return `
|
||
|
|
<div class="ver-item">
|
||
|
|
<div class="ver-head">
|
||
|
|
<span class="ver-tag">${esc(e.version)}</span>
|
||
|
|
${e.title ? `<span class="ver-title">${esc(e.title)}</span>` : ''}
|
||
|
|
${e.released_on ? `<span class="ver-date">${esc(fmtDate(e.released_on))}</span>` : ''}
|
||
|
|
</div>
|
||
|
|
${e.notes ? `<div class="ver-notes">${esc(e.notes)}</div>` : ''}
|
||
|
|
</div>`;
|
||
|
|
}
|
||
|
|
|
||
|
|
async function load() {
|
||
|
|
let entries = [];
|
||
|
|
try { entries = (await api('/api/versions')).entries; }
|
||
|
|
catch (e) { toast(e.message, 'err'); }
|
||
|
|
|
||
|
|
content.innerHTML = `
|
||
|
|
<div class="page-head">
|
||
|
|
<h1>Version Control for Infosec</h1>
|
||
|
|
<p>Release history for this system. Entries are managed in Data Management → Version Control.</p>
|
||
|
|
</div>
|
||
|
|
<div class="card">
|
||
|
|
<div class="card-body">
|
||
|
|
${entries.length
|
||
|
|
? `<div class="ver-list">${entries.map(entryHtml).join('')}</div>`
|
||
|
|
: `<div class="empty">${ICON.version}<div>No version entries have been published yet.</div></div>`}
|
||
|
|
</div>
|
||
|
|
</div>`;
|
||
|
|
}
|
||
|
|
|
||
|
|
load();
|
||
|
|
})();
|
||
|
|
</script>
|
||
|
|
</body>
|
||
|
|
</html>
|