#1 - 2018-10-7 20:59
桜野くりこ (人类是无法互相理解的)
今天突然觉得非常需要这个功能于是做出来了
组件地址

在人物页面右上角添加/移除黑名单。
设置->隐私页面提供手动设置及列表。

20181106 v1.0.1 更新文本节点的解析方式,解决一些显示BUG
20181009 v1.0.1 更新:添加默认列表

效果:





JS:
var blacklist = JSON.parse(getData('staffblacklist') || "[]");
var blackliststr = JSON.stringify(blacklist);
const target = '#bangumiInfo #infobox li a, #bangumiInfo #infobox li .exNode';
const personnow = $('#headerSubject .nameSingle a').text().replace(/[((].*?[))]/g,'').replace(/\s/g,'');
if (blacklist.length!=0&&/^\/subject\/\d+/i.test(location.pathname)){
  $("ul#infobox li").each(function(){
    for(let j in this.childNodes){
      if(this.childNodes[j].nodeName=="#text"&&!/^[、,,]$/.test(this.childNodes[j].nodeValue.trim())){
        let t = this.childNodes[j].nodeValue.replace(/([(())]+)/gm, "、$1、").replace(/[,,]/gm, "、").split("、");
        let exnodes = "";
        let lastnode;
        for (let k in t){
          if (t[k]==lastnode) continue;
          lastnode = t[k];
          if (!/^[(())]+$/.test(lastnode)&&lastnode.trim()!="")
            lastnode = '<span class="exNode">'+lastnode+'</span>';
          exnodes += "、"+lastnode;
        }
        exnodes = exnodes.replace(/、([(())]+)、/gm, "$1").substr(1);
        let n = $(this.childNodes[j]);
        n.prev().after(exnodes);
        n.remove();
      }
    }
  });
  $(target).each(function(){
      if(blackliststr.indexOf('"'+$(this).text().replace(/\s/g,'')+'"')!=-1){
        $(this)
          .attr("title", "黑名单警告!")
          .addClass('isblacklist');
      }
    });
}
else if (/^\/person\/\d+/i.test(location.pathname)){
    $('#headerSubject .subjectNav .navTabs .collect').first()
      .append('<span id="blacklist-add" class="collect blacklist"><a>加入黑名单</a></span>')
      .append('<span id="blacklist-del" class="collect blacklist"><a>移除黑名单</a></span>');
    $('#blacklist-add').click(function(){addBlackList();});
    $('#blacklist-del').click(function(){delBlackList();});
  if (blackliststr.indexOf('"'+personnow+'"')==-1){
    $('#blacklist-add').css('display', 'inline-block');
  }
  else {
    $('#blacklist-del').css('display', 'inline-block');
  }
}
else if (location.pathname=="/settings/privacy"){
  $('#columnB').append('<div id="blacklist-lst"><h2 class="subtitle">staff黑名单</h2><ul></ul></div>');
  let itable = $('#blacklist-lst ul');
  itable.append('<input type="text" max-length="100" />')
        .append('<a class="iadd">手动添加</a>');
  itable.children('.iadd').click(function(){addBlackList2();});
  for (let i in blacklist){
    if (blacklist[i].url=="")
      itable.append('<li class="blacklist-'+i+'"><a href="javascript:void(0);">'+blacklist[i].name+'</a><span class="icon-plus"></span></li>');
    else itable.append('<li class="blacklist-'+i+'"><a href='+blacklist[i].url+'>'+blacklist[i].name+'</a><span class="icon-plus"></span></li>');
    $('#blacklist-lst .blacklist-'+i+' .icon-plus').click(function(){delBlackList2(i);});
  }
}
function addBlackList(name){
  if (typeof name != "undefined")
    blacklist.push({url: "", name: name});
  else blacklist.push({url: location.pathname, name: personnow});
  setData("staffblacklist", JSON.stringify(blacklist));
  $('#blacklist-add').css('display', 'none');
  $('#blacklist-del').css('display', 'inline-block');
}
function delBlackList(name){
  let n = name||personnow;
  let i = -1;
  for (let j in blacklist){
    if (blacklist[j].name==n)
      i = j;
  }
  if (i!=-1){
    blacklist.splice(i, 1);
    setData("staffblacklist", JSON.stringify(blacklist));
    $('#blacklist-add').css('display', 'inline-block');
    $('#blacklist-del').css('display', 'none');
  }
}
function addBlackList2(){
  let i = blacklist.length;
  let namein = $('#blacklist-lst input');
  let v = namein.val();
  if (v=="") return;
  addBlackList(v);
  namein.val("");
  $('#blacklist-lst ul').append('<li class="blacklist-'+i+'">'+blacklist[i].name+'<span class="icon-plus"></span></li>');
  $('#blacklist-lst .blacklist-'+i+' .icon-plus').click(function(){delBlackList2(i);});
}
function delBlackList2(id){
  let a = $('#blacklist-lst .blacklist-'+id);
  delBlackList(a.text());
  a.hide();
}
function getData(key, def){
  return localStorage[key] || def;
}
function setData(key, val){
  localStorage[key] = val;
}


