// ==UserScript==
// @name 妖火网增强插件
// @namespace https://yaohuo.me/
// @version 0.32
// @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 = parseInt(/lpage=\d+/.exec(moreLink.href)[0].slice(6));
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 = 'KL_show_loadimg';
span1.setAttributeNode(span1_id);
newMoreLink.appendChild(span1);
let span2 = document.createElement('span');
let span2_id = document.createAttribute('id');
span2_id.value = 'KL_show_tip';
span2.setAttributeNode(span2_id);
span2.appendChild(document.createTextNode('加载更多(' + currpage + '/' + totalpage + ')'));
newMoreLink.appendChild(span2);
more.appendChild(newMoreLink);
newMoreLink.onclick = () => KL_show_next(totalpage, 15, currpage, tourl, 'page');
// 回复任意楼层
replyAny();
} else if ('/bbs/book_re.aspx' === window.location.pathname && !window.location.search) {
window.location.href = document.getElementsByTagName('a')[0].href;
}
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.insertAdjacentHTML('afterbegin', '回复' + reply + '楼
');
if (form.lastChild.tagName === 'INPUT') {
form.removeChild(form.lastChild);
form.removeChild(form.lastChild);
}
form.insertAdjacentHTML('beforeend', '');
form.insertAdjacentHTML('beforeend', '');
}
}
}
// KL_common.js
var xmlhttp = null;
var KL_now_currpage = 0;
var KL_page_total = 0;
var KL_scoll_downEnd = 0;
function KL_show_next(KL_total, KL_pagesize, KL_currpage, tourl, pagetype) {
KL_page_total = parseInt(KL_total);
var pagesize = parseInt(KL_pagesize);
var currpage = parseInt(KL_currpage);
if (KL_now_currpage == 0) {
KL_now_currpage = currpage + 1;
} else {
KL_now_currpage = KL_now_currpage + 1;
}
document.getElementById('KL_show_loadimg').innerHTML = ' ';
document.getElementById('KL_show_tip').innerHTML = '正在努力加载(' + KL_now_currpage + '/' + KL_page_total + ')中';
if ((KL_now_currpage) > KL_page_total) {
document.getElementById('KL_show_loadimg').innerHTML = '';
document.getElementById('KL_show_tip').innerHTML = '没有更多了';
} else {
tourl = tourl + '&' + pagetype + '=' + KL_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 = KL_CallBack;
xmlhttp.open("GET", tourl, true);
xmlhttp.send(null);
} catch (e) {
document.getElementById('KL_show_loadimg').innerHTML = ' ';
document.getElementById('KL_show_tip').innerHTML = '加载出错了!';
}
}
function KL_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('KL_show_loadimg').innerHTML = '';
document.getElementById('KL_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 (KL_now_currpage == KL_page_total) {
document.getElementById('KL_show_loadimg').innerHTML = '';
document.getElementById('KL_show_tip').innerHTML = '没有更多了';
} else {
document.getElementById('KL_show_loadimg').innerHTML = '';
document.getElementById('KL_show_tip').innerHTML = '加载更多(' + (KL_now_currpage) + '/' + KL_page_total + ')';
}
}
}
}
}