${b.year}
${b.pages} стр.
`; 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 = `${escapeHtml(b.title)}`; 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.
close