Config_Manager

设置获取配置的APIs

当前为 2023-10-12 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/476522/1263413/Config_Manager.js

  1. // ==UserScript==
  2. // @name Config_Manager
  3. // @namespace Violentmonkey Scripts
  4. // @grant GM_getValue
  5. // @grant GM_setValue
  6. // @grant GM_addValueChangeListener
  7. // @grant GM_registerMenuCommand
  8. // @grant GM_unregisterMenuCommand
  9. // @author axototl
  10. // @license AGPL-3.0-or-later
  11. // @description 设置获取配置的APIs
  12. // ==/UserScript==
  13. 'use strict';
  14.  
  15. const config = {};
  16. let register;
  17. const inplace = (() => {
  18. const id = "test";
  19. const cap = GM_registerMenuCommand("测试", Function.prototype, {id});
  20. return (cap === id);
  21. })();
  22.  
  23. (() => {
  24. (() => {
  25. 'use strict';
  26. const _APIs = ["GM_getValue", "GM_setValue", "GM_addValueChangeListener", "GM_registerMenuCommand", "GM_unregisterMenuCommand"];
  27. for (const val in _APIs)
  28. if (eval("typeof " + val) === 'undefined') throw new Error("需要" + val + " API权限!!!");
  29. })();
  30.  
  31. const boolean_prefix = ["❌(已禁用) ", "✅(已启用) "];
  32. const int_family = ['uint', 'int'];
  33. register = ({name, default: def, type = "other", decs: prompts, tips: ipt, input: func = prompt, callback: listener = Function.prototype, init = false, autoClose = true}) => {
  34. let val = GM_getValue(name, def);
  35. config[name] = val;
  36. if (typeof init === 'function') init(name, val);
  37. if (int_family.includes(type)) {
  38. const judge = (type === 'uint') ? (s => (s|0) < 0) : (()=>false);
  39. if (func === prompt) {
  40. func = () => {
  41. let p;
  42. do {p = prompt(ipt);} while(isNaN(p) || judge(p));
  43. return p;
  44. };
  45. }
  46. type = 'other';
  47. }
  48. if (type === 'bool') {
  49. let cont;
  50. const reg = () => cont = GM_registerMenuCommand(boolean_prefix[val | 0] + prompts, () => GM_setValue(name, !val), {id: name, autoClose});
  51. if (true == init) listener(name, val, val, cont);
  52. GM_addValueChangeListener(name, !inplace ? (_1, ov, newval) => {
  53. config[name] = val = newval;
  54. GM_unregisterMenuCommand(cont);
  55. reg();
  56. listener(name, ov, newval, cont);
  57. } : (_1, ov, nv) => (config[name] = val = nv, reg(), listener(name, ov, nv, cont)));
  58. reg();
  59. } else if (type === "other") {
  60. const cont = GM_registerMenuCommand(prompts, () => GM_setValue(name, func()), {id: name, autoClose});
  61. if (true == init) listener(name, val, val, cont);
  62. GM_addValueChangeListener(name, (_1, ov, newval) => (config[name] = newval, listener(name, ov, newval, cont)));
  63. }
  64. console.debug(type, name, "\nRegistered!");
  65. };
  66. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址