Tampermonkey Config

Simple Tampermonkey script config library

目前為 2023-07-05 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.gf.qytechs.cn/scripts/470224/1215817/Tampermonkey%20Config.js

// ==UserScript==
// @name         Tampermonkey Config
// @name:zh-CN   Tampermonkey 配置
// @license      gpl-3.0
// @namespace    http://tampermonkey.net/
// @version      0.1.0
// @description  Simple Tampermonkey script config library
// @description:zh-CN  简易的 Tampermonkey 脚本配置库
// @author       PRO
// @match        https://pro-2684.github.io/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// ==/UserScript==

let wrapper = (validator) => {
    return {
        get: function (target, name) {
            // Return stored value, if any
            let value = GM_getValue(name);
            if (value !== undefined) {
                return value;
            }
            // Return default value
            return target[name];
        }
        , set: function (target, name, value) {
            if (validator === undefined || validator(name, value)) {
                // Store value
                GM_setValue(name, value);
                // Return success
                return true;
            } else {
                return false;
            }
        }, enumerate: function (target) {
            // Return all keys in default_values
            return Object.keys(target);
        }
    }
}

let config_menu_ids = [];

function register(config) { // Register menu commands based on given config
    // Unregister old menu commands
    let id;
    while (id = config_menu_ids.pop()) GM_unregisterMenuCommand(id);
    // Register menu commands
    for (let [k, v] of Object.entries(config)) {
        // console.log(k, v); // DEBUG
        let id = GM_registerMenuCommand(`${k}: ${v}`, function () {
            let new_value = prompt(`🤔 New value for ${k}:`, v);
            if (new_value === null) {
            } else {
                config[k] = new_value;
                // console.log(`Set ${k} to ${new_value}`); // DEBUG
                if (config[k] === new_value) register(config);
                else alert("⚠️ Invalid value!");
            }
        });
        config_menu_ids.push(id);
    }
}

QingJ © 2025

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