MCBBS Extender

MCBBS行为拓展/样式修复

目前為 2020-02-04 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         MCBBS Extender
// @namespace    https://i.zapic.cc
// @version      beta-0.0.6
// @description  MCBBS行为拓展/样式修复
// @author       Zapic
// @match        https://www.mcbbs.net/*
// @run-at       document-body
// ==/UserScript==

(function () {
    var conf = {
        //美化代码块样式
        "fixCodeBlock": true,
        //修复代码块"复制代码"换行消失的问题
        "fixCodeCopy": true,
        //修复表格排版内含有多媒体导致元素戳破表格的问题
        "fixTableLayout": true,
        //后台轮询新消息
        "QueryMessage": true,
        //后台轮询消息间隔,单位为秒
        "QueryMessageInterval": 60,
        //板块页点击"下一页"按钮是否记住当前页码
        "rememberPage": true,
        //美化右侧回到顶部按钮
        "animateGoToTopButton": true,
        //固定顶栏在顶部
        "pinnedTopBar": true,
        //顶栏弹出菜单美化&对齐
        "fixTopBarPopMenu": true,
        //主题悬浮预览
        "hoverPreviewTheme": true
    };
    var jq = jQuery;
    if (conf.fixCodeBlock) {
        jq("body").append("<style id=\"fixCodeBlock\">.hljs > ::-webkit-scrollbar {background: #00000000;height: 5px}.hljs > ::-webkit-scrollbar-thumb{background:#0000005c;border-radius: 3px;}.pl .blockcode{overflow-x:auto;padding: 10px 0 20px 10px;}.blockcode ol{overflow-x: unset;}.hljs{display:unset;}.pl .blockcode em{position: absolute;margin-top: 3px;}.pl .blockcode ol{margin: 0 0 0px -10px!important;padding: 0 0 0px 20px !important;}</style>");
    }
    if (conf.fixTableLayout) {
        jq("body").append("<style id=\"fixTableLayout\">.pl table.t_table{table-layout: fixed;}.pl table.t_table[style*=\"px\"]{table-layout: auto;}</style>");
    }
    if (conf.fixCodeCopy) {
        copycode = function (obj) {
            if (!obj)
                return false;
            var count = obj.children[0].children.length;
            var code = "";
            for (i = 0; i < count; i++) {
                code += obj.children[0].children[i].innerText + "\r\n";
            }
            setCopy(code, '代码已复制到剪贴板');
        };
    }
    if (conf.QueryMessage) {
        setInterval(function () {
            jq.get("https://www.mcbbs.net/", function (d) {
                var dom = jq(d);
                var el = dom.filter("script[src*=html5notification]");
                var ut = dom.find(".user_tools");
                var pum = dom.filter("#myprompt_menu");
                jq(".user_tools").html(ut.html());
                jq("#myprompt_menu").html(pum.html());
                jq("title").text(NOTICECURTITLE);
                if (el.length !== 0) {
                    if (!window.Html5notification) {
                        jq.get(el[0].src, function (s) {
                            eval(s);
                        });
                    }
                    var s = el.nextUntil("div").last().text();
                    eval(s);
                    noticeTitle();
                }
            });
        }, conf.QueryMessageInterval * 1000);
    }
    if (conf.rememberPage) {
        jq(document).ready(function () {
            if ($('autopbn')) {
                var npbtn = $('autopbn')
                var dc = npbtn.onclick;
                npbtn.onclick = function () {
                    var nextpageurl = this.getAttribute('rel').valueOf();
                    var curpage = parseInt(this.getAttribute('curpage').valueOf());
                    this.setAttribute('curpage', curpage + 1);
                    nextpageurl = nextpageurl.replace(/&page=\d+/, '&page=' + (curpage + 1));
                    history.replaceState(null, null, nextpageurl);
                    dc();
                };
            }
        });
    }
    if (conf.animateGoToTopButton) {
        jq("body").append("<style id=\"GoToTopButton\">#scrolltop{opacity:0;transform:scale(0.7);pointer-events:none;bottom: 270px;transform-origin: 0 50%;visibility:visible;margin-left:-5px;}</style>");
        showTopLink = function () {
            var ft = $('ft');
            if (ft) {
                var scrolltop = $('scrolltop');
                var viewPortHeight = parseInt(document.documentElement.clientHeight);
                var scrollHeight = parseInt(document.body.getBoundingClientRect().top);
                var basew = parseInt(ft.clientWidth);
                var sw = scrolltop.clientWidth;
                if (scrolltop.style.transitionDuration == "") scrolltop.style.transitionDuration = ".1s";
                if (basew < 1000) {
                    var left = parseInt(fetchOffset(ft)['left']);
                    left = left < sw ? left * 2 - sw : left;
                    scrolltop.style.left = (basew + left + 44) + 'px';
                } else {
                    scrolltop.style.left = 'auto';
                    scrolltop.style.right = 0;
                }
                if (BROWSER.ie && BROWSER.ie < 7) {
                    scrolltop.style.top = viewPortHeight - scrollHeight - 150 + 'px';
                }
                if (scrollHeight < -100) {
                    scrolltop.style.opacity = 1;
                    scrolltop.style.transform = "scale(1)";
                    scrolltop.style.pointerEvents = "unset";
                    scrolltop.style.marginLeft = "unset";
                } else {
                    scrolltop.style.opacity = "";
                    scrolltop.style.transform = "";
                    scrolltop.style.pointerEvents = "";
                    scrolltop.style.marginLeft = "";
                }
            }
        }
        showTopLink();
    }
    if (conf.pinnedTopBar) {
        jq("body").append("<style id=\"pinnedTopBar\">#toptb{position: fixed;width: 100%;z-index:790;top:0;box-shadow: #0000004f 3px 3px 5px 1px;}.mc_map_wp{padding-top: 45px;}#scbar_type_menu{top:38px!important}#user_info_menu,#myprompt_menu,#usertools_menu,#sslct_menu {position:fixed!important;top:47px!important}</style>");
    }
    if (conf.fixTopBarPopMenu) {
        jq("body").append("<style id=\"fixTopBarPopMenu\">div#user_info_menu {margin-top: 5px;}.user_info_menu_info > li {margin-top: 2px;}a.rank {padding: 2px 7px!important; border-radius: 14px;}a.rank:hover {text-decoration: none;}ul.user_info_menu_btn {padding-top: 6px;}ul.user_info_menu_btn>li>a:hover {background: #36b030;color: white;}ul.user_info_menu_btn>li>a {padding: 5px 8px;border-radius: 5px;}ul.user_info_menu_btn>li>a[onclick]:hover {background: red;}#myprompt_menu {margin-left: -10px;}#myprompt_menu,#usertools_menu,#sslct_menu { z-index:791!important;margin-top: 5px!important;border: 1px solid #d1d1d1;min-width: unset;border-radius: 5px;}#myprompt_menu>li>a, #usertools_menu>li>a {border: none; border-radius: 5px;text-align: center;padding: 3px 15px;}#myprompt_menu>li>a:hover, #usertools_menu>li>a:hover {background: #36b030;color: white;}div#sslct_menu {margin-left: 16px;padding-left: 14px;}.sslct_btn {border: none!important;width: 15px;height: 15px;padding: 2px;}.sslct_btn i {border-radius: 50%;width: 13px;height: 13px;}</style>");
    }
    if (conf.hoverPreviewTheme) {
        jq(document).ready(function () {
            jq(".sslct_btn").first().on("mouseover", function () {
                previewstyle = getcookie('extstyle');
                extstyle('./template/mcbbs/style/default');
            });
            jq(".sslct_btn").last().on("mouseover", function () {
                previewstyle = getcookie('extstyle');
                extstyle('./template/mcbbs/style/winter');
            });
            jq(".sslct_btn").last().on("click", function () {
                previewstyle = './template/mcbbs/style/winter'
            });
            jq(".sslct_btn").first().on("click", function () {
                previewstyle = './template/mcbbs/style/default'
            });
            jq(".sslct_btn").on("mouseout", function () {
                extstyle(previewstyle);
            });
        });
    }
})();