355 lines
16 KiB
JavaScript
355 lines
16 KiB
JavaScript
|
/*
|
||
|
* 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)
|
||
|
}
|
||
|
|
||
|
})()
|