壁紙変更(Feederチャット)

Feederチャットの背景画像を変更するスクリプトです。

Versione datata 25/09/2020. Vedi la nuova versione l'ultima versione.

// ==UserScript==
// @name         壁紙変更(Feederチャット)
// @namespace    http://tampermonkey.net/
// @version      0.16
// @description  Feederチャットの背景画像を変更するスクリプトです。
// @author       You
// @match        *.x-feeder.info/*/
// @match        *.x-feeder.info/*/sp/
// @exclude      *.x-feeder.info/*/settings/**
// @require      https://greasyfork.org/scripts/396472-yaju1919/code/yaju1919.js?version=802405
// @require      https://greasyfork.org/scripts/387509-yaju1919-library/code/yaju1919_library.js?version=755144
// @require      https://greasyfork.org/scripts/388005-managed-extensions/code/Managed_Extensions.js?version=720959
// @grant        GM.setValue
// @grant        GM.getValue
// ==/UserScript==

(function(unsafeWindow) {
    'use strict';

    function setConfig() {
        var $ = unsafeWindow.$;
        var yaju1919 = window.yaju1919;
        var old_yaju1919 = yaju1919_library;
        var h = $("<div>");
        var backgroundColor_copy = $("#wrapper").css("background-color");
        var backgroundImage_copy = $("body").css("background-image");
        var si; // setIntervalのidを格納する変数
        //////////////////////////////////////////////////
        var inputImgChangeBool = yaju1919.addInputBool(h, {
            title: "壁紙変更",
            value: false,
            change: (function() {
                setChange(true);
            })
        });
        var inputChangeBtn = addBtn(h, "設定を反映", (function() {
            setChange(false);
        }));
        var inputImgUrl = yaju1919.addInputText(h, {
            title: "画像URL",
            placeholder: "背景画像のURLを改行で区切って入力",
            save: "inputImgUrl",
            width: "90%",
            textarea: true,
            change: (function() {
                if (inputImgUrl == undefined) return;
                setTimeout((function() {
                    h.find("textarea").eq(0).val([...new Set(inputImgUrl().split("\n").filter((function(v) {
                        return v.match(/^(https?|data):\/\/.+$/);
                    })))].join("\n"));
                }));
            })
        });
        var changeIntervalText = $("<div>").text("変更間隔: 5秒").appendTo(h);
        var inputChangeInterval = old_yaju1919.appendInputRange(h, {
            save: "inputChangeInterval",
            width: "90%",
            value: 5,
            min: 5,
            max: 600,
            step: 1,
            change: (function() {
                changeIntervalText.text("変更間隔: " + timeConvert(inputChangeInterval()));
            })
        });
        h.append("<br>フィルタの色: ");
        var inputSelectColor = $("<input>", {
            type: "color",
            value: "#000000"
        }).change((function() {
            yaju1919.save("inputSelectColor", inputSelectColor.val());
        })).appendTo(h);
        var filterOpacityText = $("<div>").text("フィルタの不透明度: 0%").appendTo(h);
        var inputFilterOpacity = old_yaju1919.appendInputRange(h, {
            save: "inputFilterOpacity",
            width: "90%",
            value: 0,
            min: 0,
            max: 100,
            step: 1,
            change: (function() {
                filterOpacityText.text("フィルタの不透明度: " + inputFilterOpacity() + "%");
            })
        });
        //////////////////////////////////////////////////
        setTimeout((function() { // 起動時にsetTimeoutで遅延してから値を読み込む
            changeIntervalText.text("変更間隔: " + timeConvert(inputChangeInterval()));
            yaju1919.load("inputSelectColor", (function(r) {
                inputSelectColor.val(r);
            }));
            filterOpacityText.text("フィルタの不透明度:" + inputFilterOpacity() + "%");
        }));
        //////////////////////////////////////////////////
        function addBtn(h, title, func) { // ボタンを追加する関数
            return $("<button>").text(title).click(func).appendTo(h);
        };

        function timeConvert(second) { // 秒数から分秒に変換する関数
            var min = Math.floor(second / 60);
            var sec = second % 60;
            var timeText = sec + "秒";
            if (min !== 0) timeText = min + "分" + timeText;
            return timeText;
        };

        function setImg(change_flag) {
            var urlIndex = inputImgUrl().split("\n").indexOf($("body").css("background-image").match(/^url\("((https?|data):\/\/.+)"\)$/)[1]);
            if (!inputImgUrl().split("\n")[urlIndex + 1] && change_flag) {
                urlIndex = 0;
            } else if (!change_flag) {
                yaju1919.load("urlIndex", (function(r) {
                    urlIndex = Number(r);
                }));
            } else urlIndex++;
            if (change_flag) yaju1919.save("urlIndex", urlIndex);
            setTimeout((function() {
                $("#wrapper").css("background-color", "transparent");
                yaju1919.setBgImg(inputImgUrl().split("\n")[urlIndex], {
                    color: inputSelectColor.val(),
                    opacity: Number(inputFilterOpacity()) / 100
                });
            }))
        };

        function setChange(change_flag) {
            setTimeout((function() {
                $("#wrapper").css("background-color", backgroundColor_copy);
                $("body").removeAttr("style").css("background-image", backgroundImage_copy);
                yaju1919.setBgImg(null, {
                    opacity: 0
                });
                clearInterval(si);
                if (!inputImgChangeBool() || inputImgUrl() === "") return;
                setImg(change_flag);
                si = setInterval((function() {
                    setImg(true);
                }), Number(inputChangeInterval()) * 1000);
            }));
        };
        //////////////////////////////////////////////////
        return h;
    };
    unsafeWindow.Managed_Extensions["壁紙変更"] = {
        config: setConfig,
        tag: "装飾"
    };
})(this.unsafeWindow || window);