HMCL-docs/assets/js/settings.js
2026-03-15 12:44:04 +00:00

74 lines
2.4 KiB
JavaScript

(function (global) {
var PREFIX = "HMCL_DOCS_SETTINGS_";
var data = {};
var events = {};
var config = /**//**/{"appearance_color":{"type":"radio","default":"light","options":["light","dark","auto"]},"appearance_skin_light":{"type":"radio","default":"default","options":["default","air","aqua","contrast","dark","dirt","neon","mint","plum","sunrise"]},"appearance_skin_dark":{"type":"radio","default":"dark","options":["default","air","aqua","contrast","dark","dirt","neon","mint","plum","sunrise"]}}/**/;
global.addEventListener("storage", function (event) {
if (!event.key) return;
if (event.key.indexOf(PREFIX) !== 0) return;
var handlers = events[event.key];
if (!handlers) return;
var newValue = event.newValue;
var oldValue = event.oldValue;
if (oldValue === newValue) return;
data[event.key] = newValue;
for (var i = 0; i < handlers.length; i++) {
if (typeof handlers[i] === "function") {
handlers[i](newValue, oldValue);
}
}
});
var settings = {
set: function (key, value) {
if (config[key] === undefined) return;
var strKey = (PREFIX + key).toUpperCase();
var newValue = value + "";
data[strKey] = newValue;
localStorage.setItem(strKey, newValue);
var handlers = events[strKey];
if (!handlers) return;
for (var i = 0; i < handlers.length; i++) {
if (typeof handlers[i] === "function") {
handlers[i](newValue);
}
}
},
get: function (key, defaultValue) {
if (config[key] === undefined) return;
var strKey = (PREFIX + key).toUpperCase();
data.hasOwnProperty(strKey) || (data[strKey] = localStorage.getItem(strKey));
if (typeof defaultValue === "string" && data[strKey] === null) {
return defaultValue;
}
return data[strKey];
},
refresh: function (key) {
if (config[key] === undefined) return;
settings.set(key, settings.get(key, config[key].default));
},
onChange: function (key, handler) {
if (config[key] === undefined) return;
if (typeof handler !== "function") return;
var strKey = (PREFIX + key).toUpperCase();
if (config[key].type === "radio") {
handler(settings.get(key, config[key].default));
}
if (!events[strKey]) {
events[strKey] = [handler];
} else {
events[strKey].push(handler);
}
}
};
global.settings = settings;
})(window);