CSS:
.icon-plus{
  width: 50px;
  height: 50px;
  position: relative;
  cursor: pointer;
}
.icon-plus:before,
.icon-plus:after{
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  background-color: black;
}
.icon-plus:before{
  width: 70%;
  height: 4%;
  margin-top: -2%;
  margin-left: -35%;
}
.icon-plus:after{
  width: 4%;
  height: 70%;
  margin-top: -35%;
  margin-left: -2%;
}
ul#infobox li .isblacklist{
  word-break: keep-all;
  background-color: #f00;
  color: #fff;
  border: 3px solid #f00;
}
/* 默认名单
ul#infobox li .isdefblacklist{
  word-break: keep-all;
  background-color: #fb9;
  border: 3px solid #fb9;
}
*/
#headerSubject .subjectNav .navTabs .collect .blacklist{
  cursor: pointer;
  display: none;
}
#headerSubject .subjectNav .navTabs .collect .blacklist a{
  background: none;
  color: #f66;
}
#headerSubject .subjectNav .navTabs .collect .blacklist a:hover{
  color: #f00;
}
#blacklist-lst{
  overflow: hidden;
}
#blacklist-lst li{
  line-height: 32px;
  font-size: 18px;
}
#blacklist-lst li.defblacklist{
  float: left;
  width: 50%;
  text-align: center;
}
#blacklist-lst li .icon-plus{
  display: inline-block;
  transform: rotate(45deg);
  width: 26px;
  height: 26px;
  top: 7px;
}
#blacklist-lst input{
  margin-top: 10px;
  height: 24px;
  line-height: 24px;
  border: 1px solid #aaa;
  outline: none;
  padding: 0 5px;
  font-size: 16px;
  width: 120px;
}
#blacklist-lst .iadd{
  margin-left: 10px;
  font-size: 16px;
  cursor: pointer;
}
#2 - 2018-10-7 21:04
(站外点格子工具 https://bgm.tv/group/topic/346446 . ...)
可以考虑在staff的页面加入黑名单?

举个例子
#2-1 - 2018-10-7 21:05
桜野くりこ
在人物页面右上角添加/移除黑名单。
#2-2 - 2018-10-7 21:06
Trim21
桜野くりこ 说:
(bgm38)没看到图 以为没有
#2-3 - 2018-10-7 21:09
桜野くりこ
Trim21 说: 没看到图 以为没有
啊...忘了截这个的图了
#2-4 - 2018-10-7 21:51
桜野くりこ
提醒一下...更新了嗯,原本不支持没有人物页面的人的提示
#3 - 2018-10-7 21:57
(DDです~)
我就想知道是哪颗雷让lz下决心做这个组件的(bgm39)
#3-1 - 2018-10-7 22:03
桜野くりこ
图里有。タカヒロ。
#3-2 - 2018-10-8 04:22
nas xlEdano
桜野くりこ 说: 图里有。タカヒロ。
哈哈哈哈哈哈是朋友了!
#3-3 - 2018-12-10 23:11
波浪浮亭木胡桃
桜野くりこ 说: 图里有。タカヒロ。
(bgm38)啊啊啊该来的还是来了takahiro老贼果然还是没忍住啊
#4 - 2018-10-7 22:16
笑死
#5 - 2018-10-8 02:38
(A.T.Field)
タカヒロ2333

不过10月这个阿卡林至少目前看来没啥问题……
#5-1 - 2018-12-10 23:12
波浪浮亭木胡桃
(bgm38)该来的还是来了
#6 - 2018-10-8 08:18
(ルンタッタ♪ ルンタッタ♪ ラッタッタ♪ ラッタッ ...)
(bgm38)不错不错
#7 - 2018-10-8 08:19
(折一片夏)
好像还可以反着用,高亮喜欢
#8 - 2018-10-8 08:42
(媛娇系是检验大法的唯一标准)
感觉挺有意思(bgm38)
#9 - 2018-10-8 19:44
(✨️VIP 8✨️)
(bgm38) 哈哈哈哈
#10 - 2018-10-8 21:21
(生活 > 游戏)
笑死,我觉得很有帮助(bgm38)
#11 - 2018-10-8 21:21
可惜只能在一个端的一个浏览器里用(bgm36)
#11-1 - 2018-10-8 21:32
发光的球
开发个共享黑名单吗,看看哪位被拉黑最多(bgm38)
不过这样好像有点审丑,还是不要了..
#11-2 - 2018-10-8 21:34
桜野くりこ
需求的人多的话可以考虑在我的服务器存储数据...
#11-3 - 2018-10-9 12:53
598753468
桜野くりこ 说: 需求的人多的话可以考虑在我的服务器存储数据...
多数人对shi的理解都差不多,可以搞个默认的名单
#11-4 - 2018-10-9 13:57
桜野くりこ
598753468 说: 多数人对shi的理解都差不多,可以搞个默认的名单
那我另开一贴征集一下意见好了…
#11-5 - 2018-10-9 23:49
桜野くりこ
598753468 说: 多数人对shi的理解都差不多,可以搞个默认的名单
[组件意见征集]staff黑名单:默认名单
#12 - 2018-10-9 13:59
赞美楼主
#13 - 2018-10-9 14:08
(阿森纳天下第四!)
可惜遇到喂shi的并不知道锅给谁。。要是一网打尽又误杀太多了
#13-1 - 2018-10-9 22:01
x29meister
还是吃得少,shi吃多了就知道是谁的锅了(bgm35)
#13-2 - 2018-12-7 08:27
Spitfirescott
x29meister 说: 还是吃得少,shi吃多了就知道是谁的锅了
这话说的真实
#14 - 2018-10-9 21:23
(。´-д-)
如果有默认名单的话 最好提供删除功能 以及没必要单独搞个 from 默认 吧..初始列表里加上他们就好..
#15 - 2018-10-10 20:37
(实妹至上)
突然发现手机和电脑添加的黑名单似乎不共通?(bgm38)
#15-1 - 2018-10-11 09:05
桜野くりこ
因为数据存储是直接用的浏览器本地存储(LocalStorage)所以....就算是同个设备,不同浏览器也不共通
#16 - 2018-11-5 23:26
(实妹至上)
这组件貌似有个bug(bgm38)
好像会导致staff信息排序混乱。
这个是本来的:

这个是组件启用之后的:

不按照编辑的顺序显示了(bgm39)
#16-1 - 2018-11-6 08:54
桜野くりこ
嗯....因为...为了支持没有页面(没有链接)的staff,对没有链接的部分是手动解析的...没找到比较好的方式,就只是单纯的按'、'替换了
#16-2 - 2018-11-6 15:06
桜野くりこ
改好啦!(审核中)(代码更新到主楼了)
#16-3 - 2018-11-6 16:16
默沨
桜野くりこ 说: 改好啦!(审核中)(代码更新到主楼了)
哇,膜拜大佬(bgm39)
#17 - 2018-11-5 23:47
(影山浩宣唱OP,高桥洋子唱ED,这是毕生梦想,也是永远的梦想 ...)
“那些有意无意惹你生气的业界泼皮们”组件终于上线了,等了好久(bgm38)
#18 - 2018-11-6 03:34
Edge一开这个就卡死(bgm34)
#18-1 - 2018-11-6 15:12
桜野くりこ
是名单里有人的情况下卡死还是名单为空也卡死?
#18-2 - 2018-11-6 22:35
九八式衍射弹
桜野くりこ 说: 是名单里有人的情况下卡死还是名单为空也卡死?
所有条目都卡死,但是其他页面没事,名单里有人
#18-3 - 2018-11-7 09:28
桜野くりこ
九八式衍射弹 说: 所有条目都卡死,但是其他页面没事,名单里有人
身边没有win10的电脑没法测试,光看代码实在是想不出卡死的原因(只用了$.each和for...in)(bgm38)
#18-4 - 2018-11-7 11:58
九八式衍射弹
桜野くりこ 说: 身边没有win10的电脑没法测试,光看代码实在是想不出卡死的原因(只用了$.each和for...in)
反正edge的插件经常有问题,上次一个bgm插件也是开了会乱码
#18-5 - 2018-11-7 14:03
桜野くりこ
九八式衍射弹 说: 反正edge的插件经常有问题,上次一个bgm插件也是开了会乱码
大概是现在很多Web开发都没有考虑兼容Edge吧?
#18-6 - 2018-11-7 14:04
九八式衍射弹
桜野くりこ 说: 大概是现在很多Web开发都没有考虑兼容Edge吧?
其实我觉得还挺好用的(bgm38)
#18-7 - 2018-12-8 15:23
Destiny4073
edge准备换chromium内核了(bgm38)
#18-8 - 2018-12-9 09:15
九八式衍射弹
Destiny4073 说: edge准备换chromium内核了
#19 - 2018-11-6 19:10
(故事只能是故事。)
???(bgm38)
#19-1 - 2018-11-7 08:59
桜野くりこ
=L=没想到还有不是用、而是用,来分隔的.....(去改)
#19-2 - 2018-11-7 09:01
桜野くりこ
这还是用' , '分隔的...
#19-3 - 2018-11-7 09:19
桜野くりこ
修好啦!(审核中)(代码更新到主楼了)
#19-4 - 2018-11-7 09:39
dewrfe53535
桜野くりこ 说: 修好啦!(审核中)(代码更新到主楼了)
幸苦了,毕竟没有一个统一的规范(bgm38)
#20 - 2018-11-8 12:03
請問你的代碼用什麼協議開源呢
#20-1 - 2018-11-8 14:05
桜野くりこ
没考虑过这个问题诶...也不是什么复杂的东西,随便用吧?