From 2006b7a029452b408f2b2b04abbbd594990fd617 Mon Sep 17 00:00:00 2001 From: Hannes Hertach Date: Fri, 10 Jul 2026 19:35:42 +0200 Subject: [PATCH] fix(feedback): stop 404s from loadArea icon decorator Parse the feedback nav fragment directly instead of via loadFragment(). loadArea's generic icon decorator was greedily fetching S2_Icon_Bug and S2_Icon_Discord SVGs (which don't exist) for the .icon spans in the fragment; the menu block re-renders from the parsed items array, so loadArea's DOM decorations were discarded anyway. Co-Authored-By: Claude Sonnet 4.6 --- nx2/blocks/feedback/feedback.js | 12 ++++++++---- nx2/test/unit/nx/blocks/feedback/feedback.test.js | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/nx2/blocks/feedback/feedback.js b/nx2/blocks/feedback/feedback.js index aaa083764..e13520b1a 100644 --- a/nx2/blocks/feedback/feedback.js +++ b/nx2/blocks/feedback/feedback.js @@ -1,7 +1,6 @@ import { LitElement, html, nothing } from 'da-lit'; import { getConfig } from '../../scripts/nx.js'; import { loadStyle } from '../../utils/utils.js'; -import { loadFragment } from '../fragment/fragment.js'; import '../shared/menu/menu.js'; const { codeBase } = getConfig(); @@ -92,9 +91,14 @@ class NxFeedback extends LitElement { } async _loadItems() { - const fragment = await loadFragment(FEEDBACK_PATH); - if (!fragment) return; - this._items = parseFeedbackItems(fragment); + // Parse directly, not via loadFragment: loadArea's icon decorator 404s + // on nonexistent S2_Icon_* SVGs, and we discard its DOM work anyway. + const resp = await fetch(FEEDBACK_PATH); + if (!resp.ok) return; + const doc = new DOMParser().parseFromString(await resp.text(), 'text/html'); + const main = doc.querySelector('main'); + if (!main) return; + this._items = parseFeedbackItems(main); } _handleSelect({ detail: { id } }) { diff --git a/nx2/test/unit/nx/blocks/feedback/feedback.test.js b/nx2/test/unit/nx/blocks/feedback/feedback.test.js index a2f0751ac..0f9eaed56 100644 --- a/nx2/test/unit/nx/blocks/feedback/feedback.test.js +++ b/nx2/test/unit/nx/blocks/feedback/feedback.test.js @@ -1,10 +1,10 @@ import { expect } from '@esm-bundle/chai'; import { setConfig } from '../../../../../scripts/nx.js'; -// fragment.js (a transitive dependency of feedback.js) captures getConfig() -// into a module-level constant at import time, so setConfig() must resolve -// before feedback.js is ever imported — a static import would evaluate (and -// freeze that constant) before this file's own top-level code could run. +// feedback.js captures getConfig() into a module-level constant at import +// time (for ICON_HREF), so setConfig() must resolve before feedback.js is +// ever imported — a static import would evaluate (and freeze that constant) +// before this file's own top-level code could run. await setConfig({ hostnames: [] }); const { parseFeedbackItems } = await import('../../../../../blocks/feedback/feedback.js');