// ==UserScript==
// @name 妖火网增强插件
// @namespace https://yaohuo.me/
// @version 0.41
// @description 获得焦点时回复框自动停靠、加载更多楼层、回复任意楼层、回复后快速返回、双击定位评论区、发帖增强、图床直达
// @author 外卖不用券(id:23825)
// @match https://*.yaohuo.me/*
// @icon https://yaohuo.me/css/favicon.ico
// @license MIT
// @downloadURL none
// ==/UserScript==
if (
/^\/bbs-.*\.html$/.test(window.location.pathname) ||
"/bbs/book_view.aspx" === window.location.pathname
) {
// 回复框停靠
let content = document.getElementsByClassName("content")[1];
let form = document.getElementsByName("f")[0];
content.removeChild(form);
let newDiv = document.createElement("div");
let clazz = document.createAttribute("class");
clazz.value = "sticky";
newDiv.setAttributeNode(clazz);
newDiv.style.cssText = "padding: 7px; background-color: #fff";
newDiv.innerHTML = form.outerHTML;
document.body.insertBefore(newDiv, content);
let sticky = false;
newDiv.onclick = () => {
let form = document.getElementsByName("f")[0];
let sendmsg = document.getElementsByName("sendmsg")[0];
let span = document.createElement("span");
let textNode = document.createTextNode("取消回复停靠");
span.appendChild(textNode);
span.style.cssText = "float: right";
span.onclick = (e) => {
e.cancelBubble = true;
newDiv.style.cssText = "padding: 7px; background-color: #fff";
form.removeChild(span);
sticky = false;
};
if (!sticky) {
newDiv.style.cssText =
"position: sticky; top: 0; bottom: 0; padding: 7px; background-color: #fff";
form.insertBefore(span, sendmsg);
sticky = true;
}
};
// 加载更多回复
let more = document.getElementsByClassName("more")[0];
let moreLink = more.getElementsByTagName("a")[0];
let totalpage = Math.ceil(
/getTotal=\d+/.exec(moreLink.href)[0].slice(9) / 15
);
let currpage = 1;
let topage = parseInt(/&page=\d+/.exec(moreLink.href)[0].slice(6));
let tourl = moreLink.href.replace("&page=" + topage, "");
// more.removeChild(moreLink);
let newMoreLink = document.createElement("a");
let span1 = document.createElement("span");
let span1_id = document.createAttribute("id");
span1_id.value = "YH_show_loadimg";
span1.setAttributeNode(span1_id);
newMoreLink.appendChild(span1);
let span2 = document.createElement("span");
let span2_id = document.createAttribute("id");
span2_id.value = "YH_show_tip";
span2.setAttributeNode(span2_id);
span2.appendChild(
document.createTextNode("加载更多(" + currpage + "/" + totalpage + ")")
);
newMoreLink.appendChild(span2);
newMoreLink.style.width = "50%";
more.appendChild(newMoreLink);
moreLink.style.width = "50%";
more.appendChild(moreLink);
newMoreLink.onclick = () =>
YH_show_next(totalpage, 15, currpage, tourl, "page");
// 回复任意楼层
replyAny();
// 双击定位评论区
let bbscontent = document.getElementsByClassName("bbscontent")[0];
bbscontent.ondblclick = () =>
document.getElementsByClassName("sticky")[0].scrollIntoView(true);
// 妖火图床
form = document.getElementsByName("f")[0];
form.removeChild(form.lastChild);
form.insertAdjacentHTML(
"beforeend",
`妖火图床
`
);
} else if (
"/bbs/book_re.aspx" === window.location.pathname &&
!window.location.search
) {
// 回复后快速返回
window.location.href = document
.getElementsByClassName("tip")[0]
.getElementsByTagName("a")[0].href;
} else if (
[
"/bbs/book_view_add.aspx",
"/bbs/book_view_sendmoney.aspx",
"/bbs/book_view_addvote.aspx",
"/bbs/book_view_addfile.aspx",
"/bbs/book_view_mod.aspx",
].includes(window.location.pathname)
) {
let bookContent = document.getElementsByName("book_content")[0];
bookContent.insertAdjacentHTML(
"beforebegin",
`
`
);
document.getElementById("ubb_a").addEventListener("click", () => {
insertText(bookContent, "[url][/url]", 6);
});
document.getElementById("ubb_f").addEventListener("click", () => {
insertText(bookContent, "[forecolor=#FF0000][/forecolor]", 12);
});
document.getElementById("ubb_b").addEventListener("click", () => {
insertText(bookContent, "[b][/b]", 4);
});
document.getElementById("ubb_s").addEventListener("click", () => {
insertText(bookContent, "[strike][/strike]", 9);
});
document.getElementById("ubb_img").addEventListener("click", () => {
insertText(bookContent, "[img][/img]", 6);
});
document.getElementById("ubb_movie").addEventListener("click", () => {
insertText(bookContent, "[movie=100%*100%][/movie]", 8);
});
document.getElementById("ubb_audio").addEventListener("click", () => {
insertText(bookContent, "[audio=X][/audio]", 8);
});
document.getElementById("ubb_more").addEventListener("click", () => {
let ubb_tool = document.getElementsByClassName("more_ubb_tools")[0];
ubb_tool.style.display =
ubb_tool.style.display === "none" ? "block" : "none";
});
}
function insertText(obj, str, offset) {
if (document.selection) {
var sel = document.selection.createRange();
sel.text = str;
} else if (
typeof obj.selectionStart === "number" &&
typeof obj.selectionEnd === "number"
) {
var startPos = obj.selectionStart,
endPos = obj.selectionEnd,
cursorPos = startPos,
tmpStr = obj.value;
obj.value =
tmpStr.substring(0, startPos) +
str +
tmpStr.substring(endPos, tmpStr.length);
cursorPos += str.length;
obj.selectionStart = obj.selectionEnd = cursorPos - offset;
} else {
obj.value += str;
}
document.getElementsByName("book_content")[0].focus();
}
function replyAny() {
let sticky = document.getElementsByClassName("sticky")[0];
let recontent = document.getElementsByClassName("recontent")[0].childNodes;
for (let i = 0; i < recontent.length; i++) {
let replyLink = recontent[i].getElementsByTagName("a")[0].href;
recontent[i].onclick = () => {
let reply = /reply=\d+/.exec(replyLink)[0].slice(6);
let touserid = /touserid=\d+/.exec(replyLink)[0].slice(9);
sticky.style.cssText =
"position: sticky; top: 0; bottom: 0; padding: 7px; background-color: #fff";
sticky.click();
let form = document.getElementsByName("f")[0];
if (form.firstChild.tagName === "B") {
form.removeChild(form.firstChild);
form.removeChild(form.firstChild);
form.removeChild(form.firstChild);
form.removeChild(form.firstChild);
}
form.insertAdjacentHTML(
"afterbegin",
"回复" +
reply +
'楼取消回复楼层
'
);
if (form.lastChild.tagName === "INPUT") {
form.removeChild(form.lastChild);
form.removeChild(form.lastChild);
}
form.insertAdjacentHTML(
"beforeend",
''
);
form.insertAdjacentHTML(
"beforeend",
''
);
document.getElementsByClassName("noreply")[0].onclick = () => {
form.removeChild(form.firstChild);
form.removeChild(form.firstChild);
form.removeChild(form.firstChild);
form.removeChild(form.firstChild);
form.removeChild(form.lastChild);
form.removeChild(form.lastChild);
};
};
}
}
// YH_common.js
var xmlhttp = null;
var YH_now_currpage = 0;
var YH_page_total = 0;
var YH_scoll_downEnd = 0;
function YH_show_next(YH_total, YH_pagesize, YH_currpage, tourl, pagetype) {
YH_page_total = parseInt(YH_total);
var pagesize = parseInt(YH_pagesize);
var currpage = parseInt(YH_currpage);
if (YH_now_currpage == 0) {
YH_now_currpage = currpage + 1;
} else {
YH_now_currpage = YH_now_currpage + 1;
}
document.getElementById("YH_show_loadimg").innerHTML =
' ';
document.getElementById("YH_show_tip").innerHTML =
"正在努力加载(" + YH_now_currpage + "/" + YH_page_total + ")中";
if (YH_now_currpage > YH_page_total) {
document.getElementById("YH_show_loadimg").innerHTML = "";
document.getElementById("YH_show_tip").innerHTML = "没有更多了";
} else {
tourl = tourl + "&" + pagetype + "=" + YH_now_currpage;
LoadXML_Async(tourl);
}
}
function LoadXML_Async(tourl) {
try {
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) {
var activexName = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP", ""];
for (var i = 0; i < activexName.length; i++) {
try {
xmlhttp = new ActiveXObject(activexName[i]);
break;
} catch (e) {}
}
}
xmlhttp.onreadystatechange = YH_CallBack;
xmlhttp.open("GET", tourl, true);
xmlhttp.send(null);
} catch (e) {
document.getElementById("YH_show_loadimg").innerHTML =
' ';
document.getElementById("YH_show_tip").innerHTML = "加载出错了!";
}
}
function YH_CallBack() {
if (xmlhttp == null) {
return;
}
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
var responseText = xmlhttp.responseText;
var st = responseText.indexOf("");
var et = responseText.indexOf("");
if (st < 0 || et < 0) {
document.getElementById("YH_show_loadimg").innerHTML = "";
document.getElementById("YH_show_tip").innerHTML = "加载完全部了!";
} else {
responseText = responseText.substring(st + 12, et);
document.getElementsByClassName("recontent")[0].style.display = "block";
document.getElementsByClassName("recontent")[0].innerHTML +=
responseText;
replyAny();
if (YH_now_currpage == YH_page_total) {
document.getElementById("YH_show_loadimg").innerHTML = "";
document.getElementById("YH_show_tip").innerHTML = "没有更多了";
} else {
document.getElementById("YH_show_loadimg").innerHTML = "";
document.getElementById("YH_show_tip").innerHTML =
"加载更多(" + YH_now_currpage + "/" + YH_page_total + ")";
}
}
}
}
}