Gadget:ReplaceUsername.js

MashKJo留言 | 贡献2020年12月19日 (六) 16:31的版本 (// Edit via Wikiplus)
(function () {
    console.log(`MediaWiki用户名替换脚本运行中
///////////////////////////////////////////////////////
// 许可证 License                                     //
// 协议:CC BY-NC-SA 4.0                              //
// 作者:Salt_lovely                                  //
// 出处:MCBBS Wiki - https://mcbbs-wiki.cn           //
// 必须保留此许可证,并以相同的许可证分发               //
// 不接受任何形式的“别名”“昵称”或其他方式尝试绕过许可证 //
// 若协议冲突或不接受以上额外条款,你可以选择不搬运     //
///////////////////////////////////////////////////////
    `)
    /**改名表 */
    let map = [
        ['Beanflame', 'beanflame'],
        ['Salt_lovely', '盐酱'],
        ['Bleake','bleake'],
    ]
    // 执行一次
    replaceUsername()
    // 窗口加载完毕后再运行一次,以防漏网之鱼
    window.addEventListener('load', replaceUsername)
    /**修改用户名显示功能 */
    function replaceUsername() {
        for (let el of getUname()) {
            for (let m of map) {
                if (el.textContent == m[0] || el.textContent == mwUsernameTurn(m[0])) {
                    el.textContent = m[1]
                    if (el.hasAttribute('title')) {
                        el.setAttribute('title', el.getAttribute('title') + ' | 原名: ' + m[0])
                    } else {
                        el.setAttribute('title', '原名: ' + m[0])
                    }
                    break
                }
            }
            el.setAttribute('renamed', '')
        }
        /**获取可能出现用户名的元素 */
        function getUname() {
            // 所有常见的用户名链接
            let a = Array.from(document.querySelectorAll('a.mw-userlink bdi:not([renamed])'))
            // 顶栏的用户名
            let topyn = document.querySelector('#pt-userpage a:not([renamed])')
            if (topyn)
                a.push(topyn)
            return a
        }
        /**MediaWiki会在一些地方用空格代替下划线 */
        function mwUsernameTurn(unRaw) {
            while (unRaw.indexOf('_') != -1)
                unRaw = unRaw.replace('_', ' ')
            return unRaw
        }
    }
})()