// ==UserScript==
// @name Blackumi
// @namespace https://gf.qytechs.cn/users/2379
// @description bangumi用户屏蔽
// @author niR
// @version 4.5.31.22
// @license MIT License
// @encoding utf-8
// @include http://bangumi.tv/*
// @include http://bgm.tv/*
// @include http://chii.in/*
// ==/UserScript==
//おっぱい すきすき
//localStorage.clear();
//getData(name) name = 'koroshimashita' or name = 'shitainoavatars'
//'koroshimashita' 用于存放id, 'shitainoavatars' 用于存放头像地址
function getData(name) {
var shikabane = localStorage.getItem(name);
if (shikabane == null || shikabane == "") {
return [];
}
else {
return shikabane.split(",");
}
}
function testBlockedOrNot(id) {
var shikabane = getData('koroshimashita');
if (shikabane.indexOf(id) > -1) {
return true;
}
else {
return false;
}
}
function block(id1, id2) {
var bbtn = document.getElementById("korosukorosu");
var shikabane = getData('koroshimashita');
if (shikabane.indexOf(id1) == -1) {
if (id1 == id2) {
shikabane.push(id1);
}
else {
shikabane.push(id1);
shikabane.push(id2);
}
}
localStorage.setItem("koroshimashita", shikabane);
if (testBlockedOrNot(id1)) {
//控制个人页面上的动画、音乐、介绍等模块
userintro("none");
bbtn.firstChild.innerHTML = "解除屏蔽";
bbtn.href = 'javascript:unblock(\'' + id1 + '\',\'' + id2 + '\')';
}
//存放头像
getAvatar(id1);
}
function unblock(id1, id2) {
var index1;
var index2;
var ubbtn = document.getElementById("korosukorosu");
var shikabane = getData('koroshimashita');
if (id1 == id2) {
index1 = shikabane.indexOf(id1);
shikabane.splice(index1, 1);
}
else {
index1 = shikabane.indexOf(id1);
shikabane.splice(index1, 1);
index2 = shikabane.indexOf(id2);
shikabane.splice(index2, 1);
}
localStorage.setItem("koroshimashita", shikabane);
if (! testBlockedOrNot(id1)) {
//控制个人页面上的动画、音乐、介绍等模块
userintro("block");
ubbtn.firstChild.innerHTML = "屏蔽";
ubbtn.href = 'javascript:block(\'' + id1 + '\',\'' + id2 + '\')';
}
//删除存放的头像
//其实没必要做这一步,全站的人都放进去数据体积估计都不会超过限制
delAvatar(id1);
}
//存放头像地址
function getAvatar(id1) {
var tmp;
var avatar = document.getElementsByClassName('avatarNeue avatarSize75 ll')[0];
var bgurl = avatar.style.backgroundImage.split("/");
var nicks = document.getElementsByClassName('avatar l');
var data = getData('shitainoavatars');
if (bgurl[6].split('.')[0] == 'icon') {
tmp = [id1, 'default'].join('/');
data.push(tmp);
//alert(data);
localStorage.setItem('shitainoavatars', data);
}
else {
tmp = [id1, bgurl[7], bgurl[8]].join('/');
data.push(tmp);
//alert(data);
localStorage.setItem('shitainoavatars', data);
}
}
function searchAvatar(id1) {
var i;
var tmp;
var data = getData('shitainoavatars');
for (i = 0; i < data.length; i++) {
if (data[i].indexOf(id1 + '/') == 0) {
//alert(data[i]);
return data[i];
}
}
return false;
}
function delAvatar(id1) {
var i;
var tmp = [];
var data = getData('shitainoavatars');
for (i = 0; i < data.length; i++) {
if (data[i].indexOf(id1) != 0) {
tmp.push(data[i]);
}
}
localStorage.setItem('shitainoavatars', tmp);
//alert(getData('shitainoavatars'));
}
//隐藏用户介绍信息
// swch = "none" / "block"
function userintro(swch) {
var areaklass = ["SidePanel", "menu_inner", "intro", "site",
"userSynchronize"];
var areaid = ["columnB","friend", "index", "mono", "game", "real",
"anime", "music", "book", "group", "blog"];
var gklass;
var gid;
var i;
var j;
//隐藏class区块
for (i = 0; i < areaklass.length; i++) {
gklass = document.getElementsByClassName(areaklass[i]);
if (gklass == null) {
continue;
}
for (j = 0; j < gklass.length; j++) {
gklass[j].style.display = swch;
}
}
//隐藏id区块
for (i = 0; i < areaid.length; i++) {
gid = document.getElementById(areaid[i]);
if (gid == null) {
continue;
}
gid.style.display = swch;
}
}
/*
//如果把用户加为好友则#connectFrd就没有了
//用户页面
function userpage() {
//id1 real id / number id ; id2 fake id / 用户名
//id1必须抓,因为超展开只有id1,其他地方大多可以只用id2
var i;
var user = document.getElementById("connectFrd");
var id1 = user.href.split("/")[4].split("?")[0];
var id2;
var avatar = document.getElementsByClassName("avatar");
for (i = 0; i < avatar.length; i++) {
//get fake id
if (avatar[i].parentNode.className == "user_box clearit") {
id2 = avatar[i].href.split("/")[4];
}
//friends
else if(getParentNode(avatar[i], 2).className == "side_port"
&& testBlockedOrNot(avatar[i].href.split("/")[4])) {
avatar[i].parentNode.parentNode.style.display = "none";
}
}
injectFunc(block);
injectFunc(unblock);
injectFunc(getData);
injectFunc(testBlockedOrNot);
injectFunc(userintro);
injectFunc(getAvatar);
injectFunc(delAvatar);
//添加按钮
if (testBlockedOrNot(id1)) {
userintro("none");
user.parentNode.innerHTML = user.parentNode.innerHTML
+ '<a href="javascript:unblock(\'' + id1 + '\',\'' + id2
+ '\')"class="chiiBtn" id="korosukorosu"><span>解除屏蔽</span></a>';
}
else {
userintro("block");
user.parentNode.innerHTML = user.parentNode.innerHTML
+ '<a href="javascript:block(\'' + id1 + '\',\'' + id2
+ '\')" class="chiiBtn" id="korosukorosu"><span>屏蔽</span></a>';
}
}
*/
function getFirstChild(node) {
var fc = node.firstChild;
while (fc != null && fc.nodeType != 1) {
fc = fc.nextSibling;
}
return fc;
}
//用户页面
function userpage() {
var i;
var user;
var chiibtns;
var rrbox;
var id1;
var id2;
var avatar;
user = document.getElementById("user_home");
rrbox = getFirstChild(getFirstChild(user));
chiibtns = getChildNodes(rrbox);
if (chiibtns.length == 2) {
//alert("Your own page");
return false;
}
id1 = chiibtns[1].href.split('/')[5].split('.')[0];
//alert(id1);
avatar = document.getElementsByClassName("avatar");
for (i = 0; i < avatar.length; i++) {
//get fake id
if (avatar[i].parentNode.className == "user_box clearit") {
id2 = avatar[i].href.split("/")[4];
//alert(id2);
break;
}
}
//his or her friends
listItems('avatar', 2, 'side_port', 2);
//inject functions
injectFunc(block);
injectFunc(unblock);
injectFunc(getData);
injectFunc(testBlockedOrNot);
injectFunc(userintro);
injectFunc(getAvatar);
injectFunc(delAvatar);
//添加按钮
if (testBlockedOrNot(id1)) {
userintro("none");
rrbox.innerHTML = rrbox.innerHTML
+ '<a href="javascript:unblock(\'' + id1 + '\',\'' + id2
+ '\')"class="chiiBtn" id="korosukorosu"><span>解除屏蔽</span></a>';
}
else {
userintro("block");
rrbox.innerHTML = rrbox.innerHTML
+ '<a href="javascript:block(\'' + id1 + '\',\'' + id2
+ '\')" class="chiiBtn" id="korosukorosu"><span>屏蔽</span></a>';
}
}
//超展开是 real id
//topiclist 超展开
//http://bangumi.tv/rakuen/topiclist
//group topic 则是 real id, fake id 都可以
//http://bangumi.tv/group/topic/32610
//http://bangumi.tv/group/topic/32295
//人物页下方的讨论
//http://bangumi.tv/person/7734
function topic() {
var i;
var bgurl;
var uid;
var avatar = document.getElementsByClassName("avatarNeue");
var flag = false;
for (i = 0; i < avatar.length; i++) {
bgurl = avatar[i].style.backgroundImage.split("/");
if (bgurl[4] == "user" && bgurl.length > 7) {
uid = bgurl[9].split(".")[0];
if (testBlockedOrNot(uid)) {
getParentNode(avatar[i], 2).style.display = 'none';
flag = true;
}
}
else if (bgurl[4] == "user") {
uid = avatar[i].parentNode.href.split("/")[4]
if (testBlockedOrNot(uid)) {
getParentNode(avatar[i], 2).style.display = 'none';
flag = true;
}
}
}
return flag;
}
//具体条目
//http://bangumi.tv/subject/18462
function subject() {
var flagtsu;
var flagsub;
//吐槽箱
flagtsu = listItems('avatar', 1, 'item clearit', 1);
//评论版
listItems('l', 4, 'item clearit', 4);
//讨论版
flagsub = subSection('a', 2, 'td', 1);
if (flagtsu) {
refreshTsukkomi();
}
if (flagsub) {
refreshSubSection({'1' : 'odd', '-1' : 'even'}, 0);
}
}
//blog
//http://bangumi.tv/blog/46382
//用于屏蔽blog主人(顶楼)
function blog() {
var entry;
var reinfo;
var avatar = document.getElementsByClassName("avatar l");
if (testBlockedOrNot(avatar[0].href.split("/")[4])) {
avatar[0].parentNode.style.display = "none";
entry = document.getElementById("viewEntry");
reinfo = document.getElementsByClassName("re_info");
entry.style.display = "none";
reinfo[0].style.display = "none";
}
}
//pm inbox
//收件箱
//real id
//自动删除信件
function mailbox(box) {
var pmurl;
var pms = [];
var avatar = document.getElementsByClassName("avatar ll");
var pmside = document.getElementById("pm_sidebar");
var pmmain = document.getElementById("pm_main");
for (i = 0; i < avatar.length; i++) {
if (testBlockedOrNot(avatar[i].src.split("/")[9].split(".")[0])) {
//先隐藏再说
pmmain.style.display = "none";
pmside.style.display = "none";
pms.push(avatar[i].parentNode.href.split("/")[5].split(".")[0]);
}
}
//删除信件
//alert(pms.length);
if (pms.length != 0) {
pmurl = document.getElementById("pmForm").action;
autoDel(pmurl, pms, box);
}
}
//隐藏信件
function mailboxHideMail(box) {
var grandpa = "";
var flag = false;
var pms = [];
var usravatar = document.getElementsByClassName("avatar ll");
var pmside = document.getElementById("pm_sidebar");
var pmmain = document.getElementById("pm_main");
var unread = 1*pmside.innerHTML.split(":")[1].split("<")[0];
var unreadtemp = unread;
var mails = 1*pmside.innerHTML.split(":")[2].split("<")[0];
var mailstemp = mails;
var sent = 1*pmside.innerHTML.split(":")[3];
var senttemp = sent;
for (i = 0; i < usravatar.length; i++) {
if (testBlockedOrNot(usravatar[i].src.split("/")[9].split(".")[0])) {
grandpa = usravatar[i].parentNode.parentNode.parentNode;
grandpa.parentNode.style.display = "none";
if (grandpa.className == "pm_odd pm_new"
|| grandpa.className == "pm_even pm_new") {
unreadtemp--;
mailstemp--;
senttemp--;
}
else {
mailstemp--;
senttemp--;
}
pms.push(usravatar[i].parentNode.href.split("/")[5].split(".")[0]);
flag = true;
}
}
//隐藏信件
if (box == "inbox") {
unread = unreadtemp;
mails = mailstemp;
}
else if (box == "outbox") {
sent = senttemp;
}
pmside.innerHTML = "未读: " + unread + "<br />收件箱: " + mails
+ "<br />发件箱: " + sent;
if (mails == 0) {
pmmain.innerHTML = '收件箱中还没有新信息<div id="pm_pager"></div>';
}
if (flag) refreshInbox();
}
//撰写信件界面删除最近联系人
function pmcompose() {
var i;
var contacts = document.getElementsByClassName("l");
for (i = 0; i < contacts.length; i++) {
if (contacts[i].parentNode.id == "pm_sidebar"
&& testBlockedOrNot(contacts[i].getAttribute('onclick').split("'")[1])) {
contacts[i].style.display = "none";
contacts[i].nextSibling.outerHTML = "";
}
}
}
//聊天型界面自动删除邮件
function pmview() {
var i;
var j = 4;
var pmurl;
var pmsin = [];
var eraselink;
var avatar = document.getElementsByClassName("avatar");
var cbox = document.getElementById("comment_box");
for (i = 0; i < avatar.length; i++) {
if (avatar[i].parentNode.className == "item"
&& avatar[i].href.split("/")[3] == "user"
&& testBlockedOrNot(avatar[i].href.split("/")[4])) {
//总之先隐藏再说
cbox.style.display = "none";
eraselink = getNextSibling(avatar[i]);
while (j > 0) {
eraselink = getChildNodes(eraselink)[0];
j -= 1;
}
j = 4;
pmsin.push(eraselink.getAttribute("onclick").split("'")[1]);
pmurl = "/pm/erase/batch?gh="
+ eraselink.getAttribute("onclick").split("'")[3];
//alert(pmurl);
}
}
//删除信件
//alert(pmsin.length);
if (pmsin.length != 0) {
autoDel(pmurl, pmsin, "inbox");
}
}
//自动忽略电波提醒
function notify() {
var i;
var flag = false;
var grandpa;
var eraselink;
var user = document.getElementsByClassName('l');
for (i = 0; i < user.length; i++) {
if (getParentNode(user[i], 2).className == 'inner tip'
&& user[i].href.split("/")[3] == 'user'
&& testBlockedOrNot(user[i].href.split("/")[4])) {
grandpa = getParentNode(user[i], 3);
grandpa.style.display = 'none';
eraselink = getChildNodes(grandpa)[0].href.split('?');
eraseNtf(eraselink[0], eraselink[1].split('=')[1]);
}
}
}
//提交忽略
function eraseNtf(url, gh) {
var inputbox;
var form = document.createElement('form');
form.setAttribute('method', 'get');
form.setAttribute('action', url);
inputbox = document.createElement("input");
inputbox.setAttribute("type", "hidden");
inputbox.setAttribute("name", "gh");
inputbox.setAttribute("value", gh);
form.appendChild(inputbox);
document.body.appendChild(form);
form.submit();
}
//---------辅助类函数---------//
//把函数写入页面便于多次执行
function injectFunc(func) {
var script = document.createElement('script');
script.appendChild(document.createTextNode(func));
document.body.appendChild(script);
}
/*
group 讨论组首页的 间隔条纹刷新
或者
讨论页面的条纹刷新
group的讨论,人物收藏下的讨论,blog的讨论
http://bangumi.tv/blog/46382
klassdict负责需要控制条文间隔的元素
klass负责找到这些元素
group 列表界面
klassdict = {'1' : 'topic odd', '-1' : 'topic even'};
klass = 'topic'
rakuen 超展开
klassdict = {'1' : 'line_odd item_list', '-1' : 'line_even item_list'};
klass = 'item_list'
一般topic
klassdict = {'1' : 'light_odd row_reply clearit',
'-1' : 'light_even row_reply clearit'};
//klass = 'commentList' (Id 'comment_list')
klass = row_reply
要改变odd even顺序只要改变klassdict就可以了
*/
function refreshTopicList(klassdict, klass) {
var i;
var f = '1';
var tr = document.getElementsByClassName(klass);
for (i = 0; i < tr.length; i++) {
if (! tr[i].style.display) {
tr[i].className = klassdict[f];
f = (-1 * f).toString();
}
}
}
//吐槽箱 左右对齐刷新
function refreshTsukkomi() {
var i;
var c;
var f = '-1';
var klassdict = {'1' : ['rr', 'text_main_odd'],
'-1' : ['ll', 'text_main_even']};
var items = getChildNodes(document.getElementById('comment_box'));
for (i = 0; i < items.length; i++) {
if (! items[i].style.display) {
c = getChildNodes(items[i]);
c[0].className = klassdict[f][0];
c[1].className = klassdict[f][1];
f = (-1 * f).toString();
}
}
}
//参数 n
//groupdiscover 是 1
//subject中间讨论区 是 0
//n控制取哪个tbody
//klassdict = {'1' : 'odd', '-1' : 'even'}
//讨论区和discover的 dict 相同
function refreshSubSection(klassdict, n) {
var i;
var j;
var td;
var f = '1';
var table = document.getElementsByClassName('topic_list')[0];
var tr = getChildNodes(getChildNodes(table)[n]);
for (i = 0; i < tr.length; i++) {
if (! tr[i].style.display) {
td = getChildNodes(tr[i]);
for (j = 0; j < td.length; j++) {
td[j].className = klassdict[f];
}
f = (-1 * f).toString();
}
}
}
//维基编辑页面, class 是 line_even 和 line_odd交错
//没有其他class直接抓li 不能直接用listItems()
//klassdict = {'1' : 'line_even', '-1' : 'line_odd'};
//id = 'pagehistory';
function refreshEditPage(klassdict, id) {
var i;
var f = '1';
var items = getChildNodes(document.getElementById(id));
for (i = 0; i < items.length; i++) {
if (! items[i].style.display) {
items[i].className = klassdict[f];
f = (-1 * f).toString();
}
}
}
//inbox条纹刷新
//仅仅用在选择隐藏而不是自动删除的情况
//自动删除的话,提交数据后会自动刷新
function refreshInbox() {
var i;
var k;
var td;
var f = '1';
var klassdict = {'1' : 'pm_odd', '-1' : 'pm_even'};
var tbd = getChildNodes(document.getElementsByClassName("topic_list")[0])[0];
var tr = getChildNodes(tbd);
for (i = 1; i < tr.length - 1; i++) {
if (! tr[i].style.display) {
td = getChildNodes(tr[i]);
td[0].className = [klassdict[f], td[0].className.split(' ')[1]].join(' ');
td[1].className = klassdict[f];
f = (-1 * f).toString();
}
}
}
//collections()完成后重新排列 class 'user odd' => 'user'
function refreshCollections(oldklass, newklass) {
var i;
var userlist = document.getElementsByClassName(oldklass);
for (i = 0; i < userlist.length; i++) {
userlist[i].className = newklass;
}
}
//自动删除邮件
//url / form action pms / erase_pm[] box / 'inbox'|'outbox'
function autoDel(url, pms, box) {
var i;
var form;
var inputbox;
form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", url);
inputbox = document.createElement("input");
inputbox.setAttribute("type", "hidden");
inputbox.setAttribute("name", "folder");
inputbox.setAttribute("value", box);
form.appendChild(inputbox);
for (i = 0; i < pms.length; i++) {
inputbox = document.createElement("input");
inputbox.setAttribute("type", "hidden");
inputbox.setAttribute("name", "erase_pm[]");
inputbox.setAttribute("value", pms[i]);
form.appendChild(inputbox);
}
document.body.appendChild(form);
form.submit();
}
//得到指定上溯层数的父元素
function getParentNode(node, t) {
var i = t - 1;
var pn = node.parentNode;
if (t == 0) {
return node;
}
while (i > 0) {
pn = pn.parentNode;
i--;
}
return pn;
}
//非空白邻近节点(向下)
function getNextSibling(node) {
var ns = node.nextSibling;
while (ns != null && ns.nodeType != 1) {
ns = ns.nextSibling;
}
return ns;
}
//找到所有非空白子节点
function getChildNodes(node) {
var i;
var result = [];
var cn = node.childNodes;
for (i = 0; i < cn.length; i++) {
if (cn[i].nodeType != 1) {
continue;
}
result.push(cn[i]);
}
return result;
}
//main
function hidePosts() {
var flag;
var url = location.href.split("/");
//用户页
if (url[3] == "user") {
if (url.length == 5) {
//用户首页
userpage();
//alert("FRONTPAGE / add Button / kira");
}
else if (url[5] == "friends" || url[5].indexOf("friends") == 0) {
//用户朋友页
flag = listItems('avatar', 3, 'userContainer', 2);
if (flag) {
refreshCollections('user', 'user');
}
//alert("銀河美少年 / kira");
}
//用户页面的时间线只对第一页过滤
else if (url[5] == "timeline" || url[5].indexOf("timeline") == 0) {
//用户时间线
//listItems('l', 2, 'clearit tml_item', 2);
//listItems('l', 3, 'clearit tml_item', 3);
//总共两个地方周期检测,还有一个在dollars
setInterval(function() {
listItems('l', 2, 'clearit tml_item', 2);
listItems('l', 3, 'clearit tml_item', 3);
},500);
//alert("銀河美少年II / kira");
}
}
//超展开 或 话题页
else if (url[3] == "rakuen") {
flag = topic();
if (flag) {
refreshTopicList({'1' : 'line_odd item_list',
'-1' : 'line_even item_list'}, 'item_list');
}
//alert("rukuen");
}
else if (url[4] == "topic") {
flag = topic();
if (flag) {
refreshTopicList({'1' : 'light_even row_reply clearit',
'-1' : 'light_odd row_reply clearit'}, 'row_reply');
}
//alert("topic");
}
//blog
else if (url[3] == "blog" || url[3] == "ep") {
flag = topic();
if (flag) {
refreshTopicList({'1' : 'light_odd row_reply clearit',
'-1' : 'light_even row_reply clearit'}, 'row_reply');
}
blog();
//alert("url blog");
}
//讨论组
else if (url[3] == "group") {
if (url[4] == "discover" || url[4].indexOf("discover") == 0) {
flag = subSection('a', 2, 'td', 1);
if (flag) {
refreshSubSection({'1' : 'odd', '-1' : 'even'}, 1);
}
//alert("group discover");
}
else if (url[4] == "my_reply" || url[4].indexOf("my_reply") == 0) {
flag = listItems('tip_j', 3, 'subject', 2);
if (flag) {
refreshTopicList({'1' : 'topic odd',
'-1' : 'topic even'}, 'topic');
}
}
//http://bangumi.tv/group/boring
else {
flag = listItems('l', 2, 'author', 1);
if (flag) {
refreshTopicList({'1' : 'topic odd',
'-1' : 'topic even'}, 'topic');
}
//右上角的最近加入
listItems('l', 2, 'side_port', 2);
//alert("url group");
}
}
//具体条目
else if (url[3] == "subject" && url.length == 5) {
//条目首页
listItems('avatar', 1, 'groupsLine', 2);
subject();
//alert("url subject");
}
//条目各类讨论、评论等
else if (url[3] == "subject" && url.length == 6) {
if (url[5] == "index" || url[5].indexOf("index") == 0 ) {
//推荐本条目的目录
//http://bangumi.tv/subject/40339/index
listItems('avatar', 2, 'clearit tml_item', 2);
//alert("subject index chan / kira");
}
else if (url[5] == "reviews" || url[5].indexOf("reviews") == 0 ) {
//条目的 评论
//http://bangumi.tv/subject/18462/reviews
listItems('l', 4, 'item clearit', 4);
}
else if (url[5] == "comments" || url[5].indexOf("comments") == 0 ) {
//条目的 吐槽
//http://bangumi.tv/subject/18462/comments
flag = listItems('avatar', 1, 'item clearit', 1);
if (flag) {
refreshTsukkomi();
}
}
else if (url[5] == "board" || url[5].indexOf("board") == 0 ) {
//条目的 讨论
//http://bangumi.tv/subject/18462/board
flag = subSection('a', 2, 'td', 1);
if (flag) {
refreshSubSection({'1' : 'odd', '-1' : 'even'}, 0);
}
}
else if (url[5] == "edit" || url[5].indexOf("edit") == 0 ) {
//条目的 编辑页面 (维基信息页面)
//http://bangumi.tv/subject/18462/board
//alert('edit page');
flag = listItems('l', 1, 'columns clearit', 4);
if (flag) {
refreshEditPage({'1' : 'line_even', '-1' : 'line_odd'}, 'pagehistory');
}
}
else {
//条目的 看过、听过、玩过
//http://bangumi.tv/subject/102695/wishes
flag = listItems('avatar', 3, 'userContainer', 2);
if (flag) {
refreshCollections('user', 'user');
}
//alert("subject / index");
}
}
//真实、虚拟 的 人物、公司
else if (url[3] == "person" || url[3] == 'character') {
if (url.length == 5) {
//人物首页
listItems('avatar', 1, 'groupsLine', 2);
flag = topic();
if (flag) {
refreshTopicList({'1' : 'light_odd row_reply clearit',
'-1' : 'light_even row_reply clearit'}, 'row_reply');
}
//alert("person or character");
}
else {
//人物收藏用户页(全部收藏用户)
flag = listItems('port', 3, 'userContainer', 2);
if (flag) {
refreshCollections('user', 'user');
}
//alert("collections");
}
}
//总目录 或者 个人目录
//http://bangumi.tv/index/17030
//http://bangumi.tv/index
else if (url[3] == "index") {
//总目录界面
listItems('avatar', 2, 'clearit tml_item', 2);
//这个用在个人目录首页 http://bangumi.tv/index/1268
listItems('avatar', 2, 'timeline_img clearit', 3);
//topic()用在个人目录详细讨论 http://bangumi.tv/index/xxxxx/comments
flag = topic();
if (flag) {
refreshTopicList({'1' : 'light_odd row_reply clearit',
'-1' : 'light_even row_reply clearit'}, 'row_reply');
}
//忘了哪个页面要用blog()了,有可能是失误多写了
blog();
//alert("index");
}
//收件箱
else if (url[3] == "pm" || url[3].indexOf('pm') == 0 ) {
if (url.length == 4 || url[4].split(".")[0] == "inbox") {
mailbox("inbox");
//mailboxHideMail('inbox');
//alert("inbox dayo");
}
else if (url[4].split(".")[0] == "view") {
pmview();
//alert("pmview dayo");
}
else if (url[4].split(".")[0] == "outbox") {
mailbox("outbox");
//mailboxHideMail('outbox');
//alert("outbox dayo");
}
else if (url[4].split(".")[0] == "compose") {
pmcompose();
//alert("pmcompose dayo");
}
}
//http://bangumi.tv/book
//http://bangumi.tv/music
//http://bangumi.tv/anime
//http://bangumi.tv/game
//http://bangumi.tv/game/blog
else if (['anime', 'book', 'music', 'game'].indexOf(url[3]) > -1) {
//上区域 (blog)
flag = listItems('blue', 4, 'entry', 3);
if (flag) {
refreshTopicList({'1' : 'item odd', '-1' : 'item clearit'}, 'item');
}
//下区域 (最新讨论)
flag = subSection('a', 2, 'td', 1);
if (flag) {
refreshSubSection({'1' : 'odd', '-1' : 'even'}, 0);
}
//中区域 (xxx的好友最近关注的xxx)
//如果加了好友,用户界面的屏蔽按钮其实是出不来的
listItems('l', 2, 'coversSmall', 3);
//alert('anime book music game');
}
//首页时间线
else if (url[3] == '') {
listItems('l', 2, 'clearit tml_item', 2);
listItems('l', 3, 'clearit tml_item', 3);
//alert("timeline");
}
//时间线
//http://bangumi.tv/timeline
else if (url[3] == 'timeline') {
setInterval(function() {
listItems('l', 2, 'clearit tml_item', 2);
listItems('l', 3, 'clearit tml_item', 3);
},500);
//alert('timeline');
}
//电波提醒 有人提到你
else if (url.length == 8 && url[5] == 'timeline') {
listItems('l', 1, 'statusContent', 2);
flag = listItems('l', 1, 'statusContent', 3);
if (flag) {
refreshTopicList({'1' : 'even reply_item',
'-1' : 'odd reply_item'}, 'reply_item');
}
}
//桃乐丝
else if (url[3] == 'dollars' || url[3].indexOf('dollars') == 0) {
setInterval(dollars,30);
//dollars();
}
//维基人首页
else if (url[3] == 'wiki' || url[3].indexOf('wiki') > -1) {
listItems('avatar', 2, 'groupsLine', 3);
subSection('a', 2, 'small', 1);
}
else if (url[3] == 'magi' || url[3].indexOf('magi') > -1) {
//MAGI问答
listItems('avatar', 2, 'quizInfo clearit', 2);
listItems('avatar', 1, 'magiRank', 2);
}
else if (url[3].indexOf('notify') == 0) {
notify();
}
//设置
else if (url[3] == "settings") {
addSettingBtn();
//setting();
//alert("setting");
}
}
/*
user timeline
http://bangumi.tv/user/sincere/timeline
home page timeline
http://bangumi.tv/
topic list
http://bangumi.tv/group/boring
总目录index
http://bangumi.tv/index
收藏条目的目录index
http://bangumi.tv/subject/40339/index
---替代 0.3.4R--- listitem() / listindex() / timeline(tml)
*/
///////////////////////////////////////////////////////////
/*
用于用户好友
http://bangumi.tv/user/ehan/friends
收藏真实用户列表
http://bangumi.tv/person/7734/collections
收藏虚拟人物用户列表
http://bangumi.tv/character/21881/collections
收藏游戏用户列表
http://bangumi.tv/subject/88429/collections
听过、玩过、想要
http://bangumi.tv/subject/102695/wishes
http://bangumi.tv/subject/102695/collections
---替代 0.3.4R--- friednspage()
---替代 0.4--- collections()
*/
///////////////////////////////////////////////////////////
/*
具体条目
http://bangumi.tv/subject/18462
person 人物 公司
http://bangumi.tv/person/7734
---替代 0.3.4R--- person() / subject()左边收藏栏隐藏功能
作用于左边的SimpleSidePanel
*/
//klass id位置的class, t 上溯隐藏的parentNode层数
//paklass 用于确定是否是用户名的父元素class, pat paklass的上溯层数
//返回变量flag用于判断是否有条目被隐藏,来控制是否刷新条纹界面
//
//timeline, index 的 paklass = 'clearit tml_item', pat = 2
//bangumi.tv/group/boring中 paklass = 'author', pat = 1
//
//collections中 paklass = 'userContainer', pat = 2
//
//SimpleSidePanel中 klass = 'avatar', t = 1, paklass = 'groupsLine', pat = 2
//
function listItems(klass, t, paklass, pat) {
var i;
var flag = false;
var avatar = document.getElementsByClassName(klass);
for (i = 0; i < avatar.length; i++) {
if (getParentNode(avatar[i], pat).className == paklass
&& avatar[i].href.split("/")[3] == 'user'
&& testBlockedOrNot(avatar[i].href.split("/")[4])) {
getParentNode(avatar[i], t).style.display = 'none';
flag = true;
}
}
return flag;
}
/*
具体条目
http://bangumi.tv/subject/18462
group discover
http://bangumi.tv/group/discover
---替代0.3.4R--- subject()部分隐藏讨论版功能
---替代0.4.2--- groupdiscover()
*/
//没有class,直接用a标签定位,上溯到某个tagName
//用法类同listItems()
//tag tag位置, t 上溯隐藏的parentNode层数
//patag 用于确定是否是用户名的父元素tag, pat patag的上溯层数
//返回变量flag用于判断是否有条目被隐藏,来控制是否刷新条纹界面
//
function subSection(tag, t, patag, pat) {
var i;
var flag = false;
var topiclist = document.getElementsByTagName(tag);
for (i = 0; i < topiclist.length; i++) {
if (getParentNode(topiclist[i], pat).tagName.toLowerCase() == patag
&& topiclist[i].href.split('/')[3] == 'user'
&& testBlockedOrNot(topiclist[i].href.split('/')[4])) {
getParentNode(topiclist[i], t).style.display = 'none';
flag = true;
}
}
return flag;
}
//dollars
function dollars() {
var i;
var bgurl;
var avatar = document.getElementsByClassName('avatar');
for (i = 0; i < avatar.length; i++) {
bgurl = avatar[i].src.split("/")[9];
if (bgurl == undefined) {
continue;
}
if (testBlockedOrNot(bgurl.split(".")[0])) {
getParentNode(avatar[i], 2).style.display = 'none';
}
}
}
//添加设置
function addSettingBtn() {
var sectab = document.getElementsByClassName('secTab')[0];
injectFunc(bksetting);
injectFunc(bkbackup);
injectFunc(exportData);
injectFunc(importData);
injectFunc(importInterface);
injectFunc(getChildNodes);
injectFunc(getParentNode);
injectFunc(getData);
injectFunc(delAvatar);
injectFunc(searchAvatar);
injectFunc(checkAll);
injectFunc(uncheckAll);
injectFunc(batchDelete);
sectab.innerHTML = '<li><a href="javascript:bksetting(true)"> \
<span>屏蔽设置</span></a></li> \
<li><a href="javascript:bkbackup()"> \
<span>导入/导出</span></a></li>'
+ sectab.innerHTML;
}
function checkAll() {
var i;
var inputbox = document.getElementsByClassName('selectable');
for (i = 0; i < inputbox.length; i++) {
inputbox[i].checked = true;
}
}
function uncheckAll() {
var i;
var inputbox = document.getElementsByClassName('selectable');
for (i = 0; i < inputbox.length; i++) {
inputbox[i].checked = false;
}
}
function batchDelete() {
var i;
var id1;
var id2;
var index1;
var index2;
var shikabane = getData('koroshimashita');
var ids = document.getElementsByClassName('selectable');
//alert(ids.length);
for (i = 0; i < ids.length; i++) {
//alert(ids[i].checked);
if (ids[i].checked) {
id1 = ids[i].value.split('/')[0];
id2 = ids[i].value.split('/')[1];
//alert(id1);
//alert(id2);
if (id1 == id2) {
index1 = shikabane.indexOf(id1);
shikabane.splice(index1, 1);
}
else {
index1 = shikabane.indexOf(id1);
shikabane.splice(index1, 1);
index2 = shikabane.indexOf(id2);
shikabane.splice(index2, 1);
}
delAvatar(id1);
}
}
//alert(shikabane);
localStorage.setItem("koroshimashita", shikabane);
//alert(getData('shitainoavatars'));
//alert('完成');
bksetting(false);
}
function bksetting(flag) {
var i;
var users;
var id1;
var id2;
var avatar;
var ulst;
var temp = '';
var btns;
var column = document.getElementById('columnA');
var robot = document.getElementById('robot_speech');
var roboshell = getChildNodes(document.getElementById('ukagaka_shell'))[0];
var sectab = document.getElementsByClassName('secTab')[0];
getChildNodes(document.getElementById('header'))[1].innerHTML = '屏蔽设置';
document.getElementById('columnB').style.display = 'none';
column.style.display = 'none';
btns = getChildNodes(sectab);
getChildNodes(btns[0])[0].className = 'selected';
for (i = 1; i < btns.length; i++) {
getChildNodes(btns[i])[0].className = '';
}
//春菜如果太小,下面的北斗会看不到
roboshell.className = 'ui_10 shell_1';
//
users = getData('koroshimashita');
ulst = users;
temp = '<div><ul id="memberUserList" class="usersLarge">';
for (i = 0; i < ulst.length; i++) {
//alert(ulst);
avatar = searchAvatar(ulst[i]);
if (! avatar) {
break;
}
avatar = avatar.split('/');
if (avatar[1] != 'default') {
avatar = '000/' + avatar[1] + '/' + avatar[2] + '/' + ulst[i] + '.jpg';
}
else {
avatar = 'icon.jpg';
}
//alert(avatar);
//alert(1 * ulst[i+1]);
//防止最后一位id1 == id2,则ulst[i+1] == undefined
if (1 * ulst[i+1] > 0 || (!ulst[i+1])) {
id2 = ulst[i];
id1 = ulst[i];
}
else {
id2 = ulst[i+1];
id1 = ulst[i];
i += 1;
}
//alert(i);
temp = temp + '<li class="user"><div class="userContainer pm_odd"><strong>'
+ '<input class="selectable" value="'
+ id1 + '/' + id2 + '" name="" type="checkbox"></input>'
+ '<a href="/user/' + id2 + '" class="avatar">'
+ '<span class="userImage">'
+ '<img src="http://lain.bgm.tv/pic/user/m/'
+ avatar + '" '
+ 'alt="" class="avatar">'
+ '</span></a><div class="avatar">id: ' + id2 + '</div></strong>'
+ '</div></li>';
}
temp += '</ul></div>';
temp += '<input class="inputBtn" type="submit" '
+ 'onclick="javascript:checkAll();"'
+ 'value="全选" name="select_all"></input>';
temp += '<input class="inputBtn" type="submit" '
+ 'onclick="javascript:uncheckAll();"'
+ 'value="取消" name="select_all"></input>';
temp += '<input class="inputBtn" type="submit" '
+ 'onclick="javascript:batchDelete();"'
+ 'value="解除屏蔽" name="batch_delete"></input>';
column.innerHTML = temp;
column.style.display = 'block';
//
//
//speech
if (flag) {
robot.innerHTML = '############# Y<br />'
+ '#####★####### O<br />'
+ '#########★### U<br />'
+ '############# <br />'
+ '########★#### は<br />'
+ '#####★####### <br />'
+ '############# S<br />'
+ '####★######## H<br />'
+ '############# O<br />'
+ '###★######### C<br />'
+ '############# K<br />'
+ '#####★####### <br />'
+ '############# #^﹃^#';
}
else {
robot.innerHTML = 'くすぐられたよ my 僅かな母性本能';
}
}
function bkbackup() {
var i;
var btns;
var temp;
var column = document.getElementById('columnA');
var robot = document.getElementById('robot_speech');
var roboshell = getChildNodes(document.getElementById('ukagaka_shell'))[0];
var sectab = document.getElementsByClassName('secTab')[0];
var header = document.getElementById('header');
getChildNodes(header)[1].innerHTML = '屏蔽列表导入/导出';
document.getElementById('columnB').style.display = 'none';
column.style.display = 'none';
btns = getChildNodes(sectab);
getChildNodes(btns[1])[0].className = 'selected';
getChildNodes(btns[0])[0].className = '';
for (i = 2; i < btns.length; i++) {
getChildNodes(btns[i])[0].className = '';
}
//春菜如果太小,下面的北斗会看不到
roboshell.className = 'ui_10 shell_1';
//
temp = '<input class="inputBtn" type="submit" '
+ 'onclick="javascript:exportData();" '
+ 'value="导出" name="export_data" />'
+ '<input class="inputBtn" type="submit" '
+ 'onclick="javascript:importInterface();" '
+ 'value="导入" name="import_data" />';
column.innerHTML = temp;
column.style.display = 'block';
robot.innerHTML = '撩起了 my那一点母性本能';
}
function exportData() {
var conj_outer = '-|-I HOPE YOU LIVE A LIFE YOU ARE PROUD OF. '
+ 'IF YOU FIND THAT YOU ARE NOT, I HOPE YOU HAVE '
+ 'THE STRENGTH TO START ALL OVER AGAIN-|-';
var conj_mid = '-|-gochuumon wa usagi desu ka-|-'
var text = '嘟嘟噜' + conj_outer;
var robot = document.getElementById('robot_speech');
var roboshell = getChildNodes(document.getElementById('ukagaka_shell'))[0];
var columna = document.getElementById('columnA');
var shikabane = localStorage.getItem('koroshimashita');
var avatars = localStorage.getItem('shitainoavatars');
//若先使用导入,再进入导出时可以归位
bkbackup();
if (shikabane == null || shikabane == '') {
//alert('还没有屏蔽任何人,先抓个试试?');
robot.style.display = 'block';
robot.innerHTML = 'Master! 还没有屏蔽任何人,先抓个试试?';
return false;
}
else {
shikabane = shikabane.split(",").join(conj_mid);
}
avatars = avatars.split(",").join(conj_mid);
text += [shikabane, avatars].join(conj_outer) + conj_outer + '嘟嘟噜';
columna.innerHTML += '<br /><br /><div class="light_even row_reply clearit">'
+ text + '</div>';
//切换春菜为克莱克本樱
roboshell.className = 'ui_11 shell_22';
robot.innerHTML = '请复制到随便什么地方<br />反正别让我给找到了,哼哼~';
}
function importInterface() {
var robot = document.getElementById('robot_speech');
var columna = document.getElementById('columnA');
var temp = '<br /><br /><textarea id="ryououki" class="quick" '
+ 'style="width: 504px; height: 225px;" rows="5" cols="45" '
+ 'name="newbio"></textarea><p class="tip"></p>';
temp += '<input class="inputBtn" type="submit" '
+ 'onclick="javascript:importData();" value="提交" name="select_all" />';
//alert(columna.outerHTML);
bkbackup();
columna.innerHTML = columna.innerHTML + temp;
robot.innerHTML = 'くすぐられたよ my 僅かな母性本能';
}
function importData() {
var shikabane;
var avatars;
var robot = document.getElementById('robot_speech');
var data = document.getElementById('ryououki').value;
var columna = document.getElementById('columnA');
var text = data.trim();
//alert(text);
var conj_outer = '-|-I HOPE YOU LIVE A LIFE YOU ARE PROUD OF. '
+ 'IF YOU FIND THAT YOU ARE NOT, I HOPE YOU HAVE '
+ 'THE STRENGTH TO START ALL OVER AGAIN-|-';
var conj_mid = '-|-gochuumon wa usagi desu ka-|-'
if (text == '') {
robot.innerHTML = '请输入';
return false;
}
text = text.split('嘟嘟噜')[1];
//alert(text);
shikabane = text.split(conj_outer)[1].split(conj_mid);
//alert(shikabane);
//alert(shikabane.length);
avatars = text.split(conj_outer)[2].split(conj_mid);
//alert(avatars);
//alert(avatars.length);
localStorage.setItem('koroshimashita', shikabane);
localStorage.setItem('shitainoavatars', avatars);
bkbackup();
getParentNode(robot, 5).style.display = 'block';
robot.innerHTML = '导入完成';
}
hidePosts();