// ==UserScript==
// @name Acfun过滤UP计划
// @namespace http://tampermonkey.net/
// @version 0.3
// @description 帮助你屏蔽不想看的UP主
// @author 人文情怀
// @match http://www.acfun.cn/a/ac*
// @match http://www.acfun.cn
// @match http://www.acfun.cn/v/list*
// @match https://www.acfun.cn/a/ac*
// @match https://www.acfun.cn
// @match https://www.acfun.cn/v/list*
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
(function() {
'use strict';
function cleanList(){
GM_setValue("ACFUN_BLOCK_LIST", []);
}
function helper()
{
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'https://d3js.org/d3.v3.min.js';
head.appendChild(script);
};
helper();
let up=function(){
return GM_getValue("ACFUN_BLOCK_LIST",[]);
};
function addToList(id){
let old = up();
old.push(id);
GM_setValue("ACFUN_BLOCK_LIST", old);
$.info.show("已将UP主["+id+"]加入屏蔽列表")
console.trace("a");
}
let filterButton = document.createElement("div");
document.body.appendChild(filterButton);
$(filterButton)
.css("width","15px")
.css("height","15px")
.css("background-color","rgba(255,0,0,1)")
.css("font-familty","'黑体',serif")
.css("font-weight","600")
.css("font-size","11px")
.css("padding","1.5px")
.css("left","0")
.css("top","0")
.css("transform","translate(-100%,0)")
.css("display","block")
.css("position","absolute")
.css("z-index","99999")
.css("background-size","contain")
.css("background-image","url('https://cdn.aixifan.com/dotnet/20130418/umeditor/dialogs/emotion/images/ac/12.gif')")
//获得所有主页的UP的DOM TAG,加上右键菜单
function getHomeSelection(mark, mval, addMark){
if (typeof addMark=="undefined"){
addMark=false;
}
let res=[];
//过滤主页视频
let selections = $("a[data-info]");
for (let i=0;i<selections.length;i++){
let tag=selections[i];
let m = tag[mark];
if (addMark) tag[mark]=mval;
if (typeof mark !== "undefined" && m!==mval && !addMark){
continue;
}
let info=$(tag).attr("data-info");
let json=JSON.parse(info);
let username=json.userName;
res.push({tag:$(tag).parent()[0], username: username, type: 1});
//$(tag)
}
//过滤右边排行榜视频
let sel=$("ul[data-con]");
//For each rank
for (let i=0;i<sel.length;i++){
let tag=sel[i];
let rows=$(tag).find("li");
//For each row
for (let ri=0;ri<rows.length;ri++){
let rowTag = rows[ri];
//
let m = rowTag[mark];
if (addMark) rowTag[mark]=mval;
if (typeof mark !== "undefined" && m!==mval && !addMark){
continue;
}
//
let aTag = $(rowTag).find("[title]")[0];
let title=$(aTag).attr("title");
let matches = usernameByTitle(title)
if (matches){
let username = matches[0].substring(3).trim();
//$(rowTag)
res.push({tag:rowTag, username: username, type: 2});
}
}
}
//--------------------
sel=$("div[data-con]");
for (let i=0;i<sel.length;i++){
let tag=sel[i];
let rows=$(tag).find("li");
//For each row
for (let ri=0;ri<rows.length;ri++){
let rowTag = rows[ri];
//
let m = rowTag[mark];
if (addMark) rowTag[mark]=mval;
if (typeof mark !== "undefined" && m!==mval && !addMark){
continue;
}
//
let aTag = $(rowTag).find("[title]")[0];
let title=$(aTag).attr("title");
if (title){
let matches = usernameByTitle(title)
if (matches){
let username = matches[0].substring(3).trim();
res.push({tag:rowTag, username: username, type: 3});
}
}
}
}
return res;
}
function getListSelection(mark,mval, addMark){
if (typeof addMark=="undefined"){
addMark=false;
}
let res=[];
let sel=$("div.weblog-item");
//console.log("sel weblog")
for (let i = 0;i<sel.length;i++){
let row = sel[i];
//
let m = row[mark];
if (addMark) row[mark]=mval;
//console.log(mark, mval, m);
if (typeof mark !== "undefined" && m!==mval && !addMark){
//console.log("continue");
continue;
}
//
let aTag = $(row).find(".atc-up")[0];
let username = $(aTag).attr("title");
res.push({tag:row, username: username, type: 4});
}
return res;
}
function addPanel(){
}
let a = 0;
function addButton(pageType){
let attach= function(list){
//console.log(list)
for (let i=0;i<list.length;i++){
let tag = list[i].tag;
$(tag).mousemove(function(){
if (window.currentTag==tag) return;
let rect = tag.getBoundingClientRect();
let brect= filterButton.getBoundingClientRect();
let button = $(filterButton).detach();
//.css("left", (rect.right-brect.width)+"px")
//.css("top", rect.top+"px")
//.show();
$(tag)
.css("white-space","nowrap")
.css("overflow","visible")
.css("position","relative")
.append(button)
window.currentTag=tag;
window.currentUser=list[i].username;
$(filterButton).off("click");
if (pageType!=="home"){
$(filterButton)
.css("right","0")
.css("top","0")
.css("transform","translate(100%,0)")
}
$(filterButton)
.on("click",
function(){
console.log("current", window.currentTag, window.currentUser);
if (typeof window.currentTag!=="undefined" && window.currentTag!==null){
addToList(window.currentUser);
console.log("a=",a);
a++;
}
})
.show();
})
$(tag).mouseleave(function(){
let rect = tag.getBoundingClientRect();
$(filterButton).detach();
window.currentTag=null;
window.currentUser=null;
$(filterButton).off("click").hide()
})
}
}
if (pageType == "home"){
let list = getHomeSelection("ATTACHED", true, true);
attach(list);
}else{
let list = getListSelection("ATTACHED", true, true);
attach(list);
}
}
function addUI(pageType){
addButton(pageType);
}
//
console.log("match type", window.location.href)
function usernameByTitle(title){
let regex = /UP:(.+)[\s\v\n]/g
return title.match(regex);
}
function FilterVideos(){
let upList=up();
//过滤主页视频
let selections = $("a[data-info]");
for (let i=0;i<selections.length;i++){
let tag=selections[i];
let info=$(tag).attr("data-info");
let json=JSON.parse(info);
let username=json.userName;
if (upList.indexOf(username)>=0){
$(tag).parent().css("visibility","hidden");
}
}
//过滤右边排行榜视频
let sel=$("ul[data-con]");
//For each rank
for (let i=0;i<sel.length;i++){
let tag=sel[i];
let rows=$(tag).find("li");
//For each row
for (let ri=0;ri<rows.length;ri++){
let rowTag = rows[ri];
let aTag = $(rowTag).find("[title]")[0];
let title=$(aTag).attr("title");
let matches = usernameByTitle(title)
if (matches){
let username = matches[0].substring(3).trim();
if (upList.indexOf(username)>=0){
//找到了,隐藏本条
$(rowTag).css("visibility","hidden");
}
}
}
}
}
//过滤主页文章区
function FilterArticles(){
let upList=up();
let sel=$("div[data-con]");
for (let i=0;i<sel.length;i++){
let tag=sel[i];
let rows=$(tag).find("li");
//For each row
for (let ri=0;ri<rows.length;ri++){
let rowTag = rows[ri];
let aTag = $(rowTag).find("[title]")[0];
let title=$(aTag).attr("title");
if (title){
let matches = usernameByTitle(title)
if (matches){
let username = matches[0].substring(3).trim();
if (upList.indexOf(username)>=0){
//找到了,隐藏本条
console.log("过滤文脏区 rank=", i, "row=",ri,"username=",username);
$(rowTag).css("visibility","hidden");
}
}
}
}
}
}
//过滤文章列表页
function FilterListPage(){
let upList=up();
let sel=$("div.weblog-item");
//console.log("uplist = ", upList, sel);
for (let i = 0;i<sel.length;i++){
let row = sel[i];
//if (typeof row.visited=="undefined"){ row.visited = true; }else{continue;}
let aTag = $(row).find(".atc-up")[0];
let username = $(aTag).attr("title");
console.log("username",username, window.currentUser);
if (upList.indexOf(username)>=0){
//console.log("过滤文脏区",username);
//屏蔽
//$(row).css("display","none");
//$(row).removeClass("wblog-item");
//或者删除
$(row).remove();
}
}
}
function HandleHomePage(){
//屏蔽首页UP,包括视频和右边的文章区
FilterVideos();
FilterArticles();
addUI("home");
setTimeout(HandleHomePage, 800);
}
function HandleListPage(){
//屏蔽文章页,
FilterListPage();
addUI("list");
setTimeout(HandleListPage, 500);
}
$(document).ready(function(){
if (window.location.href=="http://www.acfun.cn/"){
HandleHomePage();
}
if (window.location.href.indexOf("www.acfun.cn/v/list")>=0){
HandleListPage();
}
})
})();