// ==UserScript== // @name Blocking Douban User Status // @namespace Zcc // @version 0.4 // @description Blocking Douban User's Status (including reposts) // @author Zcc // @match *://www.douban.com/* // @match *://www.douban.com/people/* // @copyright 2017+, Zcc // @downloadURL none // ==/UserScript== var blocked_UID, blocked_USR; // get blocking list function getBlocked(){ blocked_UID = JSON.parse(localStorage.getItem('douban_blocked_UID')) || []; blocked_USR = JSON.parse(localStorage.getItem('douban_blocked_USR')) || []; } getBlocked(); if(window.location.pathname === "/"){ // masking user posts/reposts on douban homepage via blocking list console.log("当前屏蔽的用户ID:", blocked_UID); console.log("当前屏蔽的用户昵称:", blocked_USR); var ids_blocked = new RegExp(blocked_UID.join('|')); usr_blocked = new RegExp(blocked_USR.join('|')); $(".status-wrapper").each(function(index){ // "this" directly points to DOM object in each method if (!blocked_UID.length || !blocked_USR.length) { return false; } var resharer = this.querySelector(".reshared_by > a"), usrname = resharer.title ? resharer.title : ""; if (this.dataset.uid.match(ids_blocked) || usrname.match(usr_blocked)) { // block the posts/reposts this.style.display = "none"; // $(this).hide(); } }); }else{ // modify blocking list on user homepage var blockStatus = $('.user-opt .user-group'), listEle = $('.more-opt .user-group-list'); if (!listEle.length) { return false; } // let matches = $('#profile img').attr('src').match(/ul(\d+)/), usrid; // if (!matches || matches.length < 2) return false; // var usrid = matches[1]; var usrid = people_info.id, // is this method stable? usrname = people_info.name; if (blocked_UID.filter(function (num, nickname) { nickname = usrname; return num == usrid; }).length) { // user already blocked blockStatus.append('已屏蔽'); listEle.prepend('
  • 取消屏蔽
  • '); } else { blockStatus.append('未屏蔽'); listEle.prepend($('
  • 屏蔽广播
  • ')); } // listEle.on( events, selector, data, handler ); // for jQuery v3.0+ listEle.delegate('.cancel-block', 'click', function () { // event delegation, listening on block canceling event getBlocked(); blocked_UID = blocked_UID.filter(function (num) { return usrid != num; }); blocked_USR = blocked_USR.filter(function (nickname) { return usrname != nickname; }); localStorage.setItem('douban_blocked_UID', JSON.stringify(blocked_UID)); localStorage.setItem('douban_blocked_USR', JSON.stringify(blocked_USR)); $(this).removeClass('cancel-block').addClass('block-status').text('屏蔽广播'); blockStatus.children().last().removeAttr("style").html("未屏蔽"); console.log("当前屏蔽用户列表:", blocked_USR); // alert("当前屏蔽用户列表:" + blocked_USR.join(', ')); }) .delegate('.block-status', 'click', function () { // event delegation, listening on block event getBlocked(); blocked_UID.push(parseInt(usrid, 10)); blocked_USR.push(usrname); localStorage.setItem('douban_blocked_UID', JSON.stringify(blocked_UID)); localStorage.setItem('douban_blocked_USR', JSON.stringify(blocked_USR)); $(this).removeClass('block-status').addClass('cancel-block').text('取消屏蔽'); blockStatus.children().last().css("color", "red").html("已屏蔽"); console.log("当前屏蔽用户列表:", blocked_USR); // alert("当前屏蔽用户列表:" + blocked_USR.join(', ')); }); }