Greasy Fork

妖火网增强插件

获得焦点时回复框自动停靠、加载更多楼层、回复任意楼层、回复后快速返回

当前为 2022-05-14 提交的版本,查看 最新版本

// ==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
// ==/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', '<b>回复' + reply + '楼</b><select name="sendmsg2"><option value="1">通知对方</option><option value="0">不予通知</option></select><br>');
            if (form.lastChild.tagName === 'INPUT') {
                form.removeChild(form.lastChild);
                form.removeChild(form.lastChild);
            }
            form.insertAdjacentHTML('beforeend', '<input type="hidden" name="reply" value="' + reply + '">');
            form.insertAdjacentHTML('beforeend', '<input type="hidden" name="touserid" value="' + touserid + '">');
        }
    }
}

// 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 = '<span id=\"loadimg\">&nbsp;</span>';
    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 = '<span id=\"loadimg\">&nbsp;</span>';
        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("<!--listS-->");
            var et = responseText.indexOf("<!--listE-->");
            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 + ')';
                }
            }
        }
    }
}