MediaWiki:Gadget-notifyConversion.js

MediaWiki系统消息页面

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

  • 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
(function($, mw) {
    'use strict';

    /* 使用了 ding.js 来显示提示,位于[[MediaWiki:Gadget-ding.js]],作者为[[User:Bluedeck]] */

    // 只在浏览页面时显示
    if (mw.config.get('wgAction') !== 'view') return;

    var gadgetName = 'ext.notifyConversion';

    // 是否点过“不再提示”
    if (mw.storage.get(gadgetName) === 'hide') return;

    var ding = bldkDingExposedInterface,
        message_hans = '您现在使用的中文变体可能会影响一些词语繁简转换的效果。建议您根据您的偏好切换到下列变体之一:$1。(<a id="p4js-conversion-donotshow" class="p4js-conversion-link" href="#">不再提示</a> | <a id="p4js-conversion-showmore" class="p4js-conversion-link" target="_blank" href="/wiki/Help:字词转换的模式选择说明">了解更多</a>)',
        message_hant = '您現在使用的中文變體可能會影響一些詞語繁簡轉換的效果。建議您根據您的偏好切換到下列變體之一:$1。(<a id="p4js-conversion-donotshow" class="p4js-conversion-link" href="#">不再提示</a> | <a id="p4js-conversion-showmore" class="p4js-conversion-link" target="_blank" href="/wiki/Help:字词转换的模式选择说明">了解更多</a>)',
        variant_links = '大陆简体、香港繁體、澳門繁體、大马简体、新加坡简体、臺灣正體';

    /*
     * 注意这里如果 wgUserVariant 是 zh-hans(zh/zh-hant 同理),有多种可能:
     * (1) 登录用户在参数设定里把内容语言变种设成了 zh-hans;
     * (2) 用户自己在 URL 后面添加了 ?variant=zh-hans 或者 ?uselang=zh-hans 的参数;
     * (3) URL 是 /zh-hans/example 而不是 /wiki/example。
     * 我们这里只针对 (1) 和 (3) 的情况通知用户。
     * 对于 (2),由于目前没有发现搜索引擎这样做的现象,我们认为这样做的用户不是新手(例如在技术测试),不进行提示。
     * 所以,我们使用正则截取 URL //zh.wikipedia.org/zh-hans/ 中的 zh-hans 部分,
     * 这样做是为了最大程度地保留 URL 中原有的参数(如查看日志时或其他小工具),只替换变体部分。
     * 如果这个部分是 /w/ 的话,说明目前 URL 是 /w/index.php?title=x 的形式,也不进行提示。
     */
    var url = window.location.href,
        url_regex = /(\/\/[^/]+\/)([^/]+)(\/)/;

    if (url.indexOf('?variant=') > -1 || url.indexOf('?uselang=') > -1) return;

    var lang = url_regex.exec(url)[2];
    if (lang === 'w') return;

    function make_links() {
        return variant_links.replace('大陆简体', '<a class="p4js-conversion-link" href="' + url.replace(url_regex, '$1zh-cn$3') + '">大陆简体</a>').replace('香港繁體', '<a class="p4js-conversion-link" href="' + url.replace(url_regex, '$1zh-hk$3') + '">香港繁體</a>').replace('澳門繁體', '<a class="p4js-conversion-link" href="' + url.replace(url_regex, '$1zh-mo$3') + '">澳門繁體</a>').replace('大马简体', '<a class="p4js-conversion-link" href="' + url.replace(url_regex, '$1zh-my$3') + '">大马简体</a>').replace('新加坡简体', '<a class="p4js-conversion-link" href="' + url.replace(url_regex, '$1zh-sg$3') + '">新加坡简体</a>').replace('臺灣正體', '<a class="p4js-conversion-link" href="' + url.replace(url_regex, '$1zh-tw$3') + '">臺灣正體</a>')
    }

    // 根据简繁体显示不同提示文字
    // 横幅不消失,点击横幅内任意区域关闭
    var userlang = mw.config.get('wgUserVariant');
    if (lang === 'zh' || lang === 'zh-hans' || userlang === 'zh' || userlang === 'zh-hans') {
        ding(message_hans.replace('$1', make_links()), 'info', 'long')
    } else if (lang === 'zh-hant' || userlang === 'zh-hant') {
        ding(message_hant.replace('$1', make_links()), 'info', 'long')
    }

    // 点击“不再提示”,加上一个 Cookie
    $('#p4js-conversion-donotshow').click(function(e) {
        e.preventDefault();
        if (mw.config.get('wgUserGroups').indexOf('user') > -1) {
            // 註冊使用者直接停用小工具
            new mw.Api().saveOption('gadget-notifyConversion', '0').fail(function() {
                mw.storage.set(gadgetName, 'hide')
            })
        } else {
            mw.storage.set(gadgetName, 'hide')
        }
    });

    $('#p4js-conversion-showmore').click(function(e) {
        // 不触发上层 onclick 事件(即点击该链接不会关闭横幅)
        // 预期用户点击“了解更多”后会返回来继续切换变体
        e.stopPropagation();
    })
})(jQuery, mediaWiki);