Fanfou Local Blacklist

为饭否网页端加入了本地屏蔽功能,只要消息转发链中包含屏蔽列表中的用户,就能屏蔽那条消息。(暂时不能考虑因为消息过长被挤掉的用户)

当前为 2018-03-19 提交的版本,查看 最新版本

// ==UserScript==
// @name         Fanfou Local Blacklist
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  为饭否网页端加入了本地屏蔽功能,只要消息转发链中包含屏蔽列表中的用户,就能屏蔽那条消息。(暂时不能考虑因为消息过长被挤掉的用户)
// @author       You
// @include      http://fanfou.com/*
// @grant    GM.getValue
// @grant    GM.setValue
// @run-at document-end
// ==/UserScript==

(function() {
    'use strict';
    GM.getValue('blacklist').then(function(list){
        console.log(list);
        list = JSON.parse(list);
        if (window.location.pathname != '/home') {
            var url = window.location.pathname;
            var blocked = list.includes(url);
            var actions = document.querySelector('#panel .actions');
            var addButton = document.createElement('a');
            addButton.href = 'javascript:void(0);';
            var setButton = function(b) {
                addButton.className = b?'bl':'bh';
                addButton.text = b?'取消屏蔽':'本地屏蔽';
            };
            var clicking = false;
            addButton.onclick = function(e) {
                if (clicking) return false;
                clicking = true;
                if (blocked) {
                    var index = list.indexOf(url);
                    list.splice(index, 1);
                } else {
                    list.push(url);
                }
                blocked = !blocked;
                setButton(blocked);
                GM.setValue('blacklist', JSON.stringify(list));
                clicking = false;
            };
            setButton(blocked);
            actions.appendChild(addButton);
            console.log('done');
        } else {
            var messages = document.querySelector('#stream ol').children;
            for (var i=0; i<messages.length; ++i) {
                var message = messages[i];
                var bad = false;
                var users = Array.from(message.querySelectorAll('.former'));
                users.push(message.querySelector('.author'));
                bad = bad || list.some(function(path){
                    return users.some(function(user){
                        return user.href.endsWith(path);
                    });
                });
                //if (bad) message.remove();
            }
        }
    });
})();