MediaWiki:Common.js

来自植物大战僵尸百科
跳到导航 跳到搜索

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

  • 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将在每次页面载入时为所有用户加载。 */

/* w:c:zh.c:MediaWiki:Gadget-site-lib.js */
window.wgUXS = function (wg, hans, hant, cn, tw, hk, sg, zh, mo, my) {
    var ret = {
        'zh': zh || hans || hant || cn || tw || hk || sg || mo || my,
        'zh-hans': hans || cn || sg || my,
        'zh-hant': hant || tw || hk || mo,
        'zh-cn': cn || hans || sg || my,
        'zh-sg': sg || hans || cn || my,
        'zh-tw': tw || hant || hk || mo,
        'zh-hk': hk || hant || mo || tw,
        'zh-mo': mo || hant || hk || tw
    }
    return ret[wg] || zh || hant || hans || tw || cn || hk || sg || mo || my; //保證每一語言有值
}

window.wgULS = function (hans, hant, cn, tw, hk, sg, zh, mo, my) {
    return wgUXS(mw.config.get('wgUserLanguage'), hans, hant, cn, tw, hk, sg, zh, mo, my);
};

window.wgUVS = function (hans, hant, cn, tw, hk, sg, zh, mo, my) {
    return wgUXS(mw.config.get('wgUserVariant'), hans, hant, cn, tw, hk, sg, zh, mo, my);
};

window.importScriptCallback = function(page, ready) {
    importScriptURICallback(mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + mw.util.wikiUrlencode(page) + '&action=raw&ctype=text/javascript', ready);
};

window.importScriptURICallback = jQuery.getScript;

//// 阻止#mw-head合併
// ↓ 來自[[dev:MediaWiki:Common-base.js]],原作者見其註釋以及歷史記錄。知識共享 署名-相同方式共享 3.0協議
// ↓ from [[dev:MediaWiki:Common-base.js]], view its comments and history for original authors. CC BY-SA 3.0
/**
 * Disable #mw-head collapsing
 * Hack from ARK
 */
/* 部分情況下導致外觀錯誤
mw.loader.using('skins.vector.legacy.js', function() {
    $.collapsibleTabs.handleResize = function () {};
});
*/

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ↑ 來自 from [[dev:MediaWiki:Common-base.js]]

//// 可合併邊欄
// ↓ 修改自[[dev:MediaWiki:Common-base.js]],原作者見其註釋以及歷史記錄。知識共享 署名-相同方式共享 3.0協議
// ↓ derived from [[dev:MediaWiki:Common-base.js]], view its comments and history for original authors. CC BY-SA 3.0
/**
 * Make sidebar sections collapsible
 */
$(function() {
    $panel = $('#mw-panel');
    $portals = $("#mw-panel .portal");
    //Note: jQuery's .css() can not handle inexistent custom property properly.
    var sidebarWidth = getComputedStyle(document.body).getPropertyValue('--body-panel-width') || '';
    sidebarWidth = sidebarWidth.endsWith('em') ? parseInt(sidebarWidth) * 16 : 250;
    var hasSidebar = $panel.width() <= sidebarWidth;
    if (hasSidebar) {
        $panel.addClass('is-sidebar');
    }
    $portals.each(function(_, el) {
        var $el = $(el);
        var $id = $el.attr("id");
        if (!$id) {
            return;
        }
        $el.addClass('portal-made-collapsible');
        if (localStorage.getItem('sidebar_c_' + $id) === "y") {
            $el.addClass('collapsed');
            if (hasSidebar) {
                $el.find('.body').slideUp('fast');
            }
        }
    });
    $(window).on('resize', function() {
        var changeSidebar = ($panel.width() <= sidebarWidth) != hasSidebar;
        hasSidebar = $panel.width() <= sidebarWidth;
        if (changeSidebar) {
            if (hasSidebar) {
                $panel.addClass('is-sidebar');
            }
            else {
                $panel.removeClass('is-sidebar');
            }
        }
        $portals.each(function(_, el) {
            var $el = $(el);
            var $id = $el.attr("id");
            if (!$id) {
                return;
            }
            if (changeSidebar) {
                if (hasSidebar) {
                    $el.removeClass('expanded');
                    if (localStorage.getItem('sidebar_c_' + $id) === "y") {
                        $el.find('.body').slideUp(0);
                    }
                }
                else {
                    if (localStorage.getItem('sidebar_c_' + $id) === "y") {
                        $el.find('.body').slideDown(0);
                    }
                }
            }
        });
    });
    $portals.on("click", "h3", function(event) {
        var $el = $(this).parent();
        var $id = $el.attr("id");
        if (!$id) {
            return;
        }
        event.stopPropagation();
        if (hasSidebar) {
            $el.toggleClass('collapsed');
            if ($el.hasClass('collapsed')) { // more consistent between class and slide status.
                localStorage.setItem('sidebar_c_' + $id, "y");
                $el.find('.body').slideUp('fast');
            }
            else {
                localStorage.setItem('sidebar_c_' + $id, "n");
                $el.find('.body').slideDown('fast');
            }
        }
        else {
            $("#mw-panel .portal").not($el).removeClass('expanded');
            $el.toggleClass('expanded');
        }
    });
});

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ↑ 修改自 derived from [[dev:MediaWiki:Common-base.js]]

