mirror of
https://gitee.com/huanghongxun/HMCL-docs.git
synced 2025-12-14 03:12:40 +08:00
77 lines
2.1 KiB
JavaScript
77 lines
2.1 KiB
JavaScript
---
|
|
layout: null
|
|
---
|
|
(function (global) {
|
|
var PREFIX = "HMCL_DOCS_SETTINGS_";
|
|
var data = {};
|
|
var events = {};
|
|
var config = /*{%comment%}*/{}/*{%endcomment%}*//**{{'/'}}{{ site.data.settings | jsonify }}/**/;
|
|
|
|
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);
|