Greasy Fork

手机助手

自动滚动,嗅探图片、视频,字体放大,去除广告浮动

当前为 2024-06-04 提交的版本,查看 最新版本

// ==UserScript==
// @name         手机助手
// @namespace    http://tampermonkey.net/
// @version      9.500.17.70
// @description  自动滚动,嗅探图片、视频,字体放大,去除广告浮动
// @author       You
// @match        *://*/*
// @run-at       document-start
// @grant    GM_registerMenuCommand
// @grant    GM_setValue
// @grant    GM_getValue
// @license      MIT
// ==/UserScript==

{
    let appendJQ;

    if (typeof GM_getValue("runValTime") === "undefined") GM_setValue("runValTime", 200);
    let runValTime = GM_getValue("runValTime");

    function addScript(_url) {
        let script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = _url;
        document.head.appendChild(script);
        return script;
    }

    let hengPin = screen.orientation.lock,
        runFunc = setInterval(function() {

                let JQnoConflict;
                if (typeof jQuery === "undefined" || parseFloat(jQuery.fn.jquery) < 3) {
                    if (!appendJQ) {
                        try {
                            if (!$.fn.jquery) JQnoConflict = 1;
                        } catch (error) {
                            console.log(error)
                        }
                        let script = addScript('https://code.jquery.com/jquery-3.4.1.min.js');
                        script.onload = function() {
                            if (JQnoConflict) {
                                jQuery.noConflict();
                            }
                        };
                        addScript('https://code.jquery.com/jquery-migrate-3.4.0.min.js');
                        appendJQ = 1;
                    }
                    return;
                }
                let dom = {};
                dom.jQuery = jQuery;

                clearInterval(runFunc);

                (function($) {

                    'use strict';

                    if (document.querySelector('.JqMA-btn-all') || window.frames.length != parent.frames.length) {
                        return;
                    }

                    function dqSlt(selectPath, _iframe = "iframe") {
                        if (_iframe === "one") {
                            return $(document.querySelector(selectPath));
                        }
                        let doms;
                        try {
                            doms = $(selectPath);
                        } catch (error) {
                            doms = $(document.querySelectorAll(selectPath));
                        }
                        if (_iframe === "iframe") {
                            doms.add($(document.querySelectorAll('iframe')).contents().find(selectPath));
                        }
                        return doms;
                    }

                    function removeShadowRoot() {
                        let hasShadowRoot;
                        dqSlt("div", "all").each(function() {
                            if (this.shadowRoot) {
                                this.replaceWith(...this.shadowRoot.childNodes);
                                hasShadowRoot = true;
                            }
                        });
                        alert(hasShadowRoot ? "#shadow-root 已移除" : "#shadow-root 不存在");
                    }

                    function checkImgExists(imgurl) {
                        return new Promise(function(resolve, reject) {
                            var ImgObj = new Image();
                            ImgObj.src = imgurl;
                            ImgObj.onload = function(res) {
                                resolve(this);
                            }
                            ImgObj.onerror = function(err) {
                                reject(err)
                            }
                        });
                    }

                    function getTouchSite(_element, event) {
                        let rect = _element.getBoundingClientRect();

                        let offsetY = event.touches[0].clientY - rect.top - _element.offsetHeight / 2;
                        let offsetX = event.touches[0].clientX - rect.left - _element.offsetHeight / 2;

                        return [offsetX, offsetY, _element.offsetHeight];
                    }

                    function getSelector(element) {
                        let path = "",
                            index = 0;
                        while (index < 3 && element && element.nodeType == Node.ELEMENT_NODE) {
                            let selector = element.nodeName.toLowerCase();
                            if (selector == "body") {
                                break;
                            }
                            if (element.id) {
                                selector += "#" + element.id;
                            } else if (element.classList.length > 0) {
                                selector += "." + Array.from(element.classList).join(".");
                            }
                            path = selector + " > " + path;
                            element = element.parentNode;
                            index++;
                        }
                        return path.replace(/[> ]+$/, "");
                    }

                    function documentCopy(copyText) {
                        var _input = $("<input style='position:fixed!important;clip:rect(0 0 0 0)!important;top: 10px!important;'>").val(copyText).appendTo(document.body);
                        _input[0].select();
                        document.execCommand('copy');
                        _input.remove();
                    }

                    function copyToClipboard(copyText) {
                        try {
                            navigator.clipboard.writeText(copyText).catch(() => {
                                documentCopy(copyText);
                            });
                        } catch (error) {
                            documentCopy(copyText);
                        }
                    }

                    function getDataValue(gmValName, _default) {
                        if (typeof GM_getValue(gmValName) != "object") {
                            GM_setValue(gmValName, {});
                        }
                        var _data = GM_getValue(gmValName),
                            keys = Object.keys(_data);
                        if (gmValName != "picRepData" && keys.length > 100) {
                            delete _data[keys[0]];
                        }
                        return [_data, _data.hasOwnProperty(locHost()) ? _data[locHost()] : _default];
                    }

                    function getDefValue(gmValName, _default) {

                        if (typeof GM_getValue(gmValName) === "undefined") GM_setValue(gmValName, _default);

                        return GM_getValue(gmValName);
                    }

                    let hidePagetual = getDefValue("hidePagetual", 0)

                    GM_registerMenuCommand("1:隐藏按钮 2:隐藏东方 3:启动时间", function() {
                        let isHide = dqSlt(".JqMA-btn-del", "one").css("display") == "none";

                        let inputNum = window.prompt("1:" + (isHide ? "显示" : "隐藏") + "按钮 2:" + (hidePagetual ? "显示" : "隐藏") + "东方永页机按钮 3:修改启动时间 " + runValTime, 1);
                        if (inputNum === "1") {
                            if (isHide) {
                                dqSlt(Dhide ? ".JqMA-btn-del" : ".JqMA-btn-all", "all").each(function() {
                                    this.style.cssText += "display:block!important;" +
                                        (Dhide ? "opacity:0.5!important;" : "");
                                });
                            } else {
                                dqSlt(".JqMA-btn-all", "all").each(function() {
                                    this.style.cssText += "display:none!important;";
                                });
                            }
                        } else if (inputNum === "2") {
                            hidePagetual = hidePagetual ? 0 : 1;
                            GM_setValue("hidePagetual", hidePagetual);
                            location.reload(false);
                        } else if (inputNum === "3") {
                            inputNum = window.prompt("输入启动时间(>0):", runValTime);
                            runValTime = Number(inputNum) ? Number(inputNum) : runValTime;
                            GM_setValue("runValTime", runValTime);
                        }
                    });

                    function changeDataFunc(_data, _default) {
                        var changeData = window.prompt("请修改:", JSON.stringify(_data));
                        if (typeof JSON.parse(changeData) == "object") {
                            changeData && alert(changeData);
                            changeData = JSON.parse(changeData)
                            return [changeData, changeData.hasOwnProperty(locHost()) ? changeData[locHost()] : _default]
                        } else {
                            return false;
                        }
                    }

                    var html_style =
                        `html,body {
            overflow-wrap: break-word!important;
            scroll-behavior: auto!important;
            min-height: 100vh!important;
        }`;
                    var inner_style =
                        `.JqMA-inner-all{
            position: relative !important;
            z-index: 2147483646 !important;
            margin:20vh 0 5vh 0!important;
            border: 0 !important;
            padding: 0 !important;
            width: 100% !important;
            height: auto !important;
            background: black !important;
            display: block !important;
        }
        .JqMA-inner-all,
        .JqMA-inner-word *,
        .JqMA-inner-pic * {
            box-sizing: border-box !important;
            border-radius: 0 !important;
            float: none !important;
            opacity: 1 !important;
            visibility: visible !important;
            overflow-wrap: break-word !important;
        }
        .JqMA-inner-word,
        .JqMA-inner-word > p {
            color: #FEFEFE!important;
            text-align: left!important;
            font-size: calc(2.3vh + 2.3vw)!important;
            text-indent: 0!important;
        }
        .JqMA-inner-word > p {
            width: 100%!important;
        }
        .JqMA-inner-pic {
            text-align: center !important;
            font: 0 "Fira Sans", sans-serif !important;
        }
        .JqMA-inner-word *,
        .JqMA-inner-pic *{
            margin: 0 !important;
            padding: 0 !important;
            border: 0 !important;
            position: static !important;
        }
        .JqMA-inner-pic *::before,
        .JqMA-inner-pic *::after {
            display: none !important;
        }
        .JqMA-inner-pic img {
            display: inline-block !important;
            width: 100% !important;
            height: auto !important;
            object-fit: contain !important;
            background: gray !important;
        }
        .JqMA-inner-pic > *{
            vertical-align: top !important;
            overflow: hidden !important;
        }
        .JqMA-inner-word a,
        .JqMA-inner-pic a,
        .JqMA-mark-pageNum {
            background: none!important;
            color: #FEFEFE!important;
            height: calc(2.7vh + 2.7vw)!important;
            font-size: calc(1.7vh + 1.7vw)!important;
            line-height: 1.4!important;
            text-align: center!important;
        }
        .JqMA-mark-pageNum {
            width: 100%!important;
        }
        html .JqMA-inner-pic > img + a {
            margin-top: calc(-5.4vh - 5.4vw)!important;
        }
        html .JqMA-inner-pic > img + a + a{
            margin-top: calc(-2.7vh - 2.7vw)!important;
        }
        .JqMA-inner-pic img.JqMA-css-smallPic {
            width: 12.5%!important;
            height: 8vw!important;
        }
        .JqMA-inner-pic p > a{
            display: inline!important;
        }
        .JqMA-inner-word > a{
            display: inline-block!important;
            width: 100%!important;
        }
        .JqMA-inner-pic > a {
            display: inline-block!important;
            width: 12.5%!important;
            margin-right: 43.75%!important;
            margin-left: 43.75%!important;
            background: rgba(0,0,0,0.2)!important;
        }
        .JqMA-inner-pic > a.JqMA-css-smallPic {
            display: none!important;
        }
        .JqMA-btn-all,
        .JqMA-inner-all,
        .JqMA-inner-pic * {
            min-width:none!important;
            max-width:none!important;
            min-height:none!important;
            max-height:none!important;
        }
        .JqMA-btn-all {
            overflow: hidden!important;
            opacity: 1!important;
            background: rgba(0,0,0,0.4)!important;
            color: #FEFEFE!important;
            display: block!important;
            text-align: center!important;
            line-height: 2.8!important;
            border-radius: 0!important;
            user-select: none!important;
            z-index: 999999999999!important;
            margin: 0!important;
            padding: 0!important;
            border: 0!important;
            font-weight: bold!important;
            position: fixed!important;
            font-size: calc(1.2vh + 1.2vw)!important;
            height: calc(3.2vh + 3.2vw)!important;
            width: calc(3.2vh + 3.2vw)!important;
        }
        `;

                    var css_style =
                        `.JqMA-mark-pageNext:not(.JqMA-mark-pageNum) {
            display: inline-block !important;
            height: 0 !important;
            min-height: none !important;
            margin: 0 !important;
            border: 0 !important;
            padding: 0 !important;
            overflow: hidden !important;
        }
        [JqMA-css-textBig],.JqMA-inner-word,.JqMA-inner-word > p {
            letter-spacing: normal !important;
            line-height: normal !important;
            overflow-wrap: break-word !important;
        }
        .JqMA-css-fixed_hide {
            display: none !important;
        }
        .JqMA-css-overY_auto{
            overflow-y: auto!important;
        }
        .JqMA-css-transform {
            transform: translate(0%, 0%) !important;
            padding: 50vh 0!important;
            height: auto !important;
            max-height: none !important;
        }`;
                    if (hidePagetual) {
                        css_style += `.pagetual_pageBar,#pagetual-sideController {
                display: inline-block !important;
                height: 0 !important;
                min-height: none !important;
                margin: 0 !important;
                border: 0 !important;
                padding: 0 !important;
                overflow: hidden !important;}`;
                    }

                    function locHost() {
                        return window.location.hostname;
                    }

                    function getValLoc(gmValName, _default) {
                        if (typeof GM_getValue(gmValName) === "undefined") {
                            GM_setValue(gmValName, _default);
                        }
                        if (locHost() == GM_getValue(gmValName + "_locH")) {
                            return GM_getValue(gmValName)
                        } else {
                            return _default;
                        }
                    }

                    function setValLoc(gmValName, value) {
                        GM_setValue(gmValName, value);
                        GM_setValue(gmValName + "_locH", locHost());
                    }

                    let scrollJu = Math.abs(getDefValue("scrollJu", 5));

                    var [DSImgData, DSImg] = getDataValue("DSImgData", 1);

                    let minPicHD = getDefValue("minPicHD", 500);

                    let minPicwh = getDefValue("minPicwh", 100),
                        picwh = getValLoc("picwh", minPicwh);

                    let minOuterSz = getDefValue("minOuterSz", 10),
                        outerSz = getValLoc("outerSz", minOuterSz);

                    let smoothScroll = getDefValue("smoothScroll", 0);

                    var direction = 1;

                    function addInput(class1, value1, style1) {
                        dqSlt("html", "one").append($('<p>').attr({
                            class: "JqMA-btn-all " + class1
                        }).text(value1));
                        inner_style += ".JqMA-btn-all." + class1 + "{" + style1 + "!important;left: 0!important;}";
                    }

                    addInput('JqMA-btn-del', 'X', "top:calc(50vh - 1.6vh - 1.6vw)");
                    addInput('JqMA-btn-down', '♢', "top:calc(50vh - 4.8vh - 4.8vw)");
                    addInput('JqMA-btn-Ju', (smoothScroll ? "`" : "") + scrollJu, "top:calc(50vh - 8vh - 8vw)");
                    addInput('JqMA-btn-width', "W", "top:calc(50vh - 11.2vh - 11.2vw)");
                    addInput('JqMA-btn-scrollDiv', 'O', "top:calc(50vh - 14.4vh - 14.4vw)");
                    // addInput('JqMA-btn-', "", "top:calc(26.9vh - 8.8vw)");
                    // addInput('JqMA-btn-', "", "top:calc(22.7vh - 10.4vw)");

                    addInput('JqMA-btn-transform', "T", "top:calc(50vh + 1.6vh + 1.6vw)");
                    addInput('JqMA-btn-blank ', 'B', "top:calc(50vh + 4.8vh + 4.8vw)");
                    addInput('JqMA-btn-pic', picwh, "top:calc(50vh + 8vh + 8vw)");
                    addInput('JqMA-btn-outerSz', outerSz, "top:calc(50vh + 11.2vh + 11.2vw)");
                    // addInput('JqMA-btn-', "", "top:calc(68.9vh + 7.2vw)");
                    // addInput('JqMA-btn-', , "top:calc(73.1vh + 8.8vw)");

                    var Dhide = getValLoc("Dhide", 1);

                    Dhide && delHide();

                    setTimeout(function() {

                        widthN && dqSlt(".JqMA-btn-width", "all").text(widthN);

                        picZ && dqSlt(".JqMA-btn-pic", "all").each(function() {
                            this.style.setProperty("color", "green", "important");
                        });

                        openBlank && dqSlt(".JqMA-btn-blank", "all").each(function() {
                            this.style.setProperty("color", "green", "important");
                        });

                        scrollDiv && dqSlt(".JqMA-btn-scrollDiv", "all").each(function() {
                            this.style.setProperty("color", "green", "important");
                        });

                        DSImg && dqSlt(".JqMA-btn-outerSz", "all").each(function() {
                            this.style.setProperty("color", "green", "important");
                        });

                        Drotate && dqSlt(".JqMA-btn-blank", "all").text("BF");

                        firstRun();

                        dqSlt("html", "one").one("touchend", function() {
                            if (Dscroll) {
                                Dscroll = 0;
                                scrollRun();
                            }
                        });
                    }, 200);

                    dqSlt("head", "one").append(
                        $("<style>").html(html_style + inner_style + css_style)
                    ).attr("JqMA-mark-addStyle", 1);

                    var _timeTouch;

                    function touchRun() {
                        clearTimeout(_timeTouch);

                        _timeTouch = setTimeout(function() {
                            firstRun();
                            for (let i = 0; i < 20; i++) {
                                setTimeout(function() {
                                    clearTimeout(_timeTouch);
                                }, i * 100);
                            }
                        }, 300);
                    }

                    function firstRun() {

                        dqSlt(":not([JqMA-mark-backImg])").filter(function() {
                            return $(this).css("background-image").split(/[""]/).length > 1;
                        }).attr("JqMA-mark-backImg", 1);

                        dqSlt("head:not([JqMA-mark-addStyle])").append(
                            $("<style>").html(css_style)
                        ).attr("JqMA-mark-addStyle", 1);

                        if (Drotate && !document.fullscreenElement) {
                            fullScreen();
                        }
                        widthN && fontInterFn();

                        picZ && imgInterFn();

                        openBlank && aOpenBlank();

                        !Dhide && xiuTan();

                        dqSlt(".JqMA-inner-word", "all").length && innerWordAdd();

                        if (Dtransform && !document.querySelector(".JqMA-css-transform")) {
                            Dtransform = 0;
                            btnTransfClick();
                        }
                        Dtransform && transformFunc();

                        if (nextScrollTop && document.querySelector("body").offsetHeight > nextScrollTop + window.innerHeight) {
                            autoScrollTo(nextScrollTop);
                            nextScrollTop = 0;
                        }
                        dqSlt("body:not(body *,[JqMA-mark-bodyFunc])").on('click', function(event) {
                            let _target = $(event.target);

                            if (_target.is("a")) {
                                setTimeout(function() {
                                    Dscroll && scrollRun();
                                }, 210);
                            }
                            if (_target.is("#JqMA-mark-pageNext_1,#JqMA-mark-pageNext_2")) {

                                pageX.unshift(getScrollTop());
                                document.querySelector("." + _target.attr("id")).scrollIntoView();

                            } else if (!_target.is("a,a *") && dqSlt(".JqMA-btn-del", "one").css("display") != "none") {

                                direction = event.clientY < window.innerHeight / 9 ? -1 : 1;

                                if (widthN) {

                                    autoScrollBy(direction * 0.9 * window.innerHeight);

                                } else if (_target.is(".JqMA-inner-pic *") || (_target.is("img,[JqMA-mark-backImg],:has(img,[JqMA-mark-backImg])") &&
                                        getMinOuter(event.target) > 0.2 * window.innerWidth)) {

                                    autoScrollBy(direction * (Drotate ? 0.9 : 0.45) * window.innerHeight);
                                }
                            }
                        }).attr("JqMA-mark-bodyFunc", 1);

                        dqSlt("html:not(html *,[JqMA-mark-htmlFunc])").on("touchstart touchend", function(event) {

                            if (Dscroll) {
                                let _target = $(event.target);

                                if (!_target.is(".JqMA-btn-Ju")) {

                                    scrollRun();

                                    if (!_target.is(".JqMA-btn-down")) {

                                        pauseScroll = 1;
                                        stopPause();
                                    }
                                }
                            }
                        }).on("touchend", function() {

                            touchRun();

                        }).attr("JqMA-mark-htmlFunc", 1);
                    }
                    var pauseScroll,
                        pauseScTime;

                    function stopPause() {

                        if (pauseScroll) {

                            clearTimeout(pauseScTime);

                            pauseScTime = setTimeout(function() {

                                pauseScroll = 0;

                                Dscroll || scrollRun();
                            }, 200);
                        }
                    }

                    $(document).scroll(function() {

                        stopPause();
                    });

                    $.fn.slideScreen = function(_target, fn, trsTime) {
                        var timeout_1;
                        $(this).on('touchmove', _target, function(event) {
                            clearTimeout(timeout_1)

                            timeout_1 = setTimeout(function() {
                                fn(event);
                            }, trsTime || 500);
                        });
                    }

                    $.fn.longPress = function(_target, fn, trsTime) {
                        var timeout_2;
                        $(this).on('touchstart', _target, function(event) {
                            timeout_2 = setTimeout(function() {
                                fn(event);
                                document.getSelection().removeAllRanges();
                            }, trsTime || 500);
                        }).on('touchend touchmove', _target, function(event) {
                            clearTimeout(timeout_2)
                        });
                    }

                    function btnScrollDivClick() {
                        scrollDiv = scrollDiv ? 0 : 1;

                        dqSlt(".JqMA-btn-scrollDiv", "all").each(function() {
                            this.style.setProperty("color", scrollDiv ? "green" : null, "important");
                        });
                        setValLoc("scrollDiv", scrollDiv)
                    }

                    var scrollDiv = getValLoc("scrollDiv", 0);

                    dqSlt("html").on('click', '.JqMA-btn-scrollDiv', btnScrollDivClick).slideScreen('.JqMA-btn-scrollDiv', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetY > thisHeight || offsetY < -thisHeight || offsetX > thisHeight) {
                            removeShadowRoot();
                        } else {
                            btnScrollDivClick();
                        }
                    });

                    dqSlt("html").longPress('.JqMA-btn-scrollDiv', function() {
                        location.reload()
                    });

                    function btnDownClick() {

                        if (pageX.length) {
                            pageX = Array.from(new Set(pageX));

                            if (typeof pageX[0] === "number") {
                                autoScrollTo(pageX[0]);
                            } else {
                                pageX[0].scrollIntoView({
                                    "block": "center"
                                });
                            }
                            pageX.splice(0, 1);

                            dqSlt(".JqMA-btn-down", "all").text("♢");
                        }
                    }

                    var pageX = [];

                    dqSlt("html").on('click', '.JqMA-btn-down', btnDownClick).slideScreen('.JqMA-btn-down', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetY > thisHeight * 3) {

                            pageX.unshift(getScrollTop());

                            if (Dtransform) {
                                autoScrollTo(0.5 * window.innerHeight);
                            } else {
                                autoScrollTo(0);
                            }
                            dqSlt(".JqMA-btn-down", "all").text("♢");

                        } else if (offsetY < thisHeight * -3 || offsetX > thisHeight * 3) {

                            pageX.unshift(getScrollTop());

                            let toHs = [];
                            $("body > :visible").each(function() {

                                toHs.push([this.getBoundingClientRect().top + this.offsetHeight, this]);
                            });
                            toHs.sort(function(a, b) {
                                return b[0] - a[0];
                            });
                            toHs[0][1].scrollIntoView({
                                "block": "end"
                            });
                            dqSlt(".JqMA-btn-down", "all").text("♢");

                        } else if (offsetY > thisHeight) {

                            pageNextFunc("up");

                        } else if (offsetY < -thisHeight || offsetX > thisHeight) {

                            pageNextFunc("down");
                        } else {
                            btnDownClick();
                        }
                    });

                    dqSlt("html").longPress('.JqMA-btn-down', function() {

                        let menuNum = window.prompt("1:跳转节点 2:保存位置", 1);
                        if (menuNum === "1") {
                            let inputNum = window.prompt("跳转第几个节点:", dqSlt(".JqMA-btn-next", "one").text());
                            if (Number(inputNum) || inputNum === "0") {
                                let nextNum = Number(inputNum);
                                pageNextFunc(nextNum);
                            }
                        } else if (menuNum === "2") {
                            let inputNum = window.prompt("是否保存滚动位置?(取消关闭)", parseInt(getScrollTop()));
                            if (inputNum === null) {
                                setValLoc("nextScrollTop", 0);
                            } else {
                                setValLoc("nextScrollTop", Number(inputNum));
                            }
                        }
                    });

                    function pageNextFunc(nextNum) {

                        pageX.unshift(getScrollTop());

                        let pageDom = dqSlt(".pagetual_pageBar,.JqMA-mark-pageNext,.JqMA-inner-all,.JqMA-inner-all > :visible:last", "all"),
                            offsetDiffs = [];
                        if (nextNum >= pageDom.length) {
                            pageDom.last()[0].scrollIntoView();
                            dqSlt(".JqMA-btn-down", "all").text(pageDom.length - 1);
                        }
                        $(nextNum == "up" ? pageDom.get().reverse() : pageDom).each(function(index, dom) {

                            let offsetD = this.getBoundingClientRect().top;

                            if (nextNum == index || (nextNum == "up" && offsetD < -0.25 * window.innerHeight) ||
                                (nextNum == "down" && offsetD > 0.25 * window.innerHeight)) {

                                this.scrollIntoView();
                                dqSlt(".JqMA-btn-down", "all").text(nextNum == "up" ? pageDom.length - index - 1 : index);
                                return false;
                            }
                        });
                    }

                    function transformFunc() {
                        dqSlt(":visible:not(.JqMA-css-fixed_hide,.JqMA-btn-all,#pagetual-picker)").filter(function() {
                            return /sticky|fixed/.test($(this).css("position")) && this.offsetHeight < 0.5 * window.innerHeight;
                        }).addClass("JqMA-css-fixed_hide");
                    }

                    var Dtransform = getValLoc("Dtransform", 0);

                    function btnTransfClick() {
                        Dtransform = Dtransform ? 0 : 1;

                        dqSlt(".JqMA-btn-transform", "all").each(function() {
                            this.style.setProperty("color", Dtransform ? "green" : null, "important");
                        });

                        if (Dtransform) {
                            dqSlt("html", "one").filter(function() {
                                return $(this).css("overflow-y") == "hidden";
                            }).addClass("JqMA-css-overY_auto");

                            dqSlt("body", "one").addClass("JqMA-css-transform");

                            transformFunc();
                        } else {
                            dqSlt(".JqMA-css-transform,.JqMA-css-overY_auto").removeClass("JqMA-css-transform JqMA-css-overY_auto");
                            dqSlt(".JqMA-css-fixed_hide").removeClass("JqMA-css-fixed_hide");
                        }
                        autoScrollBy((Dtransform ? 0.5 : -0.5) * window.innerHeight, 0, 0);

                        setValLoc("Dtransform", Dtransform);

                    }

                    dqSlt("html").on('click', '.JqMA-btn-transform', btnTransfClick);

                    dqSlt("html").slideScreen('.JqMA-btn-transform', function() {
                        btnTransfClick();
                    });

                    dqSlt("html").longPress('.JqMA-btn-transform', function() {
                        alert(`O:
==点击:切换滚动对象
==滑动:移除#shadow-root
==长按:刷新页面
W:
==点击:输入字体大小
==滑动:上加下减
==长按:朗读或下载文字
5:
==点击:启动/停止滚动
==滑动:上加下减
==长按:输入滚动速度
♢:
==点击:回上一位置
==短滑:上/下:下/上一节点
==长滑:上/下:到底/顶部
==长按:记录本域名滚动位置
X:
==点击:隐藏/显示其他按钮
==滑动:触发 立即翻页 按钮
==长按:自动点击下一页
T:
==点击:元素取消浮动
==长按:显示操作清单
B:
==点击:切换a链接打开方式
==滑动:点击2个a链接,加载页面
==长按:横屏全屏,返回键退出
120:
==点击:开关页首图片集
==短滑:上加下减
==长滑:点击图片,修改过滤尺寸
==长按:点击图片,输入替换规则
10:
==点击:点击元素,修改过滤尺寸
==短滑:上加下减
==长滑:滚动加载图片集
==长按:开关深度搜索`);
                    });

                    var [picRepData, picReplace] = getDataValue("picRepData", "");

                    function getScrollTop() {

                        let maxTop = 0;
                        visibleDiv().each(function() {
                            maxTop = Math.max(maxTop, this.scrollTop);
                        });
                        return maxTop;
                    }

                    function visibleDiv(scDiv = null) {

                        scDiv = scDiv === null ? scrollDiv : scDiv;

                        let visDiv = dqSlt("html,body", "all");

                        scDiv && $(":visible:not(html,body)").each(function() {

                            if ($(this).css("overflow-y") != "hidden" &&
                                this.offsetHeight > 0.5 * window.innerHeight &&
                                this.scrollHeight > this.offsetHeight + 0.5 * window.innerHeight) {

                                visDiv = $(this);
                                return false;
                            }
                        });
                        return visDiv;
                    }

                    function xScrollDiv() {

                        return $(":visible:not(html,body)").filter(function() {

                            return $(this).css("overflow-x") != "hidden" &&
                                this.offsetWidth > 0.5 * window.innerWidth &&
                                this.scrollWidth > this.offsetWidth + 0.5 * window.innerWidth;
                        });
                    }

                    function autoScrollBy(scrollBy_Ju, speed = 0, scDiv = null) {

                        visibleDiv(scDiv).stop().animate({
                            scrollTop: "+=" + scrollBy_Ju + "px"
                        }, speed, "linear");
                    }

                    function autoScrollTo(scrollTo_Ju, speed = 0) {

                        visibleDiv().stop().animate({
                            scrollTop: scrollTo_Ju
                        }, speed, "linear");
                    }

                    function downloadTxt(filename, textContent) {
                        var objectURL = URL.createObjectURL(new Blob([textContent], {
                            type: "text/plain;charset=utf-8"
                        }));
                        $('<a>').attr({
                            href: objectURL,
                            download: filename,
                            style: 'display:none!important;'
                        }).appendTo('body')[0].click();

                        setTimeout(function() {
                            URL.revokeObjectURL(objectURL);
                        }, 2000);
                    }

                    function changeStyle(_id, _style) {
                        dqSlt("head").filter(function() {
                            return !$(this).find("style#" + _id).length;
                        }).append($("<style id='" + _id + "'>"));

                        dqSlt("style#" + _id).filter(function() {
                            return $(this).html() != _style;
                        }).html(_style);
                    }

                    let defWidthN = getDefValue("defWidthN", 30);

                    function fontInterFn() {
                        dqSlt(":visible:not([JqMA-css-textBig],.JqMA-inner-pic *,.JqMA-btn-all,#pagetual-picker *)").filter(function() {
                            let textLen = $(this).clone().children().remove().end().text()
                                .replace(/\s+/g, "").length;
                            if (textLen > 0 && (outerSz < minOuterSz + 1 || getPercentW(this) >= outerSz)) {
                                if (!oldFont && textLen > 50) {
                                    oldFont = parseInt($(this).css("font-size").replace("px", ""));
                                }
                                return true;
                            }
                            return false;
                        }).attr("JqMA-css-textBig", 1);

                        changeStyle("JqMA-css-textBig",
                            "html body [JqMA-css-textBig] {font-size:" + widthN + "px!important;}");

                        let _scale = oldFont ? parseInt(widthN / oldFont * 1000) / 1000 : 1;
                        dqSlt("[JqMA-css-textBig]").find("[JqMA-mark-backImg],img").not("[JqMA-css-textImg]").filter(function() {

                            return this.offsetWidth < 0.1 * window.innerWidth;

                        }).attr("JqMA-css-textImg", 1);

                        changeStyle("JqMA-css-textImg",
                            "html body [JqMA-css-textImg] {" +
                            "transform: scale(" + _scale + ") !important;" +
                            "-webkit-transform: scale(" + _scale + ") !important;" +
                            "-moz-transform: scale(" + _scale + ") !important;" +
                            "margin: 0 " + (_scale * 9 - 9) + "px !important;}");
                    }

                    function removeTextClass() {
                        dqSlt("[JqMA-css-textBig]").removeAttr("JqMA-css-textBig");
                        dqSlt("[JqMA-css-textImg]").removeAttr("JqMA-css-textImg");
                    }

                    function btnWidthClick() {
                        let inputNum = window.prompt("请输入字体大小:(@=修改默认)", widthN ? widthN : defWidthN);
                        if (inputNum === "@") {
                            inputNum = window.prompt("请修改默认字体大小:", defWidthN);
                            defWidthN = Number(inputNum) ? Number(inputNum) : 30;
                            GM_setValue("defWidthN", defWidthN);
                            return;
                        }
                        widthN = Number(inputNum) ? Number(inputNum) : 0;

                        widthNFunc();
                    }

                    function widthNFunc() {
                        if (widthN > 0) {
                            fontInterFn();
                        } else {
                            widthN = 0;
                            removeTextClass();
                        }
                        dqSlt(".JqMA-btn-width", "all").text(widthN ? widthN : "W");

                        setValLoc("widthN", widthN);
                    }

                    var widthN = getValLoc("widthN", 0),
                        oldFont;

                    dqSlt("html").on('click', '.JqMA-btn-width', btnWidthClick).slideScreen('.JqMA-btn-width', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetY > 3 * thisHeight || offsetY < -3 * thisHeight || offsetX > 3 * thisHeight) {
                            readPause();
                        } else if (offsetY > thisHeight) {
                            widthN -= 1;
                        } else if (offsetY < -thisHeight || offsetX > thisHeight) {
                            widthN += 1;
                        } else {
                            btnWidthClick();
                            return;
                        }
                        widthNFunc();
                    });

                    let speakRate = getDefValue("speakRate", 1);

                    function readStr() {
                        window.speechSynthesis.cancel();

                        let wordP = dqSlt(".JqMA-inner-word > p", "all");

                        for (let i = currentStr; i < wordP.length; i++) {
                            let utterThis = new SpeechSynthesisUtterance();
                            utterThis.text = wordP.eq(i).text();
                            utterThis.rate = speakRate;
                            window.speechSynthesis.speak(utterThis);

                            utterThis.onstart = function() {
                                currentStr = i;
                                wordP.removeAttr("style").eq(currentStr).attr("style", "background: rgb(0, 50, 64)!important;");

                                innerWordAdd();
                                if (wordP.length < dqSlt(".JqMA-inner-word > p", "all").length) {
                                    readStr();
                                }
                            }
                        }
                    }

                    function getText(_this) {
                        return $(_this).clone().find("style,script,noscript").remove().end().text();
                    }

                    function readPause() {
                        let readbtn = dqSlt(".JqMA-inner-word > a:eq(1)", "all");
                        if (readbtn.text() == "暂停") {
                            window.speechSynthesis.cancel();
                            readbtn.text("朗读");
                        } else {
                            readbtn.text("暂停");
                            readStr();
                        }
                    }

                    function innerWordAdd() {
                        let allStr = "";
                        dqSlt(textSlt).not("[JqMA-mark-word]").each(function() {
                            allStr += getText(this) + " ";
                        }).attr("JqMA-mark-word", 1);
                        allStr = allStr.replace(/\s+/g, " ");

                        let allStrlist = allStr.replace(/<\/?br>/g, "\n").split(/(.{1,150}(?:$|[^一-鿯0-9A-Za-z\/,,、]))/);

                        allStrlist = allStrlist.filter((s) => {
                            return s && s.trim();
                        });
                        for (let i = 0; i < allStrlist.length; i++) {
                            dqSlt(".JqMA-mark-wordEnd", "one").before($("<p>").html(allStrlist[i].replace("\n", "<br>")));
                        }
                    }

                    var [textSltData, textSlt] = getDataValue("textSltData", "");

                    let currentStr = 0;

                    dqSlt("html").longPress('.JqMA-btn-width', function() {

                        let noFirstR;
                        if (dqSlt(".JqMA-inner-word", "all").length) {
                            dqSlt(".JqMA-inner-word", "all").remove();
                            dqSlt("[JqMA-mark-word]").removeAttr("JqMA-mark-word");
                            noFirstR = 1;
                        } else {
                            dqSlt('.JqMA-btn-width', "all").each(function() {
                                this.style.setProperty("color", "green", "important");
                            });
                        }
                        waitClick("off", function(event) {
                            let _target = $(event.target);
                            while (true) {
                                if (_target.is("body") || getText(_target[0]).replace(/\s+/g, "").length > 50) {
                                    break;
                                } else {
                                    _target = _target.parent();
                                }
                            }
                            let selector = getSelector(_target[0]);

                            if (noFirstR) {
                                let inputNum = window.prompt(`修改选择器:${selector}`, textSlt.length ? textSlt : selector);
                                if (inputNum == "所有域名") {
                                    let resultData = changeDataFunc(textSltData, "");
                                    if (resultData)[textSltData, textSlt] = resultData;
                                } else if (typeof inputNum === "string") {
                                    textSlt = inputNum;
                                    if (textSlt === "") {
                                        delete textSltData[locHost()];
                                    } else {
                                        textSltData[locHost()] = textSlt;
                                    }
                                } else if (inputNum === null) {
                                    return;
                                }
                                GM_setValue("textSltData", textSltData);
                            } else if (!textSlt.length) {
                                textSlt = selector;
                            }
                            dqSlt("body", "one").prepend($("<p>").attr({
                                class: "JqMA-inner-word JqMA-inner-all"
                            }));
                            dqSlt(".JqMA-inner-word", "all").append($("<p class='JqMA-mark-wordEnd'>").text("!阅读结束!"));

                            innerWordAdd();

                            dqSlt(".JqMA-inner-word", "all").on("click", "p", function() {

                                if (readbtn.text() == "朗读") return
                                currentStr = $(this).prevAll("p").length;
                                readStr();
                            });
                            let readbtn = $("<a>朗读</a>"),
                                downbtn = $("<a>下载</a>"),
                                ratebtn = $(`<a>语速:${speakRate}</a>`);

                            dqSlt(".JqMA-inner-word", "all").prepend(ratebtn).prepend(readbtn).prepend(downbtn);

                            readbtn.click(readPause);

                            ratebtn.click(function() {
                                let inputNum = window.prompt("输入语速:", speakRate);
                                if (inputNum === null) return;
                                speakRate = inputNum;
                                $(this).text("语速:" + speakRate);
                                GM_setValue("speakRate", speakRate);
                                if (readbtn.text() == "朗读") return
                                readStr();
                            });
                            downbtn.click(function() {
                                downloadTxt(document.title.replace(/[\/:*?""<>|]+/g, " ").replace(/^\s+|\s+$/g, "") + ".txt", dqSlt(".JqMA-inner-word", "one").clone().children("a").remove().end().text());
                            });
                            autoScrollTo(0);
                        });
                    });

                    let whProp = getDefValue("whProp", 3.9);

                    function picSizeOut(_this, picwh_2 = null) {

                        let natureW = _this.naturalWidth,
                            natureH = _this.naturalHeight,
                            _targetW = $(_this).attr("img-outerWH") ? $(_this).attr("img-outerWH") : getPercentW(_this);

                        if (!picwh_2) {
                            picwh_2 = picwh;
                        }
                        return Math.min(natureW, natureH) >= picwh_2 &&
                            natureW / natureH <= whProp && _targetW >= outerSz;
                    }

                    function formatStr(_url) {
                        if (typeof _url === "string") {
                            return _url.replace(/^\s+|\s+$/g, "").replace(/&amp;/g, "&").replace(/\\u002F/g, "/").replace(/\\[/]/g, "/");
                        } else {
                            return "";
                        }
                    }

                    function decodeStr(_url) {
                        let newI = _url;
                        if (/^https?%/.test(newI)) {
                            try {
                                newI = decodeURIComponent(newI);
                            } catch (error) {
                                console.log(error);
                            }
                        }
                        return newI;
                    }

                    function delHttp(_url) {
                        let newI = [];
                        if (/^(?!blob:|data:).+https?[:%]/.test(_url)) {
                            let _urlSpl = _url.split(/.(?=https?[:%])/);
                            for (let i = 1; i < _urlSpl.length; i++) {
                                if (!/\.html(&|$)/.test(_urlSpl[i])) {
                                    newI.push(decodeStr(_urlSpl[i].replace(/^([^?]+?)&.*$/, "$1")));
                                }
                            }
                        }
                        return newI;
                    }

                    var preMatches = [];

                    function xiuTan() {
                        if (!document.querySelector(".JqMA-btn-hrefAll")) {
                            let spanStyle = ".JqMA-btn-hrefSpan {margin-left: auto!important; height: 6px!important; line-height: 6px!important;color:red!important;text-align:center!important;position:static!important;}";

                            let hrefAllStyle = ".JqMA-btn-hrefAll {background: none!important; overflow: scroll!important; height: auto!important; max-height: calc(5vh + 5vw)!important; width: calc(15vw + 15vh)!important; bottom: 4px!important; right: 0!important;}"

                            let hrefStyle = ".JqMA-btn-href {text-align: left!important; position: static!important; width: 100%!important;}"

                            let spanStr = '<span class="JqMA-btn-all JqMA-btn-hrefSpan">——</span>';

                            dqSlt("head", "one").append($("<style>").text(spanStyle + hrefAllStyle + hrefStyle));

                            dqSlt("html", "one").append($("<p class='JqMA-btn-all JqMA-btn-hrefAll'>").append(spanStr).append(spanStr));
                        }
                        let pageSource = "";
                        dqSlt("html").each(function() {
                            pageSource += this.outerHTML;
                        });
                        let videoList = [];

                        dqSlt("iframe").each(function() {

                            let srcDomain;
                            try {
                                srcDomain = new URL(this.src).origin;
                            } catch (error) {
                                console.log(error);
                            }
                            if (srcDomain && srcDomain != window.location.origin) {

                                videoList.push(this.src);
                            }
                        });
                        dqSlt("video").each(function() {

                            videoList.push(this.currentSrc);
                        });
                        let regex = /https?[:%][^""<>\s]*?\.(avi|mp4|mov|m4v|m3u8|wmv|flv|f4v|webm)([?!/&%][^""<>\s]*?)?(?=[""<>\s一-鿯]|https?[:%]|$)/gi;

                        let matches = pageSource.replace(/&quot;|['']/g, '"').match(regex);

                        if (matches) videoList = videoList.concat(matches);

                        window.performance.getEntries().forEach(function(entry) {
                            if (/\.(avi|m3u8|mp4|mov|m4v|wmv|flv|f4v|webm)([?!/&%]|$)/.test(entry.name)) {
                                videoList.push(entry.name);
                            }
                        });
                        videoList = Array.from(new Set(videoList));
                        var newI,
                            newMatches = [];
                        for (let i = 0; i < videoList.length; i++) {
                            newI = formatStr(videoList[i]);
                            if (!newI.replace(/[\s/]/g, "").length || /^(?!http)[a-z]{3,15}:/.test(newI)) continue;
                            newMatches.push(newI);

                            let delHtList = delHttp(newI);
                            if (delHtList.length) newMatches = newMatches.concat(delHtList);
                        }
                        for (let i = 0; i < newMatches.length; i++) {
                            newI = addLocation(decodeStr(newMatches[i]));

                            if (preMatches.indexOf(newI) > -1) continue;

                            preMatches.push(newI);

                            dqSlt(".JqMA-btn-hrefAll span", "one").after($("<a>").attr({
                                href: newI,
                                class: "JqMA-btn-all JqMA-btn-href"
                            }).text(newI.replace(/\/(?=$|\?)/g, "").replace(/^[^?]*[/]/, "").replace(/(?<=[^?/.]{9})[^?/.]+/, "")));
                        }
                    }

                    function getMinOuter(_this) {
                        return Math.min(_this.offsetWidth, _this.offsetHeight);
                    }

                    function getMinPicwh(_this) {
                        return Math.min(_this.naturalWidth, _this.naturalHeight);
                    }

                    function getPercentW(_this) {
                        return parseInt(_this.offsetWidth / window.innerWidth * 100);
                    }

                    function waitClick(offClick, afterFunc) {
                        dqSlt(".JqMA-btn-all", "all").each(function() {
                            this.style.setProperty("display", "none", "important");
                        });
                        setTimeout(function() {
                            dqSlt("body:not(body *)").on("click.tempClickFunc", function(event) {
                                event.preventDefault();

                                if (offClick === "off") {
                                    dqSlt("body").off("click.tempClickFunc");

                                    dqSlt(".JqMA-btn-all", "all").each(function() {
                                        this.style.setProperty("display", "block", "important");
                                    });
                                }
                                afterFunc(event);
                            });
                        }, 100);
                    }

                    function btnOuterSzClick() {

                        waitClick("off", function(event) {
                            let _this = $(event.target);
                            let _targetW = _this.attr("img-outerWH") ? _this.attr("img-outerWH") : getPercentW(event.target);
                            let inputNum = window.prompt("请输入过滤尺寸:", _targetW - 5);
                            if (Number(inputNum) || inputNum === "0") {
                                outerSz = Number(inputNum);
                                if (outerSz < minOuterSz) outerSz = minOuterSz;
                                outerSz_run();
                            }
                        });
                    }

                    dqSlt("html").on('click', ".JqMA-btn-outerSz", btnOuterSzClick).slideScreen('.JqMA-btn-outerSz', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetY > thisHeight * 3 || offsetY < thisHeight * -3 || offsetX > thisHeight * 3) {
                            scrollPicLoad();
                        } else if (offsetY > thisHeight) {
                            if (minOuterSz < outerSz && outerSz < minOuterSz + 10) {
                                outerSz = minOuterSz;
                            } else if (outerSz <= 1) {
                                outerSz = 0;
                            } else if (outerSz <= minOuterSz) {
                                outerSz = 1;
                            } else {
                                outerSz -= 10;
                            }
                        } else if (offsetY < -thisHeight || offsetX > thisHeight) {
                            if (outerSz === 0) {
                                outerSz = 1;
                            } else if (outerSz === 1) {
                                outerSz = minOuterSz;
                            } else {
                                outerSz += 10;
                            }
                        } else {
                            btnOuterSzClick();
                        }
                        outerSz_run();
                    });

                    function outerSz_run() {

                        if (outerSz < 0) outerSz = 0;

                        if (picZ) {
                            if (outerSz === 0) {
                                let _scrollTop = getScrollTop();

                                removePicClass();
                                imgInterFn();

                                setTimeout(function() {
                                    autoScrollTo(_scrollTop);
                                }, 400);
                            } else {
                                picImgFilter();
                            }
                        }
                        if (widthN) {
                            removeTextClass();
                            fontInterFn();
                        }
                        dqSlt(".JqMA-btn-outerSz", "all").text(outerSz);

                        setValLoc("outerSz", outerSz);
                    }

                    dqSlt("html").longPress('.JqMA-btn-pic', function() {

                        waitClick("off", function(event) {
                            if (event.target.currentSrc && window.confirm("是否复制图片链接?")) copyToClipboard(event.target.currentSrc);
                            setTimeout(function() {
                                var inputNum = window.prompt("请输入图片链接替换(`分隔,@开头:正则且数字->[0-9]):", picReplace);
                                if (inputNum == "所有域名") {
                                    var resultData = changeDataFunc(picRepData, "");
                                    if (resultData)[picRepData, picReplace] = resultData;
                                } else if (typeof inputNum === "string") {
                                    picReplace = inputNum;
                                    if (picReplace === "") {
                                        delete picRepData[locHost()];
                                    } else {
                                        picRepData[locHost()] = picReplace;
                                        if (picZ) {
                                            var _scrollTop = getScrollTop();

                                            removePicClass();
                                            imgInterFn();

                                            setTimeout(function() {
                                                autoScrollTo(_scrollTop);
                                            }, 400);
                                        }
                                    }
                                }
                                GM_setValue("picRepData", picRepData);
                            }, 200);
                        });
                    });

                    function btnPicwhClick() {
                        waitClick("off", function(event) {
                            let _picwh = $(event.target).is("img") ? getMinPicwh(event.target) + 20 : minPicwh,
                                inputNum = window.prompt("请输入 过滤尺寸:(@ = 修改默认)", _picwh);
                            if (/^\d+$/.test(inputNum)) {

                                picwh = Number(inputNum);
                                if (picwh < minPicwh) picwh = minPicwh;

                                picImgFilter();

                            } else if (inputNum === "@") {
                                let _whProp = parseInt(event.target.naturalWidth / event.target.naturalHeight * 10) / 10,
                                    _targetW = $(event.target).attr("img-outerWH") ? $(event.target).attr("img-outerWH") : getPercentW(event.target);

                                inputNum = window.prompt(`请输入 过滤宽高比,最小过滤尺寸,最小过滤宽度,最大转高清尺寸:(点击元素:${_whProp},${getMinPicwh(event.target)},${_targetW} 推荐:3.9,100,10,500)`, [whProp, minPicwh, minOuterSz, minPicHD]);
                                if (/^[\d.,]+$/.test(inputNum)) {
                                    whProp = Number(inputNum.split(",")[0]);
                                    minPicwh = Number(inputNum.split(",")[1]);
                                    minOuterSz = Number(inputNum.split(",")[2]);
                                    minPicHD = Number(inputNum.split(",")[3]);

                                    picImgFilter();

                                    GM_setValue("whProp", whProp);
                                    GM_setValue("minPicwh", minPicwh);
                                    GM_setValue("minOuterSz", minOuterSz);
                                    GM_setValue("minPicHD", minPicHD);
                                }
                            }
                        });
                    }

                    dqSlt("html").longPress('.JqMA-btn-outerSz', function() {
                        DSImg = DSImg ? 0 : 1;

                        dqSlt(".JqMA-btn-outerSz", "all").each(function() {
                            this.style.setProperty("color", DSImg ? "green" : null, "important");
                        });
                        if (picZ) {
                            var _scrollTop = getScrollTop();

                            removePicClass();
                            imgInterFn();

                            setTimeout(function() {
                                autoScrollTo(_scrollTop);
                            }, 400);
                        }
                        if (DSImg) {
                            delete DSImgData[locHost()];
                        } else {
                            DSImgData[locHost()] = DSImg;
                        }
                        GM_setValue("DSImgData", DSImgData);
                    });

                    function picImgFilter() {

                        if (picwh < 0) picwh = 0;

                        if (picZ) {
                            dqSlt(".JqMA-inner-pic > a", "all").addClass("JqMA-css-smallPic");

                            dqSlt(".JqMA-inner-pic .JqMA-mark-imgLoaded", "all").each(function() {
                                if (picSizeOut(this)) {
                                    $(this).nextAll("a:lt(2)").add(this).removeClass("JqMA-css-smallPic");
                                } else {
                                    $(this).addClass("JqMA-css-smallPic");
                                }
                            });
                        }
                        dqSlt(".JqMA-btn-pic", "all").text(picwh);

                        setValLoc("picwh", picwh);
                    }

                    function btnPicClick() {

                        picZ = picZ ? 0 : 1;

                        dqSlt(".JqMA-btn-pic", "all").each(function() {
                            this.style.setProperty("color", picZ ? "green" : null, "important");
                        });

                        if (picZ) {
                            imgInterFn();
                        } else {
                            removePicClass();
                        }
                        setValLoc("picZ", picZ);
                    }

                    function scrollPicLoad() {

                        let _scrollTop = getScrollTop(),
                            _picZ = picZ;
                        picZ = 0;

                        dqSlt(".JqMA-inner-pic", "all").remove();

                        autoScrollTo(0);

                        let maxTop = 0;
                        visibleDiv().each(function() {
                            maxTop = Math.max(maxTop, this.scrollHeight);
                        });

                        let _timeout = setInterval(function() {

                            let prevTop = getScrollTop();

                            autoScrollBy(1.5 * window.innerHeight, 100);

                            setTimeout(function() {
                                let nowTop = getScrollTop();
                                if (nowTop === prevTop || nowTop >= maxTop) {

                                    clearInterval(_timeout);

                                    xScrollDiv().stop().animate({
                                        scrollLeft: 10 * window.innerWidth
                                    }, 100, "linear");

                                    autoScrollTo(0, 200);

                                    setTimeout(function() {
                                        if (_picZ) {
                                            picZ = 1;
                                            removePicClass();
                                            imgInterFn();
                                        }
                                        setTimeout(function() {
                                            autoScrollTo(_scrollTop);
                                        }, 400);
                                    }, 400);
                                }
                            }, 100);
                        }, 105);
                    }

                    var picZ = getValLoc("picZ", 0);

                    dqSlt("html").on('click', ".JqMA-btn-pic", btnPicClick).slideScreen('.JqMA-btn-pic', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetY > thisHeight * 3 || offsetY < thisHeight * -3 || offsetX > thisHeight * 3) {
                            btnPicwhClick();
                        } else if (offsetY > thisHeight) {
                            if (minPicwh < picwh && picwh < minPicwh + 40) {
                                picwh = minPicwh;
                            } else if (picwh <= minPicwh) {
                                picwh = 0
                            } else {
                                picwh -= 40;
                            }
                            picImgFilter();
                        } else if (offsetY < -thisHeight || offsetX > thisHeight) {
                            if (picwh == 0) {
                                picwh = minPicwh;
                            } else {
                                picwh += 40;
                            }
                            picImgFilter();
                        } else {
                            btnPicClick();
                        }
                    });

                    function removePicClass() {
                        dqSlt(".JqMA-inner-pic", "all").remove();

                        preImgArr = [new Set(), new Set(), new Set()];
                    }

                    function addLocation(_href) {
                        try {
                            return new URL(_href, window.location.origin).href;
                        } catch (error) {
                            return _href;
                        }
                    }

                    function getImgList(dataObj, _img, findA, aStr, preImgNum) {

                        let imgList = [],
                            imgOuterWH;

                        dataObj.forEach(function(i) {
                            i = formatStr(i);
                            if (!i.replace(/[\s/]/g, "").length) return;
                            i = addLocation(decodeStr(i));

                            if (!preImgArr[preImgNum].has(i)) {
                                preImgArr[preImgNum].add(i);

                                imgOuterWH = _img ? getPercentW(_img[0]) : minOuterSz;

                                imgList.push($("<img>").attr({
                                    src: i,
                                    loading: "lazy",
                                    width: "300",
                                    height: "100",
                                    "img-outerWH": imgOuterWH
                                }));
                            }
                        });
                        if (findA && imgList.length) {

                            let _newA = $(aStr),
                                _a = _img.closest("a"),
                                _img_2 = _img;

                            for (let i = 0; i < 3; i++) {
                                if (_a.length || _img_2.is("body")) break;
                                _a = _img_2.siblings("a[href]:first");
                                if (_a.length) break;
                                _a = _img_2.siblings().find("a[href]:first");
                                _img_2 = _img_2.parent();
                            }
                            if (_a.attr("href") && !/^javascript:|^#$/.test(_a.attr("href"))) {
                                _newA.attr("href", _a.attr("href"));
                            } else {
                                if (_a.length) {
                                    _a.children(":not(a)").length || _a.append('<p style="display:none!important;">');
                                    _a = _a.children(":not(a):first");
                                } else {
                                    _a = _img;
                                }
                                _newA.on("click", function() {
                                    _a.trigger("click");
                                });
                            }
                            let _element = _img[0],
                                _newA2 = $(aStr).on("click", function() {
                                    pageX.unshift($(this).prevAll("img:first")[0]);

                                    _element.scrollIntoView({
                                        "block": "center"
                                    });
                                });
                            imgList.push(_newA);
                            imgList.push(_newA2.text(imgOuterWH));
                        }
                        return imgList;
                    }

                    var preImgArr = [new Set(), new Set(), new Set()];

                    var imgRegex_1 = /https?[:%][^""<>\s]*?\.(xbm|tif|pjp|jpg|jpeg|tiff|gif|jfif|webp|png|bmp|pjpeg|avif)([?!/&%][^""<>\s]*?)?(?=[""<>\s一-鿯]|https?[:%]|$)/gi

                    var imgRegex_2 = /((?<=[""])[a-z]*[/]|https?[:%])[^""<>\s]*?\.(xbm|tif|pjp|jpg|jpeg|tiff|gif|jfif|webp|png|bmp|pjpeg|avif)([?!/&%][^""<>\s]*?)?(?=[""<>\s一-鿯]|https?[:%]|$)/gi

                    function imgInterFn() {

                        picaImgHide();

                        if (!dqSlt(".JqMA-inner-pic", "all").length) {

                            dqSlt("body", "one").prepend($("<p>").attr({
                                    class: "JqMA-inner-pic JqMA-inner-all"
                                }).append('<p class="JqMA-mark-pageNext JqMA-mark-pageNext_0 JqMA-mark-pageNum">可见元素</p>')
                                .append('<p class="JqMA-mark-pageNext JqMA-mark-pageNext_1 JqMA-mark-pageNum">深度搜索</p>')
                                .append('<p class="JqMA-mark-pageNext JqMA-mark-pageNext_2 JqMA-mark-pageNum">文字链接</p>'));
                        }

                        let pageNext_0 = dqSlt(".JqMA-mark-pageNext_0", "one"),
                            pageNext_1 = dqSlt(".JqMA-mark-pageNext_1", "one"),
                            pageNext_2 = dqSlt(".JqMA-mark-pageNext_2", "one"),
                            aStr = '<a class="JqMA-css-smallPic">';

                        dqSlt("img:not(.JqMA-inner-pic *),video,[JqMA-mark-backImg],.pagetual_pageBar").each(function() {

                            if ($(this).is(".pagetual_pageBar")) {

                                !pageNext_1.prev().is(".JqMA-mark-pageNext") && pageNext_1.before($('<p class="JqMA-mark-pageNext">'));

                                DSImg && !pageNext_2.prev().is(".JqMA-mark-pageNext") && pageNext_2.before($('<p class="JqMA-mark-pageNext">'));
                                return true;
                            }
                            let _img = $(this),
                                imgArr_0 = [],
                                imgArr_1 = [];

                            if (outerSz === 0 || getPercentW(this) >= 1) {

                                let srcArr = [];
                                if (_img.is("img")) {
                                    srcArr.push(this.currentSrc);

                                } else if (_img.is("video")) {
                                    srcArr.push(this.poster);
                                }
                                if (_img.is("[JqMA-mark-backImg]")) {
                                    srcArr.push(_img.css("background-image").split(/[""]/)[1]);
                                }
                                imgArr_0 = getImgList(srcArr, _img, 1, aStr, 0);

                                if (imgArr_0.length) {
                                    for (let i = 0; i < imgArr_0.length; i++) {

                                        pageNext_1.before($(imgArr_0[i]));
                                    }
                                }
                                if (DSImg) {
                                    let _imgHtml = "";
                                    if (_img.is("a img")) _imgHtml = _img.closest("a").clone().removeAttr("style").empty().prop("outerHTML");
                                    _imgHtml += _img.clone().removeAttr("src poster style").empty().prop("outerHTML");

                                    let _isp = _imgHtml.replace(/&quot;|['']/g, '"').match(imgRegex_2);

                                    if (_isp) {
                                        imgArr_1 = getImgList([_isp[0]], _img, 1, aStr, 1);
                                        if (imgArr_1.length) {
                                            for (let i = 0; i < imgArr_1.length; i++) {

                                                pageNext_2.before($(imgArr_1[i]));
                                            }
                                        }
                                    }
                                }
                            }
                        });

                        if (DSImg) {
                            let _text = "";
                            dqSlt("body > :visible").each(function() {
                                _text += getText(this);
                            });
                            _text = _text.replace(/&quot;|['']/g, '"').match(imgRegex_1);
                            if (_text) {
                                _text = getImgList(_text, 0, 0, aStr, 2);
                                _text.length && dqSlt(".JqMA-inner-pic", "one").append(_text);
                            }
                        }
                        picImgCount(pageNext_0, pageNext_1, pageNext_2);

                        dqSlt(".JqMA-inner-pic img:not(.JqMA-mark-preAdd)").addClass("JqMA-mark-preAdd").on("load error", function() {

                            picImgCount(pageNext_0, pageNext_1, pageNext_2);

                            var oldNatureH = this.naturalHeight,
                                oldNatureW = this.naturalWidth;

                            if (Math.min(oldNatureW, oldNatureH) < minPicHD) {
                                var thisSrcList = picHD(this.currentSrc),
                                    _this = $(this),
                                    promiseArray = [];

                                for (let i = 0; i < thisSrcList.length; i++) {
                                    promiseArray.push(checkImgExists(thisSrcList[i]).catch(err => {
                                        console.log(err)
                                    }));
                                }
                                Promise.all(promiseArray).then(function(data) {
                                    for (let i = 0; i < data.length; i++) {
                                        let resH = data[i];
                                        if (resH.naturalHeight > oldNatureH || resH.naturalWidth > oldNatureW) {
                                            _this.attr({
                                                src: resH.src,
                                                "JqMA-mark-imgHD": 1
                                            });
                                            return;
                                        }
                                    }
                                });
                            }
                            if (picSizeOut(this)) {
                                $(this).nextAll("a:lt(2)").add(this).removeClass("JqMA-css-smallPic");
                            } else {
                                $(this).addClass("JqMA-css-smallPic");
                            }
                        }).on("load", function() {
                            $(this).addClass("JqMA-mark-imgLoaded").nextAll("a:eq(0)").text(getMinPicwh(this));
                        });
                    }
                    var picImgTime;

                    function picImgCount(pageNext_0, pageNext_1, pageNext_2) {

                        clearTimeout(picImgTime);

                        picImgTime = setTimeout(function() {
                            let picImgLen = dqSlt(".JqMA-inner-pic img:not(.JqMA-css-smallPic)", "all").length,
                                keJian_Img = pageNext_1.prevAll("img:not(.JqMA-css-smallPic)"),
                                search_len = pageNext_2.prevAll("img:not(.JqMA-css-smallPic)").length;

                            pageNext_0.html(`可见:${keJian_Img.length} <a id="JqMA-mark-pageNext_1">深度</a>:${search_len - keJian_Img.length} <a id="JqMA-mark-pageNext_2">文字</a>:${picImgLen - search_len}`);

                        }, 400);
                    }

                    function picHD(oldSrc) {
                        var thisSrc = oldSrc,
                            thisSrcList = [];

                        if (picReplace.indexOf("`") != -1) {
                            let numberToRe = /^@/.test(picReplace) ? 1 : 0,
                                picRepArr = picReplace.replace(/^@/, "").split("`");

                            for (let i = 0; i < parseInt(picRepArr.length / 2); i++) {
                                thisSrc = thisSrc.replace(numberToRe ? new RegExp(picRepArr[2 * i].replace(/(?<![{])\d(?![}])/g, "[0-9]")) : picRepArr[2 * i], picRepArr[2 * i + 1]);
                            }
                            thisSrcList.push(thisSrc);
                        }
                        thisSrcList.push(oldSrc.replace(/-\d{2,4}x\d{2,4}(?=[.-])/, ""));

                        thisSrcList.push(oldSrc.replace(/^(?=data:)(.+?)[^A-Za-z0-9+/=>;]+$/, "$1"));

                        let delHtList = delHttp(oldSrc);
                        if (delHtList.length) thisSrcList = thisSrcList.concat(delHtList);

                        if (!/.https?[:%]/.test(oldSrc)) {
                            thisSrcList.push(oldSrc.replace(/^([^?]+?)&.*$/, "$1"));
                        }
                        var newSrcList = [];
                        for (let i = 0; i < thisSrcList.length; i++) {
                            thisSrc = thisSrcList[i];
                            if (thisSrc != oldSrc) {
                                newSrcList.push(thisSrc);
                            }
                        }
                        return newSrcList;
                    }

                    function picaImgHide() {
                        if (Dhide) {
                            changeStyle("JqMA-inner-picaImg",
                                ".JqMA-inner-pic > a {" +
                                "height: 0!important; border: 0!important;}" +
                                ".JqMA-inner-pic > img.JqMA-css-smallPic {" +
                                "height: 0!important; border: 4px solid gray!important;}");
                        } else {
                            dqSlt("style#JqMA-inner-picaImg").html("");
                        }
                    }

                    function delHide() {
                        dqSlt(".JqMA-btn-all", "all").each(function() {
                            if ($(this).is(".JqMA-btn-del")) {
                                this.style.cssText += "opacity:" + (Dhide ? "0.5" : "1") + "!important;";
                            } else {
                                this.style.cssText += "display:" + (Dhide ? "none" : "block") + "!important;";
                            }
                        });
                    }

                    function btnDelClick() {
                        Dhide = Dhide ? 0 : 1;

                        delHide();
                        picaImgHide();

                        setValLoc("Dhide", Dhide);
                    }

                    dqSlt("html").on('click', '.JqMA-btn-del', btnDelClick).slideScreen('.JqMA-btn-del', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetX > thisHeight || offsetY > thisHeight || offsetY < -thisHeight) {
                            let loadNow = document.querySelector("#pagetual-sideController #loadNow");
                            if (loadNow) {
                                loadNow.dispatchEvent(new MouseEvent('click'));
                            } else {
                                alert("请启用 东方永夜机 立即翻页");
                            }
                        } else {
                            btnDelClick();
                        }
                    });

                    var nextScrollTop = getValLoc("nextScrollTop", 0);

                    dqSlt("html").longPress('.JqMA-btn-del', function() {
                        var newHref;
                        if (/[^a-z]page[=/]\d+(?=$|&)/.test(location.href)) {
                            openHref(getNextPage(location.href));
                            return;
                        } else if (/[/_\-]\d+(\.html)?$/.test(location.href)) {
                            newHref = getNextPage(location.href);
                        }
                        $(dqSlt("a").get().reverse()).each(function() {
                            if (/^\s*2\s*$/.test($(this).text()) &&
                                /[^a-z]page[=/]\d+(?=$|&)/.test(this.href)) {
                                if (openBlank) {
                                    window.open(this.href);
                                } else {
                                    location.href = this.href;
                                }
                                return false;
                            } else if (/^\s*(>|次のページ|下.?[章页]|下[一—].)\s*$|^\s*next\s*(page\s*)?$/i.test($(this).text())) {
                                var _a = $(this);
                                _a.children(":not(a)").length || _a.append('<p style="display:none!important;">');
                                _a.children(":not(a):first").trigger("click");
                                return false;
                            } else if (newHref && this.href === newHref) {
                                openHref(newHref);
                                return false;
                            }
                        });
                    });

                    function getNextPage(twoHref) {
                        var hrefSplit = /[^a-z]page[=/]/.test(twoHref) ? twoHref.split(/(?<=[^a-z]page)([=/])/) : twoHref.split(/([/_\-])(?=\d+(?:\.html)?$)/);
                        var pNumber = Number(hrefSplit[2].split(/[^\d]/)[0]) + 1;
                        var newHref = hrefSplit[0] + hrefSplit[1] + pNumber + hrefSplit[2].replace(/^\d+/, "");
                        return newHref;
                    }

                    function openHref(newHref) {
                        if (openBlank) {
                            window.open(newHref);
                        } else {
                            location.href = newHref;
                        }
                    }

                    function aOpenBlank() {
                        dqSlt("a:not([JqMA-mark-blank])").attr("JqMA-mark-blank", 1).filter(function() {
                            return !/^javascript:|^#$/.test(this.href);
                        }).attr("target", "_blank");
                    }

                    function btnBlankClick() {
                        openBlank = openBlank ? 0 : 1;

                        dqSlt(".JqMA-btn-blank", "all").each(function() {
                            this.style.setProperty("color", openBlank ? "green" : null, "important");
                        });
                        if (openBlank) {
                            aOpenBlank();
                        } else {
                            dqSlt("[JqMA-mark-blank]").removeAttr("JqMA-mark-blank").attr("target", null);
                        }
                        setValLoc("openBlank", openBlank);
                    }

                    var openBlank = getValLoc("openBlank", 0),
                        preIframes = new Set();

                    dqSlt("html").on('click', '.JqMA-btn-blank', btnBlankClick).slideScreen('.JqMA-btn-blank', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetY > thisHeight || offsetY < -thisHeight || offsetX > thisHeight) {

                            let firstTarget;
                            waitClick("not", function(event) {
                                if (!firstTarget) {
                                    firstTarget = event.target;
                                    return;
                                }
                                dqSlt("body").off("click.tempClickFunc");

                                dqSlt(".JqMA-btn-all", "all").each(function() {
                                    this.style.setProperty("display", "block", "important");
                                });
                                let isInput = $(firstTarget).closest("a").length ? 0 : 1,
                                    first_aCss;
                                if ($(firstTarget).is(event.target)) copyToClipboard(getSelector(event.target));

                                firstTarget = $(firstTarget).closest(isInput ? "input" : "a");
                                let lastTarget = $(event.target).closest(isInput ? "input" : "a");

                                if (firstTarget.length && lastTarget.length) {
                                    dqSlt(isInput ? "input" : "a").each(function() {
                                        if ($(this).is(firstTarget)) first_aCss = 1;
                                        if (first_aCss && this.href && !preIframes.has(this.href)) {
                                            preIframes.add(this.href);

                                            dqSlt("body", "one").append($("<iframe>").attr({
                                                src: this.href,
                                                scrolling: "no",
                                                style: "box-sizing: border-box !important; overflow: hidden !important; width: 100% !important; min-height: 150vh!important;"
                                            }).on("load", function() {
                                                $(this).before($('<p class="pagetual_pageBar">'));
                                                let _this = this;
                                                setTimeout(function() {
                                                    $(_this).contents().length && _this.replaceWith(...$(_this).contents().find("html"));
                                                }, 1000);
                                            }));
                                        }
                                        first_aCss && isInput && $(this).prop("checked", true);
                                        if ($(this).is(lastTarget)) return false;
                                    });
                                } else {
                                    alert("请点击链接或复选框!");
                                }
                            });
                        } else {
                            btnBlankClick();
                        }
                    });

                    function fullScreen() {
                        document.querySelector("html").requestFullscreen();

                        dqSlt("head", "one").append(
                            $("<style>").html("body {width: 100vw!important; max-width: none!important;}"));

                        screen.orientation.lock = hengPin;
                        screen.orientation.lock('landscape');
                    }

                    let Drotate = getValLoc("Drotate", 0);

                    dqSlt("html").longPress('.JqMA-btn-blank', function() {
                        Drotate = Drotate ? 0 : 1;
                        if (Drotate) {
                            fullScreen();
                        } else {
                            document.exitFullscreen();
                        }
                        dqSlt(".JqMA-btn-blank", "all").text(Drotate ? "BF" : "B");

                        setValLoc("Drotate", Drotate);
                    });

                    function scrollRun() {

                        Dscroll = Dscroll ? 0 : 1;

                        clearInterval(timeDown);

                        dqSlt(".JqMA-btn-Ju", "all").each(function() {
                            this.style.setProperty("color", Dscroll ? "green" : null, "important");
                        });

                        if (Dscroll) {

                            timeDown = setInterval(function() {

                                let scrollNum = window.innerHeight * 0.00006 * animateTime;

                                autoScrollBy(direction * scrollJu * scrollNum, smoothScroll ? 0 : animateTime);

                            }, animateTime + 5);

                        } else {
                            dqSlt("html,body", "all").stop();

                            visibleDiv().stop();
                        }
                        GM_setValue("scrollJu", scrollJu);
                    }

                    function btnJuClick() {

                        scrollRun();

                        setValLoc("Dscroll", Dscroll);
                    }

                    var Dscroll = getValLoc("Dscroll", 0),
                        timeDown,
                        animateTime = 800;

                    dqSlt("html").on('click', '.JqMA-btn-Ju', btnJuClick).slideScreen('.JqMA-btn-Ju', function(event) {

                        let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event);

                        if (offsetY > thisHeight) {
                            scrollJu -= 1;
                        } else if (offsetY < -thisHeight || offsetX > thisHeight) {
                            scrollJu += 1;
                        } else {
                            btnJuClick();
                            return;
                        }
                        scrollJu = Math.max(scrollJu, 0);

                        dqSlt(".JqMA-btn-Ju", "all").text((smoothScroll ? "`" : "") + scrollJu);

                        GM_setValue("scrollJu", scrollJu);
                    });

                    dqSlt("html").longPress('.JqMA-btn-Ju', function(event) {

                        var inputNum = window.prompt("请输入滚动速度(以`开头表间隔):", (smoothScroll ? "`" : "") + scrollJu);

                        smoothScroll = inputNum.startsWith("`") ? 1 : 0;

                        if (Number(inputNum.replace("`", ""))) {

                            scrollJu = Number(inputNum.replace("`", ""));

                            scrollJu = Math.max(scrollJu, 0);

                            dqSlt(".JqMA-btn-Ju", "all").text((smoothScroll ? "`" : "") + scrollJu);

                            GM_setValue("scrollJu", scrollJu);
                            GM_setValue("smoothScroll", smoothScroll);
                        }
                    });

                })(dom.jQuery);
            },
            runValTime);
}