38929-vm/includes/footer.php
2026-03-03 06:54:52 +00:00

81 lines
3.6 KiB
PHP

</main>
</div>
</div>
<!-- Separate Popper and Bootstrap for maximum compatibility and debugging -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/2.11.8/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.min.js"></script>
<script src="assets/js/main.js?v=<?php echo time(); ?>"></script>
<script>
// Robust dropdown initialization and diagnostic
(function() {
function checkDependencies() {
console.log('--- Dependency Check ---');
console.log('Popper.js:', typeof Popper !== 'undefined' ? 'Loaded' : 'MISSING');
console.log('Bootstrap:', typeof bootstrap !== 'undefined' ? 'Loaded' : 'MISSING');
if (typeof bootstrap !== 'undefined' && bootstrap.Dropdown) {
console.log('Bootstrap Dropdown:', 'Available');
} else {
console.warn('Bootstrap Dropdown: NOT Available');
}
}
function initDropdowns() {
checkDependencies();
if (typeof bootstrap !== 'undefined' && bootstrap.Dropdown) {
console.log('Initializing Bootstrap Dropdowns...');
var dropdownElementList = [].slice.call(document.querySelectorAll('.dropdown-toggle'));
dropdownElementList.forEach(function (dropdownToggleEl) {
try {
// Clean up any existing instances first
var existing = bootstrap.Dropdown.getInstance(dropdownToggleEl);
if (existing) existing.dispose();
// New instance
new bootstrap.Dropdown(dropdownToggleEl);
} catch (err) {
console.error('Error initializing dropdown for:', dropdownToggleEl, err);
}
});
} else {
console.error('Bootstrap JS or Dropdown module not loaded!');
// Emergency Fallback: simple manual toggle if Bootstrap fails
document.querySelectorAll('.dropdown-toggle').forEach(function(btn) {
btn.style.cursor = 'pointer';
btn.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
console.log('Emergency fallback toggle triggered');
var menu = this.nextElementSibling;
if (menu && menu.classList.contains('dropdown-menu')) {
var isShown = menu.classList.contains('show');
// Close others
document.querySelectorAll('.dropdown-menu.show').forEach(function(m) {
m.classList.remove('show');
});
if (!isShown) menu.classList.add('show');
}
});
});
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initDropdowns);
} else {
initDropdowns();
}
// Global click listener to close dropdowns
document.addEventListener('click', function(e) {
if (!e.target.closest('.dropdown')) {
document.querySelectorAll('.dropdown-menu.show').forEach(function(menu) {
menu.classList.remove('show');
});
}
});
})();
</script>
</body>
</html>