1,975
次編輯
小 (已匯入 1 筆修訂:Twinkle) |
Xiplus-bot(留言 | 貢獻) 小 (繁簡轉換) |
||
}
Twinkle.addPortletLink( Twinkle.speedy.callback, "速
};
Twinkle.speedy.dialog = new Morebits.simpleWindow( Twinkle.getPref('speedyWindowWidth'), Twinkle.getPref('speedyWindowHeight') );
dialog = Twinkle.speedy.dialog;
dialog.setTitle( "
dialog.setScriptName( "Twinkle" );
dialog.addFooterLink( "快速
dialog.addFooterLink( "Twinkle
var form = new Morebits.quickForm( callbackfunc, (Twinkle.getPref('speedySelectionStyle') === 'radioClick' ? 'change' : null) );
list: [
{
label: '只
value: 'tag_only',
name: 'tag_only',
tooltip: '如果您只想
checked : Twinkle.getPref('deleteSysopDefaultToTag'),
event: function( event ) {
]
} );
form.append( { type: 'header', label: '
if (mw.config.get('wgNamespaceNumber') % 2 === 0 && (mw.config.get('wgNamespaceNumber') !== 2 || (/\//).test(mw.config.get('wgTitle')))) { // hide option for user pages, to avoid accidentally deleting user talk page
form.append( {
list: [
{
label: '
value: 'talkpage',
name: 'talkpage',
tooltip: "
checked: Twinkle.getPref('deleteTalkPageOnDelete'),
disabled: Twinkle.getPref('deleteSysopDefaultToTag'),
list: [
{
label: '
value: 'redirects',
name: 'redirects',
tooltip: "
checked: Twinkle.getPref('deleteRedirectsOnDelete'),
disabled: Twinkle.getPref('deleteSysopDefaultToTag'),
]
} );
form.append( { type: 'header', label: '
}
list: [
{
label: '如可能,通知
value: 'notify',
name: 'notify',
tooltip: "一
checked: !Morebits.userIsInGroup( 'sysop' ) || Twinkle.getPref('deleteSysopDefaultToTag'),
disabled: Morebits.userIsInGroup( 'sysop' ) && !Twinkle.getPref('deleteSysopDefaultToTag'),
list: [
{
label: '
value: 'multiple',
name: 'multiple',
tooltip: "您可
disabled: Morebits.userIsInGroup( 'sysop' ) && !Twinkle.getPref('deleteSysopDefaultToTag'),
event: function( event ) {
type: 'div',
name: 'work_area',
label: '初始化CSD模
} );
work_area.append( {
type: 'div',
label: '
} );
work_area.append( {
switch (namespace) {
case 0: // article
work_area.append( { type: 'header', label: '
work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.articleList, mode) } );
break;
case 2: // user
case 3: // user talk
work_area.append( { type: 'header', label: '用
work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.userList, mode) } );
break;
work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.fileList, mode) } );
if (!Twinkle.speedy.mode.isSysop(mode)) {
work_area.append( { type: 'div', label: '
}
break;
case 14: // category
work_area.append( { type: 'header', label: '分
work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.categoryList, mode) } );
break;
}
work_area.append( { type: 'header', label: '常
work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.generalList, mode) });
if (!Twinkle.speedy.mode.isSysop(mode)) {
work_area.append( { type: 'div', label: '
}
Twinkle.speedy.fileList = [
{
label: 'F1: 重
value: 'f1',
subgroup: {
name: 'f1_filename',
type: 'input',
label: '
tooltip: '可不含
}
},
{
label: 'F3: 所有未知版
value: 'f3',
hideWhenUser: true
},
{
label: 'F4:
value: 'f4',
hideWhenUser: true
},
{
label: 'F5: 被高
value: 'f5',
subgroup: {
type: 'input',
label: '新文件名:',
tooltip: '可不含
}
},
{
label: 'F6:
value: 'f6',
},
{
label: 'F7:
value: 'f7',
subgroup: {
name: 'f7_filename',
type: 'input',
label: '
value: Morebits.pageNameNorm,
tooltip: '如
},
hideWhenMultiple: true
Twinkle.speedy.articleList = [
{
label: 'A1: 非常短,而且
value: 'a1',
tooltip: '例如
},
{
label: 'A2:
value: 'a2',
tooltip: '
},
{
label: 'A3:
value: 'a3'
},
{
label: 'A5:
value: 'a5',
tooltip: '
subgroup: {
name: 'a5_pagename',
type: 'input',
label: '
size: 60
}
},
{
label: 'A6:
value: 'a6',
tooltip: '如果
}
];
Twinkle.speedy.categoryList = [
{
label: 'O4: 空的
value: 'o4',
tooltip: '不
}
];
Twinkle.speedy.userList = [
{
label: 'O1: 用
value: 'o1',
tooltip: '如果是
},
{
label: 'O3: 匿名用
value: 'o3',
tooltip: '避免
}
];
Twinkle.speedy.generalList = [
{
label: '自定
value: 'reason',
tooltip: '
subgroup: {
name: 'reason_1',
},
{
label: 'G1:
value: 'g1',
tooltip: '如
},
{
label: 'G2:
value: 'g2',
tooltip: '例如
},
{
label: 'G3:
value: 'g3',
tooltip: '包括明
},
{
label: 'G5: 曾
value: 'g5',
tooltip: '
subgroup: {
name: 'g5_1',
type: 'input',
label: '
tooltip: '必
size: 60
}
},
{
label: 'G8: 管理
value: 'g8',
tooltip: '包括解封用
hideWhenUser: true
},
{
label: 'G10: 原作者清空
value: 'g10',
tooltip: '
subgroup: {
name: 'g10_rationale',
type: 'input',
label: '可
tooltip: '比如作者在哪
size: 60
}
},
{
label: 'G11: 明
value: 'g11',
tooltip: '
},
{
label: 'G12: 未列明
value: 'g12',
tooltip: '注意是未列明
},
{
label: 'G13: 明
value: 'g13'
},
{
label: 'G14: 超
value: 'g14',
tooltip: '包括所有未翻
hideWhenUser: true
},
{
label: 'G15: 孤立
value: 'g15',
tooltip: '包括以下
},
{
label: 'G16: 因
value: 'g16',
hideWhenUser: true
Twinkle.speedy.redirectArticleList = [
{
label: 'R2: 跨名字空
value: 'r2',
tooltip: '由
}
];
Twinkle.speedy.redirectList = [
{
label: 'R3: 格式
value: 'r3',
tooltip: '非一眼能看出的拼
subgroup: {
name: 'r3_type',
type: 'select',
label: '
list: [
{ label: '
{ label: '
{ label: '消歧
{ label: '
{ label: '
{ label: '移
]
},
},
{
label: 'R5: 指向本身的重定向或循
value: 'r5',
tooltip: '如A→B→C→……→A。'
'reason': '',
// General
'g1': '
'g2': '
'g3': '破
'g5': '曾
'g8': '技
'g10': '作者
'g11': '
'g12': '未列明
'g13': '明
'g14': '超
'g15': '孤立
'g16': '
// Articles
'a1': '非常短而
'a2': '
'a3': '
'a5': '
'a6': '
// Redirects
'r2': '跨名字空
'r3': '
'r5': '指向本身的重定向或循
// Images and media
'f1': '重
'f3': '[[:Category:未知版
'f4': '[[:Category:來源不明檔案]]',
'f5': '已有高
'f6': '孤立而
'f7': '[[:Category:
// User pages
'o1': '用
'o3': '匿名用
// Categories
'o4': '空的
// Templates
// Portals
// delete page
var reason;
thispage = new Morebits.wiki.page( mw.config.get('wgPageName'), "
if (params.normalized === 'db') {
reason = prompt("
} else {
var presetReason = "[[WP:CSD#" + params.normalized.toUpperCase() + "|" + params.normalized.toUpperCase() + "]]: " + params.reason;
if (Twinkle.getPref("promptForSpeedyDeletionSummary").indexOf(params.normalized) !== -1) {
reason = prompt("
} else {
reason = presetReason;
}
if (reason === null) {
Morebits.status.error("
Morebits.wiki.removeCheckpoint();
return;
} else if (!reason || !reason.replace(/^\s*/, "").replace(/\s*$/, "")) {
Morebits.status.error("
Morebits.wiki.removeCheckpoint();
return;
params.normalized !== 'o1' &&
document.getElementById( 'ca-talk' ).className !== 'new') {
var talkpage = new Morebits.wiki.page( Morebits.wikipedia.namespaces[ mw.config.get('wgNamespaceNumber') + 1 ] + ':' + mw.config.get('wgTitle'), "
talkpage.setEditSummary('[[WP:CSD#G15|G15]]: 孤立
talkpage.deletePage();
// this is ugly, but because of the architecture of wiki.api, it is needed
};
var wikipedia_api = new Morebits.wiki.api( '取得重定向列表…', query, Twinkle.speedy.callbacks.sysop.deleteRedirectsMain,
new Morebits.status( '
wikipedia_api.params = params;
wikipedia_api.post();
$link = $('<a/>', {
'href': '#',
'text': '
'css': { 'fontSize': '130%', 'fontWeight': 'bold' },
'click': function(){
});
$bigtext = $('<span/>', {
'text': '白
'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
});
$link = $('<a/>', {
'href': '#',
'text': '
'css': { 'fontWeight': 'bold' },
'click': function(){
Morebits.wiki.actionCompleted.redirect = null;
Twinkle.speedy.dialog.close();
Twinkle.unlink.callback("取消
}
});
$bigtext = $('<span/>', {
'text': '取消
'css': { 'fontWeight': 'bold' }
});
$link = $('<a/>', {
'href': '#',
'text': '
'css': { 'fontWeight': 'bold' },
'click': function(){
Morebits.wiki.actionCompleted.redirect = null;
Twinkle.speedy.dialog.close();
Twinkle.unlink.callback("取消
}
});
$bigtext = $('<span/>', {
'text': '取消
'css': { 'fontWeight': 'bold' }
});
$link = $('<a/>', {
'href': mw.util.wikiScript('index') + '?' + Morebits.queryString.create( query ),
'text': '
'target': '_blank',
'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
});
$bigtext = $('<span/>', {
'text': '通知
'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
});
} else {
// open the initial contributor's talk page
var statusIndicator = new Morebits.status('打
switch( Twinkle.getPref('userTalkPageMode') ) {
if( !total ) {
statusIndicator.status("未
return;
}
$snapshot.each(function(key, value) {
var title = $(value).attr('title');
var page = new Morebits.wiki.page(title, '
page.setEditSummary('[[WP:CSD#G15|G15]]: 孤立
page.deletePage(onsuccess);
});
if (!pageobj.exists()) {
statelem.error( "
return;
}
var params = pageobj.getCallbackParameters();
statelem.status( '
// check for existing deletion tags
var tag = /(?:\{\{\s*(db|d|delete|db-.*?)(?:\s*\||\s*\}\}))/i.exec( text );
if( tag ) {
statelem.error( [ Morebits.htmlNode( 'strong', tag[1] ) , " 已被置
return;
}
var xfd = /(?:\{\{([rsaiftcm]fd|md1|proposed deletion)[^{}]*?\}\})/i.exec( text );
if( xfd && !confirm( "
return;
}
var editsummary;
if (params.normalizeds.length > 1) {
editsummary = '
$.each(params.normalizeds, function(index, norm) {
editsummary += '[[WP:CSD#' + norm.toUpperCase() + '|CSD ' + norm.toUpperCase() + ']]、';
editsummary += ')。';
} else if (params.normalizeds[0] === "db") {
editsummary = '
/*} else if (params.values[0] === "histmerge") {
editsummary = "Requesting history merge with [[" + parameters["1"] + "]] ([[WP:CSD#G6|CSD G6]]).";*/
} else {
editsummary = "
}
// disallow warning yourself
if (initialContrib === mw.config.get('wgUserName')) {
Morebits.status.warn("您(" + initialContrib + ")
// don't notify users when their user talk page is nominated
} else if (initialContrib === mw.config.get('wgTitle') && mw.config.get('wgNamespaceNumber') === 3) {
Morebits.status.warn("通知
} else {
var usertalkpage = new Morebits.wiki.page('User talk:' + initialContrib, "通知
notifytext, i;
var editsummary = "通知:";
if (params.normalizeds.indexOf("g12") === -1) { // no article name in summary for G10 deletions
editsummary += "
} else {
editsummary += "一攻
}
editsummary += "快速
usertalkpage.setAppendText(notifytext);
// for DI: params.fromDI = true, params.templatename, params.normalized (note: normalized is a string)
addToLog: function(params, initialContrib) {
var wikipedia_page = new Morebits.wiki.page("User:" + mw.config.get('wgUserName') + "/" + Twinkle.getPref('speedyLogPageName'), "添加
params.logInitialContrib = initialContrib;
wikipedia_page.setCallbackParameters(params);
if (!pageobj.exists()) {
appendText +=
"
"如果您不再想保留此日
"使用[[WP:CSD#O1|CSD O1]]提交快速
if (Morebits.userIsInGroup("sysop")) {
appendText += "\n此日
}
}
appendText += "\n# [[:" + Morebits.pageNameNorm + "]]: ";
if (params.fromDI) {
appendText += "
} else {
if (params.normalizeds.length > 1) {
appendText += "多
$.each(params.normalizeds, function(index, norm) {
appendText += "[[WP:CSD#" + norm.toUpperCase() + "|" + norm.toUpperCase() + ']]、';
appendText += ')';
} else if (params.normalizeds[0] === "db") {
appendText += "自定
} else {
appendText += "[[WP:CSD#" + params.normalizeds[0].toUpperCase() + "|CSD " + params.normalizeds[0].toUpperCase() + "]]";
pageobj.setAppendText(appendText);
pageobj.setEditSummary("
pageobj.setCreateOption("recreate");
pageobj.append();
var dbrationale = form["csd.reason_1"].value;
if (!dbrationale || !dbrationale.trim()) {
alert( '自定
parameters = null;
return false;
var otherpage = form["csd.a5_pagename"].value;
if (!otherpage || !otherpage.trim()) {
alert( 'CSD A5:
parameters = null;
return false;
if (deldisc.substring(0, 9) !== "Wikipedia" &&
deldisc.substring(0, 3) !== "WP:" &&
deldisc.substring(0, 5) !== "
deldisc.substring(0, 5) !== "
alert( 'CSD G5:您提供的
parameters = null;
return false;
var redimage = form["csd.f1_filename"].value;
if (!redimage || !redimage.trim()) {
alert( 'CSD F1:
parameters = null;
return false;
var redimage = form["csd.f5_filename"].value;
if (!redimage || !redimage.trim()) {
alert( 'CSD F5:
parameters = null;
return false;
var redirtype = form["csd.r3_type"].value;
if (!redirtype) {
alert( 'CSD R3:
parameters = null;
return false;
var values = (e.target.form ? e.target.form : e.target).getChecked('csd');
if (values.length === 0) {
alert( "
return null;
}
Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.notice = "
var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "
wikipedia_page.setCallbackParameters(params);
wikipedia_page.load(Twinkle.speedy.callbacks.user.main);
|