// ==UserScript==
// @name 妖火网增强插件
// @namespace https://yaohuo.me/
// @version 0.43
// @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",
`
超链
图片
图床
`
);
// 超链接
const textarea = document.querySelector(
"body > div.sticky > form > textarea"
);
document.getElementById("ubb_url").addEventListener("click", (e) => {
e.preventDefault();
insertText(textarea, "[url][/url]", 6);
});
document.getElementById("ubb_img").addEventListener("click", (e) => {
e.preventDefault();
insertText(textarea, "[img][/img]", 6);
});
// 异步评论
let submitBtn = document.getElementsByName('g')[0];
submitBtn.onclick = function(e) {
const formData = new FormData(document.forms[0]);
const entries = formData.entries();
const data = Object.fromEntries(entries);
data.g = '快速回复';
if (data.content.length > 0) {
e.preventDefault(); // 阻止表单提交事件
console.log(data);
fetch('/bbs/book_re.aspx', { // 异步POST请求表单
method: 'POST',
body: new URLSearchParams(data)
}).then(res => {
document.getElementsByName("content")[0].value = '';
let recontent = document.getElementsByClassName('recontent')[0];
fetch('/bbs-' + data.id + '.html').then(res => res.text()).then(html => { // 异步GET请求页面
// 重新渲染评论区
let newcontent = /recontent">(.*?)