document.addEventListener('DOMContentLoaded', function () { // Модалка с вузами const universitiesModal = document.getElementById('universitiesModal'); const openUniversitiesBtn = document.getElementById('showModalBtn'); const closeUniversitiesBtn = document.getElementById('closeModalBtn'); function openUniversitiesModal(e){ e.preventDefault(); document.body.style.overflow = 'hidden'; universitiesModal.style.display = 'block'; setTimeout(() => universitiesModal.classList.add('active'), 10); } function closeUniversitiesModal(){ universitiesModal.classList.remove('active'); setTimeout(() => { universitiesModal.style.display = 'none'; document.body.style.overflow = 'auto'; }, 300); } if (openUniversitiesBtn) openUniversitiesBtn.addEventListener('click', openUniversitiesModal); if (closeUniversitiesBtn) closeUniversitiesBtn.addEventListener('click', closeUniversitiesModal); if (universitiesModal) { universitiesModal.addEventListener('click', (e) => { if (e.target === universitiesModal) closeUniversitiesModal(); }); } // Модалка с тестом const testModal = document.getElementById('careerTestModal'); const openTestBtn = document.getElementById('showCareerTestBtn'); const closeTestBtn = document.getElementById('closeCareerTestBtn'); function openTestModal(e){ e.preventDefault(); document.body.style.overflow = 'hidden'; testModal.style.display = 'block'; setTimeout(() => testModal.classList.add('active'), 10); } function closeTestModal(){ testModal.classList.remove('active'); setTimeout(() => { testModal.style.display = 'none'; document.body.style.overflow = 'auto'; }, 300); } if (openTestBtn) openTestBtn.addEventListener('click', openTestModal); if (closeTestBtn) closeTestBtn.addEventListener('click', closeTestModal); if (testModal) { testModal.addEventListener('click', (e) => { if (e.target === testModal) closeTestModal(); }); } document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { if (testModal && testModal.style.display === 'block') closeTestModal(); if (universitiesModal && universitiesModal.style.display === 'block') closeUniversitiesModal(); } }); // Аккордион для вузов const accordionHeaders = document.querySelectorAll('.accordion-header'); accordionHeaders.forEach(header => { header.addEventListener('click', function () { const item = this.parentElement; const content = this.nextElementSibling; document.querySelectorAll('.accordion-content.active').forEach(activeContent => { if (activeContent !== content) { activeContent.classList.remove('active'); activeContent.style.maxHeight = null; activeContent.previousElementSibling.classList.remove('active'); } }); this.classList.toggle('active'); if (content.classList.contains('active')) { content.classList.remove('active'); content.style.maxHeight = null; } else { content.classList.add('active'); content.style.maxHeight = content.scrollHeight + 'px'; } }); }); // Открытие первого аккордиона по умолчанию document.querySelectorAll('.university-card').forEach(card => { const firstAccordion = card.querySelector('.accordion-item'); if (firstAccordion) { const header = firstAccordion.querySelector('.accordion-header'); const content = firstAccordion.querySelector('.accordion-content'); header.classList.add('active'); content.classList.add('active'); content.style.maxHeight = content.scrollHeight + 'px'; } }); }); document.addEventListener('DOMContentLoaded', function () { // ---------- OPEN/CLOSE ---------- const modal = document.getElementById('ratingModal'); const openBtn = document.getElementById('showRatingBtn'); const closeBtn = document.getElementById('closeRatingBtn'); function openModal(e){ e.preventDefault(); document.body.style.overflow = 'hidden'; modal.style.display = 'block'; setTimeout(() => modal.classList.add('active'), 10); if (typeof ym !== 'undefined') { ym(105827527, 'reachGoal', 'rating_opened'); } } function closeModal(){ modal.classList.remove('active'); setTimeout(() => { modal.style.display = 'none'; document.body.style.overflow = 'auto'; }, 300); } if (openBtn) openBtn.addEventListener('click', openModal); if (closeBtn) closeBtn.addEventListener('click', closeModal); if (modal) modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && modal && modal.style.display === 'block') closeModal(); }); // ---------- DATA (пока на фронте, потом можно заменить на API) ---------- // Оценки 0..100 (примерные заглушки). Замени на свои данные. const universities = [ { id:'ulgu', name:'УлГУ — Ульяновский государственный университет', type:'classic', acc:90, emp:75, rank:70, rev:78, url:'https://ulsu.ru' }, { id:'ulstu', name:'УлГТУ — Ульяновский государственный технический университет', type:'technical', acc:88, emp:82, rank:72, rev:74, url:'https://ulstu.ru' }, { id:'ulspu', name:'УлГПУ — Ульяновский государственный педагогический университет', type:'pedagogical', acc:86, emp:70, rank:60, rev:76, url:'https://ulspu.ru' }, { id:'ulsau', name:'УлГАУ — Ульяновский государственный аграрный университет', type:'agro', acc:84, emp:68, rank:58, rev:72, url:'https://ulsau.ru' }, { id:'uiga', name:'УИ ГА — Ульяновский институт гражданской авиации', type:'aviation', acc:85, emp:80, rank:65, rev:70, url:'https://uvauga.ru' }, { id:'ranepa', name:'РАНХиГС (Ульяновский филиал)', type:'management', acc:83, emp:73, rank:62, rev:69, url:'https://ulyanovsk.ranepa.ru' }, ]; // ---------- UI refs ---------- const listEl = document.getElementById('ratingList'); const countEl = document.getElementById('ratingCount'); const searchEl = document.getElementById('ratingSearch'); const sortEl = document.getElementById('ratingSort'); const minTotalEl = document.getElementById('ratingMinTotal'); const minTotalLabel = document.getElementById('ratingMinTotalLabel'); const typeEls = Array.from(document.querySelectorAll('.ratingType')); const wAcc = document.getElementById('wAcc'); const wEmp = document.getElementById('wEmp'); const wRank = document.getElementById('wRank'); const wRev = document.getElementById('wRev'); const wAccL = document.getElementById('wAccL'); const wEmpL = document.getElementById('wEmpL'); const wRankL = document.getElementById('wRankL'); const wRevL = document.getElementById('wRevL'); const resetBtn = document.getElementById('ratingResetBtn'); function weights() { return { acc: Number(wAcc.value), emp: Number(wEmp.value), rank: Number(wRank.value), rev: Number(wRev.value), }; } function calcTotal(u, w) { const sumW = (w.acc + w.emp + w.rank + w.rev) || 1; return Math.round( (u.acc * w.acc + u.emp * w.emp + u.rank * w.rank + u.rev * w.rev) / sumW ); } function getSelectedTypes() { return new Set(typeEls.filter(x => x.checked).map(x => x.value)); } function render() { const q = (searchEl.value || '').trim().toLowerCase(); const minTotal = Number(minTotalEl.value); const selectedTypes = getSelectedTypes(); const w = weights(); // обновление лейблов minTotalLabel.textContent = String(minTotal); wAccL.textContent = w.acc; wEmpL.textContent = w.emp; wRankL.textContent = w.rank; wRevL.textContent = w.rev; // фильтрация let items = universities .map(u => ({ ...u, total: calcTotal(u, w) })) .filter(u => !q || u.name.toLowerCase().includes(q)) .filter(u => selectedTypes.has(u.type)) .filter(u => u.total >= minTotal); // сортировка const sort = sortEl.value; const cmpNum = (k) => (a,b) => b[k] - a[k]; if (sort === 'total_desc') items.sort(cmpNum('total')); if (sort === 'employment_desc') items.sort(cmpNum('emp')); if (sort === 'reviews_desc') items.sort(cmpNum('rev')); if (sort === 'accreditation_desc') items.sort(cmpNum('acc')); if (sort === 'name_asc') items.sort((a,b) => a.name.localeCompare(b.name, 'ru')); countEl.textContent = String(items.length); // рендер listEl.innerHTML = items.map((u, i) => `