Greasy Fork

Key-Based Config

A script for interfacing with my Key-Based Config UI.

目前为 2021-01-10 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.icu/scripts/419978/889561/Key-Based%20Config.js

// ==UserScript==
// @name        Key-Based Config
// @author      Callum Latham <[email protected]> (https://github.com/ctl2/key-based-config)
// @exclude     *
// @description A script for interfacing with my Key-Based Config UI.
// ==/UserScript==

let iframeExists = false;

function openKbc(title, metaTree, valueForest, changeCallback, closeCallback) {

    if (iframeExists) throw new Error("A key-based-config iFrame already exists.");
    if (typeof changeCallback !== "function" && typeof closeCallback !== "function") throw new Error("A callback function is required");

    iframeExists = true;
    const kbcSrc = "http://ctl-bucket-1.s3-website.eu-west-2.amazonaws.com/key-based-config";

    let iframe = document.createElement("iframe");
    iframe.src = kbcSrc;
    iframe.style.position = "fixed";
    iframe.style.height = "100vh";
    iframe.style.width = "100vw";

    window.addEventListener("message", (message) => {
        switch (message.data.event) {
            case "open":
                iframe.contentWindow.postMessage({
                    title: title,
                    metaTree: metaTree,
                    valueForest: valueForest
                }, "*");
                break;
            case "change":
                if (typeof changeCallback === "function") changeCallback(message.data.valueForest);
                break;
            case "close":
                iframeExists = false;
                iframe.remove();
                if (typeof closeCallback === "function") closeCallback(message.data.valueForest);
                break;
            default:
                console.error("unrecognised message type '" + message.data.type + "'");
        }
    });

}