bahamut commend enhanced

可調整巴哈姆特哈啦討論區留言的顯示順序(新留言在上或舊留言在上)、切換直接顯示留言者帳號、加入留言樓層數字、單獨開啟關閉某篇文章圖片影像

目前為 2016-06-06 提交的版本,檢視 最新版本

// ==UserScript==
// @name		bahamut commend enhanced
// @namespace	http://userscripts/user
// @include		http://forum.gamer.com.tw/C.php?*
// @include		http://forum.gamer.com.tw/Co.php?*
// @description	可調整巴哈姆特哈啦討論區留言的顯示順序(新留言在上或舊留言在上)、切換直接顯示留言者帳號、加入留言樓層數字、單獨開啟關閉某篇文章圖片影像
// @version		1.07
// @grant		GM_getValue
// @grant		GM_setValue
// @grant		GM_addStyle
// ==/UserScript==
//滑鼠移上留言時背景底色變化
GM_addStyle(".FM-cbox10 p:hover { background-color : #eaeaea !important;}");
//記錄最後使用的留言排列順序
var BHCOA;
var BHCO = GM_getValue("BHCO",false);
var rk = GM_getValue("BHCO",false);
var BHCNW = GM_getValue("BHCNW",false);
var BHCNE = GM_getValue("BHCNE",true);
var oldmoreCommend = unsafeWindow.moreCommend;
var oldallCommend = unsafeWindow.allCommend;
var oldcloseallCommend = unsafeWindow.closeallCommend;
var oldforumShowAllMedia = unsafeWindow.forumShowAllMedia;
//在原函式 moreCommend 中加入新功能
function moreCommend(bsn,snB,where){
	var cptext = "Commendlist_"+snB;
	var cptmp = unsafeWindow.document.getElementById(cptext).getElementsByTagName("p");
	var ntmp = parseInt(unsafeWindow.document.getElementById("showoldCommend_"+snB).innerHTML.substring(6)) + parseInt(unsafeWindow.document.getElementById("Commendlist5_"+snB).childNodes.length)-1;
	oldmoreCommend(bsn,snB,where);
	BHC1000Wait(cptmp,ntmp,snB,unsafeWindow.document.getElementById("showoldCommend_"+snB).previousSibling.previousSibling.firstChild.innerHTML.substring(5));
	BHCOA = BHCO;
}
//在原函式 allCommend 中加入新功能
function allCommend(bsn,snB,where){
	var cptext = "Commendlist_"+snB;
	var cptmp = unsafeWindow.document.getElementById(cptext).getElementsByTagName("p");
	var ntmp = parseInt(unsafeWindow.document.getElementById(where).innerHTML.substring(6))+cptmp.length;
	oldallCommend(bsn,snB,where);
	BHCWait(cptmp,ntmp,unsafeWindow.document.getElementById(where).previousSibling.previousSibling.firstChild.innerHTML.substring(5));
	BHCOA = BHCO;
}
//在原函式 closeallCommend 中加入新功能
function closeallCommend(bsn,snB,where){
	oldcloseallCommend(bsn,snB,where);
	var cptext = "Commendlist_"+snB;
	var cptmp = unsafeWindow.document.getElementById(cptext).getElementsByTagName("p");
	if((parseInt(cptmp[0].id.substring(15))>parseInt(cptmp[1].id.substring(15)) && unsafeWindow.document.getElementById(where).previousSibling.previousSibling.firstChild.innerHTML.substring(5) == "↑")||(parseInt(cptmp[0].id.substring(15))<parseInt(cptmp[1].id.substring(15)) && unsafeWindow.document.getElementById(where).previousSibling.previousSibling.firstChild.innerHTML.substring(5) == "↓")){
		CommendOrder(cptmp,false);
		CommendAccountName(cptmp,true);
	}
	else{
		CommendOrder(cptmp,true);
		CommendAccountName(cptmp,true);
	}
}
//在原函式 forumShowAllMedia 中加入新功能
forumShowAllMedia = function (a){
	GamerChangeAllBtnToClose();
	return oldforumShowAllMedia(a);
}
//開啟超過1000則的舊留言,在讀取完留言後進行新功能
function BHC1000Wait(cps,num,snB,ud){
	var i,NT;
	if(unsafeWindow.document.getElementById("CommendMore_"+snB).style.display != "none")
		window.setTimeout(function(){BHC1000Wait(cps,num,snB,ud)}, 50);
	else{
		var cptext = "Commendlist_"+snB;
		var cptmp = unsafeWindow.document.getElementById(cptext).getElementsByTagName("p");
		var newnode;
		for(i=num-1000;i>0;i--){
			newnode = unsafeWindow.document.createElement("span");
			newnode.innerHTML = i + "&nbsp:";
			newnode.setAttribute("style","color:#585858;margin:0 5px 0 -2px;");
			newnode.setAttribute("nickname",cptmp[i-1].childNodes[1].innerHTML);
			newnode.setAttribute("account",cptmp[i-1].childNodes[1].title);
			cptmp[i-1].insertBefore(newnode,cptmp[i-1].firstChild);
			if(BHCNW){
				NT = cptmp[i-1].childNodes[2].innerHTML;
				cptmp[i-1].childNodes[2].innerHTML = cptmp[i-1].childNodes[2].title;
				if(cptmp[i-1].childNodes[3].tagName != "SPAN" && cptmp[i-1].childNodes[3].tagName != "span"){
					var Namenode = unsafeWindow.document.createElement("span");
					if(BHCNE){
						Namenode.innerHTML = "&nbsp(" + NT + ")";
						Namenode.setAttribute("style","color:#282828;margin:0 5px 0 -2px;");
						cptmp[i-1].insertBefore(Namenode,cptmp[i-1].childNodes[3]);
					}
					else{
						cptmp[i-1].childNodes[2].title = NT;
					}
				}
				else{
					cptmp[i-1].childNodes[2].title = cptmp[i-1].childNodes[3].innerHTML.substring(7,cptmp[i-1].childNodes[3].innerHTML.length-1);
					cptmp[i-1].removeChild(cptmp[j].childNodes[3]);
				}
			}
 			else{
 				NT = cptmp[i-1].firstChild.getAttribute("nickname");
	 			if(NT != cptmp[i-1].childNodes[2].innerHTML){
					NT = cptmp[i-1].childNodes[2].innerHTML;
					cptmp[i-1].childNodes[2].innerHTML = cptmp[i-1].childNodes[2].title;
					cptmp[i-1].childNodes[2].title = NT;
				}
			}
			if(ud=="↑")
				cptmp[i-1].parentNode.appendChild(cptmp[i-1]);
		}
	}
}
//開啟所有舊留言,在讀取完留言後進行新功能
function BHCWait(cps,num,ud){
	if(cps.length<num && cps.length<6)
		window.setTimeout(function(){unsafeWindow.BHCWait(cps,num,ud)}, 50);
	else {
		if(ud=="↑"){
			CommendOrder(cps,true,num);
			CommendAccountName(cps,true);
		}
		else{
			CommendOrder(cps,false,num);
			CommendAccountName(cps,true);
		}
	}
}
//留言加入樓數、排列順序
function CommendOrder(BHpA,rkey,num){
	var l;
	if(num && num>1000)
		l=num-1000;
	else
		l=0;
	var k = BHpA.length;
	if(k>0){
		var nodetmp,nodeIdtmp,nodeNametmp,j,m,nodeid,nodeName;
		var BHpp = BHpA[0].parentNode.parentNode.getElementsByTagName("p");
		
		if(BHpp[0].className == "FM-cbox10D" && k < 6 && (BHpp[0].firstChild.tagName == "A" || BHpp[0].firstChild.tagName == "a"))
			m = parseInt(BHpp[0].firstChild.innerHTML.substring(6));
		else
			m = l;
		for(j = 0;j<parseInt(k/2);j++){
			if(BHpA[j].firstChild.tagName == "BUTTON" || BHpA[j].firstChild.tagName == "button"){
				var newnode1 = unsafeWindow.document.createElement("span");
				var newnode2 = unsafeWindow.document.createElement("span");
				newnode1.innerHTML = (j+1+m) + "&nbsp:";
				newnode2.innerHTML = (k-j+m) + "&nbsp:";
				newnode1.setAttribute("style","color:#585858;margin:0 5px 0 -2px;");
				newnode2.setAttribute("style","color:#585858;margin:0 5px 0 -2px;");
				newnode1.setAttribute("nickname",BHpA[j].childNodes[1].innerHTML);
				newnode2.setAttribute("nickname",BHpA[k-j-1].childNodes[1].innerHTML);
				newnode1.setAttribute("account",BHpA[j].childNodes[1].title);
				newnode2.setAttribute("account",BHpA[k-j-1].childNodes[1].title);
				BHpA[j].insertBefore(newnode1,BHpA[j].firstChild);
				BHpA[k-j-1].insertBefore(newnode2,BHpA[k-j-1].firstChild);
			}
			if(rkey){
				nodetmp = BHpA[j].innerHTML;
				nodeIdtmp = BHpA[j].getAttribute("id");
				nodeNametmp = BHpA[j].getAttribute("name");
				BHpA[j].innerHTML = BHpA[k-j-1].innerHTML;
				BHpA[j].setAttribute("id",BHpA[k-j-1].getAttribute("id"));
				BHpA[j].setAttribute("name",BHpA[k-j-1].getAttribute("name"));
				BHpA[k-j-1].innerHTML = nodetmp;
				BHpA[k-j-1].setAttribute("id",nodeIdtmp);
				BHpA[k-j-1].setAttribute("name",nodeNametmp);
			}
		}
		if(j == (k-j-1) && (BHpA[j].firstChild.tagName == "BUTTON" || BHpA[j].firstChild.tagName == "button")){
			var newnode3 = unsafeWindow.document.createElement("span");
			newnode3.innerHTML = (j+1+m) + "&nbsp:";
			newnode3.setAttribute("style","color:#585858;margin:0 5px 0 -2px;");
			newnode3.setAttribute("nickname",BHpA[j].childNodes[1].innerHTML);
			newnode3.setAttribute("account",BHpA[j].childNodes[1].title);
			BHpA[j].insertBefore(newnode3,BHpA[j].firstChild);
		}
	}
}
//變更留言者帳號、暱稱
function CommendAccountName(BHpA,check){
	var k = BHpA.length;
	if(k>0){
		var j,AN,NN,sk;
		if(BHCNW){
			if(BHCNE)
				sk = 1;
			else
				sk = 2;
		}
		else{
			sk = 0;
		}
		if(check){
			var ptmp = BHpA[0].parentNode.parentNode.getElementsByTagName("p");
			if(ptmp[0].className == "FM-cbox10D")
				switch(sk){
					case 1:
						ptmp[0].childNodes[1].childNodes[0].innerHTML = "帳號(暱稱)";
						break;
					case 2:
						ptmp[0].childNodes[1].childNodes[0].innerHTML = "帳號";
						break;
					default:
						ptmp[0].childNodes[1].childNodes[0].innerHTML ="暱稱";
				}
		}
		for(j = 0;j<k;j++){
			NN = BHpA[j].firstChild.getAttribute("nickname");
			AN = BHpA[j].firstChild.getAttribute("account");
			var Namenode = unsafeWindow.document.createElement("span");
			switch(sk){
				case 1:
					Namenode.innerHTML = "&nbsp(" + NN + ")";
					Namenode.setAttribute("style","color:#282828;margin:0 5px 0 -2px;");
					BHpA[j].childNodes[2].innerHTML = AN;
					BHpA[j].childNodes[2].title = AN;
					break;
				case 2:
					BHpA[j].childNodes[2].innerHTML = AN;
					BHpA[j].childNodes[2].title = NN;
					break;
				default:
					BHpA[j].childNodes[2].innerHTML = NN;
					BHpA[j].childNodes[2].title = AN;
			}
			if(BHpA[j].childNodes[3].tagName != "SPAN" && BHpA[j].childNodes[3].tagName != "span"){
				switch(sk){
					case 1:
						BHpA[j].insertBefore(Namenode,BHpA[j].childNodes[3]);
						break;
					case 2:
					default:
				}
			}
			else{
				switch(sk){
					case 1:
						break;
					case 2:
					default:
						BHpA[j].removeChild(BHpA[j].childNodes[3]);
				}
			}
		}
	}
}

