Участник:Dima st bk/oneclickkeep.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
/*
  скрипт быстрого оставления статей на КУ // dima_st_bk 2015
  часть кода взята тут - [[Участник:VasilievVV/oneclickkeep.js]]
*/

if ( mw.config.get('wgCategories').indexOf('Википедия:Кандидаты на удаление') >= 0 ) {
	var keep = mw.util.addPortletLink( 'p-cactions', '#', 'Оставить', 'ca-keep-d', 'Снять эту страницу с удаления');
}

// Bind click handler
$( keep ).click( function () {
	oneclickkeep();
});

function oneclickkeep () {
	var api = new mw.Api();
	// lets figure out the username

	var id = mw.config.get('wgArticleId');
	
	api.get( {
		action: 'query',
		prop: 'info',
		inprop: 'talkid',
		pageids: id
	}).done( 
		function( data ) {

			var talkid = ( data.query.pages[id].talkid === undefined) ? 0 : data.query.pages[id].talkid;
			api.get( {
				action: 'query',
				prop: 'revisions',
				rvprop: 'content',
				pageids: id + '|' + talkid
			}).done( 
				function( data ) {

					var rfdRegex = /(?:\s*<\s*noinclude\s*>)?\s*\{\{\s*(КУ|К удалению)\s*\|\s*\d{4}-\d{2}-\d{2}\s*\}\}\s*(?:<\/noinclude>\s*)?/ig;
					
					var text = data.query.pages[id].revisions[0]['*'];
					var talktext = ( talkid === 0) ? '\n' : data.query.pages[talkid].revisions[0]['*'];
					
					var matches = text.match( rfdRegex );
					var newtext = text.replace( rfdRegex, "" );
					var date = matches[0].match(/(\d{4})-(\d{2})-(\d{2})/);
					var newtalktext = "{{оставлено|" + date[0] + "}}\n" + talktext;					
					var editsummary = 'оставлено согласно \[\[Википедия:К удалению/' + (date[3][0] == '0' ? date[3][1] : date[3]) + ' ' +
                             'января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря'
                             .split('|')[(date[2][0] == '0' ? parseInt(date[2][1]) : parseInt(date[2]))-1] + ' ' + date[1] +
                             '#' + mw.config.get('wgPageName').replace(/_/g, ' ') + ']]';

					api.post( {
						action: 'edit',
						pageid: id,
						text: newtext,
						summary: editsummary,
						token: mw.user.tokens.get('editToken')
					}).done( 
						function( data ) {

							mw.notify( 'Страница была успешно снята с удаления' );
							api.post( {
								action: 'edit',
								title: mw.config.get('wgFormattedNamespaces')[mw.config.get('wgNamespaceNumber') + 1] + ':' + mw.config.get('wgTitle'),
								text: newtalktext,
								summary: editsummary,
								token: mw.user.tokens.get('editToken')
							}).done( 
								function( data ) {
									mw.notify( $( '<span>На страницу обсуждения был поставлен шаблон \{\{оставлено}}. <a href="javascript:location.reload()">Перезагрузить страницу</a></span>' ) );
								}
							);
						}
					);
					
				}
			);
		}
	);
	
}