/* 訊息框 */
mw.hook("wikipage.collapsibleContent").add(function () {
    document.querySelectorAll(".mbox.mw-made-collapsible>.mw-collapsible-toggle, .multi-mbox.mw-made-collapsible>.mw-collapsible-toggle").forEach(function (toggle) {
        changeTitle({ target: toggle });
        toggle.removeEventListener('click', changeTitle);
        toggle.addEventListener('click', changeTitle);
    });
    function changeTitle(e) {
        const toggle = e.target;
        toggle.title = toggle.querySelector(':scope>.mw-collapsible-text').innerHTML;
    }
});

/* 多重訊息框 */
$(function () {
    const collapsibleContentMbox = document.querySelectorAll(".multi-mbox>.mw-collapsible-content>.mbox.mw-collapsible");
    collapsibleContentMbox.forEach(makeUncollapsible);
    function makeUncollapsible(mbox) {
        const collapsibleContent = mbox.querySelectorAll(".mw-collapsible-content");
        if (mbox.classList.contains("mw-collapsed")) {
            collapsibleContent.forEach(uncollapseCollapsed);
        }
        collapsibleContent.forEach(makeCollapsibleUncollapsible);
        mbox.classList.remove("mw-collapsible", "mw-collapsed", "mw-made-collapsible");
    }
    function uncollapseCollapsed(collapsibleContent) {
        collapsibleContent.removeAttribute("style");
    }
    function makeCollapsibleUncollapsible(collapsibleContent) {
        collapsibleContent.classList.remove("mw-collapsible-content");
    }
});

//// 公告字詞轉換
// 修改自[[wikipedia:wikivoyage:zh:Special:PermanentLink/41281]],原作者見其歷史記錄
mw.hook("wikipage.content").add(function () {
    userLanguage = mw.config.values.wgUserLanguage;
    if (['zh-hant', 'zh-hk', 'zh-mo', 'zh-tw'].includes(userLanguage)) {
        localNotice = $('#localNotice');
        if (localNotice.length) {
            var api = new mw.Api();
            api.get( {
                action: 'parse',
                prop: 'text',
                page: mw.user.isAnon() ? 'MediaWiki:Anonnotice/zh-hant' : 'MediaWiki:Sitenotice/zh-hant',
                uselang: userLanguage
            } )
            .done( function ( data ) {
                if (!data.parse.error) {
                    var result = data.parse.text['*'];
                    var sitenotice = $(localNotice).children();
                    var convertedSitenotice = $(result);
                    sitenotice.html(convertedSitenotice.children('p')).attr('lang', 'zh-Hant');
                }
            } );
        }
    }
});

//// 頁腳中使用自訂的MediaWiki:Copyright
//// only using local MediaWiki:Copyright in footer
// 有內容修改自上方「公告字詞轉換」部分
mw.hook("wikipage.content").add(function () {
    userLanguage = mw.config.values.wgUserLanguage;
    if (['zh', 'zh-hans', 'zh-hant', 'zh-cn', 'zh-hk', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw', 'en'].includes(userLanguage)) {
        return;
    }
    mw.language.getFallbackLanguages().some(function (language) {
        if (['zh', 'zh-hans', 'zh-hant', 'zh-cn', 'zh-hk', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw', 'en'].includes(language)) {
            footerCopyright = document.getElementById('footer-info-copyright');
            var api = new mw.Api();
            api.get( {
                action: 'parse',
                prop: 'wikitext',
                page: language == 'zh' ? 'MediaWiki:Copyright' : 'MediaWiki:Copyright/' + language
            } )
            .done( function ( data ) {
                if (!data.parse.error) {
                    var result = data.parse.wikitext['*'];
                    footerCopyright.innerHTML = result;
                }
            } );
            return true;
        }
    });
});

/* 用於TabberEX */
// 不再使用
/* (function (window, $, mw) {
    variantDefault();
    function variantDefault() {
        var lV = document.getElementsByClassName('page__main')[0].getAttribute('lang');
        var tL = document.getElementsByClassName('tabberex');
        var gVD, gRVD;
        if (lV.indexOf('zh-Hans') !== -1) {
            gVD = 'data-hans-default';
        } else if (lV.indexOf('zh-Hant') !== -1) {
            gVD = 'data-hant-default';
        }
        if (lV === 'zh-Hans-CN') {
            gRVD = 'data-cn-default';
        }
        for (var i = 0; i < tL.length; i++) {
            if (tL[i].hasAttribute(gVD)) {
                var nVD = parseInt(tL[i].getAttribute(gVD), 10) - 1;
                tL[i].insertBefore(tL[i].childNodes[nVD], tL[i].childNodes[0]);
            }
            if (tL[i].hasAttribute(gRVD)) {
                var nRVD = parseInt(tL[i].getAttribute(gRVD), 10) - 1;
                tL[i].insertBefore(tL[i].childNodes[nRVD], tL[i].childNodes[0]);
            }
        }
    }
}(this, jQuery, mediaWiki)); */