130 lines
4.5 KiB
JavaScript
130 lines
4.5 KiB
JavaScript
|
|
'use strict';
|
|
|
|
// sidebar submenu collapsible js
|
|
document.querySelectorAll(".sidebar-menu .dropdown").forEach(function (dropdown) {
|
|
dropdown.addEventListener("click", function () {
|
|
var item = this;
|
|
|
|
// Close all sibling dropdowns
|
|
item.parentNode.querySelectorAll(".dropdown").forEach(function (sibling) {
|
|
if (sibling !== item) {
|
|
sibling.querySelector(".sidebar-submenu").style.display = 'none';
|
|
sibling.classList.remove("dropdown-open");
|
|
sibling.classList.remove("open");
|
|
}
|
|
});
|
|
|
|
// Toggle the current dropdown
|
|
var submenu = item.querySelector(".sidebar-submenu");
|
|
submenu.style.display = (submenu.style.display === 'block') ? 'none' : 'block';
|
|
|
|
item.classList.toggle("dropdown-open");
|
|
});
|
|
});
|
|
|
|
// Toggle sidebar visibility and active class
|
|
const sidebarToggle = document.querySelector(".sidebar-toggle");
|
|
if(sidebarToggle) {
|
|
sidebarToggle.addEventListener("click", function() {
|
|
this.classList.toggle("active");
|
|
document.querySelector(".sidebar").classList.toggle("active");
|
|
document.querySelector(".dashboard-main").classList.toggle("active");
|
|
});
|
|
}
|
|
|
|
// Open sidebar in mobile view and add overlay
|
|
const sidebarMobileToggle = document.querySelector(".sidebar-mobile-toggle");
|
|
if(sidebarMobileToggle) {
|
|
sidebarMobileToggle.addEventListener("click", function() {
|
|
document.querySelector(".sidebar").classList.add("sidebar-open");
|
|
document.body.classList.add("overlay-active");
|
|
});
|
|
}
|
|
|
|
// Close sidebar and remove overlay
|
|
const sidebarColseBtn = document.querySelector(".sidebar-close-btn");
|
|
if(sidebarColseBtn){
|
|
sidebarColseBtn.addEventListener("click", function() {
|
|
document.querySelector(".sidebar").classList.remove("sidebar-open");
|
|
document.body.classList.remove("overlay-active");
|
|
});
|
|
}
|
|
|
|
//to keep the current page active
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
var nk = window.location.href;
|
|
var links = document.querySelectorAll("ul#sidebar-menu a");
|
|
|
|
links.forEach(function (link) {
|
|
if (link.href === nk) {
|
|
link.classList.add("active-page"); // anchor
|
|
var parent = link.parentElement;
|
|
parent.classList.add("active-page"); // li
|
|
|
|
// Traverse up the DOM tree and add classes to parent elements
|
|
while (parent && parent.tagName !== "BODY") {
|
|
if (parent.tagName === "LI") {
|
|
parent.classList.add("show");
|
|
parent.classList.add("open");
|
|
}
|
|
parent = parent.parentElement;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 1. Penentuan Tema Awal (Taruh di paling atas)
|
|
// Kita hapus pengecekan matchMedia agar tidak ikut settingan Windows/HP
|
|
if (localStorage.getItem('color-theme') === 'dark') {
|
|
document.documentElement.classList.add('dark');
|
|
} else {
|
|
document.documentElement.classList.remove('dark');
|
|
}
|
|
|
|
// 2. Inisialisasi Icon
|
|
var themeToggleDarkIcon = document.getElementById('theme-toggle-dark-icon');
|
|
var themeToggleLightIcon = document.getElementById('theme-toggle-light-icon');
|
|
|
|
if (themeToggleDarkIcon && themeToggleLightIcon) {
|
|
if (localStorage.getItem('color-theme') === 'dark') {
|
|
themeToggleLightIcon.classList.remove('hidden');
|
|
themeToggleDarkIcon.classList.add('hidden'); // Pastikan icon bulan sembunyi
|
|
} else {
|
|
themeToggleDarkIcon.classList.remove('hidden');
|
|
themeToggleLightIcon.classList.add('hidden'); // Pastikan icon matahari sembunyi
|
|
}
|
|
}
|
|
|
|
// 3. Logika Klik Tombol
|
|
var themeToggleBtn = document.getElementById('theme-toggle');
|
|
|
|
if (themeToggleBtn) {
|
|
themeToggleBtn.addEventListener('click', function() {
|
|
// Toggle Icon
|
|
themeToggleDarkIcon.classList.toggle('hidden');
|
|
themeToggleLightIcon.classList.toggle('hidden');
|
|
|
|
// Logika Perpindahan
|
|
if (localStorage.getItem('color-theme')) {
|
|
if (localStorage.getItem('color-theme') === 'light') {
|
|
document.documentElement.classList.add('dark');
|
|
localStorage.setItem('color-theme', 'dark');
|
|
} else {
|
|
document.documentElement.classList.remove('dark');
|
|
localStorage.setItem('color-theme', 'light');
|
|
}
|
|
} else {
|
|
// Jika storage kosong (User baru pertama kali buka web)
|
|
if (document.documentElement.classList.contains('dark')) {
|
|
document.documentElement.classList.remove('dark');
|
|
localStorage.setItem('color-theme', 'light');
|
|
} else {
|
|
document.documentElement.classList.add('dark');
|
|
localStorage.setItem('color-theme', 'dark');
|
|
}
|
|
}
|
|
});
|
|
} |