//調整留言排列順序
function GamerCommendReverse(event){
	var BHDivs =(event) ? event.currentTarget.parentNode.parentNode.getElementsByTagName("div") : unsafeWindow.document.getElementsByTagName("div");
	var ek = (event) ? true : false;
	if(event){
		rk = (rk) ? false : true;
		BHCO = rk;
		if(event.currentTarget.firstChild.innerHTML == "↑留言順序↑")
			event.currentTarget.firstChild.innerHTML = "↓留言順序↓";
		else
			event.currentTarget.firstChild.innerHTML = "↑留言順序↑" ;
		GM_setValue("BHCO",rk);
	}
	for(i = 0;i < BHDivs.length;i++){
		if(BHDivs[i].className == "FM-msgbg"){
			var BHps = BHDivs[i].getElementsByTagName("p");
			CommendOrder(BHps,ek||rk);
		}
	}
}
//切換直接顯示留言者帳號
function GamerCommendNameSwitch(event){
	var ktmp;
	var BHDivs =(event) ? event.currentTarget.parentNode.parentNode.getElementsByTagName("div") : unsafeWindow.document.getElementsByTagName("div");
	if(event){
		if(BHCNW){
			if(BHCNE)
				BHCNE = false;
			else{
				BHCNE = true;
				BHCNW = false ;
			}
		}
		else{
			BHCNW = true;
			BHCNE = true;
		}
		if(BHCNW){
			if(BHCNE)
				event.currentTarget.firstChild.innerHTML = "帳號(暱稱)";
			else
				event.currentTarget.firstChild.innerHTML = "帳號";
		}
		else{
			event.currentTarget.firstChild.innerHTML = "暱稱";
		}
		GM_setValue("BHCNW",BHCNW);
		GM_setValue("BHCNE",BHCNE);
	}
	for(i = 0;i < BHDivs.length;i++){
		if(BHDivs[i].className == "FM-msgbg"){
			var BHps = BHDivs[i].getElementsByTagName("p");
			CommendAccountName(BHps);
		}
	}
}

