Greasy Fork

来自缓存

Greasy Fork is available in English.

hjj工具

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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__();
})();