(function () { const requested = SK.ch(SK.param("c")); const live = SK.channels.filter(c => SK.onAir(c.id)); const c = requested || live[0] || SK.channels[0]; const prog = SK.onAir(c.id); const v = SK.vid(SK.liveSource[c.id]); document.title = (prog ? prog.title + ", " : "") + c.name + " — эфир Склейки"; const lp = document.getElementById("lplayer"); const today = SK.schedule(c.id, new Date()); const m = SK.nowMin(); const upcoming = today.filter(p => p.start > m).slice(0, 4); if (prog) { lp.innerHTML = `
В эфире
`; const video = lp.querySelector("video"); // все зрители видят один и тот же момент: позиция считается от часов video.addEventListener("loadedmetadata", () => { video.currentTime = (Date.now() / 1000) % video.duration; }); } else { lp.innerHTML = `
«${SK.esc(c.name)}» сейчас не вещает ${upcoming.length ? "Следующая передача в " + SK.hm(upcoming[0].start) + ": " + SK.esc(upcoming[0].title) : "Сегодня эфиров больше нет."}
`; } const pct = prog ? Math.round(((m - prog.start) / (prog.end - prog.start)) * 100) : 0; document.getElementById("linfo").innerHTML = `

${prog ? SK.esc(prog.title) : "Нет эфира"}

${SK.esc(c.name)}${SK.esc(c.owner)}, ${SK.esc(c.city)}
${prog ? `
${SK.hm(prog.start)}–${SK.hm(prog.end)}, прошло ${pct}%
` : ""}

${SK.esc(c.about)}

${upcoming.length ? `

Дальше сегодня:

` : ""}
`; /* другие каналы */ document.getElementById("others").innerHTML = SK.channels.filter(x => x.id !== c.id).map(x => { const p = SK.onAir(x.id), xv = SK.vid(SK.liveSource[x.id]); return `
${p ? 'в эфире' : ""}
${SK.esc(x.name)}${p ? SK.esc(p.title) : "Не вещает"}
`; }).join(""); /* чат */ const chat = document.getElementById("chat"); const vEl = document.getElementById("viewers"), badge = document.getElementById("badge-v"); let viewers = prog ? Math.round(c.subs / 40 + Math.random() * 30) : 0; const showViewers = () => { const t = viewers + " " + SK.plural(viewers, "зритель", "зрителя", "зрителей"); vEl.textContent = t; if (badge) badge.textContent = t; }; showViewers(); const people = ["ира_в", "Kostya", "mmm", "Лена Ш.", "dj_ozero", "Старый Пёс", "polina", "Тимофей", "аня из Твери", "nikita_88", "Ром", "Ксю"]; const colors = ["teal", "iris", "mustard", "rose", "olive"]; const lines = [ "всем привет", "опять залипла на полчаса", "звук бы чуть тише", "у кого тоже на втором мониторе?", "вот этот переход красивый", "работаю под это третью ночь", "а где взять этот луп?", "привет из Самары", "лучше любого скринсейвера", "кот смотрит вместе со мной", "это прям медитация", "можно версию подлиннее?", "спасибо что не выключаете", "в 4 утра самое то", "цвета сегодня теплее, или мне кажется", "ставлю на проектор в кухне" ]; const add = (who, text, color, sys) => { const li = document.createElement("li"); if (sys) { li.className = "sys"; li.textContent = text; } else { li.className = color ? "c-" + color : ""; li.innerHTML = `${SK.esc(who)}${SK.esc(text)}`; } chat.appendChild(li); while (chat.children.length > 80) chat.firstChild.remove(); chat.scrollTop = chat.scrollHeight; }; add("", prog ? "Вы подключились к эфиру. Будьте вежливы, модераторы не спят." : "Эфира нет, чат откроется в начале следующей передачи.", "", true); if (prog) { for (let i = 0; i < 6; i++) add(people[(i * 5) % people.length], lines[(i * 7) % lines.length], colors[i % 5]); (function tick() { setTimeout(() => { const i = Math.floor(Math.random() * people.length); add(people[i], lines[Math.floor(Math.random() * lines.length)], colors[i % 5]); viewers = Math.max(3, viewers + Math.round((Math.random() - 0.45) * 4)); showViewers(); tick(); }, 2500 + Math.random() * 5000); })(); } document.getElementById("chatform").addEventListener("submit", e => { e.preventDefault(); const inp = document.getElementById("msg"); const t = inp.value.trim(); if (!t) return; if (!prog) { SK.toast("Чат закрыт, пока канал не в эфире"); return; } add("вы", t, c.color); inp.value = ""; }); })();