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

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

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

MCBBS Wiki GitHub群组已上线!

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

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

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

MediaWiki:Common.js:修订间差异

来自MCBBS Wiki
跳到导航 跳到搜索
(使用 Typescript 重写 common.js,NationalDay(重要日期)功能拆分到其他页面,仓库地址:https://github.com/mcbbs-wiki/Wiki-Common-JS)
(添加幻灯片小部件)
第3行: 第3行:
'使用typescript编译而成,因此代码看起来可能怪怪的';
'使用typescript编译而成,因此代码看起来可能怪怪的';
'仓库地址:https://github.com/mcbbs-wiki/Wiki-Common-JS';
'仓库地址:https://github.com/mcbbs-wiki/Wiki-Common-JS';
(0, eval)('var commonJSLoad=true;');
(function () {
(function () {
var _a;
var _a;
第34行: 第35行:
// 加载特殊日期脚本
// 加载特殊日期脚本
'https://mcbbs-wiki.cn/index.php?title=MediaWiki:NationalDays.js&action=raw&ctype=text/javascript',
'https://mcbbs-wiki.cn/index.php?title=MediaWiki:NationalDays.js&action=raw&ctype=text/javascript',
// 加载幻灯片播放脚本
'https://mcbbs-wiki.cn/index.php?title=MediaWiki:SaltAlbum.js&action=raw&ctype=text/javascript',
];
];
/**主要过程运行完毕后添加到页面上的脚本 */
/**主要过程运行完毕后添加到页面上的脚本 */

2021年6月9日 (三) 00:36的版本

"use strict";
'这里的任何JavaScript将为所有用户在每次页面载入时加载';
'使用typescript编译而成,因此代码看起来可能怪怪的';
'仓库地址:https://github.com/mcbbs-wiki/Wiki-Common-JS';
(0, eval)('var commonJSLoad=true;');
(function () {
    var _a;
    var prefix = '[MCBBSWiki]';
    /**页面数据接口 */
    var mwConfigValue = window.mw.config.values;
    /**用户对页面的操作 */
    var action = mwConfigValue.wgAction;
    /**页面名 */
    var pageName = mwConfigValue.wgPageName;
    /**页面内部ID */
    var pageID = mwConfigValue.wgArticleId;
    /**页面名字空间的数字ID */
    var nameSpace = mwConfigValue.wgNamespaceNumber;
    /**是不是主页 */
    var isMainPage = (_a = mwConfigValue.wgIsMainPage) !== null && _a !== void 0 ? _a : false;
    /**用户名, 最好使用typeof来判断 */
    var userName = mwConfigValue.wgUserName;
    /**打印到控制台 */
    var log = function () {
        var a = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            a[_i] = arguments[_i];
        }
        console.log.apply(console, a);
    };
    /**添加脚本到页面上 */
    var addMyScript = [
        // 加载修改用户名显示的脚本,现在不用新建账号就能改名了(其实并没有改名,只是改了显示)
        'https://mcbbs-wiki.cn/index.php?title=MediaWiki:ReplaceUsername.js&action=raw&ctype=text/javascript',
        // 加载特殊日期脚本
        'https://mcbbs-wiki.cn/index.php?title=MediaWiki:NationalDays.js&action=raw&ctype=text/javascript',
        // 加载幻灯片播放脚本
        'https://mcbbs-wiki.cn/index.php?title=MediaWiki:SaltAlbum.js&action=raw&ctype=text/javascript',
    ];
    /**主要过程运行完毕后添加到页面上的脚本 */
    var addMyScriptLater = [];
    /**添加CSS到页面上 */
    var addMyCSS = [];
    // --------------------------------
    // ------------ 分割线 ------------
    // --------------------------------
    // 主过程
    function main() {
        // 添加脚本和样式表
        addCustomCSSes();
        addCustomScripts();
        // 百度推送
        if (action === 'view')
            // 只推送查看界面,不然百度到的总是杂着源代码、历史记录界面
            baiduPush();
        // 登录方能访问的名字空间
        loginForViewNameSpace([3100]);
        // 水印设置
        if (nameSpace === 3100)
            waterMark('页面废存');
    }
    /**百度推送 */
    function baiduPush() {
        var bp = document.createElement('script');
        var src = window.location.protocol.indexOf('https') !== -1
            ? 'https://zz.bdstatic.com/linksubmit/push.js'
            : 'http://push.zhanzhang.baidu.com/push.js';
        bp.src = src;
        bp.setAttribute('async', ''); // 最好异步加载
        document.body.appendChild(bp);
    }
    /**登录方能观看
     * @param nameSpaceID 数字数组,需要登录方可访问的名字空间ID
     */
    function loginForViewNameSpace(nameSpaceID) {
        if (!userName) {
            if (nameSpaceID.indexOf(nameSpace) !== -1) {
                // document.getElementById('bodyContent')
                window.location.replace('https://mcbbs-wiki.cn/wiki/特殊:用户登录');
            }
        }
        else {
            document.body.classList.add('mcbbswiki-user-online');
        }
    }
    /**
     * 添加水印到页面上
     * @param str 显示的字符
     */
    function waterMark(str, p) {
        var _a, _b, _c, _d;
        var picW = (_a = p === null || p === void 0 ? void 0 : p.width) !== null && _a !== void 0 ? _a : 480, picH = (_b = p === null || p === void 0 ? void 0 : p.height) !== null && _b !== void 0 ? _b : 320, fsize = (_c = p === null || p === void 0 ? void 0 : p.fsize) !== null && _c !== void 0 ? _c : 40, fbold = (_d = p === null || p === void 0 ? void 0 : p.bold) !== null && _d !== void 0 ? _d : true;
        // 用CSS控制
        addCSS("\n/**/\n#watermark {\n    position: fixed;\n    top: -21vw;\n    left: -21vh;\n    width: calc(100vw + 42vh);\n    height: calc(100vh + 42vw);\n    opacity: .25;\n    transform-origin: 50% 50%;\n    transform: rotate(-45deg);\n    pointer-events: none;\n    z-index: 999;\n}\n#watermark .watermark{\n    position: absolute;\n    top: 0; bottom: 0; left: 0; right: 0;\n    background-image: url(\"" + textToImg(str) + "\");\n}\n#watermark .watermark:first-child {\n    top: -" + picH / 2 + "px;\n    left: -" + picW / 2 + "px;\n}\n", 0);
        var container = document.createElement('div'), m1 = document.createElement('div'), m2 = document.createElement('div');
        container.id = 'watermark';
        m1.className = 'watermark';
        m2.className = 'watermark';
        container.appendChild(m1);
        container.appendChild(m2);
        document.body.appendChild(container);
        /**
         * 生成水印图片
         * @param str 输入的文字
         * @returns 字符串,图片的BASE64格式
         */
        function textToImg(str) {
            // 构造一个绘图区域
            var canvas = document.createElement('canvas');
            canvas.width = picW;
            canvas.height = picH;
            document.body.appendChild(canvas);
            // 绘图
            var context = canvas.getContext('2d');
            context.fillStyle = '#fff0';
            context.fillRect(0, 0, picW, picH);
            context.fillStyle = '#999';
            context.font = (fbold ? 'bold ' : '') + fsize + 'px sans-serif';
            context.textAlign = 'center';
            context.textBaseline = 'middle';
            context.fillText(str, picW / 2, picH / 2);
            // 获取图片
            var res = canvas.toDataURL('image/png');
            // 清除绘图区域
            document.body.removeChild(canvas);
            // 返回图片
            return res;
        }
    }
    // --------------------------------
    // ------------ 分割线 ------------
    // --------------------------------
    /**
     * assert: 断言
     * @param condition 为假时报错
     * @param msg 报错语句,默认为“发生错误”
     * */
    function assert(condition, msg) {
        if (!condition)
            throw new Error(prefix + ': ' + (msg !== null && msg !== void 0 ? msg : '发生错误'));
    }
    /**自动添加自定义脚本 */
    function addCustomScripts() {
        for (var _i = 0, addMyScript_1 = addMyScript; _i < addMyScript_1.length; _i++) {
            var s = addMyScript_1[_i];
            addJS(s, 1);
        }
        var fn = function () {
            for (var _i = 0, addMyScriptLater_1 = addMyScriptLater; _i < addMyScriptLater_1.length; _i++) {
                var s = addMyScriptLater_1[_i];
                addJS(s, 1);
            }
        };
        document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', fn) : fn();
    }
    /**自动添加自定义CSS */
    function addCustomCSSes() {
        for (var _i = 0, addMyCSS_1 = addMyCSS; _i < addMyCSS_1.length; _i++) {
            var s = addMyCSS_1[_i];
            addCSS(s, 1);
        }
    }
    function addCSS(str, type) {
        if (type === 0) {
            var sty = document.createElement('style');
            sty.textContent = str;
            document.head.appendChild(sty);
        }
        else {
            var link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = str;
            document.head.appendChild(link);
        }
    }
    function addJS(str, type) {
        var sc = document.createElement('script');
        if (type === 0) {
            sc.textContent = str;
        }
        else {
            sc.src = str;
        }
        document.body.appendChild(sc);
    }
    // 执行主要代码
    log(prefix + 'CommonJS加载中');
    // 开始计时
    console.time(prefix + 'CommonJS加载完毕');
    main();
    // 计时完毕
    console.timeEnd(prefix + 'CommonJS加载完毕');
})();