Greasy Fork is available in English.

hjj工具

去刷屏,楼层无图,工具栏,屏蔽字

// ==UserScript==
// @name         hjj工具
// @namespace    http://tampermonkey.net/
// @version      0.8.2
// @description  去刷屏,楼层无图,工具栏,屏蔽字
// @author       miaomiao
// @match        *://bbs.jjwxc.net/board.php?board=*&type=*&page=*
// @match        *://bbs.jjwxc.net/showmsg.php?board=*&boardpagemsg=*&id=*
// @match        *://bbs.jjwxc.net/board.php?board=*&page=*
// @match        *://bbs.jjwxc.net/showmsg.php?board=*&id=*
// @grant        GM_getResourceText
// @grant        GM_addStyle
// ==/UserScript==

(function() {
    function __main__() {
        //提交css
        GM_addStyle("#toolbar{opacity:0.6;z-index:999999;position:fixed;top:20px;left:80%;border:1px solid #a38a54;width:180px;background-color:#eddec2;border-radius:3px;}#keywordList{opacity:0.6;z-index:999999;position:fixed;top:300px;left:80%;border:1px solid #a38a54;width:180px;background-color:#eddec2;border-radius:3px;}.clickable a{cursor:pointer;}")


        //检查是否在版区页面
        let isBoard = location.href.indexOf("board.php") >= 0;
        Toolbar.init(isBoard);
        Keyword.init();

        if (isBoard) {
            Keyword.shieldBoardKeyword()
        } else {
            Spam.init();
            Picture.init();
            Quotereply.init();

            let mainElements = $("[id=topic]");
            window.topicWidth = mainElements.width();
            let keywords = localStorage["keywords"];
            mainElements.each(function(index) {
                let element = $(this);
                Spam.stopSpam(index, element);
                Picture.hidePictures(index, element);
                if (keywords != undefined && keywords.length != 0) {
                    Keyword.shieldKeyword(index, element, keywords);
                }
            });

            let floor = localStorage["jumpFloor"]
            if (floor != undefined) {
                Toolbar.scrollToFloor(floor);
                localStorage.removeItem("jumpFloor");
            }
        }
    }

    var Spam = {
        init() {
            Spam.eventRegister();
        },
        stopSpam(index, element) {
            let height = element.height();
            let lineHeight = parseInt(element.css("line-height"));
            let picHeight = Spam.calPicHeight(element);
            let rowsCount = (height - picHeight) / lineHeight;
            let maxRowsCount = localStorage["spamLine"] == undefined ? 40 : parseInt(localStorage["spamLine"]);
            let flag = rowsCount > maxRowsCount ? true : false;
            if (flag) {
                var rowNum = 0;
                var picHtml = "";
                element.find("img").each(function() {
                    picHtml += $(this).prop("outerHTML");
                });
                var allText = element.text().split("\n");
                var shownText = "";
                var hidenText = "";
                $.each(allText, function(index, value) {
                    let partTextWidth = Spam.getTextWidth(value);
                    // console.log(partTextWidth);
                    let rowNumInOnePart = 0;

                    if (partTextWidth > topicWidth) {
                        rowNumInOnePart += partTextWidth / topicWidth + 1;
                    } else {
                        rowNumInOnePart = 1;
                    }

                    if (rowNum + rowNumInOnePart > maxRowsCount) {
                        rowNum += rowNumInOnePart;
                        return true;
                    }
                    rowNum += rowNumInOnePart;
                });
                let elementText = element[0].innerHTML;
                element.html("");
                element.append("<p>本楼共" + parseInt(rowsCount) + "行</p><a href='javascript:;' class='shownText' data-index='" + index + "' textHidden='true'>点击显示全部</a> <span class='hideText' data-index='" + index + "' style='display:none'><br>" + elementText + "<a href='javascript:;' class='hideTextHref' data-index='" + index + "'>隐藏</a></span>" + picHtml);
            }
        },
        calPicHeight(element) {
            let height = 0;
            element.find("img").each(function() {
                height += $(this).height();
            });
            return height;
        },
        getTextWidth(str) {
            let width = $('body').append($('<span stlye="display:none;" id="textWidth"/>')).find('#textWidth').html(str).width();
            $('#textWidth').remove();
            return width;
        },
        eventRegister() {
            $(document).on("click", ".shownText", function(event) {
                console.log(event)
                let index = $(event.target).attr('data-index');
                let flag = $(event.target).attr('textHidden');
                if (flag == 'true') {
                    $(".shownText[data-index=" + index + "]").text("隐藏");
                    $(".hideText[data-index=" + index + "]").show();
                    $(event.target).attr('textHidden', "false")
                } else {
                    $(".shownText[data-index=" + index + "]").text("点击显示全部");
                    $(".hideText[data-index=" + index + "]").hide();
                    $(event.target).attr('textHidden', "true")
                }
            });

            $(document).on("click", ".hideTextHref", function(event) {
                let index = $(event.target).attr('data-index');
                $(".shownText[data-index=" + index + "]").text("点击显示全部");
                $(".hideText[data-index=" + index + "]").hide();
            });
        },
    }

    var Picture = {
        init() {
            Picture.eventRegister();
        },
        eventRegister() {
            $(document).on("click", ".hidePic", function(event) {
                const node = $(event.target)
                let flag = node.attr('picHidden');
                let index = node.attr('data-index');
                if (flag == "true") {
                    $(".hidePic[data-index=" + index + "]").text("隐藏此楼图片");
                    node.parent().parent().find("img").show()
                    $(event.target).attr('picHidden', "false")
                } else {
                    $(".hidePic[data-index=" + index + "]").text("显示此楼图片");
                    node.parent().parent().find("img").hide()
                    $(event.target).attr('picHidden', "true")
                }
            });
        },
        hidePictures(index, element) {
            let hideHtml = "<p><a href='javascript:;' class='hidePic' data-index='" + index + "' picHidden='true'>显示此楼图片</a></p>";
            let picHtml = "";
            let picNode = element.find("img");
            if (picNode.length !== 0) {
                element.html(hideHtml + element.html());
                picNode = element.find("img").hide();
            }
        }
    }

    var Toolbar = {
        isBoard: 0,
        init(isBoard) {
            Toolbar.showToolBar();
            Toolbar.eventRegister();
            $("#spamLineInput").attr("placeholder", `刷屏行数设置,当前${localStorage["spamLine"] == undefined ? 40 : localStorage["spamLine"]}`);

            if (isBoard) {
                Toolbar.isBoard = 1;
                $(".showmsg").hide();
            }
        },
        getPage() {
            const totalPage = parseInt($("#pager_top").text().replace(/共(\d*)页.*/, "$1"));
            const pageIndex = location.href.indexOf("page=");
            if (pageIndex < 0) {
                return [-1, -1, totalPage];
            }
            const page = parseInt(location.href.substring(pageIndex + 5));
            return [pageIndex, page, totalPage]
        },
        showToolBar() {
            $("body").append(`<div id='toolbar' class="clickable" style="display:flex;flex-direction:column ">
                            <div style="margin:2px auto">
                                <a id="top" style="margin:auto">回到顶部</a>
                            </div>
                            <div style="margin:2px auto" class="showmsg">
                                 <a id="showAllImg" ImgHidden='true'>显示全部图片</a>
                            </div>
                            <div style="margin:2px auto">
                                <a id="prePage" style="margin:auto">上一页</a>
                                <a id="nextPage" style="margin:auto">下一页</a>
                             </div>
                            <div style="margin:2px auto" class="showmsg">
                                <input id="floorJumpInput" style="font-size:15px;width:120px;height:20px" placeholder="楼层转跳" onkeypress="if(event.keyCode==13) {$("#floorJumpBtn").click();return false;}">
                                <a id="floorJumpBtn" >确定</a>
                            </div>
                            <div style="margin:2px auto">
                                 <input id="pageJumpInput" style="font-size:15px;width:120px;height:20px" placeholder="页码转跳">
                                 <a id="pageJumpBtn" >确定</a>
                            </div>
                            <div style="margin:2px auto" class="showmsg">
                                <input id="spamLineInput" style="font-size:10px;width:120px;height:20px" placeholder="刷屏行数设置">
                                <a id="spamLineBtn" >确定</a>
                           </div>
                            <div style="margin:2px auto">
                                 <input id="keywordInput" style="font-size:15px;width:120px;height:20px" placeholder="屏蔽字添加">
                                 <a id="keywordBtn">确定</a>                        
                            </div>
                            <div style="margin:2px auto">
                                <a id="keywordListBtn">打开屏蔽字列表</a>
                            </div>
                        </div>`);

            $("body").append(`<div style="display:none">
                                <div id="keywordList" class="clickable" style="display:flex;flex-direction:column">
                                </div>
                            </div>`)
        },
        scrollToFloor(floor) {
            let node = $(".authorname").toArray().filter(e => $(e).find("font")[0].innerHTML.indexOf(floor) >= 0);
            $('html, body').animate({ scrollTop: $(node).parent().prev().prev().offset().top }, 1000);
        },
        eventRegister() {
            $(document).on("click", "#top", function() {
                $('html, body').animate({ scrollTop: 0 }, 1000);
            })

            $(document).on("click", "#prePage", function() {
                let [pageIndex, page, totalPage] = Toolbar.getPage();
                if (pageIndex == -1 || page == 0) {
                    alert("当前为第一页");
                    return;
                }
                location.href = location.href.substring(0, pageIndex + 5) + (page - 1);

            })

            $(document).on("click", "#nextPage", function() {
                let [pageIndex, page, totalPage] = Toolbar.getPage();
                if (page + 1 == totalPage) {
                    alert("已是最后一页");
                    return;
                }
                if (pageIndex == -1) {
                    location.href = location.href + "&page=1";
                } else {
                    location.href = location.href.substring(0, pageIndex + 5) + (page + 1);
                }
            })

            $(document).on("click", "#showAllImg", function() {
                if ($("#showAllImg").attr("ImgHidden") == "true") {
                    $("img").show();
                    $("#showAllImg").html("隐藏全部图片")
                    $("#showAllImg").attr("ImgHidden", "false")
                    $(".hidePic").text("隐藏此楼图片")
                    $(".hidePic").attr("picHidden", "false")
                } else {
                    $("img").hide();
                    $("#showAllImg").html("显示全部图片")
                    $(".hidePic").text("显示此楼图片")
                    $(".hidePic").attr("picHidden", "true")
                    $("#showAllImg").attr("ImgHidden", "true")
                }
            });

            $(document).on("click", "#floorJumpBtn", function() {
                const pagesize = 300;
                let [pageIndex, page, totalPage] = Toolbar.getPage();
                let floor = $("#floorJumpInput").val();
                if (floor == "" || isNaN(floor)) {
                    alert("输入不合法");
                    return;
                }
                let jumpPage = floor % pagesize == 0 ? floor / pagesize : parseInt(floor / pagesize) + 1;
                if (jumpPage == page + 1) {
                    Toolbar.scrollToFloor(floor)
                    return;
                }
                localStorage["jumpFloor"] = floor;
                if (pageIndex == -1) {
                    location.href = `${location.href}&page=${jumpPage-1}`;
                } else {
                    location.href = location.href.substring(0, pageIndex + 5) + `${jumpPage - 1}`;
                }
            })

            $(document).on("click", "#pageJumpBtn", function() {
                let [pageIndex, page, totalPage] = Toolbar.getPage();
                let jumpPage = $("#pageJumpInput").val();
                if (jumpPage == "" || isNaN(jumpPage)) {
                    alert("输入不合法");
                    return;
                }
                if (jumpPage > totalPage) {
                    alert(`共${totalPage}页,请输入正确页码`);
                    return;
                }
                if (pageIndex == -1) {
                    location.href = `${location.href}&page=${jumpPage-1+Toolbar.isBoard}`;
                } else {
                    location.href = location.href.substring(0, pageIndex + 5) + (jumpPage - 1 + Toolbar.isBoard);
                }
            })

            $(document).on("click", "#spamLineBtn", function() {
                let spamLine = $("#spamLineInput").val();
                if (spamLine == "" || isNaN(spamLine)) {
                    alert("输入不合法");
                    return;
                }
                localStorage["spamLine"] = spamLine;
                location.reload();
            })

            $(document).on("click", "#keywordBtn", function() {
                let keyword = $("#keywordInput").val();
                if (keyword == "") {
                    alert("请输入屏蔽词");
                    return;
                }
                Keyword.addKeyword(keyword);
            })

            $(document).on("keypress", "#pageJumpInput", function(event) {
                if (event.keyCode == 13) {
                    $("#pageJumpBtn").click();
                }
            })

            $(document).on("keypress", "#floorJumpInput", function(event) {
                if (event.keyCode == 13) {
                    $("#floorJumpBtn").click();
                }
            })

            $(document).on("keypress", "#spamLineInput", function(event) {
                if (event.keyCode == 13) {
                    $("#spamLineBtn").click();
                }
            })

            $(document).on("keypress", "#keywordInput", function(event) {
                if (event.keyCode == 13) {
                    $("#keywordBtn").click();
                }
            })

            $(document).on("click", "#keywordListBtn", function(event) {
                if ($("#keywordList").parent().is(":hidden")) {
                    $("#keywordList").parent().show();
                    $("#keywordListBtn").html("关闭屏蔽字列表")
                } else {
                    $("#keywordList").parent().hide();
                    $("#keywordListBtn").html("打开屏蔽字列表")
                }
            })
        }
    }

    var Keyword = {
        init() {
            Keyword.eventRegister();
            Keyword.showKeywordList();
        },
        shieldKeyword(index, element, keywords) {
            let text = element.text();
            for (var keyword of keywords.split(" ")) {
                if (keyword.trim().length != 0 && text.indexOf(keyword) >= 0) {
                    element.text("已屏蔽");
                    break;
                }
            }
        },
        shieldBoardKeyword() {
            let msglist = $("#msglist").children().children().toArray();
            let keywords = localStorage["keywords"] || "";
            if (keywords.length == 0) {
                return;
            }
            for (let msg of msglist) {
                let titleNode = $(msg).find("td")[2];
                let title = titleNode.innerHTML;
                for (let keyword of keywords.split(" ")) {
                    if (keyword.trim().length != 0 && title.indexOf(keyword) >= 0) {
                        $(msg).remove()
                        break;
                    }
                }
            }
        },
        addKeyword(keyword) {
            let storageKeyword = localStorage["keywords"] || "";
            localStorage["keywords"] = storageKeyword + keyword + " ";
            alert("添加成功");
            location.reload();
            return;
        },
        showKeywordList() {
            let keywords = (localStorage["keywords"] || "").trim();
            if (keywords.length == 0) {
                $("#keywordList").html(`<div style="margin:2px auto">无屏蔽关键字</div>`)
                return;
            }

            let html = keywords.split(" ").map(keyword => {
                return `<div style="margin:2px auto">
                        <label>${keyword.trim()}</label>
                        <a class="deleteKeyword">删除</a>       
                        </div>`
            }).join(" ");
            $("#keywordList").html(html);
            return;
        },
        eventRegister() {
            $(document).on("click", ".deleteKeyword", function() {
                let keyword = $(this).prev().html();
                var re = new RegExp(`(.*)(${keyword}\\s)(.*)`)
                localStorage["keywords"] = localStorage["keywords"].replace(re, "$1$3");
                $(this).parent().remove();
                location.reload();
            })
        }
    }

    var Quotereply = {
        init() {
            Quotereply.hideButton();
        },
        hideButton() {
            $("a[class^='quotereply']").hide();
        }
    }

    __main__();
})();