Greasy Fork

妖火网增强插件

获得焦点时回复框自动停靠、加载更多楼层、回复任意楼层、回复后快速返回、双击定位评论区

当前为 2022-07-29 提交的版本,查看 最新版本

// ==UserScript==
// @name         妖火网增强插件
// @namespace    https://yaohuo.me/
// @version      0.38
// @description  获得焦点时回复框自动停靠、加载更多楼层、回复任意楼层、回复后快速返回、双击定位评论区
// @author       外卖不用券(id:23825)
// @match        https://*.yaohuo.me/*
// @icon         https://yaohuo.me/css/favicon.ico
// @license      MIT
// ==/UserScript==


const GadsShowProb = 500;

console.log('妖火网分享你我-YAOHUO.ME');


if (['/', '/wapindex.aspx'].includes(window.location.pathname)) {
    if (-1 === (GadsShowProb * Math.random() | 0)) {
        setTimeout(() => {
            let ins = document.getElementsByTagName('ins')[0];
            // console.log(ins.length);
            ins.style.setProperty('position', 'fixed');
            ins.style.setProperty('top', '222px');
        }, 3000);
        window.addEventListener('scroll', function() {
            let ins = document.getElementsByTagName('ins')[0];
            ins.remove();
        }, { once: true }); // 事件只触发一次
    }
}

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);
    more.appendChild(newMoreLink);
    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);
} else if ('/bbs/book_re.aspx' === window.location.pathname && !window.location.search) {
    // 回复后快速返回
    window.location.href = document.getElementsByClassName('tip')[0].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.removeChild(form.firstChild);
            }
            form.insertAdjacentHTML('afterbegin', '<b>回复' + reply + '楼</b><select name="sendmsg2"><option value="1">通知对方</option><option value="0">不予通知</option></select><span class="noreply" style="float: right">取消回复楼层</span><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 + '">');
            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 = '<span id=\"loadimg\">&nbsp;</span>';
    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 = '<span id=\"loadimg\">&nbsp;</span>';
        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("<!--listS-->");
            var et = responseText.indexOf("<!--listE-->");
            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 + ')';
                }
            }
        }
    }
}