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 => `
${getCategoryName(n.category)}
${n.title}
${n.excerpt}
${formatDate(n.date)}
`).join('')}
`;
}
async function loadVideos() {
const res = await fetch('/api/videos');
const videos = await res.json();
content.innerHTML = `
Видео-обзоры
${videos.map(v => `
▶
${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.content}
`;
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();
Комментарии (${comments.length})
${comments.length > 0 ? comments.map(c => `Пока нет комментариев. Будьте первым!
'}Оставить комментарий