diff --git a/webui/static/settings.js b/webui/static/settings.js index abde9eaf..4f2ade67 100644 --- a/webui/static/settings.js +++ b/webui/static/settings.js @@ -1834,9 +1834,22 @@ function _genreWhitelistRender(genres) { const searchVal = (document.getElementById('genre-whitelist-search')?.value || '').toLowerCase(); const filtered = searchVal ? _genreWhitelistCache.filter(g => g.toLowerCase().includes(searchVal)) : _genreWhitelistCache; container.innerHTML = filtered.map(g => - `${escapeHtml(g)}` + `${escapeHtml(g)}` ).join(''); if (countEl) countEl.textContent = `${_genreWhitelistCache.length} genres`; + _initGenreChipClickHandler(); +} + +function _initGenreChipClickHandler() { + const container = document.getElementById('genre-whitelist-chips'); + if (!container) return; + container.onclick = (e) => { + const btn = e.target.closest('.genre-chip-x'); + if (btn) { + e.preventDefault(); + _genreWhitelistRemove(btn.dataset.genre); + } + }; } function _genreWhitelistRemove(genre) { @@ -2787,19 +2800,32 @@ function renderApiKeys(keys) { container.innerHTML = keys.map(k => `
-
${k.label || 'Unnamed'}
+
${escapeHtml(k.label || 'Unnamed')}
- ${k.key_prefix || 'sk_...'}... + ${escapeHtml(k.key_prefix || 'sk_...')}... · Created ${k.created_at ? new Date(k.created_at).toLocaleDateString() : 'unknown'} ${k.last_used_at ? '· Last used ' + new Date(k.last_used_at).toLocaleDateString() : ''}
-
`).join(''); + _initApiKeyClickHandler(); +} + +function _initApiKeyClickHandler() { + const container = document.getElementById('api-keys-list'); + if (!container) return; + container.onclick = (e) => { + const btn = e.target.closest('.revoke-api-key-btn'); + if (btn) { + e.preventDefault(); + revokeApiKey(btn.dataset.keyId, btn.dataset.keyLabel); + } + }; } async function generateApiKey() { @@ -3291,16 +3317,17 @@ async function loadHiFiInstances() { listEl.innerHTML = data.instances.map((inst, i) => { const enabledClass = inst.enabled ? '' : 'hifi-instance-disabled'; const checkHtml = inst.enabled - ? `` - : ``; + ? `` + : ``; return `
${escapeHtml(inst.url)} ${checkHtml} - +
`; }).join(''); _initHiFiDragDrop(); + _initHiFiClickHandlers(); } catch (e) { listEl.innerHTML = `
Error loading instances: ${escapeHtml(e.message)}
`; } @@ -3349,6 +3376,24 @@ function _initHiFiDragDrop() { }); } +function _initHiFiClickHandlers() { + const listEl = document.getElementById('hifi-instances-list'); + if (!listEl) return; + listEl.onclick = (e) => { + const toggle = e.target.closest('.hifi-instance-toggle'); + if (toggle) { + e.preventDefault(); + toggleHiFiInstance(toggle.dataset.url); + return; + } + const remove = e.target.closest('.hifi-instance-remove'); + if (remove) { + e.preventDefault(); + removeHiFiInstance(remove.dataset.url); + } + }; +} + async function _saveHiFiInstanceOrder(urls) { try { await fetch('/api/hifi/instances/reorder', {