//更改開啟圖像為關閉圖像
function GamerChangeBtnToClose(BE){
	if(BE.innerHTML != "關圖"){
		BE.innerHTML = "關圖";
		BE.removeEventListener('click',unsafeWindow.GamerOpenImage,true);
	}
	BE.addEventListener('click',unsafeWindow.GamerCloseImage,true);
}
//更改關閉圖像為開啟圖像
function GamerChangeBtnToOpen (BE){
	if(BE.innerHTML != "開圖"){
		BE.innerHTML = "開圖";
		BE.removeEventListener('click',unsafeWindow.GamerCloseImage,true);
	}
	BE.addEventListener('click',unsafeWindow.GamerOpenImage,true);
}
//點擊開啟全部圖像時,更改單篇開啟圖像為關閉圖像
function GamerChangeAllBtnToClose(){
	var BHPA = unsafeWindow.document.getElementsByTagName("p");
	var i;
	for(i = 0;i < BHPA.length;i++){
		if(BHPA[i].className == "FM-cbox4" && BHPA[i].childNodes.length > 2){
			GamerChangeBtnToClose(BHPA[i].lastChild);
		}
	}
}
//開啟單篇文章的圖片、影像
function GamerOpenImage(event){
	var EDivA = event.currentTarget.parentNode.parentNode.parentNode.getElementsByTagName("div");
	GamerChangeBtnToClose(event.currentTarget);
	var i,j,Mid;
	for(i = 0;i < EDivA.length;i++){
		if(EDivA[i].className.substring(0,8) == "FM-cbox7"){
			var EAA = EDivA[i].getElementsByTagName("a");
			if(EAA){
				for (j = 0; j < EAA.length; j++) {
					if(EAA[j].name == "attachImgName")
						unsafeWindow.attachIMG(EAA[j], 'show');
					if(EAA[j].name == "attachMovieName")
						unsafeWindow.attachMOVIE(EAA[j]);
				}
			}
		}
	}
}
//關閉單篇文章的圖片、影像
function GamerCloseImage(event){
	var EDivA = event.currentTarget.parentNode.parentNode.parentNode.getElementsByTagName("div");
	GamerChangeBtnToOpen(event.currentTarget);
	var i,j;
	for(i = 0;i < EDivA.length;i++){
		if(EDivA[i].className.substring(0,8) == "FM-cbox7"){
			var EAA = EDivA[i].getElementsByTagName("a");
			if(EAA){
				for (j = 0; j < EAA.length; j++) {
					if(EAA[j].name == "attachImgName"){
						EAA[j].innerHTML = '<script language="javascript">showMediaClick("img")</script>請點選觀看圖片';
						EAA[j].removeAttribute("data-expanded");
					}
					if(EAA[j].name == "attachMovieName"){
						EAA[j].href = EAA[j].firstChild.getAttribute("data-src");
						EAA[j].innerHTML = '<script language="javascript">showMediaClick("movie")</script>請點選觀看影片';
					}
				}
			}
		}
	}
}
//單篇文章的影像、圖片若已全部開啟,將開啟圖像改為關閉圖像
function GamerImgOpenCheck(event){
	var i,ImgOpenF = true;
	var CTAA;
	if(event.currentTarget.parentNode.className=="FM-P2")
		CTAA = event.currentTarget.parentNode.getElementsByTagName("a");
	else if(event.currentTarget.parentNode.parentNode.className=="FM-P2")
		CTAA = event.currentTarget.parentNode.parentNode.getElementsByTagName("a");
	else if((event.currentTarget.parentNode.parentNode.parentNode.className=="FM-P2"))
		CTAA = event.currentTarget.parentNode.parentNode.parentNode.getElementsByTagName("a");
	for(i = 0; i < CTAA.length; i++){
		if((CTAA[i].name == "attachImgName" || CTAA[i].name == "attachMovieName") && CTAA[i].firstChild.tagName == "SCRIPT"){
			ImgOpenF = false;
			break;
		}
	}
	if(ImgOpenF){
		var CTPA,CTPNA = event.currentTarget.parentNode.parentNode.parentNode.parentNode.parentNode;
		if(CTPNA.className != "FM-cbox1")
			CTPNA = event.currentTarget.parentNode.parentNode.parentNode.parentNode;
		if(CTPNA.className != "FM-cbox1")
			CTPNA = event.currentTarget.parentNode.parentNode.parentNode;
		CTPA = CTPNA.getElementsByTagName("p");
		for (i = 0; i < CTPA.length; i++){
			if(CTPA[i].className == "FM-cbox4" && CTPA[i].childNodes.length > 2)
				GamerChangeBtnToClose(CTPA[i].lastChild);
		}
	}
}
//加入改變留言順序的連結點
function BHCES(){
	unsafeWindow.BHCWait = exportFunction(BHCWait,unsafeWindow);
	unsafeWindow.BHC1000Wait = exportFunction(BHC1000Wait,unsafeWindow);
	unsafeWindow.moreCommend = exportFunction(moreCommend,unsafeWindow);
	unsafeWindow.allCommend = exportFunction(allCommend,unsafeWindow);
	unsafeWindow.closeallCommend = exportFunction(closeallCommend,unsafeWindow);
	unsafeWindow.GamerCommendReverse = exportFunction(GamerCommendReverse,unsafeWindow);
	unsafeWindow.GamerCommendNameSwitch = exportFunction(GamerCommendNameSwitch,unsafeWindow);
	unsafeWindow.GamerOpenImage = exportFunction(GamerOpenImage,unsafeWindow);
	unsafeWindow.GamerCloseImage = exportFunction(GamerCloseImage,unsafeWindow);
	unsafeWindow.GamerImgOpenCheck = exportFunction(GamerImgOpenCheck,unsafeWindow);
	unsafeWindow.forumShowAllMedia = exportFunction(forumShowAllMedia,unsafeWindow);
	GamerCommendReverse();
	GamerCommendNameSwitch();
	var BHDivA = unsafeWindow.document.getElementsByTagName("div");
	for(i = 0;i < BHDivA.length;i++){
		if(BHDivA[i].className == "FM-cbox10"){
			var j,pchecked1 = false,pchecked2 = false;
			var tmp = (BHCO) ? "↑" : "↓";
			var ANtmp = (BHCNW) ? "帳號" : "暱稱";
			if(BHCNW)
				ANtmp = (BHCNE) ? "帳號(暱稱)" : "帳號";
			for(j = 0;j < BHDivA[i].childNodes.length;j++){
				if(BHDivA[i].childNodes[j].className == "FM-cbox10D")
					pchecked1 = true;
				if(BHDivA[i].childNodes[j].className == "FM-msgbg" && BHDivA[i].childNodes[j].childNodes.length > 2)
					pchecked2 = true;
			}
			if(!pchecked1 && pchecked2){
				BHDivA[i].innerHTML = '<p class="FM-cbox10D"><span style="text-align:left;float:left;"><a href ="javascript:;">'+tmp+'留言順序'+tmp+'</a></span><span style="text-align:left;float:left;"><a href ="javascript:;">'+ANtmp+'</a></span></p>' + BHDivA[i].innerHTML;
				BHDivA[i].firstChild.firstChild.addEventListener('click',unsafeWindow.GamerCommendReverse,true);
				BHDivA[i].firstChild.childNodes[1].addEventListener('click',unsafeWindow.GamerCommendNameSwitch,true);
			}
			else if(pchecked1){
				PA = BHDivA[i].getElementsByTagName("p");
				PA[0].innerHTML = '<span style="text-align:left;float:left;"><a href ="javascript:;">'+tmp+'留言順序'+tmp+'</a></span><span style="text-align:left;float:left;"><a href ="javascript:;">'+ANtmp+'</a></span>' + PA[0].innerHTML;
				PA[0].firstChild.addEventListener('click',unsafeWindow.GamerCommendReverse,true);
				PA[0].childNodes[1].addEventListener('click',unsafeWindow.GamerCommendNameSwitch,true);
			}
		}
	}
	//修改開啟圖片按鈕的連結點
	var BHPA = unsafeWindow.document.getElementsByTagName("p");
	for(i = 0;i < BHPA.length;i++){
		if(BHPA[i].className == "FM-cbox4"){
			BHPA[i].removeChild(BHPA[i].childNodes[2]);
			var BHPDivA = BHPA[i].parentNode.parentNode.getElementsByTagName("div");
			var k,j,Iflag = false,Oflag = true;
			for(k = 0;k < BHPDivA.length;k++){
				if(BHPDivA[k].className.substring(0,8) == "FM-cbox7"){
					var EAA = BHPDivA[k].getElementsByTagName("a");
					if(EAA){
						for(j = 0; j < EAA.length; j++){
							if(EAA[j].name == "attachImgName" || EAA[j].name == "attachMovieName"){
								Iflag = true;
								EAA[j].addEventListener('click',unsafeWindow.GamerImgOpenCheck,true);
								if(EAA[j].firstChild.tagName == "SCRIPT")
									Oflag = false;
							}
						}
					}
				}
			}
			if(Iflag){
				var	newnode = unsafeWindow.document.createElement("a");
				if(Oflag){
					newnode.innerHTML="關圖";
					newnode.addEventListener('click',unsafeWindow.GamerCloseImage,true);
				}
				else{
					newnode.innerHTML="開圖";
					newnode.addEventListener('click',unsafeWindow.GamerOpenImage,true);
				}
				newnode.setAttribute("href","javascript:;");
				BHPA[i].insertBefore(newnode,BHPA[i].lastChild.nextSibling);
			}
		}
	}
	//將原有的開啟所有圖片按鈕移到上面的浮動功能列
	var newLi = unsafeWindow.document.createElement("li");
	newLi.innerHTML = '<a href="javascript:;">圖像全開</a>';
	newLi.addEventListener('click',unsafeWindow.forumShowAllMedia,true);
	var BHMenu = unsafeWindow.document.getElementById("BH-menu-path");
	var BHMenuULA = BHMenu.getElementsByTagName("ul");
	BHMenuULA[0].insertBefore(newLi,BHMenuULA[0].childNodes[6]);
}
BHCES();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址