SteamCN 投票帖子清理

清理 SteamCN 投票帖子

// ==UserScript==
// @name         SteamCN 投票帖子清理
// @namespace    local.CR
// @version      0.0.1
// @description  清理 SteamCN 投票帖子
// @author       CharRun
// @match        https://steamcn.com/f148*
// @run-at       document-end
// ==/UserScript==

(() => {
    let config = {
        autoClean: true,
        cleanAll: false,
        whiteList: [] // todo
    };

    let voteList = [];
    let cleanList = [];
    let display = false;

    function addButton() {
        let displayButton = document.createElement("a");
        let autoCleanButton = document.createElement("a");
        let cleanAllButton = document.createElement("a");
        displayButton.href = "javascript:;";
        autoCleanButton.href = "javascript:;";
        cleanAllButton.href = "javascript:;";
        displayButton.innerHTML = `${display ? "隐藏" : "显示"}`;
        autoCleanButton.innerHTML = `${
            config.autoClean ? "取消自动隐藏" : "打卡自动隐藏"
        }`;
        cleanAllButton.innerHTML = `${
            config.cleanAll ? "取消全部隐藏" : "打开全部隐藏"
        }`;

        displayButton.onclick = function() {
            display = !display;
            this.innerHTML = `${display ? "隐藏" : "显示"}`;
            display ? removeClean() : filter();
        };
        autoCleanButton.onclick = function() {
            config.autoClean = !config.autoClean;
            this.innerHTML = `${
                config.autoClean ? "取消自动隐藏" : "打卡自动隐藏"
            }`;
            localStorage.setItem("cleanVote", JSON.stringify(config));
        };
        cleanAllButton.onclick = function() {
            config.cleanAll = !config.cleanAll;
            this.innerHTML = `${
                config.cleanAll ? "取消全部隐藏" : "打开全部隐藏"
            }`;
            localStorage.setItem("cleanVote", JSON.stringify(config));
        };
        let pNode = document.querySelectorAll("#separatorline > tr > td");
        pNode[1].appendChild(displayButton);
        pNode[3].appendChild(autoCleanButton);
        pNode[4].appendChild(cleanAllButton);
    }

    function cleanVote() {
        voteList = [];
        let ele = document.querySelectorAll("#threadlisttableid tbody");
        for (let index = 0; index < ele.length; index++) {
            let e = ele[index].querySelector("tr td img");
            if (e && e.alt === "投票") {
                let a = ele[index].querySelector(".by.by-author a");
                let author = a.innerHTML;
                let uid = a.href.match(/[0-9]+?$/);
                voteList.push({ author, uid, dom: ele[index] });
            }
        }
        let pNode = document.querySelectorAll("#separatorline > tr > td");
        pNode[2].innerHTML = `投票帖子数量 : ${voteList.length}`;
        !display && filter();
    }

    function filter() {
        cleanList = voteList.filter(ele => {
            if (config.autoClean) {
                if (config.cleanAll) {
                    ele.dom.style.display = "none";
                    return true;
                } else {
                    if (config.whiteList.indexOf(ele.uid) >= 0) return false;
                    ele.dom.style.display = "none";
                    return true;
                }
            }
            return false;
        });
    }

    function removeClean() {
        cleanList = cleanList.filter(ele => {
            ele.dom.style.display = "table-row-group";
            return false;
        });
    }

    config = JSON.parse(localStorage.getItem("cleanVote") || null) || config;
    let ob = new MutationObserver(cleanVote);
    ob.observe(document.querySelector("#threadlisttableid"), {
        childList: true
    });
    addButton();
    cleanVote();
})();