82 lines
2.6 KiB
JavaScript
82 lines
2.6 KiB
JavaScript
|
/**
|
||
|
* 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);
|
||
|
})();
|