Участник:Absconditus/rfd.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Страница персонального оформления. У этого JS-кода есть документация: Участник:Absconditus/rfd.
После сохранения очистите кэш браузера.
/* 
 * Скрипт для упрощенного вынесения на удаление статьи в Википедии: добавляет шаблон на страницу, создаёт тему на КУ. 
 * Документация: https://ru.wikipedia.org/wiki/Участник:Absconditus/rfd
 * Лицензия: GNU GPL
 * Версия: 1.9 06.05.2012
 * Автор — анонимный разработчик, связь — xzs.jx@yandex.ru
*/
 
rfd = {
	$token: null,
	$reason: null,
	rfdPageExists: null,
 
	insert_tag: function(text) {
		var textbox = $( "#rfd-reason" );
		textbox.textSelection( 'encapsulateSelection', { 'pre' : text } );
	},
 
	show_window: function() {
		var $window = '<div xmlns="http://www.w3.org/1999/xhtml" id="rfd-window" style="background: white; border:1px double black; padding: 15px; position: fixed; top: 150px; left: 400px; z-index: 2"><table>' +
			'<tr><td>Страница RfD:</td><td>' + this._rfd_page() + '</td></tr>' +
                                          '<tr><td>Страница:</td><td>' + this._xe( mw.config.get('wgPageName') ) + '</td></tr>' +
                                          '<tr><td>Быстрая вставка:</td><td style="font-size:90%">' + '<a onclick="rfd.insert_tag(\'|\');return false" href=\"#\">|</a> <a onclick="rfd.insert_tag(\'[[ВП:ОКЗ]]\');return false" href=\"#\">[[ВП:ОКЗ]]</a> <a onclick="rfd.insert_tag(\'[[ВП:ЧНЯВ]]\');return false" href=\"#\">[[ВП:ЧНЯВ]]</a> <a onclick="rfd.insert_tag(\'[[ВП:МТФ]]\');return false" href=\"#\">[[ВП:МТФ]]</a> <a onclick="rfd.insert_tag(\'[[ВП:МТМР]]\');return false" href=\"#\">[[ВП:МТМР]]</a> <a onclick="rfd.insert_tag(\'[[ВП:НЕГУЩА]]\');return false" href=\"#\">[[ВП:НЕГУЩА]]</a> <a onclick="rfd.insert_tag(\'[[ВП:ПРОВ]]\');return false" href=\"#\">[[ВП:ПРОВ]]</a> <a onclick="rfd.insert_tag(\'[[ВП:БИО]]\');return false" href=\"#\">[[ВП:БИО]]</a> <a onclick="rfd.insert_tag(\'[[ВП:АИ]]\');return false" href=\"#\">[[ВП:АИ]]</a></td></tr>' +
                        (($("#rfd-replace-sd-tmpl").is(':checked')) ? '<tr><td>Автоматически добавленный к номинации текст: «С быстрого удаления.».</td></tr>' : '') + 
			'<tr><td>Причина</td><td>' + '<textarea id="rfd-reason" rows="4" cols="60"></textarea></td></tr>' +
                                          '<tr><td></td><td><input type="checkbox" id="rfd-replace-sd-tmpl" />Перенести с быстрого (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/rfd.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' + 
                                          '<tr><td></td><td><input type="checkbox" id="rfd-replace-afi-tmpl" />Перенести с КУЛ (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/rfd.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' + 
                                          '<tr><td></td><td><input type="checkbox" id="rfd-forcewrap" />Принудительно обернуть шаблон КУ в тег &lt;noinclude&gt; (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/rfd.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' +
                                          '<tr><td></td><td><input type="checkbox" id="rfd-watch" />Следить за номинированной страницей (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/rfd.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' + 
			'<tr><td><input type="button" id="rfd-confirm" value="ОК" /><input type="button" id="rfd-cancel" value="Отмена" />' +
			'</td></tr></table></div>';
		$( '#bodyContent' ).append( $.parseXML( $window ).firstChild );
		$( '#rfd-confirm' )[0].onclick = function() { rfd.execute() };
		$( '#rfd-cancel' )[0].onclick = function() {
			$( 'div#rfd-window' ).remove();
		};
	},
 
	execute: function() {
		this.$reason = $( '#rfd-reason' ).val();
		var titleParam = encodeURIComponent( this._rfd_page() );
		$.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&intoken=edit&titles=' + titleParam, function( $x ) { rfd.process_page( $x ) });
	},
 
	process_page: function( $data ) {
		for( var $i in $data['query']['pages'] ) {
			this.$token = $data['query']['pages'][$i]['edittoken'];
			this.rfdPageExists = $data.query.pages[$i].missing === undefined;
		}
		$.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=parse&page=' + this._ae(mw.config.get('wgPageName')) + '&prop=wikitext', function( $data ) {
			if( typeof $data['parse'] == 'undefined' ) { alert( 'Статья уже не существует.' ); return false }
			var $content = $data['parse']['wikitext']['*'];
			if( $content.match( /\{\{к удалению\|(.+)\}\}\n/ig ) ) { alert( 'На статье уже стоит шаблон удаления.' ); return false }
			var $template = ((mw.config.get('wgNamespaceNumber') != 10 && $('#rfd-forcewrap').is(':checked')) ? '<' + 'noinclude>' : '') + '{' + '{subst:afdd}}\n' + ((mw.config.get('wgNamespaceNumber') != 10 && $('#rfd-forcewrap').is(':checked')) ? '<' + '/noinclude>' : '');
			$.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', title: mw.config.get('wgPageName'), notminor: '1', watchlist: ( $('#rfd-watch').is(':checked') ? 'watch' : 'nochange'), summary: (($('#rfd-replace-sd-tmpl').is(':checked')) ? 'С ' + (($('#rfd-replace-afi-tmpl').is(':checked')) ? 'КУЛ' : 'быстрого') + ' на медленное' : 'Страница вынесена на') + ' удаление: [[' + rfd._rfd_page() + '#' + mw.config.get('wgPageName') + '|тема]] ([[user talk:Absconditus/rfd.js|RfD.js]])',
				token: rfd.$token, text: ( ($('#rfd-replace-sd-tmpl').is(':checked') ) ? $content.replace(/\{\{((db|уд)-.*|deleteslow\|1\=.*\|2\=.*)\}\}/ig, $template) : ($content.match(/\{\{(hangon|hang-on)\}\}/ig) ? $content.replace(/\{\{(hangon|hang-on)\}\}\n/ig, '') : (($('#rfd-replace-afi-tmpl').is(':checked')) ? $content.replace(/\{\{К\sулучшению\|.*\}\}/ig, $template) : $template + $content ) ) ), basetimestamp: rfd._ts(), format: 'json' }, function( $x ) { rfd.process_rfd( $x ) });
		});
	},
 
	process_rfd: function( $data ) {
		if( $data && $data['edit'] && $data['edit']['result'] == 'editconflict' ) { alert( 'Конфликт правок. Запустите скрипт ещё раз.' ); return false }
		var $h2 = mw.config.get('wgPageName').replace( /_/g, ' ' );
		var $n = '\n\n== [[' + ( ( mw.config.get('wgNamespaceNumber') == 14 || mw.config.get('wgNamespaceNumber') == 6 ) ? ':' : '' ) + $h2 + ']] ==\n'+ (($('#rfd-replace-sd-tmpl').is(':checked')) ? 'Перенесено с быстрого удаления. ' : (($('#rfd-replace-afi-tmpl').is(':checked')) ? 'Перенесено с КУЛ. ' : '')) + rfd.$reason + ' ~~' + '~~';
		            $.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', title: rfd._rfd_page(), notminor: '1', summary: (($('#rfd-replace-sd-tmpl').is(':checked')) ? 'с быстрого ' : (($('#rfd-replace-afi-tmpl').is(':checked')) ? 'С КУЛ ' : '')) + '\/*' + $h2 + '*\/ новая тема (с помощью [[user talk:Absconditus/rfd.js|RfD.js]])', token: rfd.$token, appendtext: (!rfd.rfdPageExists ? '\{\{ВПКУ-навигация\}\}' : '') + $n }, function() { window.location = mw.config.get('wgServer') + '/wiki/' + rfd._rfd_page() + '#' + mw.config.get('wgPageName') });
	},
 
	_rfd_page: function() {
		var $date = new Date();
		return this._xe( 'Википедия:К_удалению/' + $date.getUTCDate() + ' ' + ( this._months[$date.getUTCMonth()] ) + 
			' ' + $date.getUTCFullYear() );
	},
 
	_xe: function( $i ) {
		return $i.replace(/\&/g,'&'+'amp;').replace(/</g,'&'+'lt;')
			.replace(/>/g,'&'+'gt;').replace(/\'/g,'&'+'apos;').replace(/\"/g,'&'+'quot;');
	},
        _ae: function( $i ) {
                return $i.replace(/\+/g,'%2B').replace(/&/g,'%26');
        },
 
	_ts: function() {
                var $d = new Date();
                var $m = $d.getUTCMonth()+1;
                return $d.getUTCFullYear()+'-'+($m<10?'0'+$m:$m)+'-'+$d.getUTCDate()+'T'+$d.getUTCHours()+':'+$d.getUTCMinutes()+':'+$d.getUTCSeconds()+'Z';
},
 
	_months: [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ]
},
 
$( function() {
	if( mw.config.get('wgCanonicalNamespace') != 'Special' && mw.config.get('wgArticleId') && $('#ca-viewsource').length === 0) {
		mw.loader.using('mediawiki.util').done(function(){
			mw.util.addPortletLink("p-cactions", "javascript: rfd.show_window()", "КУ", "ca-rfd", "Вынести на удаление");
		});
	}
});
 
mw.loader.load( 'jquery.textSelection', 'text/javascript', false );