Files

141 lines
4.8 KiB
JavaScript

/**
* Main - Front Pages
*/
'use strict';
window.isRtl = window.Helpers.isRtl();
window.isDarkStyle = window.Helpers.isDarkStyle();
(function () {
const menu = document.getElementById('navbarSupportedContent'),
nav = document.querySelector('.layout-navbar'),
navItemLink = document.querySelectorAll('.navbar-nav .nav-link');
// Initialised custom options if checked
setTimeout(function () {
window.Helpers.initCustomOptionCheck();
}, 1000);
if (typeof Waves !== 'undefined') {
Waves.init();
Waves.attach(".btn[class*='btn-']:not([class*='btn-outline-']):not([class*='btn-label-'])", ['waves-light']);
Waves.attach("[class*='btn-outline-']");
Waves.attach("[class*='btn-label-']");
Waves.attach('.pagination .page-item .page-link');
}
// Init BS Tooltip
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
if (isRtl) {
// If layout is RTL add .dropdown-menu-end class to .dropdown-menu
Helpers._addClass('dropdown-menu-end', document.querySelectorAll('#layout-navbar .dropdown-menu'));
// If layout is RTL add .dropdown-menu-end class to .dropdown-menu
Helpers._addClass('dropdown-menu-end', document.querySelectorAll('.dropdown-menu'));
}
// Navbar
window.addEventListener('scroll', e => {
if (window.scrollY > 10) {
nav.classList.add('navbar-active');
} else {
nav.classList.remove('navbar-active');
}
});
window.addEventListener('load', e => {
if (window.scrollY > 10) {
nav.classList.add('navbar-active');
} else {
nav.classList.remove('navbar-active');
}
});
// Function to close the mobile menu
function closeMenu() {
menu.classList.remove('show');
}
document.addEventListener('click', function (event) {
// Check if the clicked element is inside mobile menu
if (!menu.contains(event.target)) {
closeMenu();
}
});
navItemLink.forEach(link => {
link.addEventListener('click', event => {
if (!link.classList.contains('dropdown-toggle')) {
closeMenu();
} else {
event.preventDefault();
}
});
});
// Mega dropdown
const megaDropdown = document.querySelectorAll('.nav-link.mega-dropdown');
if (megaDropdown) {
megaDropdown.forEach(e => {
new MegaDropdown(e);
});
}
// Get style from local storage or use 'system' as default
let storedStyle =
localStorage.getItem('templateCustomizer-' + templateName + '--Theme') || //if no template style then use Customizer style
(window.templateCustomizer?.settings?.defaultStyle ?? document.documentElement.getAttribute('data-bs-theme')); //!if there is no Customizer then use default style as light
let styleSwitcher = document.querySelector('.dropdown-style-switcher');
const styleSwitcherIcon = styleSwitcher.querySelector('i');
new bootstrap.Tooltip(styleSwitcherIcon, {
title: storedStyle.charAt(0).toUpperCase() + storedStyle.slice(1) + ' Mode',
fallbackPlacements: ['bottom']
});
// Run switchImage function based on the stored style
window.Helpers.switchImage(storedStyle);
// Update light/dark image based on current style
window.Helpers.setTheme(window.Helpers.getPreferredTheme());
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = window.Helpers.getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
window.Helpers.setTheme(window.Helpers.getPreferredTheme());
}
});
function getScrollbarWidth() {
const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
document.body.style.setProperty('--bs-scrollbar-width', `${scrollbarWidth}px`);
}
getScrollbarWidth();
//Style Switcher (Light/Dark/System Mode)
window.addEventListener('DOMContentLoaded', () => {
window.Helpers.showActiveTheme(window.Helpers.getPreferredTheme());
getScrollbarWidth();
document.querySelectorAll('[data-bs-theme-value]').forEach(toggle => {
toggle.addEventListener('click', () => {
const theme = toggle.getAttribute('data-bs-theme-value');
window.Helpers.setStoredTheme(templateName, theme);
window.Helpers.setTheme(theme);
window.Helpers.showActiveTheme(theme, true);
window.Helpers.syncCustomOptions(theme);
let currTheme = theme;
if (theme === 'system') {
currTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
new bootstrap.Tooltip(styleSwitcherIcon, {
title: theme.charAt(0).toUpperCase() + theme.slice(1) + ' Mode',
fallbackPlacements: ['bottom']
});
window.Helpers.switchImage(currTheme);
});
});
});
})();