`;
grid.appendChild(el);
});
}
renderGrid(books);
// Events: open modal
const modalBack = document.getElementById('modalBack');
const modalTitle = document.getElementById('modalTitle');
const modalAuthor = document.getElementById('modalAuthor');
const modalDesc = document.getElementById('modalDesc');
const modalCover = document.getElementById('modalCover');
const modalYear = document.getElementById('modalYear');
const modalPages = document.getElementById('modalPages');
const modalLang = document.getElementById('modalLang');
const readBtn = document.getElementById('readBtn');
const qrBtn = document.getElementById('qrBtn');
const qrWrap = document.getElementById('qrWrap');
const qrImg = document.getElementById('qrImg');
const qrLink = document.getElementById('qrLink');
let currentBook = null;
grid.addEventListener('click', (e)=>{
const btn = e.target.closest('button');
if(!btn) return;
const id = Number(btn.dataset.id);
const b = books.find(x=>x.id===id);
if(!b) return;
if(btn.textContent.trim().toLowerCase().includes('читать')){
// open link in new tab
if(b.link && b.link!=='#') window.open(b.link,'_blank'); else alert('Ссылка не добавлена. Замените поле link в данных.');
return;
}
openModal(b);
});
function openModal(b){
currentBook = b;
modalTitle.textContent = b.title;
modalAuthor.textContent = b.author;
modalDesc.textContent = b.desc;
modalCover.innerHTML = `
`;
modalYear.textContent = 'Год: ' + (b.year||'—');
modalPages.textContent = 'Стр: ' + (b.pages||'—');
modalLang.textContent = 'Язык: ' + (b.lang||'—');
readBtn.onclick = ()=>{ if(b.link && b.link!=='#') window.open(b.link,'_blank'); else alert('Ссылка не добавлена.'); };
qrBtn.onclick = ()=>{ showQR(b.link || location.href); };
modalBack.style.display='flex';
modalBack.setAttribute('aria-hidden','false');
}
document.getElementById('closeModal').addEventListener('click', closeModal);
modalBack.addEventListener('click', (e)=>{ if(e.target===modalBack) closeModal(); });
function closeModal(){ modalBack.style.display='none'; modalBack.setAttribute('aria-hidden','true'); qrWrap.style.display='none'; }
// QR display (uses public QR API)
function showQR(link){ qrWrap.style.display='block'; const data = encodeURIComponent(link); qrLink.value = link; qrImg.src = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${data}` }
// Search
document.getElementById('q').addEventListener('input', (e)=>{
const v = e.target.value.trim().toLowerCase();
if(!v){ renderGrid(books); return }
const filtered = books.filter(b => (b.title + ' ' + b.author).toLowerCase().includes(v));
renderGrid(filtered);
});
// Open all: открывает модалки по очереди (демо)
document.getElementById('openAll').addEventListener('click', ()=>{
let i=0; const next = ()=>{ if(i>=books.length) return; openModal(books[i]); i++; setTimeout(()=>{ closeModal(); setTimeout(next,200); },900); } ; next();
});
// Accessibility: close modal with Esc
document.addEventListener('keydown', (e)=>{ if(e.key==='Escape') closeModal(); });
// Инструкция: как заменить данные — редактируйте массив "books" в этом файле: title, author, year, pages, lang, cover, link, desc.