sophuwu.site > manhttpd   
              161
            
             const style = document.getElementById("styleCss");
const styleCss = style.innerHTML;

const ValidKeys = ["theme", "contrast", "scale"];
const Valid_theme = ["dark", "warm", "light"];
const Valid_contrast = ["low", "medium", "high"];
const Valid_scale = ["-", "0", "+"];


function SetStyle() {
    let tmp = ":root {\n";
    ValidKeys.forEach(key => {
        let value = localStorage.getItem(key);
        if (value) tmp += "--" + key + ": " + value + ";\n";
    });
    tmp += "}\n\n";
    style.innerHTML = tmp + styleCss;
    ValidKeys.forEach(key => function (key) {
        if (butts[key]["arr"].length < 3) return;
        let value = localStorage.getItem(key);
        if (!value) {
            if (key == "theme") value = "dark";
            else if (key == "contrast") value = 1;
            else return;
        }
        if (value >= 0 && value <= 2) value = Valid_contrast[value];
        else if (value.startsWith("var(--")) value = value.substring("var(--".length, value.length - 1);
        butts[key]["arr"].forEach(b => b.classList.remove("butt-set"));
        butts[key]["map"][value].classList.add("butt-set");
    }(key));
}
function SaveValue(key, value) {
    if (!ValidKeys.includes(key)) return;
    localStorage.setItem(key, value);
    SetStyle();
}


function SetTheme(theme=null) {
    if (theme==null) {
        let value = localStorage.getItem("theme");
        if (!value) value = "var(--dark)";
        value = value.replace("var(--", "").replace(")", "");
        HlButt("theme", value);
    }
    if (!Valid_theme.includes(theme)) return;
    theme = "var(--" + theme + ")";
    SaveValue("theme", theme);
}

function SetContrast(contrast=null) {
    if (contrast==null) {

        if (!value) value = "1";
        value = Valid_contrast[value];
        HlButt("contrast", value);
    }
    if (!Valid_contrast.includes(contrast)) return;
    SaveValue("contrast", Valid_contrast.indexOf(contrast));
}

function SetScale(scale) {
    if (!Valid_scale.includes(scale)) return;
    let value = localStorage.getItem("scale");
    if (!value) value = 1;
    let diff = (0.1 * (Valid_scale.indexOf(scale) - 1));
    if (diff != 0) {
        value = parseFloat(value) + diff;
        if (value < 0.1) value = 0.1;
        if (value > 2) value = 2;
        value = value.toFixed(1);
        SaveValue("scale", value);
    }
    document.getElementById("scaleVal").innerHTML = (value*100).toFixed(0) + "%"
}

function ResetStyle() {
    ValidKeys.forEach(key => {
        localStorage.removeItem(key);
    });
    SetStyle();
    SetScale("0");
}
function H(elem) {
    return {l: elem.innerHTML.toLowerCase(), n: elem.innerHTML};
}

function Menu(wants="search"){
    let mainClick = [`document.getElementById("main-content").`,`EventListener("click", function () {Menu()})`];

    let n = document.getElementById(wants);
    if (!n || !n.classList.contains("menu")) return;

    eval(mainClick.join(function (b){
        if (b) return "remove";
        return "add";
    }(wants == "search")));

    let l = function (elem) {return {
        e: function (e){e==elem},
        h: elem.classList.contains("hidden"),
        t: function () {elem.classList.toggle("hidden")},
    };};
    document.querySelectorAll(".menu").forEach(ee => function (e){
        if (e.e(n) || e.h) return;
        e.t();
    }(l(ee)));
    n = l(n);
    if (n.h) n.t();
}

function Butt() {
    let butts = new Object();
    ValidKeys.forEach(key => function (key) {
        butts[key]=new Object();
        eval("Valid_"+key).forEach(v => function (v) {
            butts[key][v]=null;
        }(v));
    }(key));
    return butts;
};

var butts = Object();

document.addEventListener("DOMContentLoaded", function () {
    document.querySelectorAll("#settings > div > h3").forEach(elemH => function (elemH,n) {
        if (!ValidKeys.includes(n.l)) return;
        butts[n.l]= new Object({});
        butts[n.l]["h"] = elemH;
        butts[n.l]["div"] = elemH.parentElement;
        butts[n.l]["arr"] = [];
        butts[n.l]["map"] = new Object({});
        elemH.parentElement.querySelectorAll("button").forEach(butt => function (butt, fun, v) {
            let i = butts[n.l]["arr"].push(butt);
            butts[n.l]["map"][v] = butts[n.l]["arr"][i-1];
            butt.addEventListener("click",  function () {fun(v)});
        }(butt,eval("Set" + n.n), H(butt).l));
    }(elemH,H(elemH)));
    SetStyle();
    SetScale("0");
});

function ChangeRawQuery(s="") {
	let u = document.URL;
	let i = u.indexOf("?");
	if (s.length > 0 && !s.startsWith("?")) {
		s = "?" + s;
	}
	if (i == -1) {
		return u + s;
	}
	return u.substring(0, i) + s;
}
function SetRawQuery(s="") {
	let u = ChangeRawQuery(s);
	window.history.pushState({"html":document.toString(),"pageTitle":document.title},"", u);
}
function GoToRawQuery(s) {
	let u = ChangeRawQuery(s);
	window.location.href = u;
}