81 lines
3.6 KiB
PHP
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> |