- 欢迎来到偶像大师中文维基,本站仍在筹备阶段,如有兴趣参与建设可加群申请账号:542540342
User:ZheiZhei/test.js
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
// <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>