/* * Version: 1.2.0 * Template: Hope-Ui - Responsive Bootstrap 5 Admin Dashboard Template * Author: iqonic.design * Design and Developed by: iqonic.design * NOTE: This file contains all the setting change script. */ /*---------------------------------------------- Index Of Script ------------------------------------------------ :: Variables ------- Functions -------- :: rtlModeDefault - This function help for change offcanvas position based on rtlMode :: checkSettingMenu - This function help for on page load setting panel active :: darkMode - This function help for change dark mode :: changeMode -This function help for change with create event :: updateMode - This function help for change dashboard setting on page load based on session storage ------- Listners -------- :: RTL Mode :: Color Mode :: Sidebar Color :: Sidebar Types :: Sidebar Active Style :: Navbar & Header style :: Navbar default style :: colorChange Mode ------------------------------------------------ Index Of Script ----------------------------------------------*/ (function () { "use strict"; // Variables let sidebarTypeSetting = []; // RTL mode on change offcanvas position change function const rtlModeDefault = (check) => { if (check) { $('.offcanvas-start').addClass('on-rtl start').removeClass('offcanvas-start') $('.offcanvas-end').addClass('on-rtl end').removeClass('offcanvas-end') $('.on-rtl.start').addClass('offcanvas-end').removeClass('start') $('.on-rtl.end').addClass('offcanvas-start').removeClass('end') } else { $('.offcanvas-start').addClass('on-rtl start').removeClass('offcanvas-start') $('.offcanvas-end').addClass('on-rtl end').removeClass('offcanvas-end') $('.on-rtl.start').addClass('offcanvas-end').removeClass('start') $('.on-rtl.end').addClass('offcanvas-start').removeClass('end') } } // On Page Load Active Function const checkSettingMenu = (type, name, value, data) => { if(data == 'addedClass'){ document.querySelectorAll(`[data-setting="${type}"][data-name="${name}"].active`).forEach((el) => { el.classList.remove('active') }); } if(data == 'noClass'){ const dataREmove = `[data-setting="${type}"][data-name="${name}"]`; const dataAdd = `[data-setting="${type}"][data-name="${name}"][data-value="${value}"]`; document.querySelectorAll(dataREmove).forEach((el) => { el.classList.remove('active') }); document.querySelectorAll(dataAdd).forEach((el) => { el.classList.add('active') }); } } // Dark mode enable & disabled function const darkMode = () => { if (document.querySelector('body').classList.contains('auto')) { if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { document.querySelector('body').classList.add('dark') } else { document.querySelector('body').classList.remove('dark') } } } // For Dark, RTL & Sidebar Class Update const changeMode = (type, value, target) => { let detailObj = {} if (type == 'color-mode') { detailObj = {dark: value} document.querySelector('body').classList.add(value) } if (type == 'dir-mode') { detailObj = {dir: value} document.querySelector('html').setAttribute('dir',value) } if (type == 'sidebar') { detailObj = {'sidebar-color': value} const sidebarclass= document.querySelector('.sidebar-default') if(sidebarclass !== null && sidebarclass !== undefined){ sidebarclass.classList.add(value) } } const event = new CustomEvent("ChangeMode", {detail: detailObj }); document.dispatchEvent(event); } // Page on load function const updateMode = () => { // Change Mode Custom Event Listners document.addEventListener('ChangeMode',(e) => { if (e.detail.dir === 'rtl' || e.detail.dir === 'ltr') { rtlModeDefault(true) } if (e.detail.dark !== null || e.detail.dark !== undefined) { darkMode() } }) // For Dark Mode const colorMode = localStorage.getItem('color-mode') if(colorMode !== null && colorMode !== undefined) { document.body.classList.remove('dark') document.body.classList.add(colorMode) darkMode() checkSettingMenu('color-mode', 'color', colorMode, 'addedClass') } // For RTL Mode const dirMode = localStorage.getItem('dir-mode') if(dirMode !== null && dirMode !== undefined && dirMode !== 'ltr') { checkSettingMenu('dir-mode', 'dir', dirMode, 'addedClass') changeMode('dir-mode', dirMode) } // For Sidebar Color const sidebarColors = localStorage.getItem('sidebar') if(sidebarColors !== null && sidebarColors !== undefined) { checkSettingMenu('sidebar', 'sidebar-color', sidebarColors, 'addedClass') changeMode('sidebar', sidebarColors) } // For Sidebar Types const sidebarTypeSession = localStorage.getItem('sidebarType') if(sidebarTypeSession !== null && sidebarTypeSession !== undefined) { sidebarTypeSetting = JSON.parse(sidebarTypeSession) Array.from(sidebarTypeSetting,(type) => { document.querySelectorAll(`[data-setting="sidebar"][data-name="sidebar-type"][data-value="${type}"]`).forEach((el) => { el.classList.add('active') }); changeMode('sidebar', type) }) } // For Sidebar Active Style const allActiveType = localStorage.getItem('sidebar-style') if(allActiveType !== null && allActiveType !== undefined) { document.querySelector('.sidebar').classList.remove('navs-rounded-all') document.querySelector('.sidebar').classList.add(`${allActiveType}`) checkSettingMenu('sidebar', 'sidebar-item', allActiveType, 'addedClass') changeMode('sidebar-style', allActiveType) } // For Navbar & Header Style const allNavbarType = localStorage.getItem('navbarTypes') if(allNavbarType !== null && allNavbarType !== undefined){ if(allNavbarType == 'nav-glass' || allNavbarType == 'navs-sticky' || allNavbarType == 'navs-transparent'){ document.querySelector('.iq-navbar').classList.add(`${allNavbarType}`) } if(allNavbarType == 'navs-bg-color'){ document.querySelector('.iq-navbar').classList.remove('nav-glass','navs-sticky','navs-transparent') document.querySelector('.iq-navbar-header').classList.add(`${allNavbarType}`) } checkSettingMenu('navbar', 'navbar-type', allNavbarType, 'noClass') } } updateMode() //dark-mode & light-mode const colorMode = document.querySelectorAll('[data-setting="color-mode"][data-name="color"]') Array.from(colorMode, (mode) => { mode.addEventListener('click', (e) => { Array.from(colorMode, (el) => { el.classList.remove('active') document.querySelector('body').classList.remove(el.getAttribute('data-value')) }) localStorage.setItem('color-mode', mode.getAttribute('data-value')) mode.classList.add('active') document.querySelector('body').classList.add(mode.getAttribute('data-value')) changeMode('color-mode', mode.getAttribute('data-value')) }) }) //rtl & ltr const dirMode = document.querySelectorAll('[data-setting="dir-mode"][data-name="dir"]') Array.from(dirMode, (mode) => { mode.addEventListener('click', (e) => { Array.from(dirMode, (el) => { el.classList.remove('active') }) if (!mode.classList.contains('active')) { Array.from(document.querySelectorAll(`[data-value="${mode.getAttribute('data-value')}"]`), (el) => el.classList.add('active')) localStorage.setItem('dir-mode', mode.getAttribute('data-value')) changeMode('dir-mode', mode.getAttribute('data-value')) } }) }) //Sidebar Color const sidebarColors = document.querySelectorAll('[data-setting="sidebar"][data-name="sidebar-color"]') Array.from(sidebarColors, (mode) => { mode.addEventListener('click', (e) => { Array.from(sidebarColors, (el) => { el.classList.remove('active') document.querySelector('.sidebar-default').classList.remove(el.getAttribute('data-value')) }) localStorage.setItem('sidebar', mode.getAttribute('data-value')) mode.classList.add('active') document.querySelector('.sidebar-default').classList.add(mode.getAttribute('data-value')) changeMode('sidebar', mode.getAttribute('data-value')) }) }) // Sidebar type style const sidebarTypes = document.querySelectorAll('[data-setting="sidebar"][data-name="sidebar-type"]') Array.from(sidebarTypes, (sidebarType) => { sidebarType.addEventListener('click', (e) => { if (sidebarType.classList.contains('active')) { sidebarType.classList.remove('active') document.querySelector('.sidebar-default').classList.remove(sidebarType.getAttribute('data-value')) const sidebarTypeIndexOf = sidebarTypeSetting.findIndex(type => type === sidebarType.getAttribute('data-value')) sidebarTypeSetting.splice(sidebarTypeIndexOf, 1) if (sidebarType.getAttribute('data-extra-value') !== null) { document.querySelector('.sidebar-default').classList.remove(sidebarType.getAttribute('data-extra-value')) document.querySelector(`[data-value="${sidebarType.getAttribute('data-extra-value')}"]`).classList.remove('active') const sidebarExtraTypeIndexOf = sidebarTypeSetting.findIndex(type => type === sidebarType.getAttribute('data-extra-value')) sidebarTypeSetting.splice(sidebarExtraTypeIndexOf, 1) } } else { Array.from(document.querySelectorAll(`[data-value="${sidebarType.getAttribute('data-value')}"]`), (el) => el.classList.add('active')) document.querySelector('.sidebar-default').classList.add(sidebarType.getAttribute('data-value')) if (sidebarTypeSetting.indexOf(sidebarType.getAttribute('data-value')) === -1) { sidebarTypeSetting.push(sidebarType.getAttribute('data-value')) } if (sidebarType.getAttribute('data-extra-value') !== null) { document.querySelector('.sidebar-default').classList.add(sidebarType.getAttribute('data-extra-value')) Array.from(document.querySelectorAll(`[data-value="${sidebarType.getAttribute('data-extra-value')}"]`), (el) => el.classList.add('active')) if(sidebarTypeSetting.indexOf(sidebarType.getAttribute('data-extra-value')) === -1) { sidebarTypeSetting.push(sidebarType.getAttribute('data-extra-value')) } } } localStorage.setItem('sidebarType', JSON.stringify(sidebarTypeSetting)) }) }) //Sidebar Active Style const allActiveType = document.querySelectorAll('[data-setting="sidebar"][data-name="sidebar-item"]') Array.from(allActiveType, (activeStyle) => { activeStyle.addEventListener('click', (e) => { if(!activeStyle.classList.contains('active')){ Array.from(allActiveType, (el) => { el.classList.remove('active') document.querySelector('.sidebar-default').classList.remove(el.getAttribute('data-value')) }) localStorage.setItem('sidebar-style', activeStyle.getAttribute('data-value')) activeStyle.classList.add('active') Array.from(document.querySelectorAll(`[data-value="${activeStyle.getAttribute('data-value')}"]`), (el) => el.classList.add('active')) changeMode('sidebar', activeStyle.getAttribute('data-value')) } }) }) // Navbar Style const allNavbarType = document.querySelectorAll('[data-setting="navbar"][data-name="navbar-type"]') Array.from(allNavbarType, (navbarType) => { navbarType.addEventListener('click', (e) => { Array.from(allNavbarType, (el) => { el.classList.remove('active') document.querySelector(el.getAttribute('data-target')).classList.remove(el.getAttribute('data-value')) }) localStorage.setItem('navbarTypes', navbarType.getAttribute('data-value')) Array.from(document.querySelectorAll(`[data-value="${navbarType.getAttribute('data-value')}"]`), (el) => el.classList.add('active')) document.querySelector(navbarType.getAttribute('data-target')).classList.add(navbarType.getAttribute('data-value')) changeMode('navbarTypes', navbarType.getAttribute('data-value'), navbarType.getAttribute('data-target')) }) }) // Navbar default style const defaultNavbarType = document.querySelector('[data-setting="navbar"][data-name="navbar-default"]') if (defaultNavbarType !== null) { defaultNavbarType.addEventListener("click", (e) => { document.querySelector('.iq-navbar').classList.remove('nav-glass','navs-sticky', 'navs-transparent') document.querySelector('.iq-navbar-header').classList.remove('navs-bg-color') localStorage.setItem('navbarTypes', '') }) } // For colorChange Mode const customizerMode = (custombodyclass,colors,colorInfo) => { document.querySelector('body').classList.add(`${custombodyclass}`) localStorage.setItem('colorcustomchart-mode', getComputedStyle(document.body).getPropertyValue('--bs-primary')) document.documentElement.style.setProperty('--bs-info', colors); const color = localStorage.getItem('colorcustomchart-mode') if(color !== 'null' && color !== undefined && color !== ''){ const event = new CustomEvent("ColorChange", {detail :{detail1:color.trim(), detail2:colors.trim()}}); document.dispatchEvent(event); } else{ const event = new CustomEvent("ColorChange", {detail :{detail1:colorInfo.trim(), detail2:colors.trim()}}); document.dispatchEvent(event); } const elements = document.querySelectorAll('[data-setting="color-mode1"][data-name="color"]') Array.from(elements, (mode) => { const colorclass = mode.getAttribute('data-value'); if(colorclass === custombodyclass ){ mode.classList.add('active') } else{ mode.classList.remove('active') } }) } const elements = document.querySelectorAll('[data-setting="color-mode1"][data-name="color"]') Array.from(elements, (mode) => { mode.addEventListener('click', (e) => { Array.from(elements, (el) => { el.classList.remove('active') document.querySelector('body').classList.remove(el.getAttribute('data-value')) }) localStorage.setItem('colorcustom-mode', mode.getAttribute('data-value')) localStorage.setItem('colorcustominfo-mode', mode.getAttribute('data-info')) mode.classList.add('active') const colors = mode.getAttribute('data-info'); const color = getComputedStyle(document.body).getPropertyValue('--bs-primary'); customizerMode(mode.getAttribute('data-value'),colors,color) }) }) const custombodyclass = localStorage.getItem('colorcustom-mode') const colors = localStorage.getItem('colorcustominfo-mode') const color = localStorage.getItem('colorcustomchart-mode') if(custombodyclass !== null && custombodyclass !== undefined && colors !== null && colors !== undefined){ customizerMode(custombodyclass,colors,color) } })()