fix(master): review fixes for the Ledger UI (#18)
- icons/gen writes to the current directory so `go generate ./internal/master/web/icons` works (output verified byte-identical) - share the registry-host check as imageref.IsRegistryHost (with test) - agents fragment refreshes the "N machines" header count out of band - ignore the saved machine filter at <=760px where the machine list is hidden - aria-current on the active machine filter link, aria-pressed on theme toggle - CLAUDE.md: icons package, SSE ping event, swarm_cluster_id Claude-Session: https://claude.ai/code/session_01GAZsp3P7Qto6JnhipxWUJQ
This commit is contained in:
@@ -24,8 +24,10 @@
|
||||
themeButton.addEventListener('click', function () {
|
||||
var light = !root.classList.contains('t-light');
|
||||
root.classList.toggle('t-light', light);
|
||||
themeButton.setAttribute('aria-pressed', String(light));
|
||||
save('localStorage', 'pu-theme', light ? 'light' : 'dark');
|
||||
});
|
||||
themeButton.setAttribute('aria-pressed', String(root.classList.contains('t-light')));
|
||||
}
|
||||
if (colorScheme && colorScheme.addEventListener) {
|
||||
colorScheme.addEventListener('change', function (e) {
|
||||
@@ -50,16 +52,21 @@
|
||||
var search = document.getElementById('q');
|
||||
if (search) search.value = filter.q;
|
||||
|
||||
// The machine list is hidden on narrow screens; a filter that cannot be
|
||||
// seen or cleared there is ignored. Search still applies.
|
||||
var narrow = window.matchMedia ? window.matchMedia('(max-width:760px)') : null;
|
||||
|
||||
function applyFilter() {
|
||||
var box = document.getElementById('services');
|
||||
if (!box) return;
|
||||
var groups = box.querySelectorAll('.grp');
|
||||
var known = Array.prototype.some.call(groups, function (g) { return g.dataset.key === filter.machine; });
|
||||
if (filter.machine && !known) filter.machine = '';
|
||||
var machine = narrow && narrow.matches ? '' : filter.machine;
|
||||
var q = filter.q.trim().toLowerCase();
|
||||
var any = false;
|
||||
Array.prototype.forEach.call(groups, function (g) {
|
||||
var inMachine = !filter.machine || g.dataset.key === filter.machine;
|
||||
var inMachine = !machine || g.dataset.key === machine;
|
||||
var shown = 0;
|
||||
Array.prototype.forEach.call(g.querySelectorAll('.row'), function (row) {
|
||||
var match = inMachine && (!q || (row.dataset.search || '').indexOf(q) !== -1);
|
||||
@@ -71,8 +78,13 @@
|
||||
});
|
||||
var none = document.getElementById('nomatch');
|
||||
if (none) none.hidden = any || groups.length === 0;
|
||||
each('#machines a', function (a) { a.classList.toggle('cur', a.dataset.machine === filter.machine); });
|
||||
each('#machines a', function (a) {
|
||||
var cur = a.dataset.machine === filter.machine;
|
||||
a.classList.toggle('cur', cur);
|
||||
if (cur) a.setAttribute('aria-current', 'true'); else a.removeAttribute('aria-current');
|
||||
});
|
||||
}
|
||||
if (narrow && narrow.addEventListener) narrow.addEventListener('change', function () { applyFilter(); });
|
||||
function saveFilter() { save('sessionStorage', 'pu-filter', JSON.stringify(filter)); }
|
||||
|
||||
if (search) {
|
||||
|
||||
Reference in New Issue
Block a user