您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows you to manage script settings through GM menu
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/14604/92266/ScriptSettings.js
// ==UserScript== // @id ScriptSettings // @name ScriptSettings // @description Allows you to manage script settings through GM menu // @include * // @run-at document-end // ==/UserScript== 'use strict'; function ScriptSettings(a) { this.schema = a; this.proxy = new Proxy(this, { get : this.get.bind(this), set : this.set.bind(this), keys : this.keys.bind(this) }); this.gui = {}; this.createGUI(); return this.proxy; } ScriptSettings.prototype.getDefault = function (a) { if (Array.isArray(this.schema[a])) { return this.schema[a][0]; } switch (typeof this.schema[a]) { case 'number': ; case 'boolean': ; case 'string': return this.schema[a]; default: throw Error('OH SHIT!'); ; } }; ScriptSettings.prototype.get = function (a, b) { return GM_getValue(b, this.getDefault(b)); }; ScriptSettings.prototype.set = function (a, b, c) { GM_setValue(b, c); if (void 0 !== this.gui[b]) { this.gui[b].onChange(); } }; ScriptSettings.prototype.keys = function () { return GM_listValues(); }; ScriptSettings.prototype.createGUI = function () { for (let a in this.schema) { this.gui[a] = new SettingGui(this, a); } }; function SettingGui(a, b) { let c = void 0; if (Array.isArray(a.schema[b])) { c = SettingEnum; } else { switch (typeof a.schema[b]) { case 'number': c = SettingNumber; break; case 'boolean': c = SettingBoolean; break; case 'string': c = SettingString; break; default: throw Error('Unsupported type: ' + typeof a.schema[b]); ; } } var d = Object.create(c.prototype); d.settings = a; d.name = b; d.act = d.act.bind(d); d.onChange(); c.call(d, b); return d; } SettingGui.prototype.onChange = function () { this.command && GM_unregisterMenuCommand(this.command); this.command = GM_registerMenuCommand(this.name + ':' + this.settings.proxy[this.name], this.act); }; SettingGui.prototype.act = function () { this.settings.proxy[this.name] = this.ackquire(); }; function SettingEnum(a) { this.val = 0; } SettingEnum.prototype = Object.create(SettingGui.prototype); SettingEnum.prototype.ackquire = function () { this.val = (this.val + 1) % this.settings.schema[this.name].length; return this.settings.schema[this.name][this.val]; }; function SettingString(a) {} SettingString.prototype = Object.create(SettingGui.prototype); SettingString.prototype.ackquire = function () { return prompt('input new value of ' + this.name, this.settings.proxy[this.name]); }; function SettingNumber(a) {} SettingNumber.prototype = Object.create(SettingString.prototype); SettingNumber.prototype.ackquire = function () { this.settings.proxy[this.name] = new Number(SettingString.prototype.ackquire.call(this)); }; function SettingBoolean(a) {} SettingBoolean.prototype = Object.create(SettingString.prototype); SettingBoolean.prototype.ackquire = function () { this.settings.proxy[this.name] = !this.settings.proxy[this.name]; };