LinkStack/assets/js/plugins/setting.js

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)
}
})()