let currentCategory = 'all'; let currentView = 'news'; let currentNewsId = null; const content = document.getElementById('content'); const modal = document.getElementById('modal'); const modalBody = document.getElementById('modal-body'); const modalClose = document.querySelector('.modal-close'); const modalOverlay = document.querySelector('.modal-overlay'); document.querySelectorAll('.nav-link').forEach(link => { link.addEventListener('click', (e) => { e.preventDefault(); document.querySelectorAll('.nav-link').forEach(l => l.classList.remove('active')); e.target.classList.add('active'); if (e.target.dataset.view === 'videos') { currentView = 'videos'; loadVideos(); } else { currentView = 'news'; currentCategory = e.target.dataset.category; loadNews(); } }); }); async function loadNews() { const res = await fetch('/api/news'); let news = await res.json(); if (currentCategory !== 'all') { news = news.filter(n => n.category === currentCategory); } const categoryNames = { football: 'Футбол', hockey: 'Хоккей', tennis: 'Теннис', all: 'Все новости' }; content.innerHTML = `

${categoryNames[currentCategory] || 'Все новости'}

${news.map(n => `
${n.title}
${getCategoryName(n.category)}

${n.title}

${n.excerpt}

${formatDate(n.date)} 💬 ${n.commentsCount}
`).join('')}
`; } async function loadVideos() { const res = await fetch('/api/videos'); const videos = await res.json(); content.innerHTML = `

Видео-обзоры

${videos.map(v => `
${v.title}
▶
${getCategoryName(v.category)}

${v.title}

⏱ ${v.duration} 👁 ${v.views}
`).join('')}
`; } async function openNews(id) { currentNewsId = id; const res = await fetch('/api/news'); const news = await res.json(); const item = news.find(n => n.id === id); const commentsRes = await fetch(`/api/comments?newsId=${id}`); const comments = await commentsRes.json(); modalBody.innerHTML = `

${item.title}

${getCategoryName(item.category)} 📅 ${formatDate(item.date)} 💬 ${comments.length} комментариев
${item.title}
${item.content}

Комментарии (${comments.length})

${comments.length > 0 ? comments.map(c => `
${c.author}
${c.text}
${formatDate(c.date)}
`).join('') : '

Пока нет комментариев. Будьте первым!

'}

Оставить комментарий

`; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } async function submitComment() { const text = document.getElementById('commentText').value.trim(); const author = document.getElementById('commentAuthor').value.trim(); if (!text || !author) { alert('Введите имя и текст комментария'); return; } await fetch('/api/comments', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ newsId: currentNewsId, author, text, date: new Date().toISOString().slice(0, 10) }) }); document.getElementById('commentText').value = ''; document.getElementById('commentAuthor').value = ''; openNews(currentNewsId); } function playVideo(title) { modalBody.innerHTML = `

${title}

🎬

Видео готово к воспроизведению

(В реальной версии здесь будет видеоплеер)

`; modal.classList.add('active'); document.body.style.overflow = 'hidden'; } function closeModal() { modal.classList.remove('active'); document.body.style.overflow = ''; } modalClose.addEventListener('click', closeModal); modalOverlay.addEventListener('click', closeModal); function getCategoryName(cat) { return { football: 'Футбол', hockey: 'Хоккей', tennis: 'Теннис' }[cat] || cat; } function formatDate(dateStr) { const date = new Date(dateStr); return date.toLocaleDateString('ru-RU', { day: 'numeric', month: 'long', year: 'numeric' }); } loadNews();