diff --git a/public/home.js b/public/home.js index 72ffc2b9..2e589845 100644 --- a/public/home.js +++ b/public/home.js @@ -5,6 +5,7 @@ let searchTimeout = null; let miniMap = null; let searchAbort = null; // AbortController for document-level listeners + let _themeRefreshHandler = null; const PREF_KEY = 'meshcore-user-level'; const MY_NODES_KEY = 'meshcore-my-nodes'; // [{pubkey, name, addedAt}] @@ -31,9 +32,14 @@ function init(container) { if (!localStorage.getItem(PREF_KEY)) { showChooser(container); - return; + } else { + renderHome(container); } - renderHome(container); + _themeRefreshHandler = function() { + if (!localStorage.getItem(PREF_KEY)) showChooser(container); + else renderHome(container); + }; + window.addEventListener('theme-refresh', _themeRefreshHandler); } function showChooser(container) { @@ -237,6 +243,7 @@ clearTimeout(searchTimeout); if (searchAbort) { searchAbort.abort(); searchAbort = null; } if (miniMap) { miniMap.remove(); miniMap = null; } + if (_themeRefreshHandler) { window.removeEventListener('theme-refresh', _themeRefreshHandler); _themeRefreshHandler = null; } } // ==================== MY NODES DASHBOARD ==================== diff --git a/test-issue-1146-path-link-contrast-e2e.js b/test-issue-1146-path-link-contrast-e2e.js index 484efbf4..77a465fa 100644 --- a/test-issue-1146-path-link-contrast-e2e.js +++ b/test-issue-1146-path-link-contrast-e2e.js @@ -126,7 +126,14 @@ async function effectiveBgFor(page, selector) { }); await step('Path link contrast (#pathsContent a) ≥ 4.5:1 in dark mode', async () => { - const linkColor = await page.$eval('#pathsContent a[href^="#/nodes/"]', (el) => getComputedStyle(el).color); + // Use page.evaluate (single CDP call) so querySelector and getComputedStyle + // are atomic — page.$eval splits them across two calls, leaving a window + // where a concurrent re-render can detach the element before getComputedStyle + // runs, causing Chromium to return '' for color. + const linkColor = await page.evaluate(() => { + const el = document.querySelector('#pathsContent a[href^="#/nodes/"]'); + return el ? getComputedStyle(el).color : ''; + }); const bgColor = await effectiveBgFor(page, '#pathsContent a[href^="#/nodes/"]'); const fg = parseRgb(linkColor); const bg = parseRgb(bgColor);