$Config

Allows users to configure scripts.

This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greasyfork.org/scripts/446506/1491127/%24Config.js

Autor
ctl2
Verzija
0.0.1.20241125231604
Napravljeno
15/06/2022
Ažurirano
25/11/2024
Licenca
Nije dostupno

Example instance hosted here. Source code available here.

Usage

// Request a config

const $config = new $Config(
    'Example Title',
    'STORAGE_KEY',
    {
        'children': [
            {'label': 'node0'},
            {'label': 'node1'},
            {'label': 'node2'}
        ]
    },
    ([node0, node1, node2]) => ({
        value0: node0.value,
        value1: node1.value,
        value2: node2.value,
    }),
);

// 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 {value0, value1, value2} = $config.get();

    // 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. [ParentCallback] The function used to convert tree data into a convenient format for your script
  4. [string] The config modal's title
  5. [DefaultStyle*] Instructions for customizing the UI's appearance
  6. [object*] CSS to apply to the UI's root element

See the following scripts for practical examples: