「MediaWiki:Common.js」:修訂間差異
無編輯摘要 |
無編輯摘要 |
||
| 第1行: | 第1行: | ||
/* === MediaWiki Custom Language Variant Handling === */ | |||
$(function() { | $(function() { | ||
// 1. **自定義語系下拉選單 (您提供的第一段程式碼)** | |||
var variants = mw.config.get('wgContentLanguageVariants'); // 獲取可用的語言變體 | |||
// 篩選出只包含簡體和繁體的變體 | |||
var filteredVariants = []; | |||
var | 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); | |||
} | |||
(function() { | 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 ( | // 只有當目標變體與當前用戶變體不同時才導向 | ||
// | 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 = | window.location.href = currentUrl.toString(); | ||
} | } | ||
} | } | ||
// | // 3. **隱藏 MediaWiki 內建語系切換器 (如果存在)** | ||
// 這部分是為了防止兩個語系選單同時出現,造成混淆 | |||
$(document).ready(function() { | $(document).ready(function() { | ||
var variantsMenu = $('#p-variants'); // | var variantsMenu = $('#p-variants'); // MediaWiki 標準語系選單 ID | ||
if (variantsMenu.length > 0) { | if (variantsMenu.length > 0) { | ||
variantsMenu.hide(); // 直接隱藏整個內建選單 | |||
variantsMenu | |||
} | } | ||
// 如果您希望保留標題,只隱藏 li 內容,可以這樣做: | |||
// variantsMenu.find('li').hide(); | |||
}); | }); | ||
} | }); | ||
於 2025年6月24日 (二) 08:11 的修訂
/* === MediaWiki Custom Language Variant Handling === */
$(function() {
// 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() {
var variantsMenu = $('#p-variants'); // MediaWiki 標準語系選單 ID
if (variantsMenu.length > 0) {
variantsMenu.hide(); // 直接隱藏整個內建選單
}
// 如果您希望保留標題,只隱藏 li 內容,可以這樣做:
// variantsMenu.find('li').hide();
});
});