Name update
This commit is contained in:
@@ -281,8 +281,7 @@ label.check input { accent-color: var(--accent); }
|
||||
|
||||
/* ── Imaging progress widget ───────────────────────────────────────
|
||||
Animated brand mark paired with a horizontal progress bar; surfaces
|
||||
on Dashboard and the Queue tab. Renamed from `.forge-progress` in
|
||||
v0.3.0 — the anvil-themed naming is gone with the rebrand. */
|
||||
on Dashboard and the Queue tab. */
|
||||
.queue-progress {
|
||||
display: flex; align-items: center; gap: 16px;
|
||||
padding: 16px;
|
||||
@@ -380,7 +379,7 @@ tr.unbootable td:first-child { border-left: 3px solid var(--warn); }
|
||||
.form-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px 14px; }
|
||||
@media (max-width: 900px) { .form-row { grid-template-columns: 1fr; } }
|
||||
|
||||
/* ── Gate queue "horse race" visual ──────────────────────────────── */
|
||||
/* ── Queued deployment visual ────────────────────────────────────── */
|
||||
.queue-track {
|
||||
display: grid; gap: 6px;
|
||||
padding: 10px 0;
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
return el('div', {class:'grid'}, [networkCard]);
|
||||
},
|
||||
|
||||
gate: async () => {
|
||||
queue: async () => {
|
||||
const [{ entries = [] }, isos] = await Promise.all([
|
||||
getJSON('/api/queue'), getJSON('/api/isos'),
|
||||
]);
|
||||
@@ -267,7 +267,7 @@
|
||||
if (!j.ok) { msg.textContent = 'Assign failed: ' + (j.error || 'unknown'); msg.className='msg err'; return; }
|
||||
msg.textContent = 'Launched ' + j.assigned + ' client' + (j.assigned===1?'':'s') + ' → ' + j.target;
|
||||
msg.className = 'msg ok';
|
||||
render('gate');
|
||||
render('queue');
|
||||
};
|
||||
|
||||
const track = entries.length
|
||||
@@ -284,12 +284,12 @@
|
||||
: el('span', {class:'tag accent'}, 'waiting')),
|
||||
el('button', {class:'ghost', onclick: async () => {
|
||||
await fetch('/api/queue/' + encodeURIComponent(g.id), {method:'DELETE'});
|
||||
render('gate');
|
||||
render('queue');
|
||||
}}, 'Release'),
|
||||
]))
|
||||
)
|
||||
: el('div', {class:'empty'},
|
||||
'No clients at the gate. Boot a client and choose "Queued Deployment" in the PXE menu.');
|
||||
'No clients queued. Boot a client and choose "Queued Deployment" in the PXE menu.');
|
||||
|
||||
const imaging = entries.filter(g => g.assigned_target).length;
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
queueProgressWidget(imaging, entries.length),
|
||||
]),
|
||||
el('div', {class:'card'}, [
|
||||
el('header', {}, el('h2', {}, 'Launch an image across the gate')),
|
||||
el('header', {}, el('h2', {}, 'Launch image for queued clients')),
|
||||
el('div', {class:'body'}, [
|
||||
el('label', {class:'field'}, [
|
||||
el('span', {class:'name'}, 'Target image'),
|
||||
@@ -312,7 +312,7 @@
|
||||
]),
|
||||
el('div', {class:'card'}, [
|
||||
el('header', {}, [
|
||||
el('h2', {}, 'Gate positions'),
|
||||
el('h2', {}, 'Queue positions'),
|
||||
el('span', {class:'sub'}, entries.length + ' waiting'),
|
||||
]),
|
||||
el('div', {class:'body'}, track),
|
||||
@@ -854,7 +854,7 @@
|
||||
const viewTitles = {
|
||||
dashboard: 'Dashboard',
|
||||
network: 'Network',
|
||||
gate: 'Queue',
|
||||
queue: 'Queue',
|
||||
storage: 'Storage',
|
||||
hosts: 'Hosts',
|
||||
terminal: 'Terminal',
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<img src="/assets/logo.svg" alt="" />
|
||||
<div>
|
||||
<strong>OpenPXE</strong>
|
||||
<div class="sub">v<span data-bind="version">0.3.1</span></div>
|
||||
<div class="sub">v<span data-bind="version">0.3.2</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<nav>
|
||||
|
||||
+17
-9
@@ -15,22 +15,30 @@ pub fn index_html(base_url: &str) -> String {
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn app_js() -> &'static str { APP_JS }
|
||||
pub fn app_js() -> &'static str {
|
||||
APP_JS
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn app_css() -> &'static str { APP_CSS }
|
||||
pub fn app_css() -> &'static str {
|
||||
APP_CSS
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn logo_svg() -> &'static str { LOGO_SVG }
|
||||
pub fn logo_svg() -> &'static str {
|
||||
LOGO_SVG
|
||||
}
|
||||
|
||||
/// Larger, faster-cycling rainbow disc — used for the page-load
|
||||
/// transition and the imaging-progress widget on Dashboard / Queue.
|
||||
/// Pure SVG + SMIL, no JS, no GIF.
|
||||
#[must_use]
|
||||
pub fn loader_svg() -> &'static str { LOADER_SVG }
|
||||
pub fn loader_svg() -> &'static str {
|
||||
LOADER_SVG
|
||||
}
|
||||
|
||||
const INDEX_HTML: &str = include_str!("index.html");
|
||||
const APP_CSS: &str = include_str!("app.css");
|
||||
const APP_JS: &str = include_str!("app.js");
|
||||
const LOGO_SVG: &str = include_str!("logo.svg");
|
||||
const LOADER_SVG: &str = include_str!("loader.svg");
|
||||
const INDEX_HTML: &str = include_str!("index.html");
|
||||
const APP_CSS: &str = include_str!("app.css");
|
||||
const APP_JS: &str = include_str!("app.js");
|
||||
const LOGO_SVG: &str = include_str!("logo.svg");
|
||||
const LOADER_SVG: &str = include_str!("loader.svg");
|
||||
|
||||
Reference in New Issue
Block a user