const $ = (selector) => document.querySelector(selector); const modal = $('#modal'); const docModal = $('#doc-modal'); const favorites = new Set(JSON.parse(localStorage.getItem('talion-favorites') || '[]')); const history = JSON.parse(localStorage.getItem('talion-history') || '[]'); const docs = [ { title: 'Гражданский кодекс РФ', type: 'Кодекс', description: 'Основные положения гражданского законодательства Российской Федерации.', chapters: ['Общие положения', 'Лица', 'Объекты гражданских прав', 'Сделки и представительство'], url: 'https://www.consultant.ru/document/cons_doc_LAW_5142/' }, { title: 'Налоговый кодекс РФ', type: 'Кодекс', description: 'Налоги и сборы, права и обязанности налогоплательщиков.', chapters: ['Общие положения', 'Налогоплательщики', 'Налоговая декларация', 'Налоговый контроль'], url: 'https://www.consultant.ru/document/cons_doc_LAW_19671/' }, { title: 'Трудовой кодекс РФ', type: 'Кодекс', description: 'Трудовые отношения, гарантии работникам и правила оформления.', chapters: ['Общие положения', 'Трудовой договор', 'Рабочее время', 'Оплата и нормирование труда'], url: 'https://www.consultant.ru/document/cons_doc_LAW_34683/' }, { title: 'О защите прав потребителей', type: 'Федеральный закон', description: 'Права потребителей при покупке товаров и оказании услуг.', chapters: ['Общие положения', 'Защита прав потребителей', 'Общественные организации', 'Ответственность'], url: 'https://www.consultant.ru/document/cons_doc_LAW_305/' }, { title: 'Федеральный закон «О персональных данных»', type: 'Федеральный закон', description: 'Правовые основы обработки и защиты персональных данных.', chapters: ['Общие положения', 'Принципы обработки', 'Права субъекта данных', 'Обязанности оператора'], url: 'https://www.consultant.ru/document/cons_doc_LAW_61801/' }, { title: 'Конституция Российской Федерации', type: 'Конституция', description: 'Основной закон России: права, свободы и устройство государства.', chapters: ['Основы конституционного строя', 'Права и свободы человека', 'Федеративное устройство', 'Органы государственной власти'], url: 'https://www.consultant.ru/document/cons_doc_LAW_28399/' }, { title: 'МРОТ 2026', type: 'Справочная информация', description: 'Минимальный размер оплаты труда и связанные расчетные данные.', chapters: ['Размер МРОТ', 'Регионы', 'Расчетные примеры'], url: 'https://www.consultant.ru/document/cons_doc_LAW_503692/' } ]; document.querySelectorAll('[data-modal]').forEach((button) => button.addEventListener('click', () => { const trial = button.dataset.modal === 'trial'; $('#modal-kicker').textContent = trial ? 'Пробный доступ' : 'Вход в систему'; $('#modal-title').textContent = trial ? 'Получите доступ к системе' : 'Войти в систему'; $('#modal-text').textContent = trial ? 'Оставьте контакты, и специалист свяжется с вами.' : 'Демонстрационная форма входа в личный кабинет.'; $('#modal-form').style.display = 'block'; $('#form-success').style.display = 'none'; modal.classList.add('open'); modal.setAttribute('aria-hidden', 'false'); })); document.querySelectorAll('[data-close]').forEach((element) => element.addEventListener('click', () => { modal.classList.remove('open'); modal.setAttribute('aria-hidden', 'true'); })); $('#modal-form').addEventListener('submit', (event) => { event.preventDefault(); $('#modal-form').style.display = 'none'; $('#form-success').style.display = 'block'; }); const renderResults = (query = '', type = 'Все типы') => { const result = $('#search-results'); const matches = docs.filter((doc) => (!query || `${doc.title} ${doc.description}`.toLowerCase().includes(query.toLowerCase())) && (type === 'Все типы' || doc.type === type)); result.innerHTML = `
${matches.length ? `Найдено документов: ${matches.length}` : 'Ничего не найдено'}
${matches.map((doc) => ``).join('')}`; result.style.display = 'block'; result.style.position = 'static'; result.style.marginTop = '16px'; $('#result-filter').value = type; $('#result-filter').addEventListener('change', (event) => renderResults(query, event.target.value)); result.querySelectorAll('[data-result]').forEach((card) => card.addEventListener('click', () => openDocument(card.dataset.result))); }; $('#search-form').addEventListener('submit', (event) => { event.preventDefault(); renderResults($('#search-input').value.trim()); }); function openDocument(title) { const doc = docs.find((item) => item.title === title) || docs[0]; $('#doc-title').textContent = doc.title; $('.doc-breadcrumb').textContent = `Документы / ${doc.type}`; $('.doc-viewer .section-kicker').textContent = doc.type; $('.doc-layout article h3').textContent = 'О документе'; $('.doc-layout article p').textContent = doc.description; $('.doc-layout aside').innerHTML = `Оглавление${doc.chapters.map((chapter) => `${chapter}`).join('')}`; $('.doc-layout article .button').href = doc.url; updateFavorite(doc.title); if (!history.includes(doc.title)) { history.unshift(doc.title); history.splice(5); localStorage.setItem('talion-history', JSON.stringify(history)); } docModal.classList.add('open'); docModal.setAttribute('aria-hidden', 'false'); } function updateFavorite(title) { let button = $('#doc-favorite'); if (!button) { button = document.createElement('button'); button.id = 'doc-favorite'; button.className = 'favorite-button'; $('.doc-meta').append(button); } button.textContent = favorites.has(title) ? '★ В избранном' : '☆ В избранное'; button.onclick = () => { favorites.has(title) ? favorites.delete(title) : favorites.add(title); localStorage.setItem('talion-favorites', JSON.stringify([...favorites])); updateFavorite(title); }; } document.querySelectorAll('[data-doc]').forEach((link) => link.addEventListener('click', (event) => { event.preventDefault(); openDocument(link.dataset.doc); })); document.querySelectorAll('[data-doc-close]').forEach((element) => element.addEventListener('click', () => { docModal.classList.remove('open'); docModal.setAttribute('aria-hidden', 'true'); })); document.addEventListener('keydown', (event) => { if (event.key === 'Escape') { modal.classList.remove('open'); docModal.classList.remove('open'); } }); $('#cookie-ok').addEventListener('click', () => $('#cookie').remove()); $('.search-open').addEventListener('click', () => { $('#search-input').focus(); $('#search').scrollIntoView({ behavior: 'smooth' }); });