tabs.js: final cookie scrub — 0 issue refs (#712 batch 14)
Final pass on tabs.js. All 6 remaining cookies were either attribution refs to closed issues / past reviews or pure-history mile-markers: - #259 disabled meta-update state → drop attribution - dashboard.rs#2170 backend handler line ref → drop the line number (handler still lives in dashboard.rs, line drifts) - mara on #695 M0V3 picker any-selection → drop attribution (substance already captured in docs/web-ui.md::Selection bar) - #541 journald scroll surface → drop the migration history framing, keep present-state behaviour - argus on #471 textContent vs innerHTML review → drop the review attribution, keep the safer-pattern rationale inline - #369 tab routing section header → drop the cookie, keep the section divider tabs.js: 6 → 0 issue-ref cookies (100% reduction). Across batches 1-14 (#712): 73 → 0 issue-ref cookies, with substantive prose (Topology tree CSS geometry, Container row icon layout, Pending-state derivation, Selection bar, R3BU1LD QU3U3 cancel + step annotations, Approval card requested-at, SSE multiplexing worker-death self-heal, FL0W page MESS4GE FL0W body layout) migrated to docs/web-ui.md across the batches. dashboard SPA files all at 0 cookies now (PR #795 covers the other dashboard files; this PR covers the tabs.js residual).
This commit is contained in:
parent
0ef79b8032
commit
b15c534e67
1 changed files with 13 additions and 16 deletions
|
|
@ -178,7 +178,7 @@ window.marked = marked;
|
||||||
// agent rebuild ripple) runs in the background. Cold-loaded from
|
// agent rebuild ripple) runs in the background. Cold-loaded from
|
||||||
// `s.meta_update_running`, then flipped live by the
|
// `s.meta_update_running`, then flipped live by the
|
||||||
// `meta_update_running` event. Drives the META INPUTS panel's
|
// `meta_update_running` event. Drives the META INPUTS panel's
|
||||||
// disabled "updating…" state (issue #259).
|
// disabled "updating…" state.
|
||||||
let metaUpdateRunning = false;
|
let metaUpdateRunning = false;
|
||||||
function syncTombstonesFromSnapshot(s) {
|
function syncTombstonesFromSnapshot(s) {
|
||||||
tombstonesState = (s.tombstones || []).slice();
|
tombstonesState = (s.tombstones || []).slice();
|
||||||
|
|
@ -802,7 +802,7 @@ window.marked = marked;
|
||||||
// and own descendants on the client side; the
|
// and own descendants on the client side; the
|
||||||
// backend rechecks via `topology::set_parent`).
|
// backend rechecks via `topology::set_parent`).
|
||||||
//
|
//
|
||||||
// Backend lives at POST /api/topology/set-parent (dashboard.rs#2170),
|
// Backend lives at POST /api/topology/set-parent (dashboard.rs),
|
||||||
// form-encoded `child=<name>&new_parent=<target-or-empty>`. The
|
// form-encoded `child=<name>&new_parent=<target-or-empty>`. The
|
||||||
// backend re-emits container snapshots on success, so the tree
|
// backend re-emits container snapshots on success, so the tree
|
||||||
// repaints without a separate refresh.
|
// repaints without a separate refresh.
|
||||||
|
|
@ -830,11 +830,10 @@ window.marked = marked;
|
||||||
});
|
});
|
||||||
|
|
||||||
// M0V3 → <pick>: inline `<select>` of candidate parents + submit
|
// M0V3 → <pick>: inline `<select>` of candidate parents + submit
|
||||||
// button. Available for any selection size (mara on #695 — was
|
// button. Available for any selection size. Picker omits each
|
||||||
// single-agent only in v1). Picker omits each selected agent itself
|
// selected agent itself plus the union of every selected agent's
|
||||||
// plus the union of every selected agent's descendants (cycle-safe;
|
// descendants (cycle-safe; backend `topology::set_parent`
|
||||||
// backend `topology::set_parent` re-checks). Empty candidate list ⇒
|
// re-checks). Empty candidate list ⇒ disable the picker.
|
||||||
// disable the picker.
|
|
||||||
const candidates = validReparentCandidates(selected, containers);
|
const candidates = validReparentCandidates(selected, containers);
|
||||||
const wrap = el('span', { class: 'move-picker' });
|
const wrap = el('span', { class: 'move-picker' });
|
||||||
const selectTitle = selected.length === 1
|
const selectTitle = selected.length === 1
|
||||||
|
|
@ -1033,11 +1032,9 @@ window.marked = marked;
|
||||||
pre.textContent = 'error: ' + resp.status + '\n' + text;
|
pre.textContent = 'error: ' + resp.status + '\n' + text;
|
||||||
} else {
|
} else {
|
||||||
pre.textContent = text || '(empty)';
|
pre.textContent = text || '(empty)';
|
||||||
// Auto-scroll to the newest lines on fresh fetch. #541
|
// Auto-scroll to the newest lines on fresh fetch. The
|
||||||
// moved the scroll surface from side-panel-body onto the
|
// scroll surface is the <pre> itself (panel-body fills
|
||||||
// <pre> itself (the panel-body now fills the viewport and
|
// the viewport, <pre> is the inner overflow container).
|
||||||
// the <pre> is the inner overflow container), so scroll
|
|
||||||
// the <pre> instead of the side-panel-body.
|
|
||||||
pre.scrollTop = pre.scrollHeight;
|
pre.scrollTop = pre.scrollHeight;
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
@ -2946,9 +2943,9 @@ window.marked = marked;
|
||||||
if (!confirm(prompt)) return;
|
if (!confirm(prompt)) return;
|
||||||
// Capture child nodes so we can restore on error, then replace
|
// Capture child nodes so we can restore on error, then replace
|
||||||
// with DOM-built content (textContent + element children rather
|
// with DOM-built content (textContent + element children rather
|
||||||
// than innerHTML — per argus's review note on #471, the format
|
// than innerHTML — the format string only carries server-side
|
||||||
// string only carries server-side ints/bool today but textContent
|
// ints/bool today but textContent is the safer pattern if a
|
||||||
// is the safer pattern if a stringy field ever lands).
|
// stringy field ever lands).
|
||||||
const originalChildren = btn ? Array.from(btn.childNodes) : [];
|
const originalChildren = btn ? Array.from(btn.childNodes) : [];
|
||||||
const restoreBtn = () => {
|
const restoreBtn = () => {
|
||||||
if (!btn) return;
|
if (!btn) return;
|
||||||
|
|
@ -3206,7 +3203,7 @@ window.marked = marked;
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
// ─── tab routing (#369) ────────────────────────────────────────────────
|
// ─── tab routing ───────────────────────────────────────────────────────
|
||||||
// Hash-based: `#swarm` / `#call` / `#system` activate the matching
|
// Hash-based: `#swarm` / `#call` / `#system` activate the matching
|
||||||
// pane on the dashboard. Empty hash defaults to SW4RM. FL0W is NOT
|
// pane on the dashboard. Empty hash defaults to SW4RM. FL0W is NOT
|
||||||
// a tab — it's a separate page (`/flow.html`) reached via the
|
// a tab — it's a separate page (`/flow.html`) reached via the
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue