「MediaWiki:Gadget-twinklebatchundelete.js」:修訂間差異

出自竹園Wiki
跳至導覽 跳至搜尋
(已匯入 1 筆修訂:Twinkle)
(繁簡轉換)
 
行 23: 行 23:
}
}
if( Morebits.userIsInGroup( 'sysop' ) ) {
if( Morebits.userIsInGroup( 'sysop' ) ) {
Twinkle.addPortletLink( Twinkle.batchundelete.callback, "批", "tw-batch-undel", "反面" );
Twinkle.addPortletLink( Twinkle.batchundelete.callback, "批", "tw-batch-undel", "反面" );
}
}
};
};
行 30: 行 30:
var Window = new Morebits.simpleWindow( 600, 400 );
var Window = new Morebits.simpleWindow( 600, 400 );
Window.setScriptName("Twinkle");
Window.setScriptName("Twinkle");
Window.setTitle("批量反除");
Window.setTitle("批量反除");
Window.addFooterLink( "Twinkle助", "WP:TW/DOC#batchundelete" );
Window.addFooterLink( "Twinkle助", "WP:TW/DOC#batchundelete" );


var form = new Morebits.quickForm( Twinkle.batchundelete.callback.evaluate );
var form = new Morebits.quickForm( Twinkle.batchundelete.callback.evaluate );
行 53: 行 53:
'gpllimit' : Twinkle.getPref('batchMax') // the max for sysops
'gpllimit' : Twinkle.getPref('batchMax') // the max for sysops
};
};
var statelem = new Morebits.status("抓取面列表");
var statelem = new Morebits.status("抓取面列表");
var wikipedia_api = new Morebits.wiki.api( "入中…", query, function( apiobj ) {
var wikipedia_api = new Morebits.wiki.api( "入中…", query, function( apiobj ) {
var xml = apiobj.responseXML;
var xml = apiobj.responseXML;
var $pages = $(xml).find('page[missing]');
var $pages = $(xml).find('page[missing]');
行 63: 行 63:
list.push({ label: title, value: title, checked: true });
list.push({ label: title, value: title, checked: true });
});
});
apiobj.params.form.append({ type: 'header', label: '待恢复页面' });
apiobj.params.form.append({ type: 'header', label: '待恢複頁面' });
apiobj.params.form.append({
apiobj.params.form.append({
type: 'button',
type: 'button',
label: "全",
label: "全",
event: function(e) {
event: function(e) {
$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', true);
$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', true);
行 73: 行 73:
apiobj.params.form.append({
apiobj.params.form.append({
type: 'button',
type: 'button',
label: "全不",
label: "全不",
event: function(e) {
event: function(e) {
$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', false);
$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', false);
行 95: 行 95:


Twinkle.batchundelete.callback.evaluate = function( event ) {
Twinkle.batchundelete.callback.evaluate = function( event ) {
Morebits.wiki.actionCompleted.notice = '状态';
Morebits.wiki.actionCompleted.notice = '狀態';
Morebits.wiki.actionCompleted.postfix = '反除已完成';
Morebits.wiki.actionCompleted.postfix = '反除已完成';


var pages = event.target.getChecked( 'pages' );
var pages = event.target.getChecked( 'pages' );
行 108: 行 108:


if( !pages ) {
if( !pages ) {
Morebits.status.error( '错误', '要反除的,取消操作' );
Morebits.status.error( '錯誤', '要反除的,取消操作' );
return;
return;
}
}


var batchOperation = new Morebits.batchOperation("反面");
var batchOperation = new Morebits.batchOperation("反面");
batchOperation.setOption("chunkSize", Twinkle.getPref('batchUndeleteChunks'));
batchOperation.setOption("chunkSize", Twinkle.getPref('batchUndeleteChunks'));
batchOperation.setOption("preserveIndividualStatusLines", true);
batchOperation.setOption("preserveIndividualStatusLines", true);
行 123: 行 123:
'reason': reason + Twinkle.getPref('deletionSummaryAd')
'reason': reason + Twinkle.getPref('deletionSummaryAd')
};
};
var wikipedia_api = new Morebits.wiki.api( "反面" + pageName, query,
var wikipedia_api = new Morebits.wiki.api( "反面" + pageName, query,
batchOperation.workerSuccess, null, batchOperation.workerFailure );
batchOperation.workerSuccess, null, batchOperation.workerFailure );
wikipedia_api.statelem.status("反除中…");
wikipedia_api.statelem.status("反除中…");
wikipedia_api.pageName = pageName;
wikipedia_api.pageName = pageName;
wikipedia_api.post();
wikipedia_api.post();

於 2016年4月10日 (日) 15:06 的最新修訂

//<nowiki>
// vim: set noet sts=0 sw=8:


(function($){


/*
 ****************************************
 *** twinklebatchundelete.js: Batch undelete module
 ****************************************
 * Mode of invocation:     Tab ("Und-batch")
 * Active on:              Existing user and project pages
 * Config directives in:   TwinkleConfig
 */


Twinkle.batchundelete = function twinklebatchundelete() {
	if( ( mw.config.get("wgNamespaceNumber") !== mw.config.get("wgNamespaceIds").user &&
		mw.config.get("wgNamespaceNumber") !== mw.config.get("wgNamespaceIds").project ) ||
		!mw.config.get("wgArticleId") ) {
		return;
	}
	if( Morebits.userIsInGroup( 'sysop' ) ) {
		Twinkle.addPortletLink( Twinkle.batchundelete.callback, "批複", "tw-batch-undel", "反刪除頁面" );
	}
};

Twinkle.batchundelete.callback = function twinklebatchundeleteCallback() {
	var Window = new Morebits.simpleWindow( 600, 400 );
	Window.setScriptName("Twinkle");
	Window.setTitle("批量反刪除");
	Window.addFooterLink( "Twinkle幫助", "WP:TW/DOC#batchundelete" );

	var form = new Morebits.quickForm( Twinkle.batchundelete.callback.evaluate );
	form.append( {
			type: 'input',
			name: 'reason',
			label: '理由:',
			size: 60
		} );

	var statusdiv = document.createElement( 'div' );
	statusdiv.style.padding = '15px';  // just so it doesn't look broken
	Window.setContent(statusdiv);
	Morebits.status.init(statusdiv);
	Window.display();

	var query = {
		'action': 'query',
		'generator': 'links',
		'titles': mw.config.get("wgPageName"),
		'gpllimit' : Twinkle.getPref('batchMax') // the max for sysops
	};
	var statelem = new Morebits.status("抓取頁面列表");
	var wikipedia_api = new Morebits.wiki.api( "載入中…", query, function( apiobj ) {
			var xml = apiobj.responseXML;
			var $pages = $(xml).find('page[missing]');
			var list = [];
			$pages.each(function(index, page) {
				var $page = $(page);
				var title = $page.attr('title');
				list.push({ label: title, value: title, checked: true });
			});
			apiobj.params.form.append({ type: 'header', label: '待恢複頁面' });
			apiobj.params.form.append({
					type: 'button',
					label: "全選",
					event: function(e) {
						$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', true);
					}
				});
			apiobj.params.form.append({
					type: 'button',
					label: "全不選",
					event: function(e) {
						$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', false);
					}
				});
			apiobj.params.form.append( {
					type: 'checkbox',
					name: 'pages',
					list: list
				});
			apiobj.params.form.append( { type:'submit' } );

			var result = apiobj.params.form.render();
			apiobj.params.Window.setContent( result );

			Morebits.checkboxShiftClickSupport(Morebits.quickForm.getElements(result, 'pages'));
		}, statelem );
	wikipedia_api.params = { form:form, Window:Window };
	wikipedia_api.post();
};

Twinkle.batchundelete.callback.evaluate = function( event ) {
	Morebits.wiki.actionCompleted.notice = '狀態';
	Morebits.wiki.actionCompleted.postfix = '反刪除已完成';

	var pages = event.target.getChecked( 'pages' );
	var reason = event.target.reason.value;
	if( ! reason ) {
		alert("您需要指定理由。");
		return;
	}
	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init( event.target );

	if( !pages ) {
		Morebits.status.error( '錯誤', '沒什麽要反刪除的,取消操作' );
		return;
	}

	var batchOperation = new Morebits.batchOperation("反刪除頁面");
	batchOperation.setOption("chunkSize", Twinkle.getPref('batchUndeleteChunks'));
	batchOperation.setOption("preserveIndividualStatusLines", true);
	batchOperation.setPageList(pages);
	batchOperation.run(function(pageName) {
		var query = {
			'token': mw.user.tokens.get().editToken,
			'title': pageName,
			'action': 'undelete',
			'reason': reason + Twinkle.getPref('deletionSummaryAd')
		};
		var wikipedia_api = new Morebits.wiki.api( "反刪除頁面" + pageName, query,
			batchOperation.workerSuccess, null, batchOperation.workerFailure );
		wikipedia_api.statelem.status("反刪除中…");
		wikipedia_api.pageName = pageName;
		wikipedia_api.post();
	});
};

})(jQuery);


//</nowiki>