VvebOIDC/public/admin/default/js/theme.js

151 lines
4.2 KiB
JavaScript

window.delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
//let theme = localStorage.getItem("theme", "dark");
let theme = document.documentElement.dataset.bsTheme;
if (theme) {
if (theme == "dark") {
let themeSwitch = document.querySelector("#color-theme-switch i");
themeSwitch.classList.remove("la-sun")
themeSwitch.classList.add("la-moon");
}
}
//let smallNav = localStorage.getItem("sidebar-size", "small-nav");
let smallNav = document.cookie.indexOf("sidebar-size=small-nav") > 0;
if (smallNav) {
document.getElementById("container").classList.add(smallNav);
}
function setCookie(name, value) {
//try to set cookie to all subdomains
document.cookie = name + "=" + value + ";path=/;domain=." + window.location.host.replace(/^.*?\./, '') + ";";
document.cookie = name + "=" + value + ";";
}
let onReady = function() {
document.querySelector(".menu-toggle")?.addEventListener("click", function(event) {
let container = document.getElementById("container");
if (container.classList.contains("small-nav")) {
container.classList.remove("small-nav");
smallNav = "";
} else {
smallNav = "small-nav";
container.classList.add(smallNav);
}
//localStorage.setItem('sidebar-size', smallNav);
setCookie('sidebar-size', smallNav);
});
let themeSwitch = document.querySelector("#color-theme-switch i");
themeSwitch.addEventListener("click", function (event) {
let theme = document.documentElement.dataset.bsTheme;
if (theme == "dark") {
theme = "light";
themeSwitch.classList.remove("la-moon")
themeSwitch.classList.add("la-sun");
} else if (theme == "light" || theme == "auto" || !theme) {
theme = "dark";
themeSwitch.classList.remove("la-sun")
themeSwitch.classList.add("la-moon");
} else {
theme = "auto";
}
document.documentElement.dataset.bsTheme = theme;
//localStorage.setItem("theme", theme);
setCookie("theme", theme);
//serverStorage.setItem();
});
};
if (document.readyState !== "loading") {
onReady();
} else {
document.addEventListener('DOMContentLoaded', onReady);
}
function generateElements(html) {
const template = document.createElement('template');
template.innerHTML = html.trim();
return template.content.children;
}
/*
function displayToast(bg, title, message, id = "top-toast") {
document.querySelector("#" + id + " .toast-body .message").innerHTML = message;
let header = document.querySelector("#" + id + " .toast-header");
header.classList.remove(["bg-danger", "bg-success"])
header.classList.add(bg);
header.querySelector("strong").innerHTML = title;
let toast = document.querySelector("#" + id + " .toast").cloneNode();
toast.classList.add("show");
delay(() => toast.remove(), 5000);
}
*/
//ajax url
function loadAjax(url, selector, callback = null, params = {}, method = "get") {
let options = {method};
if (params) {
let p = new URLSearchParams(params);
if (method == "post") {
options.body = p;
} else {
url += (url.indexOf('?') > 0 ? '&' :'?') + p.toString();
}
}
fetch(url, options).
then((response) => {
if (!response.ok) { throw new Error(response) }
return response.text()
}).then(function (data) {
if (selector) {
let response = new DOMParser().parseFromString(data, "text/html");
if (Array.isArray (selector) ) {
for (const k in selector) {
let elementSelector = selector[k];
let currentElement = document.querySelector(elementSelector);
let newElement = response.querySelector(elementSelector);
if (currentElement && newElement) {
currentElement.replaceWith(newElement);
}
}
} else {
let currentElement = document.querySelector(selector);
let newElement = response.querySelector(selector);
if (currentElement && newElement) {
currentElement.replaceWith(newElement);
}
}
if (callback) callback();
}
window.dispatchEvent(new CustomEvent("vvveb.loadUrl", {detail: {url, selector}}));
}).catch(error => {
console.log(error.statusText);
});
}
var VvvebTheme = {};
VvvebTheme.ajax = {
selector:"a[data-url], a[data-page-url], a[data-v-url]",
siteContainer:["#main-content"],
scrollContainer:"body",
skipUrl:[]
}