jalil.arfaoui.net/src/assets/js/main.js

175 lines
5.2 KiB
JavaScript

// Add your javascript here
window.darkMode = false;
const stickyClasses = ["fixed", "h-14"];
const unstickyClasses = ["absolute", "h-20"];
const stickyClassesContainer = [
"border-neutral-300/50",
"bg-white/80",
"dark:border-neutral-600/40",
"dark:bg-neutral-900/60",
"backdrop-blur-2xl",
];
const unstickyClassesContainer = ["border-transparent"];
let headerElement = null;
document.addEventListener("DOMContentLoaded", () => {
headerElement = document.getElementById("header");
if (
localStorage.getItem("dark_mode") &&
localStorage.getItem("dark_mode") === "true"
) {
window.darkMode = true;
showNight();
} else {
showDay();
}
stickyHeaderFuncionality();
applyMenuItemClasses();
evaluateHeaderPosition();
mobileMenuFunctionality();
});
// window.toggleDarkMode = function(){
// document.documentElement.classList.toggle('dark');
// if(document.documentElement.classList.contains('dark')){
// localStorage.setItem('dark_mode', true);
// window.darkMode = true;
// } else {
// window.darkMode = false;
// localStorage.setItem('dark_mode', false);
// }
// }
window.stickyHeaderFuncionality = () => {
window.addEventListener("scroll", () => {
evaluateHeaderPosition();
});
};
window.evaluateHeaderPosition = () => {
if (window.scrollY > 16) {
headerElement.firstElementChild.classList.add(...stickyClassesContainer);
headerElement.firstElementChild.classList.remove(
...unstickyClassesContainer,
);
headerElement.classList.add(...stickyClasses);
headerElement.classList.remove(...unstickyClasses);
document.getElementById("menu").classList.add("top-[56px]");
document.getElementById("menu").classList.remove("top-[75px]");
} else {
headerElement.firstElementChild.classList.remove(...stickyClassesContainer);
headerElement.firstElementChild.classList.add(...unstickyClassesContainer);
headerElement.classList.add(...unstickyClasses);
headerElement.classList.remove(...stickyClasses);
document.getElementById("menu").classList.remove("top-[56px]");
document.getElementById("menu").classList.add("top-[75px]");
}
};
document.getElementById("darkToggle").addEventListener("click", () => {
document.documentElement.classList.add("duration-300");
if (document.documentElement.classList.contains("dark")) {
localStorage.removeItem("dark_mode");
showDay(true);
} else {
localStorage.setItem("dark_mode", true);
showNight(true);
}
});
function showDay(animate) {
document.getElementById("sun").classList.remove("setting");
document.getElementById("moon").classList.remove("rising");
let timeout = 0;
if (animate) {
timeout = 500;
document.getElementById("moon").classList.add("setting");
}
setTimeout(() => {
document.getElementById("dayText").classList.remove("hidden");
document.getElementById("nightText").classList.add("hidden");
document.getElementById("moon").classList.add("hidden");
document.getElementById("sun").classList.remove("hidden");
if (animate) {
document.documentElement.classList.remove("dark");
document.getElementById("sun").classList.add("rising");
}
}, timeout);
}
function showNight(animate) {
document.getElementById("moon").classList.remove("setting");
document.getElementById("sun").classList.remove("rising");
let timeout = 0;
if (animate) {
timeout = 500;
document.getElementById("sun").classList.add("setting");
}
setTimeout(() => {
document.getElementById("nightText").classList.remove("hidden");
document.getElementById("dayText").classList.add("hidden");
document.getElementById("sun").classList.add("hidden");
document.getElementById("moon").classList.remove("hidden");
if (animate) {
document.documentElement.classList.add("dark");
document.getElementById("moon").classList.add("rising");
}
}, timeout);
}
window.applyMenuItemClasses = () => {
const menuItems = document.querySelectorAll("#menu a");
for (let i = 0; i < menuItems.length; i++) {
if (menuItems[i].pathname === window.location.pathname) {
menuItems[i].classList.add("text-neutral-900", "dark:text-white");
}
}
//:class="{ 'text-neutral-900 dark:text-white': window.location.pathname == '{menu.url}', 'text-neutral-700 dark:text-neutral-400': window.location.pathname != '{menu.url}' }"
};
function mobileMenuFunctionality() {
document.getElementById("openMenu").addEventListener("click", () => {
openMobileMenu();
});
document.getElementById("closeMenu").addEventListener("click", () => {
closeMobileMenu();
});
}
window.openMobileMenu = () => {
document.getElementById("openMenu").classList.add("hidden");
document.getElementById("closeMenu").classList.remove("hidden");
document.getElementById("menu").classList.remove("hidden");
document.getElementById("mobileMenuBackground").classList.add("opacity-0");
document.getElementById("mobileMenuBackground").classList.remove("hidden");
setTimeout(() => {
document
.getElementById("mobileMenuBackground")
.classList.remove("opacity-0");
}, 1);
};
window.closeMobileMenu = () => {
document.getElementById("closeMenu").classList.add("hidden");
document.getElementById("openMenu").classList.remove("hidden");
document.getElementById("menu").classList.add("hidden");
document.getElementById("mobileMenuBackground").classList.add("hidden");
};