- 欢迎来到偶像大师中文维基,本站仍在筹备阶段,如有兴趣参与建设可加群申请账号:542540342
User:ZheiZhei/test.js:修订间差异
跳转到导航
跳转到搜索
小无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
/ | // <nowiki> | ||
/* globals TranslateVariants:true */ | |||
/** | |||
* 使用說明請見 https://zh.wikipedia.org/wiki/User:Xiplus/js/TranslateVariants | |||
*/ | |||
Promise.all( [ | |||
*/ | $.ready, | ||
mw.loader.using( [ 'ext.gadget.HanAssist', 'mediawiki.api', 'mediawiki.util', 'mediawiki.ForeignApi', 'mediawiki.diff.styles' ] ), | |||
$(function(){ | ] ).then( | ||
function( [ _, require ] ) { | |||
const { conv } = require('ext.gadget.HanAssist'); | |||
if (mw.config.get('wgPageName').match(/^MediaWiki:[^/]+(\/zh)?$/)) { | |||
let link = mw.util.addPortletLink( | |||
'p-cactions', | |||
'#', | |||
conv( { hans: '转换变体', hant: '轉換變體' } ) | |||
); | |||
$(link).on('click', function() { | |||
this.remove(); | |||
main(); | |||
}); | |||
} else { | |||
return; | |||
} | |||
if (typeof (TranslateVariants) == 'undefined') { | |||
TranslateVariants = {}; | |||
} | |||
if (typeof (TranslateVariants.summary) != 'string') { | |||
var | TranslateVariants.summary = conv( { hans: '自动转换变体自', hant: '自動轉換變體自' } ) + '[[$1]] via [[User:Dabao_qian/TranslateVariants-zhwiki.js|TranslateVariants]]'; | ||
} | |||
right | async function main() { | ||
const langs = ['zh', 'zh-hans', 'zh-cn', 'zh-my', 'zh-sg', 'zh-hant', 'zh-hk', 'zh-mo', 'zh-tw']; | |||
const langname = { | |||
'zh': '原始', | |||
'zh-hans': '简体', | |||
'zh-cn': '大陆简体', | |||
'zh-my': '大马简体', | |||
'zh-sg': '新加坡简体', | |||
'zh-hant': '繁體', | |||
'zh-hk': '香港繁體', | |||
'zh-mo': '澳門繁體', | |||
'zh-tw': '臺灣正體', | |||
}; | |||
let result = {}; | |||
var api = new mw.Api(); | |||
var zhwpapi; | |||
if (mw.config.get('wgDBname') === 'zhwiki') { | |||
zhwpapi = new mw.Api(); | |||
} else { | |||
zhwpapi = new mw.ForeignApi('//zh.wikipedia.org/w/api.php'); | |||
} | |||
var basepagetext = ''; | |||
let table = $('<div id="TranslateVariants">').prependTo('#bodyContent'); | |||
let submitall = $('<button>' + conv( { hans: '保存所有更改', hant: '儲存所有變更' } ) + '</button>'); | |||
submitall.on('click', function() { | |||
let buttons = $('.TranslateVariants-publish-changes'); | |||
if (buttons.length === 0) { | |||
mw.notify(conv( { hans: '没有任何更改可保存', hant: '沒有任何變更可儲存' } ), { type: 'error' }); | |||
return; | |||
} | |||
if (!confirm(conv( { hans: '保存 ', hant: '儲存 ' } ) + buttons.length + conv( { hans: ' 个更改?', hant: ' 個變更?' } ))) { | |||
mw.notify(conv( { hans: '已取消保存', hant: '已取消儲存' } ), { type: 'warn' }); | |||
return; | |||
} | |||
buttons.each(function(_, button) { | |||
$(button).click(); | |||
}); | |||
}); | |||
table.append($('<div style="text-align: right;">').append(submitall)); | |||
$('<div style="color:red">' + conv( { hans: '提醒:TranslateVariants工具使用IT、MediaWiki及specialpages三个转换组进行自动转换,请确认转换结果是否正确!', hant: '提醒:TranslateVariants工具使用IT、MediaWiki及specialpages三個轉換組進行自動轉換,請確認轉換結果是否正確!' } ) + '</div>').appendTo(table); | |||
var defaultlangs = 'zh,zh-hans,zh-hant'; | |||
var runlangs = prompt(conv( { hans: '转换以下语言(以逗号隔开):', hant: '轉換以下語言(以逗號隔開):' } ), defaultlangs); | |||
if (runlangs === null) { | |||
runlangs = defaultlangs; | |||
} | |||
var langqueue = runlangs.split(',').map(function(lang) { | |||
return lang.trim(); | |||
}).filter(function(lang) { | |||
return langs.indexOf(lang) !== -1; | |||
}); | |||
let text; | |||
if ($('#wpTextbox1').length === 1) { | |||
text = $('#wpTextbox1').val(); | |||
} else { | |||
let data = await api.get({ | |||
action: 'query', | |||
prop: 'revisions', | |||
rvprop: ['content', 'timestamp'], | |||
titles: [mw.config.get('wgPageName')], | |||
formatversion: '2', | |||
curtimestamp: true, | |||
}); | |||
if (!data.query || !data.query.pages) { | |||
alert('unknown error'); | |||
return; | |||
} | |||
let page = data.query.pages[0]; | |||
if (!page || page.invalid) { | |||
alert('invalidtitle'); | |||
return; | |||
} | |||
if (page.missing) { | |||
alert('nocreate-missing'); | |||
return; | |||
} | |||
let revision = page.revisions[0]; | |||
text = revision.content; | |||
} | } | ||
result.zh = text; | |||
text = text.replace(/[[\]{}<>|:*'_#&\s]/gim, function(s) { | |||
return "&#" + s.charCodeAt(0) + ";"; | |||
}); | |||
text = text.replace(/([[)((?:(?!|)(?!]).)+?)(|(?:(?!]).)+?]])/g, '$1-{$2}-$3'); | |||
text = text.replace(/-{(.*?)}-/g, function(s) { | |||
return s | |||
.replace('-{', '-{') | |||
.replace('}-', '}-') | |||
.replace(/|/g, '|') | |||
.replace(/ /g, ' ') | |||
.replace(/=/g, '=') | |||
.replace(/>/g, '>') | |||
.replace(/:/g, ':'); | |||
}); | |||
basepagetext = text; | |||
process(); | |||
function process() { | |||
if (langqueue.length === 0) { | |||
return; | |||
} | |||
var lang = langqueue.shift(); | |||
var diffTable = $('<div id="TranslateVariants-diff-' + lang + '">').appendTo(table); | |||
$('<hr>').appendTo(table); | |||
const basename = mw.config.get('wgPageName').replace(/\/zh$/, ''); | |||
var targetTitle; | |||
if (lang == 'zh') { | |||
targetTitle = basename + ''; | |||
} else { | |||
targetTitle = basename + '/' + lang; | |||
} | } | ||
var | |||
if( | var contentlang, newtext; | ||
if (lang == 'zh') { | |||
contentlang = 'zh-cn'; | |||
} else if (lang == 'zh-hans') { | |||
contentlang = 'zh-cn'; | |||
} else if (lang == 'zh-hant') { | |||
contentlang = 'zh-tw'; | |||
} else { | |||
contentlang = lang; | |||
} | } | ||
zhwpapi.parse( | |||
'{{NoteTA|G1=IT|G2=MediaWiki|G3=specialpages}}<div id="TVcontent">' + basepagetext + '</div>', | |||
{ | |||
'uselang': contentlang, | |||
'prop': 'text', | |||
} | |||
).then(function(data) { | |||
newtext = $('<div/>').html(data).find('#TVcontent').text(); | |||
return api.post({ | |||
action: 'query', | |||
prop: 'revisions', | |||
titles: [targetTitle], | |||
rvdifftotext: newtext, | |||
formatversion: '2', | |||
}); | |||
}, function(err) { | |||
mw.notify('解析' + lang + conv( { hans: '时发生错误:', hant: '時發生錯誤:' } ) + err); | |||
}).then(function(data) { | |||
let tool = $('<div><a href="' + mw.util.getUrl(targetTitle) + '">' + lang + '(' + langname[lang] + ')</a>(<a href="' + mw.util.getUrl(targetTitle, { action: 'edit' }) + '">' + conv( { hans: '编', hant: '編' } ) + '</a>)</div>').appendTo(diffTable); | |||
let page = data.query.pages[0]; | |||
if (page.missing) { | |||
let submit = $('<button style="float: right;">' + conv( { hans: '保存页面', hant: '儲存頁面' } ) + '</button>').appendTo(tool); | |||
submit.on('click', function() { | |||
this.remove(); | |||
api.create( | |||
targetTitle, | |||
{ summary: TranslateVariants.summary.replace(/\$1/g, mw.config.get('wgPageName')) }, | |||
newtext | |||
).then(function() { | |||
mw.notify(conv( { hans: '已编辑 ', hant: '已編輯 ' } ) + targetTitle); | |||
}, function(e) { | |||
mw.notify(conv( { hans: '编辑 ', hant: '編輯 ' } ) + targetTitle + conv( { hans: ' 发生错误:', hant: ' 發生錯誤:' } ) + e); | |||
}); | |||
}); | |||
$('<pre>').html(newtext.replace(/[<>&]/gim, function(s) { | |||
return "&#" + s.charCodeAt(0) + ";"; | |||
})).appendTo(diffTable); | |||
return; | |||
} | |||
let diff = page.revisions[0].diff.body; | |||
if (diff == '') { | |||
$('<span style="float: right;">' + conv( { hans: '无更改', hant: '無變更' } ) + '</span>').appendTo(tool); | |||
} else { | |||
let submit = $('<button class="TranslateVariants-publish-changes" style="float: right;">' + conv( { hans: '保存更改', hant: '儲存變更' } ) + '</button>').appendTo(tool); | |||
submit.on('click', function() { | |||
this.remove(); | |||
api.edit( | |||
targetTitle, | |||
function() { | |||
return { | |||
text: newtext, | |||
summary: TranslateVariants.summary.replace(/\$1/g, mw.config.get('wgPageName')), | |||
nocreate: false, | |||
}; | |||
} | |||
).then(function() { | |||
mw.notify(conv( { hans: '已编辑 ', hant: '已編輯 ' } ) + targetTitle); | |||
}, function(e) { | |||
mw.notify(conv( { hans: '编辑 ', hant: '編輯 ' } ) + targetTitle + conv( { hans: ' 发生错误:', hant: ' 發生錯誤:' } ) + e); | |||
}); | |||
}); | |||
$('<table class="diff">').html(diff).prepend('<colgroup><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content"></colgroup>').appendTo(diffTable); | |||
} | |||
}, function(err) { | |||
mw.notify(conv( { hans: '获取', hant: '取得' } ) + lang + conv( { hans: '差异时发生错误:', hant: '差異時發生錯誤:' } ) + err); | |||
}).always(function() { | |||
process(); | |||
}); | |||
} | } | ||
} | } | ||
}, | |||
); | |||
// </nowiki> | |||
2025年9月17日 (三) 13:21的版本
// <nowiki>
/* globals TranslateVariants:true */
/**
* 使用說明請見 https://zh.wikipedia.org/wiki/User:Xiplus/js/TranslateVariants
*/
Promise.all( [
$.ready,
mw.loader.using( [ 'ext.gadget.HanAssist', 'mediawiki.api', 'mediawiki.util', 'mediawiki.ForeignApi', 'mediawiki.diff.styles' ] ),
] ).then(
function( [ _, require ] ) {
const { conv } = require('ext.gadget.HanAssist');
if (mw.config.get('wgPageName').match(/^MediaWiki:[^/]+(\/zh)?$/)) {
let link = mw.util.addPortletLink(
'p-cactions',
'#',
conv( { hans: '转换变体', hant: '轉換變體' } )
);
$(link).on('click', function() {
this.remove();
main();
});
} else {
return;
}
if (typeof (TranslateVariants) == 'undefined') {
TranslateVariants = {};
}
if (typeof (TranslateVariants.summary) != 'string') {
TranslateVariants.summary = conv( { hans: '自动转换变体自', hant: '自動轉換變體自' } ) + '[[$1]] via [[User:Dabao_qian/TranslateVariants-zhwiki.js|TranslateVariants]]';
}
async function main() {
const langs = ['zh', 'zh-hans', 'zh-cn', 'zh-my', 'zh-sg', 'zh-hant', 'zh-hk', 'zh-mo', 'zh-tw'];
const langname = {
'zh': '原始',
'zh-hans': '简体',
'zh-cn': '大陆简体',
'zh-my': '大马简体',
'zh-sg': '新加坡简体',
'zh-hant': '繁體',
'zh-hk': '香港繁體',
'zh-mo': '澳門繁體',
'zh-tw': '臺灣正體',
};
let result = {};
var api = new mw.Api();
var zhwpapi;
if (mw.config.get('wgDBname') === 'zhwiki') {
zhwpapi = new mw.Api();
} else {
zhwpapi = new mw.ForeignApi('//zh.wikipedia.org/w/api.php');
}
var basepagetext = '';
let table = $('<div id="TranslateVariants">').prependTo('#bodyContent');
let submitall = $('<button>' + conv( { hans: '保存所有更改', hant: '儲存所有變更' } ) + '</button>');
submitall.on('click', function() {
let buttons = $('.TranslateVariants-publish-changes');
if (buttons.length === 0) {
mw.notify(conv( { hans: '没有任何更改可保存', hant: '沒有任何變更可儲存' } ), { type: 'error' });
return;
}
if (!confirm(conv( { hans: '保存 ', hant: '儲存 ' } ) + buttons.length + conv( { hans: ' 个更改?', hant: ' 個變更?' } ))) {
mw.notify(conv( { hans: '已取消保存', hant: '已取消儲存' } ), { type: 'warn' });
return;
}
buttons.each(function(_, button) {
$(button).click();
});
});
table.append($('<div style="text-align: right;">').append(submitall));
$('<div style="color:red">' + conv( { hans: '提醒:TranslateVariants工具使用IT、MediaWiki及specialpages三个转换组进行自动转换,请确认转换结果是否正确!', hant: '提醒:TranslateVariants工具使用IT、MediaWiki及specialpages三個轉換組進行自動轉換,請確認轉換結果是否正確!' } ) + '</div>').appendTo(table);
var defaultlangs = 'zh,zh-hans,zh-hant';
var runlangs = prompt(conv( { hans: '转换以下语言(以逗号隔开):', hant: '轉換以下語言(以逗號隔開):' } ), defaultlangs);
if (runlangs === null) {
runlangs = defaultlangs;
}
var langqueue = runlangs.split(',').map(function(lang) {
return lang.trim();
}).filter(function(lang) {
return langs.indexOf(lang) !== -1;
});
let text;
if ($('#wpTextbox1').length === 1) {
text = $('#wpTextbox1').val();
} else {
let data = await api.get({
action: 'query',
prop: 'revisions',
rvprop: ['content', 'timestamp'],
titles: [mw.config.get('wgPageName')],
formatversion: '2',
curtimestamp: true,
});
if (!data.query || !data.query.pages) {
alert('unknown error');
return;
}
let page = data.query.pages[0];
if (!page || page.invalid) {
alert('invalidtitle');
return;
}
if (page.missing) {
alert('nocreate-missing');
return;
}
let revision = page.revisions[0];
text = revision.content;
}
result.zh = text;
text = text.replace(/[[\]{}<>|:*'_#&\s]/gim, function(s) {
return "&#" + s.charCodeAt(0) + ";";
});
text = text.replace(/([[)((?:(?!|)(?!]).)+?)(|(?:(?!]).)+?]])/g, '$1-{$2}-$3');
text = text.replace(/-{(.*?)}-/g, function(s) {
return s
.replace('-{', '-{')
.replace('}-', '}-')
.replace(/|/g, '|')
.replace(/ /g, ' ')
.replace(/=/g, '=')
.replace(/>/g, '>')
.replace(/:/g, ':');
});
basepagetext = text;
process();
function process() {
if (langqueue.length === 0) {
return;
}
var lang = langqueue.shift();
var diffTable = $('<div id="TranslateVariants-diff-' + lang + '">').appendTo(table);
$('<hr>').appendTo(table);
const basename = mw.config.get('wgPageName').replace(/\/zh$/, '');
var targetTitle;
if (lang == 'zh') {
targetTitle = basename + '';
} else {
targetTitle = basename + '/' + lang;
}
var contentlang, newtext;
if (lang == 'zh') {
contentlang = 'zh-cn';
} else if (lang == 'zh-hans') {
contentlang = 'zh-cn';
} else if (lang == 'zh-hant') {
contentlang = 'zh-tw';
} else {
contentlang = lang;
}
zhwpapi.parse(
'{{NoteTA|G1=IT|G2=MediaWiki|G3=specialpages}}<div id="TVcontent">' + basepagetext + '</div>',
{
'uselang': contentlang,
'prop': 'text',
}
).then(function(data) {
newtext = $('<div/>').html(data).find('#TVcontent').text();
return api.post({
action: 'query',
prop: 'revisions',
titles: [targetTitle],
rvdifftotext: newtext,
formatversion: '2',
});
}, function(err) {
mw.notify('解析' + lang + conv( { hans: '时发生错误:', hant: '時發生錯誤:' } ) + err);
}).then(function(data) {
let tool = $('<div><a href="' + mw.util.getUrl(targetTitle) + '">' + lang + '(' + langname[lang] + ')</a>(<a href="' + mw.util.getUrl(targetTitle, { action: 'edit' }) + '">' + conv( { hans: '编', hant: '編' } ) + '</a>)</div>').appendTo(diffTable);
let page = data.query.pages[0];
if (page.missing) {
let submit = $('<button style="float: right;">' + conv( { hans: '保存页面', hant: '儲存頁面' } ) + '</button>').appendTo(tool);
submit.on('click', function() {
this.remove();
api.create(
targetTitle,
{ summary: TranslateVariants.summary.replace(/\$1/g, mw.config.get('wgPageName')) },
newtext
).then(function() {
mw.notify(conv( { hans: '已编辑 ', hant: '已編輯 ' } ) + targetTitle);
}, function(e) {
mw.notify(conv( { hans: '编辑 ', hant: '編輯 ' } ) + targetTitle + conv( { hans: ' 发生错误:', hant: ' 發生錯誤:' } ) + e);
});
});
$('<pre>').html(newtext.replace(/[<>&]/gim, function(s) {
return "&#" + s.charCodeAt(0) + ";";
})).appendTo(diffTable);
return;
}
let diff = page.revisions[0].diff.body;
if (diff == '') {
$('<span style="float: right;">' + conv( { hans: '无更改', hant: '無變更' } ) + '</span>').appendTo(tool);
} else {
let submit = $('<button class="TranslateVariants-publish-changes" style="float: right;">' + conv( { hans: '保存更改', hant: '儲存變更' } ) + '</button>').appendTo(tool);
submit.on('click', function() {
this.remove();
api.edit(
targetTitle,
function() {
return {
text: newtext,
summary: TranslateVariants.summary.replace(/\$1/g, mw.config.get('wgPageName')),
nocreate: false,
};
}
).then(function() {
mw.notify(conv( { hans: '已编辑 ', hant: '已編輯 ' } ) + targetTitle);
}, function(e) {
mw.notify(conv( { hans: '编辑 ', hant: '編輯 ' } ) + targetTitle + conv( { hans: ' 发生错误:', hant: ' 發生錯誤:' } ) + e);
});
});
$('<table class="diff">').html(diff).prepend('<colgroup><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content"></colgroup>').appendTo(diffTable);
}
}, function(err) {
mw.notify(conv( { hans: '获取', hant: '取得' } ) + lang + conv( { hans: '差异时发生错误:', hant: '差異時發生錯誤:' } ) + err);
}).always(function() {
process();
});
}
}
},
);
// </nowiki>