Участник:Vlsergey/simpleku.js

Материал из Википедии — свободной энциклопедии
( function() {
	if ( typeof ( wfAnchorEncode ) != "function" ) {
		function wfAnchorEncode( str ) {
			str = encodeURIComponent( str );
			str = str.replace( /%/g, "." );
			str = str.replace( /\.20/g, "_" );
			str = str.replace( /\.3A/g, ":" );
			return str;
		}
	}

	var wgKeepPage = {
		'newtext': '',
		'talktext': '',
		'editsummary': '',
		'edittoken': '',
	};

	wgKeepPage.addKeepTab = function() {
		if ( !document.getElementById( 'request_for_deletion' ) )
			return;

		var portletLink = mw.util.addPortletLink( 'p-cactions', '#', 'Оставить', 'ca-keep', 'Снять эту страницу с удаления' );

		// Bind click handler
		$( portletLink ).click( function( e ) {
			e.preventDefault();
			wgKeepPage.keepPage();
		} );
	};

	wgKeepPage.keepPage = function() {
		var api = new mw.Api();

		jsMsg( 'Получение текста страницы...' );
		api.get( {
			action: 'query',
			prop: 'revisions',
			rvprop: 'content',
			pageids: mw.config.get( 'wgArticleId' ),
		} ).done(
				function( response ) {
					var pgtext = response.query.pages[mw.config.get( 'wgArticleId' )].revisions[0]['*'];

					var rfdRegex = /(?:\s*<\s*noinclude\s*>)?\s*\{\{\s*(КУ|К удалению)\s*\|\s*\d{4}-\d{2}-\d{2}\s*\}\}\s*(?:<\/noinclude>\s*)?/ig;
					var matches = pgtext.match( rfdRegex );
					if ( matches.length < 1 ) {
						alert( 'Не найдена пометка {{' + 'к удалению}}' );
						return;
					}
					var date = matches[0].match( /(\d{4})-(\d{2})-(\d{2})/ );
					wgKeepPage.newtext = pgtext.replace( rfdRegex, "" );
					wgKeepPage.talktext = "{{оставлено|" + date[0] + "}}\n";
					wgKeepPage.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, ' ' ) + ']]';

					jsMsg( 'Сохранение нового текста статьи...' );
					api.postWithEditToken( {
						action: 'edit',
						title: mw.config.get('wgPageName'),
						summary: wgKeepPage.editsummary,
						text: wgKeepPage.newtext,
					} ).done( function() {
						jsMsg( 'Шаблон «К удалению» снят. ' + '<a href="javascript:location.reload()">Перезагрузить страницу</a>' );
					} );

					{
						var title;
						if ( mw.config.get('wgNamespaceNumber') == 0 ) {
							title = "Обсуждение:" + mw.config.get('wgTitle');
						} else if ( mw.config.get('wgNamespaceNumber') == 2 ) {
							title = "Обсуждение участника:" + mw.config.get('wgTitle');
						} else if ( mw.config.get('wgNamespaceNumber') == 4 ) {
							title = "Обсуждение Википедии:" + mw.config.get('wgTitle');
						} else if ( mw.config.get('wgNamespaceNumber') == 6 ) {
							title = "Обсуждение файла:" + mw.config.get('wgTitle');
						} else if ( mw.config.get('wgNamespaceNumber') == 10 ) {
							title = "Обсуждение шаблона:" + mw.config.get('wgTitle');
						} else if ( mw.config.get('wgNamespaceNumber') == 14 ) {
							title = "Обсуждение категории:" + mw.config.get('wgTitle');
						} else {
							jsMsg( 'Страница была успешно снята с удаления. <a href="javascript:location.reload()">Перезагрузить страницу</a>' );
							return;
						}

						api.postWithEditToken( {
							action: 'edit',
							title: title,
							summary: wgKeepPage.editsummary,
							prependtext: wgKeepPage.talktext
						} ).done( function() {
							jsMsg( 'На страницу обсуждения был поставлен шаблон {{' + 'оставлено}}. ' + '<a href="javascript:location.reload()">Перезагрузить страницу</a>' );
						} );
					}
				} ).fail( function( error ) {
			console.log( arguments );
			jsMsg( 'Не удалось получить текст страницы.' );
		} );

	};

	addOnloadHook( wgKeepPage.addKeepTab );
} )();