(function(){
const list = document.getElementById('list');
const filter = document.getElementById('filter');
function render(data){
const q = (filter.value||'').toLowerCase();
list.innerHTML = '';
data.items
.filter(it => !q || it.name.toLowerCase().includes(q))
.forEach(it => {
const a = document.createElement('a');
a.href = '/' + encodeURIComponent(it.name);
a.className = 'card';
a.innerHTML = `
${it.name}
Zuschauer: ${it.viewers ?? 0}
${it.live ? 'LIVE' : 'Offline'}
`;
list.appendChild(a);
});
}
filter.addEventListener('input', ()=>{/* re-render mit letztem snapshot */}
);
let last = {items:[]};
const es = new EventSource('/api/streams/events', { withCredentials: false });
es.addEventListener('update', (ev)=>{
try {
last = JSON.parse(ev.data);
render(last);
} catch(e) { console.warn('sse parse', e); }
});
es.onerror = (e)=>console.warn('sse error', e);
// Optionaler Reload-Button:
const btn = document.getElementById('reload');
if (btn) btn.addEventListener('click', ()=>render(last));
})();