function deletePage(){
if( window.disableDelScript ) return;
//"reason" <input> → <textarea>
$( '#wpReason' ).replaceWith(
$( '<textarea>' )
.attr( {
id: 'wpReason',
name: 'wpReason',
rows: '3',
maxlength: '500'
}
)
.val( $( '#wpReason' ).val() )
);
var dropdown = $( '#wpDeleteReasonList' ),
reason = $( '#wpReason' ),
frm = dropdown.closest( 'form' );
if ( !dropdown[0] || !reason[0] ) return;
//"script info" link
$( '<a href="https://ru.wikipedia.org/wiki/MediaWiki_talk:Gadget-common-action-delete.js#Документация">Про скрипт</a><span> | </span>' )
.prependTo( '.mw-delete-editreasons' );
//append "special" buttons
$ ( '<div>' )
.attr( 'id', 'deletePage-summaryButtons' )
.appendTo( $( '#wpWatch' ).closest( 'div' ) );
$( '<input>' )
.attr( {
title: 'Вставить в поле причины',
value: '[[]]',
type: 'button'
}
)
.click( function(){ $( '#wpReason' ).val( $( '#wpReason' ).val() + '[[]]' ) })
.appendTo( '#deletePage-summaryButtons' );
//automatic summary preview
updatePreviewInput = reason;
updatePreviewOutput = $( '<div>' )
.attr( 'id', 'deletePage-summaryPreview' )
.insertAfter( '#wpReason' );
reason.on( 'keyup mouseup', function(){
updateSummary();
});
//simplify dropdown list
dropdown.find( 'option' ).each( function( i, opt ){
if( i==0 ) return;
opt.title = opt.value;
opt.text = opt.value.replace(/\[\[[^|]+\|([^\]]+)\]\]/,'$1');
});
var delTemplates = {
'О1':'бессвязно|nonsense|абсурд|nocontext',
'О2':'тест|test',
'О3':'ванд|vand|вандал|vandal|attack ',
'О4':'повторно|repost',
'О5':'автор|author',
'О6':'обсужд|talk|doc|док|под|sub|обс|обсуждение|related',
'О7':'переим|move|переименование|rename',
'О8':'дубль|fork',
'О9':'спам|реклама|spam',
'О10':'badtalk',
'О11':'copyvio|копивио',
'С1':'пусто|empty|deleteslow',
'С2':'иностр|foreign|badtranslt',
'С3':'ссылки|nocontent',
'С5':'нз|nn|незначимо',
'П1':'в никуда|redirect|redirnone',
'П2':'межпространственный|redirspace',
'П3':'опечатка|ошибка|redirtypo',
'П4':'падеж|redirflect',
'П5':'смысл|redirsense',
'П6':'redirtalk',
'К1':'пусткат|catempty|emptycat',
'К2':'перекат|rencat',
'У1':'владелец|owner|self|user',
'У2':'anon|анон',
'У3':'несущ|nouser',
'У4':'нецелевое|baduserpage',
'У5':'неактив|inactive'
};
//try to select the reason automatically ...
var dbReason, ma, str_reason;
function selectReason() {
var result = false;
if( ma = /\{\{\s*(db|уд)-?([\wа-яА-Я\s]+)(?:\|\s*([а-яА-Я]+))?.*(?:\}\}|…\*\/)/i.exec( reason.val().replace( "Deleteslow", "db-deleteslow" ) ) ) {
dbReason = '|' + ma[2].toLowerCase();
var freason = '';
if ( ma[3] != undefined ) {
freason = ma[3].toLowerCase();
}
for (var name in delTemplates)
if ( ( '|'+delTemplates[name] ).indexOf( dbReason ) != -1 ) {
if ( ( name === 'К1' ) && freason != '' ) {
if ( freason == 'переименована' ) {
selectLabel( '', ' согласно шаблону «' + ma[1] + '-' + ma[2] + '»', 'Переименована' );
} else if ( freason == 'пустая' ) {
selectLabel( name, ' согласно шаблону «' + ma[1] + '-' + ma[2] + '»', freason );
} else if ( freason == 'разобранная' ) {
selectLabel( name, ' согласно шаблону «' + ma[1] + '-' + ma[2] + '»', freason );
} else {
selectLabel( name, ' согласно шаблону «' + ma[1] + '-' + ma[2] + '»' );
}
} else {
selectLabel( name, ' согласно шаблону «' + ma[1] + '-' + ma[2] + '»' );
}
result = true;
break;
}
}
return result;
}
//from URL param (added by MediaWiki:Group-sysop.js)
if( dbReason = mw.util.getParamValue( 'dbreason' ) ){
if (! ( ( dbReason === 'К1' ) && selectReason() ) ) {
selectLabel( dbReason, 'согласно шаблону удаления' );
}
//from db-template inside quote
} else if ( selectReason() ) {
//from {К удалению|2010-03-18} inside quote
} else if( ma = /\{\{(КУ|к удалению) *\| *(\d\d\d\d)-(\d?\d)-(\d?\d)/i.exec( reason.val() ) ){
reason.val(
'согласно \[\[ВП:К удалению/'
+ ma[4].replace(/^0/,'')+' '
+ 'января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря'
.split('|')[parseInt(ma[3],10)-1]
+ ' '+ma[2]
+ '#'+mw.config.get('wgPageName').replace(/_/g, ' ')+']]'
);
mw.notify( 'вставлена ссылка на ВП:КУ' );
// for talk page, except user_talk
} else if( mw.config.get( 'wgNamespaceNumber' ) %2 && mw.config.get( 'wgNamespaceNumber' ) != 3 ){
if( $( '#ca-talk' ).prev().hasClass( 'new' ) && ! /wpreason=/i.test( document.URL ) )
selectLabel( 'О6' ); //orphaned talk page
else if( /# *(redirect|перенаправление) *\[\[обсужден/i.test(reason.val()) )
selectLabel( 'П6' ); //redirect talk page
}
if( mw.config.get( 'wgNamespaceNumber' ) == 6 ) return; //nothing to do: there is no /*quote*/ when deleting a file
var rxQuote = /\/\* *(.*?) *\*\/ ?/, oldQuote = '';
// /*text quote*/ : automatically remove on "vandalism" reasons
dropdown.change (function (){
removeBadQuote();
});
removeBadQuote(); //also remove on load
// /*text quote*/ : manually toggle with "x" button
if ( rxQuote.test( reason.val() ) )
$( '<input>' )
.attr( {
id: 'btn-quote',
type: 'button',
value: 'Убрать цитату',
title: 'Убрать или добавить начало удаляемой страницы в описание причины удаления'
}
)
.click( function(){ toggleQuote(); reason.focus() } )
.appendTo( '#deletePage-summaryButtons' );
//remove dropdown groups that cannot be used
var hideGroup = function (lbl){
dropdown.find( 'optgroup[label="'+lbl+'"]' ).children().remove();
};
if ( mw.config.get( 'wgNamespaceNumber' ) != 0 && mw.config.get( 'wgNamespaceNumber' ) != 102
&& !/википедия:.*(инкубатор|черновик)/i.test( mw.config.get( 'wgPageName' ) ) ) hideGroup ( 'Статьи' );
// Если страница была связана с викиданными, вставляем ссылку на элемент
try {
var wikibase=document.getElementById('t-wikibase').getElementsByTagName('a')[0].href.match('Q[0-9]*');
var rr = ' ([[d:' + wikibase + '|' + wikibase + ']])';
reason.val(reason.val()+ rr);
} catch(e) {}
// Если удаляемая страница перенаправление, то вставляем перенаправление в поле причины удаления
var api = new mw.Api();
var params = {
action: 'query',
prop: 'revisions',
titles: mw.config.get('wgPageName'),
rvprop: 'content',
formatversion: 2
};
api.get(params).done(function(data){
var wikitext = data.query.pages[0].revisions[0].content;
var redirect = wikitext.match(/# *(redirect|перенаправление) *\[\[(.*)\]\]/i);
if (redirect) {
var rr = ' (перенаправление на [[' + redirect[2] + ']])';
reason.val(reason.val()+ rr);
// В этом случае содержание страницы скорее всего не нужно
toggleQuote(true);
}
});
updateSummary();
return;
// FUNC
function selectLabel( name, msg, rsn ) {
var pattern = 'option[value*="';
if ( ( name == '' ) && ( rsn != undefined ) ) {
pattern = pattern + rsn;
} else {
pattern = pattern + name + ']]:';
if ( rsn != undefined ) {
pattern = pattern + ' ' + rsn;
}
}
pattern = pattern + '"]';
var opt = dropdown.find( pattern ).first();
if( opt.length == 0 )
return;
opt.attr( 'selected', 'selected' );
reason.focus();
mw.notify( 'выбран ' + opt[0].label + ' ' + ( msg||'' ) );
}
function toggleQuote( isRemove ) {
if ( isRemove == undefined ) isRemove = ( oldQuote == '' ); //toggle button
var rr = reason.val();
if ( isRemove && ( oldQuote = rxQuote.exec(rr) ) ) {
oldQuote = oldQuote[0]
rr = rr.replace( rxQuote, '' )
mw.notify( 'Цитата убрана' )
$('#btn-quote').val('Восстановать цитату')
} else if ( !isRemove && oldQuote && ! rxQuote.test(rr) ) { //restore
rr = oldQuote + rr
oldQuote = ''
mw.notify( 'Цитата восстановлена' )
$('#btn-quote').val('Убрать цитату')
}
reason.val( rr );
updateSummary();
}
function removeBadQuote(){
if ( /вандализм/.test( dropdown.val() ) ) {
reason.val( reason.val().replace(/\(перенаправление на [^\]]*?\]\]\)/gi , '') )
}
toggleQuote( /вандализм/.test( dropdown.val() ) || /перенаправление на/.test( reason.val() ))
}
function updateSummary (e) {
var p1 = dropdown.val()
if( p1 == 'other' ) p1 = ''
var p2 = reason.val()
var text = p1 + (p1 && p2 ? ': ' : '') + p2
var leftN = 255 - text.length
updateSummaryPreview(text)
if ( leftN >= 0 || e == 0 ) return
reason.val( reason.val().replace( rxQuote, function( s, q ) {
var newLen = q.length - (- leftN) - 6
if ( newLen >= 10 ) return '/*' + q.substring( 0, newLen ) + '…*/ '
else return ''
}))
updateSummary(0)
}
}//main
//needs global vars: updatePreviewInput, updatePreviewOutput
function updateSummaryPreview( text, maxChars ){
//preview
text = text
.replace(/ +/g, ' ')
.replace(/</g,'<')
.replace(/\/\* *(.*?) *\*\//, '<span class=autocomment>$1</span>') // /* text */
.replace(/\[\[:?([^\]><}{|]+)\|?([^\]><]*)?\]\]([a-zа-я]*)/gi, function(str,p1,p2, tail){ //[ [ p1 | p2 ] ]
if ( !p2 ) p2 = p1
if ( tail ) p2 += tail
return '<a href='+mw.config.get('wgServer')+'/wiki/' + encodeURI(p1.replace(/\?/g,'%3F').replace(/&/g,'%26'))
+' title=\'' + p1 + '\'>' + p2 + '</a>' })
updatePreviewOutput.html((text || ' '))
}
mw.loader.using( 'mediawiki.util' ).done( function () {
mw.hook( 'wikipage.content' ).add( deletePage );
} );