设置获取配置的APIs
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.org/scripts/476522/1260006/Config_Manager.js
// ==UserScript==
// @name Config_Manager
// @namespace Violentmonkey Scripts
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addValueChangeListener
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @author axototl
// @license AGPL-3.0-or-later
// @description 设置获取配置的APIs
// ==/UserScript==
'use strict';
let config = {};
let register;
(() => {
// const _APIs = ["GM_getValue", "GM_setValue", "GM_addValueChangeListener", "GM_registerMenuCommand", "GM_unregisterMenuCommand"];
// for (const val in _APIs)
// if (!(val in globalThis)) throw new Error("需要API权限!!!");
const boolean_prefix = ["❌(已禁用)", "✅(已启用)"];
const int_family = ['uint', 'int'];
config = {};
register = ({name, default: def, type = "other", prompts, tips: ipt, input: func = prompt, callback: listener = Function.prototype}) => {
let val = GM_getValue(name, def);
config[name] = val;
if (int_family.includes(type)) {
const judge = (type === 'uint') ? (s => (s|0) < 0) : (()=>false);
if (func === prompt) {
func = () => {
let p;
do {p = prompt(ipt);} while(isNaN(p) || judge(p));
return p;
};
}
type = 'other';
}
if (type === 'bool') {
let cont;
const reg = () => cont = GM_registerMenuCommand(boolean_prefix[val | 0] + prompts, () => GM_setValue(name, !val));
GM_addValueChangeListener(name, (_1, ov, newval) => {
config[name] = val = newval;
GM_unregisterMenuCommand(cont);
reg();
listener(name, ov, newval, cont);
});
reg();
} else if (type === "other") {
const cont = GM_registerMenuCommand(prompts, () => GM_setValue(name, func()));
GM_addValueChangeListener(name, (_1, ov, newval) => (config[name] = newval, listener(name, ov, newval, cont)));
}
console.debug(type, name, "\nRegistered!");
};
})();