MediaWiki:Common.js

出自Quickpedia wiki
於 2025年6月24日 (二) 08:20 由 Msnhinet8(留言 | 貢獻) 所做的修訂

注意:在您發布之後,您可能需要清除瀏覽器快取才能看到變更。

  • Firefox或Safari:按住Shift時點擊重新整理,或按Ctrl-F5或Ctrl-R(Mac則為⌘-R)
  • Google Chrome:按Ctrl-Shift-R(Mac則為⌘-Shift-R)
  • Internet Explorer或Edge:按住Ctrl時點擊重新整理,或按Ctrl-F5
  • Opera:按Ctrl-F5。
/* === MediaWiki Custom Language Variant Handling === */

$(function() {
    // 在這裡加入 console.log,方便除錯
    console.log("wgContentLanguageVariants:", mw.config.get('wgContentLanguageVariants'));
    console.log("wgUserVariant:", mw.config.get('wgUserVariant'));

    // 1. **自定義語系下拉選單**
    var variants = mw.config.get('wgContentLanguageVariants'); // 獲取可用的語言變體

    // 篩選出只包含簡體和繁體的變體
    var filteredVariants = [];
    if (variants) {
        for (var i = 0; i < variants.length; i++) {
            var variantCode = variants[i];
            if (variantCode === 'zh-tw' || variantCode === 'zh-hant' ||
                variantCode === 'zh-cn' || variantCode === 'zh-hans') {
                filteredVariants.push(variantCode);
            }
        }
    }

    // 如果篩選後有至少兩種語系變體,才建立下拉選單
    if (filteredVariants.length > 1) {
        var currentVariant = mw.config.get('wgUserVariant');
        var languageDropdown = $('<div id="zh-variant-dropdown" class="portal"></div>'); // 增加portal class 讓外觀更像側邊欄組件
        languageDropdown.append('<h3>中文</h3>'); // 增加標題
        var variantSelect = $('<select id="zh-variant-select"></select>');

        for (var i = 0; i < filteredVariants.length; i++) {
            var variantCode = filteredVariants[i];
            var variantName = '';

            switch (variantCode) {
                case 'zh-tw':
                case 'zh-hant':
                    variantName = '繁體中文';
                    break;
                case 'zh-cn':
                case 'zh-hans':
                    variantName = '簡體中文';
                    break;
                default:
                    // 這裡應該不會執行到,因為上面已經過濾了
                    variantName = variantCode;
            }

            var option = $('<option>').val(variantCode).text(variantName);
            if (variantCode === currentVariant) {
                option.prop('selected', true);
            }
            variantSelect.append(option);
        }

        variantSelect.on('change', function() {
            var selectedVariant = $(this).val();
            var currentUrl = new URL(window.location.href);
            // 設置 URL 參數 'variant'
            currentUrl.searchParams.set('variant', selectedVariant);
            // 如果頁面當前有 /簡體 或 /繁體 這種路徑,需要移除它們,因為我們現在用 ?variant=
            var pathParts = currentUrl.pathname.split('/');
            var lastPart = pathParts[pathParts.length - 1];
            if (lastPart === '簡體' || lastPart === '繁體') {
                pathParts.pop(); // 移除最後一個部分
                currentUrl.pathname = pathParts.join('/');
            }
            window.location.href = currentUrl.toString();
        });

        // 將下拉選單添加到側邊欄頂部 (通常是 #mw-panel 或 #p-navigation)
        // 選擇 #mw-panel 是為了讓它在整個側邊欄的頂部
        $('#mw-panel').prepend(languageDropdown.append(variantSelect));
        // 如果您的維基百科使用的是不同的側邊欄 ID,請調整這裡
        // 例如:$('#p-navigation').prepend(languageDropdown.append(variantSelect));
    }

    // 2. **自動語系導向邏輯 (基於瀏覽器語系,並使用 ?variant= 參數)**
    // 只有當頁面URL中沒有 `?variant=` 參數時才自動導向
    var currentUrl = new URL(window.location.href);
    if (!currentUrl.searchParams.has('variant')) {
        var browserLang = (navigator.language || navigator.userLanguage).toLowerCase();
        var simplifiedCodes = ['zh-cn', 'zh-sg', 'zh-hans'];
        var traditionalCodes = ['zh-tw', 'zh-hk', 'zh-mo', 'zh-hant'];

        var targetVariant = '';
        if (simplifiedCodes.includes(browserLang)) {
            targetVariant = 'zh-hans'; // 導向簡體變體
        } else if (traditionalCodes.includes(browserLang)) {
            targetVariant = 'zh-hant'; // 導向繁體變體
        } else {
            // 如果瀏覽器語系既不是簡體也不是繁體中文,預設導向繁體
            targetVariant = 'zh-hant';
        }

        // 只有當目標變體與當前用戶變體不同時才導向
        if (targetVariant && mw.config.get('wgUserVariant') !== targetVariant) {
            currentUrl.searchParams.set('variant', targetVariant);
            // 同樣,如果頁面當前有 /簡體 或 /繁體 這種路徑,需要移除它們
            var pathParts = currentUrl.pathname.split('/');
            var lastPart = pathParts[pathParts.length - 1];
            if (lastPart === '簡體' || lastPart === '繁體') {
                pathParts.pop();
                currentUrl.pathname = pathParts.join('/');
            }
            window.location.href = currentUrl.toString();
        }
    }

    // 3. **隱藏 MediaWiki 內建語系切換器 (如果存在)**
    // 這部分是為了防止兩個語系選單同時出現,造成混淆
    $(document).ready(function() { // 這個 ready 函數其實可以省略,因為外層已經是 $(function(){})
        var variantsMenu = $('#p-variants'); // MediaWiki 標準語系選單 ID
        if (variantsMenu.length > 0) {
            variantsMenu.hide(); // 直接隱藏整個內建選單
        }
    });

}); // 此處為最外層 $(function() { ... }); 的結束