根据UID屏蔽主题帖及回复(NGA)

通过指定UID,淡化显示其主题帖及回帖,达到护眼的效果。

// ==UserScript==
// @name            根据UID屏蔽主题帖及回复(NGA)
// @name:en         Lightened-posts-NGA
// @namespace       https://github.com/Elypha/lightened-posts
// @version         0.6
// @description     通过指定UID,淡化显示其主题帖及回帖,达到护眼的效果。
// @description:en  Alter unpleasing posts, according to posters' uid, into a lightened style.
// @author          金光闪闪大萌德@NGA
// @date            04/08/2018
// @modified        19/9/2019
// @supportURL      https://github.com/Elypha/lightened-posts/issues
// @match           bbs.nga.cn/thread.php*
// @match           bbs.nga.cn/read.php*
// @match           bbs.nga.cn/nuke.php?func=ucp&uid=*
// @match           nga.178.com/thread.php*
// @match           nga.178.com/read.php*
// @match           nga.178.com/nuke.php?func=ucp&uid=*
// @grant           none
// @license         GUN 3.0
// ==/UserScript==

//CLEAR
//localStorage.removeItem("uid_list");

//PAGE_SWITCH
var url = window.location.href;
var switch_url_thread = url.search(/thread\.php/);
var switch_url_read = url.search(/\/read\.php/);
var switch_url_nuke = url.search(/nuke\.php/);

if (switch_url_nuke>0){
    //个人资料页面
    //添加黑名单
    var button_block = document.createElement("button");
    button_block.innerHTML = "BLOCK";

    var body_block = document.querySelector("#ucp_block");
    body_block.appendChild(button_block);

    button_block.addEventListener ("click", function() {
        if(localStorage.getItem("uid_list") === null){
            //初始化
            var uid_list_initialization = "00000000";
            localStorage.setItem("uid_list",uid_list_initialization);
            alert("初始化完成,请刷新后重试");
        }else{
            //非首次运行
            var read_list = localStorage.getItem("uid_list");

            var url = window.location.href;
            var uid = url.replace(/^((https|http)?:\/\/)[^\s]+[uid=]/g,'');

            var is_exist = read_list.search(uid);
            if (is_exist>=0){
                alert("此用户已存在于黑名单中")
            }else{
                read_list = uid + "|" + read_list;
                read_list = read_list.replace(/\|\|/g, "|");
                localStorage.setItem("uid_list",read_list);
                alert("成功加入黑名单");
            }
        }
    });
    //移除黑名单
    var button_block_remove = document.createElement("button");
    button_block_remove.innerHTML = "REMOVE";

    var body_block_remove = document.querySelector("#ucp_block");
    body_block_remove.appendChild(button_block_remove);

    button_block_remove.addEventListener ("click", function() {
        if(localStorage.getItem("uid_list") === null){
            //初始化
            var uid_list_initialization = "00000000";
            localStorage.setItem("uid_list",uid_list_initialization);
            alert("初始化完成,请刷新后重试");
        }else{
            //非首次运行
            var read_list = localStorage.getItem("uid_list");

            var url = window.location.href;
            var uid = url.replace(/^((https|http)?:\/\/)[^\s]+[uid=]/g,'');

            var is_exist = read_list.search(uid);
            if (is_exist>=0){
                var uid_remove_RE = new RegExp(uid);
                read_list = read_list.replace(uid_remove_RE, "");
                read_list = read_list.replace(/\|\|/g, "|");
                localStorage.setItem("uid_list",read_list);
                alert("已从黑名单中移除");
            }
        }
    });
    //手动输入
    var button_block_input = document.createElement("button");
    button_block_input.innerHTML = "INPUT";

    var body_block_input = document.querySelector("#ucp_block");
    body_block_input.appendChild(button_block_input);

    button_block_input.addEventListener ("click", function() {
        var uid_input = prompt("输入uid,请参照下述格式\n单个uid:\n12340000\n多个uid:\n12340000|23450000|34560000","");
        if(uid_input.length>1){
            uid_input = uid_input.replace("|", "|");
            var read_list = localStorage.getItem("uid_list");
            read_list = uid_input + "|" + read_list;
            read_list = read_list.replace(/\|\|/g, "|");
            localStorage.setItem("uid_list",read_list);
            alert("成功加入黑名单");
        }
    });
    //展出
    var button_block_view = document.createElement("button");
    button_block_view.innerHTML = "VIEW";

    var body_block_view = document.querySelector("#ucp_block");
    body_block_view.appendChild(button_block_view);

    button_block_view.addEventListener ("click", function() {
        var read_list = localStorage.getItem("uid_list");
        alert(read_list);
    });
}

//TRANSFER_TO_RE
var uid_list = localStorage.getItem("uid_list");
var uid_list_RE = new RegExp(uid_list);

if (switch_url_thread>0){
    //主题帖列表页面
    block_thread();
    var height_thread = document.documentElement.scrollHeight;
    window.addEventListener('scroll', async () => {
        var height_thread_new = document.documentElement.scrollHeight;
        if(height_thread_new - height_thread > 0){
            block_thread();
            height_thread = height_thread_new;
        }
    })

    function block_thread() {
        var rowslength = document.getElementById('topicrows').rows.length;
        var table = document.getElementById('topicrows');
        var i;
        for(i=0;i<rowslength;i++){
            var str = document.getElementById('topicrows').rows[i].cells[2].innerHTML;
            var result = str.search(uid_list_RE);
            if (result > 0) {
                var color_1 = document.getElementById('topicrows').rows[i].cells[2].querySelector("a[title]");
                color_1.style.opacity=0.15;
                var color_2 = document.getElementById('topicrows').rows[i].querySelector("a.topic");
                color_2.style.opacity=0.15;
            }
        }
    }
}

if (switch_url_read>0){
    //贴内页面
    block_read();
    var height_read = document.documentElement.scrollHeight;
    window.addEventListener('scroll', async () => {
        var height_read_new = document.documentElement.scrollHeight;
        if(height_read_new - height_read > 0){
            block_read();
            height_read = height_read_new;
        }
    })

    function block_read() {
        var length = document.getElementById("m_posts_c").getElementsByClassName('postbox').length;
        var first_post_info = document.getElementById("m_posts_c").getElementsByClassName('posterinfo')[0];
        var startpoint = first_post_info.id;
        var first_number = startpoint.replace(/[^\d.]/g,'');
        var terminal = Number(length) + Number(first_number);
        var i;
        for(i=first_number;i<terminal;i++){
            var info_number = 'postauthor' + i;
            var post_number = 'postcontent' + i;
            var post_avatar = 'posterinfo' + i;
            var str_url = document.getElementById(info_number);
            var str = String(str_url);
            var result = str.search(uid_list_RE);
            if (result > 0) {
                document.getElementById(post_number).style.opacity=0.15;
                document.getElementById(post_avatar).style.opacity=0.15;
            }
        }
    }
}