From 47b614f8b494e45fb115da6b95fc7ddaabfdf694 Mon Sep 17 00:00:00 2001 From: librelad Date: Wed, 12 Aug 2026 23:09:25 +0100 Subject: [PATCH] fix(apps): stop re-serialising the config section, which killed its listeners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every themed dropdown on the app config page was dead: it rendered, but clicking did nothing. Only that page — every other dropdown in the WebUI worked. renderAppDetail captured the config section's own innerHTML right after displayConfigForm() had rendered it... const configHTML = document.getElementById('config-section')?.innerHTML; ...67 lines later... configSection.innerHTML = configHTML; ...and wrote the same string straight back. That is a no-op for the markup and a catastrophe for behaviour: re-assigning innerHTML re-parses the subtree, so every listener in it is destroyed. custom-select.js had already wrapped each , so the + // re-inserted copy carried the .custom-select markup (and therefore was + // skipped by the enhancer as "already done") while having no click handler. + // The container is never wholesale-rewritten in this function, so there is + // nothing to restore. Anything added here must MUTATE the section, never + // re-assign its innerHTML. // Update console section (preserve original structure) const consoleSection = container.querySelector('.console-section');