Key-Based Config

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

2021-01-10 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트는 직접 설치하는 용도가 아닙니다. 다른 스크립트에서 메타 지시문 // @require https://update.greasyfork.org/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 + "'");
        }
    });

}