Greasy Fork

69shuba auto 書簽

自動書籤,更改css,可以在看書頁(https://www.69shuba.com/txt/*/*)找到作者連結

当前为 2024-07-11 提交的版本,查看 最新版本

"use strict";
// ==UserScript==
// @name         69shuba auto 書簽
// @namespace    Paul-16098
// @version      3.3.50.0
// @description  自動書籤,更改css,可以在看書頁(https://www.69shuba.com/txt/*/*)找到作者連結
// @author       Paul-16098
// #region mate_match
// #tag 69shux.com
// @match        https://69shux.com/txt/*/*
// @match        https://69shux.com/txt/*/end.html
// @match        https://69shux.com/book/*.htm*
// #tag www.69shu.top
// @match        https://www.69shu.top/txt/*/*
// @match        https://www.69shu.top/txt/*/end.html
// @match        https://www.69shu.top/book/*.htm*
// #tag www.69shu.cx
// @match        https://www.69shu.cx/txt/*/*
// @match        https://www.69shu.cx/txt/*/end.html
// @match        https://www.69shu.cx/book/*.htm*
// #tag 69shuba.cx
// @match        https://69shuba.cx/txt/*/*
// @match        https://69shuba.cx/txt/*/end.html
// @match        https://69shuba.cx/book/*.htm*
// #tag www.69shuba.pro
// @match        https://www.69shuba.pro/txt/*/*
// @match        https://www.69shuba.pro/txt/*/end.html
// @match        https://www.69shuba.pro/book/*.htm*
// @match        https://www.69shuba.pro/modules/article/bookcase.php
// #endregion mate_match
// @icon         https://www.google.com/s2/favicons?sz=64&domain=69shuba.com
// @grant        window.close
// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        unsafeWindow
// @grant        GM_registerMenuCommand
// @grant        GM_openInTab
// @run-at       document-idle
// @license      MIT
// @supportURL   https://github.com/Paul-16098/vs_code/issues/
// @homepageURL  https://github.com/Paul-16098/vs_code/blob/main/js/userjs/README.md
// ==/UserScript==
/* ==UserConfig==
config:
  is_end_close:
    title: 在結束頁時是否自動關閉
    description: 在結束頁時是否自動關閉
    type: checkbox
    default: true
  is_hook_alert:
    title: 是否劫持alert
    description: 是否劫持alert
    type: checkbox
    default: true
  auto_add_bookcase:
    title: 自動書籤
    description: 自動書籤
    type: checkbox
    default: true
---
debug:
  debug_log:
    title: debug log
    description: debug log
    type: checkbox
    default: false
 ==/UserConfig== */
// https://github.com/scriptscat/scriptcat/issues/264
// ToDo 希望支持// @grant        window.close
var _a, _b, _c, _d, _e, _f, _g, _h;
var debug_log = GM_getValue("debug.debug_log", false);
var is_end_close = GM_getValue("config.is_end_close", true);
var auto_add_bookcase = GM_getValue("config.auto_add_bookcase", true);
var _unsafeWindow = (_a = unsafeWindow !== null && unsafeWindow !== void 0 ? unsafeWindow : globalThis) !== null && _a !== void 0 ? _a : window; //兼容 ios userscripts 的寫法
var _GM_addStyle;
if (typeof GM_addStyle !== "undefined") {
    _GM_addStyle = GM_addStyle;
}
else if (typeof GM !== "undefined" && typeof GM.addStyle !== "undefined") {
    _GM_addStyle = GM.addStyle;
}
else {
    _GM_addStyle = function (cssStr) {
        var styleEle = document.createElement("style");
        styleEle.classList.add("_GM_addStyle");
        styleEle.innerHTML = cssStr;
        document.head.appendChild(styleEle);
        return styleEle;
    };
}
if (debug_log) {
    console.log("set func remove start");
}
function remove_ele() {
    var args = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        args[_i] = arguments[_i];
    }
    try {
        if (args && args.length > 0) {
            args.forEach(function (args) {
                if (debug_log) {
                    console.log("args: ", args);
                    console.log("document.querySelectorAll(args): ", document.querySelectorAll(args));
                }
                if (document.querySelector(args)) {
                    document.querySelectorAll(args).forEach(function (ele) {
                        ele.remove();
                    });
                }
            });
        }
        else {
            throw new Error("fn remove error, args is not a array or args.length =< 0");
        }
    }
    catch (e) {
        console.error(e);
        return [false, args, e];
    }
    return [true, args];
}
if (debug_log) {
    console.log("set func remove end\n", remove_ele);
}
var pattern = {
    is_69shux: function (host) {
        if (host === void 0) { host = window.location.host; }
        if (host === "69shux.com") {
            return true;
        }
        else {
            return false;
        }
    },
    is_bookshelf: function (href) {
        if (href === void 0) { href = window.location.href; }
        if (href === "https://www.69shuba.pro/modules/article/bookcase.php") {
            return true;
        }
        else {
            return false;
        }
    },
    book: {
        get_aid: function (href) {
            var _a;
            if (href === void 0) { href = window.location.href; }
            var aid;
            if (
            // @ts-expect-error
            typeof bookinfo !== "undefined" &&
                // @ts-expect-error
                bookinfo != (undefined || null || void 0)) {
                // @ts-expect-error
                aid = (_a = bookinfo.articleid) !== null && _a !== void 0 ? _a : href.split("/")[4];
            }
            else {
                aid = href.split("/")[4];
            }
            return aid;
        },
        get_cid: function (href) {
            var _a;
            if (href === void 0) { href = window.location.href; }
            var cid;
            if (
            // @ts-expect-error
            typeof bookinfo !== "undefined" &&
                // @ts-expect-error
                bookinfo != (undefined || null || void 0)) {
                // @ts-expect-error
                cid = (_a = bookinfo.chapterid) !== null && _a !== void 0 ? _a : href.split("/")[5];
            }
            else {
                cid = href.split("/")[5];
            }
            return cid;
        },
        pattern: /^(https?:\/\/)((www\.|)(69shuba|69xinshu|69shu|69shux)\.(com|pro|top|cx))\/txt\/[0-9]+\/(?!end)[0-9]+$/gm,
        is: function (href) {
            if (href === void 0) { href = window.location.href; }
            if (pattern.book.pattern.test(href)) {
                return true;
            }
            else {
                return false;
            }
        },
    },
    info: {
        pattern: /^(https?:\/\/)((www\.|)(69shuba|69xinshu|69shu|69shux)\.(com|pro|top|cx))\/book\/[0-9]+\.htm$/gm,
        is: function (href) {
            if (href === void 0) { href = window.location.href; }
            if (pattern.info.pattern.test(href)) {
                return true;
            }
            else {
                return false;
            }
        },
    },
    end: {
        pattern: /^(https?:\/\/)((www\.|)(69shuba|69xinshu|69shu|69shux)\.(com|pro|top|cx))\/txt\/[0-9]+\/end\.html$/gm,
        is: function (href) {
            if (href === void 0) { href = window.location.href; }
            if (pattern.end.pattern.test(href) || pattern.info.pattern.test(href)) {
                return true;
            }
            else {
                return false;
            }
        },
    },
    next_is_end: {
        re: 0,
        is: function () {
            if (!pattern.book.is()) {
                return false;
            }
            var href = "";
            var ele = document.querySelector("div.page1 > a:nth-child(4)");
            if (ele !== (undefined || null)) {
                if (ele.href !== (undefined || null)) {
                    href = ele.href;
                }
            }
            else {
                pattern.next_is_end.re++;
                console.error("網頁未載入完成");
                if (pattern.next_is_end.re >= 5) {
                    return setTimeout(function () {
                        pattern.next_is_end.is();
                    }, 3500);
                }
                else {
                    throw new Error("網頁未載入完成");
                }
            }
            if (pattern.end.is(href)) {
                return true;
            }
            else {
                return false;
            }
        },
    },
};
if (GM_getValue("config.is_hook_alert", true)) {
    var _alert_1 = alert;
    _unsafeWindow.alert = function () {
        var message = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            message[_i] = arguments[_i];
        }
        var blockade = [["添加成功"], ["删除成功!"]];
        var r = false;
        var n = 0;
        blockade.forEach(function (blockade_ele) {
            n++;
            if (JSON.stringify(message) === JSON.stringify(blockade_ele)) {
                console.log("hook alert: ", message);
                r = true;
            }
        });
        if (r === false) {
            if (debug_log) {
                console.log("alert: ", message);
            }
            _alert_1.apply(void 0, message);
        }
    };
}
var ele = [];
if (pattern.book.is()) {
    if (debug_log) {
        console.log("book");
    }
    if (debug_log) {
        console.log("_GM_addStyle start");
    }
    _GM_addStyle("#title {\n    font-size: large;\n    font-weight: bold;\n    color: #000;\n  }\n  \n  .container {\n    margin: 0px !important;\n    min-height: 0px !important;\n    width: 100% !important;\n    max-width: none !important;\n  }\n  \n  .mybox {\n    padding: 0px;\n    margin: 0px;\n  }\n  ");
    if (debug_log) {
        console.log("_GM_addStyle end");
    }
    if (debug_log) {
        console.log("set ele start\n", ele);
    }
    if (debug_log) {
        console.log("set ele end\n", ele);
    }
    if (debug_log) {
        console.log("remove(ele) start");
        var remove_return = remove_ele(".mytitle", ".top_Scroll", "#pagefootermenu", "body > div.container > div > div.yueduad1", "#goTopBtn", "#pageheadermenu", "body > div.container > div.yuedutuijian.light");
        console.log("remove(ele) end\n", remove_return);
    }
    else {
        remove_ele(".mytitle", ".top_Scroll", "#pagefootermenu", "body > div.container > div > div.yueduad1", "#goTopBtn", "#pageheadermenu", "body > div.container > div.yuedutuijian.light");
    }
    if (auto_add_bookcase) {
        (_b = document.querySelector("#a_addbookcase")) === null || _b === void 0 ? void 0 : _b.click();
    }
    else if (debug_log) {
        console.log("auto_bookcase !== true");
    }
    var author = "undefined";
    if (
    // @ts-expect-error
    typeof bookinfo === "undefined" ||
        // @ts-expect-error
        bookinfo != (undefined || null || void 0)) {
        author =
            (_e = (_d = (_c = document
                .querySelector("body > div.container > div.mybox > div.txtnav > div.txtinfo.hide720 > span:nth-child(2)")) === null || _c === void 0 ? void 0 : _c.textContent) === null || _d === void 0 ? void 0 : _d.trim().split(" ")[1]) !== null && _e !== void 0 ? _e : "undefined"; // 網站原有的變量
    }
    var aElement = document.createElement("a");
    aElement.href = "".concat(window.location.origin, "/modules/article/author.php?author=").concat(author);
    aElement.textContent = author;
    aElement.style.color = "#007ead";
    // let divElement: HTMLDivElement = document.querySelector(
    //   "#txtright"
    // ) as HTMLDivElement;
    // divElement.textContent = "";
    // divElement.appendChild(aElement);
    var title = document.querySelector("body > div.container > div.mybox > div.tools");
    // 創建新的 <a> 元素
    var link = document.createElement("a");
    // 設置 <a> 元素的內容為 bookinfo.articlename
    if (
    // @ts-expect-error
    typeof bookinfo != "undefined" &&
        // @ts-expect-error
        bookinfo != (undefined || null || void 0)) {
        if (debug_log) {
            console.log("user bookinfo.articlename");
        }
        link.innerHTML =
            // @ts-expect-error
            (_f = bookinfo.articlename) !== null && _f !== void 0 ? _f : document.querySelector("head > title").innerHTML.split("-")[0];
    }
    else {
        if (debug_log) {
            console.log("from head>title get title");
        }
        link.innerHTML = document
            .querySelector("head > title")
            .innerHTML.split("-")[0];
    }
    // 添加 <a> 元素的類名為 "userjs_add"
    link.classList.add("userjs_add");
    // 設置 <a> 元素的 id 為 "title"
    link.id = "title";
    // 設置 <a> 元素的 href
    link.href = "".concat(window.location.origin, "/book/").concat(pattern.book.get_aid(), ".htm");
    // 將 <a> 元素插入到 title 的父元素中
    (_g = title.parentNode) === null || _g === void 0 ? void 0 : _g.replaceChild(link, title);
}
if (pattern.info.is()) {
    if (debug_log) {
        console.log("info");
    }
    document.querySelector("body > div.container > ul > li.col-8 > div:nth-child(2) > ul > li:nth-child(2) > a").click();
    document.querySelector("body > div.container > ul > li.col-8 > div:nth-child(1) > div > div.booknav2 > p:nth-child(2) > a").style.color = "#007ead";
    document.querySelector("body > div.container > ul > li.col-8 > div:nth-child(1) > div > div.booknav2 > p:nth-child(3) > a").style.color = "#007ead";
}
if (pattern.end.is()) {
    if (debug_log) {
        console.log("end");
    }
    if (is_end_close) {
        window.close();
    }
}
if (pattern.next_is_end.is()) {
    if (debug_log) {
        console.log("next_is_end");
    }
    document.addEventListener("keydown", function (e) {
        if (!e.repeat) {
            switch (true) {
                case e.key === "ArrowRight": {
                    if (debug_log) {
                        console.log('(e.key === "ArrowRight") === true');
                    }
                    if (auto_add_bookcase) {
                        document.querySelector("#a_addbookcase").click();
                    }
                    else if (debug_log) {
                        console.log("auto_bookcase !== true");
                    }
                    if (is_end_close) {
                        window.close();
                    }
                    break;
                }
                default: {
                    if (debug_log) {
                        console.log("e: ", e);
                    }
                    break;
                }
            }
        }
    });
    (_h = document.querySelector("body > div.container > div.mybox > div.page1 > a:nth-child(4)")) === null || _h === void 0 ? void 0 : _h.addEventListener("click", function () {
        var _a;
        if (debug_log) {
            console.log("click");
        }
        if (auto_add_bookcase) {
            (_a = document.querySelector("#a_addbookcase")) === null || _a === void 0 ? void 0 : _a.click();
        }
        else if (debug_log) {
            console.log("auto_bookcase !== true");
        }
        if (is_end_close) {
            window.close();
        }
    });
}
if (pattern.is_bookshelf()) {
    var n_1 = 0;
    var updata_url_1 = [];
    var block_1 = false;
    var block_aid_list_1 = GM_getValue("Block_cid_list", []);
    var block_aid_list_n_1 = 0;
    var all_updata_label = document.querySelectorAll(".newbox2 h3 label");
    all_updata_label.forEach(function (up_data_label) {
        n_1++;
        var url = Array.from(up_data_label.parentNode.parentNode.parentNode.parentNode.querySelectorAll(".newright > a.btn.btn-tp"))[0].href;
        var url_aid = new URLSearchParams(url).get("aid");
        block_aid_list_1.forEach(function (l_aid) {
            if (l_aid == "*") {
                block_aid_list_n_1++;
                block_1 = true;
                return;
            }
            if (l_aid == url_aid) {
                block_aid_list_n_1++;
                block_1 = true;
                return;
            }
        });
        if (block_1 === false) {
            updata_url_1.push(url);
        }
    });
    var MenuId__open_updata_url_1 = GM_registerMenuCommand("".concat(n_1 === 0 ? "沒有" : "\u6709".concat(n_1, "\u500B"), "\u66F4\u65B0").concat(n_1 === 0
        ? ""
        : block_aid_list_n_1 === 0
            ? ",點擊全部打開"
            : ",\u9EDE\u64CA\u6253\u958B".concat(n_1 - block_aid_list_n_1, "\u500B")), function () {
        updata_url_1.forEach(function (value) {
            GM_openInTab(value);
        });
        GM_unregisterMenuCommand(MenuId__open_updata_url_1);
    });
}
GM_registerMenuCommand("debug log: ".concat(debug_log), function () {
    if (debug_log) {
        GM_setValue("debug.debug_log", false);
    }
    else {
        GM_setValue("debug.debug_log", true);
    }
    window.location.reload();
});
GM_registerMenuCommand("auto add bookcase: ".concat(auto_add_bookcase), function () {
    if (auto_add_bookcase) {
        GM_setValue("config.auto_add_bookcase", false);
    }
    else {
        GM_setValue("config.auto_add_bookcase", true);
    }
    window.location.reload();
});
GM_registerMenuCommand("is end close: ".concat(is_end_close), function () {
    if (is_end_close) {
        GM_setValue("config.is_end_close", false);
    }
    else {
        GM_setValue("config.is_end_close", true);
    }
    window.location.reload();
});
//# sourceMappingURL=69shuba%20auto%20%E6%9B%B8%E7%B0%BD.user.js.map