b站历史记录-仅显示番剧

b站历史记录添加番剧筛选功能

// ==UserScript==
// @name         b站历史记录-仅显示番剧
// @namespace    http://tampermonkey.net/
// @version      0.1.2
// @description  b站历史记录添加番剧筛选功能
// @author       Potato-DiGua
// @supportURL   https://github.com/Potato-DiGua/scripts/blob/main/bilibili_bangumi_history/README.md
// @match        https://www.bilibili.com/account/history
// @icon         http://static.hdslb.com/images/favicon.ico
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    var $ = $ || window.$;

    function debounce(fn, delay = 300) {
        let ctx, args, timer = null;
        function later() {
            fn.apply(ctx, args);
        }
        return function () {
            ctx = this;
            args = arguments;
            if (timer) {
                clearTimeout(timer);
                timer = null;
            }
            timer = setTimeout(later, delay);
        }
    }

    function isBangumiHistory(liNode) {
        if (liNode == null) {
            return false;
        }
        const p = liNode.find("div.r-info.clearfix > div.cover-contain > p").first();
        return p != null && p.text() == "番剧";
    }

    function setDisplay(display) {
        $("#history_list > li").filter(function (_, element) {
            return !isBangumiHistory($(element))
        }).css("display", display ? "none" : "block");
    }

    function init() {
        const input = $("<input/>", { type: "checkbox", style: "display:inline-block; vertical-align:middle; " })
        input.change(function () {
            setDisplay(this.checked);
        });
        $("#app > div > div.newlist_info > div > div.b-head-c").after($("<div/>", {
            style: "display:inline-block; margin-left:16px;padding:6px 0; vertical-align:middle; font-size: 12px;"
        }).append($("<p/>").append(input, "仅显示番剧")));

        const inputEle = input[0];

        const resizeOb = new ResizeObserver(debounce(_ => {
            console.log("大小发生变化");
            setDisplay(inputEle.checked);
        }));
        resizeOb.observe($("#history_list")[0])
    }

    init();
})();