fix: Add Bootstrap JS for collapse to work

- Added bootstrap.bundle.min.js to layout.twig
- Added debug logging to accordion JS
- Fixed icon update logic
This commit is contained in:
mirivlad 2026-04-17 17:30:49 +08:00
parent 98f6244eb3
commit 68cb135322
2 changed files with 15 additions and 5 deletions

View File

@ -209,7 +209,9 @@
if (c.startsWith(COOKIE_NAME + '=')) { if (c.startsWith(COOKIE_NAME + '=')) {
try { try {
return JSON.parse(decodeURIComponent(c.substring(COOKIE_NAME.length + 1))); return JSON.parse(decodeURIComponent(c.substring(COOKIE_NAME.length + 1)));
} catch(e) {} } catch(e) {
console.log('Cookie parse error:', e);
}
} }
} }
return {}; return {};
@ -221,7 +223,7 @@
} }
function updateIcon(header, isOpen) { function updateIcon(header, isOpen) {
const icon = header.querySelector('.accordion-icon'); const icon = header ? header.querySelector('.accordion-icon') : null;
if (icon) { if (icon) {
icon.className = isOpen ? 'fas fa-chevron-up' : 'fas fa-chevron-down'; icon.className = isOpen ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
} }
@ -229,11 +231,15 @@
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
const state = getAccordionState(); const state = getAccordionState();
console.log('Initial state from cookies:', state);
// Инициализация иконок из cookies // Инициализация иконок из cookies
document.querySelectorAll('.accordion-header').forEach(header => { document.querySelectorAll('.accordion-header').forEach(header => {
const groupId = header.dataset.group; const groupId = header.dataset.groupSlug;
const target = header.dataset.bsTarget;
const isOpen = state[groupId] === 'open'; const isOpen = state[groupId] === 'open';
console.log('Group:', groupId, 'isOpen:', isOpen);
updateIcon(header, isOpen); updateIcon(header, isOpen);
}); });
@ -243,16 +249,18 @@
const groupId = this.dataset.groupSlug; const groupId = this.dataset.groupSlug;
state[groupId] = 'closed'; state[groupId] = 'closed';
saveAccordionState(state); saveAccordionState(state);
console.log('Hidden:', groupId, 'state:', state);
const header = document.querySelector('.accordion-header[data-bs-target="#' + this.id + '"]'); const header = document.querySelector('.accordion-header[data-bs-target="#' + this.id + '"]');
if (header) updateIcon(header, false); updateIcon(header, false);
}); });
el.addEventListener('shown.bs.collapse', function() { el.addEventListener('shown.bs.collapse', function() {
const groupId = this.dataset.groupSlug; const groupId = this.dataset.groupSlug;
state[groupId] = 'open'; state[groupId] = 'open';
saveAccordionState(state); saveAccordionState(state);
console.log('Shown:', groupId, 'state:', state);
const header = document.querySelector('.accordion-header[data-bs-target="#' + this.id + '"]'); const header = document.querySelector('.accordion-header[data-bs-target="#' + this.id + '"]');
if (header) updateIcon(header, true); updateIcon(header, true);
}); });
}); });

View File

@ -126,5 +126,7 @@
}); });
}); });
</script> </script>
<!-- Bootstrap 5 JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body> </body>
</html> </html>