There are 5 previous versions of this script.
// ==UserScript==
// @name LKBlackList
// @namespace forum.dragonsky.net
// @description 龙空黑名单 20081225build01
// @include http://forum.dragonsky.net/viewthread.php*
// ==/UserScript==
var lang = [];
lang['default'] = {
listManager:'黑名单管理',
cls:'封杀乃',
quote:'该引用惨遭屏蔽',
tbc:'正在建设ing'
};
//====================interface============================
var interf = [];
interf['old']
={
post: "getElementsByClass('postauthor','td') ",
quote: "getElementsByClass('msgborder','div'); ",
postID:"oldPostIDImpl(node)",
quoteID:"node.childNodes[0].childNodes[1]?node.childNodes[0].childNodes[1].innerHTML: node.childNodes[1].childNodes[1].innerHTML"//第二个是屏蔽后引用位置
}
function oldPostIDImpl(node){
for(var i=0,j=node.childNodes.length;i<j;i++){
if(node.childNodes[i].tagName !=null && node.childNodes[i].tagName.toLowerCase() == 'cite'){
//alert(i+"-"+node.childNodes[i].innerHTML.match(/<b>(.*)<\/b>/)[1])
;
return node.childNodes[i].innerHTML.match(/<b>(.*)<\/b>/)[1];
}
}
}
interf['new'] = {
post:"getElementsByClass('postauthor','td')",
quote:"getElementsByClass('quote','div')",
postID:"oldPostIDImpl(node)",//"var posts = getElementsByClass('postauthor','td');var tblID = node.parentNode.parentNode.parentNode.id;if(tblID == posts[0].parentNode.parentNode.parentNode.id || tblID == posts[posts.length-2].parentNode.parentNode.parentNode.id){ node.childNodes[3].childNodes[3].childNodes[1].firstChild.innerHTML;}else node.childNodes[1].childNodes[3].childNodes[1].firstChild.innerHTML; ",
quoteID:"node.childNodes[1].childNodes[1].innerHTML"
}
function selectInterface(){
var result;
if(getElementsByClass('postauthor','td')!= null && getElementsByClass('quote','div')!= null){
result = interf['new'];
}else{
result = interf['old'];
}
return result;
}
//============================================================
var curInterface;
window.addEventListener('load',inits,false);
//界面初始化
function inits(){
curInterface = selectInterface();
addBtn();
filter();
addManager();
}
//控制面板管理
function addManager(){
var panel = getControlPanel();
var mLink = document.createElement('a');
mLink.innerHTML = lang['default'].listManager;
mLink.title = "黑名单管理";
mLink.href ="javascript:;";
mLink.addEventListener('click',manageList,false);
mLink.style.display = 'block';
var li = document.createElement('li');
li.appendChild(mLink);
panel.appendChild(li);
}
function getControlPanel(){
return document.getElementById("memcp_menu");
}
//黑名单管理接口
function manageList(){
alert(lang['default'].tbc);
}
function getIDByPost(node){
return eval(curInterface.postID);
}
function getIDByQuote(node){
//alert(node.childNodes[1].innerHTML.match(/<\i>(.+)<\/\i>/)[1] );
return eval(curInterface.quoteID);
//return node.childNodes[1].innerHTML.match(/<\i>(.+)<\/\i>/)[1];
}
/**
*展示documentNode的子节点,Y-遍历子节点的子节点,N-下一节点
*/
function alertChild(node){
for(var i=0,j=node.childNodes.length;i<j;i++){
var t = window.confirm(node.childNodes[i].tagName+":"+i);
if(!t) continue;
alertChild(node.childNodes[i]);
}
}
function filter(){
var list = getList();
//filter post
var posts = eval(curInterface.post);
for(var i=0,j=posts.length;i<j;i+=2){
var curId = getIDByPost(posts[i]);
if(list.indexOf(curId +',') >= 0) {
var tblPost = posts[i].parentNode.parentNode.parentNode;
tblPost.parentNode.style.display = 'none';
}
}
//filter quote
var quotes = eval(curInterface.quote);
for(var i=0,j=quotes.length;i<j;i++){
if(list.indexOf(getIDByQuote(quotes[i])+',')>=0){
quotes[i].innerHTML = ('\n<span>\n<i>'+lang['default'].quote+'</i></span>');
quotes[i].style.border = '1px solid gray';
}
}
}
function hideID(){
var targetID;
targetID = getIDByPost(this.parentNode.parentNode);
addtoList(targetID);
filter();
}
function addBtn(){
var posts = eval(curInterface.post);
for(var i=0,j=posts.length;i<j;i+=2){
var temp;
if( i==0 || i== j-2)
temp = posts[i].childNodes[3];
else
temp = posts[i].childNodes[1];
var cls = document.createElement('span');
cls.innerHTML="<a href='javascript:;'>"+lang['default'].cls+'</a>';
cls.addEventListener('click',hideID,false);
temp.appendChild(cls);
}
}
function addtoList(id){
var list = getList();
if(list.indexOf(id+',') < 0){
list += id+',';
}
GM_setValue('blackList',escape(list));
}
function removefromList(id){
var list = getList();
list = list.split(id+',').join('');
GM_setValue('blackList',escape(list));
}
function getList(){
return GM_getValue('blackList') != null ? unescape(GM_getValue('blackList')) :'';
}
function getElementsByClass(name,tag){
var items = document.getElementsByTagName(tag);
var result = [];
for(var i=0,j=items.length;i<j;i++){
if(items[i].className.indexOf(name) >=0) {
result.push(items[i]);
}
}
return result;
}
