User:逆襲的天邪鬼/Twinkle-lzh/twinklespeedy.js: Difference between revisions
User:逆襲的天邪鬼/Twinkle-lzh/twinklespeedy.js (view source)
Revision as of 12:55, 6 June 2017
, 6 years agono edit summary
(Created page with "//<nowiki> // vim: set noet sts=0 sw=8: (function($){ /* **************************************** *** twinklespeedy.js: CSD module *************************************...") |
No edit summary |
||
(11 intermediate revisions by the same user not shown) | |||
Line 26:
// * Flow pages
// * non-existent pages
if (mw.config.get('wgNamespaceNumber') < 0
return;
}
Twinkle.addPortletLink( Twinkle.speedy.callback, "速
};
Line 83:
Twinkle.speedy.dialog = new Morebits.simpleWindow( Twinkle.getPref('speedyWindowWidth'), Twinkle.getPref('speedyWindowHeight') );
dialog = Twinkle.speedy.dialog;
dialog.setTitle( "
dialog.setScriptName( "Twinkle" );
var form = new Morebits.quickForm( callbackfunc, (Twinkle.getPref('speedySelectionStyle') === 'radioClick' ? 'change' : null) );
Line 94 ⟶ 92:
list: [
{
label: '只
value: 'tag_only',
name: 'tag_only',
tooltip: '如果您只想
checked : Twinkle.getPref('deleteSysopDefaultToTag'),
event: function( event ) {
Line 138 ⟶ 136:
deleteOptions.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
Line 145 ⟶ 143:
list: [
{
label: '
value: 'talkpage',
name: 'talkpage',
tooltip: "
checked: Twinkle.getPref('deleteTalkPageOnDelete'),
disabled: Twinkle.getPref('deleteSysopDefaultToTag'),
Line 158 ⟶ 156:
} );
}
deleteOptions.append( {
type: 'checkbox',
list: [
{
label: '不刪除,而是移動到「稿」',
value: 'movetodraft',
name: 'movetodraft',
tooltip: "不刪除頁面,而是將其移動到「稿」名字空間。",
checked: false,
disabled: (mw.config.get('wgNamespaceNumber') === 106 || mw.config.get('wgNamespaceNumber') === 107),
event: function( event ) {
event.stopPropagation();
}
}
]
} );
deleteOptions.append( {
type: 'checkbox',
list: [
{
label: '
value: 'redirects',
name: 'redirects',
tooltip: "
checked: Twinkle.getPref('deleteRedirectsOnDelete'),
disabled: Twinkle.getPref('deleteSysopDefaultToTag'),
Line 178 ⟶ 193:
list: [
{
label: '
value: 'delmultiple',
name: 'delmultiple',
tooltip: "您可
event: function( event ) {
Twinkle.speedy.callback.modeChanged( event.target.form );
Line 193 ⟶ 208:
list: [
{
label: '
value: 'openusertalk',
name: 'openusertalk',
tooltip: '此
checked : false
}
Line 211 ⟶ 226:
tagOptions.append( {
type: 'header',
label: '
} );
}
Line 219 ⟶ 234:
list: [
{
label: '如可能,通知
value: 'notify',
name: 'notify',
tooltip: "如果您啟用了該理據的通知,一
checked: !Morebits.userIsInGroup( 'sysop' ) || Twinkle.getPref('deleteSysopDefaultToTag'),
disabled: Morebits.userIsInGroup( 'sysop' ) && !Twinkle.getPref('deleteSysopDefaultToTag'),
Line 235 ⟶ 250:
list: [
{
label: '
value: 'multiple',
name: 'multiple',
tooltip: "您可
disabled: Morebits.userIsInGroup( 'sysop' ) && !Twinkle.getPref('deleteSysopDefaultToTag'),
event: function( event ) {
Line 251 ⟶ 266:
type: 'div',
name: 'work_area',
label: '初始化CSD模
} );
Line 324 ⟶ 339:
work_area.append( {
type: 'div',
label: '
} );
work_area.append( {
Line 339 ⟶ 354:
var radioOrCheckbox = (Twinkle.speedy.mode.isMultiple(mode) ? 'checkbox' : 'radio');
// if (Twinkle.speedy.mode.isSysop(mode) && !Twinkle.speedy.mode.isMultiple(mode)) {
work_area.append( { type: 'header', label: '自定
work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.customRationale, mode) } );
// }
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;
*/
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;
Line 375 ⟶ 384:
// custom rationale lives under general criteria when tagging
var generalCriteria = Twinkle.speedy.generalList;
// if (!Twinkle.speedy.mode.isSysop(mode)) {
// }
work_area.append( { type: 'header', label: '常
work_area.append( { type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(generalCriteria, mode) });
if (mw.config.get('wgIsRedirect') || Morebits.userIsInGroup('sysop')) {
Line 417 ⟶ 423:
return $.map(list, function(critElement) {
var criterion = $.extend({}, critElement);
if (multiple) {
Line 503 ⟶ 504:
Twinkle.speedy.customRationale = [
{
label: '自定
value: 'reason',
tooltip: '這不是萬能的刪除理由,只適用於該頁及其歷史版本均明顯不應存在於維基大典的情況。',
subgroup: {
name: 'reason_1',
Line 512 ⟶ 513:
size: 60
},
}
];
Line 567 ⟶ 518:
Twinkle.speedy.articleList = [
{
label: '
value: 'a1',
tooltip: '條目根本不是文言文,只有完全重寫才能解決問題。文白相雜請改用{{文白相雜|~~~~~}}。如果作者有改善意願,建議移至草稿。'
},
{
label: '極短且不知所云',
value: 'a2',
tooltip: '只用於非常短,而且明顯看不出主題的條目。'
},
{
label: '文白相雜且未斧正',
value: 'a3',
tooltip: '條目文白相雜,等了一個月之後內容仍未改善。建議將這種頁面移到草稿而不是刪除。',
hideWhenUser: true
},
{
label: '生不立傳',
value: '
},
];
Twinkle.speedy.categoryList = [
{
label: '
value: '
tooltip: '不
}
];
Line 621 ⟶ 549:
Twinkle.speedy.generalList = [
{
label: '
value: 'g1',
tooltip: '注意:應該只用於頁面作者唯一或實質貢獻者唯一的情況,因此用戶討論頁通常不適用刪除。'
},
{
label: '
value: '
},
{
label: '廣告宣傳',
value: '
tooltip: '明顯的廣告宣傳,唯有全部重寫才能改善內容,或者無法按大典要求重寫。'
},
{
label: '試筆',
value: 'g5',
tooltip: '測試性質的頁面',
},
{
label: '
value: '
tooltip: '例如以下几种類型:1. 没有對應檔案的檔案頁面;2. 没有對應母頁面的子頁面,用戶頁子頁面除外;3. 指向不存在頁面的重定向;4. 没有對應内容頁面的討論頁,討論頁存档和用戶討論頁除外;5. 不存在注册用戶的用戶頁及用戶頁子頁面,随用戶更名产生的用戶頁重定向除外。請在刪除時注意有无將内容移至他处的必要。不包括在主頁面挂有{{CSD Placeholder}}模板的討論頁。'
},
{
label: '大典維護',
value: '
tooltip: '例如解封用戶而刪除{{永禁}}、刪除MediaWiki頁面、因移動而刪除等。',
hideWhenUser: true
},
];
Twinkle.speedy.redirectArticleList = [
{
label: '
value: '
tooltip: '由
},
{
label: '簡化字文題',
value: 'r4',
tooltip: '條目以簡化字為題。如果不是重定向頁,需先移動到合適的標題然後再提刪。'
}
];
Line 709 ⟶ 595:
Twinkle.speedy.redirectList = [
{
label: '
value: '
},
{
label: '筆誤',
value: '
tooltip: '非一眼能看出的拼寫錯誤和翻譯或標题用字的爭議應交由議刪處理。',
},
];
Line 739 ⟶ 610:
'multiple-finish': 'multiple-finish',
'g1': 'g1',
'g3': 'g3',
'g4': 'g4',
'g5': 'g5',
'g7': 'g7',
'g8': 'g8',
'a1': 'a1',
'a2': 'a2',
'a3': 'a3',
'
'
};
Line 773 ⟶ 630:
'reason': '',
// General
'g1': '
'
'
'g5': '試筆',
'
'
// Articles
'a1': '非
'a2': '極短且不知所云',
'a3': '
'a4': '生不立傳',
// Redirects
'
'
'r3': '條目渡至非條目',
'r4': '簡化字文題',
// Categories
'
// Templates
// Portals
Line 813 ⟶ 654:
Twinkle.speedy.callbacks = {
getTemplateCodeAndParams: function(params) {
var code
var reasons = Twinkle.speedy.callbacks.getReasons(params);
$.extend(params.utparams, Twinkle.speedy.getUserTalkParameters(norm, params.templateParams[index] || []));
});
code += reasons.join(';') + "}}";
return [code, params.utparams];
},
getReasons: function (params) {
var reasons = [];
var parameters;
$.each(params.normalizeds, function(index, norm) {
if (Twinkle.speedy.reasonHash[norm]) {
reasons.push(Twinkle.speedy.reasonHash[norm]);
} else {
parameters = params.templateParams[index] || [];
for (var i=0;
if (typeof parameters[i] === 'string') {
}
}
}
});
return reasons;
},
Line 874 ⟶ 688:
if (!params.normalizeds.length && params.normalizeds[0] === 'db') {
reason = prompt("输入
Twinkle.speedy.callbacks.sysop.deletePage( reason, params );
} else {
}
},
deletePage: function( reason, params ) {
var thispage = new Morebits.wiki.page( mw.config.get('wgPageName'), "
if (reason === null) {
return Morebits.status.error("
} else if (!reason || !reason.replace(/^\s*/, "").replace(/\s*$/, "")) {
return Morebits.status.error("
}
thispage.setEditSummary( reason + Twinkle.getPref('deletionSummaryAd') );
if (params.movetodraft) {
thispage.setMoveTalkPage(true);
thispage.setMoveSuppressRedirect(true);
thispage.setMoveDestination('稿:' + mw.config.get('wgPageName'));
thispage.move(function() {
thispage.getStatusElement().info("完成");
Twinkle.speedy.callbacks.sysop.deleteRedirects( params );
});
} else {
thispage.deletePage(function() {
thispage.getStatusElement().info("完成");
Twinkle.speedy.callbacks.sysop.deleteTalk( params );
});
}
// look up initial contributor. If prompting user for deletion reason, just display a link.
Line 910 ⟶ 730:
// delete talk page
if (params.deleteTalkPage &&
params.normalized !== '
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('
talkpage.deletePage();
// this is ugly, but because of the architecture of wiki.api, it is needed
Line 932 ⟶ 751:
'rdlimit': 5000 // 500 is max for normal users, 5000 for bots and sysops
};
var wikipedia_api = new Morebits.wiki.api( '取得重定向
new Morebits.status( '
wikipedia_api.params = params;
wikipedia_api.post();
}
//
var $link, $bigtext;
$link = $('<a/>', {
'href': '#',
'text': '點選這里前往反連工具',
Morebits.wiki.actionCompleted.redirect = null;
Twinkle.speedy.dialog.close();
Twinkle.unlink.callback("取消對已刪除頁面 " + Morebits.pageNameNorm + " 的連結");
}
});
$bigtext = $('<span/>', {
'text': '取消對已刪除頁面的連結',
'css': { 'fontWeight': 'bold' }
});
Morebits.status.info($bigtext[0], $link[0]);
},
openUserTalkPage: function( pageobj ) {
Line 1,012 ⟶ 793:
$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' }
});
Line 1,023 ⟶ 804:
} else {
// open the initial contributor's talk page
var statusIndicator = new Morebits.status('打
switch( Twinkle.getPref('userTalkPageMode') ) {
Line 1,051 ⟶ 832:
if( !total ) {
statusIndicator.status("未
return;
}
Line 1,072 ⟶ 853:
$snapshot.each(function(key, value) {
var title = $(value).attr('title');
var page = new Morebits.wiki.page(title, '
page.setEditSummary('
page.deletePage(onsuccess);
});
Line 1,084 ⟶ 865:
if (!pageobj.exists()) {
statelem.error( "
return;
}
Line 1,091 ⟶ 872:
var params = pageobj.getCallbackParameters();
statelem.status( '
// check for existing deletion tags
var tag = /(?:\{\{\s*(
if ( tag ) {
statelem.error( [ Morebits.htmlNode( 'strong', tag[1] ) , " 已
return;
}
var
if ( xfd && !confirm( "刪除相關模板{{" + xfd[1] + "}}已被置於頁面中,您是否仍想添加一個快速刪除模板?" ) ) {
statelem.error( '
return;
}
Line 1,128 ⟶ 903:
if (mw.config.get('wgNamespaceNumber') === 10) { // Template:
code = "<noinclude>" + code + "</noinclude>";
}
// Generate edit summary for edit
var editsummary = '提速刪:' + Twinkle.speedy.callbacks.getReasons(params);
pageobj.setPageText(code + "\n" + text);
Line 1,169 ⟶ 925:
// 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 talkPageName = 'User talk:' + initialContrib;
var usertalkpage = new Morebits.wiki.
notifytext, i;
editsummary += "頁[[" + Morebits.pageNameNorm + "]]將刪";
}
Line 1,224 ⟶ 968:
// 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);
Line 1,239 ⟶ 983:
if (!pageobj.exists()) {
appendText +=
"
"如果您不再想保留此日
"
if (Morebits.userIsInGroup("sysop")) {
appendText += "\n此日
}
}
Line 1,255 ⟶ 999:
appendText += "\n# [[:" + Morebits.pageNameNorm + "]]: ";
appendText += Twinkle.speedy.callbacks.getReasons(params);
if (params.logInitialContrib) {
Line 1,278 ⟶ 1,007:
pageobj.setAppendText(appendText);
pageobj.setEditSummary("
pageobj.setCreateOption("recreate");
pageobj.append();
Line 1,296 ⟶ 1,025:
var dbrationale = form["csd.reason_1"].value;
if (!dbrationale || !dbrationale.trim()) {
alert( '自定
parameters = null;
return false;
}
currentParams["1"] = dbrationale;
}
break;
Line 1,411 ⟶ 1,055:
var values = (e.target.form ? e.target.form : e.target).getChecked('csd');
if (values.length === 0) {
alert( "
return null;
}
Line 1,457 ⟶ 1,101:
deleteTalkPage: form.talkpage && form.talkpage.checked,
deleteRedirects: form.redirects.checked,
movetodraft: form.movetodraft.checked,
openUserTalk: form.openusertalk.checked,
promptForSummary: promptForSummary,
Line 1,547 ⟶ 1,192:
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);
|