Greasy Fork is available in English.

壁紙変更(Feederチャット)

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

2020/09/27時点のページです。最新版はこちら。

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         壁紙変更(Feederチャット)
// @namespace    http://tampermonkey.net/
// @version      0.18
// @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';
    unsafeWindow.Managed_Extensions["壁紙変更"] = {
        config: (function() {
            var $ = unsafeWindow.$;
            var yaju1919 = window.yaju1919;
            var old_yaju1919 = yaju1919_library;
            var backgroundColor_copy = $("#wrapper").css("background-color"); // デフォルトの背景色をコピー
            var intervalId, filterElement; // intervalIdはsetIntervalのidを格納する変数、filterElementはフィルタの要素を格納する変数
            var h = $("<div>");
            //////////////////////////////////////////////////
            var inputChangeBool = yaju1919.addInputBool(h, { // 壁紙変更
                title: "壁紙変更",
                value: false,
                change: (function() {
                    main();
                })
            });
            h.append("<hr>");
            var inputImageUrls = yaju1919.addInputText(h, { // 画像URL
                save: "inputImageUrls",
                title: "画像URL",
                placeholder: "背景画像のURLを改行で区切って入力",
                width: "90%",
                textarea: true,
                change: (function() {
                    setTimeout((function() {
                        h.find("textarea").val([...new Set(inputImageUrls().split("\n").filter((function(v) {
                            return v.match(/^(https?|data):\/\/.+$/);
                        })))].join("\n"));
                        main();
                    }));
                })
            });
            var inputInterval_text = $("<div>").text("変更間隔: 5秒").appendTo(h);
            var inputInterval = old_yaju1919.appendInputRange(h, { // 変更間隔
                save: "inputInterval",
                width: "90%",
                value: 5,
                min: 5,
                max: 300,
                step: 1,
                change: (function() {
                    loadValue();
                    main("keep");
                })
            });
            // フィルタ関係の入力要素
            h.append("<br>フィルタの色: ");
            var inputColor = $("<input>", { // フィルタの色
                type: "color",
                value: "#000000"
            }).change(function() {
                yaju1919.save("inputColor", inputColor.val());
            }).appendTo(h);
            var inputOpacity_text = $("<div>").text("フィルタの不透明度: 0%").appendTo(h);
            var inputOpacity = old_yaju1919.appendInputRange(h, { // フィルタの不透明度
                save: "inputOpacity",
                width: "90%",
                value: 0,
                min: 0,
                max: 100,
                step: 1,
                change: (function() {
                    loadValue();
                    main("keep");
                })
            });
            //-----------------------
            h.append("<hr>");
            // 画像の加工関係の入力要素
            var inputBlur_text = $("<div>").text("ぼかしの強度: 0%").appendTo(h);
            var inputBlur = old_yaju1919.appendInputRange(h, { // ぼかしの強度
                save: "inputBlur",
                width: "90%",
                value: 0,
                min: 0,
                max: 100,
                step: 1,
                change: (function() {
                    loadValue();
                    main("keep");
                })
            });
            var inputBrightness_text = $("<div>").text("明度: 100%").appendTo(h);
            var inputBrightness = old_yaju1919.appendInputRange(h, { // 明度
                save: "inputBrightness",
                width: "90%",
                value: 100,
                min: 0,
                max: 200,
                step: 1,
                change: (function() {
                    loadValue();
                    main("keep");
                })
            });
            var inputSaturate_text = $("<div>").text("彩度: 100%").appendTo(h);
            var inputSaturate = old_yaju1919.appendInputRange(h, { // 彩度
                save: "inputSaturate",
                width: "90%",
                value: 100,
                min: 0,
                max: 200,
                step: 1,
                change: (function() {
                    loadValue();
                    main("keep");
                })
            });
            var inputSepia_text = $("<div>").text("セピア: 0%").appendTo(h);
            var inputSepia = old_yaju1919.appendInputRange(h, { // セピア
                save: "inputSepia",
                width: "90%",
                value: 0,
                min: 0,
                max: 100,
                step: 1,
                change: (function() {
                    loadValue();
                    main("keep");
                })
            });
            addBtn(h, "初期値", (function() { // 初期値
                if (!confirm("初期値に戻しますか?")) return;
                var ranges = $("input[type='range']");
                ranges.eq(2).val(0);
                ranges.eq(3).val(100);
                ranges.eq(4).val(100);
                ranges.eq(5).val(0);
                loadValue();
                main("keep");
            }));
            //-------------------------
            //////////////////////////////////////////////////
            setTimeout(loadValue); // setTimeoutで遅延して値を読み込む
            //////////////////////////////////////////////////
            // 汎用的な関数
            function timeConv(second) { // 秒数から分秒に変換する関数
                var min = Math.floor(second / 60);
                var sec = second % 60;
                var timeText = sec + "秒";
                if (min > 0) timeText = min + "分" + timeText;
                return timeText;
            };

            function addBtn(h, title, func) { // ボタンを追加する関数
                return $("<button>").text(title).click(func).appendTo(h);
            };
            //-------------
            // 処理的な関数
            function loadValue() { // 値を読み込む関数
                inputInterval_text.text("変更間隔: " + timeConv(inputInterval()));
                inputOpacity_text.text("フィルタの不透明度: " + inputOpacity() + "%");
                inputBlur_text.text("ぼかしの強度: " + inputBlur() + "%");
                inputBrightness_text.text("明度: " + inputBrightness() + "%");
                inputSaturate_text.text("彩度: " + inputSaturate() + "%");
                inputSepia_text.text("セピア: " + inputSepia() + "%");
                yaju1919.load("inputColor", (function(r) {
                    inputColor.val(r);
                }));
            };

            function setImage(data) { // 壁紙を設定する関数
                var imageIdx = inputImageUrls().split("\n").indexOf($("body").css("background-image").match(/^url\("((https?|data):\/\/.+)"\)$/)[1]);
                if (data === "keep") {
                    yaju1919.load("imageIdx", (function(r) {
                        imageIdx = r;
                    }));
                } else {
                    if (!inputImageUrls().split("\n")[imageIdx + 1]) imageIdx = 0;
                    else imageIdx++;
                    yaju1919.save("imageIdx", imageIdx);
                };
                $("#wrapper").css("background-color", "transparent");
                setTimeout((function() {
                    yaju1919.setBgImg(inputImageUrls().split("\n")[imageIdx], {
                        color: inputColor.val(),
                        opacity: inputOpacity() / 100
                    });
                }));
            };

            function removeImage() { // 壁紙を削除する関数
                if (filterElement) filterElement.remove();
                $("#wrapper").css("background-color", backgroundColor_copy);
                $("body").removeAttr("style");
                yaju1919.setBgImg(null, {
                    opacity: 0
                });
            };

            function setFilter() { // フィルタを設定する関数
                return $("<div>").css({
                    zIndex: "-114515",
                    background: "inherit",
                    filter: "blur(" + inputBlur() / 10 + "px) brightness(" + inputBrightness() + "%) saturate(" + inputSaturate() + "%) sepia(" + inputSepia() + "%)",
                    position: "fixed",
                    top: "0px",
                    left: "0px",
                    right: "0px",
                    bottom: "0px"
                }).appendTo("body");
            };

            function main(data) { // 設定用関数
                setTimeout((function() {
                    removeImage();
                    clearInterval(intervalId);
                    if (!inputChangeBool() || inputImageUrls() === "") return;
                    setImage(data);
                    filterElement = setFilter();
                    if (inputImageUrls().split("\n").length === 1) return;
                    intervalId = setInterval((function() {
                        setImage();
                    }), inputInterval() * 1000);
                }));
            };
            //-------------
            //////////////////////////////////////////////////
            return h;
        }),
        tag: "装飾"
    };
})(this.unsafeWindow || window);