Greasy Fork is available in English.

$Config

Allows users to configure scripts.

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.greasyfork.org/scripts/446506/1522829/%24Config.js

作者
ctl2
版本
0.0.1.20250118222422
建立日期
2022-06-15
更新日期
2025-01-18
尺寸
337.8 KB
授權條款
未知

Example instance hosted here. Source code available here.

Usage

// Define a config

const $config = new $Config(
    'STORAGE_KEY',
    {
        get: (_, configs) => ({data: Object.assign(...configs)}),
        children: [
            {label: 'a', value: 0, get: ({value: a}) => ({a})},
            {label: 'b', value: 1, get: ({value: b}) => ({b})},
            {label: 'c', value: 2, get: ({value: c}) => ({c})}
        ]
    },
);

// Await config load & handle problems

try {
    await $config.ready;
} catch (error) {
    if (!$config.reset) {
        // There's a problem with the arguments passed to the $Config constructor
        throw error;
    }

    // There's a problem with the user's data (could be from manual editing or a script update)
    if (!window.confirm(`${error.message}\n\nWould you like to erase your data?`)) {
        return;
    }

    $config.reset();
}

// Apply the user's config

function useConfig() {
    const {a, b, c} = $config.get().data;

    // Use the config...
}

useConfig();

// Set up config editing

const button = document.createElement('button');

button.addEventListener('click', async () => {
    await $config.edit();

    useConfig();
});

Constructor arguments (* = optional):

  1. [string] An identifier used to store data
  2. [Root] A schema for user config data
  3. [DefaultStyle*] Instructions for customizing the UI's appearance
  4. [object*] CSS to apply to the UI's root element