156 lines
5.0 KiB
JavaScript
156 lines
5.0 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);
|
|
|
|
// Init BS Tooltip
|
|
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
|
tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
return new bootstrap.Tooltip(tooltipTriggerEl);
|
|
});
|
|
|
|
// If layout is RTL add .dropdown-menu-end class to .dropdown-menu
|
|
if (isRtl) {
|
|
Helpers._addClass('dropdown-menu-end', document.querySelectorAll('#layout-navbar .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();
|
|
}
|
|
});
|
|
});
|
|
|
|
// If layout is RTL add .dropdown-menu-end class to .dropdown-menu
|
|
if (isRtl) {
|
|
Helpers._addClass('dropdown-menu-end', document.querySelectorAll('.dropdown-menu'));
|
|
}
|
|
|
|
// Mega dropdown
|
|
const megaDropdown = document.querySelectorAll('.nav-link.mega-dropdown');
|
|
if (megaDropdown) {
|
|
megaDropdown.forEach(e => {
|
|
new MegaDropdown(e);
|
|
});
|
|
}
|
|
|
|
//Style Switcher (Light/Dark/System Mode)
|
|
let styleSwitcher = document.querySelector('.dropdown-style-switcher');
|
|
const activeStyle = document.documentElement.getAttribute('data-style');
|
|
|
|
// Get style from local storage or use 'system' as default
|
|
let storedStyle =
|
|
localStorage.getItem('templateCustomizer-' + templateName + '--Style') || //if no template style then use Customizer style
|
|
(window.templateCustomizer?.settings?.defaultStyle ?? 'light'); //!if there is no Customizer then use default style as light
|
|
|
|
// Set style on click of style switcher item if template customizer is enabled
|
|
if (window.templateCustomizer && styleSwitcher) {
|
|
let styleSwitcherItems = [].slice.call(styleSwitcher.children[1].querySelectorAll('.dropdown-item'));
|
|
styleSwitcherItems.forEach(function (item) {
|
|
item.classList.remove('active');
|
|
item.addEventListener('click', function () {
|
|
let currentStyle = this.getAttribute('data-theme');
|
|
if (currentStyle === 'light') {
|
|
window.templateCustomizer.setStyle('light');
|
|
} else if (currentStyle === 'dark') {
|
|
window.templateCustomizer.setStyle('dark');
|
|
} else {
|
|
window.templateCustomizer.setStyle('system');
|
|
}
|
|
});
|
|
setTimeout(() => {
|
|
if (item.getAttribute('data-theme') === activeStyle) {
|
|
// Add 'active' class to the item if it matches the activeStyle
|
|
item.classList.add('active');
|
|
}
|
|
}, 1000);
|
|
});
|
|
|
|
// Update style switcher icon based on the stored style
|
|
|
|
const styleSwitcherIcon = styleSwitcher.querySelector('i');
|
|
|
|
if (storedStyle === 'light') {
|
|
styleSwitcherIcon.classList.add('bx-sun');
|
|
new bootstrap.Tooltip(styleSwitcherIcon, {
|
|
title: 'Light Mode',
|
|
fallbackPlacements: ['bottom']
|
|
});
|
|
} else if (storedStyle === 'dark') {
|
|
styleSwitcherIcon.classList.add('bx-moon');
|
|
new bootstrap.Tooltip(styleSwitcherIcon, {
|
|
title: 'Dark Mode',
|
|
fallbackPlacements: ['bottom']
|
|
});
|
|
} else {
|
|
styleSwitcherIcon.classList.add('bx-desktop');
|
|
new bootstrap.Tooltip(styleSwitcherIcon, {
|
|
title: 'System Mode',
|
|
fallbackPlacements: ['bottom']
|
|
});
|
|
}
|
|
}
|
|
|
|
// Run switchImage function based on the stored style
|
|
switchImage(storedStyle);
|
|
|
|
// Update light/dark image based on current style
|
|
function switchImage(style) {
|
|
if (style === 'system') {
|
|
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
style = 'dark';
|
|
} else {
|
|
style = 'light';
|
|
}
|
|
}
|
|
const switchImagesList = [].slice.call(document.querySelectorAll('[data-app-' + style + '-img]'));
|
|
switchImagesList.map(function (imageEl) {
|
|
const setImage = imageEl.getAttribute('data-app-' + style + '-img');
|
|
imageEl.src = assetsPath + 'img/' + setImage; // Using window.assetsPath to get the exact relative path
|
|
});
|
|
}
|
|
})();
|