()
| 705 | return S.admin.config[key]; |
| 706 | } |
| 707 | function renderConfigList(){ |
| 708 | const list = $('configItemList'); |
| 709 | const def = activeConfigDef(); |
| 710 | const items = configItems(); |
| 711 | if(S.admin.selectedIndex >= items.length) S.admin.selectedIndex = -1; |
| 712 | $('addConfigItemBtn').textContent = def.addLabel; |
| 713 | document.querySelectorAll('#configTypeTabs button').forEach(btn => btn.classList.toggle('active', btn.dataset.type === S.admin.selectedType)); |
| 714 | list.innerHTML = items.map((item, index) => { |
| 715 | const badge = def.badge(item, index); |
| 716 | return `<div class="config-row${S.admin.selectedIndex === index ? ' active' : ''}" data-index="${index}"><div><div class="name">${esc(def.title(item, index))}</div><div class="meta">${esc(def.meta(item, index))}</div></div><span class="badge ${badge.cls}">${esc(badge.text)}</span></div>`; |
| 717 | }).join('') || `<div class="empty-state">${def.empty}</div>`; |
| 718 | list.querySelectorAll('.config-row').forEach(row => row.addEventListener('click', () => selectConfigItem(Number(row.dataset.index)))); |
| 719 | } |
| 720 | function selectConfigItem(index){ |
| 721 | const item = configItems()[index]; |
| 722 | if(!item) return; |
no test coverage detected