MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

MediaWiki:Vector.js

来自MCBBS Wiki
Salt lovely留言 | 贡献2021年1月24日 (日) 09:54的版本 (左侧栏折叠)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
/* 这里的任何JavaScript将为使用Vector皮肤的用户加载 */
"use strict";
/*
搬运须知: 您必须在**显眼处**标识来源“MCBBS Wiki”与作者“Salt_lovely”, **不**接受任何形式的简称或不署名。
Notice: You have to mark origin "MCBBS Wiki" and author "Salt_lovely" in CONSPICUOS PLACE, abbreviation or omissions are NOT allowed.
许可证: CC BY-NC-SA 4.0
License: CC BY-NC-SA 4.0
*/
(function () {
    // 主过程
    function main() {
        let panel = document.getElementById('mw-panel');
        if (!panel /*|| !(panel instanceof HTMLElement)*/) {
            return;
        }
        let portals = HTMLElementFliter(Array.from(panel.getElementsByClassName('portal')));
        // let screenHeight = document.documentElement.clientHeight, panelHeight = panel.offsetHeight
        /**左侧栏是不是比屏幕高度还要高了 */
        let overHeight = document.documentElement.clientHeight < panel.offsetHeight + 36;
        /**是的话默认闭合,不是的话默认打开 */
        let defaultClass = overHeight ? 'salt-close' : 'salt-open';
        for (let portal of portals) {
            let h3 = portal.querySelector('h1,h2,h3,h4,h5,h6');
            let body = portal.querySelector('.body');
            if (!h3 || !(h3 instanceof HTMLElement)
                || !body || !(body instanceof HTMLElement))
                continue; // 没有的话就算了
            if (h3.textContent == '导航')
                continue; // 这个'导航'的h3是没不显示的
            let openHeight = body.offsetHeight; //, closeHeight = h3.offsetTop + h3.offsetHeight
            portal.style.setProperty('--salt-open-height', openHeight + 'px');
            // portal.style.setProperty('--salt-close-height', closeHeight + 'px')
            portal.classList.add(defaultClass);
            h3.addEventListener('click', () => {
                portal.toggleClass('salt-open');
                portal.toggleClass('salt-close');
            });
        }
    }
    function HTMLElementFliter(el) {
        let hel = [];
        for (let e of el)
            if (e instanceof HTMLElement)
                hel.push(e);
        return hel;
    }
    // 执行
    function exec() {
        if (!HTMLElement.prototype.toggleClass) {
            HTMLElement.prototype.toggleClass = function (classes) {
                var cls = String(classes).replace(/[\s\,\;]+/gm, ',').split(',');
                for (var c of cls) {
                    if (this.classList.contains(c)) {
                        this.classList.remove(c);
                    }
                    else {
                        this.classList.add(c);
                    }
                }
            };
        }
        if (document.readyState == 'loading') {
            document.addEventListener('DOMContentLoaded', () => { setTimeout(main, 500); });
        }
        else {
            setTimeout(main, 500);
        }
    }
    exec();
})();