注意:在您儲存之後您必須清除瀏覽器快取才可看到最新的變動。
?_=1
來訪問最新頁面。
/* -------- 版本:0.2.1 -------- 用於維護[ACGN作品中出場的鐵路車站列表]頁面。 啟用本工具後在頁面主標題末尾添加入口按鈕。 在頁面和控制檯輸出結果。 -------- wiki鏈接檢查:✔ 已支持。 日文名稱檢查:✔ 已支持。 假名檢查:✔ 已支持。但無法保證準確適應所有車站。 羅馬字檢查:✔ 已支持。但無法保證準確適應所有車站。注音的變種很多。 中文名檢查:✔ 已支持。 顯示名稱的wiki版本:✔ 已支持。 -------- 車站所在地提示:✔ 已支持。 車站所屬公司提示:✔ 已支持。 車站所屬線路提示:✗ 可能會實現的功能。 */ $(function () { pathName = window.location.pathname; while(true){ matcher = pathName.match(/(%[0-9A-Fa-f]{2})+/); if (matcher === null){ break; } matchedContent = matcher[0]; iterator = matchedContent.matchAll(/[0-9a-fA-F]{2}/g); buffer = new Array(); while(true){ next = iterator.next(); if(next.done){ break; } tValue = next.value[0]; nValue = 0; hValue = tValue.charCodeAt(0) lValue = tValue.charCodeAt(1) if(hValue < 58){ nValue += hValue - 48; } else if(hValue < 71){ nValue += hValue - 55; } else if(hValue < 103){ nValue += hValue - 87; } nValue = nValue * 16; if(lValue < 58){ nValue += lValue - 48; } else if(lValue < 71){ nValue += lValue - 55; } else if(lValue < 103){ nValue += lValue - 87; } buffer[buffer.length] = nValue; } newText = new TextDecoder().decode(new Uint8Array(buffer)); pathName = pathName.replaceAll(matchedContent, newText); } switch (pathName) { // 此處添加希望測試的頁面路徑: case "/ACGN作品中出場的鐵路車站列表": case "/Template:鐵路車站名": break; default: // 不操作未指定的頁面。 return; } headingClassName = (mw.config.get("skin") == 'moeskin') ? '.first-heading' : (mw.config.get("skin") == 'vector') ? '.firstHeading' : ''; var button = $('<span/>', { id: 'test_page_acgn_railway_station', text: '[檢測本頁]', css: { 'font-size': '14px', 'color': '#0645AD' } }).appendTo(headingClassName).on('click', function () { if ($('body.page_station_in_testing').length !== 0) { return; } $(document.body).addClass('page_station_in_testing'); $(".railway_station_name").each(function () { if ($('[href]', this).length === 0) { return; } let id = ($(this)).attr('id'); let pageUrl = ($('[href]', this).attr("href")); // 獲取wiki原始頁面鏈接。 let apiUrl = pageUrl.substring(0, pageUrl.indexOf(".")) + ".wikipedia.org/w/api.php?action=parse&page=" + pageUrl.substring(pageUrl.lastIndexOf("/") + 1, pageUrl.length) + "&format=json"; // 轉換得到wiki api parse請求鏈接。 let isJpStation = ($(this).children('span').filter(function (index) { return ($(this).attr("lang")) == "ja"; }).length !== 0); $.ajax({ type: "GET", dataType: "jsonp", url: apiUrl, success: function (data) { // 成功連接維基。 if (data.error !== undefined) { console.log("頁面[ " + pageUrl + " ]不存在。"); return; } var hiddenItem = $('<div/>', { id: 'hiddenItem_' + id, text: "", css: { display: "none" } }).appendTo('.firstHeading'); $('#hiddenItem_' + id).html(data.parse.text['*'].replaceAll(/<img> [\s\S\n]*?<\/img>/g, '').replaceAll(/<img [\s\S\n]*?\/>/g, '')); $('#' + id).children('a').text('✔'); $('#' + id).children('a').css('background-color', '#7FFFD4'); if (isJpStation) { // 根據wiki內容獲取車站站名、假名、羅馬字。選用首個表格中的數據。 let table_1 = $("[class='infobox bordered']", $('#hiddenItem_' + id)).eq(0); let item_1 = $('tr', table_1).eq(0); let jaName = item_1.text().trim(); jaName = (jaName.charAt(jaName.length - 1) == '*') ? jaName.substring(0, jaName.length - 1) : jaName; let item_2 = $("span", table_1).eq(0); let jaContent = item_2.html(); let index_1 = jaContent.indexOf('<br>'); let index_2 = jaContent.indexOf('<br>', index_1 + 4); index_2 = (index_2 > index_1) ? index_2 : jaContent.length; let jaKana = jaContent.substring(0, index_1).trim(); let jaRomaji = jaContent.substring(index_1 + 4, index_2).trim(); // 對日本車站名(漢字寫法)測試匹配。 let span = $('#' + id).children('span').filter(function (index) { return (($(this).attr("lang")) == "ja"); }).eq(0); if (span.text() == jaName) { span.css('background-color', '#7FFFD4'); } else { // console.log('[' + id + ']:日文名稱不一致(' + jaName + '、' + span.text() + ')。'); span.html(span.text() + '<sup>wiki: ' + jaName + '</sup>'); span.css('background-color', '#FFFDD0'); } // 對假名、羅馬字測試匹配。 span = $('#' + id).children('span').eq(1); if (span.text() == jaKana) { span.css('background-color', '#7FFFD4'); } else { // console.log('[' + id + ']:假名存在不一致(' + jaKana + '、' + span.text() + ')。'); span.html(span.text() + '<sup>wiki: ' + jaKana + '</sup>'); span.css('background-color', '#FFFDD0'); } span = $('#' + id).children('span').eq(2); if (span.text() == jaRomaji) { span.css('background-color', '#7FFFD4'); } else { // console.log('[' + id + ']:羅馬字存在不一致(' + jaRomaji + '、' + span.text() + ')。'); span.html(span.text() + '<sup>wiki: ' + jaRomaji + '</sup>'); span.css('background-color', '#FFFDD0'); } // 根據json中的categories項,得到頁面分類,並據此得到車站所在地區、線路。 let originalCategories = data.parse.categories; let categories = new Array(); for (let i = 0, j = 0; i < originalCategories.length; i++) { let category = originalCategories[i]['*']; if (category.endsWith('の鉄道駅') && !category.endsWith('年開業の鉄道駅') && !category.startsWith('日本國有鉄道の鉄道駅')) { categories[j] = category.substring(0, category.length - 4); j++; } } $('<span/>', { id: id + '-categories', text: categories.toString(), lang: 'ja', css: { 'font-size': '75%', 'font-family': 'Arial, Helvetica, sans-serif', 'background-color': '#B0E0FF' } }).appendTo('#' + id); // 測試對應的中文名。根據api響應中的langlinks項獲取中文wiki的URL,再次執行AJAX,獲得比對數據。 let zhUrl = undefined; let links = data.parse.langlinks; for (let i = 0; i < links.length; i++) { if (links[i].lang === 'zh') { zhUrl = links[i].url; } } if (zhUrl === undefined) { console.log("[" + id + "]不存在對應zhwiki頁面。"); } else { let apiUrl = "https://zh.wikipedia.org/w/api.php?action=parse&page=" + zhUrl.substring(zhUrl.lastIndexOf("/") + 1, zhUrl.length) + "&format=json"; // 轉換得到wiki api parse請求鏈接。 $.ajax({ type: "GET", dataType: "jsonp", url: apiUrl, success: function (data) { if (data.error !== undefined) { console.log("頁面[ " + zhUrl + " ]不存在。"); return; } // 根據首個表格首項獲得中文名。 var hiddenItem = $('<div/>', { id: 'hiddenItem_' + id + "_zh", text: "", css: { display: "none" } }).appendTo('.firstHeading'); $('#hiddenItem_' + id + "_zh").html(data.parse.text['*'].replaceAll(/<img> [\s\S\n]*?<\/img>/g, '').replaceAll(/<img [\s\S\n]*?\/>/g, '')); let table_1 = $("[class='infobox vcard']", $('#hiddenItem_' + id + "_zh")).eq(0); let item_1 = $('tr', table_1).eq(0); let wikiZhName = item_1.text().trim(); let pageZhName = $('#' + id).children('b').text(); if (pageZhName == wikiZhName) { $('#' + id).children('b').css('background-color', '#7FFFD4'); } else { // console.log('[' + id + ']:中文名存在不一致(' + wikiZhName + '、' + pageZhName + ')。'); $('#' + id).children('b').html($('#' + id).children('b').text() + '<sup>wiki: ' + wikiZhName + '</sup>'); $('#' + id).children('b').css('background-color', '#FFFDD0'); } $('#hiddenItem_' + id + "_zh").remove(); }, error: function () { // 無法連接維基。 console.log("頁面[ " + zhURL + " ]加載失敗。"); } }); } } $('#hiddenItem_' + id).remove(); }, error: function () { // 無法連接維基。 $('#' + id).children('a').text('✗'); $('#' + id).children('a').css('background-color', '#FFC0C0'); console.log('[' + id + ']:加載失敗。'); } }); }); }); });