jilo-web/themes/modern/js/theme.js

82 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

2025-05-26 07:08:46 +00:00
/**
* Modern Theme JavaScript
*
* This file contains theme-specific JavaScript functionality.
*/
document.addEventListener('DOMContentLoaded', function() {
// Initialize tooltips
$('[data-toggle="tooltip"]').tooltip();
// Initialize popovers
$('[data-toggle="popover"]').popover();
// Add smooth scrolling to anchor links
$('a[href^="#"]').on('click', function(e) {
if (this.hash !== '') {
e.preventDefault();
const hash = this.hash;
$('html, body').animate(
{ scrollTop: $(hash).offset().top - 20 },
800
);
}
});
// Handle form validation feedback
$('form.needs-validation').on('submit', function(event) {
if (this.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
$(this).addClass('was-validated');
});
// Add active class to current nav item
const currentPage = window.location.pathname.split('/').pop() || 'index.php';
$('.nav-link').each(function() {
if ($(this).attr('href') === currentPage) {
$(this).addClass('active');
$(this).closest('.nav-item').addClass('active');
}
});
// Handle sidebar toggle
const sidebarToggle = document.querySelector('.sidebar-toggle');
if (sidebarToggle) {
sidebarToggle.addEventListener('click', function() {
document.documentElement.classList.toggle('sidebar-collapsed');
localStorage.setItem('sidebarState',
document.documentElement.classList.contains('sidebar-collapsed') ? 'collapsed' : 'expanded');
});
}
// Handle dropdown menus
$('.dropdown-menu a.dropdown-toggle').on('click', function(e) {
if (!$(this).next().hasClass('show')) {
$(this).parents('.dropdown-menu').first().find('.show').removeClass('show');
}
const $subMenu = $(this).next('.dropdown-menu');
$subMenu.toggleClass('show');
$(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function() {
$('.dropdown-submenu .show').removeClass('show');
});
return false;
});
});
// Theme switcher functionality
function setTheme(themeName) {
localStorage.setItem('theme', themeName);
document.documentElement.className = themeName;
}
// Immediately-invoked function to set the theme on initial load
(function () {
const savedTheme = localStorage.getItem('theme') || 'light-theme';
setTheme(savedTheme);
})();