diff --git a/containers/libreportal/frontend/components/apps/core/js/apps-manager.js b/containers/libreportal/frontend/components/apps/core/js/apps-manager.js index 5dbe6ab..2329184 100755 --- a/containers/libreportal/frontend/components/apps/core/js/apps-manager.js +++ b/containers/libreportal/frontend/components/apps/core/js/apps-manager.js @@ -714,8 +714,6 @@ class AppsManager { // Render config section with working app-config-original.js approach // Use the working displayConfigForm from app-config-original.js await this.displayConfigForm(app, preferredCategory); - - const configHTML = document.getElementById('config-section')?.innerHTML || ''; // Initialize port managers after config form is rendered setTimeout(async () => { @@ -778,15 +776,17 @@ class AppsManager { } } - // Update config section - const configSection = document.getElementById('config-section'); - //// // console.log('config-section element found:', !!configSection); - if (configSection) { - configSection.innerHTML = configHTML; - //// // console.log('Config section updated successfully, innerHTML length:', configHTML.length); - } else { - console.error('config-section element not found in DOM'); - } + // The config section is DELIBERATELY not touched here. displayConfigForm() + // above already rendered it, and this used to capture its innerHTML and + // write the same string back a few lines later. That round-trip is a no-op + // for the markup but re-parses the subtree, so every listener attached to + // it is destroyed — which silently killed every themed dropdown on the app + // config page: custom-select.js had already wrapped each