Greasy Fork

Greasy Fork is available in English.

Acfun过滤UP计划

帮助你屏蔽不想看的UP主

目前为 2019-06-03 提交的版本。查看 最新版本

// ==UserScript==
// @name         Acfun过滤UP计划
// @namespace    http://tampermonkey.net/
// @version      1.16
// @description  帮助你屏蔽不想看的UP主
// @author       人文情怀
// @match        http://www.acfun.cn/a/ac*
// @match        http://www.acfun.cn/v/list63
// @match        https://www.acfun.cn/a/ac*
// @match        http://www.acfun.cn/*
// @match        https://www.acfun.cn/*
// @match        https://www.acfun.cn/v/list*
// @match        http://www.acfun.cn/a/ac*
// @match        https://www.acfun.cn/a/ac*
// @match        http://www.acfun.cn/v/ac*
// @match        https://www.acfun.cn/v/ac*
// @require      https://code.jquery.com/jquery-3.4.1.min.js
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM.getValue
// @grant        GM.setValue
// @run-at      document-idle
// ==/UserScript==


function core() {

    'use strict';
    $.info = unsafeWindow.$.info;
    let empty = (a) => {
        return typeof a=="undefined" ? ()=>{} : a;
    };

    //TamperMonkey 和 GreaseMonkey兼容
    let GM_set = typeof GM_setValue == "undefined" ?
        function (key, value, callback, failcallback) {
            //console.log("GM.setvalue")
            let p = GM.setValue(key, value);
            p.then(empty(callback), empty(failcallback));


        }
    : function (key, value, callback) {
        let res = GM_setValue(key, value);
        callback();
    };


    let GM_get = typeof GM_getValue == "undefined" ?
        function (key, value, callback) {
            let p = GM.getValue(key, value);
            p.then((debug)=>{empty(callback)(debug); }, ()=>{callback(value);});
            //console.log("empty", empty(callback));
        }
    : function (key, value, callback, failcallback) {
        let res = GM_getValue(key, value);
        callback(res);
    }


    //清空列表。DEBUG用
    function cleanList() {

        GM_set("ACFUN_BLOCK_LIST", []);
    }

    let up = function (callback) {
        GM_get("ACFUN_BLOCK_LIST", [], callback);
    };

    function addToList(id, callback) {
        //let old =
        up((old) => {
            if (old.indexOf(id) >= 0) {
                $.info.show("你已经屏蔽过UP主[" + id + "]啦!")
                return;
            }
            old.push(id);
            GM_set("ACFUN_BLOCK_LIST", old, () => {
                $.info.show("已将UP主[" + id + "]加入屏蔽列表")
                empty(callback)();
            });
        });
    }

    function removeFromList(id, callback) {
        up((old) => {
            let i = old.indexOf(id);
            if (i >= 0) {
                old.splice(i, 1);
            }
            GM_set("ACFUN_BLOCK_LIST", old, () => {
                $.info.show("已将UP主[" + id + "]移出屏蔽列表。");
                empty(callback)();
            });
        });
    }

    let filterButton = document.createElement("div");

    function initButton() {
        document.body.appendChild(filterButton);
        $(filterButton)
            .css("width", "15px")
            .css("height", "15px")
            .css("background-color", "rgba(255,0,0,1)")
            .css("font-familty", "'黑体',serif")
            .css("font-weight", "600")
            .css("font-size", "11px")
            .css("padding", "1.5px")
            .css("left", "0")
            .css("top", "0")
            .css("transform", "translate(0,0)")
            .css("display", "block")
            .css("position", "absolute")
            .css("z-index", "99999")
            .css("background-size", "contain")
            .css("background-image", "url(data:image/png;base64,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)")
            .css("border-radius","11px")
            .css("border","2px rgb(230,230,230) solid")
            .css("cursor","pointer")
    }


    //获得所有主页的UP的DOM TAG
    function getHomeSelection(mark, mval, addMark) {
        if (typeof addMark == "undefined") {
            addMark = false;
        }
        let res = [];
        //过滤主页视频
        let selections = $("a[data-info]");
        for (let i = 0; i < selections.length; i++) {
            let tag = selections[i];
            let m = tag[mark];
            //if (addMark) tag[mark] = mval;
            if (typeof mark !== "undefined" && m !== mval && !addMark) {
                //continue;
            }
            let info = $(tag).attr("data-info");
            let json = JSON.parse(info);
            let username = json.userName;
            res.push({tag: $(tag).parent()[0], username: username, type: 1});
            //$(tag)
        }

        //过滤右边排行榜视频
        let sel = $("ul[data-con]");

        //For each rank
        for (let i = 0; i < sel.length; i++) {
            let tag = sel[i];
            let rows = $(tag).find("li");
            //For each row
            for (let ri = 0; ri < rows.length; ri++) {
                let rowTag = rows[ri];
                //
                let m = rowTag[mark];
                //if (addMark) rowTag[mark] = mval;
                if (typeof mark !== "undefined" && m !== mval && !addMark) {
                    //continue;
                }
                //
                let aTag = $(rowTag).find("[title]")[0];
                let title = $(aTag).attr("title");
                let matches = usernameByTitle(title)
                if (matches) {
                    let username = matches[0].substring(3).trim();
                    //$(rowTag)
                    res.push({tag: rowTag, username: username, type: 2});
                }
            }
        }
        //--------------------
        sel = $("div[data-con]");
        for (let i = 0; i < sel.length; i++) {
            let tag = sel[i];
            let rows = $(tag).find("li");
            //For each row
            for (let ri = 0; ri < rows.length; ri++) {
                let rowTag = rows[ri];
                //
                let m = rowTag[mark];
                //if (addMark) rowTag[mark] = mval;
                if (typeof mark !== "undefined" && m !== mval && !addMark) {
                    //continue;
                }
                //
                let aTag = $(rowTag).find("[title]")[0];
                let title = $(aTag).attr("title");
                if (title) {
                    let matches = usernameByTitle(title)
                    if (matches) {
                        let username = matches[0].substring(3).trim();

                        res.push({tag: rowTag, username: username, type: 3});

                    }
                }
            }
        }
        //香蕉搒
        var allBananas = $("figure.fl.block-box.block-video.weblog-item").find("> figcaption > em > a");
        for (let i = 0; i < allBananas.length; i++) {
            let sel = allBananas[i];
            let upname = $(sel).attr("title");
            let tag = $(sel).parent().parent().parent()[0];
            //console.log(tag);
            res.push({tag: tag, username: upname, type: 1});
        }
        return res;
    }

    function getListSelection(mark, mval, addMark) {
        if (typeof addMark == "undefined") {
            addMark = false;
        }
        let res = [];
        let sel = $("div.weblog-item");
        //console.log("sel weblog")
        for (let i = 0; i < sel.length; i++) {
            let row = sel[i];

            //
            let m = row[mark];
            if (addMark) row[mark] = mval;
            //console.log(mark, mval, m);
            if (typeof mark !== "undefined" && m !== mval && !addMark) {
                //console.log("continue");
                continue;
            }
            //

            let aTag = $(row).find(".atc-up")[0];
            let username = $(aTag).attr("title");

            res.push({tag: row, username: username, type: 4});

        }
        return res;
    }
    let d3=unsafeWindow.d3;

    function displayList() {
        up((data)=>{
            $("#blocklist").empty();
            for (let i=0;i<data.length;i++){
                let style1 = "font-size:11px;display:inline-block;margin:2px;height:18px;background-color:white;"
                let style2 = "width:18px; height:18px; line-height:18px; padding: 2px; background-color: rgb(255,120,120); border-width:0;";
                let b = $("<div class='blockname' style='"+style1+"'><span>"+data[i]+"</span><button style='"+style2+"'>×</button></div>")
                let str = data[i];
                b.on("click", function(){
                    removeFromList(str, ()=>{
                        displayList();
                    });

                });
                $("#blocklist").append(b);
            }

        });
    }

    let show = false;
    let dragging =false;

    function addPanel() {
        let dx=0;
        let dy=0;
        let sx=0;
        let sy=0;
        let ox=0;
        let oy=0;

        let ppanel = $("<div id='blockbuttoncontainer' style=';z-index:999;position:fixed;   left: 0; top: 0px;text-orientation:upright;'></div>");
        let dragbutton = $("<div id='blockdrag' style='height:17px; width: 23px; background-color:rgb(230, 121, 126);text-align:center;cursor:grab; user-select:none'>|||||</div>")
        let pbutton = $("<button id='blockbutton' style='height: 80px; padding: 3px; width: 23px;background-color:rgb(255, 193, 193); border-width:0;'>屏蔽列表</button>");

        let p = $("<div id='blockpanel' style=' width: 178px;display:none; padding: 0px;z-index:998;position:fixed; background-color:rgb(255, 196, 196);left:23px; top: 0px;; '></div>");
        let plist = $("<div id='blocklist' style='height: 220px; border: 1px solid white; width: 170px; margin: 3px;overflow-y:scroll'></div>")
        let pAd = $("<div style='border: 1px solid white; margin:3px;padding: 2px; font-size: 11px;background-color:#3d7bb1; color: white'>喜欢的话 安利哟:<a target='_blank' style='color:rgb(219, 219, 241); text-decoration: underline' href='/a/ac10271618'>ac10271618</a></div>")
        GM_get("ACFUN_BLOCK_POS", "{ox:0, oy:0}", (d)=>{
            ox=parseInt(d.ox);
            oy=parseInt(d.oy);

            ox = isNaN(ox) ? 0 : ox;
            oy = isNaN(oy) ? 300 : oy;

            console.log(ox,oy);
            p.css("transform","translate("+(ox)+"px,"+(oy)+"px)");
            $(ppanel).css("transform","translate("+(ox)+"px,"+(oy)+"px)");
        });


        $(document.body).append(ppanel);
        ppanel.append(dragbutton);
        ppanel.append(pbutton);
        p.append(plist);
        p.append(pAd);
        $(document.body).append(p);
        pbutton.on("click", function () {
            show = !show;
            p.css("display", show ? "block" : "none");
            if (show) {
                displayList();
            }
        })
        dragbutton.on("mousedown", (event )=>{
            sx=event.pageX;
            sy=event.pageY;
            dragging=true;
        });
        $(document).on("mouseup", ()=>{
            if (dragging){
                ox=dx+ox;
                oy=dy+oy;
                dx=0;
                dy=0;
                let maxHeight = $(window.top).height()-123;
                let maxWidth = 240;
                ox = ox>maxWidth?maxWidth:ox;
                ox = ox<0?0:ox;
                oy= oy<0?0:oy;
                oy = oy>maxHeight? maxHeight: oy;
                p.css("transform","translate("+(ox)+"px,"+(oy)+"px)");
                $(ppanel).css("transform","translate("+(ox)+"px,"+(oy)+"px)");
                GM_set("ACFUN_BLOCK_POS", {ox:ox,oy:oy}, (d)=>{
                    //console.log("DEBUG", "POSITION SET", ox, oy);
                });
            }
            dragging=false;
        });
        $(document).on("mousemove",(event)=>{
            if (dragging){
                dx=event.pageX-sx;
                dy=event.pageY-sy;
                $(ppanel).css("transform","translate("+(dx+ox)+"px,"+(dy+oy)+"px)")
            }
        })
    }


    function addButton(pageType) {
        //console.log("page type", pageType);
        let attach = function (list) {
            //console.log("list",list)
            for (let i = 0; i < list.length; i++) {

                let tag = list[i].tag;
                $(tag).mousemove(function () {

                    //console.log(tag);
                    if (window.currentTag == tag) return;
                    let rect = tag.getBoundingClientRect();
                    let brect = filterButton.getBoundingClientRect();
                    let button = $(filterButton).detach();
                    $(tag)
                        .css("white-space", "nowrap")
                        .css("overflow", "visible")
                        .css("position", "relative")
                        .append(button)

                    window.currentTag = tag;
                    window.currentUser = list[i].username;
                    $(filterButton).off("click");
                    if (pageType !== "home") {
                        $(filterButton)

                            .css("right", "0")
                            .css("top", "0")
                            .css("transform", "translate(0,0)")
                        //.css("z-index", "99999")
                    }

                    $(filterButton)
                        .on("click",
                            function () {
                        console.log("current", window.currentTag, window.currentUser);
                        if (typeof window.currentTag !== "undefined" && window.currentTag !== null) {
                            addToList(window.currentUser, ()=>{displayList();});

                        }
                    })
                        .show();
                })
                $(tag).mouseleave(function () {
                    let rect = tag.getBoundingClientRect();
                    $(filterButton).detach();
                    window.currentTag = null;
                    window.currentUser = null;
                    $(filterButton).off("click").hide()

                })

            }
        }
        if (pageType == "home") {
            let list = getHomeSelection("ATTACHED", true, true);
            attach(list);
        } else {
            let list = getListSelection("ATTACHED", true, true);
            attach(list);
        }

    }

    let pannelAdded = false;

    function addUI(pageType) {
        addButton(pageType);
        if (!pannelAdded) {
            addPanel();
            pannelAdded = true;
        }
    }


    //
    console.log("match type", window.location.href)

    function usernameByTitle(title) {
        let regex = /UP:(.+)[\s\v\n]/g
        return title.match(regex);
    }

    function hideTag(tag){
        if ($(tag).css("visibility")!=="hidden"){
            $(tag).css("visibility", "hidden");
            let d=$(tag).css("display");
            tag["_d"]=d;
            $(tag).css("display", "none");
            let bar = $(tag).next();
            //console.log(bar);
            if (bar.length>0 && $(bar).prop("tagName").toUpperCase()=="HR"){
                $(bar).css("display", "none");
            }
        }
    }

    function showTag(tag){
        if ($(tag).css("visibility")!=="visible"){
            $(tag).css("visibility", "visible");
            if (typeof tag["_d"]!=="undefined"){
                $(tag).css("display", tag["_d"]);
            }else{
                $(tag).css("display", "none");
            }
            let bar = $(tag).next();
            if ($(bar).prop("tagName").toUpperCase()=="HR"){
                $(bar).css("display", "block");
            }
        }
    }


    function FilterVideos() {
        up((upList) => {


            //过滤主页视频
            let selections = getHomeSelection("FILTER", false, false);
            for (let i = 0; i < selections.length; i++) {
                let tag = selections[i].tag;
                ;
                let username = selections[i].username;
                if (upList.indexOf(username) >= 0) {
                    //console.log("hiding", tag);
                    hideTag(tag);
                } else {
                    showTag(tag);
                }
            }
            //过滤右边排行榜视频
            let sel = $("ul[data-con]");

            //For each rank
            for (let i = 0; i < sel.length; i++) {
                let tag = sel[i];
                let rows = $(tag).find("li");
                //For each row
                for (let ri = 0; ri < rows.length; ri++) {
                    let rowTag = rows[ri];
                    let aTag = $(rowTag).find("[title]")[0];
                    let title = $(aTag).attr("title");
                    let matches = usernameByTitle(title)
                    if (matches) {
                        let username = matches[0].substring(3).trim();
                        if (upList.indexOf(username) >= 0) {
                            //找到了,隐藏本条
                            hideTag(rowTag);
                        } else {
                            showTag(rowTag);
                        }
                    }
                }
            }
        });

    }

    //过滤主页文章区
    function FilterArticles() {
        up((upList) => {
            let sel = $("div[data-con]");
            for (let i = 0; i < sel.length; i++) {
                let tag = sel[i];
                let rows = $(tag).find("li");
                //For each row
                for (let ri = 0; ri < rows.length; ri++) {
                    let rowTag = rows[ri];
                    let aTag = $(rowTag).find("[title]")[0];
                    let title = $(aTag).attr("title");
                    if (title) {
                        let matches = usernameByTitle(title);
                        if (matches) {
                            let username = matches[0].substring(3).trim();
                            if (upList.indexOf(username) >= 0) {
                                //找到了,隐藏本条
                                // console.log("过滤文脏区 rank=", i, "row=",ri,"username=",username);
                                hideTag(rowTag);
                            } else {
                                showTag(rowTag);
                            }
                        }
                    }
                }
            }
        });

    }

    //过滤文章列表页
    function FilterListPage() {
        up(((upList) => {
            let sel = $("div.weblog-item");
            //console.log("uplist = ", upList, sel);
            for (let i = 0; i < sel.length; i++) {
                let row = sel[i];
                //if (typeof row.visited=="undefined"){ row.visited = true; }else{continue;}
                let aTag = $(row).find(".atc-up")[0];
                let username = $(aTag).attr("title");

                //console.log("username",username, window.currentUser);
                if (upList.indexOf(username) >= 0) {
                    //console.log("过滤文脏区",username);
                    //屏蔽
                    hideTag(row);
                } else {
                    showTag(row);
                }
            }
        }))

    }

    function HandleHomePage() {
        //屏蔽首页UP,包括视频和右边的文章区
        FilterVideos();
        FilterArticles();
        addUI("home");
        setTimeout(HandleHomePage, 800);
    }

    function HandleListPage() {
        //屏蔽文章页,
        FilterListPage();
        addUI("list");
        setTimeout(HandleListPage, 500);
    }

    function HandleArticlePage() {
        //对于单独的文章页或者视频,添加一个按钮屏蔽当前UP主

        console.log(window.location.href.indexOf("www.acfun.cn/a/ac"), window.location.href.indexOf("www.acfun.cn/v/ac"))

        let button = $("<div style='z-index: 9999;position:fixed; left:0px; top: 200px;  width:30px; padding: 5px; background-color: rgba(255,50,50,0.3);user-select:none; cursor: pointer;'>屏蔽UP</div>")
        //console.log("DEBUG Attach Button S.");
        $(document.body).append(button);
        //console.log("DEBUG Attach Button S Done.");
        button.on("click", function () {
            let upname = "";
            if (window.location.href.indexOf("www.acfun.cn/v/ac") >= 0) {
                upname = $("a.name-wrap").html();
                console.log("upname", upname);
            } else if (window.location.href.indexOf("www.acfun.cn/a/ac") >= 0) {
                upname = $("a.upname").html();
                console.log("upname", upname);
            }
            addToList(upname);

        })
    }

    function initLoad() {

        if (typeof $ == "undefined") {
            console.log("Loading..", typeof unsafeWindow.$);
            $=unsafeWindow.$;
            setTimeout(initLoad, 1000);
            return;
        }

        function isArtileListPage(){
            let t = ["list63","list110","list73","list164","list184","list74","list75"];
            let url = window.location.href;
            for (let i=0;i<t.length; i++){
                if (url.indexOf(t[i])>=0) return true;
            }
            return false;
        }
        console.log("DEBUG body Loaded");
        if (window.location.href === "http://www.acfun.cn/" || window.location.href === "https://www.acfun.cn/") {

            initButton();
            HandleHomePage();
        }
        if (window.location.href.indexOf("www.acfun.cn/v/list") >= 0) {
            //可能是文章列表
            initButton();
            if (isArtileListPage()){
                console.log("DEBUG handle list page");
                HandleListPage();
            }else{
                HandleHomePage();
            }
        }
        if (window.location.href.indexOf("www.acfun.cn/v/ac") >= 0 || window.location.href.indexOf("www.acfun.cn/a/ac") >= 0) {
            console.log("DEBUG handle single Page");
            HandleArticlePage();
        }
        $.info.success("ACFUN投稿屏蔽系统 —— 启动成功! 欢迎安利哟!")
    }
    initLoad();
};

core();